Compare commits
	
		
			53 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| a4d006adef | |||
| 98926fbdd0 | |||
| a1a2289e18 | |||
| 057cbf1691 | |||
| 0b05cbeba1 | |||
| ed5dad3066 | |||
| 76cce316a2 | |||
| 7c152b4f60 | |||
| 79c831c616 | |||
| 6b27c82b86 | |||
| 2cc5047dda | |||
| 08ab8c2137 | |||
| 9ddd962c2c | |||
| a8c07bd7f3 | |||
| 1fcf78bb47 | |||
| 167265944d | |||
| 7ef931026e | |||
| bef2a0b3fa | |||
| 8d6f12f5a9 | |||
| bf6fc3fcff | |||
| 11c73f1086 | |||
| 62e4795000 | |||
| 2f92ba003b | |||
| c19b80adbd | |||
| 1812296bc3 | |||
| cfb3ced261 | |||
| 77c7d1db8e | |||
| eb9f03c5c1 | |||
| 16d0c1759d | |||
| 922afb4e69 | |||
| d22017e1a1 | |||
| 1ea7d2ca8b | |||
| 3cd8632c61 | |||
| b425eac181 | |||
| 4b2d516258 | |||
| defd0c7ad6 | |||
| cf0cd1772e | |||
| 761ccf7644 | |||
| 5684aab444 | |||
| df8d8fb4a0 | |||
| be5fa4af09 | |||
| f0b84c0442 | |||
| f0262f3cbd | |||
| 1905aef7d7 | |||
| 0a80e2b4e1 | |||
| 4679c59de0 | |||
| f308217f62 | |||
| 0cd97b0b1d | |||
| a4956dba6e | |||
| 8738706db2 | |||
| 5ca22931dd | |||
| 652ddcd3a9 | |||
| 7c60916356 | 
							
								
								
									
										177
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										177
									
								
								Makefile
									
									
									
									
									
								
							| @@ -1,60 +1,50 @@ | |||||||
| VERSION=0.11 | VERSION=0.13 | ||||||
|  |  | ||||||
| CHROOT_VERSION=0.9 | CHROOT_VERSION=0.9 | ||||||
|  |  | ||||||
| TOOLS = artools | TOOLS = artools | ||||||
| PREFIX ?= /usr/local | PREFIX ?= /usr | ||||||
| SYSCONFDIR = /etc | SYSCONFDIR = /etc | ||||||
| BINDIR = $(PREFIX)/bin | BINDIR = $(PREFIX)/bin | ||||||
| LIBDIR = $(PREFIX)/lib | LIBDIR = $(PREFIX)/lib | ||||||
| DATADIR = $(PREFIX)/share | DATADIR = $(PREFIX)/share | ||||||
| CPIODIR = $(SYSCONFDIR)/initcpio | CPIODIR = $(SYSCONFDIR)/initcpio | ||||||
|  |  | ||||||
| SYSCONF = \ | CONF = \ | ||||||
| 	data/artools.conf | 	data/artools.conf | ||||||
|  |  | ||||||
| BIN_BASE = \ | BASE_BIN = \ | ||||||
| 	bin/mkchroot \ | 	bin/base/signfile \ | ||||||
| 	bin/basestrap \ | 	bin/base/chroot-run \ | ||||||
| 	bin/artools-chroot \ | 	bin/base/mkchroot \ | ||||||
| 	bin/fstabgen \ | 	bin/base/basestrap \ | ||||||
| 	bin/signfile \ | 	bin/base/artools-chroot \ | ||||||
| 	bin/chroot-run | 	bin/base/fstabgen | ||||||
|  |  | ||||||
| LIBS_BASE = \ | BASE_LIBS = \ | ||||||
| 	lib/util.sh \ | 	$(wildcard lib/base/*.sh) | ||||||
| 	lib/util-msg.sh \ |  | ||||||
| 	lib/util-mount.sh \ |  | ||||||
| 	lib/util-chroot.sh \ |  | ||||||
| 	lib/util-fstab.sh \ |  | ||||||
| 	lib/util-yaml.sh |  | ||||||
|  |  | ||||||
| SHARED_BASE = \ | BASE_UTIL = lib/util-base.sh | ||||||
| 	$(wildcard data/pacman*.conf) |  | ||||||
|  |  | ||||||
| BIN_PKG = \ | BASE_DATA = \ | ||||||
| 	bin/checkpkg \ | 	$(wildcard data/base/pacman*.conf) | ||||||
| 	bin/lddd \ |  | ||||||
| 	bin/finddeps \ |  | ||||||
| 	bin/find-libdeps \ |  | ||||||
| 	bin/mkchrootpkg \ |  | ||||||
| 	bin/buildpkg \ |  | ||||||
| 	bin/buildtree \ |  | ||||||
| 	bin/deploypkg \ |  | ||||||
| 	bin/commitpkg \ |  | ||||||
| 	bin/comparepkg \ |  | ||||||
| 	bin/pkg2yaml |  | ||||||
|  |  | ||||||
| LIBS_PKG = \ | PKG_BIN = \ | ||||||
| 	$(wildcard lib/util-pkg*.sh) | 	bin/pkg/buildpkg \ | ||||||
|  | 	bin/pkg/deploypkg \ | ||||||
|  | 	bin/pkg/commitpkg \ | ||||||
|  | 	bin/pkg/comparepkg \ | ||||||
|  | 	bin/pkg/checkpkg \ | ||||||
|  | 	bin/pkg/mkchrootpkg \ | ||||||
|  | 	bin/pkg/pkg2yaml \ | ||||||
|  | 	bin/pkg/buildtree \ | ||||||
|  | 	bin/pkg/lddd \ | ||||||
|  | 	bin/pkg/finddeps \ | ||||||
|  | 	bin/pkg/find-libdeps \ | ||||||
|  | 	bin/pkg/links-add \ | ||||||
|  | 	bin/pkg/sogrep | ||||||
|  |  | ||||||
| SHARED_PKG = \ | LN_COMMITPKG = \ | ||||||
| 	data/makepkg.conf |  | ||||||
|  |  | ||||||
| PATCHES = \ |  | ||||||
| 	$(wildcard data/patches/*.patch) |  | ||||||
|  |  | ||||||
| COMMITPKG_SYMS = \ |  | ||||||
| 	extrapkg \ | 	extrapkg \ | ||||||
| 	corepkg \ | 	corepkg \ | ||||||
| 	testingpkg \ | 	testingpkg \ | ||||||
| @@ -68,7 +58,7 @@ COMMITPKG_SYMS = \ | |||||||
| 	kde-unstablepkg \ | 	kde-unstablepkg \ | ||||||
| 	gnome-unstablepkg | 	gnome-unstablepkg | ||||||
|  |  | ||||||
| BUILDPKG_SYMS = \ | LN_BUILDPKG = \ | ||||||
| 	buildpkg-system \ | 	buildpkg-system \ | ||||||
| 	buildpkg-world \ | 	buildpkg-world \ | ||||||
| 	buildpkg-gremlins \ | 	buildpkg-gremlins \ | ||||||
| @@ -82,7 +72,7 @@ BUILDPKG_SYMS = \ | |||||||
| 	buildpkg-kde-wobble \ | 	buildpkg-kde-wobble \ | ||||||
| 	buildpkg-gnome-wobble | 	buildpkg-gnome-wobble | ||||||
|  |  | ||||||
| DEPLOYPKG_SYMS = \ | LN_DEPLOYPKG = \ | ||||||
| 	deploypkg-system \ | 	deploypkg-system \ | ||||||
| 	deploypkg-world \ | 	deploypkg-world \ | ||||||
| 	deploypkg-gremlins \ | 	deploypkg-gremlins \ | ||||||
| @@ -96,94 +86,127 @@ DEPLOYPKG_SYMS = \ | |||||||
| 	deploypkg-kde-wobble \ | 	deploypkg-kde-wobble \ | ||||||
| 	deploypkg-gnome-wobble | 	deploypkg-gnome-wobble | ||||||
|  |  | ||||||
| BIN_ISO = \ | PKG_LIBS = \ | ||||||
| 	bin/buildiso \ | 	$(wildcard lib/pkg/*) | ||||||
| 	bin/deployiso |  | ||||||
|  |  | ||||||
| BUILDISO_SYMS = \ | PKG_LISTS = \ | ||||||
|  | 	$(wildcard data/pkglists/*.list) | ||||||
|  |  | ||||||
|  | PKG_UTIL = lib/util-pkg.sh | ||||||
|  |  | ||||||
|  | PKG_DATA = \ | ||||||
|  | 	data/pkg/makepkg.conf | ||||||
|  |  | ||||||
|  | PATCHES = \ | ||||||
|  | 	$(wildcard data/patches/*.patch) | ||||||
|  |  | ||||||
|  | ISO_BIN = \ | ||||||
|  | 	bin/iso/buildiso \ | ||||||
|  | 	bin/iso/deployiso | ||||||
|  |  | ||||||
|  | LN_BUILDISO = \ | ||||||
| 	buildiso-gremlins \ | 	buildiso-gremlins \ | ||||||
| 	buildiso-goblins | 	buildiso-goblins | ||||||
|  |  | ||||||
| LIBS_ISO = \ | ISO_LIBS = \ | ||||||
| 	$(wildcard lib/util-iso*.sh) | 	$(wildcard lib/iso/*.sh) | ||||||
|  |  | ||||||
| SHARED_ISO = \ | ISO_UTIL = lib/util-iso.sh | ||||||
| 	data/mkinitcpio.conf |  | ||||||
|  | ISO_DATA = \ | ||||||
|  | 	data/iso/mkinitcpio.conf | ||||||
|  |  | ||||||
| DIRMODE = -dm0755 | DIRMODE = -dm0755 | ||||||
| FILEMODE = -m0644 | FILEMODE = -m0644 | ||||||
| MODE =  -m0755 | MODE =  -m0755 | ||||||
|  |  | ||||||
| LN = ln -sf | LN = ln -sf | ||||||
| RM = rm -f | RM = rm -f | ||||||
| M4 = m4 -P | M4 = m4 -P | ||||||
| CHMODAW = chmod a-w | CHMODAW = chmod a-w | ||||||
| CHMODX = chmod +x | CHMODX = chmod +x | ||||||
|  |  | ||||||
| all: $(BIN_BASE) $(BIN_PKG) $(BIN_ISO) | BIN = $(BASE_BIN) $(PKG_BIN) $(ISO_BIN) | ||||||
|  | UTIL = $(BASE_UTIL) $(PKG_UTIL) $(ISO_UTIL) | ||||||
|  |  | ||||||
| EDIT = sed -e "s|@datadir[@]|$(DATADIR)/$(TOOLS)|g" \ | all: $(BIN) $(UTIL) | ||||||
| 	-e "s|@sysconfdir[@]|$(SYSCONFDIR)/$(TOOLS)|g" \ |  | ||||||
| 	-e "s|@libdir[@]|$(LIBDIR)/$(TOOLS)|g" \ | EDIT_UTIL = sed -e "s|@datadir[@]|$(DATADIR)|g" \ | ||||||
| 	-e "s|@version@|$(VERSION)|" \ | 	-e "s|@sysconfdir[@]|$(SYSCONFDIR)|g" \ | ||||||
|  | 	-e "s|@libdir[@]|$(LIBDIR)|g" \ | ||||||
| 	-e "s|@chroot_version@|$(CHROOT_VERSION)|" | 	-e "s|@chroot_version@|$(CHROOT_VERSION)|" | ||||||
|  |  | ||||||
| %: %.in Makefile | EDIT_BIN = sed -e "s|@libdir[@]|$(LIBDIR)|g" | ||||||
|  |  | ||||||
|  | $(UTIL): %: %.in Makefile | ||||||
| 	@echo "GEN $@" | 	@echo "GEN $@" | ||||||
| 	@$(RM) "$@" | 	@$(RM) "$@" | ||||||
| 	@$(M4) $@.in | $(EDIT) >$@ | 	@$(M4) $@.in | $(EDIT_UTIL) >$@ | ||||||
|  | 	@$(CHMODAW) "$@" | ||||||
|  |  | ||||||
|  | $(BIN): %: %.in Makefile | ||||||
|  | 	@echo "GEN $@" | ||||||
|  | 	@$(RM) "$@" | ||||||
|  | 	@$(M4) $@.in | $(EDIT_BIN) >$@ | ||||||
| 	@$(CHMODAW) "$@" | 	@$(CHMODAW) "$@" | ||||||
| 	@$(CHMODX) "$@" | 	@$(CHMODX) "$@" | ||||||
|  |  | ||||||
| clean: | clean: | ||||||
| 	$(RM) $(BIN_BASE) $(BIN_PKG) $(BIN_ISO) | 	$(RM) $(BIN) $(UTIL) | ||||||
|  |  | ||||||
| install_base: | install_base: | ||||||
| 	install $(DIRMODE) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) | 	install $(DIRMODE) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) | ||||||
| 	install $(FILEMODE) $(SYSCONF) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) | 	install $(FILEMODE) $(CONF) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) | ||||||
|  |  | ||||||
| 	install $(DIRMODE) $(DESTDIR)$(BINDIR) | 	install $(DIRMODE) $(DESTDIR)$(BINDIR) | ||||||
| 	install $(MODE) $(BIN_BASE) $(DESTDIR)$(BINDIR) | 	install $(MODE) $(BASE_BIN) $(DESTDIR)$(BINDIR) | ||||||
|  |  | ||||||
| 	install $(DIRMODE) $(DESTDIR)$(LIBDIR)/$(TOOLS) | 	install $(DIRMODE) $(DESTDIR)$(LIBDIR)/$(TOOLS)/base | ||||||
| 	install $(FILEMODE) $(LIBS_BASE) $(DESTDIR)$(LIBDIR)/$(TOOLS) | 	install $(FILEMODE) $(BASE_UTIL) $(DESTDIR)$(LIBDIR)/$(TOOLS) | ||||||
|  | 	install $(FILEMODE) $(BASE_LIBS) $(DESTDIR)$(LIBDIR)/$(TOOLS)/base | ||||||
|  |  | ||||||
| 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS) | 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS) | ||||||
| 	install $(FILEMODE) $(SHARED_BASE) $(DESTDIR)$(DATADIR)/$(TOOLS) | 	install $(FILEMODE) $(BASE_DATA) $(DESTDIR)$(DATADIR)/$(TOOLS) | ||||||
|  |  | ||||||
| install_pkg: | install_pkg: | ||||||
| 	install $(DIRMODE) $(DESTDIR)$(BINDIR) | 	install $(DIRMODE) $(DESTDIR)$(BINDIR) | ||||||
| 	install $(MODE) $(BIN_PKG) $(DESTDIR)$(BINDIR) | 	install $(MODE) $(PKG_BIN) $(DESTDIR)$(BINDIR) | ||||||
|  |  | ||||||
| 	$(LN) find-libdeps $(DESTDIR)$(BINDIR)/find-libprovides | 	$(LN) find-libdeps $(DESTDIR)$(BINDIR)/find-libprovides | ||||||
|  |  | ||||||
| 	for l in $(COMMITPKG_SYMS); do $(LN) commitpkg $(DESTDIR)$(BINDIR)/$$l; done | 	$(LN) links-add $(DESTDIR)$(BINDIR)/links-remove | ||||||
| 	for l in $(BUILDPKG_SYMS); do $(LN) buildpkg $(DESTDIR)$(BINDIR)/$$l; done |  | ||||||
| 	for l in $(DEPLOYPKG_SYMS); do $(LN) deploypkg $(DESTDIR)$(BINDIR)/$$l; done |  | ||||||
|  |  | ||||||
| 	install $(DIRMODE) $(DESTDIR)$(LIBDIR)/$(TOOLS) | 	for l in $(LN_COMMITPKG); do $(LN) commitpkg $(DESTDIR)$(BINDIR)/$$l; done | ||||||
| 	install $(FILEMODE) $(LIBS_PKG) $(DESTDIR)$(LIBDIR)/$(TOOLS) | 	for l in $(LN_BUILDPKG); do $(LN) buildpkg $(DESTDIR)$(BINDIR)/$$l; done | ||||||
|  | 	for l in $(LN_DEPLOYPKG); do $(LN) deploypkg $(DESTDIR)$(BINDIR)/$$l; done | ||||||
|  |  | ||||||
|  | 	install $(DIRMODE) $(DESTDIR)$(LIBDIR)/$(TOOLS)/pkg | ||||||
|  | 	install $(FILEMODE) $(PKG_UTIL) $(DESTDIR)$(LIBDIR)/$(TOOLS) | ||||||
|  | 	install $(FILEMODE) $(PKG_LIBS) $(DESTDIR)$(LIBDIR)/$(TOOLS)/pkg | ||||||
|  |  | ||||||
| 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS) | 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS) | ||||||
| 	install $(FILEMODE) $(SHARED_PKG) $(DESTDIR)$(DATADIR)/$(TOOLS) | 	install $(FILEMODE) $(PKG_DATA) $(DESTDIR)$(DATADIR)/$(TOOLS) | ||||||
|  |  | ||||||
| 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches | 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches | ||||||
| 	install $(FILEMODE) $(PATCHES) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches | 	install $(FILEMODE) $(PATCHES) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches | ||||||
|  |  | ||||||
|  | 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/pkglists | ||||||
|  | 	install $(FILEMODE) $(PKG_LISTS) $(DESTDIR)$(DATADIR)/$(TOOLS)/pkglists | ||||||
| install_cpio: | install_cpio: | ||||||
| 	+make CPIODIR=$(CPIODIR) DESTDIR=$(DESTDIR) -C initcpio install | 	+make CPIODIR=$(CPIODIR) DESTDIR=$(DESTDIR) -C initcpio install | ||||||
|  |  | ||||||
| install_iso: install_cpio | install_iso: install_cpio | ||||||
| 	install $(DIRMODE) $(DESTDIR)$(BINDIR) | 	install $(DIRMODE) $(DESTDIR)$(BINDIR) | ||||||
| 	install $(MODE) $(BIN_ISO) $(DESTDIR)$(BINDIR) | 	install $(MODE) $(ISO_BIN) $(DESTDIR)$(BINDIR) | ||||||
|  |  | ||||||
| 	for l in $(BUILDISO_SYMS); do $(LN) buildiso $(DESTDIR)$(BINDIR)/$$l; done | 	for l in $(LN_BUILDISO); do $(LN) buildiso $(DESTDIR)$(BINDIR)/$$l; done | ||||||
|  |  | ||||||
| 	install $(DIRMODE) $(DESTDIR)$(LIBDIR)/$(TOOLS) | 	install $(DIRMODE) $(DESTDIR)$(LIBDIR)/$(TOOLS)/iso | ||||||
| 	install $(FILEMODE) $(LIBS_ISO) $(DESTDIR)$(LIBDIR)/$(TOOLS) | 	install $(FILEMODE) $(ISO_UTIL) $(DESTDIR)$(LIBDIR)/$(TOOLS) | ||||||
|  | 	install $(FILEMODE) $(ISO_LIBS) $(DESTDIR)$(LIBDIR)/$(TOOLS)/iso | ||||||
|  |  | ||||||
| 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS) | 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS) | ||||||
| 	install $(FILEMODE) $(SHARED_ISO) $(DESTDIR)$(DATADIR)/$(TOOLS) | 	install $(FILEMODE) $(ISO_DATA) $(DESTDIR)$(DATADIR)/$(TOOLS) | ||||||
|  |  | ||||||
| install: install_base install_pkg install_iso | install: install_base install_pkg install_iso | ||||||
|  |  | ||||||
| .PHONY: all clean install | .PHONY: all clean install install_base install_pkg install_iso | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ artools | |||||||
| #### Make flags | #### Make flags | ||||||
|  |  | ||||||
|  |  | ||||||
| * PREFIX=/usr/local (default if defined) | * PREFIX=/usr | ||||||
| * SYSCONFDIR=/etc | * SYSCONFDIR=/etc | ||||||
|  |  | ||||||
| #### Dependencies | #### Dependencies | ||||||
| @@ -28,6 +28,7 @@ artools | |||||||
| - pkg: | - pkg: | ||||||
|   * namcap |   * namcap | ||||||
|   * git-subrepo |   * git-subrepo | ||||||
|  |   * jshon | ||||||
|  |  | ||||||
| - iso: | - iso: | ||||||
|   * dosfstools |   * dosfstools | ||||||
|   | |||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -9,16 +12,9 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
| 
 | 
 | ||||||
| VERSION=@version@ |  | ||||||
| 
 |  | ||||||
| shopt -s extglob | shopt -s extglob | ||||||
| 
 | 
 | ||||||
| LIBDIR='@libdir@' | . @libdir@/artools/util-base.sh | ||||||
| SYSCONFDIR='@sysconfdir@' |  | ||||||
| 
 |  | ||||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh |  | ||||||
| import ${LIBDIR}/util.sh |  | ||||||
| import ${LIBDIR}/util-mount.sh |  | ||||||
| 
 | 
 | ||||||
| select_os(){ | select_os(){ | ||||||
|     local os_list=( $(detect) ) count=${#os_list[@]} |     local os_list=( $(detect) ) count=${#os_list[@]} | ||||||
| @@ -52,7 +48,7 @@ select_os(){ | |||||||
| 
 | 
 | ||||||
| load_user_info | load_user_info | ||||||
| 
 | 
 | ||||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||||
| 
 | 
 | ||||||
| automount=false | automount=false | ||||||
| 
 | 
 | ||||||
| @@ -1,4 +1,16 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
|  | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
|  | # This program is free software; you can redistribute it and/or modify | ||||||
|  | # it under the terms of the GNU General Public License as published by | ||||||
|  | # the Free Software Foundation; version 2 of the License. | ||||||
|  | # | ||||||
|  | # This program is distributed in the hope that it will be useful, | ||||||
|  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | # GNU General Public License for more details. | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
| # Assumptions: | # Assumptions: | ||||||
| @@ -8,17 +20,9 @@ | |||||||
| #  4) A valid mirror appears in /etc/pacman.d/mirrorlist | #  4) A valid mirror appears in /etc/pacman.d/mirrorlist | ||||||
| # | # | ||||||
| 
 | 
 | ||||||
| VERSION=@version@ |  | ||||||
| 
 |  | ||||||
| shopt -s extglob | shopt -s extglob | ||||||
| 
 | 
 | ||||||
| DATADIR='@datadir@' | . @libdir@/artools/util-base.sh | ||||||
| LIBDIR='@libdir@' |  | ||||||
| 
 |  | ||||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh |  | ||||||
| import ${LIBDIR}/util.sh |  | ||||||
| import ${LIBDIR}/util-mount.sh |  | ||||||
| import ${LIBDIR}/util-chroot.sh |  | ||||||
| 
 | 
 | ||||||
| copy_mirrorlist(){ | copy_mirrorlist(){ | ||||||
|     cp -a /etc/pacman.d/mirrorlist "$1/etc/pacman.d/" |     cp -a /etc/pacman.d/mirrorlist "$1/etc/pacman.d/" | ||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -9,16 +12,9 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
| 
 | 
 | ||||||
| VERSION=@version@ | chroot_version=0.9 | ||||||
| 
 | 
 | ||||||
| chroot_version=@chroot_version@ | . @libdir@/artools/util-base.sh | ||||||
| 
 |  | ||||||
| LIBDIR='@libdir@' |  | ||||||
| 
 |  | ||||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh |  | ||||||
| import ${LIBDIR}/util.sh |  | ||||||
| import ${LIBDIR}/util-chroot.sh |  | ||||||
| import ${LIBDIR}/util-mount.sh |  | ||||||
| 
 | 
 | ||||||
| working_dir='' | working_dir='' | ||||||
| files=() | files=() | ||||||
| @@ -75,9 +71,14 @@ else | |||||||
|     cache_dirs=("$cache_dir") |     cache_dirs=("$cache_dir") | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
|  | pacconf_cmd=$(command -v pacman-conf || command -v pacconf) | ||||||
|  | host_mirrors=($($pacconf_cmd --repo world Server 2> /dev/null | sed -r 's#(.*/)world/os/.*#\1$repo/os/$arch#')) | ||||||
|  |      | ||||||
| copy_hostconf () { | copy_hostconf () { | ||||||
|     cp -a /etc/pacman.d/gnupg "$1/etc/pacman.d" |     cp -a /etc/pacman.d/gnupg "$1/etc/pacman.d" | ||||||
|      |      | ||||||
|  |     printf 'Server = %s\n' "${host_mirrors[@]}" >"$working_dir/etc/pacman.d/mirrorlist" | ||||||
|  |      | ||||||
|     [[ -n $pacman_conf ]] && cp $pacman_conf "$1/etc/pacman.conf" |     [[ -n $pacman_conf ]] && cp $pacman_conf "$1/etc/pacman.conf" | ||||||
| 
 | 
 | ||||||
|     [[ -n $makepkg_conf ]] && cp $makepkg_conf "$1/etc/makepkg.conf" |     [[ -n $makepkg_conf ]] && cp $makepkg_conf "$1/etc/makepkg.conf" | ||||||
| @@ -108,6 +109,13 @@ chroot_extra_mount() { | |||||||
|     for m in ${bindmounts_rw[@]}; do |     for m in ${bindmounts_rw[@]}; do | ||||||
|         chroot_mount "${m%%:*}" "$1${m##*:}" -B |         chroot_mount "${m%%:*}" "$1${m##*:}" -B | ||||||
|     done |     done | ||||||
|  |      | ||||||
|  |     for host_mirror in "${host_mirrors[@]}"; do | ||||||
|  |         if [[ $host_mirror == *file://* ]]; then | ||||||
|  |             host_mirror_path=$(echo "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g') | ||||||
|  |             chroot_mount "$host_mirror_path" "$1$host_mirror_path" -Br | ||||||
|  |         fi | ||||||
|  |     done | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| umask 0022 | umask 0022 | ||||||
| @@ -115,8 +123,8 @@ umask 0022 | |||||||
| # Sanity check | # Sanity check | ||||||
| if [[ ! -f "$working_dir/.artools" ]]; then | if [[ ! -f "$working_dir/.artools" ]]; then | ||||||
|     die "'%s' does not appear to be an artix chroot." "$working_dir" |     die "'%s' does not appear to be an artix chroot." "$working_dir" | ||||||
| elif [[ $(cat "$working_dir/.artools") != $chroot_version ]]; then | elif [[ $(cat "$working_dir/.artools") != ${CHROOTVERSION} ]]; then | ||||||
|     die "chroot '%s' is not at version %s. Please rebuild." "$working_dir" "$chroot_version" |     die "chroot '%s' is not at version %s. Please rebuild." "$working_dir" "${CHROOTVERSION}" | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| chroot_api_mount "${working_dir}" || die "failed to setup API filesystems in chroot %s" "${working_dir}" | chroot_api_mount "${working_dir}" || die "failed to setup API filesystems in chroot %s" "${working_dir}" | ||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -9,14 +12,9 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
| 
 | 
 | ||||||
| VERSION=@version@ |  | ||||||
| 
 |  | ||||||
| shopt -s extglob | shopt -s extglob | ||||||
| 
 | 
 | ||||||
| LIBDIR='@libdir@' | . @libdir@/artools/util-base.sh | ||||||
| 
 |  | ||||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh |  | ||||||
| import ${LIBDIR}/util-fstab.sh |  | ||||||
| 
 | 
 | ||||||
| write_source() { | write_source() { | ||||||
|     local src=$1 spec= label= uuid= comment=() |     local src=$1 spec= label= uuid= comment=() | ||||||
| @@ -209,7 +207,7 @@ done | |||||||
| 
 | 
 | ||||||
|     while read -r device type _ _ prio; do |     while read -r device type _ _ prio; do | ||||||
|         options=defaults |         options=defaults | ||||||
|         if [[ $prio != -1 ]]; then |         if (( prio >= 0 )); then | ||||||
|             options+=,pri=$prio |             options+=,pri=$prio | ||||||
|         fi |         fi | ||||||
| 
 | 
 | ||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -9,15 +12,7 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
| 
 | 
 | ||||||
| VERSION=@version@ | . @libdir@/artools/util-base.sh | ||||||
| 
 |  | ||||||
| chroot_version=@chroot_version@ |  | ||||||
| 
 |  | ||||||
| LIBDIR='@libdir@' |  | ||||||
| 
 |  | ||||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh |  | ||||||
| import ${LIBDIR}/util.sh |  | ||||||
| import ${LIBDIR}/util-chroot.sh |  | ||||||
| 
 | 
 | ||||||
| working_dir='' | working_dir='' | ||||||
| files=() | files=() | ||||||
| @@ -102,7 +97,7 @@ done < <(declare -x | sed -r 's/^declare -x ([^=]*)=.*/\1/' | grep -i '_proxy$') | |||||||
| env -i "${_env[@]}" \ | env -i "${_env[@]}" \ | ||||||
| basestrap "${basestrap_args[@]}" ${pacman_conf:+-C "$pacman_conf"} "$working_dir" ${cache_dirs[@]/#/--cachedir=} "$@" || die 'Failed to install all packages' | basestrap "${basestrap_args[@]}" ${pacman_conf:+-C "$pacman_conf"} "$working_dir" ${cache_dirs[@]/#/--cachedir=} "$@" || die 'Failed to install all packages' | ||||||
| 
 | 
 | ||||||
| echo "$chroot_version" > "$working_dir/.artools" | echo "${CHROOTVERSION}" > "$working_dir/.artools" | ||||||
| 
 | 
 | ||||||
| if [[ ! -f "$working_dir/etc/locale.gen.orig" ]];then | if [[ ! -f "$working_dir/etc/locale.gen.orig" ]];then | ||||||
|     mv "$working_dir/etc/locale.gen" "$working_dir/etc/locale.gen.orig" |     mv "$working_dir/etc/locale.gen" "$working_dir/etc/locale.gen.orig" | ||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -9,16 +12,11 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
| 
 | 
 | ||||||
| VERSION=@version@ | . @libdir@/artools/util-base.sh | ||||||
| 
 |  | ||||||
| LIBDIR='@libdir@' |  | ||||||
| 
 |  | ||||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh |  | ||||||
| import ${LIBDIR}/util.sh |  | ||||||
| 
 | 
 | ||||||
| load_user_info | load_user_info | ||||||
| 
 | 
 | ||||||
| load_vars "${PAC_USERCONFDIR}/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||||
| load_vars /etc/makepkg.conf | load_vars /etc/makepkg.conf | ||||||
| 
 | 
 | ||||||
| file_to_sign="$1" | file_to_sign="$1" | ||||||
| @@ -28,9 +26,10 @@ if [ ! -e "$1" ]; then | |||||||
|     exit 1 |     exit 1 | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| msg2 "Signing [%s] with key %s" "${file_to_sign##*/}" "${GPGKEY}..." |  | ||||||
| if [[ -n "${BUILDBOT_GPGP}" ]]; then | if [[ -n "${BUILDBOT_GPGP}" ]]; then | ||||||
|  |     msg2 "Signing [%s]" "${file_to_sign##*/}" | ||||||
|     gpg --batch --passphrase "${BUILDBOT_GPGP}" --detach-sign "$file_to_sign" |     gpg --batch --passphrase "${BUILDBOT_GPGP}" --detach-sign "$file_to_sign" | ||||||
| else | else | ||||||
|  |     msg2 "Signing [%s] with key %s" "${file_to_sign##*/}" "${GPGKEY}..." | ||||||
|     gpg --detach-sign --use-agent -u "${GPGKEY}" "$file_to_sign" |     gpg --detach-sign --use-agent -u "${GPGKEY}" "$file_to_sign" | ||||||
| fi | fi | ||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -9,15 +12,8 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
| 
 | 
 | ||||||
| VERSION=@version@ | . @libdir@/artools/util-base.sh | ||||||
| 
 | . @libdir@/artools/util-iso.sh | ||||||
| LIBDIR='@libdir@' |  | ||||||
| DATADIR='@datadir@' |  | ||||||
| SYSCONFDIR='@sysconfdir@' |  | ||||||
| 
 |  | ||||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh |  | ||||||
| import ${LIBDIR}/util.sh |  | ||||||
| import ${LIBDIR}/util-iso.sh |  | ||||||
| 
 | 
 | ||||||
| prepare_build(){ | prepare_build(){ | ||||||
|     timer_start=$(get_timer) |     timer_start=$(get_timer) | ||||||
| @@ -31,7 +27,7 @@ prepare_build(){ | |||||||
|     esac |     esac | ||||||
| 
 | 
 | ||||||
|     pacman_conf="${DATADIR}/$pac_file" |     pacman_conf="${DATADIR}/$pac_file" | ||||||
|     [[ -f $AT_USERCONFDIR/$pac_file ]] && pacman_conf="$AT_USERCONFDIR/$pac_file" |     [[ -f ${USERCONFDIR}/artools/$pac_file ]] && pacman_conf="${USERCONFDIR}/artools/$pac_file" | ||||||
| 
 | 
 | ||||||
|     iso_file=$(gen_iso_fn).iso |     iso_file=$(gen_iso_fn).iso | ||||||
| 
 | 
 | ||||||
| @@ -99,7 +95,7 @@ build(){ | |||||||
| 
 | 
 | ||||||
| load_user_info | load_user_info | ||||||
| 
 | 
 | ||||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||||
| 
 | 
 | ||||||
| clean_first=true | clean_first=true | ||||||
| pretend=false | pretend=false | ||||||
| @@ -161,12 +157,12 @@ done | |||||||
| 
 | 
 | ||||||
| shift $(($OPTIND - 1)) | shift $(($OPTIND - 1)) | ||||||
| 
 | 
 | ||||||
| ${pretend} && display_settings && exit 1 |  | ||||||
| 
 |  | ||||||
| check_root | check_root | ||||||
| 
 | 
 | ||||||
| prepare_traps | prepare_traps | ||||||
| 
 | 
 | ||||||
| prepare_build | prepare_build | ||||||
| 
 | 
 | ||||||
|  | ${pretend} && display_settings && exit 1 | ||||||
|  | 
 | ||||||
| build | build | ||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -9,13 +12,7 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
| 
 | 
 | ||||||
| VERSION=@version@ | . @libdir@/artools/util-base.sh | ||||||
| 
 |  | ||||||
| LIBDIR='@libdir@' |  | ||||||
| SYSCONFDIR='@sysconfdir@' |  | ||||||
| 
 |  | ||||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh |  | ||||||
| import ${LIBDIR}/util.sh |  | ||||||
| 
 | 
 | ||||||
| connect(){ | connect(){ | ||||||
|     echo "${ACCOUNT}@${FILE_HOST}:${FILE_HOME}" |     echo "${ACCOUNT}@${FILE_HOST}:${FILE_HOME}" | ||||||
| @@ -35,7 +32,7 @@ sync_dir(){ | |||||||
| 
 | 
 | ||||||
| load_user_info | load_user_info | ||||||
| 
 | 
 | ||||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||||
| 
 | 
 | ||||||
| update=false | update=false | ||||||
| verbose=false | verbose=false | ||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -9,19 +12,12 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
| 
 | 
 | ||||||
| VERSION=@version@ | . @libdir@/artools/util-base.sh | ||||||
| 
 | . @libdir@/artools/util-pkg.sh | ||||||
| LIBDIR='@libdir@' |  | ||||||
| SYSCONFDIR='@sysconfdir@' |  | ||||||
| DATADIR='@datadir@' |  | ||||||
| 
 |  | ||||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh |  | ||||||
| import ${LIBDIR}/util.sh |  | ||||||
| import ${LIBDIR}/util-chroot.sh |  | ||||||
| 
 | 
 | ||||||
| load_user_info | load_user_info | ||||||
| 
 | 
 | ||||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||||
| 
 | 
 | ||||||
| create_first=false | create_first=false | ||||||
| 
 | 
 | ||||||
| @@ -38,10 +34,10 @@ case ${repo} in | |||||||
| esac | esac | ||||||
| 
 | 
 | ||||||
| pacman_conf="${DATADIR}/pacman-${repo}.conf" | pacman_conf="${DATADIR}/pacman-${repo}.conf" | ||||||
| [[ -f $AT_USERCONFDIR/pacman-${repo}.conf ]] && pacman_conf="$AT_USERCONFDIR/pacman-${repo}.conf" | [[ -f ${USERCONFDIR}/artools/pacman-${repo}.conf ]] && pacman_conf="${USERCONFDIR}/artools/pacman-${repo}.conf" | ||||||
| 
 | 
 | ||||||
| makepkg_conf="${DATADIR}/makepkg.conf" | makepkg_conf="${DATADIR}/makepkg.conf" | ||||||
| [[ -f $AT_USERCONFDIR/makepkg.conf ]] && makepkg_conf="$AT_USERCONFDIR/makepkg.conf" | [[ -f ${USERCONFDIR}/artools/makepkg.conf ]] && makepkg_conf="${USERCONFDIR}/artools/makepkg.conf" | ||||||
| 
 | 
 | ||||||
| usage() { | usage() { | ||||||
|     echo "Usage: ${0##*/} [options] -- [mkchrootpkg_args]" |     echo "Usage: ${0##*/} [options] -- [mkchrootpkg_args]" | ||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -9,38 +12,29 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
| 
 | 
 | ||||||
| VERSION=@version@ | . @libdir@/artools/util-base.sh | ||||||
| 
 | . @libdir@/artools/util-pkg.sh | ||||||
| LIBDIR='@libdir@' |  | ||||||
| SYSCONFDIR='@sysconfdir@' |  | ||||||
| DATADIR='@datadir@' |  | ||||||
| 
 |  | ||||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh |  | ||||||
| import ${LIBDIR}/util.sh |  | ||||||
| import ${LIBDIR}/util-pkg.sh |  | ||||||
| import ${LIBDIR}/util-pkg-gitea.sh |  | ||||||
| import ${LIBDIR}/util-pkg-subrepo.sh |  | ||||||
| 
 | 
 | ||||||
| pull_tree_arch(){ | pull_tree_arch(){ | ||||||
|     cd ${TREE_DIR_ARCH} |     cd ${TREE_DIR_ARCH} | ||||||
|     for tree in ${tree_names[@]};do |     for tree in ${TREE_NAMES_ARCH[@]};do | ||||||
|         if [[ -d ${tree} ]];then |         if [[ -d ${tree} ]];then | ||||||
|             cd ${tree} |             cd ${tree} | ||||||
|             pull_tree "${tree}" |             pull_tree "${tree}" "$(get_local_head)" "Arch" | ||||||
|             cd .. |             cd .. | ||||||
|         else |         else | ||||||
|             clone_tree "${HOST_TREE_ARCH}" "${tree}" |             clone_tree "${HOST_TREE_ARCH}" "${tree}" "Arch" | ||||||
|         fi |         fi | ||||||
|     done |     done | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pull_tree_artix(){ | pull_tree_artix(){ | ||||||
|     cd ${TREE_DIR_ARTIX} |     cd ${TREE_DIR_ARTIX} | ||||||
|     for tree in ${tree_names[@]};do |     for tree in ${TREE_NAMES_ARTIX[@]};do | ||||||
|         if [[ -d ${tree} ]];then |         if [[ -d ${tree} ]];then | ||||||
|             config_tree "${tree}" |             config_tree "${tree}" | ||||||
|             cd ${tree} |             cd ${tree} | ||||||
|             pull_tree "${tree}" |             pull_tree "${tree}" "$(get_local_head)" | ||||||
|             cd .. |             cd .. | ||||||
|         else |         else | ||||||
|             clone_tree "${HOST_TREE_ARTIX}" "${tree}" |             clone_tree "${HOST_TREE_ARTIX}" "${tree}" | ||||||
| @@ -59,13 +53,12 @@ sync_pkg(){ | |||||||
| show_deps(){ | show_deps(){ | ||||||
|     local src="$1" repo="$2" |     local src="$1" repo="$2" | ||||||
| 
 | 
 | ||||||
|     source $src/PKGBUILD 2>/dev/null |     . $src/PKGBUILD 2>/dev/null | ||||||
| 
 | 
 | ||||||
|     [[ $arch == 'any' ]] && CARCH=any |     [[ $arch == 'any' ]] && CARCH=any | ||||||
| 
 | 
 | ||||||
|     local archver=$(get_full_version $pkg) |     local archver=$(get_full_version $pkg) | ||||||
| 
 | 
 | ||||||
|     msg "git tree: %s" "$git_tree_arch" |  | ||||||
|     msg2 "repo: %s" "$repo" |     msg2 "repo: %s" "$repo" | ||||||
|     [[ -n ${pkgbase} ]] && msg2 "pkgbase: %s" "${pkgbase}" |     [[ -n ${pkgbase} ]] && msg2 "pkgbase: %s" "${pkgbase}" | ||||||
|     msg2 "pkgname: %s" "${pkgname[*]}" |     msg2 "pkgname: %s" "${pkgname[*]}" | ||||||
| @@ -89,22 +82,28 @@ from_arch(){ | |||||||
| 
 | 
 | ||||||
|     src=$package/repos/$repo |     src=$package/repos/$repo | ||||||
| 
 | 
 | ||||||
|     dest=${TREE_DIR_ARTIX}/$git_tree_arch/$pkg/trunk |     local git_tree_artix=$(find_tree "${TREE_DIR_ARTIX}" "$pkg") | ||||||
|  |     local tree_dir=$(get_artix_tree "$pkg" "$git_tree_artix" "$git_tree_arch") | ||||||
| 
 | 
 | ||||||
|  |     dest=${TREE_DIR_ARTIX}/$tree_dir/$pkg/trunk | ||||||
|  | 
 | ||||||
|  |     msg "tree: %s" "$tree_dir" | ||||||
|     show_deps "$src" "$repo" |     show_deps "$src" "$repo" | ||||||
| 
 | 
 | ||||||
|     if [[ -d $dest ]];then |     if [[ -d $dest ]];then | ||||||
|         cd ${TREE_DIR_ARTIX}/$git_tree_arch |  | ||||||
| 
 | 
 | ||||||
|         source $dest/PKGBUILD 2>/dev/null |         cd ${TREE_DIR_ARTIX}/$git_tree_artix | ||||||
|  | 
 | ||||||
|  |         . $dest/PKGBUILD 2>/dev/null | ||||||
|         local artixver=$(get_full_version $pkg) |         local artixver=$(get_full_version $pkg) | ||||||
| 
 | 
 | ||||||
|         msg2 "Artix Version: %s" "$artixver" |         msg2 "Artix Version: %s" "$artixver" | ||||||
|     else |     else | ||||||
|         subrepo_new "$pkg" "$git_tree_arch" |         subrepo_new "$pkg" "$tree_dir" "$git_tree_arch" | ||||||
|     fi |     fi | ||||||
| 
 | 
 | ||||||
|     info "Sync from archlinux (%s)" "$git_tree_arch" |     msg "Sync (%s) from [%s] to [%s]" "$pkg" "$git_tree_arch" "$tree_dir" | ||||||
|  | 
 | ||||||
|     sync_pkg "$src" "$dest" |     sync_pkg "$src" "$dest" | ||||||
|     patch_pkg "$pkg" |     patch_pkg "$pkg" | ||||||
| } | } | ||||||
| @@ -124,17 +123,18 @@ view_build(){ | |||||||
| 
 | 
 | ||||||
| sync_repos(){ | sync_repos(){ | ||||||
|     ${sync_arch} && pull_tree_arch |     ${sync_arch} && pull_tree_arch | ||||||
|     pull_tree_artix |     ${sync_artix} && pull_tree_artix | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| load_user_info | load_user_info | ||||||
| 
 | 
 | ||||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||||
| load_vars "${PAC_USERCONFDIR}/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||||
| load_vars /etc/makepkg.conf | load_vars /etc/makepkg.conf | ||||||
| 
 | 
 | ||||||
| sync=false | sync=false | ||||||
| sync_arch=true | sync_arch=true | ||||||
|  | sync_artix=true | ||||||
| import=false | import=false | ||||||
| view=false | view=false | ||||||
| createnew=false | createnew=false | ||||||
| @@ -142,21 +142,21 @@ conf=false | |||||||
| 
 | 
 | ||||||
| PACKAGE='' | PACKAGE='' | ||||||
| 
 | 
 | ||||||
| tree_names=(packages community) | TEAM=${TREE_NAMES_ARTIX[0]} | ||||||
| TEAM=${tree_names[0]} | GROUP=${TREE_NAMES_ARTIX[0]} | ||||||
| SUBORG='' |  | ||||||
| 
 | 
 | ||||||
| usage() { | usage() { | ||||||
|     echo "Usage: ${0##*/} [options]" |     echo "Usage: ${0##*/} [options]" | ||||||
|     echo '    -p <pkg>      Package name' |     echo '    -p <pkg>      Package name' | ||||||
|     echo '    -t <team>     Team name (only with -n)' |     echo '    -t <team>     Team name (only with -n)' | ||||||
|     echo "                  [default: ${TEAM}]" |     echo "                  [default: ${TEAM}]" | ||||||
|     echo '    -o <org>      Org of subrepo (only with -c)' |     echo '    -g <group>    Group name, the superrepo (only with -n)' | ||||||
|  |     echo "                  [default: ${GROUP}]" | ||||||
|     echo "    -s            Clone or pull repos" |     echo "    -s            Clone or pull repos" | ||||||
|     echo "    -z            Don't clone or pull arch repos" |     echo "    -z            Don't clone or pull arch repos" | ||||||
|  |     echo "    -y            Don't clone or pull artix repos" | ||||||
|     echo '    -i            Import a package from arch repos' |     echo '    -i            Import a package from arch repos' | ||||||
|     echo '    -n            Make new remote subrepo and clone it' |     echo '    -n            Make new remote subrepo and clone it' | ||||||
|     echo '    -c            Configure subrepo url' |  | ||||||
|     echo '    -v            View package depends' |     echo '    -v            View package depends' | ||||||
|     echo '    -h            This help' |     echo '    -h            This help' | ||||||
|     echo '' |     echo '' | ||||||
| @@ -166,19 +166,19 @@ usage() { | |||||||
| 
 | 
 | ||||||
| orig_argv=("$0" "$@") | orig_argv=("$0" "$@") | ||||||
| 
 | 
 | ||||||
| opts='p:t:o:csinzvh' | opts='p:t:g:sinzyvh' | ||||||
| 
 | 
 | ||||||
| while getopts "${opts}" arg; do | while getopts "${opts}" arg; do | ||||||
|     case "${arg}" in |     case "${arg}" in | ||||||
|         p) PACKAGE="$OPTARG" ;; |         p) PACKAGE="$OPTARG" ;; | ||||||
|         t) TEAM="$OPTARG" ;; |         t) TEAM="$OPTARG" ;; | ||||||
|         o) SUBORG="$OPTARG" ;; |         g) GROUP="$OPTARG" ;; | ||||||
|         s) sync=true ;; |         s) sync=true ;; | ||||||
|         z) sync_arch=false ;; |         z) sync_arch=false ;; | ||||||
|  |         y) sync_artix=false ;; | ||||||
|         i) import=true ;; |         i) import=true ;; | ||||||
|         n) createnew=true ;; |         n) createnew=true ;; | ||||||
|         v) view=true ;; |         v) view=true ;; | ||||||
|         c) conf=true ;; |  | ||||||
|         h|?) usage 0 ;; |         h|?) usage 0 ;; | ||||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; |         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||||
|     esac |     esac | ||||||
| @@ -195,6 +195,4 @@ ${view} && view_build "${PACKAGE}" | |||||||
| 
 | 
 | ||||||
| ${import} && from_arch "${PACKAGE}" | ${import} && from_arch "${PACKAGE}" | ||||||
| 
 | 
 | ||||||
| ${createnew} && subrepo_new "${PACKAGE}" "${TEAM}" | ${createnew} && subrepo_new "${PACKAGE}" "${GROUP}" "${TEAM}" | ||||||
| 
 |  | ||||||
| ${conf} && subrepo_config "${PACKAGE}" "${SUBORG}" |  | ||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -9,19 +12,14 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
| 
 | 
 | ||||||
| VERSION=@version@ | . @libdir@/artools/util-base.sh | ||||||
| 
 | . @libdir@/artools/util-pkg.sh | ||||||
| LIBDIR='@libdir@' |  | ||||||
| 
 |  | ||||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh |  | ||||||
| import ${LIBDIR}/util.sh |  | ||||||
| import ${LIBDIR}/util-pkg.sh |  | ||||||
| 
 | 
 | ||||||
| shopt -s extglob | shopt -s extglob | ||||||
| 
 | 
 | ||||||
| load_user_info | load_user_info | ||||||
| 
 | 
 | ||||||
| load_vars "${PAC_USERCONFDIR}/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||||
| load_vars /etc/makepkg.conf | load_vars /etc/makepkg.conf | ||||||
| 
 | 
 | ||||||
| if [[ ! -f PKGBUILD ]]; then | if [[ ! -f PKGBUILD ]]; then | ||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -9,37 +12,24 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
| 
 | 
 | ||||||
| VERSION=@version@ | . @libdir@/artools/util-base.sh | ||||||
| 
 | . @libdir@/artools/util-pkg.sh | ||||||
| LIBDIR='@libdir@' |  | ||||||
| SYSCONFDIR='@sysconfdir@' |  | ||||||
| DATADIR='@datadir@' |  | ||||||
| 
 |  | ||||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh |  | ||||||
| import ${LIBDIR}/util.sh |  | ||||||
| import ${LIBDIR}/util-pkg.sh |  | ||||||
| import ${LIBDIR}/util-pkg-subrepo.sh |  | ||||||
| 
 |  | ||||||
| is_valid_repo(){ |  | ||||||
|     local src="$1" |  | ||||||
|     case $src in |  | ||||||
|         core|extra|community|multilib|testing|staging|community-testing|community-staging|multilib-testing|multilib-staging|trunk) return 0 ;; |  | ||||||
|         *) return 1 ;; |  | ||||||
|     esac |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| commit_pkg(){ | commit_pkg(){ | ||||||
|     local git_tree=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}") |     local git_tree=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}") | ||||||
|     if [[ -n ${git_tree} ]];then |     if [[ -n ${git_tree} ]];then | ||||||
|  | 
 | ||||||
|  |         cd ${TREE_DIR_ARTIX}/${git_tree} | ||||||
|  | 
 | ||||||
|  |         local head=$(get_local_head) | ||||||
|  | 
 | ||||||
|         cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE} |         cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE} | ||||||
| 
 | 
 | ||||||
|         source trunk/PKGBUILD |         . trunk/PKGBUILD | ||||||
|         [[ $arch == 'any' ]] && CARCH=any |         [[ $arch == 'any' ]] && CARCH=any | ||||||
|         local ver=$(get_full_version "${PACKAGE}") |         local ver=$(get_full_version "${PACKAGE}") | ||||||
|         local commit_msg="" |         local commit_msg="" | ||||||
| 
 | 
 | ||||||
|         local head=$(get_local_head) |  | ||||||
| 
 |  | ||||||
|         if ${remove};then |         if ${remove};then | ||||||
|             local action='remove' |             local action='remove' | ||||||
|             if [[ "${REPO_SRC}" == 'trunk' ]];then |             if [[ "${REPO_SRC}" == 'trunk' ]];then | ||||||
| @@ -62,14 +52,14 @@ commit_pkg(){ | |||||||
| 
 | 
 | ||||||
|         cd ${TREE_DIR_ARTIX}/${git_tree} |         cd ${TREE_DIR_ARTIX}/${git_tree} | ||||||
| 
 | 
 | ||||||
|         if ${push};then |         ${push} && pull_tree "${git_tree}" "$head" | ||||||
|             pull_tree "${git_tree}" "$head" |  | ||||||
| 
 | 
 | ||||||
|  |         subrepo_pull "${PACKAGE}" | ||||||
|         subrepo_push "${PACKAGE}" |         subrepo_push "${PACKAGE}" | ||||||
|         subrepo_clean "${PACKAGE}" |         subrepo_clean "${PACKAGE}" | ||||||
| #             sleep 1 | 
 | ||||||
|             push_tree "${git_tree}" |         ${push} && push_tree "${git_tree}" | ||||||
|         fi | 
 | ||||||
|         git prune |         git prune | ||||||
|     else |     else | ||||||
|         error "Package '%s' does not exist!" "${PACKAGE}" |         error "Package '%s' does not exist!" "${PACKAGE}" | ||||||
| @@ -79,14 +69,17 @@ commit_pkg(){ | |||||||
| symlink_commit_pkg(){ | symlink_commit_pkg(){ | ||||||
|     local git_tree=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}") |     local git_tree=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}") | ||||||
|     if [[ -n ${git_tree} ]];then |     if [[ -n ${git_tree} ]];then | ||||||
|         cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE} |  | ||||||
| 
 | 
 | ||||||
|         source trunk/PKGBUILD |         cd ${TREE_DIR_ARTIX}/${git_tree} | ||||||
|         [[ $arch == 'any' ]] && CARCH=any |  | ||||||
|         local ver=$(get_full_version "${PACKAGE}") |  | ||||||
| 
 | 
 | ||||||
|         local head=$(get_local_head) |         local head=$(get_local_head) | ||||||
| 
 | 
 | ||||||
|  |         cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE} | ||||||
|  | 
 | ||||||
|  |         . trunk/PKGBUILD | ||||||
|  |         [[ $arch == 'any' ]] && CARCH=any | ||||||
|  |         local ver=$(get_full_version "${PACKAGE}") | ||||||
|  | 
 | ||||||
|         if [[ ${REPO_SRC} == 'trunk' ]];then |         if [[ ${REPO_SRC} == 'trunk' ]];then | ||||||
|             local action='add' |             local action='add' | ||||||
|             local dest="${REPO_DEST}-$CARCH" |             local dest="${REPO_DEST}-$CARCH" | ||||||
| @@ -100,6 +93,7 @@ symlink_commit_pkg(){ | |||||||
|             local action='move' |             local action='move' | ||||||
|             local src="${REPO_SRC}-$CARCH" dest="${REPO_DEST}-$CARCH" |             local src="${REPO_SRC}-$CARCH" dest="${REPO_DEST}-$CARCH" | ||||||
| 
 | 
 | ||||||
|  |             [[ ! -f repos/$src/PKGBUILD ]] && die "%s does not exist!" "repos/$src/PKGBUILD" | ||||||
|             [[ -d repos/$dest ]] && git rm -r repos/$dest |             [[ -d repos/$dest ]] && git rm -r repos/$dest | ||||||
|             [[ ! -d repos ]] && mkdir repos |             [[ ! -d repos ]] && mkdir repos | ||||||
|             [[ ! -d repos/$dest ]] && mkdir repos/$dest |             [[ ! -d repos/$dest ]] && mkdir repos/$dest | ||||||
| @@ -115,14 +109,14 @@ symlink_commit_pkg(){ | |||||||
| 
 | 
 | ||||||
|         cd ${TREE_DIR_ARTIX}/${git_tree} |         cd ${TREE_DIR_ARTIX}/${git_tree} | ||||||
| 
 | 
 | ||||||
|         if ${push};then |         ${push} && pull_tree "${git_tree}" "$head" | ||||||
|             pull_tree "${git_tree}" "$head" |  | ||||||
| 
 | 
 | ||||||
|  |         subrepo_pull "${PACKAGE}" | ||||||
|         subrepo_push "${PACKAGE}" |         subrepo_push "${PACKAGE}" | ||||||
|         subrepo_clean "${PACKAGE}" |         subrepo_clean "${PACKAGE}" | ||||||
| #             sleep 1 | 
 | ||||||
|             push_tree "${git_tree}" |         ${push} && push_tree "${git_tree}" | ||||||
|         fi | 
 | ||||||
|         git prune |         git prune | ||||||
|     else |     else | ||||||
|         error "Package '%s' does not exist!" "${PACKAGE}" |         error "Package '%s' does not exist!" "${PACKAGE}" | ||||||
| @@ -131,8 +125,8 @@ symlink_commit_pkg(){ | |||||||
| 
 | 
 | ||||||
| load_user_info | load_user_info | ||||||
| 
 | 
 | ||||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||||
| load_vars "${PAC_USERCONFDIR}/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||||
| load_vars /etc/makepkg.conf | load_vars /etc/makepkg.conf | ||||||
| 
 | 
 | ||||||
| REPO_SRC='trunk' | REPO_SRC='trunk' | ||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -9,20 +12,13 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
| 
 | 
 | ||||||
| VERSION=@version@ | . @libdir@/artools/util-base.sh | ||||||
| 
 | . @libdir@/artools/util-pkg.sh | ||||||
| LIBDIR='@libdir@' |  | ||||||
| SYSCONFDIR='@sysconfdir@' |  | ||||||
| DATADIR='@datadir@' |  | ||||||
| 
 |  | ||||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh |  | ||||||
| import ${LIBDIR}/util.sh |  | ||||||
| import ${LIBDIR}/util-pkg.sh |  | ||||||
| 
 | 
 | ||||||
| show_version_table(){ | show_version_table(){ | ||||||
|     msg_table_header "%-20s %-20s %-25s %-30s %-30s" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version" |     msg_table_header "%-20s %-20s %-25s %-30s %-30s" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version" | ||||||
| 
 | 
 | ||||||
|     for tree in ${tree_names[@]};do |     for tree in ${TREE_NAMES_ARTIX[@]};do | ||||||
| 
 | 
 | ||||||
|         local git=$(find ${TREE_DIR_ARTIX}/$tree/ -mindepth 1 -maxdepth 1 -type d) |         local git=$(find ${TREE_DIR_ARTIX}/$tree/ -mindepth 1 -maxdepth 1 -type d) | ||||||
| 
 | 
 | ||||||
| @@ -35,7 +31,7 @@ show_version_table(){ | |||||||
| 
 | 
 | ||||||
|             if [[ -f $pkgbuild ]];then |             if [[ -f $pkgbuild ]];then | ||||||
| 
 | 
 | ||||||
|                 source $pkgbuild 2>/dev/null |                 . $pkgbuild 2>/dev/null | ||||||
|                 local artixver=$(get_full_version $pkg) |                 local artixver=$(get_full_version $pkg) | ||||||
| 
 | 
 | ||||||
|                 local archpath=$(get_import_path $pkg) |                 local archpath=$(get_import_path $pkg) | ||||||
| @@ -46,7 +42,7 @@ show_version_table(){ | |||||||
|                 pkgbuild=$archpath/repos/$archrepo/PKGBUILD |                 pkgbuild=$archpath/repos/$archrepo/PKGBUILD | ||||||
| 
 | 
 | ||||||
|                 if [[ -f $pkgbuild ]];then |                 if [[ -f $pkgbuild ]];then | ||||||
|                     source $pkgbuild 2>/dev/null |                     . $pkgbuild 2>/dev/null | ||||||
|                     local archver=$(get_full_version $pkg) |                     local archver=$(get_full_version $pkg) | ||||||
|                 fi |                 fi | ||||||
| 
 | 
 | ||||||
| @@ -93,8 +89,8 @@ show_version_table(){ | |||||||
| 
 | 
 | ||||||
| load_user_info | load_user_info | ||||||
| 
 | 
 | ||||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||||
| load_vars "${PAC_USERCONFDIR}/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||||
| load_vars /etc/makepkg.conf | load_vars /etc/makepkg.conf | ||||||
| 
 | 
 | ||||||
| unstable=false | unstable=false | ||||||
| @@ -103,8 +99,6 @@ upgrades=false | |||||||
| downgrades=false | downgrades=false | ||||||
| move=false | move=false | ||||||
| 
 | 
 | ||||||
| tree_names=(packages community) |  | ||||||
| 
 |  | ||||||
| usage() { | usage() { | ||||||
|     echo "Usage: ${0##*/} [options]" |     echo "Usage: ${0##*/} [options]" | ||||||
|     echo '    -u            Show upgrade packages' |     echo '    -u            Show upgrade packages' | ||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -9,23 +12,22 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
| 
 | 
 | ||||||
| VERSION=@version@ | . @libdir@/artools/util-base.sh | ||||||
| 
 | . @libdir@/artools/util-pkg.sh | ||||||
| LIBDIR='@libdir@' |  | ||||||
| SYSCONFDIR='@sysconfdir@' |  | ||||||
| DATADIR='@datadir@' |  | ||||||
| 
 |  | ||||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh |  | ||||||
| import ${LIBDIR}/util.sh |  | ||||||
| import ${LIBDIR}/util-pkg.sh |  | ||||||
| 
 | 
 | ||||||
| update_repo(){ | update_repo(){ | ||||||
|     local repo="$1" pkgfile ver ext=db.tar.xz |     local repo="$1" pkgfile ver | ||||||
|     local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=() |     local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=() | ||||||
| 
 | 
 | ||||||
|     source PKGBUILD |     . PKGBUILD | ||||||
| 
 | 
 | ||||||
|     for name in ${pkgname[@]};do |     local pkgsearch=(${pkgname[@]}) | ||||||
|  |     if check_option "debug" "y"; then | ||||||
|  |         pkgbase=${pkgbase:-${pkgname[@]}} | ||||||
|  |         pkgsearch+=("${pkgbase}-debug") | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     for name in ${pkgsearch[@]}; do | ||||||
|         pkgarch=$(get_pkg_arch "$name") |         pkgarch=$(get_pkg_arch "$name") | ||||||
|         ver=$(get_full_version "$name") |         ver=$(get_full_version "$name") | ||||||
|         if pkgfile=$(find_cached_package "$name" "$ver" "$pkgarch");then |         if pkgfile=$(find_cached_package "$name" "$ver" "$pkgarch");then | ||||||
| @@ -49,19 +51,24 @@ update_repo(){ | |||||||
|         fi |         fi | ||||||
|     done |     done | ||||||
|     cd $repo_path |     cd $repo_path | ||||||
|     [[ -n $action ]] && repo-$action -R $repo.$ext ${packages[@]} |     if [[ -n $action ]]; then | ||||||
|  |         repo-$action -R $repo.${PKGDBEXT} ${packages[@]} | ||||||
|  |         ${linksdb} && links-$action $repo.${LINKSDBEXT} ${packages[@]} | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|     return 0 |     return 0 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| load_user_info | load_user_info | ||||||
| 
 | 
 | ||||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||||
| load_vars "${PAC_USERCONFDIR}/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||||
| load_vars /etc/makepkg.conf | load_vars /etc/makepkg.conf | ||||||
| 
 | 
 | ||||||
| add_pkg=false | add_pkg=false | ||||||
| del_pkg=false | del_pkg=false | ||||||
| sign_pkg=false | sign_pkg=false | ||||||
|  | linksdb=false | ||||||
| 
 | 
 | ||||||
| cmd=${0##*/} | cmd=${0##*/} | ||||||
| dest_repo=${cmd#*-} | dest_repo=${cmd#*-} | ||||||
| @@ -70,6 +77,7 @@ usage() { | |||||||
|     echo "Usage: ${cmd} [options]" |     echo "Usage: ${cmd} [options]" | ||||||
|     echo '    -a                 Add package(s) to repository' |     echo '    -a                 Add package(s) to repository' | ||||||
|     echo '    -r                 Remove package(s) from repository' |     echo '    -r                 Remove package(s) from repository' | ||||||
|  |     echo '    -l                 Use links db' | ||||||
|     echo '    -s                 Sign package(s)' |     echo '    -s                 Sign package(s)' | ||||||
|     echo '    -h                 This help' |     echo '    -h                 This help' | ||||||
|     echo '' |     echo '' | ||||||
| @@ -77,12 +85,13 @@ usage() { | |||||||
|     exit $1 |     exit $1 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| opts='arsh' | opts='arlsh' | ||||||
| 
 | 
 | ||||||
| while getopts "${opts}" arg; do | while getopts "${opts}" arg; do | ||||||
|     case "${arg}" in |     case "${arg}" in | ||||||
|         a) add_pkg=true; del_pkg=false ;; |         a) add_pkg=true; del_pkg=false ;; | ||||||
|         r) del_pkg=true; add_pkg=false ;; |         r) del_pkg=true; add_pkg=false ;; | ||||||
|  |         l) linksdb=true ;; | ||||||
|         s) sign_pkg=true ;; |         s) sign_pkg=true ;; | ||||||
|         h|?) usage 0 ;; |         h|?) usage 0 ;; | ||||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; |         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -9,12 +12,8 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
| 
 | 
 | ||||||
| VERSION=@version@ | . @libdir@/artools/util-base.sh | ||||||
| 
 | . @libdir@/artools/util-pkg.sh | ||||||
| LIBDIR='@libdir@' |  | ||||||
| 
 |  | ||||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh |  | ||||||
| import ${LIBDIR}/util-pkg.sh |  | ||||||
| 
 | 
 | ||||||
| # $1: sofile | # $1: sofile | ||||||
| # $2: soarch | # $2: soarch | ||||||
| @@ -24,7 +23,7 @@ process_sofile() { | |||||||
|     # extract the major version: 1 |     # extract the major version: 1 | ||||||
|     soversion="${1##*\.so\.}" |     soversion="${1##*\.so\.}" | ||||||
|     if [[ "$soversion" = "$1" ]] && (($IGNORE_INTERNAL)); then |     if [[ "$soversion" = "$1" ]] && (($IGNORE_INTERNAL)); then | ||||||
|         continue |         return | ||||||
|     fi |     fi | ||||||
|     if ! in_array "${soname}=${soversion}-$2" ${soobjects[@]}; then |     if ! in_array "${soname}=${soversion}-$2" ${soobjects[@]}; then | ||||||
|     # libfoo.so=1-64 |     # libfoo.so=1-64 | ||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -9,11 +12,8 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
| 
 | 
 | ||||||
| VERSION=@version@ | . @libdir@/artools/util-base.sh | ||||||
| 
 | 
 | ||||||
| LIBDIR='@libdir@' |  | ||||||
| 
 |  | ||||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh |  | ||||||
| match=$1 | match=$1 | ||||||
| 
 | 
 | ||||||
| if [[ -z $match ]]; then | if [[ -z $match ]]; then | ||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -9,11 +12,7 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
| 
 | 
 | ||||||
| VERSION=@version@ | . @libdir@/artools/util-base.sh | ||||||
| 
 |  | ||||||
| LIBDIR='@libdir@' |  | ||||||
| 
 |  | ||||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh |  | ||||||
| 
 | 
 | ||||||
| ifs=$IFS | ifs=$IFS | ||||||
| IFS="${IFS}:" | IFS="${IFS}:" | ||||||
							
								
								
									
										518
									
								
								bin/pkg/links-add.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										518
									
								
								bin/pkg/links-add.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,518 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | # | ||||||
|  | #   links-add - add a package to a given repo database file | ||||||
|  | #   links-remove - remove a package entry from a given repo database file | ||||||
|  | # | ||||||
|  | #   Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@archlinux.org> | ||||||
|  | #   Copyright (c) 2019 artoo@artixlinux.org | ||||||
|  | # | ||||||
|  | #   This program is free software; you can redistribute it and/or modify | ||||||
|  | #   it under the terms of the GNU General Public License as published by | ||||||
|  | #   the Free Software Foundation; either version 2 of the License, or | ||||||
|  | #   (at your option) any later version. | ||||||
|  | # | ||||||
|  | #   This program is distributed in the hope that it will be useful, | ||||||
|  | #   but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | #   GNU General Public License for more details. | ||||||
|  | # | ||||||
|  | #   You should have received a copy of the GNU General Public License | ||||||
|  | #   along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||||
|  |  | ||||||
|  | shopt -s extglob | ||||||
|  |  | ||||||
|  | declare -r REPO_DB_NAME="links" | ||||||
|  |  | ||||||
|  | QUIET=0 | ||||||
|  | ONLYADDNEW=0 | ||||||
|  | SIGN=0 | ||||||
|  | KEY=0 | ||||||
|  | VERIFY=0 | ||||||
|  | REPO_DB_FILE= | ||||||
|  | REPO_DB_PREFIX= | ||||||
|  | REPO_DB_SUFFIX= | ||||||
|  | LOCKFILE= | ||||||
|  | CLEAN_LOCK=0 | ||||||
|  |  | ||||||
|  | . @libdir@/artools/util-base.sh | ||||||
|  |  | ||||||
|  | # ensure we have a sane umask set | ||||||
|  | umask 0022 | ||||||
|  |  | ||||||
|  | # print usage instructions | ||||||
|  | usage() { | ||||||
|  |     cmd=${0##*/} | ||||||
|  |     printf -- "%s \n\n" "$cmd" | ||||||
|  |     if [[ $cmd == "links-add" ]] ; then | ||||||
|  |         printf -- "Usage: links-add [options] <path-to-db> <package> ...\n" | ||||||
|  |         printf -- "\n" | ||||||
|  |         printf -- "\ | ||||||
|  | links-add will update a package database by reading a package file.\n\ | ||||||
|  | Multiple packages to add can be specified on the command line.\n" | ||||||
|  |         printf -- "\n" | ||||||
|  |         printf -- "Options:\n" | ||||||
|  |         printf -- "  -n, --new         only add packages that are not already in the database\n" | ||||||
|  |     elif [[ $cmd == "links-remove" ]] ; then | ||||||
|  |         printf -- "Usage: links-remove [options] <path-to-db> <packagename> ...\n" | ||||||
|  |         printf -- "\n" | ||||||
|  |         printf -- "\ | ||||||
|  | links-remove will update a package database by removing the package name\n\ | ||||||
|  | specified on the command line from the given repo database. Multiple\n\ | ||||||
|  | packages to remove can be specified on the command line.\n" | ||||||
|  |         printf -- "\n" | ||||||
|  |         printf -- "Options:\n" | ||||||
|  |     else | ||||||
|  |         printf -- "Please move along, there is nothing to see here.\n" | ||||||
|  |         return | ||||||
|  |     fi | ||||||
|  |     printf -- "  --nocolor         turn off color in output\n" | ||||||
|  |     printf -- "  -q, --quiet       minimize output\n" | ||||||
|  |     printf -- "  -s, --sign        sign database with GnuPG after update\n" | ||||||
|  |     printf -- "  -k, --key <key>   use the specified key to sign the database\n" | ||||||
|  |     printf -- "  -v, --verify      verify database's signature before update\n" | ||||||
|  |     printf -- "\n\ | ||||||
|  | See %s(8) for more details and descriptions of the available options.\n" $cmd | ||||||
|  |     printf "\n" | ||||||
|  |     if [[ $cmd == "links-add" ]] ; then | ||||||
|  |         printf -- "Example:  links-add /path/to/repo.${LINKSDBEXT} pacman-5.1.3-1-x86_64.pkg.tar.xz\n" | ||||||
|  |     elif [[ $cmd == "links-remove" ]] ; then | ||||||
|  |         printf -- "Example:  links-remove /path/to/repo.${LINKSDBEXT} kernel26\n" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | find_pkgentry() { | ||||||
|  |     local pkgname=$1 | ||||||
|  |     local pkgentry | ||||||
|  |  | ||||||
|  |     for pkgentry in "$tmpdir/${REPO_DB_NAME}/$pkgname"*; do | ||||||
|  |         name=${pkgentry##*/} | ||||||
|  |         if [[ ${name%-*-*} = $pkgname ]]; then | ||||||
|  |             echo $pkgentry | ||||||
|  |             return 0 | ||||||
|  |         fi | ||||||
|  |     done | ||||||
|  |     return 1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | check_gpg() { | ||||||
|  |     if ! type -p gpg >/dev/null; then | ||||||
|  |         error "Cannot find the gpg binary! Is GnuPG installed?" | ||||||
|  |         exit 1 # $E_MISSING_PROGRAM | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     if (( ! VERIFY )); then | ||||||
|  |         if ! gpg --list-key ${GPGKEY} &>/dev/null; then | ||||||
|  |             if [[ ! -z $GPGKEY ]]; then | ||||||
|  |                 error "The key ${GPGKEY} does not exist in your keyring." | ||||||
|  |             elif (( ! KEY )); then | ||||||
|  |                 error "There is no key in your keyring." | ||||||
|  |             fi | ||||||
|  |             exit 1 | ||||||
|  |         fi | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # sign the package database once repackaged | ||||||
|  | create_signature() { | ||||||
|  |     (( ! SIGN )) && return | ||||||
|  |     local dbfile=$1 | ||||||
|  |     local ret=0 | ||||||
|  |     msg "Signing database '%s'..." "${dbfile##*/.tmp.}" | ||||||
|  |  | ||||||
|  |     local SIGNWITHKEY="" | ||||||
|  |     if [[ -n $GPGKEY ]]; then | ||||||
|  |         SIGNWITHKEY="-u ${GPGKEY}" | ||||||
|  |     fi | ||||||
|  |     gpg --detach-sign --use-agent --no-armor ${SIGNWITHKEY} "$dbfile" &>/dev/null || ret=$? | ||||||
|  |  | ||||||
|  |     if (( ! ret )); then | ||||||
|  |         msg2 "Created signature file '%s'" "${dbfile##*/.tmp.}.sig" | ||||||
|  |     else | ||||||
|  |         warning "Failed to sign package database file '%s'" "${dbfile##*/.tmp.}" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # verify the existing package database signature | ||||||
|  | verify_signature() { | ||||||
|  |     (( ! VERIFY )) && return | ||||||
|  |     local dbfile=$1 | ||||||
|  |     local ret=0 | ||||||
|  |     msg "Verifying database signature..." | ||||||
|  |  | ||||||
|  |     if [[ ! -f $dbfile.sig ]]; then | ||||||
|  |         warning "No existing signature found, skipping verification." | ||||||
|  |         return | ||||||
|  |     fi | ||||||
|  |     gpg --verify "$dbfile.sig" || ret=$? | ||||||
|  |     if (( ! ret )); then | ||||||
|  |         msg2 "Database signature file verified." | ||||||
|  |     else | ||||||
|  |         error "Database signature was NOT valid!" | ||||||
|  |         exit 1 | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | verify_repo_extension() { | ||||||
|  |     local repofile=$1 | ||||||
|  |  | ||||||
|  |     case $repofile in | ||||||
|  |         *.links.tar.gz)  TAR_OPT="z" ;; | ||||||
|  |         *.links.tar.bz2) TAR_OPT="j" ;; | ||||||
|  |         *.links.tar.xz)  TAR_OPT="J" ;; | ||||||
|  |         *.links.tar.zst) TAR_OPT="--zstd" ;; | ||||||
|  |         *.links.tar.Z)   TAR_OPT="Z" ;; | ||||||
|  |         *.links.tar)     TAR_OPT="" ;; | ||||||
|  |         *) error "'%s' does not have a valid database archive extension." \ | ||||||
|  |                 "$repofile" | ||||||
|  |             exit 1 ;; | ||||||
|  |     esac | ||||||
|  |  | ||||||
|  |     printf '%s' "$TAR_OPT" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # write an entry to the pacman database | ||||||
|  | #   arg1 - path to package | ||||||
|  | db_write_entry() { | ||||||
|  |     # blank out all variables | ||||||
|  |     local pkgfile=$1 | ||||||
|  |  | ||||||
|  |     local pkgname pkgver | ||||||
|  |  | ||||||
|  |     # read info from the zipped package | ||||||
|  |     local line var val | ||||||
|  |     while read -r line; do | ||||||
|  |         [[ ${line:0:1} = '#' ]] && continue | ||||||
|  |         IFS=' =' read -r var val < <(printf '%s\n' "$line") | ||||||
|  |         # normalize whitespace with an extglob | ||||||
|  |         declare "$var=${val//+([[:space:]])/ }" | ||||||
|  |  | ||||||
|  |     done< <(bsdtar -xOqf "$pkgfile" .PKGINFO) | ||||||
|  |  | ||||||
|  |     # ensure $pkgname and $pkgver variables were found | ||||||
|  |     if [[ -z $pkgname || -z $pkgver ]]; then | ||||||
|  |         error "Invalid package file '%s'." "$pkgfile" | ||||||
|  |         return 1 | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     if [[ -d $tmpdir/${REPO_DB_NAME}/$pkgname-$pkgver ]]; then | ||||||
|  |         warning "An entry for '%s' already existed" "$pkgname-$pkgver" | ||||||
|  |         if (( ONLYADDNEW )); then | ||||||
|  |             return 0 | ||||||
|  |         fi | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     # remove an existing entry if it exists, ignore failures | ||||||
|  |     db_remove_entry "$pkgname" | ||||||
|  |  | ||||||
|  |     local tmppkg=$tmpdir/pkg/$pkgname-$pkgver | ||||||
|  |  | ||||||
|  |     mkdir "$tmppkg" | ||||||
|  |  | ||||||
|  |     bsdtar -xof $pkgfile -C $tmppkg --include={opt,{,usr/}{lib{,32},{s,}bin}}'/*' 2>/dev/null | ||||||
|  |  | ||||||
|  |     pushd "$tmpdir/${REPO_DB_NAME}" >/dev/null | ||||||
|  |     mkdir "$pkgname-$pkgver" | ||||||
|  |     pushd "$pkgname-$pkgver" >/dev/null | ||||||
|  |  | ||||||
|  |     # create links entry | ||||||
|  |     msg2 "Creating '%s' db entry..." "${REPO_DB_NAME}" | ||||||
|  |  | ||||||
|  |     local linksentry=$tmpdir/${REPO_DB_NAME}/$pkgname-$pkgver/${REPO_DB_NAME} | ||||||
|  |  | ||||||
|  |     for f in $(find $tmppkg -type f); do | ||||||
|  |         readelf -d "$f" 2> /dev/null | sed -nr 's/.*Shared library: \[(.*)\].*/\1/p' | ||||||
|  |     done | sort -u > $linksentry | ||||||
|  |  | ||||||
|  |     popd >/dev/null | ||||||
|  |     popd >/dev/null | ||||||
|  |  | ||||||
|  |     return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # remove existing entries from the DB | ||||||
|  | #   arg1 - package name | ||||||
|  | db_remove_entry() { | ||||||
|  |     local pkgname=$1 | ||||||
|  |     local notfound=1 | ||||||
|  |     local pkgentry=$(find_pkgentry "$pkgname") | ||||||
|  |     while [[ -n $pkgentry ]]; do | ||||||
|  |         notfound=0 | ||||||
|  |  | ||||||
|  |         msg2 "Removing existing entry '%s'..." \ | ||||||
|  |         "${pkgentry##*/}" | ||||||
|  |         rm -rf "$pkgentry" | ||||||
|  |  | ||||||
|  |         # remove entries in "links" database | ||||||
|  |         local linksentry=$(echo "$pkgentry" | sed 's/\(.*\)\/db\//\1\/links\//') | ||||||
|  |         rm -rf "$linksentry" | ||||||
|  |  | ||||||
|  |         pkgentry=$(find_pkgentry "$pkgname") | ||||||
|  |     done | ||||||
|  |     return $notfound | ||||||
|  | } | ||||||
|  |  | ||||||
|  | prepare_repo_db() { | ||||||
|  |     local repodir dbfile | ||||||
|  |  | ||||||
|  |     # ensure the path to the DB exists; $LOCKFILE is always an absolute path | ||||||
|  |     repodir=${LOCKFILE%/*}/ | ||||||
|  |  | ||||||
|  |     if [[ ! -d $repodir ]]; then | ||||||
|  |         error "%s does not exist or is not a directory." "$repodir" | ||||||
|  |         exit 1 | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     # check lock file | ||||||
|  |     if ( set -o noclobber; echo "$$" > "$LOCKFILE") 2> /dev/null; then | ||||||
|  |         CLEAN_LOCK=1 | ||||||
|  |     else | ||||||
|  |         error "Failed to acquire lockfile: %s." "$LOCKFILE" | ||||||
|  |         [[ -f $LOCKFILE ]] && error "Held by process %s" "$(cat "$LOCKFILE")" | ||||||
|  |         exit 1 | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     dbfile=${repodir}/$REPO_DB_PREFIX.${REPO_DB_NAME}.$REPO_DB_SUFFIX | ||||||
|  |  | ||||||
|  |     if [[ -f $dbfile ]]; then | ||||||
|  |         # there are two situations we can have here: | ||||||
|  |         # a DB with some entries, or a DB with no contents at all. | ||||||
|  |         if ! bsdtar -tqf "$dbfile" '*/links' >/dev/null 2>&1; then | ||||||
|  |             # check empty case | ||||||
|  |             if [[ -n $(bsdtar -tqf "$dbfile" '*' 2>/dev/null) ]]; then | ||||||
|  |                 error "Repository file '%s' is not a proper links database." "$dbfile" | ||||||
|  |                 exit 1 | ||||||
|  |             fi | ||||||
|  |         fi | ||||||
|  |         verify_signature "$dbfile" | ||||||
|  |         msg "Extracting %s to a temporary location..." "${dbfile##*/}" | ||||||
|  |         bsdtar -xf "$dbfile" -C "$tmpdir/${REPO_DB_NAME}" | ||||||
|  |     else | ||||||
|  |         case $cmd in | ||||||
|  |             links-remove) | ||||||
|  |                 # only a missing "db" database is currently an error | ||||||
|  |                 # TODO: remove if statement | ||||||
|  |                 if [[ ${REPO_DB_NAME} == "links" ]]; then | ||||||
|  |                     error "Repository file '%s' was not found." "$dbfile" | ||||||
|  |                     exit 1 | ||||||
|  |                 fi | ||||||
|  |                 ;; | ||||||
|  |             links-add) | ||||||
|  |                 # check if the file can be created (write permission, directory existence, etc) | ||||||
|  |                 if ! touch "$dbfile"; then | ||||||
|  |                     error "Repository file '%s' could not be created." "$dbfile" | ||||||
|  |                     exit 1 | ||||||
|  |                 fi | ||||||
|  |                 rm -f "$dbfile" | ||||||
|  |                 ;; | ||||||
|  |         esac | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | add() { | ||||||
|  |     if [[ ! -f $1 ]]; then | ||||||
|  |         error "File '%s' not found." "$1" | ||||||
|  |         return 1 | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     pkgfile=$1 | ||||||
|  |     if ! bsdtar -tqf "$pkgfile" .PKGINFO >/dev/null 2>&1; then | ||||||
|  |         error "'%s' is not a package file, skipping" "$pkgfile" | ||||||
|  |         return 1 | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     msg "Adding package '%s'" "$pkgfile" | ||||||
|  |  | ||||||
|  |     db_write_entry "$pkgfile" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | remove() { | ||||||
|  |     pkgname=$1 | ||||||
|  |     msg "Searching for package '%s'..." "$pkgname" | ||||||
|  |  | ||||||
|  |     if ! db_remove_entry "$pkgname"; then | ||||||
|  |         error "Package matching '%s' not found." "$pkgname" | ||||||
|  |         return 1 | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | rotate_db() { | ||||||
|  |     dirname=${LOCKFILE%/*} | ||||||
|  |  | ||||||
|  |     pushd "$dirname" >/dev/null | ||||||
|  |  | ||||||
|  |     filename=${REPO_DB_PREFIX}.${REPO_DB_NAME}.${REPO_DB_SUFFIX} | ||||||
|  |     tempname=$dirname/.tmp.$filename | ||||||
|  |  | ||||||
|  |     # hardlink or move the previous version of the database and signature to .old | ||||||
|  |     # extension as a backup measure | ||||||
|  |     if [[ -f $filename ]]; then | ||||||
|  |         ln -f "$filename" "$filename.old" 2>/dev/null || \ | ||||||
|  |             mv -f "$filename" "$filename.old" | ||||||
|  |  | ||||||
|  |         if [[ -f $filename.sig ]]; then | ||||||
|  |             ln -f "$filename.sig" "$filename.old.sig" 2>/dev/null || \ | ||||||
|  |                 mv -f "$filename.sig" "$filename.old.sig" | ||||||
|  |         else | ||||||
|  |             rm -f "$filename.old.sig" | ||||||
|  |         fi | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     # rotate the newly-created database and signature into place | ||||||
|  |     mv "$tempname" "$filename" | ||||||
|  |     if [[ -f $tempname.sig ]]; then | ||||||
|  |         mv "$tempname.sig" "$filename.sig" | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     dblink=${filename%.tar*} | ||||||
|  |     rm -f "$dblink" "$dblink.sig" | ||||||
|  |     ln -s "$filename" "$dblink" 2>/dev/null || \ | ||||||
|  |         ln "$filename" "$dblink" 2>/dev/null || \ | ||||||
|  |         cp "$filename" "$dblink" | ||||||
|  |     if [[ -f "$filename.sig" ]]; then | ||||||
|  |         ln -s "$filename.sig" "$dblink.sig" 2>/dev/null || \ | ||||||
|  |             ln "$filename.sig" "$dblink.sig" 2>/dev/null || \ | ||||||
|  |             cp "$filename.sig" "$dblink.sig" | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     popd >/dev/null | ||||||
|  | } | ||||||
|  |  | ||||||
|  | create_db() { | ||||||
|  |     TAR_OPT=$(verify_repo_extension "$REPO_DB_FILE") | ||||||
|  |     # $LOCKFILE is already guaranteed to be absolute so this is safe | ||||||
|  |     dirname=${LOCKFILE%/*} | ||||||
|  |  | ||||||
|  |     filename=${REPO_DB_PREFIX}.${REPO_DB_NAME}.${REPO_DB_SUFFIX} | ||||||
|  |     # this ensures we create it on the same filesystem, making moves atomic | ||||||
|  |     tempname=$dirname/.tmp.$filename | ||||||
|  |  | ||||||
|  |     pushd "$tmpdir/${REPO_DB_NAME}" >/dev/null | ||||||
|  |     if ( shopt -s nullglob; files=(*); (( ${#files[*]} )) ); then | ||||||
|  |         bsdtar -c${TAR_OPT}f "$tempname" * | ||||||
|  |     else | ||||||
|  |         # we have no packages remaining? zip up some emptyness | ||||||
|  |         warning "No packages remain, creating empty database." | ||||||
|  |         bsdtar -c${TAR_OPT}f "$tempname" -T /dev/null | ||||||
|  |     fi | ||||||
|  |     popd >/dev/null | ||||||
|  |  | ||||||
|  |     create_signature "$tempname" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | trap_exit() { | ||||||
|  |     # unhook all traps to avoid race conditions | ||||||
|  |     trap '' EXIT TERM HUP QUIT INT ERR | ||||||
|  |  | ||||||
|  |     echo | ||||||
|  |     error "$@" | ||||||
|  |     clean_up 1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | clean_up() { | ||||||
|  |     local exit_code=${1:-$?} | ||||||
|  |  | ||||||
|  |     # unhook all traps to avoid race conditions | ||||||
|  |     trap '' EXIT TERM HUP QUIT INT ERR | ||||||
|  |  | ||||||
|  |     [[ -d $tmpdir ]] && rm -rf "$tmpdir" | ||||||
|  |     (( CLEAN_LOCK )) && [[ -f $LOCKFILE ]] && rm -f "$LOCKFILE" | ||||||
|  |  | ||||||
|  |     exit $exit_code | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # PROGRAM START | ||||||
|  | case $1 in | ||||||
|  |     -h|--help) usage; exit 0;; | ||||||
|  | esac | ||||||
|  |  | ||||||
|  | # figure out what program we are | ||||||
|  | cmd=${0##*/} | ||||||
|  |  | ||||||
|  | if [[ $cmd != "links-add" && $cmd != "links-remove" ]]; then | ||||||
|  |     error "Invalid command name '%s' specified." "$cmd" | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | tmpdir=$(mktemp -d "${TMPDIR:-/tmp}/repo-tools.XXXXXXXXXX") || (\ | ||||||
|  |     error "Cannot create temp directory for database building."; \ | ||||||
|  |     exit 1) | ||||||
|  |  | ||||||
|  | for repo in "pkg" "${REPO_DB_NAME}"; do | ||||||
|  |     mkdir "$tmpdir/$repo" | ||||||
|  | done | ||||||
|  |  | ||||||
|  | trap 'clean_up' EXIT | ||||||
|  | for signal in TERM HUP QUIT; do | ||||||
|  |     trap "trap_exit \"$(gettext "%s signal caught. Exiting...")\" \"$signal\"" "$signal" | ||||||
|  | done | ||||||
|  | trap 'trap_exit "$(gettext "Aborted by user! Exiting...")"' INT | ||||||
|  | trap 'trap_exit "$(gettext "An unknown error has occurred. Exiting...")"' ERR | ||||||
|  |  | ||||||
|  | declare -a args | ||||||
|  | # parse arguments | ||||||
|  | while (( $# )); do | ||||||
|  |     case $1 in | ||||||
|  |         -q|--quiet) QUIET=1 ;; | ||||||
|  |         -n|--new) ONLYADDNEW=1 ;; | ||||||
|  |         -s|--sign) SIGN=1 ;; | ||||||
|  |         -k|--key) KEY=1 ; shift; GPGKEY=$1 ;; | ||||||
|  |         -v|--verify) VERIFY=1 ;; | ||||||
|  |         *) args+=("$1") ;; | ||||||
|  |     esac | ||||||
|  |     shift | ||||||
|  | done | ||||||
|  |  | ||||||
|  | REPO_DB_FILE=${args[0]} | ||||||
|  | if [[ -z $REPO_DB_FILE ]]; then | ||||||
|  |     usage | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if [[ $REPO_DB_FILE == /* ]]; then | ||||||
|  |     LOCKFILE=$REPO_DB_FILE.lck | ||||||
|  | else | ||||||
|  |     LOCKFILE=$PWD/$REPO_DB_FILE.lck | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | verify_repo_extension "$REPO_DB_FILE" >/dev/null | ||||||
|  |  | ||||||
|  | REPO_DB_PREFIX=${REPO_DB_FILE##*/} | ||||||
|  | REPO_DB_PREFIX=${REPO_DB_PREFIX%.links.*} | ||||||
|  | REPO_DB_SUFFIX=${REPO_DB_FILE##*.links.} | ||||||
|  |  | ||||||
|  | if (( SIGN || VERIFY )); then | ||||||
|  |     check_gpg | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if (( VERIFY && ${#args[@]} == 1 )); then | ||||||
|  |     dbfile=${repodir}/$REPO_DB_PREFIX.${REPO_DB_NAME}.$REPO_DB_SUFFIX | ||||||
|  |  | ||||||
|  |     if [[ -f $dbfile ]]; then | ||||||
|  |         verify_signature "$dbfile" | ||||||
|  |     fi | ||||||
|  |     exit 0 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | prepare_repo_db | ||||||
|  |  | ||||||
|  | fail=0 | ||||||
|  | for arg in "${args[@]:1}"; do | ||||||
|  |     case $cmd in | ||||||
|  |         links-add) add "$arg" ;; | ||||||
|  |         links-remove) remove "$arg" ;; | ||||||
|  |     esac || fail=1 | ||||||
|  | done | ||||||
|  |  | ||||||
|  | # if the whole operation was a success, re-zip and rotate databases | ||||||
|  | if (( !fail )); then | ||||||
|  |     msg "Creating updated database file '%s'" "$REPO_DB_FILE" | ||||||
|  |     create_db | ||||||
|  |     rotate_db | ||||||
|  | else | ||||||
|  |     msg "No packages modified, nothing to do." | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | exit 0 | ||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -9,13 +12,7 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
| 
 | 
 | ||||||
| VERSION=@version@ | . @libdir@/artools/util-base.sh | ||||||
| 
 |  | ||||||
| LIBDIR='@libdir@' |  | ||||||
| 
 |  | ||||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh |  | ||||||
| import ${LIBDIR}/util.sh |  | ||||||
| import ${LIBDIR}/util-chroot.sh |  | ||||||
| 
 | 
 | ||||||
| shopt -s nullglob | shopt -s nullglob | ||||||
| 
 | 
 | ||||||
| @@ -240,18 +237,21 @@ download_sources() { | |||||||
|     local copydir=$1 |     local copydir=$1 | ||||||
|     local makepkg_user=$2 |     local makepkg_user=$2 | ||||||
| 
 | 
 | ||||||
|     local builddir | #     local builddir | ||||||
|     builddir="$(mktemp -d)" | #     builddir="$(mktemp -d)" | ||||||
|     chown "$makepkg_user:" "$builddir" | #     chown "$makepkg_user:" "$builddir" | ||||||
|  | 
 | ||||||
|  |     setup_workdir | ||||||
|  |     chown "$makepkg_user:" "$WORKDIR" | ||||||
| 
 | 
 | ||||||
|     # Ensure sources are downloaded |     # Ensure sources are downloaded | ||||||
|     sudo -u "$makepkg_user" --preserve-env=GNUPGHOME \ |     sudo -u "$makepkg_user" --preserve-env=GNUPGHOME \ | ||||||
|         env SRCDEST="$SRCDEST" BUILDDIR="$builddir" \ |         env SRCDEST="$SRCDEST" BUILDDIR="$WORKDIR" \ | ||||||
|         makepkg --config="$copydir/etc/makepkg.conf" --verifysource -o || |         makepkg --config="$copydir/etc/makepkg.conf" --verifysource -o || | ||||||
|         die "Could not download sources." |         die "Could not download sources." | ||||||
| 
 | 
 | ||||||
|     # Clean up garbage from verifysource |     # Clean up garbage from verifysource | ||||||
|     rm -rf "$builddir" | #     rm -rf "$builddir" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| # Usage: move_products $copydir $owner | # Usage: move_products $copydir $owner | ||||||
| @@ -339,7 +339,7 @@ main() { | |||||||
|     [[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.' |     [[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.' | ||||||
|     makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}} |     makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}} | ||||||
| 
 | 
 | ||||||
|     check_root SOURCE_DATE_EPOCH,GNUPGHOME |     check_root SOURCE_DATE_EPOCH,GNUPGHOME,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER | ||||||
| 
 | 
 | ||||||
|     # Canonicalize chrootdir, getting rid of trailing / |     # Canonicalize chrootdir, getting rid of trailing / | ||||||
|     chrootdir=$(readlink -e "$passeddir") |     chrootdir=$(readlink -e "$passeddir") | ||||||
| @@ -369,7 +369,7 @@ main() { | |||||||
| 
 | 
 | ||||||
|     umask 0022 |     umask 0022 | ||||||
| 
 | 
 | ||||||
|     load_vars "${XDG_CONFIG_HOME:-$USER_HOME/.config}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" |     load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||||
|     load_vars /etc/makepkg.conf |     load_vars /etc/makepkg.conf | ||||||
| 
 | 
 | ||||||
|     # Use PKGBUILD directory if these don't exist |     # Use PKGBUILD directory if these don't exist | ||||||
| @@ -385,9 +385,11 @@ main() { | |||||||
|         sync_chroot "$chrootdir/root" "$copydir" "$copy" |         sync_chroot "$chrootdir/root" "$copydir" "$copy" | ||||||
|     fi |     fi | ||||||
| 
 | 
 | ||||||
|  |     bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest") | ||||||
|  | 
 | ||||||
|     $update_first && chroot-run \ |     $update_first && chroot-run \ | ||||||
|             -r "${bindmounts_ro[@]}" \ |             -r "${bindmounts_ro[*]}" \ | ||||||
|             -w "${bindmounts_rw[@]}" \ |             -w "${bindmounts_rw[*]}" \ | ||||||
|             "$copydir" \ |             "$copydir" \ | ||||||
|             pacman -Syu --noconfirm |             pacman -Syu --noconfirm | ||||||
| 
 | 
 | ||||||
| @@ -407,8 +409,6 @@ main() { | |||||||
| 
 | 
 | ||||||
|     prepare_chroot "$copydir" "$USER_HOME" "$keepbuilddir" "$run_namcap" |     prepare_chroot "$copydir" "$USER_HOME" "$keepbuilddir" "$run_namcap" | ||||||
| 
 | 
 | ||||||
|     bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest") |  | ||||||
| 
 |  | ||||||
|     if chroot-run \ |     if chroot-run \ | ||||||
|         -r "${bindmounts_ro[*]}" \ |         -r "${bindmounts_ro[*]}" \ | ||||||
|         -w "${bindmounts_rw[*]}" \ |         -w "${bindmounts_rw[*]}" \ | ||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -9,19 +12,7 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
| 
 | 
 | ||||||
| VERSION=@version@ | . @libdir@/artools/util-base.sh | ||||||
| 
 |  | ||||||
| LIBDIR='@libdir@' |  | ||||||
| 
 |  | ||||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh |  | ||||||
| import ${LIBDIR}/util-yaml.sh |  | ||||||
| 
 |  | ||||||
| LIBRARY=${LIBRARY:-'/usr/share/makepkg'} |  | ||||||
| 
 |  | ||||||
| for lib in "$LIBRARY"/*.sh; do |  | ||||||
|     source "$lib" |  | ||||||
| done |  | ||||||
| source /etc/makepkg.conf |  | ||||||
| 
 | 
 | ||||||
| write_attr(){ | write_attr(){ | ||||||
|     local ident1="$1" ident2="$2" ident3="$3" |     local ident1="$1" ident2="$2" ident3="$3" | ||||||
| @@ -88,15 +79,21 @@ write_details() { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| write_pkg_yaml(){ | write_pkg_yaml(){ | ||||||
|     local pkgfile=$(print_all_package_names) |  | ||||||
| 
 | 
 | ||||||
|     Yaml=$(write_yaml_header) |     Yaml=$(write_yaml_header) | ||||||
| 
 | 
 | ||||||
|     Yaml+=$(write_empty_line) |     Yaml+=$(write_empty_line) | ||||||
| 
 | 
 | ||||||
|  |     local full=$(get_full_version) | ||||||
|  | 
 | ||||||
|  |     local ver=${full:-0} | ||||||
|  | 
 | ||||||
|  |     pkgbase=${pkgbase:-${pkgname[0]}} | ||||||
|  | 
 | ||||||
|     Yaml+=$(write_yaml_map 0 "pkgbase") |     Yaml+=$(write_yaml_map 0 "pkgbase") | ||||||
|     Yaml+=$(write_yaml_map 2 "pkgname" "${pkgbase:-$pkgname}") |     Yaml+=$(write_yaml_map 2 "pkgname" "${pkgbase}") | ||||||
|     ${details} && write_details '' |     ${details} && write_details '' | ||||||
|  |     Yaml+=$(write_yaml_map 2 "fullver" "${ver}") | ||||||
| 
 | 
 | ||||||
|     Yaml+=$(write_empty_line) |     Yaml+=$(write_empty_line) | ||||||
| 
 | 
 | ||||||
| @@ -108,6 +105,8 @@ write_pkg_yaml(){ | |||||||
| 
 | 
 | ||||||
|     Yaml+=$(write_empty_line) |     Yaml+=$(write_empty_line) | ||||||
| 
 | 
 | ||||||
|  |     local pkgfile=$(print_all_package_names) | ||||||
|  | 
 | ||||||
|     Yaml+=$(write_yaml_map 0 "pkgfile") |     Yaml+=$(write_yaml_map 0 "pkgfile") | ||||||
|     for f in ${pkgfile[@]};do |     for f in ${pkgfile[@]};do | ||||||
|         Yaml+=$(write_yaml_seq 2 "${f##*/}") |         Yaml+=$(write_yaml_seq 2 "${f##*/}") | ||||||
| @@ -141,8 +140,10 @@ done | |||||||
| shift $(( $OPTIND - 1 )) | shift $(( $OPTIND - 1 )) | ||||||
| 
 | 
 | ||||||
| [[ -f "$1"/PKGBUILD ]] || die "%s/PKGBUILD does not exist!" "$1" | [[ -f "$1"/PKGBUILD ]] || die "%s/PKGBUILD does not exist!" "$1" | ||||||
| PACKAGE=$1/PKGBUILD; shift | PACKAGE="$1"/PKGBUILD; shift | ||||||
| 
 | 
 | ||||||
| source "$PACKAGE" | . "$PACKAGE" | ||||||
|  | 
 | ||||||
|  | . /etc/makepkg.conf | ||||||
| 
 | 
 | ||||||
| write_pkg_yaml | write_pkg_yaml | ||||||
							
								
								
									
										140
									
								
								bin/pkg/sogrep.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										140
									
								
								bin/pkg/sogrep.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,140 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | # | ||||||
|  | #   sogrep - find shared library links in an Arch Linux repository. | ||||||
|  | # | ||||||
|  | #   Copyright (c) 2019 by Eli Schwartz <eschwartz@archlinux.org> | ||||||
|  | #   Copyright (c) 2019 artoo@artixlinux.org | ||||||
|  | # | ||||||
|  | #   This program is free software; you can redistribute it and/or modify | ||||||
|  | #   it under the terms of the GNU General Public License as published by | ||||||
|  | #   the Free Software Foundation; either version 2 of the License, or | ||||||
|  | #   (at your option) any later version. | ||||||
|  | # | ||||||
|  | #   This program is distributed in the hope that it will be useful, | ||||||
|  | #   but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | #   GNU General Public License for more details. | ||||||
|  | # | ||||||
|  | #   You should have received a copy of the GNU General Public License | ||||||
|  | #   along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||||
|  | # | ||||||
|  |  | ||||||
|  | . @libdir@/artools/util-base.sh | ||||||
|  |  | ||||||
|  | load_user_info | ||||||
|  |  | ||||||
|  | load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||||
|  |  | ||||||
|  | # options | ||||||
|  | REFRESH=0 | ||||||
|  | VERBOSE=0 | ||||||
|  |  | ||||||
|  | recache() { | ||||||
|  |     local repo verbosity=-s | ||||||
|  |  | ||||||
|  |     (( VERBOSE )) && verbosity=--progress-bar | ||||||
|  |  | ||||||
|  |     for repo in "${ARTIX_REPOS[@]}"; do | ||||||
|  |             rm -rf "${SOCACHE_DIR}/${ARCH}/${repo}" | ||||||
|  |             mkdir -p "${SOCACHE_DIR}/${ARCH}/${repo}" | ||||||
|  |             curl "$verbosity" "${SOLINKS_MIRROR}/${repo}/os/${ARCH}/${repo}.${LINKSDBEXT}" | bsdtar -xf - -C "${SOCACHE_DIR}/${ARCH}/${repo}" | ||||||
|  |     done | ||||||
|  | } | ||||||
|  |  | ||||||
|  | search() { | ||||||
|  |     local repo=$1 lib=$2 srepos=("${ARTIX_REPOS[@]}") | ||||||
|  |  | ||||||
|  |     if [[ $repo != all ]]; then | ||||||
|  |         if ! in_array "${repo}" "${ARTIX_REPOS[@]}"; then | ||||||
|  |             echo "${BASH_SOURCE[0]##*/}: unrecognized repo '$repo'" | ||||||
|  |             echo "Try '${BASH_SOURCE[0]##*/} --help' for more information." | ||||||
|  |             exit 1 | ||||||
|  |         fi | ||||||
|  |         srepos=("${repo}") | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     for repo in "${srepos[@]}"; do | ||||||
|  |         local prefix= | ||||||
|  |         (( VERBOSE && ${#srepos[@]} > 1 )) && prefix=${repo}/ | ||||||
|  |         db=${SOCACHE_DIR}/${ARCH}/${repo}/ | ||||||
|  |         if [[ -d ${db} ]]; then | ||||||
|  |             while read -rd '' pkg; do | ||||||
|  |                 read -r match | ||||||
|  |                 pkg=${pkg#${db}} | ||||||
|  |                 pkg="${prefix}${pkg%-*-*/links}" | ||||||
|  |  | ||||||
|  |                 if (( VERBOSE )); then | ||||||
|  |                     printf '%-45s %s\n' "${pkg}" "${match}" | ||||||
|  |                 else | ||||||
|  |                     printf '%s\n' "${pkg}" | ||||||
|  |                 fi | ||||||
|  |             done < <(grep -rZ "${lib}" "${db}") | sort -u | ||||||
|  |         fi | ||||||
|  |     done | ||||||
|  | } | ||||||
|  |  | ||||||
|  | usage() { | ||||||
|  |     cat <<- _EOF_ | ||||||
|  |         Usage: ${BASH_SOURCE[0]##*/} [OPTIONS] REPO LIBNAME | ||||||
|  |  | ||||||
|  |         Check the soname links database for Artix Linux repositories containing | ||||||
|  |         packages linked to a given shared library. If the repository specified | ||||||
|  |         is "all", then all repositories will be searched, otherwise only the | ||||||
|  |         named repository will be searched. | ||||||
|  |  | ||||||
|  |         If the links database does not exist, it will be downloaded first. | ||||||
|  |  | ||||||
|  |         OPTIONS | ||||||
|  |             -v, --verbose   Show matched links in addition to pkgname | ||||||
|  |             -r, --refresh   Refresh the links databases | ||||||
|  |             -h, --help      Show this help text | ||||||
|  | _EOF_ | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # utility function to resort with multiple repos + no-verbose | ||||||
|  | resort() { sort -u; } | ||||||
|  |  | ||||||
|  | if (( $# == 0 )); then | ||||||
|  |     echo "error: No arguments passed." | ||||||
|  |     echo "Try '${BASH_SOURCE[0]##*/} --help' for more information." | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
|  | OPT_SHORT='vrh' | ||||||
|  | OPT_LONG=('verbose' 'refresh' 'help') | ||||||
|  | if ! parseopts "$OPT_SHORT" "${OPT_LONG[@]}" -- "$@"; then | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
|  | set  -- "${OPTRET[@]}" | ||||||
|  |  | ||||||
|  | while :; do | ||||||
|  |     case $1 in | ||||||
|  |         -v|--verbose) | ||||||
|  |             resort() { cat; } | ||||||
|  |             VERBOSE=1 | ||||||
|  |             ;; | ||||||
|  |         -r|--refresh) | ||||||
|  |             REFRESH=1 | ||||||
|  |             ;; | ||||||
|  |         -h|--help) | ||||||
|  |             usage | ||||||
|  |             exit 0 | ||||||
|  |             ;; | ||||||
|  |         --) | ||||||
|  |             shift; break | ||||||
|  |             ;; | ||||||
|  |     esac | ||||||
|  |     shift | ||||||
|  | done | ||||||
|  |  | ||||||
|  | if ! (( ( REFRESH && $# == 0 ) || $# == 2 )); then | ||||||
|  |     echo "error: Incorrect number of arguments passed." | ||||||
|  |     echo "Try '${BASH_SOURCE[0]##*/} --help' for more information." | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if (( REFRESH )) || [[ ! -d ${SOCACHE_DIR} ]]; then | ||||||
|  |     recache | ||||||
|  |     (( $# == 2 )) || exit 0 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | search "$@" | ||||||
| @@ -17,11 +17,33 @@ | |||||||
|  |  | ||||||
| # HOST_TREE_ARTIX='gitea@gitea.artixlinux.org:artix' | # HOST_TREE_ARTIX='gitea@gitea.artixlinux.org:artix' | ||||||
|  |  | ||||||
| # HOST_TREE_ARCH=git://projects.archlinux.org/svntogit | # TREE_DIR_ARTIX=${WORKSPACE_DIR}/artixlinux | ||||||
|  |  | ||||||
|  | # TREE_NAMES_ARTIX=( | ||||||
|  | #         packages | ||||||
|  | #         community | ||||||
|  | #         packages-kernel | ||||||
|  | #         packages-openrc | ||||||
|  | #         packages-runit | ||||||
|  | #         packages-xorg | ||||||
|  | #         packages-python | ||||||
|  | #         packages-perl | ||||||
|  | #         packages-qt5 | ||||||
|  | #         packages-ruby | ||||||
|  | # ) | ||||||
|  |  | ||||||
|  | # HOST_TREE_ARCH=git://git.archlinux.org/svntogit | ||||||
|  |  | ||||||
|  | # TREE_DIR_ARCH=${WORKSPACE_DIR}/archlinux | ||||||
|  |  | ||||||
|  | # TREE_NAMES_ARCH=(packages community) | ||||||
|  |  | ||||||
| # default repos root | # default repos root | ||||||
| # REPOS_ROOT=${WORKSPACE_DIR}/repos | # REPOS_ROOT=${WORKSPACE_DIR}/repos | ||||||
|  |  | ||||||
|  | # default mirror for sogrep | ||||||
|  | # SOLINKS_MIRROR="http://mirror1.artixlinux.org/repos" | ||||||
|  |  | ||||||
| ############################################# | ############################################# | ||||||
| ################ artools-iso ################ | ################ artools-iso ################ | ||||||
| ############################################# | ############################################# | ||||||
|   | |||||||
| @@ -1,4 +1,6 @@ | |||||||
| #!/hint/bash | #!/hint/bash | ||||||
|  | # shellcheck disable=2034 | ||||||
|  | 
 | ||||||
| # | # | ||||||
| # /etc/makepkg.conf | # /etc/makepkg.conf | ||||||
| # | # | ||||||
| @@ -37,8 +39,8 @@ CHOST="x86_64-pc-linux-gnu" | |||||||
| 
 | 
 | ||||||
| #-- Compiler and Linker Flags | #-- Compiler and Linker Flags | ||||||
| CPPFLAGS="-D_FORTIFY_SOURCE=2" | CPPFLAGS="-D_FORTIFY_SOURCE=2" | ||||||
| CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt" | CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt" | ||||||
| CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt" | CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt" | ||||||
| LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now" | LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now" | ||||||
| #-- Make Flags: change this for DistCC/SMP systems | #-- Make Flags: change this for DistCC/SMP systems | ||||||
| #MAKEFLAGS="-j2" | #MAKEFLAGS="-j2" | ||||||
| @@ -143,3 +145,5 @@ COMPRESSZ=(compress -c -f) | |||||||
| # | # | ||||||
| PKGEXT='.pkg.tar.xz' | PKGEXT='.pkg.tar.xz' | ||||||
| SRCEXT='.src.tar.gz' | SRCEXT='.src.tar.gz' | ||||||
|  | 
 | ||||||
|  | # vim: set ft=sh ts=2 sw=2 et: | ||||||
							
								
								
									
										63
									
								
								data/pkglists/freedesktop.list
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								data/pkglists/freedesktop.list
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | |||||||
|  | accountsservice | ||||||
|  | cairo | ||||||
|  | colord | ||||||
|  | cppunit | ||||||
|  | dbus | ||||||
|  | dbus-glib | ||||||
|  | dbus-python | ||||||
|  | desktop-file-utils | ||||||
|  | fontconfig | ||||||
|  | geoclue2 | ||||||
|  | glu | ||||||
|  | gst-plugins-bad | ||||||
|  | gst-plugins-base | ||||||
|  | gst-plugins-good | ||||||
|  | gst-plugins-ugly | ||||||
|  | gstreamer | ||||||
|  | harfbuzz | ||||||
|  | hicolor-icon-theme | ||||||
|  | libatasmart | ||||||
|  | libbsd | ||||||
|  | libdrm | ||||||
|  | libevdev | ||||||
|  | libinput | ||||||
|  | libmbim | ||||||
|  | libnice | ||||||
|  | libqmi | ||||||
|  | libvdpau | ||||||
|  | libxcb | ||||||
|  | libxft | ||||||
|  | libxi | ||||||
|  | media-player-info | ||||||
|  | mesa | ||||||
|  | modemmanager | ||||||
|  | networkmanager | ||||||
|  | orc | ||||||
|  | p11-kit | ||||||
|  | polkit | ||||||
|  | poppler | ||||||
|  | poppler-data | ||||||
|  | pulseaudio | ||||||
|  | pyxdg | ||||||
|  | r | ||||||
|  | sdl | ||||||
|  | shared-mime-info | ||||||
|  | sound-theme-freedesktop | ||||||
|  | startup-notification | ||||||
|  | systemdcompat | ||||||
|  | telepathy-glib | ||||||
|  | ttf-dejavu | ||||||
|  | udisks2 | ||||||
|  | upower | ||||||
|  | wayland | ||||||
|  | wayland-protocols | ||||||
|  | webrtc-audio-processing | ||||||
|  | xcb-proto | ||||||
|  | xcb-util | ||||||
|  | xcb-util-cursor | ||||||
|  | xcb-util-image | ||||||
|  | xcb-util-keysyms | ||||||
|  | xcb-util-renderutil | ||||||
|  | xcb-util-wm | ||||||
|  | xdg-user-dirs | ||||||
|  | xdg-utils | ||||||
							
								
								
									
										63
									
								
								data/pkglists/gnome.list
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								data/pkglists/gnome.list
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | |||||||
|  | adwaita-icon-theme | ||||||
|  | atk | ||||||
|  | at-spi2-atk | ||||||
|  | at-spi2-core | ||||||
|  | babl | ||||||
|  | cantarell-fonts | ||||||
|  | cogl | ||||||
|  | dconf | ||||||
|  | flatpak | ||||||
|  | gamin | ||||||
|  | gcab | ||||||
|  | gconf | ||||||
|  | gcr | ||||||
|  | gdk-pixbuf2 | ||||||
|  | gegl02 | ||||||
|  | git | ||||||
|  | glade | ||||||
|  | glib2 | ||||||
|  | glib-networking | ||||||
|  | gnome-common | ||||||
|  | gnome-keyring | ||||||
|  | gobject-introspection | ||||||
|  | gsettings-desktop-schemas | ||||||
|  | gssdp | ||||||
|  | gtk2 | ||||||
|  | gtk3 | ||||||
|  | gtk-doc | ||||||
|  | gtksourceview3 | ||||||
|  | gupnp | ||||||
|  | gupnp-igd | ||||||
|  | gvfs | ||||||
|  | json-glib | ||||||
|  | libcloudproviders | ||||||
|  | libcroco | ||||||
|  | libgee | ||||||
|  | libglade | ||||||
|  | libgnome-keyring | ||||||
|  | libgudev | ||||||
|  | libnotify | ||||||
|  | librsvg | ||||||
|  | libsecret | ||||||
|  | libsoup | ||||||
|  | libxml2 | ||||||
|  | libxslt | ||||||
|  | meld | ||||||
|  | mobile-broadband-provider-info | ||||||
|  | modemmanager | ||||||
|  | networkmanager | ||||||
|  | network-manager-applet | ||||||
|  | orca | ||||||
|  | ostree | ||||||
|  | pango | ||||||
|  | pyatspi | ||||||
|  | pygobject | ||||||
|  | pygobject2 | ||||||
|  | pygtk | ||||||
|  | rest | ||||||
|  | ttf-bitstream-vera | ||||||
|  | vala | ||||||
|  | vte | ||||||
|  | vte3 | ||||||
|  | yelp-tools | ||||||
|  | yelp-xsl | ||||||
							
								
								
									
										4
									
								
								data/pkglists/kde.list
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								data/pkglists/kde.list
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | |||||||
|  | phonon-gstreamer | ||||||
|  | polkit-qt | ||||||
|  | extra-cmake-modules | ||||||
|  | phonon | ||||||
							
								
								
									
										17
									
								
								data/pkglists/kernel.list
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								data/pkglists/kernel.list
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | linux | ||||||
|  | nvidia | ||||||
|  | nvidia-utils | ||||||
|  | acpi_call | ||||||
|  | bbswitch | ||||||
|  | broadcom-wl | ||||||
|  | tp_smapi | ||||||
|  | r8168 | ||||||
|  | virtualbox-modules-artix | ||||||
|  | linux-lts | ||||||
|  | nvidia-lts | ||||||
|  | acpi_call-lts | ||||||
|  | bbswitch-lts | ||||||
|  | broadcom-wl-lts | ||||||
|  | tp_smapi-lts | ||||||
|  | r8168-lts | ||||||
|  | linux-firmware | ||||||
							
								
								
									
										31
									
								
								data/pkglists/lxqt.list
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								data/pkglists/lxqt.list
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | |||||||
|  | lxqt-about | ||||||
|  | lxqt-admin | ||||||
|  | lxqt-config | ||||||
|  | lxqt-globalkeys | ||||||
|  | lxqt-notificationd | ||||||
|  | lxqt-openssh-askpass | ||||||
|  | lxqt-panel | ||||||
|  | lxqt-policykit | ||||||
|  | lxqt-powermanagement | ||||||
|  | lxqt-qtplugin | ||||||
|  | lxqt-runner | ||||||
|  | lxqt-session | ||||||
|  | lxqt-sudo | ||||||
|  | lxqt-themes | ||||||
|  | lxqt-build-tools | ||||||
|  |  | ||||||
|  | compton-conf | ||||||
|  | lximage-qt | ||||||
|  | obconf-qt | ||||||
|  | openbox | ||||||
|  | pcmanfm-qt | ||||||
|  | qterminal | ||||||
|  | liblxqt | ||||||
|  | libqtxdg | ||||||
|  | lxmenu-data | ||||||
|  | libfm-qt | ||||||
|  | libfm | ||||||
|  | qtermwidget | ||||||
|  | libsysstat | ||||||
|  | libstatgrab | ||||||
|  | qps | ||||||
							
								
								
									
										37
									
								
								data/pkglists/xorg.list
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								data/pkglists/xorg.list
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | libdmx | ||||||
|  | libfontenc | ||||||
|  | libice | ||||||
|  | libpciaccess | ||||||
|  | libsm | ||||||
|  | libx11 | ||||||
|  | libxau | ||||||
|  | libxaw | ||||||
|  | libxcomposite | ||||||
|  | libxcursor | ||||||
|  | libxdamage | ||||||
|  | libxdmcp | ||||||
|  | libxext | ||||||
|  | libxfixes | ||||||
|  | libxfont2 | ||||||
|  | libxi|libxft | ||||||
|  | libxinerama | ||||||
|  | libxkbfile | ||||||
|  | libxkbui | ||||||
|  | libxmu | ||||||
|  | libxpm | ||||||
|  | libxrandr | ||||||
|  | libxrender | ||||||
|  | libxres | ||||||
|  | libxshmfence | ||||||
|  | libxss | ||||||
|  | libxt | ||||||
|  | libxtst | ||||||
|  | libxv | ||||||
|  | libxvmc | ||||||
|  | libxxf86vm | ||||||
|  | pixman | ||||||
|  | xbitmaps | ||||||
|  | xkeyboard-config | ||||||
|  | xorgproto | ||||||
|  | xterm | ||||||
|  | xtrans | ||||||
| @@ -1,4 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
|  | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -17,7 +21,7 @@ is_subvolume() { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| is_same_fs() { | is_same_fs() { | ||||||
|     [[ "$(stat -c %d "$1")" == "$(stat -c %d "$1")" ]] |     [[ "$(stat -c %d "$1")" == "$(stat -c %d "$2")" ]] | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| subvolume_delete_recursive() { | subvolume_delete_recursive() { | ||||||
| @@ -1,4 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
|  | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -11,6 +15,7 @@ | |||||||
| declare -A pseudofs_types=([anon_inodefs]=1 | declare -A pseudofs_types=([anon_inodefs]=1 | ||||||
|                         [autofs]=1 |                         [autofs]=1 | ||||||
|                         [bdev]=1 |                         [bdev]=1 | ||||||
|  |                         [bpf]=1 | ||||||
|                         [binfmt_misc]=1 |                         [binfmt_misc]=1 | ||||||
|                         [cgroup]=1 |                         [cgroup]=1 | ||||||
|                         [cgroup2]=1 |                         [cgroup2]=1 | ||||||
| @@ -21,6 +26,7 @@ declare -A pseudofs_types=([anon_inodefs]=1 | |||||||
|                         [devpts]=1 |                         [devpts]=1 | ||||||
|                         [devtmpfs]=1 |                         [devtmpfs]=1 | ||||||
|                         [dlmfs]=1 |                         [dlmfs]=1 | ||||||
|  |                         [efivarfs]=1 | ||||||
|                         [fuse.gvfs-fuse-daemon]=1 |                         [fuse.gvfs-fuse-daemon]=1 | ||||||
|                         [fusectl]=1 |                         [fusectl]=1 | ||||||
|                         [hugetlbfs]=1 |                         [hugetlbfs]=1 | ||||||
| @@ -1,4 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
|  | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -11,8 +15,6 @@ | |||||||
| # export LC_MESSAGES=C | # export LC_MESSAGES=C | ||||||
| export LANG=C | export LANG=C | ||||||
| 
 | 
 | ||||||
| source /usr/share/makepkg/util.sh |  | ||||||
| 
 |  | ||||||
| if [[ -t 2 ]]; then | if [[ -t 2 ]]; then | ||||||
|     colorize |     colorize | ||||||
| else | else | ||||||
| @@ -62,8 +64,30 @@ slock() { | |||||||
|     fi |     fi | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | _setup_workdir=false | ||||||
|  | setup_workdir() { | ||||||
|  |     [[ -z ${WORKDIR:-} ]] && WORKDIR=$(mktemp -d --tmpdir "${0##*/}.XXXXXXXXXX") | ||||||
|  |     _setup_workdir=true | ||||||
|  |     trap 'trap_abort' INT QUIT TERM HUP | ||||||
|  |     trap 'trap_exit' EXIT | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | trap_abort() { | ||||||
|  |     trap - EXIT INT QUIT TERM HUP | ||||||
|  |     abort | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | trap_exit() { | ||||||
|  |     local r=$? | ||||||
|  |     trap - EXIT INT QUIT TERM HUP | ||||||
|  |     cleanup $r | ||||||
|  | } | ||||||
|  | 
 | ||||||
| cleanup() { | cleanup() { | ||||||
|     exit ${1:-0} |     if [[ -n ${WORKDIR:-} ]] && $_setup_workdir; then | ||||||
|  |         rm -rf "$WORKDIR" | ||||||
|  |     fi | ||||||
|  |     exit "${1:-0}" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| abort() { | abort() { | ||||||
| @@ -93,18 +117,11 @@ msg_row_notify(){ | |||||||
| 
 | 
 | ||||||
| msg_row(){ | msg_row(){ | ||||||
|     local mesg=$1; shift |     local mesg=$1; shift | ||||||
|     printf "${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2 | #     printf "${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2 | ||||||
|  |     printf "${WHITE} ${mesg}${ALL_OFF}\n" "$@" >&2 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| msg_row_upgrade(){ | msg_row_upgrade(){ | ||||||
|     local mesg=$1; shift |     local mesg=$1; shift | ||||||
|     printf "${RED}${RED} ${mesg} ${ALL_OFF}\n" "$@" >&2 |     printf "${RED} ${mesg} ${ALL_OFF}\n" "$@" >&2 | ||||||
| } |  | ||||||
| 
 |  | ||||||
| import(){ |  | ||||||
|     if [[ -r "$1" ]];then |  | ||||||
|         source "$1" |  | ||||||
|     else |  | ||||||
|         die 'Could not import %s' "$1" |  | ||||||
|     fi |  | ||||||
| } | } | ||||||
| @@ -1,4 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
|  | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -44,7 +48,7 @@ trap_setup(){ | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| chroot_mount() { | chroot_mount() { | ||||||
|     info "mount: [%s]" "$2" | #     info "mount: [%s]" "$2" | ||||||
|     mount "$@" && CHROOT_ACTIVE_MOUNTS=("$2" "${CHROOT_ACTIVE_MOUNTS[@]}") |     mount "$@" && CHROOT_ACTIVE_MOUNTS=("$2" "${CHROOT_ACTIVE_MOUNTS[@]}") | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @@ -84,16 +88,18 @@ chroot_mount_conditional() { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| chroot_setup(){ | chroot_setup(){ | ||||||
|     chroot_mount_conditional "! mountpoint -q '$1'" "$1" "$1" --bind && |     local mnt="$1" os="$2" run_args='-t tmpfs -o nosuid,nodev,mode=0755' | ||||||
|     chroot_mount proc "$1/proc" -t proc -o nosuid,noexec,nodev && |     $os && run_args='--bind' | ||||||
|     chroot_mount sys "$1/sys" -t sysfs -o nosuid,noexec,nodev,ro && |     chroot_mount_conditional "! mountpoint -q '$mnt'" "$mnt" "$mnt" --bind && | ||||||
|     ignore_error chroot_mount_conditional "[[ -d '$1/sys/firmware/efi/efivars' ]]" \ |     chroot_mount proc "$mnt/proc" -t proc -o nosuid,noexec,nodev && | ||||||
|         efivarfs "$1/sys/firmware/efi/efivars" -t efivarfs -o nosuid,noexec,nodev && |     chroot_mount sys "$mnt/sys" -t sysfs -o nosuid,noexec,nodev,ro && | ||||||
|     chroot_mount udev "$1/dev" -t devtmpfs -o mode=0755,nosuid && |     ignore_error chroot_mount_conditional "[[ -d '$mnt/sys/firmware/efi/efivars' ]]" \ | ||||||
|     chroot_mount devpts "$1/dev/pts" -t devpts -o mode=0620,gid=5,nosuid,noexec && |         efivarfs "$mnt/sys/firmware/efi/efivars" -t efivarfs -o nosuid,noexec,nodev && | ||||||
|     chroot_mount shm "$1/dev/shm" -t tmpfs -o mode=1777,nosuid,nodev && |     chroot_mount udev "$mnt/dev" -t devtmpfs -o mode=0755,nosuid && | ||||||
|     chroot_mount run "$1/run" -t tmpfs -o nosuid,nodev,mode=0755 && |     chroot_mount devpts "$mnt/dev/pts" -t devpts -o mode=0620,gid=5,nosuid,noexec && | ||||||
|     chroot_mount tmp "$1/tmp" -t tmpfs -o mode=1777,strictatime,nodev,nosuid |     chroot_mount shm "$mnt/dev/shm" -t tmpfs -o mode=1777,nosuid,nodev && | ||||||
|  |     chroot_mount /run "$mnt/run" ${run_args} && | ||||||
|  |     chroot_mount tmp "$mnt/tmp" -t tmpfs -o mode=1777,strictatime,nodev,nosuid | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| mount_os(){ | mount_os(){ | ||||||
| @@ -115,19 +121,19 @@ mount_os(){ | |||||||
|         esac |         esac | ||||||
|     done |     done | ||||||
| 
 | 
 | ||||||
|     chroot_setup "$1" |     chroot_setup "$1" true | ||||||
|     chroot_add_resolv_conf "$1" |     chroot_add_resolv_conf "$1" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| chroot_api_mount() { | chroot_api_mount() { | ||||||
|     CHROOT_ACTIVE_MOUNTS=() |     CHROOT_ACTIVE_MOUNTS=() | ||||||
|     trap_setup chroot_api_umount |     trap_setup chroot_api_umount | ||||||
|     chroot_setup "$1" |     chroot_setup "$1" false | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| chroot_api_umount() { | chroot_api_umount() { | ||||||
|     if (( ${#CHROOT_ACTIVE_MOUNTS[@]} )); then |     if (( ${#CHROOT_ACTIVE_MOUNTS[@]} )); then | ||||||
|         info "umount: [%s]" "${CHROOT_ACTIVE_MOUNTS[@]}" | #         info "umount: [%s]" "${CHROOT_ACTIVE_MOUNTS[@]}" | ||||||
|         umount "${CHROOT_ACTIVE_MOUNTS[@]}" |         umount "${CHROOT_ACTIVE_MOUNTS[@]}" | ||||||
|     fi |     fi | ||||||
|     unset CHROOT_ACTIVE_MOUNTS |     unset CHROOT_ACTIVE_MOUNTS | ||||||
| @@ -1,4 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
|  | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -38,12 +42,12 @@ prepare_dir(){ | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| get_disturl(){ | get_disturl(){ | ||||||
|     source /usr/lib/os-release |     . /usr/lib/os-release | ||||||
|     echo "${HOME_URL}" |     echo "${HOME_URL}" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| get_osname(){ | get_osname(){ | ||||||
|     source /usr/lib/os-release |     . /usr/lib/os-release | ||||||
|     echo "${NAME}" |     echo "${NAME}" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @@ -51,9 +55,9 @@ init_artools_base(){ | |||||||
| 
 | 
 | ||||||
|     ARCH=$(uname -m) |     ARCH=$(uname -m) | ||||||
| 
 | 
 | ||||||
|     [[ -z ${CHROOTS_DIR} ]] && CHROOTS_DIR='/var/lib/artools' |     CHROOTS_DIR=${CHROOTS_DIR:-'/var/lib/artools'} | ||||||
| 
 | 
 | ||||||
|     [[ -z ${WORKSPACE_DIR} ]] && WORKSPACE_DIR=/home/${OWNER}/artools-workspace |     WORKSPACE_DIR=${WORKSPACE_DIR:-"/home/${OWNER}/artools-workspace"} | ||||||
| 
 | 
 | ||||||
|     prepare_dir "${WORKSPACE_DIR}" |     prepare_dir "${WORKSPACE_DIR}" | ||||||
| } | } | ||||||
| @@ -66,55 +70,91 @@ init_artools_pkg(){ | |||||||
| 
 | 
 | ||||||
|     GIT_URL="https://${GIT_DOMAIN}" |     GIT_URL="https://${GIT_DOMAIN}" | ||||||
| 
 | 
 | ||||||
|     [[ -z ${GIT_TOKEN} ]] && GIT_TOKEN='' |     GIT_TOKEN=${GIT_TOKEN:-''} | ||||||
| 
 | 
 | ||||||
|     [[ -z ${TREE_DIR_ARTIX} ]] && TREE_DIR_ARTIX="${WORKSPACE_DIR}/artixlinux" |     TREE_DIR_ARTIX=${TREE_DIR_ARTIX:-"${WORKSPACE_DIR}/artixlinux"} | ||||||
| 
 | 
 | ||||||
|     [[ -z ${HOST_TREE_ARTIX} ]] && HOST_TREE_ARTIX="gitea@${GIT_DOMAIN}:artixlinux" |     [[ -z ${TREE_NAMES_ARTIX[@]} ]] && \ | ||||||
|  |     TREE_NAMES_ARTIX=( | ||||||
|  |         packages | ||||||
|  |         community | ||||||
|  |         packages-kernel | ||||||
|  |         packages-openrc | ||||||
|  |         packages-runit | ||||||
|  |         packages-xorg | ||||||
|  |         packages-python | ||||||
|  |         packages-perl | ||||||
|  |         packages-qt5 | ||||||
|  |         packages-ruby | ||||||
|  | #         packages-desktop | ||||||
|  | #         packages-kde | ||||||
|  | #         packages-gnome | ||||||
|  |     ) | ||||||
| 
 | 
 | ||||||
|     [[ -z ${TREE_DIR_ARCH} ]] && TREE_DIR_ARCH="${WORKSPACE_DIR}/archlinux" |     HOST_TREE_ARTIX=${HOST_TREE_ARTIX:-"gitea@${GIT_DOMAIN}:artixlinux"} | ||||||
| 
 | 
 | ||||||
|     [[ -z ${HOST_TREE_ARCH} ]] && HOST_TREE_ARCH='git://projects.archlinux.org/svntogit' |     TREE_DIR_ARCH=${TREE_DIR_ARCH:-"${WORKSPACE_DIR}/archlinux"} | ||||||
|  | 
 | ||||||
|  |     TREE_NAMES_ARCH=(packages community) | ||||||
|  | 
 | ||||||
|  |     HOST_TREE_ARCH=${HOST_TREE_ARCH:-'git://git.archlinux.org/svntogit'} | ||||||
| 
 | 
 | ||||||
|     CHROOTS_PKG="${CHROOTS_DIR}/buildpkg" |     CHROOTS_PKG="${CHROOTS_DIR}/buildpkg" | ||||||
| 
 | 
 | ||||||
|     [[ -z ${REPOS_ROOT} ]] && REPOS_ROOT="${WORKSPACE_DIR}/repos" |     REPOS_ROOT=${REPOS_ROOT:-"${WORKSPACE_DIR}/repos"} | ||||||
|  | 
 | ||||||
|  |     SOLINKS_MIRROR=${SOLINKS_MIRROR:-'http://mirror1.artixlinux.org/repos'} | ||||||
|  | 
 | ||||||
|  |     SOCACHE_DIR="${XDG_CACHE_HOME:-$USER_HOME/.cache}/sogrep" | ||||||
|  | 
 | ||||||
|  |     DBEXT=${DBEXT:-'xz'} | ||||||
|  | 
 | ||||||
|  |     LINKSDBEXT=${LINKSDBEXT:-"links.tar.${DBEXT}"} | ||||||
|  | 
 | ||||||
|  |     PKGDBEXT=${PKGDBEXT:-"db.tar.${DBEXT}"} | ||||||
|  | 
 | ||||||
|  |     [[ -z ${ARTIX_REPOS[@]} ]] && \ | ||||||
|  |     ARTIX_REPOS=( | ||||||
|  |         'goblins' 'gremlins' 'system' 'world' | ||||||
|  |         'galaxy-goblins' 'galaxy-gremlins' 'galaxy' | ||||||
|  |         'lib32-goblins' 'lib32-gremlins' 'lib32' | ||||||
|  |         'gnome-wobble' 'kde-wobble' | ||||||
|  |     ) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| init_artools_iso(){ | init_artools_iso(){ | ||||||
|     CHROOTS_ISO="${CHROOTS_DIR}/buildiso" |     CHROOTS_ISO="${CHROOTS_DIR}/buildiso" | ||||||
| 
 | 
 | ||||||
|     [[ -z ${ISO_POOL} ]] && ISO_POOL="${WORKSPACE_DIR}/iso" |     ISO_POOL=${ISO_POOL:-"${WORKSPACE_DIR}/iso"} | ||||||
| 
 | 
 | ||||||
|     prepare_dir "${ISO_POOL}" |     prepare_dir "${ISO_POOL}" | ||||||
| 
 | 
 | ||||||
|     PROFILE='base' |     PROFILE='base' | ||||||
| 
 | 
 | ||||||
|     [[ -z ${ISO_VERSION} ]] && ISO_VERSION=$(date +%Y%m%d) |     ISO_VERSION=${ISO_VERSION:-"$(date +%Y%m%d)"} | ||||||
| 
 | 
 | ||||||
|     [[ -z ${INITSYS} ]] && INITSYS="openrc" |     INITSYS=${INITSYS:-'openrc'} | ||||||
| 
 | 
 | ||||||
|     [[ -z ${GPG_KEY} ]] && GPG_KEY='' |     GPG_KEY=${GPG_KEY:-''} | ||||||
| 
 | 
 | ||||||
|     [[ -z ${UPLIMIT} ]] && UPLIMIT=1000 |     UPLIMIT=${UPLIMIT:-1000} | ||||||
| 
 | 
 | ||||||
|     FILE_HOST="download.${DOMAIN}" |     FILE_HOST="download.${DOMAIN}" | ||||||
| 
 | 
 | ||||||
|     [[ -z ${FILE_HOME} ]] && FILE_HOME="/srv/iso" |     FILE_HOME=${FILE_HOME:-'/srv/iso'} | ||||||
| 
 | 
 | ||||||
|     [[ -z ${FILE_PORT} ]] && FILE_PORT=65432 |     FILE_PORT=${FILE_PORT:-65432} | ||||||
| 
 | 
 | ||||||
|     [[ -z ${ACCOUNT} ]] && ACCOUNT="naughtyISOuploader" |     ACCOUNT=${ACCOUNT:-'naughtyISOuploader'} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| load_config(){ | load_config(){ | ||||||
| 
 | 
 | ||||||
|     [[ -f $1 ]] || return 1 |     local conf="$1" | ||||||
| 
 | 
 | ||||||
|     ARTOOLS_CONF="$1" |     [[ -f "$conf" ]] || return 1 | ||||||
| 
 | 
 | ||||||
|     [[ -r ${ARTOOLS_CONF} ]] && source ${ARTOOLS_CONF} |     [[ -r "$conf" ]] && . "$conf" | ||||||
| 
 | 
 | ||||||
|     init_artools_base |     init_artools_base | ||||||
| 
 | 
 | ||||||
| @@ -134,13 +174,6 @@ user_run(){ | |||||||
|     su ${OWNER} -c "$@" |     su ${OWNER} -c "$@" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| clean_dir(){ |  | ||||||
|     if [[ -d $1 ]]; then |  | ||||||
|         msg "Cleaning [%s] ..." "$1" |  | ||||||
|         rm -r $1/* |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| load_user_info(){ | load_user_info(){ | ||||||
|     OWNER=${SUDO_USER:-$USER} |     OWNER=${SUDO_USER:-$USER} | ||||||
| 
 | 
 | ||||||
| @@ -150,9 +183,8 @@ load_user_info(){ | |||||||
|         USER_HOME=$HOME |         USER_HOME=$HOME | ||||||
|     fi |     fi | ||||||
| 
 | 
 | ||||||
|     AT_USERCONFDIR="${XDG_CONFIG_HOME:-$USER_HOME/.config}/artools" |     USERCONFDIR="${XDG_CONFIG_HOME:-$USER_HOME/.config}" | ||||||
|     PAC_USERCONFDIR="${XDG_CONFIG_HOME:-$USER_HOME/.config}/pacman" |     prepare_dir "${USERCONFDIR}" | ||||||
|     prepare_dir "${AT_USERCONFDIR}" |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| # orig_argv=("$0" "$@") | # orig_argv=("$0" "$@") | ||||||
| @@ -1,4 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
|  | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
							
								
								
									
										160
									
								
								lib/iso/chrootcfg.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										160
									
								
								lib/iso/chrootcfg.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,160 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
|  | # This program is free software; you can redistribute it and/or modify | ||||||
|  | # it under the terms of the GNU General Public License as published by | ||||||
|  | # the Free Software Foundation; version 2 of the License. | ||||||
|  | # | ||||||
|  | # This program is distributed in the hope that it will be useful, | ||||||
|  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | # GNU General Public License for more details. | ||||||
|  |  | ||||||
|  | add_svc_rc(){ | ||||||
|  |     local mnt="$1" name="$2" rlvl="$3" | ||||||
|  |     if [[ -f $mnt/etc/init.d/$name ]];then | ||||||
|  |         msg2 "Setting %s ..." "$name" | ||||||
|  |         chroot $mnt rc-update add $name $rlvl &>/dev/null | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | add_svc_runit(){ | ||||||
|  |     local mnt="$1" name="$2" | ||||||
|  |     if [[ -d $mnt/etc/runit/sv/$name ]]; then | ||||||
|  |         msg2 "Setting %s ..." "$name" | ||||||
|  |         chroot $mnt ln -s /etc/runit/sv/$name /etc/runit/runsvdir/default &>/dev/null | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | set_xdm(){ | ||||||
|  |     if [[ -f $1/etc/conf.d/xdm ]];then | ||||||
|  |         local conf='DISPLAYMANAGER="'${DISPLAYMANAGER}'"' | ||||||
|  |         sed -i -e "s|^.*DISPLAYMANAGER=.*|${conf}|" $1/etc/conf.d/xdm | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | configure_hosts(){ | ||||||
|  |     sed -e "s|localhost.localdomain|localhost.localdomain ${HOST_NAME}|" -i $1/etc/hosts | ||||||
|  | } | ||||||
|  |  | ||||||
|  | configure_logind(){ | ||||||
|  |     local conf=$1/etc/$2/logind.conf | ||||||
|  |     if [[ -e $conf ]];then | ||||||
|  |         msg2 "Configuring logind ..." | ||||||
|  |         sed -i 's/#\(HandleSuspendKey=\)suspend/\1ignore/' "$conf" | ||||||
|  |         sed -i 's/#\(HandleLidSwitch=\)suspend/\1ignore/' "$conf" | ||||||
|  |         sed -i 's/#\(HandleHibernateKey=\)hibernate/\1ignore/' "$conf" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | configure_services(){ | ||||||
|  |     local mnt="$1" | ||||||
|  |     info "Configuring [%s]" "${INITSYS}" | ||||||
|  |     case ${INITSYS} in | ||||||
|  |         'openrc') | ||||||
|  |             for svc in ${SERVICES[@]}; do | ||||||
|  |                 [[ $svc == "xdm" ]] && set_xdm "$mnt" | ||||||
|  |                 add_svc_rc "$mnt" "$svc" "default" | ||||||
|  |             done | ||||||
|  |             for svc in ${SERVICES_LIVE[@]}; do | ||||||
|  |                 add_svc_rc "$mnt" "$svc" "default" | ||||||
|  |             done | ||||||
|  |         ;; | ||||||
|  |         'runit') | ||||||
|  |             for svc in ${SERVICES[@]}; do | ||||||
|  |                 add_svc_runit "$mnt" "$svc" | ||||||
|  |             done | ||||||
|  |             for svc in ${SERVICES_LIVE[@]}; do | ||||||
|  |                 add_svc_runit "$mnt" "$svc" | ||||||
|  |             done | ||||||
|  |         ;; | ||||||
|  |     esac | ||||||
|  |     info "Done configuring [%s]" "${INITSYS}" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | configure_system(){ | ||||||
|  |     local mnt="$1" | ||||||
|  |     case ${INITSYS} in | ||||||
|  |         'openrc' | 'runit') | ||||||
|  |             configure_logind "$mnt" "elogind" | ||||||
|  |         ;; | ||||||
|  |     esac | ||||||
|  |     echo ${HOST_NAME} > $mnt/etc/hostname | ||||||
|  | } | ||||||
|  |  | ||||||
|  | write_users_conf(){ | ||||||
|  |     local yaml=$(write_yaml_header) | ||||||
|  |     yaml+=$(write_empty_line) | ||||||
|  |     yaml+=$(write_yaml_map 0 'defaultGroups') | ||||||
|  |     local IFS=',' | ||||||
|  |     for g in ${ADDGROUPS[@]};do | ||||||
|  |         yaml+=$(write_yaml_seq 2 "$g") | ||||||
|  |     done | ||||||
|  |     unset IFS | ||||||
|  |     yaml+=$(write_yaml_map 0 'autologinGroup' 'autologin') | ||||||
|  |     yaml+=$(write_yaml_map 0 'doAutologin' 'false') | ||||||
|  |     yaml+=$(write_yaml_map 0 'sudoersGroup' 'wheel') | ||||||
|  |     yaml+=$(write_yaml_map 0 'setRootPassword' 'true') | ||||||
|  |     yaml+=$(write_yaml_map 0 'availableShells' '/bin/bash, /bin/zsh') | ||||||
|  | #     yaml+=$(write_yaml_map 0 'passwordRequirements') | ||||||
|  | #     yaml+=$(write_yaml_map 2 'minLength' '-1') | ||||||
|  | #     yaml+=$(write_yaml_map 2 'maxLength' '-1') | ||||||
|  | #     yaml+=$(write_yaml_map 2 'libpwquality') | ||||||
|  | #     yaml+=$(write_yaml_seq 4 "minlen=8") | ||||||
|  | #     yaml+=$(write_yaml_seq 4 "minclass=80") | ||||||
|  |     yaml+=$(write_empty_line) | ||||||
|  |     printf '%s' "${yaml}" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | write_servicescfg_conf(){ | ||||||
|  |     local yaml=$(write_yaml_header) | ||||||
|  |     yaml+=$(write_empty_line) | ||||||
|  |     case "${INITSYS}" in | ||||||
|  |         'runit') | ||||||
|  |             yaml+=$(write_yaml_map 0 'svDir' '/etc/runit/sv') | ||||||
|  |             yaml+=$(write_yaml_map 0 'runsvDir' '/etc/runit/runsvdir') | ||||||
|  |             yaml+=$(write_yaml_map 0 'services') | ||||||
|  |             yaml+=$(write_yaml_map 2 'enabled') | ||||||
|  |             for svc in ${SERVICES[@]};do | ||||||
|  |                 yaml+=$(write_yaml_seq_map 4 'name' "$svc") | ||||||
|  |                 yaml+=$(write_yaml_map 6 'runlevel' 'default') | ||||||
|  |             done | ||||||
|  |         ;; | ||||||
|  |         'openrc') | ||||||
|  |             yaml+=$(write_yaml_map 0 'initdDir' '/etc/init.d') | ||||||
|  |             yaml+=$(write_yaml_map 0 'runlevelsDir' '/etc/runlevels') | ||||||
|  |             yaml+=$(write_yaml_map 0 'services') | ||||||
|  |             for svc in ${SERVICES[@]};do | ||||||
|  |                 yaml+=$(write_yaml_seq_map 2 'name' "$svc") | ||||||
|  |                 yaml+=$(write_yaml_map 4 'runlevel' 'default') | ||||||
|  |             done | ||||||
|  |         ;; | ||||||
|  |     esac | ||||||
|  |     yaml+=$(write_empty_line) | ||||||
|  |     printf '%s' "${yaml}" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | configure_calamares(){ | ||||||
|  |     local mods="$1/etc/calamares/modules" | ||||||
|  |     if [[ -d "$mods" ]];then | ||||||
|  |         msg2 "Configuring Calamares" | ||||||
|  |         write_users_conf > "$mods"/users.conf | ||||||
|  |         write_servicescfg_conf > "$mods"/services-"${INITSYS}".conf | ||||||
|  |         sed -e "s|openrc|${INITSYS}|" -i "$mods"/postcfg.conf | ||||||
|  |         sed -e "s|services-openrc|services-${INITSYS}|" -i "$1"/etc/calamares/settings.conf | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | configure_live_image(){ | ||||||
|  |     local fs="$1" | ||||||
|  |     msg "Configuring [livefs]" | ||||||
|  |     configure_hosts "$fs" | ||||||
|  |     configure_system "$fs" | ||||||
|  |     configure_services "$fs" | ||||||
|  |     configure_calamares "$fs" | ||||||
|  |     [[ ! -d "$fs/etc/artools" ]] && mkdir -p "$fs/etc/artools" | ||||||
|  |     write_live_session_conf > "$fs/etc/artools/live.conf" | ||||||
|  |     msg "Done configuring [livefs]" | ||||||
|  | } | ||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -26,8 +29,8 @@ prepare_initramfs(){ | |||||||
|     fi |     fi | ||||||
| 
 | 
 | ||||||
|     if [[ -n ${GPG_KEY} ]]; then |     if [[ -n ${GPG_KEY} ]]; then | ||||||
|         user_run "gpg --export ${GPG_KEY} >${AT_USERCONFDIR}/gpgkey" |         user_run "gpg --export ${GPG_KEY} >${USERCONFDIR}/artools/gpgkey" | ||||||
|         exec 17<>${AT_USERCONFDIR}/GPG_KEY |         exec 17<>${USERCONFDIR}/artools/GPG_KEY | ||||||
|     fi |     fi | ||||||
|     local _kernel=$(cat $mnt/usr/lib/modules/*/version) |     local _kernel=$(cat $mnt/usr/lib/modules/*/version) | ||||||
|     ARTIX_GNUPG_FD=${GPG_KEY:+17} chroot-run $mnt \ |     ARTIX_GNUPG_FD=${GPG_KEY:+17} chroot-run $mnt \ | ||||||
| @@ -38,8 +41,8 @@ prepare_initramfs(){ | |||||||
|     if [[ -n ${GPG_KEY} ]]; then |     if [[ -n ${GPG_KEY} ]]; then | ||||||
|         exec 17<&- |         exec 17<&- | ||||||
|     fi |     fi | ||||||
|     if [[ -f ${AT_USERCONFDIR}/GPG_KEY ]]; then |     if [[ -f ${USERCONFDIR}/artools/GPG_KEY ]]; then | ||||||
|         rm ${AT_USERCONFDIR}/GPG_KEY |         rm ${USERCONFDIR}/artools/GPG_KEY | ||||||
|     fi |     fi | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
							
								
								
									
										147
									
								
								lib/iso/iso.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										147
									
								
								lib/iso/iso.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,147 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
|  | # This program is free software; you can redistribute it and/or modify | ||||||
|  | # it under the terms of the GNU General Public License as published by | ||||||
|  | # the Free Software Foundation; version 2 of the License. | ||||||
|  | # | ||||||
|  | # This program is distributed in the hope that it will be useful, | ||||||
|  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | # GNU General Public License for more details. | ||||||
|  |  | ||||||
|  | gen_iso_fn(){ | ||||||
|  |     local vars=("artix") name | ||||||
|  |     vars+=("${PROFILE}") | ||||||
|  |     vars+=("${INITSYS}") | ||||||
|  |     case "${REPOSITORY}" in | ||||||
|  |         'gremlins'|'goblins') vars+=("${REPOSITORY}") ;; | ||||||
|  |     esac | ||||||
|  |     vars+=("${ISO_VERSION}") | ||||||
|  |     vars+=("${ARCH}") | ||||||
|  |     for n in ${vars[@]};do | ||||||
|  |         name=${name:-}${name:+-}${n} | ||||||
|  |     done | ||||||
|  |     echo $name | ||||||
|  | } | ||||||
|  |  | ||||||
|  | clean_iso_root(){ | ||||||
|  |     local dest="$1" | ||||||
|  |     msg "Deleting isoroot [%s] ..." "${dest##*/}" | ||||||
|  |     rm -rf --one-file-system "$dest" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | make_sig () { | ||||||
|  |     local idir="$1" file="$2" | ||||||
|  |     msg2 "Creating signature file..." | ||||||
|  |     cd "$idir" | ||||||
|  |     user_own "$idir" | ||||||
|  |     user_run "gpg --detach-sign --default-key ${GPG_KEY} $file.sfs" | ||||||
|  |     chown -R root "$idir" | ||||||
|  |     cd ${OLDPWD} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | make_checksum(){ | ||||||
|  |     local idir="$1" file="$2" | ||||||
|  |     msg2 "Creating sha512sum ..." | ||||||
|  |     cd $idir | ||||||
|  |     sha512sum $file.sfs > $file.sha512 | ||||||
|  |     cd ${OLDPWD} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # $1: image path | ||||||
|  | make_sfs() { | ||||||
|  |     local src="$1" | ||||||
|  |     if [[ ! -e "${src}" ]]; then | ||||||
|  |         error "The path %s does not exist" "${src}" | ||||||
|  |         retrun 1 | ||||||
|  |     fi | ||||||
|  |     local timer=$(get_timer) dest=${iso_root}/artix/${ARCH} | ||||||
|  |     local name=${1##*/} | ||||||
|  |     local sfs="${dest}/${name}.sfs" | ||||||
|  |     mkdir -p ${dest} | ||||||
|  |     msg "Generating SquashFS image for %s" "${src}" | ||||||
|  |     if [[ -f "${sfs}" ]]; then | ||||||
|  |         local has_changed_dir=$(find ${src} -newer ${sfs}) | ||||||
|  |         msg2 "Possible changes for %s ..." "${src}"  >> /tmp/buildiso.debug | ||||||
|  |         msg2 "%s" "${has_changed_dir}" >> /tmp/buildiso.debug | ||||||
|  |         if [[ -n "${has_changed_dir}" ]]; then | ||||||
|  |             msg2 "SquashFS image %s is not up to date, rebuilding..." "${sfs}" | ||||||
|  |             rm "${sfs}" | ||||||
|  |         else | ||||||
|  |             msg2 "SquashFS image %s is up to date, skipping." "${sfs}" | ||||||
|  |             return | ||||||
|  |         fi | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     if ${persist};then | ||||||
|  |         local size=32G | ||||||
|  |         local mnt="${mnt_dir}/${name}" | ||||||
|  |         msg2 "Creating ext4 image of %s ..." "${size}" | ||||||
|  |         truncate -s ${size} "${src}.img" | ||||||
|  |         local ext4_args=() | ||||||
|  |         ext4_args+=(-O ^has_journal,^resize_inode -E lazy_itable_init=0 -m 0) | ||||||
|  |         mkfs.ext4 ${ext4_args[@]} -F "${src}.img" &>/dev/null | ||||||
|  |         tune2fs -c 0 -i 0 "${src}.img" &> /dev/null | ||||||
|  |         mount_img "${work_dir}/${name}.img" "${mnt}" | ||||||
|  |         msg2 "Copying %s ..." "${src}/" | ||||||
|  |         cp -aT "${src}/" "${mnt}/" | ||||||
|  |         umount_img "${mnt}" | ||||||
|  |  | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     msg2 "Creating SquashFS image, this may take some time..." | ||||||
|  |     local mksfs_args=() | ||||||
|  |     if ${persist};then | ||||||
|  |         mksfs_args+=(${work_dir}/${name}.img) | ||||||
|  |     else | ||||||
|  |         mksfs_args+=(${src}) | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     mksfs_args+=(${sfs} -noappend) | ||||||
|  |  | ||||||
|  |     local highcomp="-b 256K -Xbcj x86" comp='xz' | ||||||
|  |  | ||||||
|  |     mksfs_args+=(-comp ${comp} ${highcomp}) | ||||||
|  |  | ||||||
|  |     mksquashfs "${mksfs_args[@]}" | ||||||
|  |  | ||||||
|  |     make_checksum "${dest}" "${name}" | ||||||
|  |     ${persist} && rm "${src}.img" | ||||||
|  |  | ||||||
|  |     if [[ -n ${GPG_KEY} ]];then | ||||||
|  |         make_sig "${dest}" "${name}" | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     show_elapsed_time "${FUNCNAME}" "${timer_start}" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | assemble_iso(){ | ||||||
|  |     msg "Creating ISO image..." | ||||||
|  |     local mod_date=$(date -u +%Y-%m-%d-%H-%M-%S-00  | sed -e s/-//g) | ||||||
|  |  | ||||||
|  |     xorriso -as mkisofs \ | ||||||
|  |         --modification-date=${mod_date} \ | ||||||
|  |         --protective-msdos-label \ | ||||||
|  |         -volid "${iso_label}" \ | ||||||
|  |         -appid "$(get_osname) Live/Rescue CD" \ | ||||||
|  |         -publisher "$(get_osname) <$(get_disturl)>" \ | ||||||
|  |         -preparer "Prepared by artools/${0##*/}" \ | ||||||
|  |         -r -graft-points -no-pad \ | ||||||
|  |         --sort-weight 0 / \ | ||||||
|  |         --sort-weight 1 /boot \ | ||||||
|  |         --grub2-mbr ${iso_root}/boot/grub/i386-pc/boot_hybrid.img \ | ||||||
|  |         -partition_offset 16 \ | ||||||
|  |         -b boot/grub/i386-pc/eltorito.img \ | ||||||
|  |         -c boot.catalog \ | ||||||
|  |         -no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info \ | ||||||
|  |         -eltorito-alt-boot \ | ||||||
|  |         -append_partition 2 0xef ${iso_root}/efi.img \ | ||||||
|  |         -e --interval:appended_partition_2:all:: -iso_mbr_part_type 0x00 \ | ||||||
|  |         -no-emul-boot \ | ||||||
|  |         -iso-level 3 \ | ||||||
|  |         -o ${iso_dir}/${iso_file} \ | ||||||
|  |         ${iso_root}/ | ||||||
|  | } | ||||||
							
								
								
									
										68
									
								
								lib/iso/mount.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								lib/iso/mount.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
|  | # This program is free software; you can redistribute it and/or modify | ||||||
|  | # it under the terms of the GNU General Public License as published by | ||||||
|  | # the Free Software Foundation; version 2 of the License. | ||||||
|  | # | ||||||
|  | # This program is distributed in the hope that it will be useful, | ||||||
|  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | # GNU General Public License for more details. | ||||||
|  |  | ||||||
|  | track_img() { | ||||||
|  |     info "mount: [%s]" "$2" | ||||||
|  |     mount "$@" && IMG_ACTIVE_MOUNTS=("$2" "${IMG_ACTIVE_MOUNTS[@]}") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | mount_img() { | ||||||
|  |     IMG_ACTIVE_MOUNTS=() | ||||||
|  |     mkdir -p "$2" | ||||||
|  |     track_img "$1" "$2" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | umount_img() { | ||||||
|  |     if [[ -n ${IMG_ACTIVE_MOUNTS[@]} ]];then | ||||||
|  |         info "umount: [%s]" "${IMG_ACTIVE_MOUNTS[@]}" | ||||||
|  |         umount "${IMG_ACTIVE_MOUNTS[@]}" | ||||||
|  |         unset IMG_ACTIVE_MOUNTS | ||||||
|  |         rm -r "$1" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | track_fs() { | ||||||
|  |     info "overlayfs mount: [%s]" "$5" | ||||||
|  |     mount "$@" && FS_ACTIVE_MOUNTS=("$5" "${FS_ACTIVE_MOUNTS[@]}") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | mount_overlay(){ | ||||||
|  |     FS_ACTIVE_MOUNTS=() | ||||||
|  |     local lower= upper="$1" work="$2" pkglist="$3" | ||||||
|  |     local fs=${upper##*/} | ||||||
|  |     local rootfs="$work/rootfs" desktopfs="$work/desktopfs" livefs="$work/livefs" | ||||||
|  |     mkdir -p "${mnt_dir}/work" | ||||||
|  |     mkdir -p "$upper" | ||||||
|  |     case $fs in | ||||||
|  |         desktopfs) lower="$rootfs" ;; | ||||||
|  |         livefs) | ||||||
|  |             lower="$rootfs" | ||||||
|  |             [[ -f $pkglist ]] && lower="$desktopfs":"$rootfs" | ||||||
|  |         ;; | ||||||
|  |         bootfs) | ||||||
|  |             lower="$livefs":"$rootfs" | ||||||
|  |             [[ -f $pkglist ]] && lower="$livefs":"$desktopfs":"$rootfs" | ||||||
|  |         ;; | ||||||
|  |     esac | ||||||
|  |     track_fs -t overlay overlay -olowerdir="$lower",upperdir="$upper",workdir="${mnt_dir}/work" "$upper" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | umount_overlay(){ | ||||||
|  |     if [[ -n ${FS_ACTIVE_MOUNTS[@]} ]];then | ||||||
|  |         info "overlayfs umount: [%s]" "${FS_ACTIVE_MOUNTS[@]}" | ||||||
|  |         umount "${FS_ACTIVE_MOUNTS[@]}" | ||||||
|  |         unset FS_ACTIVE_MOUNTS | ||||||
|  |         rm -rf "${mnt_dir}/work" | ||||||
|  |     fi | ||||||
|  | } | ||||||
| @@ -1,4 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
|  | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -46,22 +50,20 @@ load_profile(){ | |||||||
| 
 | 
 | ||||||
|     [[ -f $profdir/$prof/profile.conf ]] || return 1 |     [[ -f $profdir/$prof/profile.conf ]] || return 1 | ||||||
| 
 | 
 | ||||||
|     [[ -r $profdir/$prof/profile.conf ]] && source $profdir/$prof/profile.conf |     [[ -r $profdir/$prof/profile.conf ]] && . $profdir/$prof/profile.conf | ||||||
| 
 | 
 | ||||||
|     [[ -z ${DISPLAYMANAGER} ]] && DISPLAYMANAGER="none" |     DISPLAYMANAGER=${DISPLAYMANAGER:-'none'} | ||||||
| 
 | 
 | ||||||
|     [[ -z ${AUTOLOGIN} ]] && AUTOLOGIN="true" |     AUTOLOGIN=${AUTOLOGIN:-"true"} | ||||||
|     [[ ${DISPLAYMANAGER} == 'none' ]] && AUTOLOGIN="false" |     [[ ${DISPLAYMANAGER} == 'none' ]] && AUTOLOGIN="false" | ||||||
| 
 | 
 | ||||||
|     [[ -z ${HOST_NAME} ]] && HOST_NAME="artix" |     HOST_NAME=${HOST_NAME:-'artix'} | ||||||
| 
 | 
 | ||||||
|     [[ -z ${USER_NAME} ]] && USER_NAME="artix" |     USER_NAME=${USER_NAME:-'artix'} | ||||||
| 
 | 
 | ||||||
|     [[ -z ${PASSWORD} ]] && PASSWORD="artix" |     PASSWORD=${PASSWORD:-'artix'} | ||||||
| 
 | 
 | ||||||
|     if [[ -z ${ADDGROUPS} ]];then |     ADDGROUPS=${ADDGROUPS:-"video,power,optical,network,lp,scanner,wheel,users,log"} | ||||||
|         ADDGROUPS="video,power,cdrom,network,lp,scanner,wheel,users,log" |  | ||||||
|     fi |  | ||||||
| 
 | 
 | ||||||
|     if [[ -z ${SERVICES[@]} ]];then |     if [[ -z ${SERVICES[@]} ]];then | ||||||
|         SERVICES=('acpid' 'bluetooth' 'cronie' 'cupsd' 'syslog-ng' 'NetworkManager') |         SERVICES=('acpid' 'bluetooth' 'cronie' 'cupsd' 'syslog-ng' 'NetworkManager') | ||||||
							
								
								
									
										282
									
								
								lib/iso/util.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										282
									
								
								lib/iso/util.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,282 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
|  | # This program is free software; you can redistribute it and/or modify | ||||||
|  | # it under the terms of the GNU General Public License as published by | ||||||
|  | # the Free Software Foundation; version 2 of the License. | ||||||
|  | # | ||||||
|  | # This program is distributed in the hope that it will be useful, | ||||||
|  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | # GNU General Public License for more details. | ||||||
|  |  | ||||||
|  | error_function() { | ||||||
|  |     if [[ -p $logpipe ]]; then | ||||||
|  |         rm "$logpipe" | ||||||
|  |     fi | ||||||
|  |     local func="$1" | ||||||
|  |     # first exit all subshells, then print the error | ||||||
|  |     if (( ! BASH_SUBSHELL )); then | ||||||
|  |         error "A failure occurred in %s()." "$func" | ||||||
|  |         plain "Aborting..." | ||||||
|  |     fi | ||||||
|  |     umount_overlay | ||||||
|  |     umount_img | ||||||
|  |     exit 2 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # $1: function | ||||||
|  | run_log(){ | ||||||
|  |     local func="$1" log_dir='/var/log/artools' | ||||||
|  |     [[ ! -d $log_dir ]] && mkdir -p $log_dir | ||||||
|  |     local logfile=${log_dir}/$(gen_iso_fn).$func.log | ||||||
|  |     logpipe=$(mktemp -u "/tmp/$func.pipe.XXXXXXXX") | ||||||
|  |     mkfifo "$logpipe" | ||||||
|  |     tee "$logfile" < "$logpipe" & | ||||||
|  |     local teepid=$! | ||||||
|  |     $func &> "$logpipe" | ||||||
|  |     wait $teepid | ||||||
|  |     rm "$logpipe" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | run_safe() { | ||||||
|  |     local restoretrap func="$1" | ||||||
|  |     set -e | ||||||
|  |     set -E | ||||||
|  |     restoretrap=$(trap -p ERR) | ||||||
|  |     trap 'error_function $func' ERR | ||||||
|  |  | ||||||
|  |     if ${log};then | ||||||
|  |         run_log "$func" | ||||||
|  |     else | ||||||
|  |         "$func" | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     eval $restoretrap | ||||||
|  |     set +E | ||||||
|  |     set +e | ||||||
|  | } | ||||||
|  |  | ||||||
|  | trap_exit() { | ||||||
|  |     local sig=$1; shift | ||||||
|  |     error "$@" | ||||||
|  |     umount_overlay | ||||||
|  |     trap -- "$sig" | ||||||
|  |     kill "-$sig" "$$" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | prepare_traps(){ | ||||||
|  |     for sig in TERM HUP QUIT; do | ||||||
|  |         trap "trap_exit $sig \"$(gettext "%s signal caught. Exiting...")\" \"$sig\"" "$sig" | ||||||
|  |     done | ||||||
|  |     trap 'trap_exit INT "$(gettext "Aborted by user! Exiting...")"' INT | ||||||
|  | #     trap 'trap_exit USR1 "$(gettext "An unknown error has occurred. Exiting...")"' ERR | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Build ISO | ||||||
|  | make_iso() { | ||||||
|  |     msg "Start [Build ISO]" | ||||||
|  |     touch "${iso_root}/.artix" | ||||||
|  |     for sfs_dir in $(find "${work_dir}" -maxdepth 1 -type d); do | ||||||
|  |         if [[ "${sfs_dir}" != "${work_dir}" ]]; then | ||||||
|  |             make_sfs "${sfs_dir}" | ||||||
|  |         fi | ||||||
|  |     done | ||||||
|  |  | ||||||
|  |     msg "Making bootable image" | ||||||
|  |     # Sanity checks | ||||||
|  |     [[ ! -d "${iso_root}" ]] && return 1 | ||||||
|  |     if [[ -f "${iso_dir}/${iso_file}" ]]; then | ||||||
|  |         msg2 "Removing existing bootable image..." | ||||||
|  |         rm -rf "${iso_dir}/${iso_file}" | ||||||
|  |     fi | ||||||
|  |     assemble_iso | ||||||
|  |     msg "Done [Build ISO]" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | install_packages(){ | ||||||
|  |     local fs="$1" | ||||||
|  |     setarch "${ARCH}" mkchroot \ | ||||||
|  |         "${mkchroot_args[@]}" "${fs}" "${packages[@]}" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | copy_overlay(){ | ||||||
|  |     local src="$1" dest="$2" | ||||||
|  |     if [[ -e "$src" ]];then | ||||||
|  |         msg2 "Copying [%s] ..." "${src##*/}" | ||||||
|  |         cp -LR "$src"/* "$dest" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | clean_up_image(){ | ||||||
|  |     local path mnt="$1" | ||||||
|  |     msg2 "Cleaning [%s]" "${mnt##*/}" | ||||||
|  |  | ||||||
|  |     if [[ -f "$mnt/etc/locale.gen.orig" ]];then | ||||||
|  |         mv "$mnt/etc/locale.gen.orig" "$mnt/etc/locale.gen" | ||||||
|  |         rm "$mnt/etc/locale.conf" | ||||||
|  |     fi | ||||||
|  |     path=$mnt/boot | ||||||
|  |     if [[ -d "$path" ]]; then | ||||||
|  |         find "$path" -name 'initramfs*.img' -delete &> /dev/null | ||||||
|  |     fi | ||||||
|  |     path=$mnt/var/lib/pacman/sync | ||||||
|  |     if [[ -d $path ]];then | ||||||
|  |         find "$path" -type f -delete &> /dev/null | ||||||
|  |     fi | ||||||
|  |     path=$mnt/var/cache/pacman/pkg | ||||||
|  |     if [[ -d $path ]]; then | ||||||
|  |         find "$path" -type f -delete &> /dev/null | ||||||
|  |     fi | ||||||
|  |     path=$mnt/var/log | ||||||
|  |     if [[ -d $path ]]; then | ||||||
|  |         find "$path" -type f -delete &> /dev/null | ||||||
|  |     fi | ||||||
|  |     path=$mnt/var/tmp | ||||||
|  |     if [[ -d $path ]];then | ||||||
|  |         find "$path" -mindepth 1 -delete &> /dev/null | ||||||
|  |     fi | ||||||
|  |     path=$mnt/tmp | ||||||
|  |     if [[ -d $path ]];then | ||||||
|  |         find "$path" -mindepth 1 -delete &> /dev/null | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     if [[ ${mnt##*/} == 'livefs' ]];then | ||||||
|  |         rm -rf "$mnt/etc/pacman.d/gnupg" | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     find "$mnt" -name *.pacnew -name *.pacsave -name *.pacorig -delete | ||||||
|  |     if [[ -f "$mnt/boot/grub/grub.cfg" ]]; then | ||||||
|  |         rm $mnt/boot/grub/grub.cfg | ||||||
|  |     fi | ||||||
|  |     if [[ -f "$mnt/etc/machine-id" ]]; then | ||||||
|  |         rm $mnt/etc/machine-id | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | make_rootfs() { | ||||||
|  |     if [[ ! -e ${work_dir}/rootfs.lock ]]; then | ||||||
|  |         msg "Prepare [Base installation] (rootfs)" | ||||||
|  |         local rootfs="${work_dir}/rootfs" | ||||||
|  |  | ||||||
|  |         prepare_dir "${rootfs}" | ||||||
|  |  | ||||||
|  |         install_packages "${rootfs}" | ||||||
|  |  | ||||||
|  |         copy_overlay "${ROOT_OVERLAY}" "${rootfs}" | ||||||
|  |  | ||||||
|  |         clean_up_image "${rootfs}" | ||||||
|  |  | ||||||
|  |         msg "Done [Base installation] (rootfs)" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | make_desktopfs() { | ||||||
|  |     if [[ ! -e ${work_dir}/desktopfs.lock ]]; then | ||||||
|  |         msg "Prepare [Desktop installation] (desktopfs)" | ||||||
|  |         local desktopfs="${work_dir}/desktopfs" | ||||||
|  |  | ||||||
|  |         prepare_dir "${desktopfs}" | ||||||
|  |  | ||||||
|  |         mount_overlay "${desktopfs}" "${work_dir}" | ||||||
|  |  | ||||||
|  |         install_packages "${desktopfs}" | ||||||
|  |  | ||||||
|  |         copy_overlay "${DESKTOP_OVERLAY}" "${desktopfs}" | ||||||
|  |  | ||||||
|  |         umount_overlay | ||||||
|  |         clean_up_image "${desktopfs}" | ||||||
|  |  | ||||||
|  |         msg "Done [Desktop installation] (desktopfs)" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | make_livefs() { | ||||||
|  |     if [[ ! -e ${work_dir}/livefs.lock ]]; then | ||||||
|  |         msg "Prepare [Live installation] (livefs)" | ||||||
|  |         local livefs="${work_dir}/livefs" | ||||||
|  |  | ||||||
|  |         prepare_dir "${livefs}" | ||||||
|  |  | ||||||
|  |         mount_overlay "${livefs}" "${work_dir}" "${DESKTOP_LIST}" | ||||||
|  |  | ||||||
|  |         install_packages "${livefs}" | ||||||
|  |  | ||||||
|  |         copy_overlay "${LIVE_OVERLAY}" "${livefs}" | ||||||
|  |  | ||||||
|  |         configure_live_image "${livefs}" | ||||||
|  |  | ||||||
|  |         umount_overlay | ||||||
|  |  | ||||||
|  |         clean_up_image "${livefs}" | ||||||
|  |  | ||||||
|  |         msg "Done [Live installation] (livefs)" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | make_bootfs() { | ||||||
|  |     if [[ ! -e ${work_dir}/bootfs.lock ]]; then | ||||||
|  |         msg "Prepare [/iso/boot]" | ||||||
|  |         local boot="${iso_root}/boot" | ||||||
|  |  | ||||||
|  |         prepare_dir "${boot}" | ||||||
|  |  | ||||||
|  |         cp ${work_dir}/rootfs/boot/vmlinuz* ${boot}/vmlinuz-${ARCH} | ||||||
|  |  | ||||||
|  |         local bootfs="${work_dir}/bootfs" | ||||||
|  |  | ||||||
|  |         mount_overlay "${bootfs}" "${work_dir}" "${DESKTOP_LIST}" | ||||||
|  |  | ||||||
|  |         prepare_initcpio "${bootfs}" | ||||||
|  |         prepare_initramfs "${bootfs}" | ||||||
|  |  | ||||||
|  |         cp ${bootfs}/boot/initramfs.img ${boot}/initramfs-${ARCH}.img | ||||||
|  |         prepare_boot_extras "${bootfs}" "${boot}" | ||||||
|  |  | ||||||
|  |         umount_overlay | ||||||
|  |  | ||||||
|  |         rm -R ${bootfs} | ||||||
|  |         : > ${work_dir}/bootfs.lock | ||||||
|  |         msg "Done [/iso/boot]" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | make_grub(){ | ||||||
|  |     if [[ ! -e ${work_dir}/grub.lock ]]; then | ||||||
|  |         msg "Prepare [/iso/boot/grub]" | ||||||
|  |  | ||||||
|  |         prepare_grub "${work_dir}/rootfs" "${work_dir}/livefs" "${iso_root}" | ||||||
|  |  | ||||||
|  |         configure_grub "${iso_root}" | ||||||
|  |  | ||||||
|  |         : > ${work_dir}/grub.lock | ||||||
|  |         msg "Done [/iso/boot/grub]" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | compress_images(){ | ||||||
|  |     local timer=$(get_timer) | ||||||
|  |     run_safe "make_iso" | ||||||
|  |     user_own "${iso_dir}" "-R" | ||||||
|  |     show_elapsed_time "${FUNCNAME}" "${timer}" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | prepare_images(){ | ||||||
|  |     local timer=$(get_timer) | ||||||
|  |     load_pkgs "${ROOT_LIST}" "${INITSYS}" | ||||||
|  |     run_safe "make_rootfs" | ||||||
|  |     if [[ -f "${DESKTOP_LIST}" ]] ; then | ||||||
|  |         load_pkgs "${DESKTOP_LIST}" "${INITSYS}" | ||||||
|  |         run_safe "make_desktopfs" | ||||||
|  |     fi | ||||||
|  |     if [[ -f ${LIVE_LIST} ]]; then | ||||||
|  |         load_pkgs "${LIVE_LIST}" "${INITSYS}" | ||||||
|  |         run_safe "make_livefs" | ||||||
|  |     fi | ||||||
|  |     run_safe "make_bootfs" | ||||||
|  |     run_safe "make_grub" | ||||||
|  |  | ||||||
|  |     show_elapsed_time "${FUNCNAME}" "${timer}" | ||||||
|  | } | ||||||
							
								
								
									
										62
									
								
								lib/pkg/gitea.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								lib/pkg/gitea.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
|  | # This program is free software; you can redistribute it and/or modify | ||||||
|  | # it under the terms of the GNU General Public License as published by | ||||||
|  | # the Free Software Foundation; version 2 of the License. | ||||||
|  | # | ||||||
|  | # This program is distributed in the hope that it will be useful, | ||||||
|  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | # GNU General Public License for more details. | ||||||
|  |  | ||||||
|  | create_repo(){ | ||||||
|  |     local pkg="$1" org="$2" | ||||||
|  |     local gitname=$(get_compliant_name "$pkg") | ||||||
|  |     local json="{ \"auto_init\": true, \"name\":\"$gitname\", \"gitignores\":\"ArchLinuxPackages\", \"readme\": \"Default\" }" | ||||||
|  |  | ||||||
|  |     msg2 "Create package repo [%s] in org (%s)" "${pkg}" "${org}" | ||||||
|  |  | ||||||
|  |     curl -s -X POST "${GIT_URL}/api/v1/org/$org/repos?access_token=${GIT_TOKEN}" \ | ||||||
|  |         -H "accept: application/json" \ | ||||||
|  |         -H "content-type: application/json" \ | ||||||
|  |         -d "$json" | ||||||
|  |  | ||||||
|  |     echo | ||||||
|  | } | ||||||
|  |  | ||||||
|  | delete_repo(){ | ||||||
|  |     local pkg="$1" org="$2" | ||||||
|  |     local gitname=$(get_compliant_name "$pkg") | ||||||
|  |  | ||||||
|  |     msg2 "Delete package repo [%s] in org (%s)" "${pkg}" "${org}" | ||||||
|  |  | ||||||
|  |     curl -s -X DELETE "${GIT_URL}/api/v1/repos/$org/$gitname?access_token=${GIT_TOKEN}" \ | ||||||
|  |         -H  "accept: application/json" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | load_team_id(){ | ||||||
|  |     local org="$1" team="$2" id=0 | ||||||
|  |  | ||||||
|  |     local ids=($(curl -s -X GET "${GIT_URL}/api/v1/orgs/$org/teams?access_token=${GIT_TOKEN}" \ | ||||||
|  |         -H  "accept: application/json" | jshon -a -e id)) | ||||||
|  |  | ||||||
|  |     case $team in | ||||||
|  |         packages) id="${ids[2]}" ;; | ||||||
|  |         community) id="${ids[1]}" ;; | ||||||
|  |     esac | ||||||
|  |  | ||||||
|  |     echo $id | ||||||
|  | } | ||||||
|  |  | ||||||
|  | add_repo_to_team(){ | ||||||
|  |     local pkg="$1" org="$2" team="$3" | ||||||
|  |     local id=$(load_team_id "$org" "$team") | ||||||
|  |  | ||||||
|  |     msg2 "Adding package repo [%s] to team (%s)" "$pkg" "$team" | ||||||
|  |  | ||||||
|  |     curl -s -X PUT "${GIT_URL}/api/v1/teams/$id/repos/$org/$pkg?access_token=${GIT_TOKEN}" \ | ||||||
|  |         -H  "accept: application/json" | ||||||
|  | } | ||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -17,18 +20,23 @@ get_remote_head(){ | |||||||
|     echo $(git ls-remote origin -h refs/heads/master | cut -f1) |     echo $(git ls-remote origin -h refs/heads/master | cut -f1) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| subrepo_push(){ | get_pkg_org(){ | ||||||
|     local pkg="$1" |     local pkg="$1" org= sub= | ||||||
|     msg2 "Update (%s)" "$pkg" |     case ${pkg} in | ||||||
|     git subrepo push "$pkg" |         ruby-*) org=${pkg:0:6}; sub="${org:5}"; echo "packagesRuby" ;; | ||||||
|  |         perl-*) org=${pkg:0:6}; sub="${org:5}"; echo "packagesPerl" ;; | ||||||
|  |         python-*) org=${pkg:0:8}; sub="${org:7}"; echo "packagesPython" ;; | ||||||
|  |         python2-*) org=${pkg:0:9}; sub="${org:8}"; echo "packagesPython" ;; | ||||||
|  |         lib32*) org=${pkg:0:7}; sub="${org:6}"; echo "packagesL" ;; #"packages${sub^^}" ;; | ||||||
|  | #         lib*) org=${pkg:0:4}; sub="${org:3}"; echo "packagesLib${sub^^}" ;; | ||||||
|  |         *) org=${pkg:0:1}; echo "packages${org^^}" ;; | ||||||
|  |     esac | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| subrepo_config(){ | subrepo_push(){ | ||||||
|     local pkg="$1" org="$2" |     local pkg="$1" | ||||||
|     local gitname=$(get_compliant_name "$pkg") |     msg2 "Push (%s)" "$pkg" | ||||||
|     local url=gitea@"${GIT_DOMAIN}":"$org"/"$gitname".git |     git subrepo push "$pkg" | ||||||
|     msg2 "Update .gitrepo (%s) [%s]" "$pkg" "$url" |  | ||||||
|     git subrepo config "$pkg" remote "$url" |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| subrepo_clean(){ | subrepo_clean(){ | ||||||
| @@ -39,20 +47,21 @@ subrepo_clean(){ | |||||||
| 
 | 
 | ||||||
| subrepo_pull(){ | subrepo_pull(){ | ||||||
|     local pkg="$1" |     local pkg="$1" | ||||||
|  |     msg2 "Pull (%s)" "$pkg" | ||||||
|     git subrepo pull "$pkg" |     git subrepo pull "$pkg" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| subrepo_clone(){ | subrepo_clone(){ | ||||||
|     local pkg="$1" org="$2" |     local pkg="$1" org="$2" | ||||||
|     local gitname=$(get_compliant_name "$pkg") |     local gitname=$(get_compliant_name "$pkg") | ||||||
|     msg2 "Getting package repo [%s] from org (%s)" "$pkg" "$org/$gitname" |     msg2 "Clone [%s] from (%s)" "$pkg" "$org/$gitname" | ||||||
|     git subrepo clone gitea@"${GIT_DOMAIN}":"$org"/"$gitname".git "$pkg" |     git subrepo clone gitea@"${GIT_DOMAIN}":"$org"/"$gitname".git "$pkg" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| clone_tree(){ | clone_tree(){ | ||||||
|     local timer=$(get_timer) url="$1" tree="$2" |     local timer=$(get_timer) url="$1" tree="$2" os="${3:-$(get_osname)}" | ||||||
| 
 | 
 | ||||||
|     msg "Cloning (%s) ..." "$tree" |     msg "Cloning %s (%s) ..." "$tree" "$os" | ||||||
| 
 | 
 | ||||||
|     git clone $url/$tree.git |     git clone $url/$tree.git | ||||||
|     show_elapsed_time "${FUNCNAME}" "${timer}" |     show_elapsed_time "${FUNCNAME}" "${timer}" | ||||||
| @@ -70,11 +79,10 @@ has_changes(){ | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pull_tree(){ | pull_tree(){ | ||||||
|     local tree="$1" |     local tree="$1" local_head="$2" os="${3:-$(get_osname)}" | ||||||
|     local local_head=${2:-$(get_local_head)} |  | ||||||
|     local remote_head=$(get_remote_head) |     local remote_head=$(get_remote_head) | ||||||
| 
 | 
 | ||||||
|     msg "Checking (%s)" "${tree}" |     msg "Checking %s (%s)" "${tree}" "$os" | ||||||
|     if $(has_changes "${local_head}" "${remote_head}");then |     if $(has_changes "${local_head}" "${remote_head}");then | ||||||
|         git pull origin master |         git pull origin master | ||||||
|     fi |     fi | ||||||
| @@ -135,10 +143,10 @@ config_tree(){ | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| subrepo_new(){ | subrepo_new(){ | ||||||
|     local pkg="$1" team="$2" |     local pkg="$1" tree="$2" team="${3:-$2}" | ||||||
|     local dest=${TREE_DIR_ARTIX}/$team/$pkg/trunk |     local dest=${TREE_DIR_ARTIX}/$tree/$pkg/trunk | ||||||
| 
 | 
 | ||||||
|     cd ${TREE_DIR_ARTIX}/$team |     cd ${TREE_DIR_ARTIX}/$tree | ||||||
| 
 | 
 | ||||||
|     local org=$(get_pkg_org "$pkg") |     local org=$(get_pkg_org "$pkg") | ||||||
| 
 | 
 | ||||||
| @@ -1,5 +1,8 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| # | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
| # This program is free software; you can redistribute it and/or modify | # This program is free software; you can redistribute it and/or modify | ||||||
| # it under the terms of the GNU General Public License as published by | # it under the terms of the GNU General Public License as published by | ||||||
| # the Free Software Foundation; version 2 of the License. | # the Free Software Foundation; version 2 of the License. | ||||||
| @@ -9,6 +12,14 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
| 
 | 
 | ||||||
|  | get_compliant_name(){ | ||||||
|  |     local gitname="$1" | ||||||
|  |     case $gitname in | ||||||
|  |         *+) gitname=${gitname//+/plus} | ||||||
|  |     esac | ||||||
|  |     echo $gitname | ||||||
|  | } | ||||||
|  | 
 | ||||||
| patch_pkg(){ | patch_pkg(){ | ||||||
|     local pkg="$1" |     local pkg="$1" | ||||||
|     case $pkg in |     case $pkg in | ||||||
| @@ -58,14 +69,6 @@ patch_pkg(){ | |||||||
|     esac |     esac | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| get_compliant_name(){ |  | ||||||
|     local gitname="$1" |  | ||||||
|     case $gitname in |  | ||||||
|         *+) gitname=${gitname//+/plus} |  | ||||||
|     esac |  | ||||||
|     echo $gitname |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| find_tree(){ | find_tree(){ | ||||||
|     local tree="$1" pkg="$2" |     local tree="$1" pkg="$2" | ||||||
|     local result=$(find $tree -mindepth 2 -maxdepth 2 -type d -name "$pkg") |     local result=$(find $tree -mindepth 2 -maxdepth 2 -type d -name "$pkg") | ||||||
| @@ -87,10 +90,45 @@ find_repo(){ | |||||||
|     echo $repo |     echo $repo | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | get_cases(){ | ||||||
|  |     local pkglist="${DATADIR}/pkglists/$1.list" | ||||||
|  |     local _space="s| ||g" _clean=':a;N;$!ba;s/\n/ /g' _com_rm="s|#.*||g" | ||||||
|  | 
 | ||||||
|  |     local pkgs=($(sed "$_com_rm" "$pkglist" | sed "$_space" | sed "$_clean")) | ||||||
|  | 
 | ||||||
|  |     local cases= | ||||||
|  |     for p in ${pkgs[@]};do | ||||||
|  |         cases=${cases:-}${cases:+|}${p} | ||||||
|  |     done | ||||||
|  |     echo $cases | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | get_artix_tree(){ | ||||||
|  |     local pkg="$1" artix_tree="${2:-$3}" tree | ||||||
|  |     eval "case $pkg in | ||||||
|  |         $(get_cases kernel)) tree=packages-kernel ;; | ||||||
|  |         python-*|python2-*) tree=packages-python ;; | ||||||
|  |         perl-*) tree=packages-perl ;; | ||||||
|  |         ruby-*) tree=packages-ruby ;; | ||||||
|  |         xorg*|xf86*|$(get_cases xorg)) tree=packages-xorg ;; | ||||||
|  |         *-openrc) tree=packages-openrc ;; | ||||||
|  |         *-runit) tree=packages-runit ;; | ||||||
|  |         qt5-*) tree=packages-qt5 ;; | ||||||
|  |         lxqt*|$(get_cases lxqt)) tree=packages-lxqt ;; | ||||||
|  |         *) tree=$artix_tree | ||||||
|  |     esac" | ||||||
|  |     echo $tree | ||||||
|  | 
 | ||||||
|  | #         $(get_cases freedesktop)) tree=packages-desktop ;; | ||||||
|  | #         $(get_cases kde)) tree=packages-kde ;; | ||||||
|  | #         $(get_cases gnome)) tree=packages-gnome ;; | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
| get_import_path(){ | get_import_path(){ | ||||||
|     local pkg="$1" import_path= |     local pkg="$1" import_path= | ||||||
|     for tree in ${tree_names[@]};do |     for tree in ${TREE_NAMES_ARCH[@]};do | ||||||
|         [[ -d ${TREE_DIR_ARCH}/$tree/$pkg ]] && import_path=${TREE_DIR_ARCH}/$tree/$pkg |         [[ -d ${TREE_DIR_ARCH}/$tree/$pkg/repos ]] && import_path=${TREE_DIR_ARCH}/$tree/$pkg | ||||||
|     done |     done | ||||||
|     echo $import_path |     echo $import_path | ||||||
| } | } | ||||||
| @@ -105,6 +143,14 @@ pkgver_equal() { | |||||||
|     fi |     fi | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | is_valid_repo(){ | ||||||
|  |     local src="$1" | ||||||
|  |     case $src in | ||||||
|  |         core|extra|community|multilib|testing|staging|community-testing|community-staging|multilib-testing|multilib-staging|trunk) return 0 ;; | ||||||
|  |         *) return 1 ;; | ||||||
|  |     esac | ||||||
|  | } | ||||||
|  | 
 | ||||||
| find_cached_package() { | find_cached_package() { | ||||||
|     local searchdirs=("$PKGDEST" "$PWD") results=() |     local searchdirs=("$PKGDEST" "$PWD") results=() | ||||||
|     local targetname=$1 targetver=$2 targetarch=$3 |     local targetname=$1 targetver=$2 targetarch=$3 | ||||||
							
								
								
									
										25
									
								
								lib/util-base.sh.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								lib/util-base.sh.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
|  | # This program is free software; you can redistribute it and/or modify | ||||||
|  | # it under the terms of the GNU General Public License as published by | ||||||
|  | # the Free Software Foundation; version 2 of the License. | ||||||
|  | # | ||||||
|  | # This program is distributed in the hope that it will be useful, | ||||||
|  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | # GNU General Public License for more details. | ||||||
|  |  | ||||||
|  | CHROOTVERSION=@chroot_version@ | ||||||
|  |  | ||||||
|  | . @datadir@/makepkg/util.sh | ||||||
|  |  | ||||||
|  | DATADIR=${DATADIR:-'@datadir@/artools'} | ||||||
|  | LIBDIR=${LIBDIR:-'@libdir@/artools'} | ||||||
|  | SYSCONFDIR=${SYSCONFDIR:-'@sysconfdir@/artools'} | ||||||
|  |  | ||||||
|  | for baselib in ${LIBDIR}/base/*.sh; do | ||||||
|  |     . $baselib | ||||||
|  | done | ||||||
							
								
								
									
										621
									
								
								lib/util-iso.sh
									
									
									
									
									
								
							
							
						
						
									
										621
									
								
								lib/util-iso.sh
									
									
									
									
									
								
							| @@ -1,621 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| # |  | ||||||
| # This program is free software; you can redistribute it and/or modify |  | ||||||
| # it under the terms of the GNU General Public License as published by |  | ||||||
| # the Free Software Foundation; version 2 of the License. |  | ||||||
| # |  | ||||||
| # This program is distributed in the hope that it will be useful, |  | ||||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
| # GNU General Public License for more details. |  | ||||||
|  |  | ||||||
| import ${LIBDIR}/util-chroot.sh |  | ||||||
| import ${LIBDIR}/util-iso-grub.sh |  | ||||||
| import ${LIBDIR}/util-iso-profile.sh |  | ||||||
| import ${LIBDIR}/util-yaml.sh |  | ||||||
|  |  | ||||||
| track_img() { |  | ||||||
|     info "mount: [%s]" "$2" |  | ||||||
|     mount "$@" && IMG_ACTIVE_MOUNTS=("$2" "${IMG_ACTIVE_MOUNTS[@]}") |  | ||||||
| } |  | ||||||
|  |  | ||||||
| mount_img() { |  | ||||||
|     IMG_ACTIVE_MOUNTS=() |  | ||||||
|     mkdir -p "$2" |  | ||||||
|     track_img "$1" "$2" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| umount_img() { |  | ||||||
|     if [[ -n ${IMG_ACTIVE_MOUNTS[@]} ]];then |  | ||||||
|         info "umount: [%s]" "${IMG_ACTIVE_MOUNTS[@]}" |  | ||||||
|         umount "${IMG_ACTIVE_MOUNTS[@]}" |  | ||||||
|         unset IMG_ACTIVE_MOUNTS |  | ||||||
|         rm -r "$1" |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| track_fs() { |  | ||||||
|     info "overlayfs mount: [%s]" "$5" |  | ||||||
|     mount "$@" && FS_ACTIVE_MOUNTS=("$5" "${FS_ACTIVE_MOUNTS[@]}") |  | ||||||
| } |  | ||||||
|  |  | ||||||
| mount_overlay(){ |  | ||||||
|     FS_ACTIVE_MOUNTS=() |  | ||||||
|     local lower= upper="$1" work="$2" pkglist="$3" |  | ||||||
|     local fs=${upper##*/} |  | ||||||
|     local rootfs="$work/rootfs" desktopfs="$work/desktopfs" livefs="$work/livefs" |  | ||||||
|     mkdir -p "${mnt_dir}/work" |  | ||||||
|     mkdir -p "$upper" |  | ||||||
|     case $fs in |  | ||||||
|         desktopfs) lower="$rootfs" ;; |  | ||||||
|         livefs) |  | ||||||
|             lower="$rootfs" |  | ||||||
|             [[ -f $pkglist ]] && lower="$desktopfs":"$rootfs" |  | ||||||
|         ;; |  | ||||||
|         bootfs) |  | ||||||
|             lower="$livefs":"$rootfs" |  | ||||||
|             [[ -f $pkglist ]] && lower="$livefs":"$desktopfs":"$rootfs" |  | ||||||
|         ;; |  | ||||||
|     esac |  | ||||||
|     track_fs -t overlay overlay -olowerdir="$lower",upperdir="$upper",workdir="${mnt_dir}/work" "$upper" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| umount_overlay(){ |  | ||||||
|     if [[ -n ${FS_ACTIVE_MOUNTS[@]} ]];then |  | ||||||
|         info "overlayfs umount: [%s]" "${FS_ACTIVE_MOUNTS[@]}" |  | ||||||
|         umount "${FS_ACTIVE_MOUNTS[@]}" |  | ||||||
|         unset FS_ACTIVE_MOUNTS |  | ||||||
|         rm -rf "${mnt_dir}/work" |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| error_function() { |  | ||||||
|     if [[ -p $logpipe ]]; then |  | ||||||
|         rm "$logpipe" |  | ||||||
|     fi |  | ||||||
|     local func="$1" |  | ||||||
|     # first exit all subshells, then print the error |  | ||||||
|     if (( ! BASH_SUBSHELL )); then |  | ||||||
|         error "A failure occurred in %s()." "$func" |  | ||||||
|         plain "Aborting..." |  | ||||||
|     fi |  | ||||||
|     umount_overlay |  | ||||||
|     umount_img |  | ||||||
|     exit 2 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| # $1: function |  | ||||||
| run_log(){ |  | ||||||
|     local func="$1" log_dir='/var/log/artools' |  | ||||||
|     [[ ! -d $log_dir ]] && mkdir -p $log_dir |  | ||||||
|     local logfile=${log_dir}/$(gen_iso_fn).$func.log |  | ||||||
|     logpipe=$(mktemp -u "/tmp/$func.pipe.XXXXXXXX") |  | ||||||
|     mkfifo "$logpipe" |  | ||||||
|     tee "$logfile" < "$logpipe" & |  | ||||||
|     local teepid=$! |  | ||||||
|     $func &> "$logpipe" |  | ||||||
|     wait $teepid |  | ||||||
|     rm "$logpipe" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| run_safe() { |  | ||||||
|     local restoretrap func="$1" |  | ||||||
|     set -e |  | ||||||
|     set -E |  | ||||||
|     restoretrap=$(trap -p ERR) |  | ||||||
|     trap 'error_function $func' ERR |  | ||||||
|  |  | ||||||
|     if ${log};then |  | ||||||
|         run_log "$func" |  | ||||||
|     else |  | ||||||
|         "$func" |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     eval $restoretrap |  | ||||||
|     set +E |  | ||||||
|     set +e |  | ||||||
| } |  | ||||||
|  |  | ||||||
| trap_exit() { |  | ||||||
|     local sig=$1; shift |  | ||||||
|     error "$@" |  | ||||||
|     umount_overlay |  | ||||||
|     trap -- "$sig" |  | ||||||
|     kill "-$sig" "$$" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| prepare_traps(){ |  | ||||||
|     for sig in TERM HUP QUIT; do |  | ||||||
|         trap "trap_exit $sig \"$(gettext "%s signal caught. Exiting...")\" \"$sig\"" "$sig" |  | ||||||
|     done |  | ||||||
|     trap 'trap_exit INT "$(gettext "Aborted by user! Exiting...")"' INT |  | ||||||
| #     trap 'trap_exit USR1 "$(gettext "An unknown error has occurred. Exiting...")"' ERR |  | ||||||
| } |  | ||||||
|  |  | ||||||
| add_svc_rc(){ |  | ||||||
|     local mnt="$1" name="$2" rlvl="$3" |  | ||||||
|     if [[ -f $mnt/etc/init.d/$name ]];then |  | ||||||
|         msg2 "Setting %s ..." "$name" |  | ||||||
|         chroot $mnt rc-update add $name $rlvl &>/dev/null |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| add_svc_runit(){ |  | ||||||
|     local mnt="$1" name="$2" |  | ||||||
|     if [[ -d $mnt/etc/runit/sv/$name ]]; then |  | ||||||
|         msg2 "Setting %s ..." "$name" |  | ||||||
|         chroot $mnt ln -s /etc/runit/sv/$name /etc/runit/runsvdir/default &>/dev/null |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| set_xdm(){ |  | ||||||
|     if [[ -f $1/etc/conf.d/xdm ]];then |  | ||||||
|         local conf='DISPLAYMANAGER="'${DISPLAYMANAGER}'"' |  | ||||||
|         sed -i -e "s|^.*DISPLAYMANAGER=.*|${conf}|" $1/etc/conf.d/xdm |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| configure_hosts(){ |  | ||||||
|     sed -e "s|localhost.localdomain|localhost.localdomain ${HOST_NAME}|" -i $1/etc/hosts |  | ||||||
| } |  | ||||||
|  |  | ||||||
| configure_logind(){ |  | ||||||
|     local conf=$1/etc/$2/logind.conf |  | ||||||
|     if [[ -e $conf ]];then |  | ||||||
|         msg2 "Configuring logind ..." |  | ||||||
|         sed -i 's/#\(HandleSuspendKey=\)suspend/\1ignore/' "$conf" |  | ||||||
|         sed -i 's/#\(HandleLidSwitch=\)suspend/\1ignore/' "$conf" |  | ||||||
|         sed -i 's/#\(HandleHibernateKey=\)hibernate/\1ignore/' "$conf" |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| configure_services(){ |  | ||||||
|     local mnt="$1" |  | ||||||
|     info "Configuring [%s]" "${INITSYS}" |  | ||||||
|     case ${INITSYS} in |  | ||||||
|         'openrc') |  | ||||||
|             for svc in ${SERVICES[@]}; do |  | ||||||
|                 [[ $svc == "xdm" ]] && set_xdm "$mnt" |  | ||||||
|                 add_svc_rc "$mnt" "$svc" "default" |  | ||||||
|             done |  | ||||||
|             for svc in ${SERVICES_LIVE[@]}; do |  | ||||||
|                 add_svc_rc "$mnt" "$svc" "default" |  | ||||||
|             done |  | ||||||
|         ;; |  | ||||||
|         'runit') |  | ||||||
|             for svc in ${SERVICES[@]}; do |  | ||||||
|                 add_svc_runit "$mnt" "$svc" |  | ||||||
|             done |  | ||||||
|             for svc in ${SERVICES_LIVE[@]}; do |  | ||||||
|                 add_svc_runit "$mnt" "$svc" |  | ||||||
|             done |  | ||||||
|         ;; |  | ||||||
|     esac |  | ||||||
|     info "Done configuring [%s]" "${INITSYS}" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| configure_system(){ |  | ||||||
|     local mnt="$1" |  | ||||||
|     case ${INITSYS} in |  | ||||||
|         'openrc' | 'runit') |  | ||||||
|             configure_logind "$mnt" "elogind" |  | ||||||
|         ;; |  | ||||||
|     esac |  | ||||||
|     echo ${HOST_NAME} > $mnt/etc/hostname |  | ||||||
| } |  | ||||||
|  |  | ||||||
| clean_iso_root(){ |  | ||||||
|     local dest="$1" |  | ||||||
|     msg "Deleting isoroot [%s] ..." "${dest##*/}" |  | ||||||
|     rm -rf --one-file-system "$dest" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| clean_up_image(){ |  | ||||||
|     local path mnt="$1" |  | ||||||
|     msg2 "Cleaning [%s]" "${mnt##*/}" |  | ||||||
|  |  | ||||||
|     if [[ -f "$mnt/etc/locale.gen.orig" ]];then |  | ||||||
|         mv "$mnt/etc/locale.gen.orig" "$mnt/etc/locale.gen" |  | ||||||
|         rm "$mnt/etc/locale.conf" |  | ||||||
|     fi |  | ||||||
|     path=$mnt/boot |  | ||||||
|     if [[ -d "$path" ]]; then |  | ||||||
|         find "$path" -name 'initramfs*.img' -delete &> /dev/null |  | ||||||
|     fi |  | ||||||
|     path=$mnt/var/lib/pacman/sync |  | ||||||
|     if [[ -d $path ]];then |  | ||||||
|         find "$path" -type f -delete &> /dev/null |  | ||||||
|     fi |  | ||||||
|     path=$mnt/var/cache/pacman/pkg |  | ||||||
|     if [[ -d $path ]]; then |  | ||||||
|         find "$path" -type f -delete &> /dev/null |  | ||||||
|     fi |  | ||||||
|     path=$mnt/var/log |  | ||||||
|     if [[ -d $path ]]; then |  | ||||||
|         find "$path" -type f -delete &> /dev/null |  | ||||||
|     fi |  | ||||||
|     path=$mnt/var/tmp |  | ||||||
|     if [[ -d $path ]];then |  | ||||||
|         find "$path" -mindepth 1 -delete &> /dev/null |  | ||||||
|     fi |  | ||||||
|     path=$mnt/tmp |  | ||||||
|     if [[ -d $path ]];then |  | ||||||
|         find "$path" -mindepth 1 -delete &> /dev/null |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     if [[ ${mnt##*/} == 'livefs' ]];then |  | ||||||
|         rm -rf "$mnt/etc/pacman.d/gnupg" |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     find "$mnt" -name *.pacnew -name *.pacsave -name *.pacorig -delete |  | ||||||
|     if [[ -f "$mnt/boot/grub/grub.cfg" ]]; then |  | ||||||
|         rm $mnt/boot/grub/grub.cfg |  | ||||||
|     fi |  | ||||||
|     if [[ -f "$mnt/etc/machine-id" ]]; then |  | ||||||
|         rm $mnt/etc/machine-id |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| write_users_conf(){ |  | ||||||
|     local yaml=$(write_yaml_header) |  | ||||||
|     yaml+=$(write_empty_line) |  | ||||||
|     yaml+=$(write_yaml_map 0 'defaultGroups') |  | ||||||
|     local IFS=',' |  | ||||||
|     for g in ${ADDGROUPS[@]};do |  | ||||||
|         yaml+=$(write_yaml_seq 2 "$g") |  | ||||||
|     done |  | ||||||
|     unset IFS |  | ||||||
|     yaml+=$(write_yaml_map 0 'autologinGroup' 'autologin') |  | ||||||
|     yaml+=$(write_yaml_map 0 'doAutologin' 'false') |  | ||||||
|     yaml+=$(write_yaml_map 0 'sudoersGroup' 'wheel') |  | ||||||
|     yaml+=$(write_yaml_map 0 'setRootPassword' 'true') |  | ||||||
|     yaml+=$(write_yaml_map 0 'availableShells' '/bin/bash, /bin/zsh') |  | ||||||
| #     yaml+=$(write_yaml_map 0 'passwordRequirements') |  | ||||||
| #     yaml+=$(write_yaml_map 2 'minLength' '-1') |  | ||||||
| #     yaml+=$(write_yaml_map 2 'maxLength' '-1') |  | ||||||
| #     yaml+=$(write_yaml_map 2 'libpwquality') |  | ||||||
| #     yaml+=$(write_yaml_seq 4 "minlen=8") |  | ||||||
| #     yaml+=$(write_yaml_seq 4 "minclass=80") |  | ||||||
|     yaml+=$(write_empty_line) |  | ||||||
|     printf '%s' "${yaml}" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| write_servicescfg_conf(){ |  | ||||||
|     local yaml=$(write_yaml_header) |  | ||||||
|     yaml+=$(write_empty_line) |  | ||||||
|     case "${INITSYS}" in |  | ||||||
|         'runit') |  | ||||||
|             yaml+=$(write_yaml_map 0 'svDir' '/etc/runit/sv') |  | ||||||
|             yaml+=$(write_yaml_map 0 'runsvDir' '/etc/runit/runsvdir') |  | ||||||
|             yaml+=$(write_yaml_map 0 'services') |  | ||||||
|             yaml+=$(write_yaml_map 2 'enabled') |  | ||||||
|             for svc in ${SERVICES[@]};do |  | ||||||
|                 yaml+=$(write_yaml_seq_map 4 'name' "$svc") |  | ||||||
|                 yaml+=$(write_yaml_map 6 'runlevel' 'default') |  | ||||||
|             done |  | ||||||
|         ;; |  | ||||||
|         'openrc') |  | ||||||
|             yaml+=$(write_yaml_map 0 'initdDir' '/etc/init.d') |  | ||||||
|             yaml+=$(write_yaml_map 0 'runlevelsDir' '/etc/runlevels') |  | ||||||
|             yaml+=$(write_yaml_map 0 'services') |  | ||||||
|             for svc in ${SERVICES[@]};do |  | ||||||
|                 yaml+=$(write_yaml_seq_map 2 'name' "$svc") |  | ||||||
|                 yaml+=$(write_yaml_map 4 'runlevel' 'default') |  | ||||||
|             done |  | ||||||
|         ;; |  | ||||||
|     esac |  | ||||||
|     yaml+=$(write_empty_line) |  | ||||||
|     printf '%s' "${yaml}" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| configure_calamares(){ |  | ||||||
|     local mods="$1/etc/calamares/modules" |  | ||||||
|     if [[ -d "$mods" ]];then |  | ||||||
|         info "Configuring [Calamares]" |  | ||||||
|         write_users_conf > "$mods"/users.conf |  | ||||||
|         write_servicescfg_conf > "$mods"/services-"${INITSYS}".conf |  | ||||||
|         sed -e "s|openrc|${INITSYS}|" -i "$mods"/postcfg.conf |  | ||||||
|         sed -e "s|services-openrc|services-${INITSYS}|" -i "$1"/etc/calamares/settings.conf |  | ||||||
|         info "Done configuring [Calamares]" |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| configure_live_image(){ |  | ||||||
|     local fs="$1" |  | ||||||
|     msg "Configuring [livefs]" |  | ||||||
|     configure_hosts "$fs" |  | ||||||
|     configure_system "$fs" |  | ||||||
|     configure_services "$fs" |  | ||||||
|     configure_calamares "$fs" |  | ||||||
|     [[ ! -d "$fs/etc/artools" ]] && mkdir -p "$fs/etc/artools" |  | ||||||
|     write_live_session_conf > "$fs/etc/artools/live.conf" |  | ||||||
|     msg "Done configuring [livefs]" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| make_sig () { |  | ||||||
|     local idir="$1" file="$2" |  | ||||||
|     msg2 "Creating signature file..." |  | ||||||
|     cd "$idir" |  | ||||||
|     user_own "$idir" |  | ||||||
|     user_run "gpg --detach-sign --default-key ${GPG_KEY} $file.sfs" |  | ||||||
|     chown -R root "$idir" |  | ||||||
|     cd ${OLDPWD} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| make_checksum(){ |  | ||||||
|     local idir="$1" file="$2" |  | ||||||
|     msg2 "Creating sha512sum ..." |  | ||||||
|     cd $idir |  | ||||||
|     sha512sum $file.sfs > $file.sha512 |  | ||||||
|     cd ${OLDPWD} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| # $1: image path |  | ||||||
| make_sfs() { |  | ||||||
|     local src="$1" |  | ||||||
|     if [[ ! -e "${src}" ]]; then |  | ||||||
|         error "The path %s does not exist" "${src}" |  | ||||||
|         retrun 1 |  | ||||||
|     fi |  | ||||||
|     local timer=$(get_timer) dest=${iso_root}/artix/${ARCH} |  | ||||||
|     local name=${1##*/} |  | ||||||
|     local sfs="${dest}/${name}.sfs" |  | ||||||
|     mkdir -p ${dest} |  | ||||||
|     msg "Generating SquashFS image for %s" "${src}" |  | ||||||
|     if [[ -f "${sfs}" ]]; then |  | ||||||
|         local has_changed_dir=$(find ${src} -newer ${sfs}) |  | ||||||
|         msg2 "Possible changes for %s ..." "${src}"  >> /tmp/buildiso.debug |  | ||||||
|         msg2 "%s" "${has_changed_dir}" >> /tmp/buildiso.debug |  | ||||||
|         if [[ -n "${has_changed_dir}" ]]; then |  | ||||||
|             msg2 "SquashFS image %s is not up to date, rebuilding..." "${sfs}" |  | ||||||
|             rm "${sfs}" |  | ||||||
|         else |  | ||||||
|             msg2 "SquashFS image %s is up to date, skipping." "${sfs}" |  | ||||||
|             return |  | ||||||
|         fi |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     if ${persist};then |  | ||||||
|         local size=32G |  | ||||||
|         local mnt="${mnt_dir}/${name}" |  | ||||||
|         msg2 "Creating ext4 image of %s ..." "${size}" |  | ||||||
|         truncate -s ${size} "${src}.img" |  | ||||||
|         local ext4_args=() |  | ||||||
|         ext4_args+=(-O ^has_journal,^resize_inode -E lazy_itable_init=0 -m 0) |  | ||||||
|         mkfs.ext4 ${ext4_args[@]} -F "${src}.img" &>/dev/null |  | ||||||
|         tune2fs -c 0 -i 0 "${src}.img" &> /dev/null |  | ||||||
|         mount_img "${work_dir}/${name}.img" "${mnt}" |  | ||||||
|         msg2 "Copying %s ..." "${src}/" |  | ||||||
|         cp -aT "${src}/" "${mnt}/" |  | ||||||
|         umount_img "${mnt}" |  | ||||||
|  |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     msg2 "Creating SquashFS image, this may take some time..." |  | ||||||
|     local mksfs_args=() |  | ||||||
|     if ${persist};then |  | ||||||
|         mksfs_args+=(${work_dir}/${name}.img) |  | ||||||
|     else |  | ||||||
|         mksfs_args+=(${src}) |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     mksfs_args+=(${sfs} -noappend) |  | ||||||
|  |  | ||||||
|     local highcomp="-b 256K -Xbcj x86" comp='xz' |  | ||||||
|  |  | ||||||
|     mksfs_args+=(-comp ${comp} ${highcomp}) |  | ||||||
|  |  | ||||||
|     mksquashfs "${mksfs_args[@]}" |  | ||||||
|  |  | ||||||
|     make_checksum "${dest}" "${name}" |  | ||||||
|     ${persist} && rm "${src}.img" |  | ||||||
|  |  | ||||||
|     if [[ -n ${GPG_KEY} ]];then |  | ||||||
|         make_sig "${dest}" "${name}" |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     show_elapsed_time "${FUNCNAME}" "${timer_start}" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| assemble_iso(){ |  | ||||||
|     msg "Creating ISO image..." |  | ||||||
|     local mod_date=$(date -u +%Y-%m-%d-%H-%M-%S-00  | sed -e s/-//g) |  | ||||||
|  |  | ||||||
|     xorriso -as mkisofs \ |  | ||||||
|         --modification-date=${mod_date} \ |  | ||||||
|         --protective-msdos-label \ |  | ||||||
|         -volid "${iso_label}" \ |  | ||||||
|         -appid "$(get_osname) Live/Rescue CD" \ |  | ||||||
|         -publisher "$(get_osname) <$(get_disturl)>" \ |  | ||||||
|         -preparer "Prepared by artools/${0##*/}" \ |  | ||||||
|         -r -graft-points -no-pad \ |  | ||||||
|         --sort-weight 0 / \ |  | ||||||
|         --sort-weight 1 /boot \ |  | ||||||
|         --grub2-mbr ${iso_root}/boot/grub/i386-pc/boot_hybrid.img \ |  | ||||||
|         -partition_offset 16 \ |  | ||||||
|         -b boot/grub/i386-pc/eltorito.img \ |  | ||||||
|         -c boot.catalog \ |  | ||||||
|         -no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info \ |  | ||||||
|         -eltorito-alt-boot \ |  | ||||||
|         -append_partition 2 0xef ${iso_root}/efi.img \ |  | ||||||
|         -e --interval:appended_partition_2:all:: -iso_mbr_part_type 0x00 \ |  | ||||||
|         -no-emul-boot \ |  | ||||||
|         -iso-level 3 \ |  | ||||||
|         -o ${iso_dir}/${iso_file} \ |  | ||||||
|         ${iso_root}/ |  | ||||||
| } |  | ||||||
|  |  | ||||||
| # Build ISO |  | ||||||
| make_iso() { |  | ||||||
|     msg "Start [Build ISO]" |  | ||||||
|     touch "${iso_root}/.artix" |  | ||||||
|     for sfs_dir in $(find "${work_dir}" -maxdepth 1 -type d); do |  | ||||||
|         if [[ "${sfs_dir}" != "${work_dir}" ]]; then |  | ||||||
|             make_sfs "${sfs_dir}" |  | ||||||
|         fi |  | ||||||
|     done |  | ||||||
|  |  | ||||||
|     msg "Making bootable image" |  | ||||||
|     # Sanity checks |  | ||||||
|     [[ ! -d "${iso_root}" ]] && return 1 |  | ||||||
|     if [[ -f "${iso_dir}/${iso_file}" ]]; then |  | ||||||
|         msg2 "Removing existing bootable image..." |  | ||||||
|         rm -rf "${iso_dir}/${iso_file}" |  | ||||||
|     fi |  | ||||||
|     assemble_iso |  | ||||||
|     msg "Done [Build ISO]" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| gen_iso_fn(){ |  | ||||||
|     local vars=("artix") name |  | ||||||
|     vars+=("${PROFILE}") |  | ||||||
|     vars+=("${INITSYS}") |  | ||||||
|     case "${REPOSITORY}" in |  | ||||||
|         'gremlins'|'goblins') vars+=("${REPOSITORY}") ;; |  | ||||||
|     esac |  | ||||||
|     vars+=("${ISO_VERSION}") |  | ||||||
|     vars+=("${ARCH}") |  | ||||||
|     for n in ${vars[@]};do |  | ||||||
|         name=${name:-}${name:+-}${n} |  | ||||||
|     done |  | ||||||
|     echo $name |  | ||||||
| } |  | ||||||
|  |  | ||||||
| install_packages(){ |  | ||||||
|     local fs="$1" |  | ||||||
|     setarch "${ARCH}" mkchroot \ |  | ||||||
|         "${mkchroot_args[@]}" "${fs}" "${packages[@]}" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| copy_overlay(){ |  | ||||||
|     local src="$1" dest="$2" |  | ||||||
|     if [[ -e "$src" ]];then |  | ||||||
|         msg2 "Copying [%s] ..." "${src##*/}" |  | ||||||
|         cp -LR "$src"/* "$dest" |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| make_rootfs() { |  | ||||||
|     if [[ ! -e ${work_dir}/rootfs.lock ]]; then |  | ||||||
|         msg "Prepare [Base installation] (rootfs)" |  | ||||||
|         local rootfs="${work_dir}/rootfs" |  | ||||||
|  |  | ||||||
|         prepare_dir "${rootfs}" |  | ||||||
|  |  | ||||||
|         install_packages "${rootfs}" |  | ||||||
|  |  | ||||||
|         copy_overlay "${ROOT_OVERLAY}" "${rootfs}" |  | ||||||
|  |  | ||||||
|         clean_up_image "${rootfs}" |  | ||||||
|  |  | ||||||
|         msg "Done [Base installation] (rootfs)" |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| make_desktopfs() { |  | ||||||
|     if [[ ! -e ${work_dir}/desktopfs.lock ]]; then |  | ||||||
|         msg "Prepare [Desktop installation] (desktopfs)" |  | ||||||
|         local desktopfs="${work_dir}/desktopfs" |  | ||||||
|  |  | ||||||
|         prepare_dir "${desktopfs}" |  | ||||||
|  |  | ||||||
|         mount_overlay "${desktopfs}" "${work_dir}" |  | ||||||
|  |  | ||||||
|         install_packages "${desktopfs}" |  | ||||||
|  |  | ||||||
|         copy_overlay "${DESKTOP_OVERLAY}" "${desktopfs}" |  | ||||||
|  |  | ||||||
|         umount_overlay |  | ||||||
|         clean_up_image "${desktopfs}" |  | ||||||
|  |  | ||||||
|         msg "Done [Desktop installation] (desktopfs)" |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| make_livefs() { |  | ||||||
|     if [[ ! -e ${work_dir}/livefs.lock ]]; then |  | ||||||
|         msg "Prepare [Live installation] (livefs)" |  | ||||||
|         local livefs="${work_dir}/livefs" |  | ||||||
|  |  | ||||||
|         prepare_dir "${livefs}" |  | ||||||
|  |  | ||||||
|         mount_overlay "${livefs}" "${work_dir}" "${DESKTOP_LIST}" |  | ||||||
|  |  | ||||||
|         install_packages "${livefs}" |  | ||||||
|  |  | ||||||
|         copy_overlay "${LIVE_OVERLAY}" "${livefs}" |  | ||||||
|  |  | ||||||
|         configure_live_image "${livefs}" |  | ||||||
|  |  | ||||||
|         umount_overlay |  | ||||||
|  |  | ||||||
|         clean_up_image "${livefs}" |  | ||||||
|  |  | ||||||
|         msg "Done [Live installation] (livefs)" |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| make_bootfs() { |  | ||||||
|     if [[ ! -e ${work_dir}/bootfs.lock ]]; then |  | ||||||
|         msg "Prepare [/iso/boot]" |  | ||||||
|         local boot="${iso_root}/boot" |  | ||||||
|  |  | ||||||
|         prepare_dir "${boot}" |  | ||||||
|  |  | ||||||
|         cp ${work_dir}/rootfs/boot/vmlinuz* ${boot}/vmlinuz-${ARCH} |  | ||||||
|  |  | ||||||
|         local bootfs="${work_dir}/bootfs" |  | ||||||
|  |  | ||||||
|         mount_overlay "${bootfs}" "${work_dir}" "${DESKTOP_LIST}" |  | ||||||
|  |  | ||||||
|         prepare_initcpio "${bootfs}" |  | ||||||
|         prepare_initramfs "${bootfs}" |  | ||||||
|  |  | ||||||
|         cp ${bootfs}/boot/initramfs.img ${boot}/initramfs-${ARCH}.img |  | ||||||
|         prepare_boot_extras "${bootfs}" "${boot}" |  | ||||||
|  |  | ||||||
|         umount_overlay |  | ||||||
|  |  | ||||||
|         rm -R ${bootfs} |  | ||||||
|         : > ${work_dir}/bootfs.lock |  | ||||||
|         msg "Done [/iso/boot]" |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| make_grub(){ |  | ||||||
|     if [[ ! -e ${work_dir}/grub.lock ]]; then |  | ||||||
|         msg "Prepare [/iso/boot/grub]" |  | ||||||
|  |  | ||||||
|         prepare_grub "${work_dir}/rootfs" "${work_dir}/livefs" "${iso_root}" |  | ||||||
|  |  | ||||||
|         configure_grub "${iso_root}" |  | ||||||
|  |  | ||||||
|         : > ${work_dir}/grub.lock |  | ||||||
|         msg "Done [/iso/boot/grub]" |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| compress_images(){ |  | ||||||
|     local timer=$(get_timer) |  | ||||||
|     run_safe "make_iso" |  | ||||||
|     user_own "${iso_dir}" "-R" |  | ||||||
|     show_elapsed_time "${FUNCNAME}" "${timer}" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| prepare_images(){ |  | ||||||
|     local timer=$(get_timer) |  | ||||||
|     load_pkgs "${ROOT_LIST}" "${INITSYS}" |  | ||||||
|     run_safe "make_rootfs" |  | ||||||
|     if [[ -f "${DESKTOP_LIST}" ]] ; then |  | ||||||
|         load_pkgs "${DESKTOP_LIST}" "${INITSYS}" |  | ||||||
|         run_safe "make_desktopfs" |  | ||||||
|     fi |  | ||||||
|     if [[ -f ${LIVE_LIST} ]]; then |  | ||||||
|         load_pkgs "${LIVE_LIST}" "${INITSYS}" |  | ||||||
|         run_safe "make_livefs" |  | ||||||
|     fi |  | ||||||
|     run_safe "make_bootfs" |  | ||||||
|     run_safe "make_grub" |  | ||||||
|  |  | ||||||
|     show_elapsed_time "${FUNCNAME}" "${timer}" |  | ||||||
| } |  | ||||||
							
								
								
									
										17
									
								
								lib/util-iso.sh.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								lib/util-iso.sh.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
|  | # This program is free software; you can redistribute it and/or modify | ||||||
|  | # it under the terms of the GNU General Public License as published by | ||||||
|  | # the Free Software Foundation; version 2 of the License. | ||||||
|  | # | ||||||
|  | # This program is distributed in the hope that it will be useful, | ||||||
|  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | # GNU General Public License for more details. | ||||||
|  |  | ||||||
|  | for isolib in ${LIBDIR}/iso/*.sh; do | ||||||
|  |     . $isolib | ||||||
|  | done | ||||||
| @@ -1,234 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| # |  | ||||||
| # This program is free software; you can redistribute it and/or modify |  | ||||||
| # it under the terms of the GNU General Public License as published by |  | ||||||
| # the Free Software Foundation; version 2 of the License. |  | ||||||
| # |  | ||||||
| # This program is distributed in the hope that it will be useful, |  | ||||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
| # GNU General Public License for more details. |  | ||||||
|  |  | ||||||
| create_repo(){ |  | ||||||
|     local pkg="$1" org="$2" |  | ||||||
|     local gitname=$(get_compliant_name "$pkg") |  | ||||||
|     local json="{ \"auto_init\": true, \"name\":\"$gitname\", \"gitignores\":\"ArchLinuxPackages\", \"readme\": \"Default\" }" |  | ||||||
|  |  | ||||||
|     msg2 "Create package repo [%s] in org (%s)" "${pkg}" "${org}" |  | ||||||
|  |  | ||||||
|     curl -X POST "${GIT_URL}/api/v1/org/$org/repos?access_token=${GIT_TOKEN}" \ |  | ||||||
|         -H "accept: application/json" \ |  | ||||||
|         -H "content-type: application/json" \ |  | ||||||
|         -d "$json" |  | ||||||
|  |  | ||||||
|     echo |  | ||||||
| } |  | ||||||
|  |  | ||||||
| delete_repo(){ |  | ||||||
|     local pkg="$1" org="$2" |  | ||||||
|     local gitname=$(get_compliant_name "$pkg") |  | ||||||
|  |  | ||||||
|     msg2 "Delete package repo [%s] in org (%s)" "${pkg}" "${org}" |  | ||||||
|  |  | ||||||
|     curl -X DELETE "${GIT_URL}/api/v1/repos/$org/$gitname?access_token=${GIT_TOKEN}" \ |  | ||||||
|         -H  "accept: application/json" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| get_pkg_org(){ |  | ||||||
|     local pkg="$1" org= sub= |  | ||||||
|     case ${pkg} in |  | ||||||
| #         ruby-*) org=${pkg:0:6}; sub="${org:5}"; echo "packagesRuby" ;; |  | ||||||
|         perl-*) org=${pkg:0:6}; sub="${org:5}"; echo "packagesPerl" ;; |  | ||||||
|         python-*) org=${pkg:0:8}; sub="${org:7}"; echo "packagesPython" ;; |  | ||||||
|         python2-*) org=${pkg:0:9}; sub="${org:8}"; echo "packagesPython" ;; |  | ||||||
|         lib32*) org=${pkg:0:7}; sub="${org:6}"; echo "packagesL" ;; #"packages${sub^^}" ;; |  | ||||||
| #         lib*) org=${pkg:0:4}; sub="${org:3}"; echo "packagesLib${sub^^}" ;; |  | ||||||
|         *) org=${pkg:0:1}; echo "packages${org^^}" ;; |  | ||||||
|     esac |  | ||||||
| } |  | ||||||
|  |  | ||||||
| load_team_id(){ |  | ||||||
|     local org="$1" tree="$2" id=0 |  | ||||||
|  |  | ||||||
|     case $org in |  | ||||||
|         packagesA) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=70 ;; |  | ||||||
|                 community) id=71 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesB) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=72 ;; |  | ||||||
|                 community) id=73 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesC) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=74 ;; |  | ||||||
|                 community) id=75 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesD) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=76 ;; |  | ||||||
|                 community) id=77 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesE) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=78 ;; |  | ||||||
|                 community) id=79 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesF) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=80 ;; |  | ||||||
|                 community) id=81 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesG) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=82 ;; |  | ||||||
|                 community) id=83 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesH) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=84 ;; |  | ||||||
|                 community) id=85 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesI) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=86 ;; |  | ||||||
|                 community) id=87 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesJ) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=88 ;; |  | ||||||
|                 community) id=89 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesK) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=90 ;; |  | ||||||
|                 community) id=91 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesL) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=92 ;; |  | ||||||
|                 community) id=93 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesM) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=94 ;; |  | ||||||
|                 community) id=95 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesN) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=96 ;; |  | ||||||
|                 community) id=97 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesO) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=98 ;; |  | ||||||
|                 community) id=99 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesP) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=100 ;; |  | ||||||
|                 community) id=101 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesQ) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=105 ;; |  | ||||||
|                 community) id=106 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesR) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=107 ;; |  | ||||||
|                 community) id=108 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesS) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=109 ;; |  | ||||||
|                 community) id=110 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesT) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=111 ;; |  | ||||||
|                 community) id=112 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesU) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=113 ;; |  | ||||||
|                 community) id=114 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesV) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=115 ;; |  | ||||||
|                 community) id=116 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesW) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=117 ;; |  | ||||||
|                 community) id=118 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesX) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=119 ;; |  | ||||||
|                 community) id=120 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesY) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=121 ;; |  | ||||||
|                 community) id=122 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesZ) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=123 ;; |  | ||||||
|                 community) id=124 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesPython) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=103 ;; |  | ||||||
|                 community) id=104 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|         packagesPerl) |  | ||||||
|             case $tree in |  | ||||||
|                 packages) id=102 ;; |  | ||||||
|                 community) id=125 ;; |  | ||||||
|             esac |  | ||||||
|         ;; |  | ||||||
|     esac |  | ||||||
|     echo $id |  | ||||||
| } |  | ||||||
|  |  | ||||||
| add_repo_to_team(){ |  | ||||||
|     local pkg="$1" org="$2" tree="$3" |  | ||||||
|     local id=$(load_team_id "$org" "$tree") |  | ||||||
|  |  | ||||||
|     msg2 "Adding package repo [%s] to team (%s)" "$pkg" "$tree" |  | ||||||
|  |  | ||||||
|     curl -X PUT "${GIT_URL}/api/v1/teams/$id/repos/$org/$pkg?access_token=${GIT_TOKEN}" \ |  | ||||||
|         -H  "accept: application/json" |  | ||||||
| } |  | ||||||
							
								
								
									
										17
									
								
								lib/util-pkg.sh.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								lib/util-pkg.sh.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | # | ||||||
|  | # Copyright (C) 2018-19 artoo@artixlinux.org | ||||||
|  | # Copyright (C) 2018 Artix Linux Developers | ||||||
|  | # | ||||||
|  | # This program is free software; you can redistribute it and/or modify | ||||||
|  | # it under the terms of the GNU General Public License as published by | ||||||
|  | # the Free Software Foundation; version 2 of the License. | ||||||
|  | # | ||||||
|  | # This program is distributed in the hope that it will be useful, | ||||||
|  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | # GNU General Public License for more details. | ||||||
|  |  | ||||||
|  | for pkglib in ${LIBDIR}/pkg/*.sh; do | ||||||
|  |     . $pkglib | ||||||
|  | done | ||||||
		Reference in New Issue
	
	Block a user