forked from artix/artools
		
	Compare commits
	
		
			68 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 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 | 
							
								
								
									
										16
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								Makefile
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | |||||||
| VERSION=0.13 | VERSION=0.15 | ||||||
|  |  | ||||||
| CHROOT_VERSION=0.9 | CHROOT_VERSION=0.10 | ||||||
|  |  | ||||||
| TOOLS = artools | TOOLS = artools | ||||||
| PREFIX ?= /usr | PREFIX ?= /usr | ||||||
| @@ -38,7 +38,10 @@ PKG_BIN = \ | |||||||
| 	bin/pkg/pkg2yaml \ | 	bin/pkg/pkg2yaml \ | ||||||
| 	bin/pkg/buildtree \ | 	bin/pkg/buildtree \ | ||||||
| 	bin/pkg/lddd \ | 	bin/pkg/lddd \ | ||||||
| 	bin/pkg/links-add | 	bin/pkg/links-add \ | ||||||
|  | 	bin/pkg/checkpkg \ | ||||||
|  | 	bin/pkg/finddeps \ | ||||||
|  | 	bin/pkg/find-libdeps | ||||||
|  |  | ||||||
| LN_COMMITPKG = \ | LN_COMMITPKG = \ | ||||||
| 	extrapkg \ | 	extrapkg \ | ||||||
| @@ -85,9 +88,6 @@ LN_DEPLOYPKG = \ | |||||||
| PKG_LIBS = \ | PKG_LIBS = \ | ||||||
| 	$(wildcard lib/pkg/*) | 	$(wildcard lib/pkg/*) | ||||||
|  |  | ||||||
| PKG_LISTS = \ |  | ||||||
| 	$(wildcard data/pkglists/*.list) |  | ||||||
|  |  | ||||||
| PKG_UTIL = lib/util-pkg.sh | PKG_UTIL = lib/util-pkg.sh | ||||||
|  |  | ||||||
| PKG_DATA = \ | PKG_DATA = \ | ||||||
| @@ -167,6 +167,8 @@ install_pkg: | |||||||
| 	install $(DIRMODE) $(DESTDIR)$(BINDIR) | 	install $(DIRMODE) $(DESTDIR)$(BINDIR) | ||||||
| 	install $(MODE) $(PKG_BIN) $(DESTDIR)$(BINDIR) | 	install $(MODE) $(PKG_BIN) $(DESTDIR)$(BINDIR) | ||||||
|  |  | ||||||
|  | 	$(LN) find-libdeps $(DESTDIR)$(BINDIR)/find-libprovides | ||||||
|  |  | ||||||
| 	$(LN) links-add $(DESTDIR)$(BINDIR)/links-remove | 	$(LN) links-add $(DESTDIR)$(BINDIR)/links-remove | ||||||
|  |  | ||||||
| 	for l in $(LN_COMMITPKG); do $(LN) commitpkg $(DESTDIR)$(BINDIR)/$$l; done | 	for l in $(LN_COMMITPKG); do $(LN) commitpkg $(DESTDIR)$(BINDIR)/$$l; done | ||||||
| @@ -183,8 +185,6 @@ install_pkg: | |||||||
| 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches | 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches | ||||||
| 	install $(FILEMODE) $(PATCHES) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches | 	install $(FILEMODE) $(PATCHES) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches | ||||||
|  |  | ||||||
| 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/pkglists |  | ||||||
| 	install $(FILEMODE) $(PKG_LISTS) $(DESTDIR)$(DATADIR)/$(TOOLS)/pkglists |  | ||||||
| install_cpio: | install_cpio: | ||||||
| 	+make CPIODIR=$(CPIODIR) DESTDIR=$(DESTDIR) -C initcpio install | 	+make CPIODIR=$(CPIODIR) DESTDIR=$(DESTDIR) -C initcpio install | ||||||
|  |  | ||||||
|   | |||||||
| @@ -36,18 +36,16 @@ copy_keyring(){ | |||||||
|  |  | ||||||
| create_min_fs(){ | create_min_fs(){ | ||||||
|     msg "Creating install root at %s" "$1" |     msg "Creating install root at %s" "$1" | ||||||
|     mkdir -m 0755 -p $1/var/{cache/pacman/pkg,lib/pacman,log} $1/{dev,etc} |     mkdir -m 0755 -p $1/var/{cache/pacman/pkg,lib/pacman,log} $1/{dev,run,etc/pacman.d} | ||||||
|     mkdir -m 1777 -p $1/{tmp,run} |     mkdir -m 1777 -p $1/tmp | ||||||
|     mkdir -m 0555 -p $1/{sys,proc} |     mkdir -m 0555 -p $1/{sys,proc} | ||||||
| } | } | ||||||
|  |  | ||||||
| newroot=/mnt | newroot=/mnt | ||||||
|  |  | ||||||
| hostcache=false | hostcache=0 | ||||||
| copykeyring=true | copykeyring=1 | ||||||
| copymirrorlist=true | copymirrorlist=1 | ||||||
| directory=false |  | ||||||
| interactive=false |  | ||||||
|  |  | ||||||
| usage() { | usage() { | ||||||
|     echo "usage: ${0##*/} [options] root [packages...]" |     echo "usage: ${0##*/} [options] root [packages...]" | ||||||
| @@ -72,10 +70,10 @@ opts=':C:cGiM' | |||||||
| while getopts ${opts} arg; do | while getopts ${opts} arg; do | ||||||
|     case "${arg}" in |     case "${arg}" in | ||||||
|         C) pacman_conf=$OPTARG ;; |         C) pacman_conf=$OPTARG ;; | ||||||
|         c) hostcache=true ;; |         c) hostcache=1 ;; | ||||||
|         i) interactive=true ;; |         i) interactive=1 ;; | ||||||
|         G) copykeyring=false ;; |         G) copykeyring=0 ;; | ||||||
|         M) copymirrorlist=false ;; |         M) copymirrorlist=0 ;; | ||||||
|         :) echo "invalid argument ${arg}:$OPTARG"; usage 1;; |         :) echo "invalid argument ${arg}:$OPTARG"; usage 1;; | ||||||
|         ?) usage 0 ;; |         ?) usage 0 ;; | ||||||
|     esac |     esac | ||||||
| @@ -88,9 +86,13 @@ check_root | |||||||
| newroot=$1; shift | newroot=$1; shift | ||||||
| pacman_args=("${@:-base}") | 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") | [[ -n $pacman_conf ]] && pacman_args+=(--config="$pacman_conf") | ||||||
|  |  | ||||||
| @@ -102,15 +104,16 @@ create_min_fs "$newroot" | |||||||
| # mount API filesystems | # mount API filesystems | ||||||
| chroot_api_mount "$newroot" || die "failed to setup API filesystems in new root" | 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" | msg2 'Installing packages to %s' "$newroot" | ||||||
| if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then | if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then | ||||||
|     die 'Failed to install packages to new root' |     die 'Failed to install packages to new root' | ||||||
| fi | fi | ||||||
|  |  | ||||||
| if ${copykeyring};then |  | ||||||
|     copy_keyring "$newroot" |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| if ${copymirrorlist};then | if (( copymirrorlist ));then | ||||||
|     copy_mirrorlist "$newroot" |     copy_mirrorlist "$newroot" | ||||||
| fi | fi | ||||||
|   | |||||||
| @@ -16,9 +16,12 @@ chroot_version=0.9 | |||||||
|  |  | ||||||
| . @libdir@/artools/util-base.sh | . @libdir@/artools/util-base.sh | ||||||
|  |  | ||||||
|  | # umask might have been changed in /etc/profile | ||||||
|  | # ensure that sane default is set again | ||||||
|  | umask 0022 | ||||||
|  |  | ||||||
| working_dir='' | working_dir='' | ||||||
| files=() | files=() | ||||||
| nosetarch=false |  | ||||||
|  |  | ||||||
| usage() { | usage() { | ||||||
|     echo "Usage: ${0##*/} [options] working-dir [run arguments]" |     echo "Usage: ${0##*/} [options] working-dir [run arguments]" | ||||||
| @@ -45,9 +48,9 @@ while getopts ${opts} arg; do | |||||||
|     case "${arg}" in |     case "${arg}" in | ||||||
|         C) pacman_conf="$OPTARG" ;; |         C) pacman_conf="$OPTARG" ;; | ||||||
|         M) makepkg_conf="$OPTARG" ;; |         M) makepkg_conf="$OPTARG" ;; | ||||||
|         c) cache_dir="$OPTARG" ;; |         c) cache_dirs+=("$OPTARG") ;; | ||||||
|         f) files+=("$OPTARG") ;; |         f) files+=("$OPTARG") ;; | ||||||
|         s) nosetarch=true ;; |         s) nosetarch=1 ;; | ||||||
|         r) bindmounts_ro=("$OPTARG") ;; |         r) bindmounts_ro=("$OPTARG") ;; | ||||||
|         w) bindmounts_rw=("$OPTARG") ;; |         w) bindmounts_rw=("$OPTARG") ;; | ||||||
|         h|?) usage ;; |         h|?) usage ;; | ||||||
| @@ -65,20 +68,33 @@ shift 1 | |||||||
|  |  | ||||||
| [[ -z $working_dir ]] && die 'Please specify a working directory.' | [[ -z $working_dir ]] && die 'Please specify a working directory.' | ||||||
|  |  | ||||||
| if [[ -z $cache_dir ]]; then | pacconf_cmd=$(command -v pacman-conf || command -v pacconf) | ||||||
|     cache_dirs=($(pacman -v 2>&1 | grep '^Cache Dirs:' | sed 's/Cache Dirs:\s*//g')) |  | ||||||
| else | if (( ${#cache_dirs[@]} == 0 )); then | ||||||
|     cache_dirs=("$cache_dir") |     mapfile -t cache_dirs < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" CacheDir) | ||||||
| fi | fi | ||||||
|  |  | ||||||
| pacconf_cmd=$(command -v pacman-conf || command -v pacconf) |  | ||||||
| host_mirrors=($($pacconf_cmd --repo world Server 2> /dev/null | sed -r 's#(.*/)world/os/.*#\1$repo/os/$arch#')) | 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 () { | 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" |     printf 'Server = %s\n' "${host_mirrors[@]}" >"$working_dir/etc/pacman.d/mirrorlist" | ||||||
|      |  | ||||||
|     [[ -n $pacman_conf ]] && cp $pacman_conf "$1/etc/pacman.conf" |     [[ -n $pacman_conf ]] && cp $pacman_conf "$1/etc/pacman.conf" | ||||||
|  |  | ||||||
|     [[ -n $makepkg_conf ]] && cp $makepkg_conf "$1/etc/makepkg.conf" |     [[ -n $makepkg_conf ]] && cp $makepkg_conf "$1/etc/makepkg.conf" | ||||||
| @@ -95,8 +111,11 @@ copy_hostconf () { | |||||||
| chroot_extra_mount() { | chroot_extra_mount() { | ||||||
|     chroot_add_resolv_conf "$1" |     chroot_add_resolv_conf "$1" | ||||||
|     chroot_mount "/etc/hosts" "$1/etc/hosts" -B |     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 |     chroot_mount "${cache_dirs[0]}" "$1${cache_dirs[0]}" -B | ||||||
|  | #     if [[ -e /etc/localtime ]];then | ||||||
|  | #         [[ -e $1/etc/localtime ]] || touch $1/etc/localtime | ||||||
|  | #         chroot_mount "/etc/localtime" "$1/etc/localtime" -B | ||||||
|  | #     fi | ||||||
|  |  | ||||||
|     for cache_dir in ${cache_dirs[@]:1}; do |     for cache_dir in ${cache_dirs[@]:1}; do | ||||||
|         chroot_mount "$cache_dir" "$1${cache_dir}" -Br |         chroot_mount "$cache_dir" "$1${cache_dir}" -Br | ||||||
| @@ -109,7 +128,7 @@ chroot_extra_mount() { | |||||||
|     for m in ${bindmounts_rw[@]}; do |     for m in ${bindmounts_rw[@]}; do | ||||||
|         chroot_mount "${m%%:*}" "$1${m##*:}" -B |         chroot_mount "${m%%:*}" "$1${m##*:}" -B | ||||||
|     done |     done | ||||||
|      |  | ||||||
|     for host_mirror in "${host_mirrors[@]}"; do |     for host_mirror in "${host_mirrors[@]}"; do | ||||||
|         if [[ $host_mirror == *file://* ]]; then |         if [[ $host_mirror == *file://* ]]; then | ||||||
|             host_mirror_path=$(echo "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g') |             host_mirror_path=$(echo "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g') | ||||||
| @@ -135,7 +154,7 @@ copy_hostconf "${working_dir}" | |||||||
|  |  | ||||||
| eval $(grep '^CARCH=' "$working_dir/etc/makepkg.conf") | eval $(grep '^CARCH=' "$working_dir/etc/makepkg.conf") | ||||||
|  |  | ||||||
| ${nosetarch} && unset CARCH | [[ -z $nosetarch ]] || unset CARCH | ||||||
|  |  | ||||||
| ${CARCH:+setarch "$CARCH"} chroot "${working_dir}" "$@" | ${CARCH:+setarch "$CARCH"} chroot "${working_dir}" "$@" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -215,7 +215,7 @@ done | |||||||
|         [[ $device = *'\040(deleted)' ]] && continue |         [[ $device = *'\040(deleted)' ]] && continue | ||||||
|  |  | ||||||
|         if [[ $type = file ]]; then |         if [[ $type = file ]]; then | ||||||
|             printf '%-20s' "$device" |             printf '%-20s' "${device#${root%/}}" | ||||||
|         elif [[ $device = /dev/dm-+([0-9]) ]]; then |         elif [[ $device = /dev/dm-+([0-9]) ]]; then | ||||||
|             # device mapper doesn't allow characters we need to worry |             # device mapper doesn't allow characters we need to worry | ||||||
|             # about being mangled, and it does the escaping of dashes |             # about being mangled, and it does the escaping of dashes | ||||||
|   | |||||||
| @@ -15,11 +15,9 @@ | |||||||
| . @libdir@/artools/util-base.sh | . @libdir@/artools/util-base.sh | ||||||
|  |  | ||||||
| working_dir='' | working_dir='' | ||||||
| files=() |  | ||||||
|  |  | ||||||
| nosetarch=false | files=() | ||||||
| copy_mirrorlist=true | chroot_args=() | ||||||
| basestrap_args=(-Gc) |  | ||||||
|  |  | ||||||
| usage() { | usage() { | ||||||
|     echo "Usage: ${0##*/} [options] working-dir package-list..." |     echo "Usage: ${0##*/} [options] working-dir package-list..." | ||||||
| @@ -28,7 +26,6 @@ usage() { | |||||||
|     echo '    -M <file>     Location of a makepkg config file' |     echo '    -M <file>     Location of a makepkg config file' | ||||||
|     echo '    -c <dir>      Set pacman cache' |     echo '    -c <dir>      Set pacman cache' | ||||||
|     echo '    -f <file>     Copy file from the host to the chroot' |     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 '    -s            Do not run setarch' | ||||||
|     echo '    -h            This message' |     echo '    -h            This message' | ||||||
|     exit 1 |     exit 1 | ||||||
| @@ -36,7 +33,7 @@ usage() { | |||||||
|  |  | ||||||
| orig_argv=("$0" "$@") | orig_argv=("$0" "$@") | ||||||
|  |  | ||||||
| opts='hC:M:c:f:sm' | opts='hC:M:c:f:s' | ||||||
|  |  | ||||||
| while getopts ${opts} arg; do | while getopts ${opts} arg; do | ||||||
|     case "${arg}" in |     case "${arg}" in | ||||||
| @@ -44,11 +41,12 @@ while getopts ${opts} arg; do | |||||||
|         M) makepkg_conf="$OPTARG" ;; |         M) makepkg_conf="$OPTARG" ;; | ||||||
|         c) cache_dir="$OPTARG" ;; |         c) cache_dir="$OPTARG" ;; | ||||||
|         f) files+=("$OPTARG") ;; |         f) files+=("$OPTARG") ;; | ||||||
|         s) nosetarch=true ;; |         s) nosetarch=1 ;; | ||||||
|         m) copy_mirrorlist=false; basestrap_args+=(-M) ;; |  | ||||||
|         h|?) usage ;; |         h|?) usage ;; | ||||||
|         *) error "invalid argument '%s'" "$arg"; usage ;; |         *) error "invalid argument '%s'" "$arg"; usage ;; | ||||||
|     esac |     esac | ||||||
|  |     chroot_args+=("-$arg") | ||||||
|  |     [[ -v OPTARG ]] && chroot_args+=("$OPTARG") | ||||||
| done | done | ||||||
| shift $(($OPTIND - 1)) | shift $(($OPTIND - 1)) | ||||||
|  |  | ||||||
| @@ -61,10 +59,10 @@ shift 1 | |||||||
|  |  | ||||||
| [[ -z $working_dir ]] && die 'Please specify a working directory.' | [[ -z $working_dir ]] && die 'Please specify a working directory.' | ||||||
|  |  | ||||||
| if [[ -z $cache_dir ]]; then | pacconf_cmd=$(command -v pacman-conf || command -v pacconf) | ||||||
|     cache_dirs=($(pacman -v $cache_conf 2>&1 | grep '^Cache Dirs:' | sed 's/Cache Dirs:\s*//g')) |  | ||||||
| else | if (( ${#cache_dirs[@]} == 0 )); then | ||||||
|     cache_dirs=(${cache_dir}) | 	mapfile -t cache_dirs < <($pacconf_cmd CacheDir) | ||||||
| fi | fi | ||||||
|  |  | ||||||
| umask 0022 | umask 0022 | ||||||
| @@ -90,26 +88,15 @@ for f in "${files[@]}"; do | |||||||
|     cp "$f" "$working_dir$f" |     cp "$f" "$working_dir$f" | ||||||
| done | done | ||||||
|  |  | ||||||
| _env=() | basestrap -Mc ${pacman_conf:+-C "$pacman_conf"} "$working_dir" \ | ||||||
| while read -r varname; do |     ${cache_dirs[@]/#/--cachedir=} "$@" || die 'Failed to install all packages' | ||||||
|     _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' |  | ||||||
|  |  | ||||||
| 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" | 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 'LANG=en_US.UTF-8' > "$working_dir/etc/locale.conf" | ||||||
|  | echo "${CHROOTVERSION}" > "$working_dir/.artools" | ||||||
|  |  | ||||||
| dbus-uuidgen --ensure="$working_dir"/etc/machine-id | 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 \ | exec chroot-run \ | ||||||
|     "${chroot_args[@]}" \ |     "${chroot_args[@]}" \ | ||||||
|     "$working_dir" locale-gen |     "$working_dir" locale-gen | ||||||
|   | |||||||
| @@ -15,10 +15,25 @@ | |||||||
| . @libdir@/artools/util-base.sh | . @libdir@/artools/util-base.sh | ||||||
| . @libdir@/artools/util-iso.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(){ | prepare_build(){ | ||||||
|     timer_start=$(get_timer) |     timer_start=$(get_timer) | ||||||
|  |  | ||||||
|     load_profile "${PROFILE}" |     load_profile | ||||||
|  |  | ||||||
|     local pacman_conf pac_file="pacman-default.conf" |     local pacman_conf pac_file="pacman-default.conf" | ||||||
|  |  | ||||||
| @@ -33,7 +48,7 @@ prepare_build(){ | |||||||
|  |  | ||||||
|     iso_label="ARTIX_$(date +%Y%m)" |     iso_label="ARTIX_$(date +%Y%m)" | ||||||
|  |  | ||||||
|     mkchroot_args+=(-C ${pacman_conf} -m) |     basestrap_args+=(-C ${pacman_conf}) | ||||||
|     work_dir=${CHROOTS_ISO}/${PROFILE}/${ARCH} |     work_dir=${CHROOTS_ISO}/${PROFILE}/${ARCH} | ||||||
|  |  | ||||||
|     iso_dir="${ISO_POOL}/${PROFILE}" |     iso_dir="${ISO_POOL}/${PROFILE}" | ||||||
| @@ -73,7 +88,9 @@ build(){ | |||||||
|         lock_close 9 |         lock_close 9 | ||||||
|  |  | ||||||
|         rm -rf --one-file-system "${work_dir}" |         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 |     fi | ||||||
|  |  | ||||||
|     if ${iso_only}; then |     if ${iso_only}; then | ||||||
| @@ -101,10 +118,9 @@ clean_first=true | |||||||
| pretend=false | pretend=false | ||||||
| images_only=false | images_only=false | ||||||
| iso_only=false | iso_only=false | ||||||
| log=false |  | ||||||
| persist=false | persist=false | ||||||
|  |  | ||||||
| mkchroot_args=() | basestrap_args=(-GMc) | ||||||
| cmd=${0##*/} | cmd=${0##*/} | ||||||
|  |  | ||||||
| REPOSITORY=${cmd##*-} | REPOSITORY=${cmd##*-} | ||||||
| @@ -125,7 +141,6 @@ usage() { | |||||||
|     echo '    -x                 Build images only' |     echo '    -x                 Build images only' | ||||||
|     echo '    -z                 Generate iso only' |     echo '    -z                 Generate iso only' | ||||||
|     echo '                       Requires pre built images (-x)' |     echo '                       Requires pre built images (-x)' | ||||||
|     echo '    -l                 Log to file' |  | ||||||
|     echo '    -q                 Query settings and pretend build' |     echo '    -q                 Query settings and pretend build' | ||||||
|     echo '    -h                 This help' |     echo '    -h                 This help' | ||||||
|     echo '' |     echo '' | ||||||
| @@ -135,7 +150,7 @@ usage() { | |||||||
|  |  | ||||||
| orig_argv=("$0" "$@") | orig_argv=("$0" "$@") | ||||||
|  |  | ||||||
| opts='p:r:t:i:g:czxmlqh' | opts='p:r:t:i:g:czxmqh' | ||||||
|  |  | ||||||
| while getopts "${opts}" arg; do | while getopts "${opts}" arg; do | ||||||
|     case "${arg}" in |     case "${arg}" in | ||||||
| @@ -148,7 +163,6 @@ while getopts "${opts}" arg; do | |||||||
|         x) images_only=true ;; |         x) images_only=true ;; | ||||||
|         z) iso_only=true ;; |         z) iso_only=true ;; | ||||||
|         m) persist=true ;; |         m) persist=true ;; | ||||||
|         l) log=true ;; |  | ||||||
|         q) pretend=true ;; |         q) pretend=true ;; | ||||||
|         h|?) usage 0 ;; |         h|?) usage 0 ;; | ||||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; |         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||||
|   | |||||||
| @@ -20,6 +20,9 @@ load_user_info | |||||||
| load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||||
|  |  | ||||||
| create_first=false | create_first=false | ||||||
|  | rebuild=false | ||||||
|  | no_check=false | ||||||
|  | is_checkpkg=false | ||||||
|  |  | ||||||
| mkchrootpkg_args=(-c -n) | mkchrootpkg_args=(-c -n) | ||||||
|  |  | ||||||
| @@ -27,22 +30,13 @@ cmd=${0##*/} | |||||||
| repo=${cmd#*-} | repo=${cmd#*-} | ||||||
| base_devel=('base-devel') | 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() { | usage() { | ||||||
|     echo "Usage: ${0##*/} [options] -- [mkchrootpkg_args]" |     echo "Usage: ${0##*/} [options] -- [mkchrootpkg_args]" | ||||||
|     echo "    -r <dir>           Create chroots in this directory" |     echo "    -r <dir>           Create chroots in this directory" | ||||||
|     echo '    -c                 Recreate the chroot before building' |     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 '    -h                 This help' | ||||||
|     echo '' |     echo '' | ||||||
|     echo "Default mkchrootpkg_args args: ${mkchrootpkg_args[*]}" |     echo "Default mkchrootpkg_args args: ${mkchrootpkg_args[*]}" | ||||||
| @@ -52,17 +46,36 @@ usage() { | |||||||
|  |  | ||||||
| orig_argv=("$0" "$@") | orig_argv=("$0" "$@") | ||||||
|  |  | ||||||
| opts='hcr:' | opts='hcCNmr:' | ||||||
|  |  | ||||||
| while getopts "${opts}" arg; do | while getopts "${opts}" arg; do | ||||||
|     case "${arg}" in |     case "${arg}" in | ||||||
|         r) CHROOTS_PKG="$OPTARG" ;; |         r) CHROOTS_PKG="$OPTARG" ;; | ||||||
|         c) create_first=true ;; |         c) create_first=true ;; | ||||||
|  |         m) rebuild=true ;; | ||||||
|  |         C) is_checkpkg=true; mkchrootpkg_args+=(-C) ;; | ||||||
|  |         N) no_check=true; mkchrootpkg_args+=(-N) ;; | ||||||
|         h|?) usage 0 ;; |         h|?) usage 0 ;; | ||||||
|         *) echo "invalid argument '%s'" "${arg}"; usage 1 ;; |         *) echo "invalid argument '%s'" "${arg}"; usage 1 ;; | ||||||
|     esac |     esac | ||||||
| done | 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 ${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" | ||||||
|  |  | ||||||
| check_root SOURCE_DATE_EPOCH | check_root SOURCE_DATE_EPOCH | ||||||
|  |  | ||||||
| mkchrootpkg_args+=("${@:$OPTIND}") | mkchrootpkg_args+=("${@:$OPTIND}") | ||||||
| @@ -94,7 +107,7 @@ else | |||||||
|         -C "${pacman_conf}" \ |         -C "${pacman_conf}" \ | ||||||
|         -M "${makepkg_conf}" \ |         -M "${makepkg_conf}" \ | ||||||
|         "${CHROOTS_PKG}/${repo}-${ARCH}/root" \ |         "${CHROOTS_PKG}/${repo}-${ARCH}/root" \ | ||||||
|         pacman -Syu --noconfirm || abort |         pacman -Syuu --noconfirm || abort | ||||||
| fi | fi | ||||||
|  |  | ||||||
| # Always build official packages reproducibly | # Always build official packages reproducibly | ||||||
|   | |||||||
| @@ -29,8 +29,9 @@ pull_tree_arch(){ | |||||||
| } | } | ||||||
|  |  | ||||||
| pull_tree_artix(){ | pull_tree_artix(){ | ||||||
|  |     local repos=("$1") | ||||||
|     cd ${TREE_DIR_ARTIX} |     cd ${TREE_DIR_ARTIX} | ||||||
|     for tree in ${TREE_NAMES_ARTIX[@]};do |     for tree in ${repos[@]};do | ||||||
|         if [[ -d ${tree} ]];then |         if [[ -d ${tree} ]];then | ||||||
|             config_tree "${tree}" |             config_tree "${tree}" | ||||||
|             cd ${tree} |             cd ${tree} | ||||||
| @@ -57,7 +58,7 @@ show_deps(){ | |||||||
|  |  | ||||||
|     [[ $arch == 'any' ]] && CARCH=any |     [[ $arch == 'any' ]] && CARCH=any | ||||||
|  |  | ||||||
|     local archver=$(get_full_version $pkg) |     local archver=$(get_full_version) | ||||||
|  |  | ||||||
|     msg2 "repo: %s" "$repo" |     msg2 "repo: %s" "$repo" | ||||||
|     [[ -n ${pkgbase} ]] && msg2 "pkgbase: %s" "${pkgbase}" |     [[ -n ${pkgbase} ]] && msg2 "pkgbase: %s" "${pkgbase}" | ||||||
| @@ -72,20 +73,42 @@ show_deps(){ | |||||||
|     [[ -n ${optdepends[@]} ]] && msg2 "optdepends: %s" "${optdepends[@]}" |     [[ -n ${optdepends[@]} ]] && msg2 "optdepends: %s" "${optdepends[@]}" | ||||||
| } | } | ||||||
|  |  | ||||||
| from_arch(){ | subrepo_new(){ | ||||||
|     local pkg="$1" src= dest= |     local group="${1:-$GROUP}" team="${2:-$TEAM}" | ||||||
|     local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "$pkg") |     local dest=${TREE_DIR_ARTIX}/$group/${PACKAGE}/trunk | ||||||
|     [[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "$pkg" |  | ||||||
|  |  | ||||||
|     local package=${TREE_DIR_ARCH}/$git_tree_arch/$pkg |     cd ${TREE_DIR_ARTIX}/$group | ||||||
|     local repo=$(find_repo "$package") |  | ||||||
|  |     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 |     src=$package/repos/$repo | ||||||
|  |  | ||||||
|     local git_tree_artix=$(find_tree "${TREE_DIR_ARTIX}" "$pkg") |     local git_tree_artix=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}") | ||||||
|     local tree_dir=$(get_artix_tree "$pkg" "$git_tree_artix" "$git_tree_arch") |     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" |     msg "tree: %s" "$tree_dir" | ||||||
|     show_deps "$src" "$repo" |     show_deps "$src" "$repo" | ||||||
| @@ -95,35 +118,51 @@ from_arch(){ | |||||||
|         cd ${TREE_DIR_ARTIX}/$git_tree_artix |         cd ${TREE_DIR_ARTIX}/$git_tree_artix | ||||||
|  |  | ||||||
|         . $dest/PKGBUILD 2>/dev/null |         . $dest/PKGBUILD 2>/dev/null | ||||||
|         local artixver=$(get_full_version $pkg) |         local artixver=$(get_full_version) | ||||||
|  |  | ||||||
|         msg2 "Artix Version: %s" "$artixver" |         msg2 "Artix Version: %s" "$artixver" | ||||||
|     else |     else | ||||||
|         subrepo_new "$pkg" "$tree_dir" "$git_tree_arch" |         subrepo_new "$tree_dir" "$git_tree_arch" | ||||||
|     fi |     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" |     sync_pkg "$src" "$dest" | ||||||
|     patch_pkg "$pkg" |     patch_pkg "${PACKAGE}" | ||||||
| } | } | ||||||
|  |  | ||||||
| view_build(){ | view_build(){ | ||||||
|     local pkg="$1" src= |     local src= | ||||||
|     local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "$pkg") |     local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "${PACKAGE}") | ||||||
|     [[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "$pkg" |     [[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "${PACKAGE}" | ||||||
|  |  | ||||||
|     local pkg_path=${TREE_DIR_ARCH}/$git_tree_arch/$pkg |     local pkg_path=${TREE_DIR_ARCH}/$git_tree_arch/${PACKAGE} | ||||||
|     local repo=$(find_repo "$pkg_path") |     local repo=$(find_repo "$pkg_path" "${staging}" "${unstable}") | ||||||
|  |  | ||||||
|     src=$pkg_path/repos/$repo |     src=$pkg_path/repos/$repo | ||||||
|  |  | ||||||
|     show_deps "$src" "$repo" |     show_deps "$src" "$repo" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | 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" | ||||||
|  | } | ||||||
|  |  | ||||||
| sync_repos(){ | sync_repos(){ | ||||||
|     ${sync_arch} && pull_tree_arch |     ${sync_arch} && pull_tree_arch | ||||||
|     ${sync_artix} && pull_tree_artix |     if ${sync_artix};then | ||||||
|  |         if ${sync_group}; then | ||||||
|  |             pull_tree_artix "${GROUP}" | ||||||
|  |         else | ||||||
|  |             pull_tree_artix "${TREE_NAMES_ARTIX[*]}" | ||||||
|  |         fi | ||||||
|  |     fi | ||||||
| } | } | ||||||
|  |  | ||||||
| load_user_info | load_user_info | ||||||
| @@ -139,6 +178,10 @@ import=false | |||||||
| view=false | view=false | ||||||
| createnew=false | createnew=false | ||||||
| conf=false | conf=false | ||||||
|  | unstable=false | ||||||
|  | staging=true | ||||||
|  | sync_group=false | ||||||
|  | check=false | ||||||
|  |  | ||||||
| PACKAGE='' | PACKAGE='' | ||||||
|  |  | ||||||
| @@ -150,14 +193,17 @@ usage() { | |||||||
|     echo '    -p <pkg>      Package name' |     echo '    -p <pkg>      Package name' | ||||||
|     echo '    -t <team>     Team name (only with -n)' |     echo '    -t <team>     Team name (only with -n)' | ||||||
|     echo "                  [default: ${TEAM}]" |     echo "                  [default: ${TEAM}]" | ||||||
|     echo '    -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 "                  [default: ${GROUP}]" | ||||||
|     echo "    -s            Clone or pull repos" |     echo "    -s            Clone or pull repos" | ||||||
|     echo "    -z            Don't clone or pull arch repos" |     echo "    -z            Don't clone or pull arch repos" | ||||||
|     echo "    -y            Don't clone or pull artix repos" |     echo "    -y            Don't clone or pull artix repos" | ||||||
|     echo '    -i            Import a package from arch repos' |     echo '    -i            Import a package from arch repos' | ||||||
|     echo '    -n            Make new remote subrepo and clone it' |     echo '    -n            Make new remote subrepo and clone it' | ||||||
|     echo '    -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 '    -h            This help' | ||||||
|     echo '' |     echo '' | ||||||
|     echo '' |     echo '' | ||||||
| @@ -166,18 +212,21 @@ usage() { | |||||||
|  |  | ||||||
| orig_argv=("$0" "$@") | orig_argv=("$0" "$@") | ||||||
|  |  | ||||||
| opts='p:t:g:sinzyvh' | opts='p:t:g:uwsinzycvh' | ||||||
|  |  | ||||||
| while getopts "${opts}" arg; do | while getopts "${opts}" arg; do | ||||||
|     case "${arg}" in |     case "${arg}" in | ||||||
|         p) PACKAGE="$OPTARG" ;; |         p) PACKAGE="$OPTARG" ;; | ||||||
|         t) TEAM="$OPTARG" ;; |         t) TEAM="$OPTARG" ;; | ||||||
|         g) GROUP="$OPTARG" ;; |         g) GROUP="$OPTARG"; sync_group=true ;; | ||||||
|         s) sync=true ;; |         s) sync=true ;; | ||||||
|         z) sync_arch=false ;; |         z) sync_arch=false ;; | ||||||
|         y) sync_artix=false ;; |         y) sync_artix=false ;; | ||||||
|         i) import=true ;; |         i) import=true ;; | ||||||
|         n) createnew=true ;; |         n) createnew=true ;; | ||||||
|  |         w) staging=false ;; | ||||||
|  |         u) unstable=true ;; | ||||||
|  |         c) check=true ;; | ||||||
|         v) view=true ;; |         v) view=true ;; | ||||||
|         h|?) usage 0 ;; |         h|?) usage 0 ;; | ||||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; |         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||||
| @@ -191,8 +240,10 @@ prepare_dir "${TREE_DIR_ARCH}" | |||||||
|  |  | ||||||
| ${sync} && sync_repos | ${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 | ||||||
|   | |||||||
							
								
								
									
										156
									
								
								bin/pkg/checkpkg.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										156
									
								
								bin/pkg/checkpkg.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,156 @@ | |||||||
|  | #!/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 | ||||||
|  |  | ||||||
|  | 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" | ||||||
| @@ -15,6 +15,22 @@ | |||||||
| . @libdir@/artools/util-base.sh | . @libdir@/artools/util-base.sh | ||||||
| . @libdir@/artools/util-pkg.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(){ | commit_pkg(){ | ||||||
|     local git_tree=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}") |     local git_tree=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}") | ||||||
|     if [[ -n ${git_tree} ]];then |     if [[ -n ${git_tree} ]];then | ||||||
| @@ -25,9 +41,13 @@ commit_pkg(){ | |||||||
|  |  | ||||||
|         cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE} |         cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE} | ||||||
|  |  | ||||||
|         . trunk/PKGBUILD |         local pkgbuild=$(get_path "${REPO_SRC}") | ||||||
|  |  | ||||||
|  |         . $pkgbuild | ||||||
|         [[ $arch == 'any' ]] && CARCH=any |         [[ $arch == 'any' ]] && CARCH=any | ||||||
|         local ver=$(get_full_version "${PACKAGE}") |  | ||||||
|  |         local version=$(get_full_version) | ||||||
|  |  | ||||||
|         local commit_msg="" |         local commit_msg="" | ||||||
|  |  | ||||||
|         if ${remove};then |         if ${remove};then | ||||||
| @@ -36,14 +56,14 @@ commit_pkg(){ | |||||||
|                 local pkg=${PACKAGE} |                 local pkg=${PACKAGE} | ||||||
|                 git rm -r trunk |                 git rm -r trunk | ||||||
|             else |             else | ||||||
|                 local pkg="${PACKAGE}-$ver" |                 local pkg="${PACKAGE}-$version" | ||||||
|                 git rm -r repos/"${REPO_SRC}-$CARCH" |                 git rm -r repos/"${REPO_SRC}-$CARCH" | ||||||
|             fi |             fi | ||||||
|             commit_msg="[${REPO_SRC}] '$pkg' ${action}" |             commit_msg="[${REPO_SRC}] '$pkg' ${action}" | ||||||
|             msg "Action: %s" "$commit_msg" |             msg "Action: %s" "$commit_msg" | ||||||
|         else |         else | ||||||
|             local action='modify' |             local action='modify' | ||||||
|             commit_msg="[${REPO_SRC}] '${PACKAGE}-$ver' ${action}" |             commit_msg="[${REPO_SRC}] '${PACKAGE}-$version' ${action}" | ||||||
|             msg "Action: %s" "$commit_msg" |             msg "Action: %s" "$commit_msg" | ||||||
|             git add . |             git add . | ||||||
|  |  | ||||||
| @@ -54,7 +74,7 @@ commit_pkg(){ | |||||||
|  |  | ||||||
|         ${push} && pull_tree "${git_tree}" "$head" |         ${push} && pull_tree "${git_tree}" "$head" | ||||||
|  |  | ||||||
|         subrepo_pull "${PACKAGE}" | #         subrepo_pull "${PACKAGE}" | ||||||
|         subrepo_push "${PACKAGE}" |         subrepo_push "${PACKAGE}" | ||||||
|         subrepo_clean "${PACKAGE}" |         subrepo_clean "${PACKAGE}" | ||||||
|  |  | ||||||
| @@ -76,17 +96,18 @@ symlink_commit_pkg(){ | |||||||
|  |  | ||||||
|         cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE} |         cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE} | ||||||
|  |  | ||||||
|         . trunk/PKGBUILD |         local pkgbuild=$(get_path "${REPO_SRC}") | ||||||
|  |  | ||||||
|  |         . $pkgbuild | ||||||
|         [[ $arch == 'any' ]] && CARCH=any |         [[ $arch == 'any' ]] && CARCH=any | ||||||
|         local ver=$(get_full_version "${PACKAGE}") |  | ||||||
|  |         local version=$(get_full_version) | ||||||
|  |  | ||||||
|         if [[ ${REPO_SRC} == 'trunk' ]];then |         if [[ ${REPO_SRC} == 'trunk' ]];then | ||||||
|             local action='add' |             local action='add' | ||||||
|             local dest="${REPO_DEST}-$CARCH" |             local dest="${REPO_DEST}-$CARCH" | ||||||
|  |  | ||||||
|             [[ -d repos/$dest ]] && git rm -r repos/$dest |             prepare_commit "$dest" | ||||||
|             [[ ! -d repos ]] && mkdir repos |  | ||||||
|             [[ ! -d repos/$dest ]] && mkdir repos/$dest |  | ||||||
|  |  | ||||||
|             cp trunk/* repos/$dest/ |             cp trunk/* repos/$dest/ | ||||||
|         else |         else | ||||||
| @@ -94,14 +115,12 @@ symlink_commit_pkg(){ | |||||||
|             local src="${REPO_SRC}-$CARCH" dest="${REPO_DEST}-$CARCH" |             local src="${REPO_SRC}-$CARCH" dest="${REPO_DEST}-$CARCH" | ||||||
|  |  | ||||||
|             [[ ! -f repos/$src/PKGBUILD ]] && die "%s does not exist!" "repos/$src/PKGBUILD" |             [[ ! -f repos/$src/PKGBUILD ]] && die "%s does not exist!" "repos/$src/PKGBUILD" | ||||||
|             [[ -d repos/$dest ]] && git rm -r repos/$dest |             prepare_commit "$dest" | ||||||
|             [[ ! -d repos ]] && mkdir repos |  | ||||||
|             [[ ! -d repos/$dest ]] && mkdir repos/$dest |  | ||||||
|  |  | ||||||
|             cp repos/$src/* repos/$dest/ |             cp repos/$src/* repos/$dest/ | ||||||
|             git rm -r repos/$src |             git rm -r repos/$src | ||||||
|         fi |         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" |         msg "Action: %s" "$commit_msg" | ||||||
|  |  | ||||||
|         git add . |         git add . | ||||||
| @@ -111,7 +130,7 @@ symlink_commit_pkg(){ | |||||||
|  |  | ||||||
|         ${push} && pull_tree "${git_tree}" "$head" |         ${push} && pull_tree "${git_tree}" "$head" | ||||||
|  |  | ||||||
|         subrepo_pull "${PACKAGE}" | #         subrepo_pull "${PACKAGE}" | ||||||
|         subrepo_push "${PACKAGE}" |         subrepo_push "${PACKAGE}" | ||||||
|         subrepo_clean "${PACKAGE}" |         subrepo_clean "${PACKAGE}" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -16,16 +16,16 @@ | |||||||
| . @libdir@/artools/util-pkg.sh | . @libdir@/artools/util-pkg.sh | ||||||
|  |  | ||||||
| compare(){ | compare(){ | ||||||
|     local pkgpath="$1" |     local pkgpath="$1" group="$2" | ||||||
|     local pkg=${pkgpath##*/} |     local pkg=${pkgpath##*/} | ||||||
|     local artixrepo=$(find_repo "$package" "${staging}" "${unstable}") |     local artixrepo=$(find_repo "$pkgpath" "${staging}" "${unstable}") | ||||||
|     local artixshow=${artixrepo%-*} |     local artixshow=${artixrepo%-*} | ||||||
|     local pkgbuild=$pkgpath/repos/$artixrepo/PKGBUILD |     local pkgbuild=$pkgpath/repos/$artixrepo/PKGBUILD | ||||||
|  |  | ||||||
|     if [[ -f $pkgbuild ]];then |     if [[ -f $pkgbuild ]];then | ||||||
|  |  | ||||||
|         . $pkgbuild 2>/dev/null |         . $pkgbuild 2>/dev/null | ||||||
|         local artixver=$(get_full_version $pkg) |         local artixver=$(get_full_version) | ||||||
|  |  | ||||||
|         local archpath=$(get_import_path $pkg) |         local archpath=$(get_import_path $pkg) | ||||||
|  |  | ||||||
| @@ -36,7 +36,7 @@ compare(){ | |||||||
|  |  | ||||||
|         if [[ -f $pkgbuild ]];then |         if [[ -f $pkgbuild ]];then | ||||||
|             . $pkgbuild 2>/dev/null |             . $pkgbuild 2>/dev/null | ||||||
|             local archver=$(get_full_version $pkg) |             local archver=$(get_full_version) | ||||||
|         fi |         fi | ||||||
|  |  | ||||||
|         local result=$(vercmp "$artixver" "$archver") |         local result=$(vercmp "$artixver" "$archver") | ||||||
| @@ -50,9 +50,9 @@ compare(){ | |||||||
|                 case $artixrepo in |                 case $artixrepo in | ||||||
|                     *testing*|*staging*) |                     *testing*|*staging*) | ||||||
|                         if $repomatch;then |                         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 |                         else | ||||||
|                             msg_row_notify "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" |                             msg_row_notify "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}" | ||||||
|                         fi |                         fi | ||||||
|                     ;; |                     ;; | ||||||
|                 esac |                 esac | ||||||
| @@ -61,14 +61,14 @@ compare(){ | |||||||
|         elif ${upgrades};then |         elif ${upgrades};then | ||||||
|  |  | ||||||
|             if [ $result -eq -1 ];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#*-}" | ||||||
|             fi |             fi | ||||||
|  |  | ||||||
|         elif ${downgrades};then |         elif ${downgrades};then | ||||||
|  |  | ||||||
|             if [ $result -eq 1 ];then |             if [ $result -eq 1 ];then | ||||||
|                 if [[ -n $archver ]] && [[ -n $archrepo ]];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 | ||||||
|             fi |             fi | ||||||
|  |  | ||||||
| @@ -101,7 +101,7 @@ check_db(){ | |||||||
|             if [[ -f $pkgbuild ]];then |             if [[ -f $pkgbuild ]];then | ||||||
|  |  | ||||||
|                 . $pkgbuild 2>/dev/null |                 . $pkgbuild 2>/dev/null | ||||||
|                 local artixver=$(get_full_version $pkg) |                 local artixver=$(get_full_version) | ||||||
|                 local is_entry=false |                 local is_entry=false | ||||||
|  |  | ||||||
|                 for name in ${pkgname[@]};do |                 for name in ${pkgname[@]};do | ||||||
| @@ -110,7 +110,7 @@ check_db(){ | |||||||
|                         is_entry=true |                         is_entry=true | ||||||
|                     fi |                     fi | ||||||
|                     if ! $is_entry; then |                     if ! $is_entry; then | ||||||
|                         msg_row "%-20s %-35s %-20s %-10s" "$repo" "$name" "$artixver" "$is_entry" |                         msg_row "${table2}" "$repo" "$name" "$artixver" "$is_entry" | ||||||
|                     fi |                     fi | ||||||
|                 done |                 done | ||||||
|                 unset artixver is_entry pkgbuild pkgver epoch pkgname pkgbase |                 unset artixver is_entry pkgbuild pkgver epoch pkgname pkgbase | ||||||
| @@ -133,7 +133,7 @@ update_db_cache(){ | |||||||
| } | } | ||||||
|  |  | ||||||
| query_db() { | query_db() { | ||||||
|     msg_table_header "%-20s %-45s %s" "Repo" "Package" "Library" |     msg_table_header "${table3}" "Repo" "Package" "Library" | ||||||
|     for repo in "${searchrepos[@]}"; do |     for repo in "${searchrepos[@]}"; do | ||||||
|         local prefix= |         local prefix= | ||||||
|         local db=${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/${repo}/ |         local db=${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/${repo}/ | ||||||
| @@ -143,7 +143,7 @@ query_db() { | |||||||
|                 pkg=${pkg#${db}} |                 pkg=${pkg#${db}} | ||||||
|                 pkg="${pkg%/*}" |                 pkg="${pkg%/*}" | ||||||
|  |  | ||||||
|                 msg_row "%-20s %-45s %s" "${repo}" "${pkg}" "${match}" |                 msg_row "${table3}" "${repo}" "${pkg}" "${match}" | ||||||
|             done < <(grep -rZ "${library}" "${db}") | sort -u |             done < <(grep -rZ "${library}" "${db}") | sort -u | ||||||
|         fi |         fi | ||||||
|     done |     done | ||||||
| @@ -154,12 +154,12 @@ show_version_table(){ | |||||||
|  |  | ||||||
|     if ${check};then |     if ${check};then | ||||||
|         ${sync} && update_db_cache |         ${sync} && update_db_cache | ||||||
|         msg_table_header "%-20s %-35s %-20s %-10s" "Repo" "Package" "Version" "Database" |         msg_table_header "${table2}" "Repo" "Package" "Version" "Database" | ||||||
|     elif ${query};then |     elif ${query};then | ||||||
|         ${sync} && update_db_cache |         ${sync} && update_db_cache | ||||||
|         query_db |         query_db | ||||||
|     else |     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 |     fi | ||||||
|  |  | ||||||
|     for tree in ${TREE_NAMES_ARTIX[@]};do |     for tree in ${TREE_NAMES_ARTIX[@]};do | ||||||
| @@ -170,7 +170,7 @@ show_version_table(){ | |||||||
|             if ${check};then |             if ${check};then | ||||||
|                 check_db "$package" |                 check_db "$package" | ||||||
|             else |             else | ||||||
|                 compare "$package" |                 compare "$package" "$tree" | ||||||
|             fi |             fi | ||||||
|         done |         done | ||||||
|     done |     done | ||||||
| @@ -198,6 +198,10 @@ artix_repos=( | |||||||
|     'gnome-wobble' 'kde-wobble' |     'gnome-wobble' 'kde-wobble' | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | readonly table="%-18s %-18s %-25s %-27s %-27s %-10s" | ||||||
|  | readonly table2="%-20s %-35s %-30s %-10s" | ||||||
|  | readonly table3="%-20s %-45s %s" | ||||||
|  |  | ||||||
| searchrepos=(${artix_repos[@]}) | searchrepos=(${artix_repos[@]}) | ||||||
|  |  | ||||||
| usage() { | usage() { | ||||||
|   | |||||||
| @@ -15,6 +15,78 @@ | |||||||
| . @libdir@/artools/util-base.sh | . @libdir@/artools/util-base.sh | ||||||
| . @libdir@/artools/util-pkg.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(){ | update_repo(){ | ||||||
|     local repo="$1" pkgfile ver |     local repo="$1" pkgfile ver | ||||||
|     local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=() |     local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=() | ||||||
| @@ -29,14 +101,13 @@ update_repo(){ | |||||||
|  |  | ||||||
|     for name in ${pkgsearch[@]}; do |     for name in ${pkgsearch[@]}; do | ||||||
|         pkgarch=$(get_pkg_arch "$name") |         pkgarch=$(get_pkg_arch "$name") | ||||||
|         ver=$(get_full_version "$name") |         ver=$(get_full_version) | ||||||
|         if pkgfile=$(find_cached_package "$name" "$ver" "$pkgarch");then |         if pkgfile=$(find_cached_package "$name" "$ver" "$pkgarch");then | ||||||
|             local pkg=${pkgfile##*/} |             local pkg=${pkgfile##*/} | ||||||
|             info "Found: %s" "$pkg" |             info "Found: %s" "$pkg" | ||||||
|             if ${add_pkg};then |             if ${add_pkg};then | ||||||
|                 local action='add' |                 local action='add' | ||||||
|                 packages+=("$pkg") |                 packages+=("$pkg") | ||||||
| #                 checkpkg "${pkgfile}" || return 2 |  | ||||||
|                 if ${sign_pkg};then |                 if ${sign_pkg};then | ||||||
|                     [[ -e ${pkgfile}.sig ]] && rm ${pkgfile}.sig |                     [[ -e ${pkgfile}.sig ]] && rm ${pkgfile}.sig | ||||||
|                     signfile ${pkgfile} |                     signfile ${pkgfile} | ||||||
| @@ -100,6 +171,12 @@ done | |||||||
|  |  | ||||||
| shift $(($OPTIND - 1)) | shift $(($OPTIND - 1)) | ||||||
|  |  | ||||||
|  | passfiles="$@" | ||||||
|  |  | ||||||
| prepare_dir "${REPOS_ROOT}" | 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= | REPO_DB_SUFFIX= | ||||||
| LOCKFILE= | LOCKFILE= | ||||||
| CLEAN_LOCK=0 | CLEAN_LOCK=0 | ||||||
|  | PREVENT_DOWNGRADE=0 | ||||||
|  |  | ||||||
| . @libdir@/artools/util-base.sh | . @libdir@/artools/util-base.sh | ||||||
|  |  | ||||||
| @@ -52,6 +53,7 @@ Multiple packages to add can be specified on the command line.\n" | |||||||
|         printf -- "\n" |         printf -- "\n" | ||||||
|         printf -- "Options:\n" |         printf -- "Options:\n" | ||||||
|         printf -- "  -n, --new         only add packages that are not already in the database\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 |     elif [[ $cmd == "links-remove" ]] ; then | ||||||
|         printf -- "Usage: links-remove [options] <path-to-db> <packagename> ...\n" |         printf -- "Usage: links-remove [options] <path-to-db> <packagename> ...\n" | ||||||
|         printf -- "\n" |         printf -- "\n" | ||||||
| @@ -199,6 +201,18 @@ db_write_entry() { | |||||||
|         if (( ONLYADDNEW )); then |         if (( ONLYADDNEW )); then | ||||||
|             return 0 |             return 0 | ||||||
|         fi |         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 |     fi | ||||||
|  |  | ||||||
|     # remove an existing entry if it exists, ignore failures |     # remove an existing entry if it exists, ignore failures | ||||||
| @@ -459,6 +473,7 @@ while (( $# )); do | |||||||
|         -s|--sign) SIGN=1 ;; |         -s|--sign) SIGN=1 ;; | ||||||
|         -k|--key) KEY=1 ; shift; GPGKEY=$1 ;; |         -k|--key) KEY=1 ; shift; GPGKEY=$1 ;; | ||||||
|         -v|--verify) VERIFY=1 ;; |         -v|--verify) VERIFY=1 ;; | ||||||
|  |         -p|--prevent-downgrade) PREVENT_DOWNGRADE=1 ;; | ||||||
|         *) args+=("$1") ;; |         *) args+=("$1") ;; | ||||||
|     esac |     esac | ||||||
|     shift |     shift | ||||||
|   | |||||||
| @@ -16,6 +16,31 @@ | |||||||
|  |  | ||||||
| shopt -s nullglob | 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() { | usage() { | ||||||
|     echo "Usage: ${0##*/} [options] -r <chrootdir> [--] [makepkg args]" |     echo "Usage: ${0##*/} [options] -r <chrootdir> [--] [makepkg args]" | ||||||
|     echo ' Run this script in a PKGBUILD dir to build a package inside a' |     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 '           Useful for maintaining multiple copies' | ||||||
|     echo "           Default: $copy" |     echo "           Default: $copy" | ||||||
|     echo '-n         Run namcap on the package' |     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 '-T         Build in a temporary directory' | ||||||
|     echo '-U         Run makepkg as a specified user' |     echo '-U         Run makepkg as a specified user' | ||||||
|     exit 1 |     exit 1 | ||||||
| @@ -57,37 +84,31 @@ usage() { | |||||||
|  |  | ||||||
| # {{{ functions | # {{{ functions | ||||||
|  |  | ||||||
| # Usage: sync_chroot $rootdir $copydir [$copy] | # Usage: sync_chroot $chrootdir $copydir [$copy] | ||||||
| sync_chroot() { | sync_chroot() { | ||||||
|     local rootdir=$1 |     local chrootdir=$1 | ||||||
|     local copydir=$2 |     local copydir=$2 | ||||||
|     local copy=${3:-$2} |     local copy=${3:-$2} | ||||||
|  |  | ||||||
|     if [[ "$rootdir" -ef "$copydir" ]]; then |     if [[ "$chrootdir/root" -ef "$copydir" ]]; then | ||||||
|         error 'Cannot sync copy with itself: %s' "$copydir" |         error 'Cannot sync copy with itself: %s' "$copydir" | ||||||
|         return 1 |         return 1 | ||||||
|     fi |     fi | ||||||
|  |  | ||||||
|     # Get a read lock on the root chroot to make |     # Get a read lock on the root chroot to make | ||||||
|     # sure we don't clone a half-updated chroot |     # sure we don't clone a half-updated chroot | ||||||
|     slock 8 "$rootdir.lock" \ |     slock 8 "$chrootdir/root.lock" \ | ||||||
|         "Locking clean chroot [%s]" "$rootdir" |         "Locking clean chroot [%s]" "$chrootdir/root" | ||||||
|  |  | ||||||
|     stat_busy "Synchronizing chroot copy [%s] -> [%s]" "$rootdir" "$copy" |     stat_busy "Synchronizing chroot copy [%s] -> [%s]" "$chrootdir/root" "$copy" | ||||||
|     if is_subvolume "$rootdir" && is_same_fs "$rootdir" "$(dirname -- "$copydir")" && ! mountpoint -q "$copydir"; then |     if is_btrfs "$chrootdir" && ! mountpoint -q "$copydir"; then | ||||||
|         if is_subvolume "$copydir"; then |         subvolume_delete_recursive "$copydir" || | ||||||
|             subvolume_delete_recursive "$copydir" || |             die "Unable to delete subvolume %s" "$copydir" | ||||||
|                 die "Unable to delete subvolume %s" "$copydir" |         btrfs subvolume snapshot "$chrootdir/root" "$copydir" >/dev/null || | ||||||
|         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 || |  | ||||||
|             die "Unable to create subvolume %s" "$copydir" |             die "Unable to create subvolume %s" "$copydir" | ||||||
|     else |     else | ||||||
|         mkdir -p "$copydir" |         mkdir -p "$copydir" | ||||||
|         rsync -a --delete -q -W -x "$rootdir/" "$copydir" |         rsync -a --delete -q -W -x "$chrootdir/root/" "$copydir" | ||||||
|     fi |     fi | ||||||
|     stat_done |     stat_done | ||||||
|  |  | ||||||
| @@ -118,11 +139,7 @@ delete_chroot() { | |||||||
|     stat_done |     stat_done | ||||||
| } | } | ||||||
|  |  | ||||||
| # Usage: install_packages $copydir $pkgs... |  | ||||||
| install_packages() { | install_packages() { | ||||||
|     local copydir=$1 |  | ||||||
|     local install_pkgs=("${@:2}") |  | ||||||
|  |  | ||||||
|     local -a pkgnames |     local -a pkgnames | ||||||
|     local ret |     local ret | ||||||
|  |  | ||||||
| @@ -133,28 +150,19 @@ install_packages() { | |||||||
|         -r "${bindmounts_ro[@]}" \ |         -r "${bindmounts_ro[@]}" \ | ||||||
|         -r "${bindmounts_rw[@]}" \ |         -r "${bindmounts_rw[@]}" \ | ||||||
|         "$copydir" \ |         "$copydir" \ | ||||||
|         pacman -U --noconfirm -- "${pkgnames[@]/#//root/}" |         bash -c 'yes y | pacman -U -- "$@"' -bash "${pkgnames[@]/#//root/}" | ||||||
|     ret=$? |     ret=$? | ||||||
|     rm -- "${pkgnames[@]/#/$copydir/root/}" |     rm -- "${pkgnames[@]/#/$copydir/root/}" | ||||||
|  |  | ||||||
|     return $ret |     return $ret | ||||||
| } | } | ||||||
|  |  | ||||||
| # Usage: prepare_chroot $copydir $HOME $keepbuilddir $run_namcap |  | ||||||
| # Globals: |  | ||||||
| #  - MAKEFLAGS |  | ||||||
| #  - PACKAGER |  | ||||||
| prepare_chroot() { | prepare_chroot() { | ||||||
|     local copydir=$1 |     (( keepbuilddir )) || rm -rf "$copydir/build" | ||||||
|     local USER_HOME=$2 |  | ||||||
|     local keepbuilddir=$3 |  | ||||||
|     local run_namcap=$4 |  | ||||||
|  |  | ||||||
|     [[ $keepbuilddir = true ]] || rm -rf "$copydir/build" |  | ||||||
|  |  | ||||||
|     local builduser_uid builduser_gid |     local builduser_uid builduser_gid | ||||||
|     builduser_uid="${SUDO_UID:-$UID}" |     builduser_uid="$(id -u "$makepkg_user")" | ||||||
|     builduser_gid="$(id -g "$builduser_uid")" |     builduser_gid="$(id -g "$makepkg_user")" | ||||||
|     local install="install -o $builduser_uid -g $builduser_gid" |     local install="install -o $builduser_uid -g $builduser_gid" | ||||||
|     local x |     local x | ||||||
|  |  | ||||||
| @@ -189,7 +197,7 @@ EOF | |||||||
|         declare -p SOURCE_DATE_EPOCH 2>/dev/null || true |         declare -p SOURCE_DATE_EPOCH 2>/dev/null || true | ||||||
|         printf '_chrootbuild "$@" || exit\n' |         printf '_chrootbuild "$@" || exit\n' | ||||||
|  |  | ||||||
|         if [[ $run_namcap = true ]]; then |         if (( run_namcap )); then | ||||||
|             declare -f _chrootnamcap |             declare -f _chrootnamcap | ||||||
|             printf '_chrootnamcap || exit\n' |             printf '_chrootnamcap || exit\n' | ||||||
|         fi |         fi | ||||||
| @@ -230,39 +238,18 @@ _chrootnamcap() { | |||||||
|     done |     done | ||||||
| } | } | ||||||
|  |  | ||||||
| # Usage: download_sources $copydir $makepkg_user |  | ||||||
| # Globals: |  | ||||||
| #  - SRCDEST |  | ||||||
| download_sources() { | download_sources() { | ||||||
|     local copydir=$1 |  | ||||||
|     local makepkg_user=$2 |  | ||||||
|  |  | ||||||
| #     local builddir |  | ||||||
| #     builddir="$(mktemp -d)" |  | ||||||
| #     chown "$makepkg_user:" "$builddir" |  | ||||||
|  |  | ||||||
|     setup_workdir |     setup_workdir | ||||||
|     chown "$makepkg_user:" "$WORKDIR" |     chown "$makepkg_user:" "$WORKDIR" | ||||||
|  |  | ||||||
|     # Ensure sources are downloaded |     # Ensure sources are downloaded | ||||||
|     sudo -u "$makepkg_user" --preserve-env=GNUPGHOME \ |     sudo -u "$makepkg_user" --preserve-env=GNUPGHOME \ | ||||||
|         env SRCDEST="$SRCDEST" BUILDDIR="$WORKDIR" \ |         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." |         die "Could not download sources." | ||||||
|  |  | ||||||
|     # Clean up garbage from verifysource |  | ||||||
| #     rm -rf "$builddir" |  | ||||||
| } | } | ||||||
|  |  | ||||||
| # Usage: move_products $copydir $owner |  | ||||||
| # Globals: |  | ||||||
| #  - PKGDEST |  | ||||||
| #  - LOGDEST |  | ||||||
| #  - SRCPKGDEST |  | ||||||
| move_products() { | move_products() { | ||||||
|     local copydir=$1 |  | ||||||
|     local src_owner=$2 |  | ||||||
|  |  | ||||||
|     local pkgfile |     local pkgfile | ||||||
|     for pkgfile in "$copydir"/pkgdest/*; do |     for pkgfile in "$copydir"/pkgdest/*; do | ||||||
|         chown "$src_owner" "$pkgfile" |         chown "$src_owner" "$pkgfile" | ||||||
| @@ -295,142 +282,134 @@ move_products() { | |||||||
|  |  | ||||||
| orig_argv=("$0" "$@") | orig_argv=("$0" "$@") | ||||||
|  |  | ||||||
| main() { | opts='hcur:I:l:nNCTD:d:U:' | ||||||
|     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 |  | ||||||
|  |  | ||||||
|     bindmounts_ro=() | while getopts "${opts}" arg; do | ||||||
|     bindmounts_rw=() |     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 | [[ ! -f PKGBUILD && -z "${install_pkgs[*]}" ]] && die 'This must be run in a directory containing a PKGBUILD.' | ||||||
|     [[ -n ${SUDO_USER:-} ]] && copy=$SUDO_USER | [[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.' | ||||||
|     [[ -z "$copy" || $copy = root ]] && copy=copy | makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}} | ||||||
|     src_owner=${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 | # Canonicalize chrootdir, getting rid of trailing / | ||||||
|         case "$arg" in | chrootdir=$(readlink -e "$passeddir") | ||||||
|             c) clean_first=true ;; | [[ ! -d $chrootdir ]] && die "No chroot dir defined, or invalid path '%s'" "$passeddir" | ||||||
|             D) bindmounts_ro+=("$OPTARG") ;; | [[ ! -d $chrootdir/root ]] && die "Missing chroot dir root directory. Try using: mkchroot %s/root base-devel" "$chrootdir" | ||||||
|             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 |  | ||||||
|  |  | ||||||
|     [[ ! -f PKGBUILD && -z "${install_pkgs[*]}" ]] && die 'This must be run in a directory containing a PKGBUILD.' | if [[ ${copy:0:1} = / ]]; then | ||||||
|     [[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.' |     copydir=$copy | ||||||
|     makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}} | 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 / | # See if -R or -e was passed to makepkg | ||||||
|     chrootdir=$(readlink -e "$passeddir") | for arg in "${@:$OPTIND}"; do | ||||||
|     [[ ! -d $chrootdir ]] && die "No chroot dir defined, or invalid path '%s'" "$passeddir" |     case ${arg%%=*} in | ||||||
|     [[ ! -d $chrootdir/root ]] && die "Missing chroot dir root directory. Try using: mkchroot %s/root base-devel" "$chrootdir" |         --skip*|--holdver) verifysource_args+=("$arg") ;; | ||||||
|  |         --repackage|--noextract) keepbuilddir=1 ;; | ||||||
|  |         --*) ;; | ||||||
|  |         -*R*|-*e*) keepbuilddir=1 ;; | ||||||
|  |     esac | ||||||
|  | done | ||||||
|  |  | ||||||
|     if [[ ${copy:0:1} = / ]]; then | load_user_info | ||||||
|         copydir=$copy |  | ||||||
|     else |  | ||||||
|         copydir="$chrootdir/$copy" |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     # Pass all arguments after -- right to makepkg | umask 0022 | ||||||
|     makepkg_args+=("${@:$OPTIND}") |  | ||||||
|  |  | ||||||
|     # See if -R or -e was passed to makepkg | load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||||
|     for arg in "${makepkg_args[@]}"; do | load_vars /etc/makepkg.conf | ||||||
|         case ${arg%%=*} in |  | ||||||
|             --repackage|--noextract) keepbuilddir=true; break ;; |  | ||||||
|             --repackage|--noextract) keepbuilddir=true; break ;; |  | ||||||
|             --*) ;; |  | ||||||
|             -*R*|-*e*) keepbuilddir=true; break ;; |  | ||||||
|         esac |  | ||||||
|     done |  | ||||||
|  |  | ||||||
|     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" | if [[ ! -d $copydir ]] || (( clean_first )); then | ||||||
|     load_vars /etc/makepkg.conf |     sync_chroot "$chrootdir" "$copydir" "$copy" | ||||||
|  | fi | ||||||
|  |  | ||||||
|     # Use PKGBUILD directory if these don't exist | bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest") | ||||||
|     [[ -d $PKGDEST ]]    || PKGDEST=$PWD |  | ||||||
|     [[ -d $SRCDEST ]]    || SRCDEST=$PWD |  | ||||||
|     [[ -d $SRCPKGDEST ]] || SRCPKGDEST=$PWD |  | ||||||
|     [[ -d $LOGDEST ]]    || LOGDEST=$PWD |  | ||||||
|  |  | ||||||
|     # Lock the chroot we want to use. We'll keep this lock until we exit. | (( update_first )) && chroot-run \ | ||||||
|     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 \ |  | ||||||
|         -r "${bindmounts_ro[*]}" \ |         -r "${bindmounts_ro[*]}" \ | ||||||
|         -w "${bindmounts_rw[*]}" \ |         -w "${bindmounts_rw[*]}" \ | ||||||
|         "$copydir" \ |         "$copydir" \ | ||||||
|         /chrootbuild "${makepkg_args[@]}" |         pacman -Syuu --noconfirm | ||||||
|     then |  | ||||||
|         move_products "$copydir" "$src_owner" | 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 |     else | ||||||
|         (( ret += 1 )) |         die "Build failed, check %s/build" "$copydir" | ||||||
|     fi |     fi | ||||||
|  | else | ||||||
|     $temp_chroot && delete_chroot "$copydir" "$copy" |     if (( run_checkpkg )); then | ||||||
|  |         msg "Running checkpkg" | ||||||
|     if (( ret != 0 )); then |         msg2 "Downloading current versions" | ||||||
|         if $temp_chroot; then |         if pacman --noconfirm -Swdd --logfile /dev/null "${pkgnames[@]}"; then | ||||||
|             die "Build failed" |             msg2 "Checking packages" | ||||||
|  |             sudo -u "$makepkg_user" checkpkg --rmdir --warn | ||||||
|         else |         else | ||||||
|             die "Build failed, check %s/build" "$copydir" |             warning "Skipped checkpkg due to missing packages" | ||||||
|         fi |         fi | ||||||
|     else |  | ||||||
|         true |  | ||||||
|     fi |     fi | ||||||
| } |     true | ||||||
|  | fi | ||||||
| main "$@" |  | ||||||
|   | |||||||
| @@ -15,29 +15,39 @@ | |||||||
| # gitea user access token | # gitea user access token | ||||||
| # GIT_TOKEN='' | # GIT_TOKEN='' | ||||||
|  |  | ||||||
| # HOST_TREE_ARTIX='gitea@gitea.artixlinux.org:artix' | # HOST_TREE_ARTIX='gitea@gitea.artixlinux.org:artixlinux' | ||||||
|  |  | ||||||
| # TREE_DIR_ARTIX=${WORKSPACE_DIR}/artixlinux | # TREE_DIR_ARTIX=${WORKSPACE_DIR}/artixlinux | ||||||
|  |  | ||||||
|  | # customize buildtree, packages and community should be enabled | ||||||
| # TREE_NAMES_ARTIX=( | # TREE_NAMES_ARTIX=( | ||||||
| #         packages | #         packages | ||||||
| #         community | #         community | ||||||
| #         packages-kernel | #         packages-kernel | ||||||
| #         packages-openrc | #         packages-openrc | ||||||
| #         packages-runit | #         packages-runit | ||||||
|  | #         packages-s6 | ||||||
|  | #         packages-media | ||||||
| #         packages-xorg | #         packages-xorg | ||||||
| #         packages-python | #         packages-python | ||||||
| #         packages-perl | #         packages-perl | ||||||
|  | #         packages-java | ||||||
| #         packages-qt5 | #         packages-qt5 | ||||||
|  | #         packages-devel | ||||||
| #         packages-ruby | #         packages-ruby | ||||||
|  | #         packages-gtk | ||||||
|  | #         packages-gnome | ||||||
|  | #         packages-cinnamon | ||||||
|  | #         packages-lxqt | ||||||
|  | #         packages-mate | ||||||
|  | #         packages-kde | ||||||
|  | #         packages-xfce | ||||||
| # ) | # ) | ||||||
|  |  | ||||||
| # HOST_TREE_ARCH=git://git.archlinux.org/svntogit | # HOST_TREE_ARCH=git://git.archlinux.org/svntogit | ||||||
|  |  | ||||||
| # TREE_DIR_ARCH=${WORKSPACE_DIR}/archlinux | # TREE_DIR_ARCH=${WORKSPACE_DIR}/archlinux | ||||||
|  |  | ||||||
| # TREE_NAMES_ARCH=(packages community) |  | ||||||
|  |  | ||||||
| # default repos root | # default repos root | ||||||
| # REPOS_ROOT=${WORKSPACE_DIR}/repos | # REPOS_ROOT=${WORKSPACE_DIR}/repos | ||||||
|  |  | ||||||
| @@ -54,7 +64,7 @@ | |||||||
| # the dist release; default: auto | # the dist release; default: auto | ||||||
| # ISO_VERSION=$(date +%Y%m%d) | # ISO_VERSION=$(date +%Y%m%d) | ||||||
|  |  | ||||||
| # possible values: openrc, runit (s6 not yet supported) | # possible values: openrc, runit, s6 | ||||||
| # INITSYS="openrc" | # INITSYS="openrc" | ||||||
|  |  | ||||||
| # gpg key; leave empty or commented to skip sfs signing | # gpg key; leave empty or commented to skip sfs signing | ||||||
|   | |||||||
| @@ -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 |     fi | ||||||
|  |  | ||||||
|     if [[ "${checksum}" == "y" ]]; then |     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}.sfs" ]]; then | ||||||
|                 if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sha512" ]]; then |                 if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sha512" ]]; then | ||||||
|                     msg -n ":: Self-test requested, please wait..." |                     msg -n ":: Self-test requested, please wait..." | ||||||
| @@ -182,7 +182,7 @@ artix_mount_handler() { | |||||||
|     fi |     fi | ||||||
|  |  | ||||||
|     if [[ "${verify}" == "y" ]]; then |     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" ]]; then | ||||||
|                 if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sfs.sig" ]]; then |                 if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sfs.sig" ]]; then | ||||||
|                     msg -n ":: Signature verification requested, please wait..." |                     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 dest_sfs="/run/artix/sfs" dest_img="/run/artix/img" | ||||||
|     local lower_dir |     local lower_dir | ||||||
|  |  | ||||||
|     for sfs in livefs desktopfs rootfs;do |     for sfs in livefs rootfs;do | ||||||
|         if [[ -f "${src}/${sfs}.sfs" ]]; then |         if [[ -f "${src}/${sfs}.sfs" ]]; then | ||||||
|             _mnt_sfs "${src}/${sfs}.sfs" "${dest_sfs}/${sfs}" |             _mnt_sfs "${src}/${sfs}.sfs" "${dest_sfs}/${sfs}" | ||||||
|             if [[ -f "${dest_sfs}/${sfs}/${sfs}.img" ]]; then |             if [[ -f "${dest_sfs}/${sfs}/${sfs}.img" ]]; then | ||||||
|   | |||||||
| @@ -40,7 +40,7 @@ artix_pxe_http_mount_handler () { | |||||||
|  |  | ||||||
|     local _src=${artix_http_srv}${artixbasedir}/${arch} |     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 |         if [[ ! -z "$( curl -s --head "${_src}/${sfs}.sfs" | grep "OK" )" ]]; then | ||||||
|             _curl_get "${_src}/${sfs}.sfs" "/${arch}" |             _curl_get "${_src}/${sfs}.sfs" "/${arch}" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -31,7 +31,7 @@ load_vars() { | |||||||
|     [[ -f $1 ]] || return 1 |     [[ -f $1 ]] || return 1 | ||||||
|  |  | ||||||
|     for var in {SRC,SRCPKG,PKG,LOG}DEST MAKEFLAGS PACKAGER CARCH GPGKEY; do |     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 |     done | ||||||
|  |  | ||||||
|     return 0 |     return 0 | ||||||
| @@ -76,19 +76,26 @@ init_artools_pkg(){ | |||||||
|  |  | ||||||
|     [[ -z ${TREE_NAMES_ARTIX[@]} ]] && \ |     [[ -z ${TREE_NAMES_ARTIX[@]} ]] && \ | ||||||
|     TREE_NAMES_ARTIX=( |     TREE_NAMES_ARTIX=( | ||||||
|         packages |             packages | ||||||
|         community |             community | ||||||
|         packages-kernel |             packages-kernel | ||||||
|         packages-openrc |             packages-openrc | ||||||
|         packages-runit |             packages-runit | ||||||
|         packages-xorg |             packages-xorg | ||||||
|         packages-python |             packages-python | ||||||
|         packages-perl |             packages-perl | ||||||
|         packages-qt5 |             packages-java | ||||||
|         packages-ruby |             packages-qt5 | ||||||
| #         packages-desktop |             packages-devel | ||||||
| #         packages-kde |             packages-ruby | ||||||
| #         packages-gnome |             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"} |     HOST_TREE_ARTIX=${HOST_TREE_ARTIX:-"gitea@${GIT_DOMAIN}:artixlinux"} | ||||||
| @@ -155,15 +162,6 @@ load_config(){ | |||||||
|     return 0 |     return 0 | ||||||
| } | } | ||||||
|  |  | ||||||
| user_own(){ |  | ||||||
|     local flag=$2 |  | ||||||
|     chown ${flag} "${OWNER}:$(id --group ${OWNER})" "$1" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| user_run(){ |  | ||||||
|     su ${OWNER} -c "$@" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| load_user_info(){ | load_user_info(){ | ||||||
|     OWNER=${SUDO_USER:-$USER} |     OWNER=${SUDO_USER:-$USER} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -12,20 +12,36 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
|  |  | ||||||
| add_svc_rc(){ | add_svc_openrc(){ | ||||||
|     local mnt="$1" name="$2" rlvl="$3" |     local mnt="$1" names="$2" rlvl="${3:-default}" | ||||||
|     if [[ -f $mnt/etc/init.d/$name ]];then |     for svc in $names; do | ||||||
|         msg2 "Setting %s ..." "$name" |         if [[ -f $mnt/etc/init.d/$svc ]];then | ||||||
|         chroot $mnt rc-update add $name $rlvl &>/dev/null |             msg2 "Setting %s ..." "$svc" | ||||||
|     fi |             [[ $svc == "xdm" ]] && set_xdm "$mnt" | ||||||
|  |             chroot $mnt rc-update add $svc $rlvl &>/dev/null | ||||||
|  |         fi | ||||||
|  |     done | ||||||
| } | } | ||||||
|  |  | ||||||
| add_svc_runit(){ | add_svc_runit(){ | ||||||
|     local mnt="$1" name="$2" |     local mnt="$1" names="$2" rlvl="${3:-default}" | ||||||
|     if [[ -d $mnt/etc/runit/sv/$name ]]; then |     for svc in $names; do | ||||||
|         msg2 "Setting %s ..." "$name" |         if [[ -d $mnt/etc/runit/sv/$svc ]]; then | ||||||
|         chroot $mnt ln -s /etc/runit/sv/$name /etc/runit/runsvdir/default &>/dev/null |             msg2 "Setting %s ..." "$svc" | ||||||
|     fi |             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(){ | set_xdm(){ | ||||||
| @@ -51,36 +67,14 @@ configure_logind(){ | |||||||
|  |  | ||||||
| configure_services(){ | configure_services(){ | ||||||
|     local mnt="$1" |     local mnt="$1" | ||||||
|     info "Configuring [%s]" "${INITSYS}" |     info "Configuring [%s] services" "${INITSYS}" | ||||||
|     case ${INITSYS} in |     add_svc_${INITSYS} "$mnt" "${SERVICES[*]} ${SERVICES_LIVE[*]}" | ||||||
|         'openrc') |     info "Done configuring [%s] services" "${INITSYS}" | ||||||
|             for svc in ${SERVICES[@]}; do |  | ||||||
|                 [[ $svc == "xdm" ]] && set_xdm "$mnt" |  | ||||||
|                 add_svc_rc "$mnt" "$svc" "default" |  | ||||||
|             done |  | ||||||
|             for svc in ${SERVICES_LIVE[@]}; do |  | ||||||
|                 add_svc_rc "$mnt" "$svc" "default" |  | ||||||
|             done |  | ||||||
|         ;; |  | ||||||
|         'runit') |  | ||||||
|             for svc in ${SERVICES[@]}; do |  | ||||||
|                 add_svc_runit "$mnt" "$svc" |  | ||||||
|             done |  | ||||||
|             for svc in ${SERVICES_LIVE[@]}; do |  | ||||||
|                 add_svc_runit "$mnt" "$svc" |  | ||||||
|             done |  | ||||||
|         ;; |  | ||||||
|     esac |  | ||||||
|     info "Done configuring [%s]" "${INITSYS}" |  | ||||||
| } | } | ||||||
|  |  | ||||||
| configure_system(){ | configure_system(){ | ||||||
|     local mnt="$1" |     local mnt="$1" | ||||||
|     case ${INITSYS} in |     configure_logind "$mnt" "elogind" | ||||||
|         'openrc' | 'runit') |  | ||||||
|             configure_logind "$mnt" "elogind" |  | ||||||
|         ;; |  | ||||||
|     esac |  | ||||||
|     echo ${HOST_NAME} > $mnt/etc/hostname |     echo ${HOST_NAME} > $mnt/etc/hostname | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -108,43 +102,33 @@ write_users_conf(){ | |||||||
|     printf '%s' "${yaml}" |     printf '%s' "${yaml}" | ||||||
| } | } | ||||||
|  |  | ||||||
| write_servicescfg_conf(){ | write_services_conf(){ | ||||||
|  |     local key1="$1" val1="$2" key2="$3" val2="$4" | ||||||
|     local yaml=$(write_yaml_header) |     local yaml=$(write_yaml_header) | ||||||
|     yaml+=$(write_empty_line) |     yaml+=$(write_empty_line) | ||||||
|     case "${INITSYS}" in |     yaml+=$(write_yaml_map 0 "$key1" "$val1") | ||||||
|         'runit') |     yaml+=$(write_yaml_map 0 "$key2" "$val2") | ||||||
|             yaml+=$(write_yaml_map 0 'svDir' '/etc/runit/sv') |     yaml+=$(write_yaml_map 0 'services') | ||||||
|             yaml+=$(write_yaml_map 0 'runsvDir' '/etc/runit/runsvdir') |     for svc in ${SERVICES[@]};do | ||||||
|             yaml+=$(write_yaml_map 0 'services') |         yaml+=$(write_yaml_seq 2 "$svc") | ||||||
|             yaml+=$(write_yaml_map 2 'enabled') |     done | ||||||
|             for svc in ${SERVICES[@]};do |  | ||||||
|                 yaml+=$(write_yaml_seq_map 4 'name' "$svc") |  | ||||||
|                 yaml+=$(write_yaml_map 6 'runlevel' 'default') |  | ||||||
|             done |  | ||||||
|         ;; |  | ||||||
|         'openrc') |  | ||||||
|             yaml+=$(write_yaml_map 0 'initdDir' '/etc/init.d') |  | ||||||
|             yaml+=$(write_yaml_map 0 'runlevelsDir' '/etc/runlevels') |  | ||||||
|             yaml+=$(write_yaml_map 0 'services') |  | ||||||
|             for svc in ${SERVICES[@]};do |  | ||||||
|                 yaml+=$(write_yaml_seq_map 2 'name' "$svc") |  | ||||||
|                 yaml+=$(write_yaml_map 4 'runlevel' 'default') |  | ||||||
|             done |  | ||||||
|         ;; |  | ||||||
|     esac |  | ||||||
|     yaml+=$(write_empty_line) |     yaml+=$(write_empty_line) | ||||||
|     printf '%s' "${yaml}" |     printf '%s' "${yaml}" | ||||||
| } | } | ||||||
|  |  | ||||||
| write_unpackfs_conf(){ | write_services_openrc_conf(){ | ||||||
|     local yaml=$(write_yaml_header) |     local mods="$1" | ||||||
|     yaml+=$(write_empty_line) |     write_services_conf 'initdDir' '/etc/init.d' 'runlevelsDir' '/etc/runlevels' > "$mods"/services-openrc.conf | ||||||
|     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') | write_services_runit_conf(){ | ||||||
|     yaml+=$(write_yaml_map 4 'destination' '') |     local mods="$1" | ||||||
|     yaml+=$(write_empty_line) |     write_services_conf 'svDir' '/etc/runit/sv' 'runsvDir' '/etc/runit/runsvdir' > "$mods"/services-runit.conf | ||||||
|     printf '%s' "${yaml}" | } | ||||||
|  |  | ||||||
|  | write_services_s6_conf(){ | ||||||
|  |     local mods="$1" | ||||||
|  |     write_services_conf 'svDir' '/etc/s6/sv' 'dbDir' '/etc/s6/rc/compiled' > "$mods"/services-s6.conf | ||||||
| } | } | ||||||
|  |  | ||||||
| configure_calamares(){ | configure_calamares(){ | ||||||
| @@ -152,21 +136,20 @@ configure_calamares(){ | |||||||
|     if [[ -d "$mods" ]];then |     if [[ -d "$mods" ]];then | ||||||
|         msg2 "Configuring Calamares" |         msg2 "Configuring Calamares" | ||||||
|         write_users_conf > "$mods"/users.conf |         write_users_conf > "$mods"/users.conf | ||||||
|         write_servicescfg_conf > "$mods"/services-"${INITSYS}".conf |         write_services_"${INITSYS}"_conf "$mods" | ||||||
|         [[ -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 |         sed -e "s|services-openrc|services-${INITSYS}|" -i "$1"/etc/calamares/settings.conf | ||||||
|     fi |     fi | ||||||
| } | } | ||||||
|  |  | ||||||
| configure_live_image(){ | configure_image(){ | ||||||
|     local fs="$1" |     local fs="$1" | ||||||
|     msg "Configuring [livefs]" |     msg "Configuring [%s]" "${fs##*/}" | ||||||
|     configure_hosts "$fs" |     configure_hosts "$fs" | ||||||
|     configure_system "$fs" |     configure_system "$fs" | ||||||
|     configure_services "$fs" |     configure_services "$fs" | ||||||
|     configure_calamares "$fs" |     configure_calamares "$fs" | ||||||
|     [[ ! -d "$fs/etc/artools" ]] && mkdir -p "$fs/etc/artools" |     [[ ! -d "$fs/etc/artools" ]] && mkdir -p "$fs/etc/artools" | ||||||
|  |     msg2 "Writing live.conf" | ||||||
|     write_live_session_conf > "$fs/etc/artools/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 |     fi | ||||||
|  |  | ||||||
|     if [[ -n ${GPG_KEY} ]]; then |     if [[ -n ${GPG_KEY} ]]; then | ||||||
|         user_run "gpg --export ${GPG_KEY} >${USERCONFDIR}/artools/gpgkey" |         su ${OWNER} -c "gpg --export ${GPG_KEY} >/tmp/GPG_KEY" | ||||||
|         exec 17<>${USERCONFDIR}/artools/GPG_KEY |         exec 17<>/tmp/GPG_KEY | ||||||
|     fi |     fi | ||||||
|     local _kernel=$(cat $mnt/usr/lib/modules/*/version) |     local _kernel=$(<$mnt/usr/src/linux/version) | ||||||
|     ARTIX_GNUPG_FD=${GPG_KEY:+17} chroot-run $mnt \ |     ARTIX_GNUPG_FD=${GPG_KEY:+17} artools-chroot $mnt \ | ||||||
|         /usr/bin/mkinitcpio -k ${_kernel} \ |         /usr/bin/mkinitcpio -k ${_kernel} \ | ||||||
|         -c /etc/mkinitcpio-artix.conf \ |         -c /etc/mkinitcpio-artix.conf \ | ||||||
|         -g /boot/initramfs.img |         -g /boot/initramfs.img | ||||||
| @@ -41,8 +41,8 @@ prepare_initramfs(){ | |||||||
|     if [[ -n ${GPG_KEY} ]]; then |     if [[ -n ${GPG_KEY} ]]; then | ||||||
|         exec 17<&- |         exec 17<&- | ||||||
|     fi |     fi | ||||||
|     if [[ -f ${USERCONFDIR}/artools/GPG_KEY ]]; then |     if [[ -f /tmp/GPG_KEY ]]; then | ||||||
|         rm ${USERCONFDIR}/artools/GPG_KEY |         rm /tmp/GPG_KEY | ||||||
|     fi |     fi | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -59,13 +59,13 @@ prepare_boot_extras(){ | |||||||
| } | } | ||||||
|  |  | ||||||
| configure_grub(){ | configure_grub(){ | ||||||
|     local conf="$1/boot/grub/kernels.cfg" |     sed -e "s|@iso_label@|${iso_label}|" -i ${iso_root}/boot/grub/kernels.cfg | ||||||
|     sed -e "s|@iso_label@|${iso_label}|" -i $conf |  | ||||||
| } | } | ||||||
|  |  | ||||||
| prepare_grub(){ | prepare_grub(){ | ||||||
|     local platform=i386-pc img='core.img' grub=$3/boot/grub efi=$3/efi/boot \ |     local platform=i386-pc img='core.img' prefix=/boot/grub | ||||||
|         lib=$1/usr/lib/grub prefix=/boot/grub theme=$2/usr/share/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} |     prepare_dir ${grub}/${platform} | ||||||
|  |  | ||||||
| @@ -103,7 +103,7 @@ prepare_grub(){ | |||||||
|         grub-mkfont -o ${grub}/unicode.pf2 /usr/share/fonts/misc/unifont.bdf |         grub-mkfont -o ${grub}/unicode.pf2 /usr/share/fonts/misc/unifont.bdf | ||||||
|     fi |     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}" |     msg2 "Creating fat image of %s ..." "${size}" | ||||||
|     truncate -s ${size} "${efi_img}" |     truncate -s ${size} "${efi_img}" | ||||||
|     mkfs.fat -n ARTIX_EFI "${efi_img}" &>/dev/null |     mkfs.fat -n ARTIX_EFI "${efi_img}" &>/dev/null | ||||||
|   | |||||||
| @@ -12,33 +12,12 @@ | |||||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
|  |  | ||||||
| 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 () { | make_sig () { | ||||||
|     local idir="$1" file="$2" |     local idir="$1" file="$2" | ||||||
|     msg2 "Creating signature file..." |     msg2 "Creating signature file..." | ||||||
|     cd "$idir" |     cd "$idir" | ||||||
|     user_own "$idir" |     chown "${OWNER}:$(id --group ${OWNER})" "$idir" | ||||||
|     user_run "gpg --detach-sign --default-key ${GPG_KEY} $file.sfs" |     su ${OWNER} -c "gpg --detach-sign --default-key ${GPG_KEY} $file.sfs" | ||||||
|     chown -R root "$idir" |     chown -R root "$idir" | ||||||
|     cd ${OLDPWD} |     cd ${OLDPWD} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -39,20 +39,14 @@ track_fs() { | |||||||
|  |  | ||||||
| mount_overlay(){ | mount_overlay(){ | ||||||
|     FS_ACTIVE_MOUNTS=() |     FS_ACTIVE_MOUNTS=() | ||||||
|     local lower= upper="$1" work="$2" pkglist="$3" |     local lower= upper="$1" work="$2" | ||||||
|     local fs=${upper##*/} |  | ||||||
|     local rootfs="$work/rootfs" desktopfs="$work/desktopfs" livefs="$work/livefs" |  | ||||||
|     mkdir -p "${mnt_dir}/work" |     mkdir -p "${mnt_dir}/work" | ||||||
|     mkdir -p "$upper" |     mkdir -p "$upper" | ||||||
|     case $fs in |     case $upper in | ||||||
|         desktopfs) lower="$rootfs" ;; |         */livefs) lower="$work/rootfs" ;; | ||||||
|         livefs) |         */bootfs) | ||||||
|             lower="$rootfs" |             lower="$work/rootfs" | ||||||
|             [[ -f $pkglist ]] && lower="$desktopfs":"$rootfs" |             [[ -d "$work/livefs" ]] && lower="$work/livefs":"$work/rootfs" | ||||||
|         ;; |  | ||||||
|         bootfs) |  | ||||||
|             lower="$livefs":"$rootfs" |  | ||||||
|             [[ -f $pkglist ]] && lower="$livefs":"$desktopfs":"$rootfs" |  | ||||||
|         ;; |         ;; | ||||||
|     esac |     esac | ||||||
|     track_fs -t overlay overlay -olowerdir="$lower",upperdir="$upper",workdir="${mnt_dir}/work" "$upper" |     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 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
| # GNU General Public License for more details. | # 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(){ | show_profile(){ | ||||||
|     msg2 "iso_file: %s" "${iso_file}" |     msg2 "iso_file: %s" "${iso_file}" | ||||||
|     msg2 "AUTOLOGIN: %s" "${AUTOLOGIN}" |     msg2 "AUTOLOGIN: %s" "${AUTOLOGIN}" | ||||||
| @@ -42,15 +24,18 @@ show_profile(){ | |||||||
| } | } | ||||||
|  |  | ||||||
| load_profile(){ | load_profile(){ | ||||||
|     local prof="$1" |     local profile_dir="${DATADIR}/iso-profiles" | ||||||
|     local profdir="${DATADIR}/iso-profiles" |     [[ -d ${WORKSPACE_DIR}/iso-profiles ]] && profile_dir=${WORKSPACE_DIR}/iso-profiles | ||||||
|     [[ -d ${WORKSPACE_DIR}/iso-profiles ]] && profdir=${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'} |     DISPLAYMANAGER=${DISPLAYMANAGER:-'none'} | ||||||
|  |  | ||||||
| @@ -66,13 +51,13 @@ load_profile(){ | |||||||
|     ADDGROUPS=${ADDGROUPS:-"video,power,optical,network,lp,scanner,wheel,users,log"} |     ADDGROUPS=${ADDGROUPS:-"video,power,optical,network,lp,scanner,wheel,users,log"} | ||||||
|  |  | ||||||
|     if [[ -z ${SERVICES[@]} ]];then |     if [[ -z ${SERVICES[@]} ]];then | ||||||
|         SERVICES=('acpid' 'bluetooth' 'cronie' 'cupsd' 'syslog-ng' 'NetworkManager') |         SERVICES=('acpid' 'bluetooth' 'cronie' 'cupsd' 'syslog-ng' 'connman') | ||||||
|     fi |     fi | ||||||
|  |  | ||||||
|     if [[ ${DISPLAYMANAGER} != "none" ]];then |     if [[ ${DISPLAYMANAGER} != "none" ]];then | ||||||
|         case "${INITSYS}" in |         case "${INITSYS}" in | ||||||
|             'openrc') SERVICES+=('xdm') ;; |             'openrc') SERVICES+=('xdm') ;; | ||||||
|             'runit') SERVICES+=("${DISPLAYMANAGER}") ;; |             'runit'|'s6') SERVICES+=("${DISPLAYMANAGER}") ;; | ||||||
|         esac |         esac | ||||||
|     fi |     fi | ||||||
|  |  | ||||||
| @@ -84,7 +69,6 @@ load_profile(){ | |||||||
| } | } | ||||||
|  |  | ||||||
| write_live_session_conf(){ | write_live_session_conf(){ | ||||||
|     msg2 "Writing live.conf" |  | ||||||
|     local conf='' |     local conf='' | ||||||
|     conf+=$(printf '%s\n' '# live session configuration') |     conf+=$(printf '%s\n' '# live session configuration') | ||||||
|     conf+=$(printf "\nAUTOLOGIN=%s\n" "${AUTOLOGIN}") |     conf+=$(printf "\nAUTOLOGIN=%s\n" "${AUTOLOGIN}") | ||||||
| @@ -100,7 +84,7 @@ load_pkgs(){ | |||||||
|  |  | ||||||
|     local _init="s|@$init||g" |     local _init="s|@$init||g" | ||||||
|     case "$init" in |     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" ;; |         's6') _init_rm1="s|@runit.*||g"; _init_rm2="s|@openrc.*||g" ;; | ||||||
|         'runit') _init_rm1="s|@s6.*||g"; _init_rm2="s|@openrc.*||g" ;; |         'runit') _init_rm1="s|@s6.*||g"; _init_rm2="s|@openrc.*||g" ;; | ||||||
|     esac |     esac | ||||||
|   | |||||||
| @@ -13,9 +13,6 @@ | |||||||
| # GNU General Public License for more details. | # GNU General Public License for more details. | ||||||
|  |  | ||||||
| error_function() { | error_function() { | ||||||
|     if [[ -p $logpipe ]]; then |  | ||||||
|         rm "$logpipe" |  | ||||||
|     fi |  | ||||||
|     local func="$1" |     local func="$1" | ||||||
|     # first exit all subshells, then print the error |     # first exit all subshells, then print the error | ||||||
|     if (( ! BASH_SUBSHELL )); then |     if (( ! BASH_SUBSHELL )); then | ||||||
| @@ -27,20 +24,6 @@ error_function() { | |||||||
|     exit 2 |     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() { | run_safe() { | ||||||
|     local restoretrap func="$1" |     local restoretrap func="$1" | ||||||
|     set -e |     set -e | ||||||
| @@ -48,11 +31,7 @@ run_safe() { | |||||||
|     restoretrap=$(trap -p ERR) |     restoretrap=$(trap -p ERR) | ||||||
|     trap 'error_function $func' ERR |     trap 'error_function $func' ERR | ||||||
|  |  | ||||||
|     if ${log};then |     "$func" | ||||||
|         run_log "$func" |  | ||||||
|     else |  | ||||||
|         "$func" |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     eval $restoretrap |     eval $restoretrap | ||||||
|     set +E |     set +E | ||||||
| @@ -96,12 +75,6 @@ make_iso() { | |||||||
|     msg "Done [Build ISO]" |     msg "Done [Build ISO]" | ||||||
| } | } | ||||||
|  |  | ||||||
| install_packages(){ |  | ||||||
|     local fs="$1" |  | ||||||
|     setarch "${ARCH}" mkchroot \ |  | ||||||
|         "${mkchroot_args[@]}" "${fs}" "${packages[@]}" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| copy_overlay(){ | copy_overlay(){ | ||||||
|     local src="$1" dest="$2" |     local src="$1" dest="$2" | ||||||
|     if [[ -e "$src" ]];then |     if [[ -e "$src" ]];then | ||||||
| @@ -114,10 +87,6 @@ clean_up_image(){ | |||||||
|     local path mnt="$1" |     local path mnt="$1" | ||||||
|     msg2 "Cleaning [%s]" "${mnt##*/}" |     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 |     path=$mnt/boot | ||||||
|     if [[ -d "$path" ]]; then |     if [[ -d "$path" ]]; then | ||||||
|         find "$path" -name 'initramfs*.img' -delete &> /dev/null |         find "$path" -name 'initramfs*.img' -delete &> /dev/null | ||||||
| @@ -142,11 +111,6 @@ clean_up_image(){ | |||||||
|     if [[ -d $path ]];then |     if [[ -d $path ]];then | ||||||
|         find "$path" -mindepth 1 -delete &> /dev/null |         find "$path" -mindepth 1 -delete &> /dev/null | ||||||
|     fi |     fi | ||||||
|  |  | ||||||
|     if [[ ${mnt##*/} == 'livefs' ]];then |  | ||||||
|         rm -rf "$mnt/etc/pacman.d/gnupg" |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     find "$mnt" -name *.pacnew -name *.pacsave -name *.pacorig -delete |     find "$mnt" -name *.pacnew -name *.pacsave -name *.pacorig -delete | ||||||
|     if [[ -f "$mnt/boot/grub/grub.cfg" ]]; then |     if [[ -f "$mnt/boot/grub/grub.cfg" ]]; then | ||||||
|         rm $mnt/boot/grub/grub.cfg |         rm $mnt/boot/grub/grub.cfg | ||||||
| @@ -163,36 +127,20 @@ make_rootfs() { | |||||||
|  |  | ||||||
|         prepare_dir "${rootfs}" |         prepare_dir "${rootfs}" | ||||||
|  |  | ||||||
|         install_packages "${rootfs}" |         basestrap "${basestrap_args[@]}" "${rootfs}" "${packages[@]}" | ||||||
|  |  | ||||||
|         copy_overlay "${ROOT_OVERLAY}" "${rootfs}" |         copy_overlay "${ROOT_OVERLAY}" "${rootfs}" | ||||||
|  |  | ||||||
|  |         [[ -z ${LIVE_LIST} ]] && configure_image "${rootfs}" | ||||||
|  |  | ||||||
|         clean_up_image "${rootfs}" |         clean_up_image "${rootfs}" | ||||||
|  |  | ||||||
|  |         : > ${work_dir}/rootfs.lock | ||||||
|  |  | ||||||
|         msg "Done [Base installation] (rootfs)" |         msg "Done [Base installation] (rootfs)" | ||||||
|     fi |     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() { | make_livefs() { | ||||||
|     if [[ ! -e ${work_dir}/livefs.lock ]]; then |     if [[ ! -e ${work_dir}/livefs.lock ]]; then | ||||||
|         msg "Prepare [Live installation] (livefs)" |         msg "Prepare [Live installation] (livefs)" | ||||||
| @@ -200,18 +148,20 @@ make_livefs() { | |||||||
|  |  | ||||||
|         prepare_dir "${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}" |         copy_overlay "${LIVE_OVERLAY}" "${livefs}" | ||||||
|  |  | ||||||
|         configure_live_image "${livefs}" |         configure_image "${livefs}" | ||||||
|  |  | ||||||
|         umount_overlay |         umount_overlay | ||||||
|  |  | ||||||
|         clean_up_image "${livefs}" |         clean_up_image "${livefs}" | ||||||
|  |  | ||||||
|  |         : > ${work_dir}/livefs.lock | ||||||
|  |  | ||||||
|         msg "Done [Live installation] (livefs)" |         msg "Done [Live installation] (livefs)" | ||||||
|     fi |     fi | ||||||
| } | } | ||||||
| @@ -227,7 +177,7 @@ make_bootfs() { | |||||||
|  |  | ||||||
|         local bootfs="${work_dir}/bootfs" |         local bootfs="${work_dir}/bootfs" | ||||||
|  |  | ||||||
|         mount_overlay "${bootfs}" "${work_dir}" "${DESKTOP_LIST}" |         mount_overlay "${bootfs}" "${work_dir}" | ||||||
|  |  | ||||||
|         prepare_initcpio "${bootfs}" |         prepare_initcpio "${bootfs}" | ||||||
|         prepare_initramfs "${bootfs}" |         prepare_initramfs "${bootfs}" | ||||||
| @@ -247,9 +197,12 @@ make_grub(){ | |||||||
|     if [[ ! -e ${work_dir}/grub.lock ]]; then |     if [[ ! -e ${work_dir}/grub.lock ]]; then | ||||||
|         msg "Prepare [/iso/boot/grub]" |         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 |         : > ${work_dir}/grub.lock | ||||||
|         msg "Done [/iso/boot/grub]" |         msg "Done [/iso/boot/grub]" | ||||||
| @@ -259,7 +212,7 @@ make_grub(){ | |||||||
| compress_images(){ | compress_images(){ | ||||||
|     local timer=$(get_timer) |     local timer=$(get_timer) | ||||||
|     run_safe "make_iso" |     run_safe "make_iso" | ||||||
|     user_own "${iso_dir}" "-R" |     chown -R "${OWNER}:$(id --group ${OWNER})" "${iso_dir}" | ||||||
|     show_elapsed_time "${FUNCNAME}" "${timer}" |     show_elapsed_time "${FUNCNAME}" "${timer}" | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -267,11 +220,7 @@ prepare_images(){ | |||||||
|     local timer=$(get_timer) |     local timer=$(get_timer) | ||||||
|     load_pkgs "${ROOT_LIST}" "${INITSYS}" |     load_pkgs "${ROOT_LIST}" "${INITSYS}" | ||||||
|     run_safe "make_rootfs" |     run_safe "make_rootfs" | ||||||
|     if [[ -f "${DESKTOP_LIST}" ]] ; then |     if [[ -n ${LIVE_LIST} ]]; then | ||||||
|         load_pkgs "${DESKTOP_LIST}" "${INITSYS}" |  | ||||||
|         run_safe "make_desktopfs" |  | ||||||
|     fi |  | ||||||
|     if [[ -f ${LIVE_LIST} ]]; then |  | ||||||
|         load_pkgs "${LIVE_LIST}" "${INITSYS}" |         load_pkgs "${LIVE_LIST}" "${INITSYS}" | ||||||
|         run_safe "make_livefs" |         run_safe "make_livefs" | ||||||
|     fi |     fi | ||||||
|   | |||||||
| @@ -54,9 +54,10 @@ load_team_id(){ | |||||||
| add_repo_to_team(){ | add_repo_to_team(){ | ||||||
|     local pkg="$1" org="$2" team="$3" |     local pkg="$1" org="$2" team="$3" | ||||||
|     local id=$(load_team_id "$org" "$team") |     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" |         -H  "accept: application/json" | ||||||
| } | } | ||||||
|   | |||||||
| @@ -23,14 +23,12 @@ get_remote_head(){ | |||||||
| get_pkg_org(){ | get_pkg_org(){ | ||||||
|     local pkg="$1" org= sub= |     local pkg="$1" org= sub= | ||||||
|     case ${pkg} in |     case ${pkg} in | ||||||
|         ruby-*) org=${pkg:0:6}; sub="${org:5}"; echo "packagesRuby" ;; |         ruby-*) org="packagesRuby" ;; | ||||||
|         perl-*) org=${pkg:0:6}; sub="${org:5}"; echo "packagesPerl" ;; |         perl-*) org="packagesPerl" ;; | ||||||
|         python-*) org=${pkg:0:8}; sub="${org:7}"; echo "packagesPython" ;; |         python-*|python2-*) org="packagesPython" ;; | ||||||
|         python2-*) org=${pkg:0:9}; sub="${org:8}"; echo "packagesPython" ;; |         *) sub=${pkg:0:1}; org="packages${sub^^}" ;; | ||||||
|         lib32*) org=${pkg:0:7}; sub="${org:6}"; echo "packagesL" ;; #"packages${sub^^}" ;; |  | ||||||
| #         lib*) org=${pkg:0:4}; sub="${org:3}"; echo "packagesLib${sub^^}" ;; |  | ||||||
|         *) org=${pkg:0:1}; echo "packages${org^^}" ;; |  | ||||||
|     esac |     esac | ||||||
|  |     echo $org | ||||||
| } | } | ||||||
|  |  | ||||||
| subrepo_push(){ | subrepo_push(){ | ||||||
| @@ -83,7 +81,7 @@ pull_tree(){ | |||||||
|     local remote_head=$(get_remote_head) |     local remote_head=$(get_remote_head) | ||||||
|  |  | ||||||
|     msg "Checking %s (%s)" "${tree}" "$os" |     msg "Checking %s (%s)" "${tree}" "$os" | ||||||
|     if $(has_changes "${local_head}" "${remote_head}");then |     if has_changes "${local_head}" "${remote_head}";then | ||||||
|         git pull origin master |         git pull origin master | ||||||
|     fi |     fi | ||||||
| } | } | ||||||
| @@ -141,22 +139,3 @@ config_tree(){ | |||||||
|         fi |         fi | ||||||
|     cd .. |     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" |  | ||||||
| } |  | ||||||
|   | |||||||
| @@ -109,7 +109,7 @@ find_repo(){ | |||||||
|     local pkg="$1" stag="$2" unst="$3" repo= |     local pkg="$1" stag="$2" unst="$3" repo= | ||||||
|  |  | ||||||
|     for r in $(arch_repos "$stag" "$unst");do |     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 |         [[ -f $pkg/repos/$r-any/PKGBUILD ]] && repo=$r-any | ||||||
|     done |     done | ||||||
|     echo $repo |     echo $repo | ||||||
| @@ -127,7 +127,8 @@ is_valid_repo(){ | |||||||
| } | } | ||||||
|  |  | ||||||
| get_cases(){ | 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 _space="s| ||g" _clean=':a;N;$!ba;s/\n/ /g' _com_rm="s|#.*||g" | ||||||
|  |  | ||||||
|     local pkgs=($(sed "$_com_rm" "$pkglist" | sed "$_space" | sed "$_clean")) |     local pkgs=($(sed "$_com_rm" "$pkglist" | sed "$_space" | sed "$_clean")) | ||||||
| @@ -143,22 +144,28 @@ get_artix_tree(){ | |||||||
|     local pkg="$1" artix_tree="${2:-$3}" tree |     local pkg="$1" artix_tree="${2:-$3}" tree | ||||||
|     eval "case $pkg in |     eval "case $pkg in | ||||||
|         $(get_cases kernel)) tree=packages-kernel ;; |         $(get_cases kernel)) tree=packages-kernel ;; | ||||||
|         python-*|python2-*) tree=packages-python ;; |         $(get_cases python)) tree=packages-python ;; | ||||||
|         perl-*) tree=packages-perl ;; |         $(get_cases perl)) tree=packages-perl ;; | ||||||
|         ruby-*) tree=packages-ruby ;; |         $(get_cases ruby)) tree=packages-ruby ;; | ||||||
|         xorg*|xf86*|$(get_cases xorg)) tree=packages-xorg ;; |         $(get_cases openrc)) tree=packages-openrc ;; | ||||||
|         *-openrc) tree=packages-openrc ;; |         $(get_cases runit)) tree=packages-runit ;; | ||||||
|         *-runit) tree=packages-runit ;; |         $(get_cases s6)) tree=packages-s6 ;; | ||||||
|         qt5-*) tree=packages-qt5 ;; |         $(get_cases media)) tree=packages-media ;; | ||||||
|         lxqt*|$(get_cases lxqt)) tree=packages-lxqt ;; |         $(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 |         *) tree=$artix_tree | ||||||
|     esac" |     esac" | ||||||
|     echo $tree |     echo $tree | ||||||
|  |  | ||||||
| #         $(get_cases freedesktop)) tree=packages-desktop ;; |  | ||||||
| #         $(get_cases kde)) tree=packages-kde ;; |  | ||||||
| #         $(get_cases gnome)) tree=packages-gnome ;; |  | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| get_import_path(){ | get_import_path(){ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user