forked from artix/artools
		
	Compare commits
	
		
			92 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ee55448fe0 | |||
| b3415307b1 | |||
| 2516fccc3b | |||
| 45ecb59ffd | |||
| 11fff303f9 | |||
| b05d1c999f | |||
| 1572c94389 | |||
| 601f7c30ba | |||
| 2f37832558 | |||
| bf70341af9 | |||
| ea3a06a9bc | |||
| 812cf9a317 | |||
| 70aa91ddd8 | |||
| 15407b612a | |||
| 8d4adb5b47 | |||
| 85659bfa5e | |||
| f0799f85e4 | |||
| 3810656411 | |||
| 79b99440fc | |||
| d353cd8d46 | |||
| 90623d0485 | |||
| 2c0c3b2032 | |||
| a463f22118 | |||
| 86504ac676 | |||
| 450ac445e4 | |||
| 56b350ffd0 | |||
| a6c4513867 | |||
| c50715f258 | |||
| 77296c4527 | |||
| 3f419cc41e | |||
| 60d7ac62a5 | |||
| 8cc8b66e7f | |||
| 0ae8c16801 | |||
| bb674109ed | |||
| ede2ac11e2 | |||
| e8913b07c3 | |||
| f5f9a2acb8 | |||
| c6f7df51d2 | |||
| b105207138 | |||
| 55e98abdc1 | |||
| 896c031ea9 | |||
| 8f16db45e8 | |||
| 47ee03e1a4 | |||
| 17f49857e2 | |||
| 68e23f7e47 | |||
| c5228a8b43 | |||
| 84151f360f | |||
| a6ca83be7e | |||
| 0a07a1f1dd | |||
| 9dedb2e4cb | |||
| dcf6ec1d7b | |||
| 62022faad7 | |||
| dea81dd9f9 | |||
| e49d2d77bd | |||
| 4a06d4d2eb | |||
| 231d054ee9 | |||
| 2945493eb7 | |||
| 0f037f1106 | |||
| 6c4197e76d | |||
| 8ebdad278e | |||
| 2bacf6d19e | |||
| 6700e1a2e6 | |||
| f874c8c399 | |||
| 1a5ea6c4ee | |||
| 486acaf47a | |||
| d5ba8ed404 | |||
| daf4c8283e | |||
| 7b65c27025 | |||
| 433a747da9 | |||
| 015c4f0658 | |||
| b1dd485ec0 | |||
| 316514698e | |||
| 614d6e19c8 | |||
| 9c650134c4 | |||
| b849cadbae | |||
| f1067bcd60 | |||
| 3942dde012 | |||
| 30a6c61f52 | |||
| d8195e2288 | |||
| bfe9130cfb | |||
| 8873a71824 | |||
| bb86a05f2f | |||
| bd611c1af2 | |||
| f4e8f703ea | |||
| aa83bc79bb | |||
| 1bb9687ece | |||
| 48ced03735 | |||
| 0437e66091 | |||
| 9af6d02dea | |||
| 685992cca3 | |||
| 816e13895f | |||
| 6a3f48f181 | 
							
								
								
									
										35
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								Makefile
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| VERSION=0.13 | ||||
| VERSION=0.16 | ||||
|  | ||||
| CHROOT_VERSION=0.9 | ||||
| CHROOT_VERSION=0.10 | ||||
|  | ||||
| TOOLS = artools | ||||
| PREFIX ?= /usr | ||||
| @@ -10,8 +10,8 @@ LIBDIR = $(PREFIX)/lib | ||||
| DATADIR = $(PREFIX)/share | ||||
| CPIODIR = $(SYSCONFDIR)/initcpio | ||||
|  | ||||
| CONF = \ | ||||
| 	data/artools.conf | ||||
| BASE_CONF = \ | ||||
| 	data/conf/artools-base.conf | ||||
|  | ||||
| BASE_BIN = \ | ||||
| 	bin/base/signfile \ | ||||
| @@ -29,6 +29,9 @@ BASE_UTIL = lib/util-base.sh | ||||
| BASE_DATA = \ | ||||
| 	$(wildcard data/base/pacman*.conf) | ||||
|  | ||||
| PKG_CONF = \ | ||||
| 	data/conf/artools-pkg.conf | ||||
|  | ||||
| PKG_BIN = \ | ||||
| 	bin/pkg/buildpkg \ | ||||
| 	bin/pkg/deploypkg \ | ||||
| @@ -38,7 +41,11 @@ PKG_BIN = \ | ||||
| 	bin/pkg/pkg2yaml \ | ||||
| 	bin/pkg/buildtree \ | ||||
| 	bin/pkg/lddd \ | ||||
| 	bin/pkg/links-add | ||||
| 	bin/pkg/links-add \ | ||||
| 	bin/pkg/checkpkg \ | ||||
| 	bin/pkg/finddeps \ | ||||
| 	bin/pkg/find-libdeps \ | ||||
| 	bin/pkg/batchpkg | ||||
|  | ||||
| LN_COMMITPKG = \ | ||||
| 	extrapkg \ | ||||
| @@ -85,9 +92,6 @@ LN_DEPLOYPKG = \ | ||||
| PKG_LIBS = \ | ||||
| 	$(wildcard lib/pkg/*) | ||||
|  | ||||
| PKG_LISTS = \ | ||||
| 	$(wildcard data/pkglists/*.list) | ||||
|  | ||||
| PKG_UTIL = lib/util-pkg.sh | ||||
|  | ||||
| PKG_DATA = \ | ||||
| @@ -96,6 +100,9 @@ PKG_DATA = \ | ||||
| PATCHES = \ | ||||
| 	$(wildcard data/patches/*.patch) | ||||
|  | ||||
| ISO_CONF = \ | ||||
| 	data/conf/artools-iso.conf | ||||
|  | ||||
| ISO_BIN = \ | ||||
| 	bin/iso/buildiso \ | ||||
| 	bin/iso/deployiso | ||||
| @@ -151,7 +158,7 @@ clean: | ||||
|  | ||||
| install_base: | ||||
| 	install $(DIRMODE) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(CONF) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(BASE_CONF) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) | ||||
|  | ||||
| 	install $(DIRMODE) $(DESTDIR)$(BINDIR) | ||||
| 	install $(MODE) $(BASE_BIN) $(DESTDIR)$(BINDIR) | ||||
| @@ -164,9 +171,14 @@ install_base: | ||||
| 	install $(FILEMODE) $(BASE_DATA) $(DESTDIR)$(DATADIR)/$(TOOLS) | ||||
|  | ||||
| install_pkg: | ||||
| 	install $(DIRMODE) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(PKG_CONF) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) | ||||
|  | ||||
| 	install $(DIRMODE) $(DESTDIR)$(BINDIR) | ||||
| 	install $(MODE) $(PKG_BIN) $(DESTDIR)$(BINDIR) | ||||
|  | ||||
| 	$(LN) find-libdeps $(DESTDIR)$(BINDIR)/find-libprovides | ||||
|  | ||||
| 	$(LN) links-add $(DESTDIR)$(BINDIR)/links-remove | ||||
|  | ||||
| 	for l in $(LN_COMMITPKG); do $(LN) commitpkg $(DESTDIR)$(BINDIR)/$$l; done | ||||
| @@ -183,12 +195,13 @@ install_pkg: | ||||
| 	install $(DIRMODE) $(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: | ||||
| 	+make CPIODIR=$(CPIODIR) DESTDIR=$(DESTDIR) -C initcpio install | ||||
|  | ||||
| install_iso: install_cpio | ||||
| 	install $(DIRMODE) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(ISO_CONF) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) | ||||
|  | ||||
| 	install $(DIRMODE) $(DESTDIR)$(BINDIR) | ||||
| 	install $(MODE) $(ISO_BIN) $(DESTDIR)$(BINDIR) | ||||
|  | ||||
|   | ||||
							
								
								
									
										27
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								README.md
									
									
									
									
									
								
							| @@ -39,15 +39,18 @@ artools | ||||
|  | ||||
| #### Configuration | ||||
|  | ||||
| artools.conf is the central configuration file for artools. | ||||
| By default, the config is installed in | ||||
| artools-{base,pkg,iso}.conf are the configuration files for artools. | ||||
| By default, the config files are installed in | ||||
|  | ||||
|     /etc/artools/artools.conf | ||||
| ```bash | ||||
| /etc/artools/artools-{base,pkg,iso}.conf | ||||
| ``` | ||||
|  | ||||
| A user artools.conf can be placed in | ||||
|  | ||||
|     $HOME/.config/artools/artools.conf | ||||
| A user artools-{base,pkg,iso}.conf can be placed in | ||||
|  | ||||
| ```bash | ||||
| $HOME/.config/artools/artools-{base,pkg,iso}.conf | ||||
| ``` | ||||
|  | ||||
| If the userconfig is present, artools will load the userconfig values, however, if variables have been set in the systemwide | ||||
|  | ||||
| @@ -55,13 +58,17 @@ These values take precedence over the userconfig. | ||||
| Best practise is to leave systemwide file untouched. | ||||
| By default it is commented and shows just initialization values done in code. | ||||
|  | ||||
| Tools configuration is done in artools.conf or by args. | ||||
| Specifying args will override artools.conf settings. | ||||
| Tools configuration is done in artools-{base,pkg,iso}.conf or by args. | ||||
| Specifying args will override artools-{base,pkg,iso}.conf settings. | ||||
|  | ||||
| Both, pacman.conf and makepkg.conf for chroots are loaded from | ||||
|  | ||||
|     /usr/share/artools/{makepkg,pacman-*}.conf | ||||
| ```bash | ||||
| usr/share/artools/{makepkg,pacman-*}.conf | ||||
| ``` | ||||
|  | ||||
| and can be overridden dropping them in | ||||
|  | ||||
|     $HOME/.config/artools/ | ||||
| ```bash | ||||
| $HOME/.config/artools/ | ||||
| ``` | ||||
|   | ||||
| @@ -46,10 +46,6 @@ select_os(){ | ||||
|     fi | ||||
| } | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
|  | ||||
| automount=false | ||||
|  | ||||
| usage() { | ||||
|   | ||||
| @@ -36,18 +36,16 @@ copy_keyring(){ | ||||
|  | ||||
| create_min_fs(){ | ||||
|     msg "Creating install root at %s" "$1" | ||||
|     mkdir -m 0755 -p $1/var/{cache/pacman/pkg,lib/pacman,log} $1/{dev,etc} | ||||
|     mkdir -m 1777 -p $1/{tmp,run} | ||||
|     mkdir -m 0755 -p $1/var/{cache/pacman/pkg,lib/pacman,log} $1/{dev,run,etc/pacman.d} | ||||
|     mkdir -m 1777 -p $1/tmp | ||||
|     mkdir -m 0555 -p $1/{sys,proc} | ||||
| } | ||||
|  | ||||
| newroot=/mnt | ||||
|  | ||||
| hostcache=false | ||||
| copykeyring=true | ||||
| copymirrorlist=true | ||||
| directory=false | ||||
| interactive=false | ||||
| hostcache=0 | ||||
| copykeyring=1 | ||||
| copymirrorlist=1 | ||||
|  | ||||
| usage() { | ||||
|     echo "usage: ${0##*/} [options] root [packages...]" | ||||
| @@ -72,10 +70,10 @@ opts=':C:cGiM' | ||||
| while getopts ${opts} arg; do | ||||
|     case "${arg}" in | ||||
|         C) pacman_conf=$OPTARG ;; | ||||
|         c) hostcache=true ;; | ||||
|         i) interactive=true ;; | ||||
|         G) copykeyring=false ;; | ||||
|         M) copymirrorlist=false ;; | ||||
|         c) hostcache=1 ;; | ||||
|         i) interactive=1 ;; | ||||
|         G) copykeyring=0 ;; | ||||
|         M) copymirrorlist=0 ;; | ||||
|         :) echo "invalid argument ${arg}:$OPTARG"; usage 1;; | ||||
|         ?) usage 0 ;; | ||||
|     esac | ||||
| @@ -88,9 +86,13 @@ check_root | ||||
| newroot=$1; shift | ||||
| pacman_args=("${@:-base}") | ||||
|  | ||||
| ${hostcache} || pacman_args+=(--cachedir="$newroot/var/cache/pacman/pkg") | ||||
| if (( ! hostcache ));then | ||||
|     pacman_args+=(--cachedir="$newroot/var/cache/pacman/pkg") | ||||
| fi | ||||
|  | ||||
| ${interactive} || pacman_args+=(--noconfirm) | ||||
| if (( ! interactive )); then | ||||
|     pacman_args+=(--noconfirm) | ||||
| fi | ||||
|  | ||||
| [[ -n $pacman_conf ]] && pacman_args+=(--config="$pacman_conf") | ||||
|  | ||||
| @@ -102,15 +104,16 @@ create_min_fs "$newroot" | ||||
| # mount API filesystems | ||||
| chroot_api_mount "$newroot" || die "failed to setup API filesystems in new root" | ||||
|  | ||||
| if (( copykeyring ));then | ||||
|     copy_keyring "$newroot" | ||||
| fi | ||||
|  | ||||
| msg2 'Installing packages to %s' "$newroot" | ||||
| if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then | ||||
|     die 'Failed to install packages to new root' | ||||
| fi | ||||
|  | ||||
| if ${copykeyring};then | ||||
|     copy_keyring "$newroot" | ||||
| fi | ||||
|  | ||||
| if ${copymirrorlist};then | ||||
| if (( copymirrorlist ));then | ||||
|     copy_mirrorlist "$newroot" | ||||
| fi | ||||
|   | ||||
| @@ -16,9 +16,12 @@ chroot_version=0.9 | ||||
|  | ||||
| . @libdir@/artools/util-base.sh | ||||
|  | ||||
| # umask might have been changed in /etc/profile | ||||
| # ensure that sane default is set again | ||||
| umask 0022 | ||||
|  | ||||
| working_dir='' | ||||
| files=() | ||||
| nosetarch=false | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options] working-dir [run arguments]" | ||||
| @@ -45,9 +48,9 @@ while getopts ${opts} arg; do | ||||
|     case "${arg}" in | ||||
|         C) pacman_conf="$OPTARG" ;; | ||||
|         M) makepkg_conf="$OPTARG" ;; | ||||
|         c) cache_dir="$OPTARG" ;; | ||||
|         c) cache_dirs+=("$OPTARG") ;; | ||||
|         f) files+=("$OPTARG") ;; | ||||
|         s) nosetarch=true ;; | ||||
|         s) nosetarch=1 ;; | ||||
|         r) bindmounts_ro=("$OPTARG") ;; | ||||
|         w) bindmounts_rw=("$OPTARG") ;; | ||||
|         h|?) usage ;; | ||||
| @@ -65,20 +68,33 @@ shift 1 | ||||
|  | ||||
| [[ -z $working_dir ]] && die 'Please specify a working directory.' | ||||
|  | ||||
| if [[ -z $cache_dir ]]; then | ||||
|     cache_dirs=($(pacman -v 2>&1 | grep '^Cache Dirs:' | sed 's/Cache Dirs:\s*//g')) | ||||
| else | ||||
|     cache_dirs=("$cache_dir") | ||||
| pacconf_cmd=$(command -v pacman-conf || command -v pacconf) | ||||
|  | ||||
| if (( ${#cache_dirs[@]} == 0 )); then | ||||
|     mapfile -t cache_dirs < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" CacheDir) | ||||
| 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#')) | ||||
|      | ||||
|  | ||||
| while read -r line; do | ||||
|     mapfile -t lines < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" \ | ||||
|         --repo $line Server | sed -r 's#(.*/)[^/]+/os/.+#\1$repo/os/$arch#') | ||||
|     if [[ ${lines[0]} != ${host_mirrors[0]} ]]; then | ||||
|         for line in "${lines[@]}"; do | ||||
|             if [[ $line = file://* ]]; then | ||||
|                 line=${line#file://} | ||||
|                 in_array "$line" "${cache_dirs[@]}" || cache_dirs+=("$line") | ||||
|             fi | ||||
|         done | ||||
|     fi | ||||
| done < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" --repo-list) | ||||
|  | ||||
| copy_hostconf () { | ||||
|     cp -a /etc/pacman.d/gnupg "$1/etc/pacman.d" | ||||
|      | ||||
|     unshare --fork --pid gpg --homedir "$working_dir"/etc/pacman.d/gnupg/ --no-permission-warning --quiet --batch --import --import-options import-local-sigs "$(pacman-conf GpgDir)"/pubring.gpg >/dev/null 2>&1 | ||||
|     pacman-key --gpgdir "$working_dir"/etc/pacman.d/gnupg/ --import-trustdb "$(pacman-conf GpgDir)" >/dev/null 2>&1 | ||||
|  | ||||
|     printf 'Server = %s\n' "${host_mirrors[@]}" >"$working_dir/etc/pacman.d/mirrorlist" | ||||
|      | ||||
|  | ||||
|     [[ -n $pacman_conf ]] && cp $pacman_conf "$1/etc/pacman.conf" | ||||
|  | ||||
|     [[ -n $makepkg_conf ]] && cp $makepkg_conf "$1/etc/makepkg.conf" | ||||
| @@ -95,7 +111,6 @@ copy_hostconf () { | ||||
| chroot_extra_mount() { | ||||
|     chroot_add_resolv_conf "$1" | ||||
|     chroot_mount "/etc/hosts" "$1/etc/hosts" -B | ||||
| #     chroot_mount_conditional "[[ -e $1/etc/machine-id ]]" "/etc/machine-id" "$1/etc/machine-id" -B | ||||
|     chroot_mount "${cache_dirs[0]}" "$1${cache_dirs[0]}" -B | ||||
|  | ||||
|     for cache_dir in ${cache_dirs[@]:1}; do | ||||
| @@ -109,7 +124,7 @@ chroot_extra_mount() { | ||||
|     for m in ${bindmounts_rw[@]}; do | ||||
|         chroot_mount "${m%%:*}" "$1${m##*:}" -B | ||||
|     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') | ||||
| @@ -118,6 +133,12 @@ chroot_extra_mount() { | ||||
|     done | ||||
| } | ||||
|  | ||||
| sync_host_localtime(){ | ||||
|     if [[ -e /etc/localtime ]]; then | ||||
|         cp -L /etc/localtime "$1"/etc/localtime | ||||
|     fi | ||||
| } | ||||
|  | ||||
| umask 0022 | ||||
|  | ||||
| # Sanity check | ||||
| @@ -127,6 +148,8 @@ elif [[ $(cat "$working_dir/.artools") != ${CHROOTVERSION} ]]; then | ||||
|     die "chroot '%s' is not at version %s. Please rebuild." "$working_dir" "${CHROOTVERSION}" | ||||
| fi | ||||
|  | ||||
| sync_host_localtime "${working_dir}" | ||||
|  | ||||
| chroot_api_mount "${working_dir}" || die "failed to setup API filesystems in chroot %s" "${working_dir}" | ||||
|  | ||||
| chroot_extra_mount "${working_dir}" | ||||
| @@ -135,7 +158,7 @@ copy_hostconf "${working_dir}" | ||||
|  | ||||
| eval $(grep '^CARCH=' "$working_dir/etc/makepkg.conf") | ||||
|  | ||||
| ${nosetarch} && unset CARCH | ||||
| [[ -z $nosetarch ]] || unset CARCH | ||||
|  | ||||
| ${CARCH:+setarch "$CARCH"} chroot "${working_dir}" "$@" | ||||
|  | ||||
|   | ||||
| @@ -215,7 +215,7 @@ done | ||||
|         [[ $device = *'\040(deleted)' ]] && continue | ||||
|  | ||||
|         if [[ $type = file ]]; then | ||||
|             printf '%-20s' "$device" | ||||
|             printf '%-20s' "${device#${root%/}}" | ||||
|         elif [[ $device = /dev/dm-+([0-9]) ]]; then | ||||
|             # device mapper doesn't allow characters we need to worry | ||||
|             # about being mangled, and it does the escaping of dashes | ||||
|   | ||||
| @@ -15,11 +15,9 @@ | ||||
| . @libdir@/artools/util-base.sh | ||||
|  | ||||
| working_dir='' | ||||
| files=() | ||||
|  | ||||
| nosetarch=false | ||||
| copy_mirrorlist=true | ||||
| basestrap_args=(-Gc) | ||||
| files=() | ||||
| chroot_args=() | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options] working-dir package-list..." | ||||
| @@ -28,7 +26,6 @@ usage() { | ||||
|     echo '    -M <file>     Location of a makepkg config file' | ||||
|     echo '    -c <dir>      Set pacman cache' | ||||
|     echo '    -f <file>     Copy file from the host to the chroot' | ||||
|     echo '    -m            Do not copy mirrorlist to the chroot' | ||||
|     echo '    -s            Do not run setarch' | ||||
|     echo '    -h            This message' | ||||
|     exit 1 | ||||
| @@ -36,7 +33,7 @@ usage() { | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts='hC:M:c:f:sm' | ||||
| opts='hC:M:c:f:s' | ||||
|  | ||||
| while getopts ${opts} arg; do | ||||
|     case "${arg}" in | ||||
| @@ -44,11 +41,12 @@ while getopts ${opts} arg; do | ||||
|         M) makepkg_conf="$OPTARG" ;; | ||||
|         c) cache_dir="$OPTARG" ;; | ||||
|         f) files+=("$OPTARG") ;; | ||||
|         s) nosetarch=true ;; | ||||
|         m) copy_mirrorlist=false; basestrap_args+=(-M) ;; | ||||
|         s) nosetarch=1 ;; | ||||
|         h|?) usage ;; | ||||
|         *) error "invalid argument '%s'" "$arg"; usage ;; | ||||
|     esac | ||||
|     chroot_args+=("-$arg") | ||||
|     [[ -v OPTARG ]] && chroot_args+=("$OPTARG") | ||||
| done | ||||
| shift $(($OPTIND - 1)) | ||||
|  | ||||
| @@ -61,10 +59,10 @@ shift 1 | ||||
|  | ||||
| [[ -z $working_dir ]] && die 'Please specify a working directory.' | ||||
|  | ||||
| if [[ -z $cache_dir ]]; then | ||||
|     cache_dirs=($(pacman -v $cache_conf 2>&1 | grep '^Cache Dirs:' | sed 's/Cache Dirs:\s*//g')) | ||||
| else | ||||
|     cache_dirs=(${cache_dir}) | ||||
| pacconf_cmd=$(command -v pacman-conf || command -v pacconf) | ||||
|  | ||||
| if (( ${#cache_dirs[@]} == 0 )); then | ||||
| 	mapfile -t cache_dirs < <($pacconf_cmd CacheDir) | ||||
| fi | ||||
|  | ||||
| umask 0022 | ||||
| @@ -90,26 +88,15 @@ for f in "${files[@]}"; do | ||||
|     cp "$f" "$working_dir$f" | ||||
| done | ||||
|  | ||||
| _env=() | ||||
| while read -r varname; do | ||||
|     _env+=("$varname=${!varname}") | ||||
| done < <(declare -x | sed -r 's/^declare -x ([^=]*)=.*/\1/' | grep -i '_proxy$') | ||||
| env -i "${_env[@]}" \ | ||||
| basestrap "${basestrap_args[@]}" ${pacman_conf:+-C "$pacman_conf"} "$working_dir" ${cache_dirs[@]/#/--cachedir=} "$@" || die 'Failed to install all packages' | ||||
| basestrap -Mc ${pacman_conf:+-C "$pacman_conf"} "$working_dir" \ | ||||
|     ${cache_dirs[@]/#/--cachedir=} "$@" || die 'Failed to install all packages' | ||||
|  | ||||
| echo "${CHROOTVERSION}" > "$working_dir/.artools" | ||||
|  | ||||
| if [[ ! -f "$working_dir/etc/locale.gen.orig" ]];then | ||||
|     mv "$working_dir/etc/locale.gen" "$working_dir/etc/locale.gen.orig" | ||||
| fi | ||||
| printf '%s.UTF-8 UTF-8\n' en_US de_DE > "$working_dir/etc/locale.gen" | ||||
| echo 'LANG=en_US.UTF-8' > "$working_dir/etc/locale.conf" | ||||
| echo "${CHROOTVERSION}" > "$working_dir/.artools" | ||||
|  | ||||
| dbus-uuidgen --ensure="$working_dir"/etc/machine-id | ||||
|  | ||||
| chroot_args=(${pacman_conf:+-C "$pacman_conf"} ${makepkg_conf:+-M "$makepkg_conf"} ${cache_dir:+-c "$cache_dir"}) | ||||
| ${nosetarch} && chroot_args+=(${nosetarch:+-s}) | ||||
|  | ||||
| exec chroot-run \ | ||||
|     "${chroot_args[@]}" \ | ||||
|     "$working_dir" locale-gen | ||||
|   | ||||
| @@ -16,7 +16,7 @@ | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
| load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf" | ||||
| load_vars /etc/makepkg.conf | ||||
|  | ||||
| file_to_sign="$1" | ||||
|   | ||||
| @@ -12,13 +12,27 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| . @libdir@/artools/util-base.sh | ||||
| . @libdir@/artools/util-iso.sh | ||||
|  | ||||
| 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 | ||||
| } | ||||
|  | ||||
| prepare_build(){ | ||||
|     timer_start=$(get_timer) | ||||
|  | ||||
|     load_profile "${PROFILE}" | ||||
|     load_profile | ||||
|  | ||||
|     local pacman_conf pac_file="pacman-default.conf" | ||||
|  | ||||
| @@ -27,13 +41,13 @@ prepare_build(){ | ||||
|     esac | ||||
|  | ||||
|     pacman_conf="${DATADIR}/$pac_file" | ||||
|     [[ -f ${USERCONFDIR}/artools/$pac_file ]] && pacman_conf="${USERCONFDIR}/artools/$pac_file" | ||||
|     [[ -f ${USER_CONF_DIR}/$pac_file ]] && pacman_conf="${USER_CONF_DIR}/$pac_file" | ||||
|  | ||||
|     iso_file=$(gen_iso_fn).iso | ||||
|  | ||||
|     iso_label="ARTIX_$(date +%Y%m)" | ||||
|  | ||||
|     mkchroot_args+=(-C ${pacman_conf} -m) | ||||
|     basestrap_args+=(-C ${pacman_conf}) | ||||
|     work_dir=${CHROOTS_ISO}/${PROFILE}/${ARCH} | ||||
|  | ||||
|     iso_dir="${ISO_POOL}/${PROFILE}" | ||||
| @@ -73,7 +87,9 @@ build(){ | ||||
|         lock_close 9 | ||||
|  | ||||
|         rm -rf --one-file-system "${work_dir}" | ||||
|         clean_iso_root "${iso_root}" | ||||
|  | ||||
|         msg "Deleting isoroot [%s] ..." "${iso_root##*/}" | ||||
|         rm -rf --one-file-system "${iso_root}" | ||||
|     fi | ||||
|  | ||||
|     if ${iso_only}; then | ||||
| @@ -93,18 +109,13 @@ build(){ | ||||
|     show_elapsed_time "${FUNCNAME}" "${timer_start}" | ||||
| } | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
|  | ||||
| clean_first=true | ||||
| pretend=false | ||||
| images_only=false | ||||
| iso_only=false | ||||
| log=false | ||||
| persist=false | ||||
|  | ||||
| mkchroot_args=() | ||||
| basestrap_args=(-GMc) | ||||
| cmd=${0##*/} | ||||
|  | ||||
| REPOSITORY=${cmd##*-} | ||||
| @@ -125,7 +136,6 @@ usage() { | ||||
|     echo '    -x                 Build images only' | ||||
|     echo '    -z                 Generate iso only' | ||||
|     echo '                       Requires pre built images (-x)' | ||||
|     echo '    -l                 Log to file' | ||||
|     echo '    -q                 Query settings and pretend build' | ||||
|     echo '    -h                 This help' | ||||
|     echo '' | ||||
| @@ -135,7 +145,7 @@ usage() { | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts='p:r:t:i:g:czxmlqh' | ||||
| opts='p:r:t:i:g:czxmqh' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
| @@ -148,7 +158,6 @@ while getopts "${opts}" arg; do | ||||
|         x) images_only=true ;; | ||||
|         z) iso_only=true ;; | ||||
|         m) persist=true ;; | ||||
|         l) log=true ;; | ||||
|         q) pretend=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|   | ||||
| @@ -12,7 +12,7 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| . @libdir@/artools/util-base.sh | ||||
| . @libdir@/artools/util-iso.sh | ||||
|  | ||||
| connect(){ | ||||
|     echo "${ACCOUNT}@${FILE_HOST}:${FILE_HOME}" | ||||
| @@ -30,10 +30,6 @@ sync_dir(){ | ||||
|     show_elapsed_time "${FUNCNAME}" "${timer_start}" | ||||
| } | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
|  | ||||
| update=false | ||||
| verbose=false | ||||
|  | ||||
|   | ||||
							
								
								
									
										71
									
								
								bin/pkg/batchpkg.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								bin/pkg/batchpkg.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,71 @@ | ||||
| #!/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. | ||||
|  | ||||
| . /usr/lib/artools/util-pkg.sh | ||||
|  | ||||
| batch_move() { | ||||
|     local name="${1:-pkg_moves}" | ||||
|     local pkglist=${TREE_DIR_ARTIX}/$name.list | ||||
|     [[ -f $pkglist ]] || die "%s does not exist!" "$pkglist" | ||||
|     while read entry;do | ||||
|         local pkg=${entry##*:} | ||||
|         local src=${entry%:*} | ||||
|         src=${src#*:} | ||||
|         local dest=${entry%%:*} | ||||
|         if ${runlist}; then | ||||
|             "${dest}"pkg -s "${src}" -u -p "${pkg}" | ||||
|         else | ||||
|             msg "%s" "${dest}pkg -s ${src} -u -p ${pkg}" | ||||
|         fi | ||||
|     done < $pkglist | ||||
| } | ||||
|  | ||||
| # batch_upgrade() { | ||||
| #     local pkglist=${TREE_DIR_ARTIX}/pkg_upgrades.list | ||||
| #     [[ -f $pkglist ]] || die "%s does not exist!" "$pkglist" | ||||
| #     while read entry;do | ||||
| #         local pkg=${entry#*:} | ||||
| #         local dest=${entry%:*} | ||||
| #         echo "buildtree -i -p ${pkg}" | ||||
| #         echo "${dest}pkg -u -p ${pkg}" | ||||
| #     done < $pkglist | ||||
| # } | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [optional listname]" | ||||
|     echo '    -r                 Run generated commands' | ||||
|     echo '    -h                 This help' | ||||
|     echo '' | ||||
|     echo '' | ||||
|     exit $1 | ||||
| } | ||||
|  | ||||
| movelistname=pkg_moves | ||||
| runlist=false | ||||
|  | ||||
| opts='rh' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
|         r) runlist=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
| shift $(($OPTIND - 1)) | ||||
|  | ||||
| movelistname="$1"; shift | ||||
|  | ||||
| batch_move "$movelistname" | ||||
| @@ -12,14 +12,12 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| . @libdir@/artools/util-base.sh | ||||
| . @libdir@/artools/util-pkg.sh | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
|  | ||||
| create_first=false | ||||
| rebuild=false | ||||
| no_check=false | ||||
| is_checkpkg=false | ||||
|  | ||||
| mkchrootpkg_args=(-c -n) | ||||
|  | ||||
| @@ -27,22 +25,13 @@ cmd=${0##*/} | ||||
| repo=${cmd#*-} | ||||
| base_devel=('base-devel') | ||||
|  | ||||
| case ${repo} in | ||||
|     system|world|galaxy) repo='default' ;; | ||||
|     lib32*) base_devel+=('multilib-devel') ;; | ||||
|     galaxy-gremlins|galaxy-goblins) repo=${repo#*-} ;; | ||||
| esac | ||||
|  | ||||
| pacman_conf="${DATADIR}/pacman-${repo}.conf" | ||||
| [[ -f ${USERCONFDIR}/artools/pacman-${repo}.conf ]] && pacman_conf="${USERCONFDIR}/artools/pacman-${repo}.conf" | ||||
|  | ||||
| makepkg_conf="${DATADIR}/makepkg.conf" | ||||
| [[ -f ${USERCONFDIR}/artools/makepkg.conf ]] && makepkg_conf="${USERCONFDIR}/artools/makepkg.conf" | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options] -- [mkchrootpkg_args]" | ||||
|     echo "    -r <dir>           Create chroots in this directory" | ||||
|     echo '    -c                 Recreate the chroot before building' | ||||
|     echo '    -m                 Major rebuild' | ||||
|     echo '    -N                 Disable check() function' | ||||
|     echo '    -C                 Run checkpkg after built' | ||||
|     echo '    -h                 This help' | ||||
|     echo '' | ||||
|     echo "Default mkchrootpkg_args args: ${mkchrootpkg_args[*]}" | ||||
| @@ -52,17 +41,36 @@ usage() { | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts='hcr:' | ||||
| opts='hcCNmr:' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
|         r) CHROOTS_PKG="$OPTARG" ;; | ||||
|         c) create_first=true ;; | ||||
|         m) rebuild=true ;; | ||||
|         C) is_checkpkg=true; mkchrootpkg_args+=(-C) ;; | ||||
|         N) no_check=true; mkchrootpkg_args+=(-N) ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '%s'" "${arg}"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
| if ${rebuild};then | ||||
|     repo='default' | ||||
| else | ||||
|     case ${repo} in | ||||
|         system|world|galaxy) repo='default' ;; | ||||
|         lib32*) base_devel+=('multilib-devel') ;; | ||||
|         galaxy-gremlins|galaxy-goblins) repo=${repo#*-} ;; | ||||
|     esac | ||||
| fi | ||||
|  | ||||
| pacman_conf="${DATADIR}/pacman-${repo}.conf" | ||||
| [[ -f ${USER_CONF_DIR}/pacman-${repo}.conf ]] && pacman_conf="${USER_CONF_DIR}/pacman-${repo}.conf" | ||||
|  | ||||
| makepkg_conf="${DATADIR}/makepkg.conf" | ||||
| [[ -f ${USER_CONF_DIR}/makepkg.conf ]] && makepkg_conf="${USER_CONF_DIR}/makepkg.conf" | ||||
|  | ||||
| check_root SOURCE_DATE_EPOCH | ||||
|  | ||||
| mkchrootpkg_args+=("${@:$OPTIND}") | ||||
| @@ -94,7 +102,7 @@ else | ||||
|         -C "${pacman_conf}" \ | ||||
|         -M "${makepkg_conf}" \ | ||||
|         "${CHROOTS_PKG}/${repo}-${ARCH}/root" \ | ||||
|         pacman -Syu --noconfirm || abort | ||||
|         pacman -Syuu --noconfirm || abort | ||||
| fi | ||||
|  | ||||
| # Always build official packages reproducibly | ||||
|   | ||||
| @@ -12,9 +12,39 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| . @libdir@/artools/util-base.sh | ||||
| . @libdir@/artools/util-pkg.sh | ||||
|  | ||||
| patch_pkg(){ | ||||
|     local pkg="$1" | ||||
|     case $pkg in | ||||
|         glibc) | ||||
|             sed -e 's|{locale,systemd/system,tmpfiles.d}|{locale,tmpfiles.d}|' \ | ||||
|                 -e '/nscd.service/d' \ | ||||
|                 -i $pkg/trunk/PKGBUILD | ||||
|         ;; | ||||
|         linux|linux-lts) | ||||
|             sed -e 's|KBUILD_BUILD_HOST=.*|KBUILD_BUILD_HOST=artixlinux|' -i $pkg/trunk/PKGBUILD | ||||
|             sed -e 's|CONFIG_DEFAULT_HOSTNAME=.*|CONFIG_DEFAULT_HOSTNAME="artixlinux"|' \ | ||||
|                 -i $pkg/trunk/config | ||||
|         ;; | ||||
|         bash) | ||||
|             sed -e 's|system.bash_logout)|system.bash_logout artix.bashrc)|' \ | ||||
|             -e "s|etc/bash.|etc/bash/|g" \ | ||||
|             -e 's|"$pkgdir/etc/skel/.bash_logout"|"$pkgdir/etc/skel/.bash_logout"\n  install -Dm644 artix.bashrc $pkgdir/etc/bash/bashrc.d/artix.bashrc|' \ | ||||
|             -i $pkg/trunk/PKGBUILD | ||||
|             cd $pkg/trunk | ||||
|                 patch -Np 1 -i ${DATADIR}/patches/artix-bash.patch | ||||
|                 updpkgsums | ||||
|             cd ../.. | ||||
|         ;; | ||||
|         gstreamer|gst-plugins-*|licenses) | ||||
|             sed -e 's|https://www.archlinux.org/|https://www.artixlinux.org/|' \ | ||||
|                 -e 's|(Arch Linux)|(Artix Linux)|' \ | ||||
|                 -i $pkg/trunk/PKGBUILD | ||||
|         ;; | ||||
|     esac | ||||
| } | ||||
|  | ||||
| pull_tree_arch(){ | ||||
|     cd ${TREE_DIR_ARCH} | ||||
|     for tree in ${TREE_NAMES_ARCH[@]};do | ||||
| @@ -29,8 +59,9 @@ pull_tree_arch(){ | ||||
| } | ||||
|  | ||||
| pull_tree_artix(){ | ||||
|     local repos=("$1") | ||||
|     cd ${TREE_DIR_ARTIX} | ||||
|     for tree in ${TREE_NAMES_ARTIX[@]};do | ||||
|     for tree in ${repos[@]};do | ||||
|         if [[ -d ${tree} ]];then | ||||
|             config_tree "${tree}" | ||||
|             cd ${tree} | ||||
| @@ -57,7 +88,7 @@ show_deps(){ | ||||
|  | ||||
|     [[ $arch == 'any' ]] && CARCH=any | ||||
|  | ||||
|     local archver=$(get_full_version $pkg) | ||||
|     local archver=$(get_full_version) | ||||
|  | ||||
|     msg2 "repo: %s" "$repo" | ||||
|     [[ -n ${pkgbase} ]] && msg2 "pkgbase: %s" "${pkgbase}" | ||||
| @@ -72,20 +103,42 @@ show_deps(){ | ||||
|     [[ -n ${optdepends[@]} ]] && msg2 "optdepends: %s" "${optdepends[@]}" | ||||
| } | ||||
|  | ||||
| from_arch(){ | ||||
|     local pkg="$1" src= dest= | ||||
|     local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "$pkg") | ||||
|     [[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "$pkg" | ||||
| subrepo_new(){ | ||||
|     local group="${1:-$GROUP}" team="${2:-$TEAM}" | ||||
|     local dest=${TREE_DIR_ARTIX}/$group/${PACKAGE}/trunk | ||||
|  | ||||
|     local package=${TREE_DIR_ARCH}/$git_tree_arch/$pkg | ||||
|     local repo=$(find_repo "$package") | ||||
|     cd ${TREE_DIR_ARTIX}/$group | ||||
|  | ||||
|     local org=$(get_pkg_org "${PACKAGE}") | ||||
|  | ||||
|     create_repo "${PACKAGE}" "$org" | ||||
|  | ||||
|     add_repo_to_team "${PACKAGE}" "$org" "$team" | ||||
|  | ||||
|     subrepo_clone "${PACKAGE}" "$org" | ||||
|  | ||||
|     prepare_dir "$dest" | ||||
|  | ||||
|     commit_jenkins_files "${PACKAGE}" | ||||
| } | ||||
|  | ||||
| from_arch(){ | ||||
|     local src= dest= | ||||
|  | ||||
|     cd ${TREE_DIR_ARTIX} | ||||
|  | ||||
|     local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "${PACKAGE}") | ||||
|     [[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "${PACKAGE}" | ||||
|  | ||||
|     local package=${TREE_DIR_ARCH}/$git_tree_arch/${PACKAGE} | ||||
|     local repo=$(find_repo "$package" "${staging}" "${unstable}") | ||||
|  | ||||
|     src=$package/repos/$repo | ||||
|  | ||||
|     local git_tree_artix=$(find_tree "${TREE_DIR_ARTIX}" "$pkg") | ||||
|     local tree_dir=$(get_artix_tree "$pkg" "$git_tree_artix" "$git_tree_arch") | ||||
|     local git_tree_artix=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}") | ||||
|     local tree_dir=$(get_artix_tree "${PACKAGE}" "$git_tree_artix" "$git_tree_arch") | ||||
|  | ||||
|     dest=${TREE_DIR_ARTIX}/$tree_dir/$pkg/trunk | ||||
|     dest=${TREE_DIR_ARTIX}/$tree_dir/${PACKAGE}/trunk | ||||
|  | ||||
|     msg "tree: %s" "$tree_dir" | ||||
|     show_deps "$src" "$repo" | ||||
| @@ -95,41 +148,54 @@ from_arch(){ | ||||
|         cd ${TREE_DIR_ARTIX}/$git_tree_artix | ||||
|  | ||||
|         . $dest/PKGBUILD 2>/dev/null | ||||
|         local artixver=$(get_full_version $pkg) | ||||
|         local artixver=$(get_full_version) | ||||
|  | ||||
|         msg2 "Artix Version: %s" "$artixver" | ||||
|     else | ||||
|         subrepo_new "$pkg" "$tree_dir" "$git_tree_arch" | ||||
|         subrepo_new "$tree_dir" "$git_tree_arch" | ||||
|     fi | ||||
|  | ||||
|     msg "Sync (%s) from [%s] to [%s]" "$pkg" "$git_tree_arch" "$tree_dir" | ||||
|     msg "Sync (%s) from [%s] to [%s]" "${PACKAGE}" "$git_tree_arch" "$tree_dir" | ||||
|  | ||||
|     sync_pkg "$src" "$dest" | ||||
|     patch_pkg "$pkg" | ||||
|     patch_pkg "${PACKAGE}" | ||||
| } | ||||
|  | ||||
| view_build(){ | ||||
|     local pkg="$1" src= | ||||
|     local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "$pkg") | ||||
|     [[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "$pkg" | ||||
|     local src= | ||||
|     local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "${PACKAGE}") | ||||
|     [[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "${PACKAGE}" | ||||
|  | ||||
|     local pkg_path=${TREE_DIR_ARCH}/$git_tree_arch/$pkg | ||||
|     local repo=$(find_repo "$pkg_path") | ||||
|     local pkg_path=${TREE_DIR_ARCH}/$git_tree_arch/${PACKAGE} | ||||
|     local repo=$(find_repo "$pkg_path" "${staging}" "${unstable}") | ||||
|  | ||||
|     src=$pkg_path/repos/$repo | ||||
|  | ||||
|     show_deps "$src" "$repo" | ||||
| } | ||||
|  | ||||
| sync_repos(){ | ||||
|     ${sync_arch} && pull_tree_arch | ||||
|     ${sync_artix} && pull_tree_artix | ||||
| check_tree(){ | ||||
|     local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "${PACKAGE}") | ||||
|     [[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "${PACKAGE}" | ||||
|     local git_tree_artix=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}") | ||||
|     local tree_dir=$(get_artix_tree "${PACKAGE}" "$git_tree_artix" "$git_tree_arch") | ||||
|     msg "tree_dir: %s" "$tree_dir" | ||||
|     [[ -z $git_tree_artix ]] && msg2 "exists: %s" "no" | ||||
|     [[ -n $git_tree_artix ]] && msg2 "exists: %s" "yes" | ||||
| } | ||||
|  | ||||
| load_user_info | ||||
| sync_repos(){ | ||||
|     ${sync_arch} && pull_tree_arch | ||||
|     if ${sync_artix};then | ||||
|         if ${sync_group}; then | ||||
|             pull_tree_artix "${GROUP}" | ||||
|         else | ||||
|             pull_tree_artix "${TREE_NAMES_ARTIX[*]}" | ||||
|         fi | ||||
|     fi | ||||
| } | ||||
|  | ||||
| load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
| load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
| load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf" | ||||
| load_vars /etc/makepkg.conf | ||||
|  | ||||
| sync=false | ||||
| @@ -139,6 +205,10 @@ import=false | ||||
| view=false | ||||
| createnew=false | ||||
| conf=false | ||||
| unstable=false | ||||
| staging=true | ||||
| sync_group=false | ||||
| check=false | ||||
|  | ||||
| PACKAGE='' | ||||
|  | ||||
| @@ -150,14 +220,17 @@ usage() { | ||||
|     echo '    -p <pkg>      Package name' | ||||
|     echo '    -t <team>     Team name (only with -n)' | ||||
|     echo "                  [default: ${TEAM}]" | ||||
|     echo '    -g <group>    Group name, the superrepo (only with -n)' | ||||
|     echo '    -g <group>    Group name, the superrepo (only with -n or -s)' | ||||
|     echo "                  [default: ${GROUP}]" | ||||
|     echo "    -s            Clone or pull 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 '    -n            Make new remote subrepo and clone it' | ||||
|     echo '    -v            View package depends' | ||||
|     echo '    -u            Include kde & gnome unstable (only with -i)' | ||||
|     echo '    -w            Exclude staging (only with -i)' | ||||
|     echo '    -v            Check if a package is in the artix tree(s)' | ||||
|     echo '    -c            View package depends' | ||||
|     echo '    -h            This help' | ||||
|     echo '' | ||||
|     echo '' | ||||
| @@ -166,18 +239,21 @@ usage() { | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts='p:t:g:sinzyvh' | ||||
| opts='p:t:g:uwsinzycvh' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
|         p) PACKAGE="$OPTARG" ;; | ||||
|         t) TEAM="$OPTARG" ;; | ||||
|         g) GROUP="$OPTARG" ;; | ||||
|         g) GROUP="$OPTARG"; sync_group=true ;; | ||||
|         s) sync=true ;; | ||||
|         z) sync_arch=false ;; | ||||
|         y) sync_artix=false ;; | ||||
|         i) import=true ;; | ||||
|         n) createnew=true ;; | ||||
|         w) staging=false ;; | ||||
|         u) unstable=true ;; | ||||
|         c) check=true ;; | ||||
|         v) view=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
| @@ -191,8 +267,10 @@ prepare_dir "${TREE_DIR_ARCH}" | ||||
|  | ||||
| ${sync} && sync_repos | ||||
|  | ||||
| ${view} && view_build "${PACKAGE}" | ||||
| ${view} && view_build | ||||
|  | ||||
| ${import} && from_arch "${PACKAGE}" | ||||
| ${check} && check_tree | ||||
|  | ||||
| ${createnew} && subrepo_new "${PACKAGE}" "${GROUP}" "${TEAM}" | ||||
| ${import} && from_arch | ||||
|  | ||||
| ${createnew} && subrepo_new | ||||
|   | ||||
							
								
								
									
										155
									
								
								bin/pkg/checkpkg.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								bin/pkg/checkpkg.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,155 @@ | ||||
| #!/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. | ||||
|  | ||||
| . @libdir@/artools/util-pkg.sh | ||||
|  | ||||
| shopt -s extglob | ||||
|  | ||||
| # Source makepkg.conf; fail if it is not found | ||||
| if [[ -r '/etc/makepkg.conf' ]]; then | ||||
|     # shellcheck source=makepkg-x86_64.conf | ||||
|     source '/etc/makepkg.conf' | ||||
| else | ||||
|     die '/etc/makepkg.conf not found!' | ||||
| fi | ||||
|  | ||||
| # Source user-specific makepkg.conf overrides | ||||
| if [[ -r "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf" ]]; then | ||||
|     # shellcheck source=/dev/null | ||||
|     source "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf" | ||||
| elif [[ -r "$HOME/.makepkg.conf" ]]; then | ||||
|     # shellcheck source=/dev/null | ||||
|     source "$HOME/.makepkg.conf" | ||||
| fi | ||||
|  | ||||
| usage() { | ||||
|     cat <<- _EOF_ | ||||
|         Usage: ${BASH_SOURCE[0]##*/} [OPTIONS] | ||||
|  | ||||
|         Searches for a locally built package corresponding to the PKGBUILD, and | ||||
|         downloads the last version of that package from the Pacman repositories. | ||||
|         It then compares the list of .so files provided by each version of the | ||||
|         package and outputs if there are soname differences for the new package. | ||||
|         A directory is also created using mktemp with files containing a file | ||||
|         list for both packages and a library list for both packages. | ||||
|  | ||||
|         OPTIONS | ||||
|             -r, --rmdir     Remove the temporary directory | ||||
|             -w, --warn      Print a warning in case of differences | ||||
|             -h, --help      Show this help text | ||||
| _EOF_ | ||||
| } | ||||
|  | ||||
| RMDIR=0 | ||||
| WARN=0 | ||||
|  | ||||
| OPT_SHORT='rwh' | ||||
| OPT_LONG=('rmdir' 'warn' 'help') | ||||
| if ! parseopts "$OPT_SHORT" "${OPT_LONG[@]}" -- "$@"; then | ||||
|     exit 1 | ||||
| fi | ||||
| set  -- "${OPTRET[@]}" | ||||
|  | ||||
| while :; do | ||||
|     case $1 in | ||||
|         -r|--rmdir) | ||||
|             RMDIR=1 | ||||
|             ;; | ||||
|         -w|--warn) | ||||
|             WARN=1 | ||||
|             ;; | ||||
|         -h|--help) | ||||
|             usage | ||||
|             exit 0 | ||||
|             ;; | ||||
|         --) | ||||
|             shift; break | ||||
|             ;; | ||||
|     esac | ||||
|     shift | ||||
| done | ||||
|  | ||||
| if [[ ! -f PKGBUILD ]]; then | ||||
|     die 'This must be run in the directory of a built package.' | ||||
| fi | ||||
|  | ||||
| # shellcheck source=PKGBUILD.proto | ||||
| . ./PKGBUILD | ||||
| if [[ ${arch[0]} == 'any' ]]; then | ||||
|     CARCH='any' | ||||
| fi | ||||
|  | ||||
| STARTDIR=$(pwd) | ||||
| (( RMDIR )) && trap 'rm -rf $TEMPDIR' EXIT INT TERM QUIT | ||||
| TEMPDIR=$(mktemp -d --tmpdir checkpkg-script.XXXX) | ||||
|  | ||||
| for _pkgname in "${pkgname[@]}"; do | ||||
|     comparepkg=$_pkgname | ||||
|     pkgurl= | ||||
|     target_pkgver=$(get_full_version "$_pkgname") | ||||
|     if ! pkgfile=$(find_cached_package "$_pkgname" "$target_pkgver" "$CARCH"); then | ||||
|         die 'tarball not found for package: %s' "${_pkgname}-$target_pkgver" | ||||
|     fi | ||||
|  | ||||
|     ln -s "$pkgfile" "$TEMPDIR" | ||||
|  | ||||
|     if (( $# )); then | ||||
|         case $1 in | ||||
|             /*|*/*) | ||||
|                 pkgurl=file://$(readlink -m "$1") ;; | ||||
|             *.pkg.tar*) | ||||
|                 pkgurl=$1 ;; | ||||
|             '') | ||||
|                 ;; | ||||
|             *) | ||||
|                 comparepkg=$1 ;; | ||||
|         esac | ||||
|         shift | ||||
|     fi | ||||
|     [[ -n $pkgurl ]] || pkgurl=$(pacman -Spdd --print-format '%l' --noconfirm "$comparepkg") || | ||||
|         die "Couldn't download previous package for %s." "$comparepkg" | ||||
|  | ||||
|     oldpkg=${pkgurl##*/} | ||||
|  | ||||
|     if [[ ${oldpkg} = "${pkgfile##*/}" ]]; then | ||||
|         die "The built package (%s) is the one in the repo right now!" "$_pkgname" | ||||
|     fi | ||||
|  | ||||
|     if [[ $pkgurl = file://* || ( $pkgurl = /* && -f $pkgurl ) ]]; then | ||||
|         ln -s "${pkgurl#file://}" "$TEMPDIR/$oldpkg" | ||||
|     elif [[ -f "$PKGDEST/$oldpkg" ]]; then | ||||
|         ln -s "$PKGDEST/$oldpkg" "$TEMPDIR/$oldpkg" | ||||
|     elif [[ -f "$STARTDIR/$oldpkg" ]]; then | ||||
|         ln -s "$STARTDIR/$oldpkg" "$TEMPDIR/$oldpkg" | ||||
|     else | ||||
|         curl -fsLC - --retry 3 --retry-delay 3 -o "$TEMPDIR/$oldpkg" "$pkgurl" | ||||
|     fi | ||||
|  | ||||
|     bsdtar tf "$TEMPDIR/$oldpkg" | sort > "$TEMPDIR/filelist-$_pkgname-old" | ||||
|     bsdtar tf "$pkgfile" | sort > "$TEMPDIR/filelist-$_pkgname" | ||||
|  | ||||
|     sdiff -s "$TEMPDIR/filelist-$_pkgname-old" "$TEMPDIR/filelist-$_pkgname" | ||||
|  | ||||
|     find-libprovides "$TEMPDIR/$oldpkg" 2>/dev/null | sort > "$TEMPDIR/libraries-$_pkgname-old" | ||||
|     find-libprovides "$pkgfile" 2>/dev/null | sort > "$TEMPDIR/libraries-$_pkgname" | ||||
|     if ! diff_output="$(sdiff -s "$TEMPDIR/libraries-$_pkgname-old" "$TEMPDIR/libraries-$_pkgname")"; then | ||||
|         message="Sonames differ in $_pkgname!" | ||||
|         (( WARN )) && warning "$message" || msg "$message" | ||||
|         echo "$diff_output" | ||||
|     else | ||||
|         msg "No soname differences for %s." "$_pkgname" | ||||
|     fi | ||||
| done | ||||
|  | ||||
| (( RMDIR )) || msg "Files saved to %s" "$TEMPDIR" | ||||
| @@ -12,9 +12,24 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| . @libdir@/artools/util-base.sh | ||||
| . @libdir@/artools/util-pkg.sh | ||||
|  | ||||
| get_path(){ | ||||
|     local repo="$1" pkg=trunk/PKGBUILD | ||||
|     if [[ $repo != trunk ]]; then | ||||
|         [[ -f repos/$repo-${ARCH}/PKGBUILD ]] && pkg=repos/$repo-${ARCH}/PKGBUILD | ||||
|         [[ -f repos/$repo-any/PKGBUILD ]] && pkg=repos/$repo-any/PKGBUILD | ||||
|     fi | ||||
|     echo $pkg | ||||
| } | ||||
|  | ||||
| prepare_commit(){ | ||||
|     local dest="$1" | ||||
|     [[ -d repos/$dest ]] && git rm -r repos/$dest | ||||
|     [[ ! -d repos ]] && mkdir repos | ||||
|     [[ ! -d repos/$dest ]] && mkdir repos/$dest | ||||
| } | ||||
|  | ||||
| commit_pkg(){ | ||||
|     local git_tree=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}") | ||||
|     if [[ -n ${git_tree} ]];then | ||||
| @@ -25,9 +40,13 @@ commit_pkg(){ | ||||
|  | ||||
|         cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE} | ||||
|  | ||||
|         . trunk/PKGBUILD | ||||
|         local pkgbuild=$(get_path "${REPO_SRC}") | ||||
|  | ||||
|         . $pkgbuild | ||||
|         [[ $arch == 'any' ]] && CARCH=any | ||||
|         local ver=$(get_full_version "${PACKAGE}") | ||||
|  | ||||
|         local version=$(get_full_version) | ||||
|  | ||||
|         local commit_msg="" | ||||
|  | ||||
|         if ${remove};then | ||||
| @@ -36,14 +55,14 @@ commit_pkg(){ | ||||
|                 local pkg=${PACKAGE} | ||||
|                 git rm -r trunk | ||||
|             else | ||||
|                 local pkg="${PACKAGE}-$ver" | ||||
|                 local pkg="${PACKAGE}-$version" | ||||
|                 git rm -r repos/"${REPO_SRC}-$CARCH" | ||||
|             fi | ||||
|             commit_msg="[${REPO_SRC}] '$pkg' ${action}" | ||||
|             msg "Action: %s" "$commit_msg" | ||||
|         else | ||||
|             local action='modify' | ||||
|             commit_msg="[${REPO_SRC}] '${PACKAGE}-$ver' ${action}" | ||||
|             commit_msg="[${REPO_SRC}] '${PACKAGE}-$version' ${action}" | ||||
|             msg "Action: %s" "$commit_msg" | ||||
|             git add . | ||||
|  | ||||
| @@ -54,7 +73,7 @@ commit_pkg(){ | ||||
|  | ||||
|         ${push} && pull_tree "${git_tree}" "$head" | ||||
|  | ||||
|         subrepo_pull "${PACKAGE}" | ||||
| #         subrepo_pull "${PACKAGE}" | ||||
|         subrepo_push "${PACKAGE}" | ||||
|         subrepo_clean "${PACKAGE}" | ||||
|  | ||||
| @@ -76,17 +95,18 @@ symlink_commit_pkg(){ | ||||
|  | ||||
|         cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE} | ||||
|  | ||||
|         . trunk/PKGBUILD | ||||
|         local pkgbuild=$(get_path "${REPO_SRC}") | ||||
|  | ||||
|         . $pkgbuild | ||||
|         [[ $arch == 'any' ]] && CARCH=any | ||||
|         local ver=$(get_full_version "${PACKAGE}") | ||||
|  | ||||
|         local version=$(get_full_version) | ||||
|  | ||||
|         if [[ ${REPO_SRC} == 'trunk' ]];then | ||||
|             local action='add' | ||||
|             local dest="${REPO_DEST}-$CARCH" | ||||
|  | ||||
|             [[ -d repos/$dest ]] && git rm -r repos/$dest | ||||
|             [[ ! -d repos ]] && mkdir repos | ||||
|             [[ ! -d repos/$dest ]] && mkdir repos/$dest | ||||
|             prepare_commit "$dest" | ||||
|  | ||||
|             cp trunk/* repos/$dest/ | ||||
|         else | ||||
| @@ -94,14 +114,12 @@ symlink_commit_pkg(){ | ||||
|             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 ]] && mkdir repos | ||||
|             [[ ! -d repos/$dest ]] && mkdir repos/$dest | ||||
|             prepare_commit "$dest" | ||||
|  | ||||
|             cp repos/$src/* repos/$dest/ | ||||
|             git rm -r repos/$src | ||||
|         fi | ||||
|         local commit_msg="[${REPO_SRC}] -> [${REPO_DEST}] '${PACKAGE}-$ver' ${action}" | ||||
|         local commit_msg="[${REPO_SRC}] -> [${REPO_DEST}] '${PACKAGE}-$version' ${action}" | ||||
|         msg "Action: %s" "$commit_msg" | ||||
|  | ||||
|         git add . | ||||
| @@ -111,7 +129,7 @@ symlink_commit_pkg(){ | ||||
|  | ||||
|         ${push} && pull_tree "${git_tree}" "$head" | ||||
|  | ||||
|         subrepo_pull "${PACKAGE}" | ||||
| #         subrepo_pull "${PACKAGE}" | ||||
|         subrepo_push "${PACKAGE}" | ||||
|         subrepo_clean "${PACKAGE}" | ||||
|  | ||||
| @@ -123,10 +141,7 @@ symlink_commit_pkg(){ | ||||
|     fi | ||||
| } | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
| load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
| load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf" | ||||
| load_vars /etc/makepkg.conf | ||||
|  | ||||
| REPO_SRC='trunk' | ||||
|   | ||||
| @@ -12,20 +12,19 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| . @libdir@/artools/util-base.sh | ||||
| . @libdir@/artools/util-pkg.sh | ||||
|  | ||||
| compare(){ | ||||
|     local pkgpath="$1" | ||||
|     local pkgpath="$1" group="$2" | ||||
|     local pkg=${pkgpath##*/} | ||||
|     local artixrepo=$(find_repo "$package" "${staging}" "${unstable}") | ||||
|     local artixrepo=$(find_repo "$pkgpath" "${staging}" "${unstable}") | ||||
|     local artixshow=${artixrepo%-*} | ||||
|     local pkgbuild=$pkgpath/repos/$artixrepo/PKGBUILD | ||||
|  | ||||
|     if [[ -f $pkgbuild ]];then | ||||
|  | ||||
|         . $pkgbuild 2>/dev/null | ||||
|         local artixver=$(get_full_version $pkg) | ||||
|         local artixver=$(get_full_version) | ||||
|  | ||||
|         local archpath=$(get_import_path $pkg) | ||||
|  | ||||
| @@ -36,7 +35,7 @@ compare(){ | ||||
|  | ||||
|         if [[ -f $pkgbuild ]];then | ||||
|             . $pkgbuild 2>/dev/null | ||||
|             local archver=$(get_full_version $pkg) | ||||
|             local archver=$(get_full_version) | ||||
|         fi | ||||
|  | ||||
|         local result=$(vercmp "$artixver" "$archver") | ||||
| @@ -50,9 +49,13 @@ compare(){ | ||||
|                 case $artixrepo in | ||||
|                     *testing*|*staging*) | ||||
|                         if $repomatch;then | ||||
|                             msg_row "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                             msg_row "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}" | ||||
|                         else | ||||
|                             msg_row_notify "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                             msg_row_notify "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}" | ||||
|  | ||||
|                             if [[ -n "$archshow" ]]; then | ||||
|                                 printf "%s\n" "$archshow:$artixshow:$pkg" >> ${TREE_DIR_ARTIX}/pkg_moves.list | ||||
|                             fi | ||||
|                         fi | ||||
|                     ;; | ||||
|                 esac | ||||
| @@ -61,14 +64,16 @@ compare(){ | ||||
|         elif ${upgrades};then | ||||
|  | ||||
|             if [ $result -eq -1 ];then | ||||
|                 msg_row_upgrade "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                 msg_row_upgrade "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}" | ||||
|  | ||||
|                 printf "%s\n" "$archshow:$pkg" >> ${TREE_DIR_ARTIX}/pkg_upgrades.list | ||||
|             fi | ||||
|  | ||||
|         elif ${downgrades};then | ||||
|  | ||||
|             if [ $result -eq 1 ];then | ||||
|                 if [[ -n $archver ]] && [[ -n $archrepo ]];then | ||||
|                     msg_row_downgrade "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                     msg_row_downgrade "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}" | ||||
|                 fi | ||||
|             fi | ||||
|  | ||||
| @@ -80,7 +85,7 @@ compare(){ | ||||
|  | ||||
| is_db_entry() { | ||||
|     local pkgname="$1" repo="$(arch2artix $2)" | ||||
|     if [[ -d ${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/$repo/$pkgname ]];then | ||||
|     if [[ -d ${USER_CACHE_DIR}/${LINKSDBEXT}/${ARCH}/$repo/$pkgname ]];then | ||||
|         return 0 | ||||
|     fi | ||||
|     return 1 | ||||
| @@ -101,7 +106,7 @@ check_db(){ | ||||
|             if [[ -f $pkgbuild ]];then | ||||
|  | ||||
|                 . $pkgbuild 2>/dev/null | ||||
|                 local artixver=$(get_full_version $pkg) | ||||
|                 local artixver=$(get_full_version) | ||||
|                 local is_entry=false | ||||
|  | ||||
|                 for name in ${pkgname[@]};do | ||||
| @@ -110,7 +115,7 @@ check_db(){ | ||||
|                         is_entry=true | ||||
|                     fi | ||||
|                     if ! $is_entry; then | ||||
|                         msg_row "%-20s %-35s %-20s %-10s" "$repo" "$name" "$artixver" "$is_entry" | ||||
|                         msg_row "${tableU}" "$repo" "$name" "$artixver" "$is_entry" | ||||
|                     fi | ||||
|                 done | ||||
|                 unset artixver is_entry pkgbuild pkgver epoch pkgname pkgbase | ||||
| @@ -122,28 +127,27 @@ check_db(){ | ||||
| update_db_cache(){ | ||||
|     msg "Updating database cache" | ||||
|     for repo in "${searchrepos[@]}"; do | ||||
|         local cachedir=${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/${repo} | ||||
|         local cachedir=${USER_CACHE_DIR}/${LINKSDBEXT}/${ARCH}/${repo} | ||||
|         rm -rf "$cachedir" | ||||
|         mkdir -p "$cachedir" | ||||
|         msg2 "%s" "$repo" | ||||
|         curl -s "${REPOS_MIRROR}/${repo}/os/${ARCH}/${repo}.${LINKSDBEXT}" \ | ||||
|         curl -L -s "${REPOS_MIRROR}/${repo}/os/${ARCH}/${repo}.${LINKSDBEXT}" \ | ||||
|             | bsdtar -xf - -C "$cachedir" | ||||
|     done | ||||
|     msg "Done" | ||||
| } | ||||
|  | ||||
| query_db() { | ||||
|     msg_table_header "%-20s %-45s %s" "Repo" "Package" "Library" | ||||
|     for repo in "${searchrepos[@]}"; do | ||||
|         local prefix= | ||||
|         local db=${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/${repo}/ | ||||
|         local db=${USER_CACHE_DIR}/${LINKSDBEXT}/${ARCH}/${repo}/ | ||||
|         if [[ -d ${db} ]]; then | ||||
|             while read -rd '' pkg; do | ||||
|                 read -r match | ||||
|                 pkg=${pkg#${db}} | ||||
|                 pkg="${pkg%/*}" | ||||
|  | ||||
|                 msg_row "%-20s %-45s %s" "${repo}" "${pkg}" "${match}" | ||||
|                 msg_row "${tableQ}" "${repo}" "${pkg}" "${match}" | ||||
|             done < <(grep -rZ "${library}" "${db}") | sort -u | ||||
|         fi | ||||
|     done | ||||
| @@ -154,32 +158,34 @@ show_version_table(){ | ||||
|  | ||||
|     if ${check};then | ||||
|         ${sync} && update_db_cache | ||||
|         msg_table_header "%-20s %-35s %-20s %-10s" "Repo" "Package" "Version" "Database" | ||||
|         msg_table_header "${tableU}" "Repo" "Package" "Version" "Database" | ||||
|     elif ${query};then | ||||
|         ${sync} && update_db_cache | ||||
|         msg_table_header "${tableQ}" "Repo" "Package" "Library" | ||||
|         query_db | ||||
|     else | ||||
|         msg_table_header "%-20s %-20s %-25s %-30s %-30s" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version" | ||||
|         msg_table_header "${table}" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version" "Group" | ||||
|     fi | ||||
|  | ||||
|     if ${move} && [[ -f ${TREE_DIR_ARTIX}/pkg_moves.list ]]; then | ||||
|         rm ${TREE_DIR_ARTIX}/pkg_moves.list | ||||
|     elif ${upgrades} && [[ -f ${TREE_DIR_ARTIX}/pkg_upgrades.list ]]; then | ||||
|         rm ${TREE_DIR_ARTIX}/pkg_upgrades.list | ||||
|     fi | ||||
|  | ||||
|     for tree in ${TREE_NAMES_ARTIX[@]};do | ||||
|  | ||||
|         local git=$(find ${TREE_DIR_ARTIX}/$tree/ -mindepth 1 -maxdepth 1 -type d) | ||||
|  | ||||
|         for package in ${git[@]}; do | ||||
|             if ${check};then | ||||
|                 check_db "$package" | ||||
|             else | ||||
|                 compare "$package" | ||||
|                 compare "$package" "$tree" | ||||
|             fi | ||||
|         done | ||||
|     done | ||||
| } | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
| load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
| load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf" | ||||
| load_vars /etc/makepkg.conf | ||||
|  | ||||
| unstable=false | ||||
| @@ -198,6 +204,10 @@ artix_repos=( | ||||
|     'gnome-wobble' 'kde-wobble' | ||||
| ) | ||||
|  | ||||
| readonly table="%-18s %-18s %-25s %-27s %-27s %-10s" | ||||
| readonly tableU="%-20s %-35s %-30s %-10s" | ||||
| readonly tableQ="%-20s %-45s %s" | ||||
|  | ||||
| searchrepos=(${artix_repos[@]}) | ||||
|  | ||||
| usage() { | ||||
|   | ||||
| @@ -12,9 +12,80 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| . @libdir@/artools/util-base.sh | ||||
| . @libdir@/artools/util-pkg.sh | ||||
|  | ||||
| find_cached_pkgfile() { | ||||
|     local searchdirs=("$PKGDEST" "$PWD") results=() | ||||
|     local pkg="$1" | ||||
|     for dir in "${searchdirs[@]}"; do | ||||
|         [[ -d $dir ]] || continue | ||||
|         results+=$(find "$dir" -type f -name "$pkg") | ||||
|     done | ||||
|     case ${#results[*]} in | ||||
|         0) | ||||
|             return 1 | ||||
|         ;; | ||||
|         1) | ||||
|             printf '%s\n' "${results[0]}" | ||||
|             return 0 | ||||
|         ;; | ||||
|         *) | ||||
|             error 'Multiple packages found:' | ||||
|             printf '\t%s\n' "${results[@]}" >&2 | ||||
|             return 1 | ||||
|         ;; | ||||
|     esac | ||||
| } | ||||
|  | ||||
| get_pkgbasename(){ | ||||
|     local pkg="$1" | ||||
|     local pkgbasename name ver rel arch | ||||
|  | ||||
|     pkgbasename=${pkg%.pkg.tar.?z} | ||||
|     arch=${pkgbasename##*-} | ||||
|     pkgbasename=${pkgbasename%-"$arch"} | ||||
|  | ||||
|     rel=${pkgbasename##*-} | ||||
|     pkgbasename=${pkgbasename%-"$rel"} | ||||
|  | ||||
|     ver=${pkgbasename##*-} | ||||
|  | ||||
|     name=${pkgbasename%-"$ver"} | ||||
|     echo $name | ||||
| } | ||||
|  | ||||
| update_repo2(){ | ||||
|     local repo="$1" | ||||
|     local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=() | ||||
|  | ||||
|     for name in ${passfiles[@]}; do | ||||
|         if pkgfile=$(find_cached_pkgfile "$name");then | ||||
|             info "Found: %s" "$name" | ||||
|             if ${add_pkg};then | ||||
|                 local action='add' | ||||
|                 packages+=("$name") | ||||
|                 if ${sign_pkg};then | ||||
|                     [[ -e ${pkgfile}.sig ]] && rm ${pkgfile}.sig | ||||
|                     signfile ${pkgfile} | ||||
|                 fi | ||||
|                 ln -sf ${pkgfile}{,.sig} $repo_path/ | ||||
|             elif ${del_pkg};then | ||||
|                 local action='remove' | ||||
|                 packages+=("$(get_pkgbasename "$name")") | ||||
|                 [[ -e $repo_path/$name ]] && rm $repo_path/$name | ||||
|                 [[ -e $repo_path/$name.sig ]] && rm $repo_path/$name.sig | ||||
|             fi | ||||
|         fi | ||||
|     done | ||||
|     cd $repo_path | ||||
|     if [[ -n $action ]]; then | ||||
|         repo-$action -R $repo.${PKGDBEXT} ${packages[@]} | ||||
|         ${linksdb} && links-$action $repo.${LINKSDBEXT} ${packages[@]} | ||||
|     fi | ||||
|  | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| update_repo(){ | ||||
|     local repo="$1" pkgfile ver | ||||
|     local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=() | ||||
| @@ -29,14 +100,13 @@ update_repo(){ | ||||
|  | ||||
|     for name in ${pkgsearch[@]}; do | ||||
|         pkgarch=$(get_pkg_arch "$name") | ||||
|         ver=$(get_full_version "$name") | ||||
|         ver=$(get_full_version) | ||||
|         if pkgfile=$(find_cached_package "$name" "$ver" "$pkgarch");then | ||||
|             local pkg=${pkgfile##*/} | ||||
|             info "Found: %s" "$pkg" | ||||
|             if ${add_pkg};then | ||||
|                 local action='add' | ||||
|                 packages+=("$pkg") | ||||
| #                 checkpkg "${pkgfile}" || return 2 | ||||
|                 if ${sign_pkg};then | ||||
|                     [[ -e ${pkgfile}.sig ]] && rm ${pkgfile}.sig | ||||
|                     signfile ${pkgfile} | ||||
| @@ -59,10 +129,7 @@ update_repo(){ | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
| load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
| load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf" | ||||
| load_vars /etc/makepkg.conf | ||||
|  | ||||
| add_pkg=false | ||||
| @@ -100,6 +167,12 @@ done | ||||
|  | ||||
| shift $(($OPTIND - 1)) | ||||
|  | ||||
| passfiles="$@" | ||||
|  | ||||
| prepare_dir "${REPOS_ROOT}" | ||||
|  | ||||
| update_repo "${dest_repo}" | ||||
| if [[ -n ${passfiles[@]} ]]; then | ||||
|     update_repo2 "${dest_repo}" | ||||
| else | ||||
|     update_repo "${dest_repo}" | ||||
| fi | ||||
|   | ||||
							
								
								
									
										100
									
								
								bin/pkg/find-libdeps.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								bin/pkg/find-libdeps.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,100 @@ | ||||
| #!/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. | ||||
|  | ||||
| . @libdir@/artools/util-base.sh | ||||
| . @libdir@/artools/util-pkg.sh | ||||
|  | ||||
| set -e | ||||
| shopt -s extglob | ||||
|  | ||||
| IGNORE_INTERNAL=0 | ||||
|  | ||||
| if [[ $1 = "--ignore-internal" ]]; then | ||||
|     IGNORE_INTERNAL=1 | ||||
|     shift | ||||
| fi | ||||
|  | ||||
| script_mode=${BASH_SOURCE[0]##*/find-lib} | ||||
|  | ||||
| case $script_mode in | ||||
|     deps|provides) true;; | ||||
|     *) die "Unknown mode %s" "$script_mode" ;; | ||||
| esac | ||||
|  | ||||
| if [[ -z $1 ]]; then | ||||
|     echo "${0##*/} [options] <package file|extracted package dir>" | ||||
|     echo "Options:" | ||||
|     echo "    --ignore-internal      ignore internal libraries" | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| if [[ -d $1 ]]; then | ||||
|     pushd "$1" >/dev/null | ||||
| else | ||||
|     setup_workdir | ||||
|  | ||||
|     case ${script_mode} in | ||||
|         deps) bsdtar -C "$WORKDIR" -xf "$1";; | ||||
|         provides) bsdtar -C "$WORKDIR" -xf "$1" --include="*.so*";; | ||||
|     esac | ||||
|  | ||||
|     pushd "$WORKDIR" >/dev/null | ||||
| fi | ||||
|  | ||||
| process_sofile() { | ||||
|     # extract the library name: libfoo.so | ||||
|     soname="${sofile%.so?(+(.+([0-9])))}".so | ||||
|     # extract the major version: 1 | ||||
|     soversion="${sofile##*\.so\.}" | ||||
|     if [[ "$soversion" = "$sofile" ]] && ((IGNORE_INTERNAL)); then | ||||
|         return | ||||
|     fi | ||||
|     if ! in_array "${soname}=${soversion}-${soarch}" "${soobjects[@]}"; then | ||||
|         # libfoo.so=1-64 | ||||
|         echo "${soname}=${soversion}-${soarch}" | ||||
|         soobjects+=("${soname}=${soversion}-${soarch}") | ||||
|     fi | ||||
| } | ||||
|  | ||||
| case $script_mode in | ||||
|     deps) find_args=(-perm -u+x);; | ||||
|     provides) find_args=(-name '*.so*');; | ||||
| esac | ||||
|  | ||||
| find . -type f "${find_args[@]}" | while read -r filename; do | ||||
|     if [[ $script_mode = "provides" ]]; then | ||||
|         # ignore if we don't have a shared object | ||||
|         if ! LC_ALL=C readelf -h "$filename" 2>/dev/null | grep -q '.*Type:.*DYN (Shared object file).*'; then | ||||
|             continue | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
|     # get architecture of the file; if soarch is empty it's not an ELF binary | ||||
|     soarch=$(LC_ALL=C readelf -h "$filename" 2>/dev/null | sed -n 's/.*Class.*ELF\(32\|64\)/\1/p') | ||||
|     [[ -n $soarch ]] || continue | ||||
|  | ||||
|     if [[ $script_mode = "provides" ]]; then | ||||
|         # get the string binaries link to: libfoo.so.1.2 -> libfoo.so.1 | ||||
|         sofile=$(LC_ALL=C readelf -d "$filename" 2>/dev/null | sed -n 's/.*Library soname: \[\(.*\)\].*/\1/p') | ||||
|         [[ -z $sofile ]] && sofile="${filename##*/}" | ||||
|         process_sofile | ||||
|     elif [[ $script_mode = "deps" ]]; then | ||||
|         # process all libraries needed by the binary | ||||
|         for sofile in $(LC_ALL=C readelf -d "$filename" 2>/dev/null | sed -nr 's/.*Shared library: \[(.*)\].*/\1/p'); do | ||||
|             process_sofile | ||||
|         done | ||||
|     fi | ||||
| done | ||||
|  | ||||
| popd >/dev/null | ||||
							
								
								
									
										50
									
								
								bin/pkg/finddeps.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								bin/pkg/finddeps.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | ||||
| #!/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. | ||||
|  | ||||
| . @libdir@/artools/util-base.sh | ||||
|  | ||||
| match=$1 | ||||
|  | ||||
| if [[ -z $match ]]; then | ||||
|     echo 'Usage: finddeps <depname>' | ||||
|     echo '' | ||||
|     echo 'Find packages that depend on a given depname.' | ||||
|     echo 'Run this script from the top-level directory of your ABS tree.' | ||||
|     echo '' | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| find . -type d -print0 2>/dev/null| while read -r -d '' d; do | ||||
|     if [[ -f "$d/PKGBUILD" ]]; then | ||||
|         pkgname=() depends=() makedepends=() optdepends=() | ||||
|         # shellcheck source=PKGBUILD.proto | ||||
|         . "$d/PKGBUILD" | ||||
|         for dep in "${depends[@]}"; do | ||||
|             # lose the version comparator, if any | ||||
|             depname=${dep%%[<>=]*} | ||||
|             [[ $depname = "$match" ]] && msg "$d (depends)" | ||||
|         done | ||||
|         for dep in "${makedepends[@]}"; do | ||||
|             # lose the version comparator, if any | ||||
|             depname=${dep%%[<>=]*} | ||||
|             [[ $depname = "$match" ]] && msg "$d (makedepends)" | ||||
|         done | ||||
|         for dep in "${optdepends[@]/:*}"; do | ||||
|             # lose the version comaparator, if any | ||||
|             depname=${dep%%[<>=]*} | ||||
|             [[ $depname = "$match" ]] && msg "$d (optdepends)" | ||||
|         done | ||||
|     fi | ||||
| done | ||||
|  | ||||
| @@ -33,6 +33,7 @@ REPO_DB_PREFIX= | ||||
| REPO_DB_SUFFIX= | ||||
| LOCKFILE= | ||||
| CLEAN_LOCK=0 | ||||
| # PREVENT_DOWNGRADE=0 | ||||
|  | ||||
| . @libdir@/artools/util-base.sh | ||||
|  | ||||
| @@ -52,6 +53,7 @@ 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" | ||||
| #         printf -- "$(gettext "  -p, --prevent-downgrade  do not add package to database if a newer version is already present\n")" | ||||
|     elif [[ $cmd == "links-remove" ]] ; then | ||||
|         printf -- "Usage: links-remove [options] <path-to-db> <packagename> ...\n" | ||||
|         printf -- "\n" | ||||
| @@ -199,6 +201,18 @@ db_write_entry() { | ||||
|         if (( ONLYADDNEW )); then | ||||
|             return 0 | ||||
|         fi | ||||
| #     else | ||||
| #         pkgentry=$(find_pkgentry "$pkgname") | ||||
| #         if [[ -n $pkgentry ]]; then | ||||
| # | ||||
| #             local version=$(sed -n '/^%VERSION%$/ {n;p;q}' "$pkgentry/desc") | ||||
| #             if (( $(vercmp "$version" "$pkgver") > 0 )); then | ||||
| #                 warning "$(gettext "A newer version for '%s' is already present in database")" "$pkgname" | ||||
| #                 if (( PREVENT_DOWNGRADE )); then | ||||
| #                     return 0 | ||||
| #                 fi | ||||
| #             fi | ||||
| #         fi | ||||
|     fi | ||||
|  | ||||
|     # remove an existing entry if it exists, ignore failures | ||||
| @@ -459,6 +473,7 @@ while (( $# )); do | ||||
|         -s|--sign) SIGN=1 ;; | ||||
|         -k|--key) KEY=1 ; shift; GPGKEY=$1 ;; | ||||
|         -v|--verify) VERIFY=1 ;; | ||||
| #         -p|--prevent-downgrade) PREVENT_DOWNGRADE=1 ;; | ||||
|         *) args+=("$1") ;; | ||||
|     esac | ||||
|     shift | ||||
|   | ||||
| @@ -16,6 +16,31 @@ | ||||
|  | ||||
| shopt -s nullglob | ||||
|  | ||||
| default_makepkg_args=(--syncdeps --noconfirm --log --holdver --skipinteg) | ||||
| makepkg_args=("${default_makepkg_args[@]}") | ||||
| verifysource_args=() | ||||
| chrootdir= | ||||
| passeddir= | ||||
| makepkg_user= | ||||
| declare -a install_pkgs | ||||
| declare -i ret=0 | ||||
|  | ||||
| keepbuilddir=0 | ||||
| update_first=0 | ||||
| clean_first=0 | ||||
| run_namcap=0 | ||||
| run_checkpkg=0 | ||||
| temp_chroot=0 | ||||
| run_nocheck=0 | ||||
|  | ||||
| bindmounts_ro=() | ||||
| bindmounts_rw=() | ||||
|  | ||||
| copy=$USER | ||||
| [[ -n ${SUDO_USER:-} ]] && copy=$SUDO_USER | ||||
| [[ -z "$copy" || $copy = root ]] && copy=copy | ||||
| src_owner=${SUDO_USER:-$USER} | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options] -r <chrootdir> [--] [makepkg args]" | ||||
|     echo ' Run this script in a PKGBUILD dir to build a package inside a' | ||||
| @@ -50,6 +75,8 @@ usage() { | ||||
|     echo '           Useful for maintaining multiple copies' | ||||
|     echo "           Default: $copy" | ||||
|     echo '-n         Run namcap on the package' | ||||
|     echo '-C         Run checkpkg on the package' | ||||
|     echo '-N         Disable check() function' | ||||
|     echo '-T         Build in a temporary directory' | ||||
|     echo '-U         Run makepkg as a specified user' | ||||
|     exit 1 | ||||
| @@ -57,37 +84,31 @@ usage() { | ||||
|  | ||||
| # {{{ functions | ||||
|  | ||||
| # Usage: sync_chroot $rootdir $copydir [$copy] | ||||
| # Usage: sync_chroot $chrootdir $copydir [$copy] | ||||
| sync_chroot() { | ||||
|     local rootdir=$1 | ||||
|     local chrootdir=$1 | ||||
|     local copydir=$2 | ||||
|     local copy=${3:-$2} | ||||
|  | ||||
|     if [[ "$rootdir" -ef "$copydir" ]]; then | ||||
|     if [[ "$chrootdir/root" -ef "$copydir" ]]; then | ||||
|         error 'Cannot sync copy with itself: %s' "$copydir" | ||||
|         return 1 | ||||
|     fi | ||||
|  | ||||
|     # Get a read lock on the root chroot to make | ||||
|     # sure we don't clone a half-updated chroot | ||||
|     slock 8 "$rootdir.lock" \ | ||||
|         "Locking clean chroot [%s]" "$rootdir" | ||||
|     slock 8 "$chrootdir/root.lock" \ | ||||
|         "Locking clean chroot [%s]" "$chrootdir/root" | ||||
|  | ||||
|     stat_busy "Synchronizing chroot copy [%s] -> [%s]" "$rootdir" "$copy" | ||||
|     if is_subvolume "$rootdir" && is_same_fs "$rootdir" "$(dirname -- "$copydir")" && ! mountpoint -q "$copydir"; then | ||||
|         if is_subvolume "$copydir"; then | ||||
|             subvolume_delete_recursive "$copydir" || | ||||
|                 die "Unable to delete subvolume %s" "$copydir" | ||||
|         else | ||||
|             # avoid change of filesystem in case of an umount failure | ||||
|             rm --recursive --force --one-file-system "$copydir" || | ||||
|                 die "Unable to delete %s" "$copydir" | ||||
|         fi | ||||
|         btrfs subvolume snapshot "$rootdir" "$copydir" >/dev/null || | ||||
|     stat_busy "Synchronizing chroot copy [%s] -> [%s]" "$chrootdir/root" "$copy" | ||||
|     if is_btrfs "$chrootdir" && ! mountpoint -q "$copydir"; then | ||||
|         subvolume_delete_recursive "$copydir" || | ||||
|             die "Unable to delete subvolume %s" "$copydir" | ||||
|         btrfs subvolume snapshot "$chrootdir/root" "$copydir" >/dev/null || | ||||
|             die "Unable to create subvolume %s" "$copydir" | ||||
|     else | ||||
|         mkdir -p "$copydir" | ||||
|         rsync -a --delete -q -W -x "$rootdir/" "$copydir" | ||||
|         rsync -a --delete -q -W -x "$chrootdir/root/" "$copydir" | ||||
|     fi | ||||
|     stat_done | ||||
|  | ||||
| @@ -118,11 +139,7 @@ delete_chroot() { | ||||
|     stat_done | ||||
| } | ||||
|  | ||||
| # Usage: install_packages $copydir $pkgs... | ||||
| install_packages() { | ||||
|     local copydir=$1 | ||||
|     local install_pkgs=("${@:2}") | ||||
|  | ||||
|     local -a pkgnames | ||||
|     local ret | ||||
|  | ||||
| @@ -133,28 +150,19 @@ install_packages() { | ||||
|         -r "${bindmounts_ro[@]}" \ | ||||
|         -r "${bindmounts_rw[@]}" \ | ||||
|         "$copydir" \ | ||||
|         pacman -U --noconfirm -- "${pkgnames[@]/#//root/}" | ||||
|         bash -c 'yes y | pacman -U -- "$@"' -bash "${pkgnames[@]/#//root/}" | ||||
|     ret=$? | ||||
|     rm -- "${pkgnames[@]/#/$copydir/root/}" | ||||
|  | ||||
|     return $ret | ||||
| } | ||||
|  | ||||
| # Usage: prepare_chroot $copydir $HOME $keepbuilddir $run_namcap | ||||
| # Globals: | ||||
| #  - MAKEFLAGS | ||||
| #  - PACKAGER | ||||
| prepare_chroot() { | ||||
|     local copydir=$1 | ||||
|     local USER_HOME=$2 | ||||
|     local keepbuilddir=$3 | ||||
|     local run_namcap=$4 | ||||
|  | ||||
|     [[ $keepbuilddir = true ]] || rm -rf "$copydir/build" | ||||
|     (( keepbuilddir )) || rm -rf "$copydir/build" | ||||
|  | ||||
|     local builduser_uid builduser_gid | ||||
|     builduser_uid="${SUDO_UID:-$UID}" | ||||
|     builduser_gid="$(id -g "$builduser_uid")" | ||||
|     builduser_uid="$(id -u "$makepkg_user")" | ||||
|     builduser_gid="$(id -g "$makepkg_user")" | ||||
|     local install="install -o $builduser_uid -g $builduser_gid" | ||||
|     local x | ||||
|  | ||||
| @@ -189,7 +197,7 @@ EOF | ||||
|         declare -p SOURCE_DATE_EPOCH 2>/dev/null || true | ||||
|         printf '_chrootbuild "$@" || exit\n' | ||||
|  | ||||
|         if [[ $run_namcap = true ]]; then | ||||
|         if (( run_namcap )); then | ||||
|             declare -f _chrootnamcap | ||||
|             printf '_chrootnamcap || exit\n' | ||||
|         fi | ||||
| @@ -230,39 +238,18 @@ _chrootnamcap() { | ||||
|     done | ||||
| } | ||||
|  | ||||
| # Usage: download_sources $copydir $makepkg_user | ||||
| # Globals: | ||||
| #  - SRCDEST | ||||
| download_sources() { | ||||
|     local copydir=$1 | ||||
|     local makepkg_user=$2 | ||||
|  | ||||
| #     local builddir | ||||
| #     builddir="$(mktemp -d)" | ||||
| #     chown "$makepkg_user:" "$builddir" | ||||
|  | ||||
|     setup_workdir | ||||
|     chown "$makepkg_user:" "$WORKDIR" | ||||
|  | ||||
|     # Ensure sources are downloaded | ||||
|     sudo -u "$makepkg_user" --preserve-env=GNUPGHOME \ | ||||
|         env SRCDEST="$SRCDEST" BUILDDIR="$WORKDIR" \ | ||||
|         makepkg --config="$copydir/etc/makepkg.conf" --verifysource -o || | ||||
|         makepkg --config="$copydir/etc/makepkg.conf" --verifysource -o "${verifysource_args[@]}" || | ||||
|         die "Could not download sources." | ||||
|  | ||||
|     # Clean up garbage from verifysource | ||||
| #     rm -rf "$builddir" | ||||
| } | ||||
|  | ||||
| # Usage: move_products $copydir $owner | ||||
| # Globals: | ||||
| #  - PKGDEST | ||||
| #  - LOGDEST | ||||
| #  - SRCPKGDEST | ||||
| move_products() { | ||||
|     local copydir=$1 | ||||
|     local src_owner=$2 | ||||
|  | ||||
|     local pkgfile | ||||
|     for pkgfile in "$copydir"/pkgdest/*; do | ||||
|         chown "$src_owner" "$pkgfile" | ||||
| @@ -295,142 +282,138 @@ move_products() { | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| main() { | ||||
|     default_makepkg_args=(--syncdeps --noconfirm --log --holdver --skipinteg) | ||||
|     makepkg_args=("${default_makepkg_args[@]}") | ||||
|     keepbuilddir=false | ||||
|     update_first=false | ||||
|     clean_first=false | ||||
|     run_namcap=false | ||||
|     temp_chroot=false | ||||
|     chrootdir= | ||||
|     passeddir= | ||||
|     makepkg_user= | ||||
|     declare -a install_pkgs | ||||
|     declare -i ret=0 | ||||
| opts='hcur:I:l:nNCTD:d:U:' | ||||
|  | ||||
|     bindmounts_ro=() | ||||
|     bindmounts_rw=() | ||||
| while getopts "${opts}" arg; do | ||||
|     case "$arg" in | ||||
|         c) clean_first=1 ;; | ||||
|         D) bindmounts_ro+=("$OPTARG") ;; | ||||
|         d) bindmounts_rw+=("$OPTARG") ;; | ||||
|         u) update_first=1 ;; | ||||
|         r) passeddir="$OPTARG" ;; | ||||
|         I) install_pkgs+=("$OPTARG") ;; | ||||
|         l) copy="$OPTARG" ;; | ||||
|         n) run_namcap=1; makepkg_args+=(--install) ;; | ||||
|         N) run_nocheck=1; makepkg_args+=(--nocheck) ;; | ||||
|         C) run_checkpkg=1 ;; | ||||
|         T) temp_chroot=1; copy+="-$$" ;; | ||||
|         U) makepkg_user="$OPTARG" ;; | ||||
|         h|*) usage ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
|     copy=$USER | ||||
|     [[ -n ${SUDO_USER:-} ]] && copy=$SUDO_USER | ||||
|     [[ -z "$copy" || $copy = root ]] && copy=copy | ||||
|     src_owner=${SUDO_USER:-$USER} | ||||
| [[ ! -f PKGBUILD && -z "${install_pkgs[*]}" ]] && die 'This must be run in a directory containing a PKGBUILD.' | ||||
| [[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.' | ||||
| makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}} | ||||
|  | ||||
|     local opts='hcur:I:l:nTD:d:U:' | ||||
| check_root SOURCE_DATE_EPOCH,GNUPGHOME,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER | ||||
|  | ||||
|     while getopts "${opts}" arg; do | ||||
|         case "$arg" in | ||||
|             c) clean_first=true ;; | ||||
|             D) bindmounts_ro+=("$OPTARG") ;; | ||||
|             d) bindmounts_rw+=("$OPTARG") ;; | ||||
|             u) update_first=true ;; | ||||
|             r) passeddir="$OPTARG" ;; | ||||
|             I) install_pkgs+=("$OPTARG") ;; | ||||
|             l) copy="$OPTARG" ;; | ||||
|             n) run_namcap=true; makepkg_args+=(--install) ;; | ||||
|             T) temp_chroot=true; copy+="-$$" ;; | ||||
|             U) makepkg_user="$OPTARG" ;; | ||||
|             h|*) usage ;; | ||||
|         esac | ||||
|     done | ||||
| # Canonicalize chrootdir, getting rid of trailing / | ||||
| chrootdir=$(readlink -e "$passeddir") | ||||
| [[ ! -d $chrootdir ]] && die "No chroot dir defined, or invalid path '%s'" "$passeddir" | ||||
| [[ ! -d $chrootdir/root ]] && die "Missing chroot dir root directory. Try using: mkchroot %s/root base-devel" "$chrootdir" | ||||
|  | ||||
|     [[ ! -f PKGBUILD && -z "${install_pkgs[*]}" ]] && die 'This must be run in a directory containing a PKGBUILD.' | ||||
|     [[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.' | ||||
|     makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}} | ||||
| if [[ ${copy:0:1} = / ]]; then | ||||
|     copydir=$copy | ||||
| else | ||||
|     copydir="$chrootdir/$copy" | ||||
| fi | ||||
|  | ||||
|     check_root SOURCE_DATE_EPOCH,GNUPGHOME,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER | ||||
| # Pass all arguments after -- right to makepkg | ||||
| makepkg_args+=("${@:$OPTIND}") | ||||
|  | ||||
|     # Canonicalize chrootdir, getting rid of trailing / | ||||
|     chrootdir=$(readlink -e "$passeddir") | ||||
|     [[ ! -d $chrootdir ]] && die "No chroot dir defined, or invalid path '%s'" "$passeddir" | ||||
|     [[ ! -d $chrootdir/root ]] && die "Missing chroot dir root directory. Try using: mkchroot %s/root base-devel" "$chrootdir" | ||||
| # See if -R or -e was passed to makepkg | ||||
| for arg in "${@:$OPTIND}"; do | ||||
|     case ${arg%%=*} in | ||||
|         --skip*|--holdver) verifysource_args+=("$arg") ;; | ||||
|         --repackage|--noextract) keepbuilddir=1 ;; | ||||
|         --*) ;; | ||||
|         -*R*|-*e*) keepbuilddir=1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
|     if [[ ${copy:0:1} = / ]]; then | ||||
|         copydir=$copy | ||||
|     else | ||||
|         copydir="$chrootdir/$copy" | ||||
|     fi | ||||
| if [[ -n $SUDO_USER ]]; then | ||||
| 	eval "USER_HOME=~$SUDO_USER" | ||||
| else | ||||
| 	USER_HOME=$HOME | ||||
| fi | ||||
|  | ||||
|     # Pass all arguments after -- right to makepkg | ||||
|     makepkg_args+=("${@:$OPTIND}") | ||||
| umask 0022 | ||||
|  | ||||
|     # See if -R or -e was passed to makepkg | ||||
|     for arg in "${makepkg_args[@]}"; do | ||||
|         case ${arg%%=*} in | ||||
|             --repackage|--noextract) keepbuilddir=true; break ;; | ||||
|             --repackage|--noextract) keepbuilddir=true; break ;; | ||||
|             --*) ;; | ||||
|             -*R*|-*e*) keepbuilddir=true; break ;; | ||||
|         esac | ||||
|     done | ||||
| load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf" | ||||
| load_vars /etc/makepkg.conf | ||||
|  | ||||
|     load_user_info | ||||
| # Use PKGBUILD directory if these don't exist | ||||
| [[ -d $PKGDEST ]]    || PKGDEST=$PWD | ||||
| [[ -d $SRCDEST ]]    || SRCDEST=$PWD | ||||
| [[ -d $SRCPKGDEST ]] || SRCPKGDEST=$PWD | ||||
| [[ -d $LOGDEST ]]    || LOGDEST=$PWD | ||||
|  | ||||
|     umask 0022 | ||||
| # Lock the chroot we want to use. We'll keep this lock until we exit. | ||||
| lock 9 "$copydir.lock" "Locking chroot copy [%s]" "$copy" | ||||
|  | ||||
|     load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
|     load_vars /etc/makepkg.conf | ||||
| if [[ ! -d $copydir ]] || (( clean_first )); then | ||||
|     sync_chroot "$chrootdir" "$copydir" "$copy" | ||||
| fi | ||||
|  | ||||
|     # Use PKGBUILD directory if these don't exist | ||||
|     [[ -d $PKGDEST ]]    || PKGDEST=$PWD | ||||
|     [[ -d $SRCDEST ]]    || SRCDEST=$PWD | ||||
|     [[ -d $SRCPKGDEST ]] || SRCPKGDEST=$PWD | ||||
|     [[ -d $LOGDEST ]]    || LOGDEST=$PWD | ||||
| bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest") | ||||
|  | ||||
|     # Lock the chroot we want to use. We'll keep this lock until we exit. | ||||
|     lock 9 "$copydir.lock" "Locking chroot copy [%s]" "$copy" | ||||
|  | ||||
|     if [[ ! -d $copydir ]] || $clean_first; then | ||||
|         sync_chroot "$chrootdir/root" "$copydir" "$copy" | ||||
|     fi | ||||
|  | ||||
|     bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest") | ||||
|  | ||||
|     $update_first && chroot-run \ | ||||
|             -r "${bindmounts_ro[*]}" \ | ||||
|             -w "${bindmounts_rw[*]}" \ | ||||
|             "$copydir" \ | ||||
|             pacman -Syu --noconfirm | ||||
|  | ||||
|     if [[ -n ${install_pkgs[*]:-} ]]; then | ||||
|         install_packages "$copydir" "${install_pkgs[@]}" | ||||
|         ret=$? | ||||
|         # If there is no PKGBUILD we have done | ||||
|         [[ -f PKGBUILD ]] || return $ret | ||||
|     fi | ||||
|  | ||||
|     if [[ "$(id -u "$makepkg_user")" == 0 ]]; then | ||||
|         error "Running makepkg as root is not allowed." | ||||
|         exit 1 | ||||
|     fi | ||||
|  | ||||
|     download_sources "$copydir" "$makepkg_user" | ||||
|  | ||||
|     prepare_chroot "$copydir" "$USER_HOME" "$keepbuilddir" "$run_namcap" | ||||
|  | ||||
|     if chroot-run \ | ||||
| (( update_first )) && chroot-run \ | ||||
|         -r "${bindmounts_ro[*]}" \ | ||||
|         -w "${bindmounts_rw[*]}" \ | ||||
|         "$copydir" \ | ||||
|         /chrootbuild "${makepkg_args[@]}" | ||||
|     then | ||||
|         move_products "$copydir" "$src_owner" | ||||
|         pacman -Syuu --noconfirm | ||||
|  | ||||
| if [[ -n ${install_pkgs[*]:-} ]]; then | ||||
|     install_packages | ||||
|     ret=$? | ||||
|     # If there is no PKGBUILD we are done | ||||
|     [[ -f PKGBUILD ]] || exit $ret | ||||
| fi | ||||
|  | ||||
| if [[ "$(id -u "$makepkg_user")" == 0 ]]; then | ||||
|     error "Running makepkg as root is not allowed." | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| download_sources | ||||
|  | ||||
| prepare_chroot | ||||
|  | ||||
| if chroot-run \ | ||||
|     -r "${bindmounts_ro[*]}" \ | ||||
|     -w "${bindmounts_rw[*]}" \ | ||||
|     "$copydir" \ | ||||
|     /chrootbuild "${makepkg_args[@]}" | ||||
| then | ||||
|     pkgnames=() | ||||
|     for pkgfile in "$copydir"/pkgdest/*; do | ||||
|         pkgfile=${pkgfile##*/}; | ||||
|         pkgnames+=("${pkgfile%-*-*-*}"); | ||||
|     done | ||||
|     move_products | ||||
| else | ||||
|     (( ret += 1 )) | ||||
| fi | ||||
|  | ||||
| (( temp_chroot )) && delete_chroot "$copydir" "$copy" | ||||
|  | ||||
| if (( ret != 0 )); then | ||||
|     if (( temp_chroot )); then | ||||
|         die "Build failed" | ||||
|     else | ||||
|         (( ret += 1 )) | ||||
|         die "Build failed, check %s/build" "$copydir" | ||||
|     fi | ||||
|  | ||||
|     $temp_chroot && delete_chroot "$copydir" "$copy" | ||||
|  | ||||
|     if (( ret != 0 )); then | ||||
|         if $temp_chroot; then | ||||
|             die "Build failed" | ||||
| else | ||||
|     if (( run_checkpkg )); then | ||||
|         msg "Running checkpkg" | ||||
|         msg2 "Downloading current versions" | ||||
|         if pacman --noconfirm -Swdd --logfile /dev/null "${pkgnames[@]}"; then | ||||
|             msg2 "Checking packages" | ||||
|             sudo -u "$makepkg_user" checkpkg --rmdir --warn | ||||
|         else | ||||
|             die "Build failed, check %s/build" "$copydir" | ||||
|             warning "Skipped checkpkg due to missing packages" | ||||
|         fi | ||||
|     else | ||||
|         true | ||||
|     fi | ||||
| } | ||||
|  | ||||
| main "$@" | ||||
|     true | ||||
| fi | ||||
|   | ||||
| @@ -1,67 +0,0 @@ | ||||
| ############################################# | ||||
| ################ artools-base ############### | ||||
| ############################################# | ||||
|  | ||||
| # build dir where buildpkg or buildiso chroots are created | ||||
| # CHROOTS_DIR=/var/lib/artools | ||||
|  | ||||
| # the workspace directory | ||||
| # WORKSPACE_DIR="/home/${OWNER}/artools-workspace" | ||||
|  | ||||
| ############################################# | ||||
| ################ artools-pkg ################ | ||||
| ############################################# | ||||
|  | ||||
| # gitea user access token | ||||
| # GIT_TOKEN='' | ||||
|  | ||||
| # HOST_TREE_ARTIX='gitea@gitea.artixlinux.org:artix' | ||||
|  | ||||
| # 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 | ||||
| # REPOS_ROOT=${WORKSPACE_DIR}/repos | ||||
|  | ||||
| # default mirror for sogrep | ||||
| # REPOS_MIRROR="http://mirror1.artixlinux.org/repos" | ||||
|  | ||||
| ############################################# | ||||
| ################ artools-iso ################ | ||||
| ############################################# | ||||
|  | ||||
| # the iso storage directory | ||||
| # ISO_POOL="${WORKSPACE_DIR}/iso" | ||||
|  | ||||
| # the dist release; default: auto | ||||
| # ISO_VERSION=$(date +%Y%m%d) | ||||
|  | ||||
| # possible values: openrc, runit (s6 not yet supported) | ||||
| # INITSYS="openrc" | ||||
|  | ||||
| # gpg key; leave empty or commented to skip sfs signing | ||||
| # GPG_KEY="" | ||||
|  | ||||
| # set upload bandwidth limit in kB/s | ||||
| # UPLIMIT=1000 | ||||
|  | ||||
| # the server user | ||||
| # ACCOUNT=[SetUser] | ||||
							
								
								
									
										9
									
								
								data/conf/artools-base.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								data/conf/artools-base.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| ############################################# | ||||
| ################ artools-base ############### | ||||
| ############################################# | ||||
|  | ||||
| # build dir where buildpkg or buildiso chroots are created | ||||
| # CHROOTS_DIR=/var/lib/artools | ||||
|  | ||||
| # the workspace directory | ||||
| # WORKSPACE_DIR="/home/${OWNER}/artools-workspace" | ||||
							
								
								
									
										21
									
								
								data/conf/artools-iso.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								data/conf/artools-iso.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| ############################################# | ||||
| ################ artools-iso ################ | ||||
| ############################################# | ||||
|  | ||||
| # the iso storage directory | ||||
| # ISO_POOL="${WORKSPACE_DIR}/iso" | ||||
|  | ||||
| # the dist release; default: auto | ||||
| # ISO_VERSION=$(date +%Y%m%d) | ||||
|  | ||||
| # possible values: openrc, runit, s6 | ||||
| # INITSYS="openrc" | ||||
|  | ||||
| # gpg key; leave empty or commented to skip sfs signing | ||||
| # GPG_KEY="" | ||||
|  | ||||
| # set upload bandwidth limit in kB/s | ||||
| # UPLIMIT=1000 | ||||
|  | ||||
| # the server user | ||||
| # ACCOUNT=[SetUser] | ||||
							
								
								
									
										45
									
								
								data/conf/artools-pkg.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								data/conf/artools-pkg.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| ############################################# | ||||
| ################ artools-pkg ################ | ||||
| ############################################# | ||||
|  | ||||
| # gitea user access token | ||||
| # GIT_TOKEN='' | ||||
|  | ||||
| # HOST_TREE_ARTIX='gitea@gitea.artixlinux.org:artixlinux' | ||||
|  | ||||
| # TREE_DIR_ARTIX=${WORKSPACE_DIR}/artixlinux | ||||
|  | ||||
| # customize buildtree, packages and community should be enabled | ||||
| # TREE_NAMES_ARTIX=( | ||||
| #         packages | ||||
| #         community | ||||
| #         packages-kernel | ||||
| #         packages-openrc | ||||
| #         packages-runit | ||||
| #         packages-s6 | ||||
| #         packages-media | ||||
| #         packages-xorg | ||||
| #         packages-python | ||||
| #         packages-perl | ||||
| #         packages-java | ||||
| #         packages-qt5 | ||||
| #         packages-devel | ||||
| #         packages-ruby | ||||
| #         packages-gtk | ||||
| #         packages-gnome | ||||
| #         packages-cinnamon | ||||
| #         packages-lxqt | ||||
| #         packages-mate | ||||
| #         packages-kde | ||||
| #         packages-xfce | ||||
| # ) | ||||
|  | ||||
| # HOST_TREE_ARCH=git://git.archlinux.org/svntogit | ||||
|  | ||||
| # TREE_DIR_ARCH=${WORKSPACE_DIR}/archlinux | ||||
|  | ||||
| # default repos root | ||||
| # REPOS_ROOT=${WORKSPACE_DIR}/repos | ||||
|  | ||||
| # default mirror for sogrep | ||||
| # REPOS_MIRROR="http://mirror1.artixlinux.org/repos" | ||||
| @@ -1,63 +0,0 @@ | ||||
| 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 | ||||
| @@ -1,63 +0,0 @@ | ||||
| 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 | ||||
| @@ -1,4 +0,0 @@ | ||||
| phonon-gstreamer | ||||
| polkit-qt | ||||
| extra-cmake-modules | ||||
| phonon | ||||
| @@ -1,17 +0,0 @@ | ||||
| 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 | ||||
| @@ -1,31 +0,0 @@ | ||||
| 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 | ||||
| @@ -1,37 +0,0 @@ | ||||
| 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 | ||||
| @@ -162,7 +162,7 @@ artix_mount_handler() { | ||||
|     fi | ||||
|  | ||||
|     if [[ "${checksum}" == "y" ]]; then | ||||
|         for fs in rootfs desktopfs livefs;do | ||||
|         for fs in rootfs livefs;do | ||||
|             if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sfs" ]]; then | ||||
|                 if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sha512" ]]; then | ||||
|                     msg -n ":: Self-test requested, please wait..." | ||||
| @@ -182,7 +182,7 @@ artix_mount_handler() { | ||||
|     fi | ||||
|  | ||||
|     if [[ "${verify}" == "y" ]]; then | ||||
|         for fs in rootfs desktopfs livefs;do | ||||
|         for fs in rootfs livefs;do | ||||
|             if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sfs" ]]; then | ||||
|                 if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sfs.sig" ]]; then | ||||
|                     msg -n ":: Signature verification requested, please wait..." | ||||
| @@ -225,7 +225,7 @@ artix_mount_handler() { | ||||
|     local dest_sfs="/run/artix/sfs" dest_img="/run/artix/img" | ||||
|     local lower_dir | ||||
|  | ||||
|     for sfs in livefs desktopfs rootfs;do | ||||
|     for sfs in livefs rootfs;do | ||||
|         if [[ -f "${src}/${sfs}.sfs" ]]; then | ||||
|             _mnt_sfs "${src}/${sfs}.sfs" "${dest_sfs}/${sfs}" | ||||
|             if [[ -f "${dest_sfs}/${sfs}/${sfs}.img" ]]; then | ||||
|   | ||||
| @@ -40,7 +40,7 @@ artix_pxe_http_mount_handler () { | ||||
|  | ||||
|     local _src=${artix_http_srv}${artixbasedir}/${arch} | ||||
|  | ||||
|     for sfs in livefs desktopfs rootfs;do | ||||
|     for sfs in livefs rootfs;do | ||||
|         if [[ ! -z "$( curl -s --head "${_src}/${sfs}.sfs" | grep "OK" )" ]]; then | ||||
|             _curl_get "${_src}/${sfs}.sfs" "/${arch}" | ||||
|  | ||||
|   | ||||
							
								
								
									
										135
									
								
								lib/base/util.sh
									
									
									
									
									
								
							
							
						
						
									
										135
									
								
								lib/base/util.sh
									
									
									
									
									
								
							| @@ -31,7 +31,7 @@ load_vars() { | ||||
|     [[ -f $1 ]] || return 1 | ||||
|  | ||||
|     for var in {SRC,SRCPKG,PKG,LOG}DEST MAKEFLAGS PACKAGER CARCH GPGKEY; do | ||||
|         [[ -z ${!var:-} ]] && eval "$(grep -a "^${var}=" "$1")" | ||||
|         [[ -z ${!var:-} ]] && eval "$(source "$1"; printf "%s='%s'" "$var" "${!var}")" | ||||
|     done | ||||
|  | ||||
|     return 0 | ||||
| @@ -41,144 +41,11 @@ prepare_dir(){ | ||||
|     [[ ! -d $1 ]] && mkdir -p $1 | ||||
| } | ||||
|  | ||||
| get_disturl(){ | ||||
|     . /usr/lib/os-release | ||||
|     echo "${HOME_URL}" | ||||
| } | ||||
|  | ||||
| get_osname(){ | ||||
|     . /usr/lib/os-release | ||||
|     echo "${NAME}" | ||||
| } | ||||
|  | ||||
| init_artools_base(){ | ||||
|  | ||||
|     ARCH=$(uname -m) | ||||
|  | ||||
|     CHROOTS_DIR=${CHROOTS_DIR:-'/var/lib/artools'} | ||||
|  | ||||
|     WORKSPACE_DIR=${WORKSPACE_DIR:-"/home/${OWNER}/artools-workspace"} | ||||
|  | ||||
|     prepare_dir "${WORKSPACE_DIR}" | ||||
| } | ||||
|  | ||||
| init_artools_pkg(){ | ||||
|  | ||||
|     DOMAIN='artixlinux.org' | ||||
|  | ||||
|     GIT_DOMAIN="gitea.${DOMAIN}" | ||||
|  | ||||
|     GIT_URL="https://${GIT_DOMAIN}" | ||||
|  | ||||
|     GIT_TOKEN=${GIT_TOKEN:-''} | ||||
|  | ||||
|     TREE_DIR_ARTIX=${TREE_DIR_ARTIX:-"${WORKSPACE_DIR}/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 | ||||
|     ) | ||||
|  | ||||
|     HOST_TREE_ARTIX=${HOST_TREE_ARTIX:-"gitea@${GIT_DOMAIN}:artixlinux"} | ||||
|  | ||||
|     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" | ||||
|  | ||||
|     REPOS_ROOT=${REPOS_ROOT:-"${WORKSPACE_DIR}/repos"} | ||||
|  | ||||
|     REPOS_MIRROR=${REPOS_MIRROR:-'http://mirror1.artixlinux.org/repos'} | ||||
|  | ||||
|     DBEXT=${DBEXT:-'xz'} | ||||
|  | ||||
|     LINKSDBEXT=${LINKSDBEXT:-"links.tar.${DBEXT}"} | ||||
|  | ||||
|     PKGDBEXT=${PKGDBEXT:-"db.tar.${DBEXT}"} | ||||
| } | ||||
|  | ||||
| init_artools_iso(){ | ||||
|     CHROOTS_ISO="${CHROOTS_DIR}/buildiso" | ||||
|  | ||||
|     ISO_POOL=${ISO_POOL:-"${WORKSPACE_DIR}/iso"} | ||||
|  | ||||
|     prepare_dir "${ISO_POOL}" | ||||
|  | ||||
|     PROFILE='base' | ||||
|  | ||||
|     ISO_VERSION=${ISO_VERSION:-"$(date +%Y%m%d)"} | ||||
|  | ||||
|     INITSYS=${INITSYS:-'openrc'} | ||||
|  | ||||
|     GPG_KEY=${GPG_KEY:-''} | ||||
|  | ||||
|     UPLIMIT=${UPLIMIT:-1000} | ||||
|  | ||||
|     FILE_HOST="download.${DOMAIN}" | ||||
|  | ||||
|     FILE_HOME=${FILE_HOME:-'/srv/iso'} | ||||
|  | ||||
|     FILE_PORT=${FILE_PORT:-65432} | ||||
|  | ||||
|     ACCOUNT=${ACCOUNT:-'naughtyISOuploader'} | ||||
| } | ||||
|  | ||||
| load_config(){ | ||||
|  | ||||
|     local conf="$1" | ||||
|  | ||||
|     [[ -f "$conf" ]] || return 1 | ||||
|  | ||||
|     [[ -r "$conf" ]] && . "$conf" | ||||
|  | ||||
|     init_artools_base | ||||
|  | ||||
|     init_artools_pkg | ||||
|  | ||||
|     init_artools_iso | ||||
|  | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| user_own(){ | ||||
|     local flag=$2 | ||||
|     chown ${flag} "${OWNER}:$(id --group ${OWNER})" "$1" | ||||
| } | ||||
|  | ||||
| user_run(){ | ||||
|     su ${OWNER} -c "$@" | ||||
| } | ||||
|  | ||||
| load_user_info(){ | ||||
|     OWNER=${SUDO_USER:-$USER} | ||||
|  | ||||
|     if [[ -n $SUDO_USER ]]; then | ||||
|         eval "USER_HOME=~$SUDO_USER" | ||||
|     else | ||||
|         USER_HOME=$HOME | ||||
|     fi | ||||
|  | ||||
|     USERCONFDIR="${XDG_CONFIG_HOME:-$USER_HOME/.config}" | ||||
|     prepare_dir "${USERCONFDIR}" | ||||
|  | ||||
|     USERCACHEDIR="${XDG_CACHE_HOME:-$USER_HOME/.cache}/artools" | ||||
| } | ||||
|  | ||||
| # orig_argv=("$0" "$@") | ||||
| check_root() { | ||||
|     local keepenv=$1 | ||||
|   | ||||
| @@ -12,20 +12,36 @@ | ||||
| # 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_openrc(){ | ||||
|     local mnt="$1" names="$2" rlvl="${3:-default}" | ||||
|     for svc in $names; do | ||||
|         if [[ -f $mnt/etc/init.d/$svc ]];then | ||||
|             msg2 "Setting %s ..." "$svc" | ||||
|             [[ $svc == "xdm" ]] && set_xdm "$mnt" | ||||
|             chroot $mnt rc-update add $svc $rlvl &>/dev/null | ||||
|         fi | ||||
|     done | ||||
| } | ||||
|  | ||||
| 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 | ||||
|     local mnt="$1" names="$2" rlvl="${3:-default}" | ||||
|     for svc in $names; do | ||||
|         if [[ -d $mnt/etc/runit/sv/$svc ]]; then | ||||
|             msg2 "Setting %s ..." "$svc" | ||||
|             chroot $mnt ln -s /etc/runit/sv/$svc /etc/runit/runsvdir/$rlvl &>/dev/null | ||||
|         fi | ||||
|     done | ||||
| } | ||||
|  | ||||
| add_svc_s6(){ | ||||
|     local mnt="$1" names="$2" valid="" rlvl="${3:-default}" | ||||
|     for svc in $names; do | ||||
|         if [[ -d $mnt/etc/s6/sv/$svc ]]; then | ||||
|             msg2 "Setting %s ..." "$svc" | ||||
|             valid=${valid:-}${valid:+' '}${svc} | ||||
|         fi | ||||
|     done | ||||
|     chroot $mnt s6-rc-bundle -c /etc/s6/rc/compiled add $rlvl $valid | ||||
| } | ||||
|  | ||||
| set_xdm(){ | ||||
| @@ -51,42 +67,19 @@ configure_logind(){ | ||||
|  | ||||
| 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}" | ||||
|     info "Configuring [%s] services" "${INITSYS}" | ||||
|     add_svc_${INITSYS} "$mnt" "${SERVICES[*]} ${SERVICES_LIVE[*]}" | ||||
|     info "Done configuring [%s] services" "${INITSYS}" | ||||
| } | ||||
|  | ||||
| configure_system(){ | ||||
|     local mnt="$1" | ||||
|     case ${INITSYS} in | ||||
|         'openrc' | 'runit') | ||||
|             configure_logind "$mnt" "elogind" | ||||
|         ;; | ||||
|     esac | ||||
|     configure_logind "$mnt" "elogind" | ||||
|     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 | ||||
| @@ -108,41 +101,40 @@ write_users_conf(){ | ||||
|     printf '%s' "${yaml}" | ||||
| } | ||||
|  | ||||
| write_servicescfg_conf(){ | ||||
| write_services_conf(){ | ||||
|     local key1="$1" val1="$2" key2="$3" val2="$4" | ||||
|     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_yaml_map 0 "$key1" "$val1") | ||||
|     yaml+=$(write_yaml_map 0 "$key2" "$val2") | ||||
|     yaml+=$(write_yaml_map 0 'services') | ||||
|     for svc in ${SERVICES[@]};do | ||||
|         yaml+=$(write_yaml_seq 2 "$svc") | ||||
|     done | ||||
|     yaml+=$(write_empty_line) | ||||
|     printf '%s' "${yaml}" | ||||
| } | ||||
|  | ||||
| write_unpackfs_conf(){ | ||||
| write_services_openrc_conf(){ | ||||
|     local conf="$1"/services-openrc.conf | ||||
|     write_services_conf 'initdDir' '/etc/init.d' 'runlevelsDir' '/etc/runlevels' > "$conf" | ||||
| } | ||||
|  | ||||
| write_services_runit_conf(){ | ||||
|     local conf="$1"/services-runit.conf | ||||
|     write_services_conf 'svDir' '/etc/runit/sv' 'runsvDir' '/etc/runit/runsvdir' > "$conf" | ||||
| } | ||||
|  | ||||
| write_services_s6_conf(){ | ||||
|     local conf="$1"/services-s6.conf | ||||
|     write_services_conf 'svDir' '/etc/s6/sv' 'dbDir' '/etc/s6/rc/compiled' > "$conf" | ||||
| } | ||||
|  | ||||
| write_postcfg(){ | ||||
|     local yaml=$(write_yaml_header) | ||||
|     yaml+=$(write_empty_line) | ||||
|     yaml+=$(write_yaml_map 0 'unpack') | ||||
|     yaml+=$(write_yaml_seq_map 2 'source' "/run/artix/bootmnt/artix/x86_64/rootfs.sfs") | ||||
|     yaml+=$(write_yaml_map 4 'sourcefs' 'squashfs') | ||||
|     yaml+=$(write_yaml_map 4 'destination' '') | ||||
|     yaml+=$(write_yaml_map 0 'keyrings') | ||||
|     for k in archlinux artix;do | ||||
|         yaml+=$(write_yaml_seq 2 "$k") | ||||
|     done | ||||
|     yaml+=$(write_empty_line) | ||||
|     printf '%s' "${yaml}" | ||||
| } | ||||
| @@ -152,21 +144,22 @@ configure_calamares(){ | ||||
|     if [[ -d "$mods" ]];then | ||||
|         msg2 "Configuring Calamares" | ||||
|         write_users_conf > "$mods"/users.conf | ||||
|         write_servicescfg_conf > "$mods"/services-"${INITSYS}".conf | ||||
|         [[ -z ${DESKTOP_LIST} ]] && write_unpackfs_conf > "$mods"/unpackfs.conf | ||||
|         sed -e "s|openrc|${INITSYS}|" -i "$mods"/postcfg.conf | ||||
|         sed -e "s|services-openrc|services-${INITSYS}|" -i "$1"/etc/calamares/settings.conf | ||||
|         write_services_"${INITSYS}"_conf "$mods" | ||||
|         write_postcfg > "$mods"/postcfg.conf | ||||
|         sed -e "s|services-openrc|services-${INITSYS}|" \ | ||||
|             -i "$1"/etc/calamares/settings.conf | ||||
|     fi | ||||
| } | ||||
|  | ||||
| configure_live_image(){ | ||||
| configure_image(){ | ||||
|     local fs="$1" | ||||
|     msg "Configuring [livefs]" | ||||
|     msg "Configuring [%s]" "${fs##*/}" | ||||
|     configure_hosts "$fs" | ||||
|     configure_system "$fs" | ||||
|     configure_services "$fs" | ||||
|     configure_calamares "$fs" | ||||
|     [[ ! -d "$fs/etc/artools" ]] && mkdir -p "$fs/etc/artools" | ||||
|     msg2 "Writing live.conf" | ||||
|     write_live_session_conf > "$fs/etc/artools/live.conf" | ||||
|     msg "Done configuring [livefs]" | ||||
|     msg "Done configuring [%s]" "${fs##*/}" | ||||
| } | ||||
|   | ||||
| @@ -29,11 +29,11 @@ prepare_initramfs(){ | ||||
|     fi | ||||
|  | ||||
|     if [[ -n ${GPG_KEY} ]]; then | ||||
|         user_run "gpg --export ${GPG_KEY} >${USERCONFDIR}/artools/gpgkey" | ||||
|         exec 17<>${USERCONFDIR}/artools/GPG_KEY | ||||
|         su ${OWNER} -c "gpg --export ${GPG_KEY} >/tmp/GPG_KEY" | ||||
|         exec 17<>/tmp/GPG_KEY | ||||
|     fi | ||||
|     local _kernel=$(cat $mnt/usr/lib/modules/*/version) | ||||
|     ARTIX_GNUPG_FD=${GPG_KEY:+17} chroot-run $mnt \ | ||||
|     local _kernel=$(<$mnt/usr/src/linux/version) | ||||
|     ARTIX_GNUPG_FD=${GPG_KEY:+17} artools-chroot $mnt \ | ||||
|         /usr/bin/mkinitcpio -k ${_kernel} \ | ||||
|         -c /etc/mkinitcpio-artix.conf \ | ||||
|         -g /boot/initramfs.img | ||||
| @@ -41,8 +41,8 @@ prepare_initramfs(){ | ||||
|     if [[ -n ${GPG_KEY} ]]; then | ||||
|         exec 17<&- | ||||
|     fi | ||||
|     if [[ -f ${USERCONFDIR}/artools/GPG_KEY ]]; then | ||||
|         rm ${USERCONFDIR}/artools/GPG_KEY | ||||
|     if [[ -f /tmp/GPG_KEY ]]; then | ||||
|         rm /tmp/GPG_KEY | ||||
|     fi | ||||
| } | ||||
|  | ||||
| @@ -59,13 +59,13 @@ prepare_boot_extras(){ | ||||
| } | ||||
|  | ||||
| configure_grub(){ | ||||
|     local conf="$1/boot/grub/kernels.cfg" | ||||
|     sed -e "s|@iso_label@|${iso_label}|" -i $conf | ||||
|     sed -e "s|@iso_label@|${iso_label}|" -i ${iso_root}/boot/grub/kernels.cfg | ||||
| } | ||||
|  | ||||
| prepare_grub(){ | ||||
|     local platform=i386-pc img='core.img' grub=$3/boot/grub efi=$3/efi/boot \ | ||||
|         lib=$1/usr/lib/grub prefix=/boot/grub theme=$2/usr/share/grub | ||||
|     local platform=i386-pc img='core.img' prefix=/boot/grub | ||||
|     local lib=$1/usr/lib/grub theme=$2/usr/share/grub | ||||
|     local grub=${iso_root}/boot/grub efi=${iso_root}/efi/boot | ||||
|  | ||||
|     prepare_dir ${grub}/${platform} | ||||
|  | ||||
| @@ -103,7 +103,7 @@ prepare_grub(){ | ||||
|         grub-mkfont -o ${grub}/unicode.pf2 /usr/share/fonts/misc/unifont.bdf | ||||
|     fi | ||||
|  | ||||
|     local size=4M mnt="${mnt_dir}/efiboot" efi_img="$3/efi.img" | ||||
|     local size=4M mnt="${mnt_dir}/efiboot" efi_img="${iso_root}/efi.img" | ||||
|     msg2 "Creating fat image of %s ..." "${size}" | ||||
|     truncate -s ${size} "${efi_img}" | ||||
|     mkfs.fat -n ARTIX_EFI "${efi_img}" &>/dev/null | ||||
|   | ||||
| @@ -12,33 +12,12 @@ | ||||
| # 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 "${OWNER}:$(id --group ${OWNER})" "$idir" | ||||
|     su ${OWNER} -c "gpg --detach-sign --default-key ${GPG_KEY} $file.sfs" | ||||
|     chown -R root "$idir" | ||||
|     cd ${OLDPWD} | ||||
| } | ||||
| @@ -118,16 +97,23 @@ make_sfs() { | ||||
|     show_elapsed_time "${FUNCNAME}" "${timer_start}" | ||||
| } | ||||
|  | ||||
| get_disturl(){ | ||||
|     . /usr/lib/os-release | ||||
|     echo "${HOME_URL}" | ||||
| } | ||||
|  | ||||
| assemble_iso(){ | ||||
|     msg "Creating ISO image..." | ||||
|     local mod_date=$(date -u +%Y-%m-%d-%H-%M-%S-00  | sed -e s/-//g) | ||||
|     local appid="$(get_osname) Live/Rescue CD" | ||||
|     local publisher="$(get_osname) <$(get_disturl)>" | ||||
|  | ||||
|     xorriso -as mkisofs \ | ||||
|         --modification-date=${mod_date} \ | ||||
|         --protective-msdos-label \ | ||||
|         -volid "${iso_label}" \ | ||||
|         -appid "$(get_osname) Live/Rescue CD" \ | ||||
|         -publisher "$(get_osname) <$(get_disturl)>" \ | ||||
|         -appid "${appid}" \ | ||||
|         -publisher "${publisher}" \ | ||||
|         -preparer "Prepared by artools/${0##*/}" \ | ||||
|         -r -graft-points -no-pad \ | ||||
|         --sort-weight 0 / \ | ||||
|   | ||||
| @@ -39,20 +39,14 @@ track_fs() { | ||||
|  | ||||
| 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" | ||||
|     local lower= upper="$1" work="$2" | ||||
|     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" | ||||
|     case $upper in | ||||
|         */livefs) lower="$work/rootfs" ;; | ||||
|         */bootfs) | ||||
|             lower="$work/rootfs" | ||||
|             [[ -d "$work/livefs" ]] && lower="$work/livefs":"$work/rootfs" | ||||
|         ;; | ||||
|     esac | ||||
|     track_fs -t overlay overlay -olowerdir="$lower",upperdir="$upper",workdir="${mnt_dir}/work" "$upper" | ||||
|   | ||||
| @@ -12,24 +12,6 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| init_profile(){ | ||||
|     local profdir="$1" prof="$2" | ||||
|  | ||||
|     ROOT_LIST="$profdir/base/Packages-Root" | ||||
|     ROOT_OVERLAY="$profdir/base/root-overlay" | ||||
|     LIVE_LIST="$profdir/base/Packages-Live" | ||||
|     LIVE_OVERLAY="$profdir/base/live-overlay" | ||||
|  | ||||
|     [[ -f "$profdir/$prof/Packages-Root" ]] && ROOT_LIST="$profdir/$prof/Packages-Root" | ||||
|     [[ -d "$profdir/$prof/root-overlay" ]] && ROOT_OVERLAY="$profdir/$prof/root-overlay" | ||||
|  | ||||
|     [[ -f "$profdir/$prof/Packages-Desktop" ]] && DESKTOP_LIST="$profdir/$prof/Packages-Desktop" | ||||
|     [[ -d "$profdir/$prof/desktop-overlay" ]] && DESKTOP_OVERLAY="$profdir/$prof/desktop-overlay" | ||||
|  | ||||
|     [[ -f "$profdir/$prof/Packages-Live" ]] && LIVE_LIST="$profdir/$prof/Packages-Live" | ||||
|     [[ -d "$profdir/$prof/live-overlay" ]] && LIVE_OVERLAY="$profdir/$prof/live-overlay" | ||||
| } | ||||
|  | ||||
| show_profile(){ | ||||
|     msg2 "iso_file: %s" "${iso_file}" | ||||
|     msg2 "AUTOLOGIN: %s" "${AUTOLOGIN}" | ||||
| @@ -42,15 +24,18 @@ show_profile(){ | ||||
| } | ||||
|  | ||||
| load_profile(){ | ||||
|     local prof="$1" | ||||
|     local profdir="${DATADIR}/iso-profiles" | ||||
|     [[ -d ${WORKSPACE_DIR}/iso-profiles ]] && profdir=${WORKSPACE_DIR}/iso-profiles | ||||
|     local profile_dir="${DATADIR}/iso-profiles" | ||||
|     [[ -d ${WORKSPACE_DIR}/iso-profiles ]] && profile_dir=${WORKSPACE_DIR}/iso-profiles | ||||
|  | ||||
|     init_profile "$profdir" "$prof" | ||||
|     ROOT_LIST="$profile_dir/${PROFILE}/Packages-Root" | ||||
|     ROOT_OVERLAY="$profile_dir/${PROFILE}/root-overlay" | ||||
|  | ||||
|     [[ -f $profdir/$prof/profile.conf ]] || return 1 | ||||
|     [[ -f "$profile_dir/${PROFILE}/Packages-Live" ]] && LIVE_LIST="$profile_dir/${PROFILE}/Packages-Live" | ||||
|     [[ -d "$profile_dir/${PROFILE}/live-overlay" ]] && LIVE_OVERLAY="$profile_dir/${PROFILE}/live-overlay" | ||||
|  | ||||
|     [[ -r $profdir/$prof/profile.conf ]] && . $profdir/$prof/profile.conf | ||||
|     [[ -f $profile_dir/${PROFILE}/profile.conf ]] || return 1 | ||||
|  | ||||
|     [[ -r $profile_dir/${PROFILE}/profile.conf ]] && . $profile_dir/${PROFILE}/profile.conf | ||||
|  | ||||
|     DISPLAYMANAGER=${DISPLAYMANAGER:-'none'} | ||||
|  | ||||
| @@ -66,25 +51,22 @@ load_profile(){ | ||||
|     ADDGROUPS=${ADDGROUPS:-"video,power,optical,network,lp,scanner,wheel,users,log"} | ||||
|  | ||||
|     if [[ -z ${SERVICES[@]} ]];then | ||||
|         SERVICES=('acpid' 'bluetooth' 'cronie' 'cupsd' 'syslog-ng' 'NetworkManager') | ||||
|         SERVICES=('acpid' 'bluetoothd' 'cronie' 'cupsd' 'syslog-ng' 'connmand') | ||||
|     fi | ||||
|  | ||||
|     if [[ ${DISPLAYMANAGER} != "none" ]];then | ||||
|         case "${INITSYS}" in | ||||
|             'openrc') SERVICES+=('xdm') ;; | ||||
|             'runit') SERVICES+=("${DISPLAYMANAGER}") ;; | ||||
|             'runit'|'s6') SERVICES+=("${DISPLAYMANAGER}") ;; | ||||
|         esac | ||||
|     fi | ||||
|  | ||||
|     if [[ -z ${SERVICES_LIVE[@]} ]];then | ||||
|         SERVICES_LIVE=('artix-live' 'pacman-init') | ||||
|     fi | ||||
|     SERVICES_LIVE=('artix-live' 'pacman-init') | ||||
|  | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| write_live_session_conf(){ | ||||
|     msg2 "Writing live.conf" | ||||
|     local conf='' | ||||
|     conf+=$(printf '%s\n' '# live session configuration') | ||||
|     conf+=$(printf "\nAUTOLOGIN=%s\n" "${AUTOLOGIN}") | ||||
| @@ -100,7 +82,7 @@ load_pkgs(){ | ||||
|  | ||||
|     local _init="s|@$init||g" | ||||
|     case "$init" in | ||||
|         'openrc') _init_rm1="s|@runit.*||g"; _init_rm2="s|@s6*||g" ;; | ||||
|         'openrc') _init_rm1="s|@runit.*||g"; _init_rm2="s|@s6.*||g" ;; | ||||
|         's6') _init_rm1="s|@runit.*||g"; _init_rm2="s|@openrc.*||g" ;; | ||||
|         'runit') _init_rm1="s|@s6.*||g"; _init_rm2="s|@openrc.*||g" ;; | ||||
|     esac | ||||
|   | ||||
| @@ -13,9 +13,6 @@ | ||||
| # 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 | ||||
| @@ -27,20 +24,6 @@ error_function() { | ||||
|     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 | ||||
| @@ -48,11 +31,7 @@ run_safe() { | ||||
|     restoretrap=$(trap -p ERR) | ||||
|     trap 'error_function $func' ERR | ||||
|  | ||||
|     if ${log};then | ||||
|         run_log "$func" | ||||
|     else | ||||
|         "$func" | ||||
|     fi | ||||
|     "$func" | ||||
|  | ||||
|     eval $restoretrap | ||||
|     set +E | ||||
| @@ -96,12 +75,6 @@ make_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 | ||||
| @@ -114,10 +87,6 @@ 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 | ||||
| @@ -142,11 +111,6 @@ clean_up_image(){ | ||||
|     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 | ||||
| @@ -163,36 +127,20 @@ make_rootfs() { | ||||
|  | ||||
|         prepare_dir "${rootfs}" | ||||
|  | ||||
|         install_packages "${rootfs}" | ||||
|         basestrap "${basestrap_args[@]}" "${rootfs}" "${packages[@]}" | ||||
|  | ||||
|         copy_overlay "${ROOT_OVERLAY}" "${rootfs}" | ||||
|  | ||||
|         [[ -z ${LIVE_LIST} ]] && configure_image "${rootfs}" | ||||
|  | ||||
|         clean_up_image "${rootfs}" | ||||
|  | ||||
|         : > ${work_dir}/rootfs.lock | ||||
|  | ||||
|         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)" | ||||
| @@ -200,18 +148,20 @@ make_livefs() { | ||||
|  | ||||
|         prepare_dir "${livefs}" | ||||
|  | ||||
|         mount_overlay "${livefs}" "${work_dir}" "${DESKTOP_LIST}" | ||||
|         mount_overlay "${livefs}" "${work_dir}" | ||||
|  | ||||
|         install_packages "${livefs}" | ||||
|         basestrap "${basestrap_args[@]}" "${livefs}" "${packages[@]}" | ||||
|  | ||||
|         copy_overlay "${LIVE_OVERLAY}" "${livefs}" | ||||
|  | ||||
|         configure_live_image "${livefs}" | ||||
|         configure_image "${livefs}" | ||||
|  | ||||
|         umount_overlay | ||||
|  | ||||
|         clean_up_image "${livefs}" | ||||
|  | ||||
|         : > ${work_dir}/livefs.lock | ||||
|  | ||||
|         msg "Done [Live installation] (livefs)" | ||||
|     fi | ||||
| } | ||||
| @@ -227,7 +177,7 @@ make_bootfs() { | ||||
|  | ||||
|         local bootfs="${work_dir}/bootfs" | ||||
|  | ||||
|         mount_overlay "${bootfs}" "${work_dir}" "${DESKTOP_LIST}" | ||||
|         mount_overlay "${bootfs}" "${work_dir}" | ||||
|  | ||||
|         prepare_initcpio "${bootfs}" | ||||
|         prepare_initramfs "${bootfs}" | ||||
| @@ -247,9 +197,12 @@ make_grub(){ | ||||
|     if [[ ! -e ${work_dir}/grub.lock ]]; then | ||||
|         msg "Prepare [/iso/boot/grub]" | ||||
|  | ||||
|         prepare_grub "${work_dir}/rootfs" "${work_dir}/livefs" "${iso_root}" | ||||
|         local layer=${work_dir}/rootfs | ||||
|         [[ -n ${LIVE_LIST} ]] && layer=${work_dir}/livefs | ||||
|  | ||||
|         configure_grub "${iso_root}" | ||||
|         prepare_grub "${work_dir}/rootfs" "$layer" | ||||
|  | ||||
|         configure_grub | ||||
|  | ||||
|         : > ${work_dir}/grub.lock | ||||
|         msg "Done [/iso/boot/grub]" | ||||
| @@ -259,7 +212,7 @@ make_grub(){ | ||||
| compress_images(){ | ||||
|     local timer=$(get_timer) | ||||
|     run_safe "make_iso" | ||||
|     user_own "${iso_dir}" "-R" | ||||
|     chown -R "${OWNER}:$(id --group ${OWNER})" "${iso_dir}" | ||||
|     show_elapsed_time "${FUNCNAME}" "${timer}" | ||||
| } | ||||
|  | ||||
| @@ -267,11 +220,7 @@ 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 | ||||
|     if [[ -n ${LIVE_LIST} ]]; then | ||||
|         load_pkgs "${LIVE_LIST}" "${INITSYS}" | ||||
|         run_safe "make_livefs" | ||||
|     fi | ||||
|   | ||||
| @@ -54,9 +54,10 @@ load_team_id(){ | ||||
| add_repo_to_team(){ | ||||
|     local pkg="$1" org="$2" team="$3" | ||||
|     local id=$(load_team_id "$org" "$team") | ||||
|     local gitname=$(get_compliant_name "$pkg") | ||||
|  | ||||
|     msg2 "Adding package repo [%s] to team (%s)" "$pkg" "$team" | ||||
|     msg2 "Adding package repo [%s] to team (%s)" "$gitname" "$team" | ||||
|  | ||||
|     curl -s -X PUT "${GIT_URL}/api/v1/teams/$id/repos/$org/$pkg?access_token=${GIT_TOKEN}" \ | ||||
|     curl -s -X PUT "${GIT_URL}/api/v1/teams/$id/repos/$org/$gitname?access_token=${GIT_TOKEN}" \ | ||||
|         -H  "accept: application/json" | ||||
| } | ||||
|   | ||||
| @@ -23,14 +23,12 @@ get_remote_head(){ | ||||
| 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^^}" ;; | ||||
|         ruby-*) org="packagesRuby" ;; | ||||
|         perl-*) org="packagesPerl" ;; | ||||
|         python-*|python2-*) org="packagesPython" ;; | ||||
|         *) sub=${pkg:0:1}; org="packages${sub^^}" ;; | ||||
|     esac | ||||
|     echo $org | ||||
| } | ||||
|  | ||||
| subrepo_push(){ | ||||
| @@ -83,7 +81,7 @@ pull_tree(){ | ||||
|     local remote_head=$(get_remote_head) | ||||
|  | ||||
|     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 | ||||
|     fi | ||||
| } | ||||
| @@ -141,22 +139,3 @@ config_tree(){ | ||||
|         fi | ||||
|     cd .. | ||||
| } | ||||
|  | ||||
| subrepo_new(){ | ||||
|     local pkg="$1" tree="$2" team="${3:-$2}" | ||||
|     local dest=${TREE_DIR_ARTIX}/$tree/$pkg/trunk | ||||
|  | ||||
|     cd ${TREE_DIR_ARTIX}/$tree | ||||
|  | ||||
|     local org=$(get_pkg_org "$pkg") | ||||
|  | ||||
|     create_repo "$pkg" "$org" | ||||
|  | ||||
|     add_repo_to_team "$pkg" "$org" "$team" | ||||
|  | ||||
|     subrepo_clone "$pkg" "$org" | ||||
|  | ||||
|     prepare_dir "$dest" | ||||
|  | ||||
|     commit_jenkins_files "$pkg" | ||||
| } | ||||
|   | ||||
| @@ -20,55 +20,6 @@ get_compliant_name(){ | ||||
|     echo $gitname | ||||
| } | ||||
|  | ||||
| patch_pkg(){ | ||||
|     local pkg="$1" | ||||
|     case $pkg in | ||||
|         'glibc') | ||||
|             sed -e 's|{locale,systemd/system,tmpfiles.d}|{locale,tmpfiles.d}|' \ | ||||
|                 -e '/nscd.service/d' \ | ||||
|                 -i $pkg/trunk/PKGBUILD | ||||
|         ;; | ||||
|         'tp_smapi'|'acpi_call'|'r8168'|'bbswitch'|'broadcom-wl') | ||||
|             sed -e 's|-ARCH|-ARTIX|g' -i $pkg/trunk/PKGBUILD | ||||
|         ;; | ||||
|         'nvidia') | ||||
|             sed -e 's|-ARCH|-ARTIX|g'  -e 's|for Arch kernel|for Artix kernel|g' \ | ||||
|                 -e 's|for LTS Arch kernel|for LTS Artix kernel|g' \ | ||||
|                 -i $pkg/trunk/PKGBUILD | ||||
|         ;; | ||||
|         'linux') | ||||
|             sed -e 's|-ARCH|-ARTIX|g' -i $pkg/trunk/PKGBUILD | ||||
|             sed -e 's|CONFIG_DEFAULT_HOSTNAME=.*|CONFIG_DEFAULT_HOSTNAME="artixlinux"|' \ | ||||
|                 -e 's|CONFIG_CRYPTO_SPECK=.*|CONFIG_CRYPTO_SPECK=n|' \ | ||||
|                 -i $pkg/trunk/config | ||||
|             cd $pkg/trunk | ||||
|                 updpkgsums | ||||
|             cd ../.. | ||||
|  | ||||
|         ;; | ||||
|         'licenses') | ||||
|             sed -e 's|https://www.archlinux.org/|https://www.artixlinux.org/|' -i $pkg/trunk/PKGBUILD | ||||
|         ;; | ||||
|         'bash') | ||||
|             sed -e 's|system.bash_logout)|system.bash_logout artix.bashrc)|' \ | ||||
|             -e "s|etc/bash.|etc/bash/|g" \ | ||||
|             -e 's|"$pkgdir/etc/skel/.bash_logout"|"$pkgdir/etc/skel/.bash_logout"\n  install -Dm644 artix.bashrc $pkgdir/etc/bash/bashrc.d/artix.bashrc|' \ | ||||
|             -i $pkg/trunk/PKGBUILD | ||||
|  | ||||
|  | ||||
|             cd $pkg/trunk | ||||
|                 patch -Np 1 -i ${DATADIR}/patches/artix-bash.patch | ||||
|                 updpkgsums | ||||
|             cd ../.. | ||||
|         ;; | ||||
|         gstreamer|gst-plugins-*) | ||||
|             sed -e 's|https://www.archlinux.org/|https://www.artixlinux.org/|' \ | ||||
|                 -e 's|(Arch Linux)|(Artix Linux)|' \ | ||||
|                 -i $pkg/trunk/PKGBUILD | ||||
|         ;; | ||||
|     esac | ||||
| } | ||||
|  | ||||
| arch2artix(){ | ||||
|     local repo="$1" artix=none | ||||
|     case "$repo" in | ||||
| @@ -109,7 +60,7 @@ find_repo(){ | ||||
|     local pkg="$1" stag="$2" unst="$3" repo= | ||||
|  | ||||
|     for r in $(arch_repos "$stag" "$unst");do | ||||
|         [[ -f $pkg/repos/$r-x86_64/PKGBUILD ]] && repo=$r-x86_64 | ||||
|         [[ -f $pkg/repos/$r-${ARCH}/PKGBUILD ]] && repo=$r-${ARCH} | ||||
|         [[ -f $pkg/repos/$r-any/PKGBUILD ]] && repo=$r-any | ||||
|     done | ||||
|     echo $repo | ||||
| @@ -127,7 +78,8 @@ is_valid_repo(){ | ||||
| } | ||||
|  | ||||
| get_cases(){ | ||||
|     local pkglist="${DATADIR}/pkglists/$1.list" | ||||
|     local pkglist="${SYSCONFDIR}/pkglist.d/$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")) | ||||
| @@ -143,22 +95,28 @@ 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 ;; | ||||
|         $(get_cases python)) tree=packages-python ;; | ||||
|         $(get_cases perl)) tree=packages-perl ;; | ||||
|         $(get_cases ruby)) tree=packages-ruby ;; | ||||
|         $(get_cases openrc)) tree=packages-openrc ;; | ||||
|         $(get_cases runit)) tree=packages-runit ;; | ||||
|         $(get_cases s6)) tree=packages-s6 ;; | ||||
|         $(get_cases media)) tree=packages-media ;; | ||||
|         $(get_cases xorg)) tree=packages-xorg ;; | ||||
|         $(get_cases qt5)) tree=packages-qt5 ;; | ||||
|         $(get_cases gtk)) tree=packages-gtk ;; | ||||
|         $(get_cases java)) tree=packages-java ;; | ||||
|         $(get_cases haskell)) tree=packages-haskell ;; | ||||
|         $(get_cases devel)) tree=packages-devel ;; | ||||
|         $(get_cases lxqt)) tree=packages-lxqt ;; | ||||
|         $(get_cases cinnamon)) tree=packages-cinnamon ;; | ||||
|         $(get_cases kde)) tree=packages-kde ;; | ||||
|         $(get_cases gnome)) tree=packages-gnome ;; | ||||
|         $(get_cases mate)) tree=packages-mate ;; | ||||
|         $(get_cases xfce)) tree=packages-xfce ;; | ||||
|         *) 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(){ | ||||
|   | ||||
| @@ -23,3 +23,45 @@ SYSCONFDIR=${SYSCONFDIR:-'@sysconfdir@/artools'} | ||||
| for baselib in ${LIBDIR}/base/*.sh; do | ||||
|     . $baselib | ||||
| done | ||||
|  | ||||
| load_user_info(){ | ||||
|     OWNER=${SUDO_USER:-$USER} | ||||
|  | ||||
|     if [[ -n $SUDO_USER ]]; then | ||||
|         eval "USER_HOME=~$SUDO_USER" | ||||
|     else | ||||
|         USER_HOME=$HOME | ||||
|     fi | ||||
|  | ||||
|     XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$USER_HOME/.config}" | ||||
|  | ||||
|     USER_CONF_DIR="${XDG_CONFIG_HOME}/artools" | ||||
|  | ||||
|     prepare_dir "${USER_CONF_DIR}" | ||||
|  | ||||
|     USER_CACHE_DIR="${XDG_CACHE_HOME:-$USER_HOME/.cache}/artools" | ||||
| } | ||||
|  | ||||
| load_base_config(){ | ||||
|  | ||||
|     local conf="$1/artools-base.conf" | ||||
|  | ||||
|     [[ -f "$conf" ]] || return 1 | ||||
|  | ||||
|     [[ -r "$conf" ]] && . "$conf" | ||||
|  | ||||
|  | ||||
|     ARCH=$(uname -m) | ||||
|  | ||||
|     CHROOTS_DIR=${CHROOTS_DIR:-'/var/lib/artools'} | ||||
|  | ||||
|     WORKSPACE_DIR=${WORKSPACE_DIR:-"/home/${OWNER}/artools-workspace"} | ||||
|  | ||||
|     prepare_dir "${WORKSPACE_DIR}" | ||||
|  | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_base_config "${USER_CONF_DIR}" || load_base_config "${SYSCONFDIR}" | ||||
|   | ||||
| @@ -12,6 +12,45 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| . @libdir@/artools/util-base.sh | ||||
|  | ||||
| for isolib in ${LIBDIR}/iso/*.sh; do | ||||
|     . $isolib | ||||
| done | ||||
|  | ||||
| load_iso_config(){ | ||||
|  | ||||
|     local conf="$1/artools-iso.conf" | ||||
|  | ||||
|     [[ -f "$conf" ]] || return 1 | ||||
|  | ||||
|     [[ -r "$conf" ]] && . "$conf" | ||||
|  | ||||
|     CHROOTS_ISO="${CHROOTS_DIR}/buildiso" | ||||
|  | ||||
|     ISO_POOL=${ISO_POOL:-"${WORKSPACE_DIR}/iso"} | ||||
|  | ||||
|     prepare_dir "${ISO_POOL}" | ||||
|  | ||||
|     PROFILE='base' | ||||
|  | ||||
|     ISO_VERSION=${ISO_VERSION:-"$(date +%Y%m%d)"} | ||||
|  | ||||
|     INITSYS=${INITSYS:-'openrc'} | ||||
|  | ||||
|     GPG_KEY=${GPG_KEY:-''} | ||||
|  | ||||
|     UPLIMIT=${UPLIMIT:-1000} | ||||
|  | ||||
|     FILE_HOST="download.${DOMAIN}" | ||||
|  | ||||
|     FILE_HOME=${FILE_HOME:-'/srv/iso'} | ||||
|  | ||||
|     FILE_PORT=${FILE_PORT:-65432} | ||||
|  | ||||
|     ACCOUNT=${ACCOUNT:-'naughtyISOuploader'} | ||||
|  | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| load_iso_config "${USER_CONF_DIR}" || load_iso_config "${SYSCONFDIR}" | ||||
|   | ||||
| @@ -12,6 +12,75 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| . @libdir@/artools/util-base.sh | ||||
|  | ||||
| for pkglib in ${LIBDIR}/pkg/*.sh; do | ||||
|     . $pkglib | ||||
| done | ||||
|  | ||||
| load_pkg_config(){ | ||||
|  | ||||
|     local conf="$1/artools-pkg.conf" | ||||
|  | ||||
|     [[ -f "$conf" ]] || return 1 | ||||
|  | ||||
|     [[ -r "$conf" ]] && . "$conf" | ||||
|  | ||||
|     DOMAIN='artixlinux.org' | ||||
|  | ||||
|     GIT_DOMAIN="gitea.${DOMAIN}" | ||||
|  | ||||
|     GIT_URL="https://${GIT_DOMAIN}" | ||||
|  | ||||
|     GIT_TOKEN=${GIT_TOKEN:-''} | ||||
|  | ||||
|     TREE_DIR_ARTIX=${TREE_DIR_ARTIX:-"${WORKSPACE_DIR}/artixlinux"} | ||||
|  | ||||
|     [[ -z ${TREE_NAMES_ARTIX[@]} ]] && \ | ||||
|     TREE_NAMES_ARTIX=( | ||||
|             packages | ||||
|             community | ||||
|             packages-kernel | ||||
|             packages-openrc | ||||
|             packages-runit | ||||
|             packages-xorg | ||||
|             packages-python | ||||
|             packages-perl | ||||
|             packages-java | ||||
|             packages-qt5 | ||||
|             packages-devel | ||||
|             packages-ruby | ||||
|             packages-gtk | ||||
|             packages-gnome | ||||
|             packages-cinnamon | ||||
|             packages-lxqt | ||||
|             packages-mate | ||||
|             packages-kde | ||||
|             packages-xfce | ||||
| #             packages-haskell | ||||
|     ) | ||||
|  | ||||
|     HOST_TREE_ARTIX=${HOST_TREE_ARTIX:-"gitea@${GIT_DOMAIN}:artixlinux"} | ||||
|  | ||||
|     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" | ||||
|  | ||||
|     REPOS_ROOT=${REPOS_ROOT:-"${WORKSPACE_DIR}/repos"} | ||||
|  | ||||
|     REPOS_MIRROR=${REPOS_MIRROR:-'http://mirror1.artixlinux.org/repos'} | ||||
|  | ||||
|     DBEXT=${DBEXT:-'xz'} | ||||
|  | ||||
|     LINKSDBEXT=${LINKSDBEXT:-"links.tar.${DBEXT}"} | ||||
|  | ||||
|     PKGDBEXT=${PKGDBEXT:-"db.tar.${DBEXT}"} | ||||
|  | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| load_pkg_config "${USER_CONF_DIR}" || load_pkg_config "${SYSCONFDIR}" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user