Compare commits
	
		
			34 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| b4e6dface6 | |||
| fa38579488 | |||
| 07c1605666 | |||
| bfde5dbbb1 | |||
| 0918ff749d | |||
| 3d3e4376c5 | |||
| 7499878d00 | |||
| d9e99543f6 | |||
| 43983042dd | |||
| 1b5f09076f | |||
| d770030869 | |||
| ea06ec0b2e | |||
| e67990ae04 | |||
| b37d5f0236 | |||
| 989af04593 | |||
| 90f46d7ecc | |||
| 8e872ca9ca | |||
| 05c95b7025 | |||
| 442aee08df | |||
| 2c497f663b | |||
| 9a84cdedd5 | |||
| bcc807ebbc | |||
| 6b00319bfc | |||
| c24f625d81 | |||
| 15ca2bfc7e | |||
| 2487f4655e | |||
| c2fd4636a3 | |||
| a82b704c2b | |||
| 1aa6a644b0 | |||
| ff3ea53482 | |||
| d0e3c4e421 | |||
| 1659689e71 | |||
| 81ebb6c399 | |||
| ea66cb27fc | 
							
								
								
									
										49
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								Makefile
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| VERSION=0.10 | ||||
| VERSION=0.11 | ||||
|  | ||||
| CHROOT_VERSION=0.8 | ||||
| CHROOT_VERSION=0.9 | ||||
|  | ||||
| TOOLS = artools | ||||
| PREFIX ?= /usr/local | ||||
| @@ -26,7 +26,8 @@ LIBS_BASE = \ | ||||
| 	lib/util-msg.sh \ | ||||
| 	lib/util-mount.sh \ | ||||
| 	lib/util-chroot.sh \ | ||||
| 	lib/util-fstab.sh | ||||
| 	lib/util-fstab.sh \ | ||||
| 	lib/util-yaml.sh | ||||
|  | ||||
| SHARED_BASE = \ | ||||
| 	$(wildcard data/pacman*.conf) | ||||
| @@ -40,7 +41,9 @@ BIN_PKG = \ | ||||
| 	bin/buildpkg \ | ||||
| 	bin/buildtree \ | ||||
| 	bin/deploypkg \ | ||||
| 	bin/commitpkg | ||||
| 	bin/commitpkg \ | ||||
| 	bin/comparepkg \ | ||||
| 	bin/pkg2yaml | ||||
|  | ||||
| LIBS_PKG = \ | ||||
| 	$(wildcard lib/util-pkg*.sh) | ||||
| @@ -61,13 +64,43 @@ COMMITPKG_SYMS = \ | ||||
| 	community-stagingpkg \ | ||||
| 	multilibpkg \ | ||||
| 	multilib-testingpkg \ | ||||
| 	multilib-stagingpkg | ||||
| 	multilib-stagingpkg \ | ||||
| 	kde-unstablepkg \ | ||||
| 	gnome-unstablepkg | ||||
|  | ||||
| BUILDPKG_SYMS = \ | ||||
| 	buildpkg-system \ | ||||
| 	buildpkg-world \ | ||||
| 	buildpkg-gremlins \ | ||||
| 	buildpkg-goblins \ | ||||
| 	buildpkg-galaxy \ | ||||
| 	buildpkg-galaxy-gremlins \ | ||||
| 	buildpkg-galaxy-goblins \ | ||||
| 	buildpkg-lib32 \ | ||||
| 	buildpkg-lib32-gremlins \ | ||||
| 	buildpkg-lib32-goblins \ | ||||
| 	buildpkg-kde-wobble \ | ||||
| 	buildpkg-gnome-wobble | ||||
|  | ||||
| DEPLOYPKG_SYMS = \ | ||||
| 	deploypkg-system \ | ||||
| 	deploypkg-world \ | ||||
| 	deploypkg-gremlins \ | ||||
| 	deploypkg-goblins \ | ||||
| 	deploypkg-galaxy \ | ||||
| 	deploypkg-galaxy-gremlins \ | ||||
| 	deploypkg-galaxy-goblins \ | ||||
| 	deploypkg-lib32 \ | ||||
| 	deploypkg-lib32-gremlins \ | ||||
| 	deploypkg-lib32-goblins \ | ||||
| 	deploypkg-kde-wobble \ | ||||
| 	deploypkg-gnome-wobble | ||||
|  | ||||
| BIN_ISO = \ | ||||
| 	bin/buildiso \ | ||||
| 	bin/deployiso | ||||
|  | ||||
| BIN_ISO_SYMS = \ | ||||
| BUILDISO_SYMS = \ | ||||
| 	buildiso-gremlins \ | ||||
| 	buildiso-goblins | ||||
|  | ||||
| @@ -125,6 +158,8 @@ install_pkg: | ||||
| 	$(LN) find-libdeps $(DESTDIR)$(BINDIR)/find-libprovides | ||||
|  | ||||
| 	for l in $(COMMITPKG_SYMS); do $(LN) commitpkg $(DESTDIR)$(BINDIR)/$$l; done | ||||
| 	for l in $(BUILDPKG_SYMS); do $(LN) buildpkg $(DESTDIR)$(BINDIR)/$$l; done | ||||
| 	for l in $(DEPLOYPKG_SYMS); do $(LN) deploypkg $(DESTDIR)$(BINDIR)/$$l; done | ||||
|  | ||||
| 	install $(DIRMODE) $(DESTDIR)$(LIBDIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(LIBS_PKG) $(DESTDIR)$(LIBDIR)/$(TOOLS) | ||||
| @@ -141,7 +176,7 @@ install_iso: install_cpio | ||||
| 	install $(DIRMODE) $(DESTDIR)$(BINDIR) | ||||
| 	install $(MODE) $(BIN_ISO) $(DESTDIR)$(BINDIR) | ||||
|  | ||||
| 	for l in $(BIN_ISO_SYMS); do $(LN) buildiso $(DESTDIR)$(BINDIR)/$$l; done | ||||
| 	for l in $(BUILDISO_SYMS); do $(LN) buildiso $(DESTDIR)$(BINDIR)/$$l; done | ||||
|  | ||||
| 	install $(DIRMODE) $(DESTDIR)$(LIBDIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(LIBS_ISO) $(DESTDIR)$(LIBDIR)/$(TOOLS) | ||||
|   | ||||
| @@ -50,29 +50,15 @@ select_os(){ | ||||
|     fi | ||||
| } | ||||
|  | ||||
| display_settings(){ | ||||
|     show_version | ||||
|     show_config | ||||
|  | ||||
|     msg "ARGS:" | ||||
|     msg2 "automount: %s" "${automount}" | ||||
|     msg2 "run_args: %s" "${run_args[*]}" | ||||
|  | ||||
|     msg "PATHS:" | ||||
|     msg2 "chrootdir: %s" "${chrootdir}" | ||||
| } | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
|  | ||||
| automount=false | ||||
| pretend=false | ||||
|  | ||||
| usage() { | ||||
|     echo "usage: ${0##*/} -a [or] ${0##*/} chroot-dir [command]" | ||||
|     echo '    -a             Automount detected linux system' | ||||
|     echo '    -q             Query settings and pretend' | ||||
|     echo '    -h             Print this help message' | ||||
|     echo '' | ||||
|     echo "    If 'command' is unspecified, ${0##*/} will launch /bin/sh." | ||||
| @@ -86,12 +72,11 @@ usage() { | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts=':haq' | ||||
| opts=':ha' | ||||
|  | ||||
| while getopts ${opts} arg; do | ||||
|     case "${arg}" in | ||||
|         a) automount=true ;; | ||||
|         q) pretend=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument ${arg}"; usage 1 ;; | ||||
|     esac | ||||
| @@ -104,8 +89,6 @@ if ${automount};then | ||||
|     chrootdir=/mnt | ||||
|     run_args=/bin/bash | ||||
|  | ||||
|     ${pretend} && display_settings && exit 1 | ||||
|  | ||||
|     select_os "${chrootdir}" | ||||
| else | ||||
|     chrootdir=$1 | ||||
| @@ -114,8 +97,6 @@ else | ||||
|  | ||||
|     [[ -d ${chrootdir} ]] || die "Can't create chroot on non-directory %s" "${chrootdir}" | ||||
|  | ||||
|     ${pretend} && display_settings && exit 1 | ||||
|  | ||||
|     chroot_api_mount "${chrootdir}" || die "failed to setup API filesystems in chroot %s" "${chrootdir}" | ||||
|     chroot_add_resolv_conf "${chrootdir}" | ||||
| fi | ||||
|   | ||||
| @@ -35,9 +35,6 @@ create_min_fs(){ | ||||
|     mkdir -m 0755 -p $1/var/{cache/pacman/pkg,lib/pacman,log} $1/{dev,etc} | ||||
|     mkdir -m 1777 -p $1/{tmp,run} | ||||
|     mkdir -m 0555 -p $1/{sys,proc} | ||||
| #     if [[ ! -f $1/etc/machine-id ]];then | ||||
| #         touch $1/etc/machine-id | ||||
| #     fi | ||||
| } | ||||
|  | ||||
| newroot=/mnt | ||||
|   | ||||
| @@ -49,34 +49,11 @@ prepare_build(){ | ||||
|     prepare_dir "${iso_root}" | ||||
| } | ||||
|  | ||||
| show_profile(){ | ||||
|     msg2 "iso_file: %s" "${iso_file}" | ||||
|     if ${verbose};then | ||||
|         msg2 "AUTOLOGIN: %s" "${AUTOLOGIN}" | ||||
|         msg2 "HOST_NAME: %s" "${HOST_NAME}" | ||||
|         msg2 "USER_NAME: %s" "${USER_NAME}" | ||||
|         msg2 "PASSWORD: %s" "${PASSWORD}" | ||||
|         msg2 "ADDGROUPS: %s" "${ADDGROUPS}" | ||||
|         msg2 "SERVICES_LIVE: %s" "${SERVICES_LIVE[*]}" | ||||
|         msg2 "SERVICES: %s" "${SERVICES[*]}" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| display_settings(){ | ||||
|     show_version | ||||
|     show_config | ||||
|  | ||||
|     msg "OPTIONS:" | ||||
|     msg2 "PROFILE: %s" "${PROFILE}" | ||||
|     msg2 "INITSYS: %s" "${INITSYS}" | ||||
|     [[ -n ${GPG_KEY} ]] && msg2 "GPG_KEY: %s" "${GPG_KEY}" | ||||
|     msg2 "REPOSITORY: %s" "${REPOSITORY}" | ||||
|  | ||||
|     msg "ARGS:" | ||||
|     msg2 "clean_first: %s" "${clean_first}" | ||||
|     msg2 "images_only: %s" "${images_only}" | ||||
|     msg2 "iso_only: %s" "${iso_only}" | ||||
|     msg2 "persist: %s" "${persist}" | ||||
|  | ||||
|     msg "ISO SETTINGS:" | ||||
|     msg2 "ISO_VERSION: %s" "${ISO_VERSION}" | ||||
| @@ -104,13 +81,13 @@ build(){ | ||||
|     fi | ||||
|  | ||||
|     if ${iso_only}; then | ||||
|         [[ ! -d ${work_dir} ]] && die "Create images: buildiso -p %s -x" "${PROFILE}" | ||||
|         [[ ! -d ${work_dir} ]] && die "Create images: %s -p %s -x" "${cmd}" "${PROFILE}" | ||||
|         compress_images | ||||
|         exit 1 | ||||
|     fi | ||||
|     if ${images_only}; then | ||||
|         prepare_images | ||||
|         warning "Continue compress: buildiso -p %s -zc ..." "${PROFILE}" | ||||
|         warning "Continue compress: %s -p %s -zc ..." "${cmd}" "${PROFILE}" | ||||
|         exit 1 | ||||
|     else | ||||
|         prepare_images | ||||
| @@ -128,7 +105,7 @@ clean_first=true | ||||
| pretend=false | ||||
| images_only=false | ||||
| iso_only=false | ||||
| verbose=false | ||||
| log=false | ||||
| persist=false | ||||
|  | ||||
| mkchroot_args=() | ||||
| @@ -137,7 +114,7 @@ cmd=${0##*/} | ||||
| REPOSITORY=${cmd##*-} | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options]" | ||||
|     echo "Usage: ${cmd} [options]" | ||||
|     echo "    -p <profile>       Profile [default: ${PROFILE}]" | ||||
|     echo '    -r <dir>           Chroots directory' | ||||
|     echo "                       [default: ${CHROOTS_ISO}]" | ||||
| @@ -152,7 +129,7 @@ usage() { | ||||
|     echo '    -x                 Build images only' | ||||
|     echo '    -z                 Generate iso only' | ||||
|     echo '                       Requires pre built images (-x)' | ||||
|     echo '    -v                 Verbose output to log file, show profile detail (-q)' | ||||
|     echo '    -l                 Log to file' | ||||
|     echo '    -q                 Query settings and pretend build' | ||||
|     echo '    -h                 This help' | ||||
|     echo '' | ||||
| @@ -162,7 +139,7 @@ usage() { | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts='p:r:t:i:g:czxmvqh' | ||||
| opts='p:r:t:i:g:czxmlqh' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
| @@ -175,7 +152,7 @@ while getopts "${opts}" arg; do | ||||
|         x) images_only=true ;; | ||||
|         z) iso_only=true ;; | ||||
|         m) persist=true ;; | ||||
|         v) verbose=true ;; | ||||
|         l) log=true ;; | ||||
|         q) pretend=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
| @@ -184,12 +161,12 @@ done | ||||
|  | ||||
| shift $(($OPTIND - 1)) | ||||
|  | ||||
| ${pretend} && display_settings && exit 1 | ||||
|  | ||||
| check_root | ||||
|  | ||||
| prepare_traps | ||||
|  | ||||
| prepare_build | ||||
|  | ||||
| ${pretend} && display_settings && exit 1 | ||||
|  | ||||
| build | ||||
|   | ||||
							
								
								
									
										128
									
								
								bin/buildpkg.in
									
									
									
									
									
								
							
							
						
						
									
										128
									
								
								bin/buildpkg.in
									
									
									
									
									
								
							| @@ -11,122 +11,70 @@ | ||||
|  | ||||
| VERSION=@version@ | ||||
|  | ||||
| shopt -s nullglob | ||||
|  | ||||
| LIBDIR='@libdir@' | ||||
| DATADIR='@datadir@' | ||||
| SYSCONFDIR='@sysconfdir@' | ||||
| DATADIR='@datadir@' | ||||
|  | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util.sh | ||||
| import ${LIBDIR}/util-chroot.sh | ||||
|  | ||||
| show_pkg(){ | ||||
|     source PKGBUILD | ||||
|     for n in ${pkgname[@]}; do | ||||
|         msg2 "%s" "$n" | ||||
|     done | ||||
| } | ||||
|  | ||||
| display_settings(){ | ||||
|     show_version | ||||
|     show_config | ||||
|  | ||||
|     msg "OPTIONS:" | ||||
|     msg2 "CHROOTS_PKG: %s" "${CHROOTS_PKG}" | ||||
|     msg2 "REPOSITORY: %s" "${REPOSITORY}" | ||||
|  | ||||
|     msg "ARGS:" | ||||
|     msg2 "create_first: %s" "${create_first}" | ||||
|     msg2 "makepkg_args: %s" "${makepkg_args[*]}" | ||||
|     msg2 "mkchrootpkg_args: %s" "${mkchrootpkg_args[*]}" | ||||
|  | ||||
|     msg "BUILD:" | ||||
|     show_pkg | ||||
| } | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
|  | ||||
| create_first=false | ||||
| pretend=false | ||||
|  | ||||
| mkchroot_args=() | ||||
| mkchrootpkg_args=(-c -n) | ||||
|  | ||||
| REPOSITORY='default' | ||||
| cmd=${0##*/} | ||||
| repo=${cmd#*-} | ||||
| base_devel=('base-devel') | ||||
|  | ||||
| prepare_build(){ | ||||
|     local pac_file= mp_file='makepkg.conf' | ||||
| case ${repo} in | ||||
|     system|world|galaxy) repo='default' ;; | ||||
|     lib32*) base_devel+=('multilib-devel') ;; | ||||
|     galaxy-gremlins|galaxy-goblins) repo=${repo#*-} ;; | ||||
| esac | ||||
|  | ||||
|     base_devel=('base-devel') | ||||
| pacman_conf="${DATADIR}/pacman-${repo}.conf" | ||||
| [[ -f $AT_USERCONFDIR/pacman-${repo}.conf ]] && pacman_conf="$AT_USERCONFDIR/pacman-${repo}.conf" | ||||
|  | ||||
|     case ${REPOSITORY} in | ||||
|         'system'|'world'|'galaxy') REPOSITORY='default' ;; | ||||
|         lib32*) base_devel+=('multilib-devel') ;; | ||||
|         galaxy-gremlins|galaxy-goblins) REPOSITORY=${REPOSITORY#*-} ;; | ||||
|     esac | ||||
|     local pac_file="pacman-${REPOSITORY}.conf" | ||||
|  | ||||
|     local pacman_conf="${DATADIR}/$pac_file" | ||||
|     [[ -f $AT_USERCONFDIR/$pac_file ]] && pacman_conf="$AT_USERCONFDIR/$pac_file" | ||||
|  | ||||
|     work_dir="${CHROOTS_PKG}/${REPOSITORY}-${ARCH}" | ||||
|  | ||||
|     local makepkg_conf="${DATADIR}/$mp_file" | ||||
|     [[ -f $AT_USERCONFDIR/$mp_file ]] && makepkg_conf="$AT_USERCONFDIR/$mp_file" | ||||
|  | ||||
|     mkchroot_args+=(-C "${pacman_conf}" -M "${makepkg_conf}" "${work_dir}/root") | ||||
|  | ||||
|     mkchrootpkg_args+=(-r "${work_dir}" "${makepkg_args[@]}") | ||||
| } | ||||
|  | ||||
| build(){ | ||||
|     local timer_start=$(get_timer) | ||||
|  | ||||
|     exec mkchrootpkg "${mkchrootpkg_args[@]}" | ||||
|     show_elapsed_time "${FUNCNAME}" "${timer_start}" | ||||
| } | ||||
| makepkg_conf="${DATADIR}/makepkg.conf" | ||||
| [[ -f $AT_USERCONFDIR/makepkg.conf ]] && makepkg_conf="$AT_USERCONFDIR/makepkg.conf" | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options] -- [makepkg_args]" | ||||
|     echo "    -r <dir>           Repository [default: ${REPOSITORY}]" | ||||
|     echo '    -c                 Create root chroot' | ||||
|     echo '    -q                 Query settings and pretend build' | ||||
|     echo "Usage: ${0##*/} [options] -- [mkchrootpkg_args]" | ||||
|     echo "    -r <dir>           Create chroots in this directory" | ||||
|     echo '    -c                 Recreate the chroot before building' | ||||
|     echo '    -h                 This help' | ||||
|     echo '' | ||||
|     echo "Default makepkg_args args: ${makepkg_args[*]}" | ||||
|     echo "Default mkchrootpkg_args args: ${mkchrootpkg_args[*]}" | ||||
|     echo '' | ||||
|     exit $1 | ||||
| } | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts='r:cqh' | ||||
| opts='hcr:' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
|         r) REPOSITORY="$OPTARG" ;; | ||||
|         r) CHROOTS_PKG="$OPTARG" ;; | ||||
|         c) create_first=true ;; | ||||
|         q) pretend=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '%s'" "${arg}"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
| makepkg_args+=("${@:$OPTIND}") | ||||
| check_root SOURCE_DATE_EPOCH | ||||
|  | ||||
| check_root | ||||
| mkchrootpkg_args+=("${@:$OPTIND}") | ||||
|  | ||||
| prepare_build | ||||
| if ${create_first} || [[ ! -d "${CHROOTS_PKG}/${repo}-${ARCH}" ]];then | ||||
|     msg "Creating chroot for [%s] (%s)..." "${repo}" "${ARCH}" | ||||
|  | ||||
| ${pretend} && display_settings && exit | ||||
|  | ||||
| if ${create_first} || [[ ! -d ${work_dir}/root ]];then | ||||
|     msg "Creating chroot for [%s] (%s)..." "${REPOSITORY}" "${ARCH}" | ||||
|  | ||||
|     for copy in "${work_dir}"/*; do | ||||
|     for copy in "${CHROOTS_PKG}/${repo}-${ARCH}"/*; do | ||||
|         [[ -d $copy ]] || continue | ||||
|         msg2 "Deleting chroot copy '%s'..." "$(basename "${copy}")" | ||||
|  | ||||
| @@ -137,14 +85,30 @@ if ${create_first} || [[ ! -d ${work_dir}/root ]];then | ||||
|     done | ||||
|     lock_close 9 | ||||
|  | ||||
|     rm -rf --one-file-system "${work_dir}" | ||||
|     mkdir -p "${work_dir}" | ||||
|     rm -rf --one-file-system "${CHROOTS_PKG}/${repo}-${ARCH}" | ||||
|     mkdir -p "${CHROOTS_PKG}/${repo}-${ARCH}" | ||||
|     setarch "${ARCH}" mkchroot \ | ||||
|         "${mkchroot_args[@]}"  "${base_devel[@]}" || abort | ||||
|         -C "${pacman_conf}" \ | ||||
|         -M "${makepkg_conf}" \ | ||||
|         "${CHROOTS_PKG}/${repo}-${ARCH}/root" \ | ||||
|         "${base_devel[@]}" || abort | ||||
| else | ||||
|     lock 9 "${work_dir}/root.lock" "Locking clean chroot" | ||||
|     chroot-run "${mkchroot_args[@]}" \ | ||||
|     lock 9 "${CHROOTS_PKG}/${repo}-${ARCH}/root.lock" "Locking clean chroot" | ||||
|     chroot-run \ | ||||
|         -C "${pacman_conf}" \ | ||||
|         -M "${makepkg_conf}" \ | ||||
|         "${CHROOTS_PKG}/${repo}-${ARCH}/root" \ | ||||
|         pacman -Syu --noconfirm || abort | ||||
| fi | ||||
|  | ||||
| build | ||||
| # Always build official packages reproducibly | ||||
| if [[ ! -v SOURCE_DATE_EPOCH ]]; then | ||||
|     export SOURCE_DATE_EPOCH=$(date +%s) | ||||
| fi | ||||
|  | ||||
| timer_start=$(get_timer) | ||||
|  | ||||
| msg "Building in chroot for [%s] (%s)..." "${repo}" "${ARCH}" | ||||
| exec mkchrootpkg -r "${CHROOTS_PKG}/${repo}-${ARCH}" "${mkchrootpkg_args[@]}" | ||||
|  | ||||
| show_elapsed_time "${FUNCNAME}" "${timer_start}" | ||||
|   | ||||
							
								
								
									
										208
									
								
								bin/buildtree.in
									
									
									
									
									
								
							
							
						
						
									
										208
									
								
								bin/buildtree.in
									
									
									
									
									
								
							| @@ -23,113 +23,56 @@ import ${LIBDIR}/util-pkg-subrepo.sh | ||||
|  | ||||
| pull_tree_arch(){ | ||||
|     cd ${TREE_DIR_ARCH} | ||||
|     for tree in packages community;do | ||||
|     for tree in ${tree_names[@]};do | ||||
|         if [[ -d ${tree} ]];then | ||||
|             cd ${tree} | ||||
|             msg "Checking (%s)" "${tree}" | ||||
|             pull_tree | ||||
|             pull_tree "${tree}" | ||||
|             cd .. | ||||
|         else | ||||
|             msg "Cloning (%s) ..." "$tree" | ||||
|             clone_tree "${HOST_TREE_ARCH}/${tree}" | ||||
|             clone_tree "${HOST_TREE_ARCH}" "${tree}" | ||||
|         fi | ||||
|     done | ||||
| } | ||||
|  | ||||
| config_tree(){ | ||||
|     local tree="$1" | ||||
|     cd $tree | ||||
|         git config --bool pull.rebase true | ||||
|         git config commit.gpgsign true | ||||
|         if [[ -n "${GPGKEY}" ]];then | ||||
|             git config user.signingkey "${GPGKEY}" | ||||
|         else | ||||
|             warning "No GPGKEY configured in makepkg.conf!" | ||||
|         fi | ||||
|     cd .. | ||||
| } | ||||
|  | ||||
| pull_tree_artix(){ | ||||
|     cd ${TREE_DIR_ARTIX} | ||||
|     for tree in packages packages-galaxy;do | ||||
|     for tree in ${tree_names[@]};do | ||||
|         if [[ -d ${tree} ]];then | ||||
|             config_tree "${tree}" | ||||
|             cd ${tree} | ||||
|             msg "Checking (%s)" "${tree}" | ||||
|             pull_tree | ||||
|             pull_tree "${tree}" | ||||
|             cd .. | ||||
|         else | ||||
|             msg "Cloning (%s) ..." "$tree" | ||||
|             clone_tree "${HOST_TREE_ARTIX}/${tree}" | ||||
|             clone_tree "${HOST_TREE_ARTIX}" "${tree}" | ||||
|             config_tree "${tree}" | ||||
|         fi | ||||
|     done | ||||
| } | ||||
|  | ||||
| show_version_table(){ | ||||
|     msg_table_header "%-20s %-20s %-25s %-30s %-30s" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version" | ||||
|     for tree in packages packages-galaxy;do | ||||
|         local git=$(find ${TREE_DIR_ARTIX}/$tree/ -mindepth 1 -maxdepth 1 -type d) | ||||
|         for pkg_path in ${git[@]}; do | ||||
|             local artixrepo=$(find_repo "$pkg_path" "${unstable}" "${staging}") | ||||
|             if [[ -d $pkg_path/repos/$artixrepo ]];then | ||||
|                 source $pkg_path/repos/$artixrepo/PKGBUILD 2>/dev/null | ||||
|                 local pkg=${pkg_path##*/} | ||||
|                 local artixver=$(get_full_version $pkg) | ||||
|                 local src=$(get_import_path "$tree" "$pkg") | ||||
|                 local archrepo=$(find_repo "$src/$pkg" "${unstable}" "${staging}") | ||||
|                 if [[ -d $src/$pkg/repos/$archrepo ]];then | ||||
|                     source $src/$pkg/repos/$archrepo/PKGBUILD 2>/dev/null | ||||
|                     local archver=$(get_full_version $pkg) | ||||
|                 fi | ||||
|                 if ${artix};then | ||||
|                     if [ $(vercmp "$artixver" "$archver") -eq 0 ] || [ $(vercmp "$artixver" "$archver") -gt 0 ];then | ||||
|                         local ar=$(find_artix_name "$artixrepo") | ||||
|                         case $ar in | ||||
|                             *goblins) | ||||
|                                 if [[ "$archrepo" == "$artixrepo" ]];then | ||||
|                                     msg_row "%-20s %-20s %-25s %-30s %-30s" "${archrepo%-*}" "${ar}" "$pkg" "$archver" "$artixver" | ||||
|                                 else | ||||
|                                     msg_row_notify "%-20s %-20s %-25s %-30s %-30s" "${archrepo%-*}" "${ar}" "$pkg" "$archver" "$artixver" | ||||
|                                 fi | ||||
|                             ;; | ||||
|                             *gremlins) | ||||
|                                 if [[ "$archrepo" == "$artixrepo" ]];then | ||||
|                                     msg_row "%-20s %-20s %-25s %-30s %-30s" "${archrepo%-*}" "${ar}" "$pkg" "$archver" "$artixver" | ||||
|                                 else | ||||
|                                     msg_row_notify "%-20s %-20s %-25s %-30s %-30s" "${archrepo%-*}" "${ar}" "$pkg" "$archver" "$artixver" | ||||
|                                 fi | ||||
|                             ;; | ||||
|                         esac | ||||
|                     fi | ||||
|                 else | ||||
|                     if [ $(vercmp "$artixver" "$archver") -lt 0 ];then | ||||
|                         local ar=$(find_artix_name "$artixrepo") | ||||
|                         ${upgrades} && msg_row_upgrade "%-20s %-20s %-25s %-30s %-30s" "${archrepo%-*}" "${ar}" "$pkg" "$archver" "$artixver" | ||||
|                     fi | ||||
|                     if [ $(vercmp "$artixver" "$archver") -gt 0 ];then | ||||
|                         local ar=$(find_artix_name "$artixrepo") | ||||
|                         if [[ -n $archver ]] && [[ -n $archrepo ]];then | ||||
|                             ${downgrades} && msg_row_downgrade "%-20s %-20s %-25s %-30s %-30s" "${archrepo%-*}" "${ar}" "$pkg" "$archver" "$artixver" | ||||
|                         fi | ||||
|                     fi | ||||
|                 fi | ||||
|                 unset pkgver epoch pkgrel artixver archver | ||||
|             fi | ||||
|         done | ||||
|     done | ||||
| sync_pkg(){ | ||||
|     local rsync_args=(-aWxvci --progress --delete-before --no-R --no-implied-dirs) | ||||
|     local src="$1" dest="$2" | ||||
|  | ||||
|     rsync "${rsync_args[@]}" $src/ $dest/ | ||||
| } | ||||
|  | ||||
| show_deps(){ | ||||
|     local src="$1" repo="$2" | ||||
|  | ||||
|     source $src/PKGBUILD 2>/dev/null | ||||
|  | ||||
|     [[ $arch == 'any' ]] && CARCH=any | ||||
|  | ||||
|     local archver=$(get_full_version $pkg) | ||||
|  | ||||
|     msg "git tree: %s" "$git_tree_arch" | ||||
|     msg2 "repo: %s" "$repo" | ||||
|     msg2 "Package Name: %s" "$pkg" | ||||
|     [[ -n ${pkgbase} ]] && msg2 "pkgbase: %s" "${pkgbase}" | ||||
|     msg2 "pkgname: %s" "${pkgname[*]}" | ||||
|     [[ -n $pkgdesc ]] && msg2 "pkgdesc: %s" "${pkgdesc}" | ||||
|     msg2 "Arch Version: %s" "$archver" | ||||
|     msg2 "arch: %s" "$CARCH" | ||||
|  | ||||
|     [[ -n ${makedepends[@]} ]] && msg2 "makedepends: %s" "${makedepends[*]}" | ||||
|     [[ -n ${checkdepends[@]} ]] && msg2 "checkdepends: %s" "${checkdepends[*]}" | ||||
|     [[ -n ${depends[@]} ]] && msg2 "depends: %s" "${depends[*]}" | ||||
| @@ -141,45 +84,29 @@ from_arch(){ | ||||
|     local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "$pkg") | ||||
|     [[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "$pkg" | ||||
|  | ||||
|     local pkg_path=${TREE_DIR_ARCH}/$git_tree_arch/$pkg | ||||
|     local repo=$(find_repo "$pkg_path" "${unstable}") | ||||
|     local package=${TREE_DIR_ARCH}/$git_tree_arch/$pkg | ||||
|     local repo=$(find_repo "$package") | ||||
|  | ||||
|     src=$pkg_path/repos/$repo | ||||
|     $trunk && src=$pkg_path/trunk | ||||
|     src=$package/repos/$repo | ||||
|  | ||||
|     local git_tree_artix=$(find_tree "${TREE_DIR_ARTIX}" "$pkg") | ||||
|     dest=${TREE_DIR_ARTIX}/$git_tree_artix/$pkg/trunk | ||||
|  | ||||
|     cd ${TREE_DIR_ARCH}/$git_tree_arch | ||||
|     dest=${TREE_DIR_ARTIX}/$git_tree_arch/$pkg/trunk | ||||
|  | ||||
|     show_deps "$src" "$repo" | ||||
|  | ||||
|     if [[ -d $dest ]];then | ||||
|         cd ${TREE_DIR_ARTIX}/$git_tree_artix | ||||
|         cd ${TREE_DIR_ARTIX}/$git_tree_arch | ||||
|  | ||||
|         source $dest/PKGBUILD 2>/dev/null | ||||
|         local artixver=$(get_full_version $pkg) | ||||
|  | ||||
|         msg2 "Artix Version: %s" "$artixver" | ||||
|         info "Update from archlinux (%s)" "$git_tree_arch" | ||||
|         rsync "${rsync_args[@]}" $src/ $dest/ | ||||
|         patch_pkg "$pkg" "$tree" | ||||
|     else | ||||
|         [[ $git_tree_arch == 'packages' ]] && git_tree_artix=$git_tree_arch | ||||
|         [[ $git_tree_arch == 'community' ]] && git_tree_artix='packages-galaxy' | ||||
|  | ||||
|         cd ${TREE_DIR_ARTIX}/$git_tree_artix | ||||
|  | ||||
|         dest=${TREE_DIR_ARTIX}/$git_tree_artix/$pkg/trunk | ||||
|  | ||||
|         create_repo "$pkg" | ||||
|         add_repo_to_team "$pkg" "$pkg_path" | ||||
|         subrepo_clone "$pkg" | ||||
|  | ||||
|         info "Import from archlinux (%s)" "$git_tree_arch" | ||||
|         rsync "${rsync_args[@]}" $src/ $dest/ | ||||
|         patch_pkg "$pkg" "$tree" | ||||
|         subrepo_new "$pkg" "$git_tree_arch" | ||||
|     fi | ||||
|  | ||||
|     info "Sync from archlinux (%s)" "$git_tree_arch" | ||||
|     sync_pkg "$src" "$dest" | ||||
|     patch_pkg "$pkg" | ||||
| } | ||||
|  | ||||
| view_build(){ | ||||
| @@ -188,7 +115,7 @@ view_build(){ | ||||
|     [[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "$pkg" | ||||
|  | ||||
|     local pkg_path=${TREE_DIR_ARCH}/$git_tree_arch/$pkg | ||||
|     local repo=$(find_repo "$pkg_path" "${unstable}") | ||||
|     local repo=$(find_repo "$pkg_path") | ||||
|  | ||||
|     src=$pkg_path/repos/$repo | ||||
|  | ||||
| @@ -200,68 +127,37 @@ sync_repos(){ | ||||
|     pull_tree_artix | ||||
| } | ||||
|  | ||||
| display_settings(){ | ||||
|     show_version | ||||
|     show_config | ||||
|  | ||||
|     msg "OPTIONS:" | ||||
|     msg2 "PACKAGE: %s" "${PACKAGE}" | ||||
|  | ||||
|     msg "ARGS:" | ||||
|     msg2 "sync: %s" "${sync}" | ||||
|     msg2 "sync_arch: %s" "${sync_arch}" | ||||
|     msg2 "compare: %s" "${compare}" | ||||
|     msg2 "upgrades: %s" "${upgrades}" | ||||
|     msg2 "downgrades: %s" "${downgrades}" | ||||
|     msg2 "artix: %s" "${artix}" | ||||
|     msg2 "staging: %s" "${staging}" | ||||
|     msg2 "unstable: %s" "${unstable}" | ||||
|     msg2 "import: %s" "${import}" | ||||
|     msg2 "view: %s" "${view}" | ||||
|     msg2 "trunk: %s" "${trunk}" | ||||
|  | ||||
|     msg "PATHS:" | ||||
|     msg2 "TREE_DIR_ARTIX: %s" "${TREE_DIR_ARTIX}" | ||||
|     msg2 "TREE_DIR_ARCH: %s" "${TREE_DIR_ARCH}" | ||||
| } | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
| load_vars "${PAC_USERCONFDIR}/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
| load_vars /etc/makepkg.conf | ||||
|  | ||||
| pretend=false | ||||
| sync=false | ||||
| sync_arch=true | ||||
| compare=false | ||||
| unstable=false | ||||
| staging=true | ||||
| upgrades=false | ||||
| downgrades=false | ||||
| artix=false | ||||
| import=false | ||||
| view=false | ||||
| trunk=false | ||||
| createnew=false | ||||
| conf=false | ||||
|  | ||||
| PACKAGE='' | ||||
|  | ||||
| rsync_args=(-aWxvci --progress --delete-before --no-R --no-implied-dirs) | ||||
| tree_names=(packages community) | ||||
| TEAM=${tree_names[0]} | ||||
| SUBORG='' | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options]" | ||||
|     echo '    -p <pkg>      Package name' | ||||
|     echo '    -t <team>     Team name (only with -n)' | ||||
|     echo "                  [default: ${TEAM}]" | ||||
|     echo '    -o <org>      Org of subrepo (only with -c)' | ||||
|     echo "    -s            Clone or pull repos" | ||||
|     echo "    -z            Don't clone or pull arch repos" | ||||
|     echo '    -c            Compare packages' | ||||
|     echo '    -u            Show upgrade packages' | ||||
|     echo '    -d            Show downgrade packages' | ||||
|     echo '    -a            Show testing packages' | ||||
|     echo "    -y            Don't inlcude staging packages" | ||||
|     echo '    -x            Include unstable kde and gnome' | ||||
|     echo '    -i            Import a package from arch repos' | ||||
|     echo '    -t            Import from arch trunk' | ||||
|     echo '    -n            Make new remote subrepo and clone it' | ||||
|     echo '    -c            Configure subrepo url' | ||||
|     echo '    -v            View package depends' | ||||
|     echo '    -q            Query settings' | ||||
|     echo '    -h            This help' | ||||
|     echo '' | ||||
|     echo '' | ||||
| @@ -270,23 +166,19 @@ usage() { | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts='p:csudayiztxvqh' | ||||
| opts='p:t:o:csinzvh' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
|         p) PACKAGE="$OPTARG" ;; | ||||
|         t) TEAM="$OPTARG" ;; | ||||
|         o) SUBORG="$OPTARG" ;; | ||||
|         s) sync=true ;; | ||||
|         z) sync_arch=false ;; | ||||
|         c) compare=true ;; | ||||
|         u) upgrades=true ;; | ||||
|         d) downgrades=true ;; | ||||
|         a) artix=true ;; | ||||
|         y) staging=false ;; | ||||
|         i) import=true ;; | ||||
|         t) trunk=true ;; | ||||
|         n) createnew=true ;; | ||||
|         v) view=true ;; | ||||
|         x) unstable=true ;; | ||||
|         q) pretend=true ;; | ||||
|         c) conf=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| @@ -297,12 +189,12 @@ shift $(($OPTIND - 1)) | ||||
| prepare_dir "${TREE_DIR_ARTIX}" | ||||
| prepare_dir "${TREE_DIR_ARCH}" | ||||
|  | ||||
| ${pretend} && display_settings && exit 1 | ||||
|  | ||||
| ${sync} && sync_repos | ||||
|  | ||||
| ${view} && view_build "${PACKAGE}" | ||||
|  | ||||
| ${compare} && show_version_table | ||||
|  | ||||
| ${import} && from_arch "${PACKAGE}" | ||||
|  | ||||
| ${createnew} && subrepo_new "${PACKAGE}" "${TEAM}" | ||||
|  | ||||
| ${conf} && subrepo_config "${PACKAGE}" "${SUBORG}" | ||||
|   | ||||
| @@ -20,6 +20,14 @@ import ${LIBDIR}/util.sh | ||||
| import ${LIBDIR}/util-pkg.sh | ||||
| import ${LIBDIR}/util-pkg-subrepo.sh | ||||
|  | ||||
| is_valid_repo(){ | ||||
|     local src="$1" | ||||
|     case $src in | ||||
|         core|extra|community|multilib|testing|staging|community-testing|community-staging|multilib-testing|multilib-staging|trunk) return 0 ;; | ||||
|         *) return 1 ;; | ||||
|     esac | ||||
| } | ||||
|  | ||||
| commit_pkg(){ | ||||
|     local git_tree=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}") | ||||
|     if [[ -n ${git_tree} ]];then | ||||
| @@ -30,6 +38,8 @@ commit_pkg(){ | ||||
|         local ver=$(get_full_version "${PACKAGE}") | ||||
|         local commit_msg="" | ||||
|  | ||||
|         local head=$(get_local_head) | ||||
|  | ||||
|         if ${remove};then | ||||
|             local action='remove' | ||||
|             if [[ "${REPO_SRC}" == 'trunk' ]];then | ||||
| @@ -53,11 +63,12 @@ commit_pkg(){ | ||||
|         cd ${TREE_DIR_ARTIX}/${git_tree} | ||||
|  | ||||
|         if ${push};then | ||||
|             msg "Checking (%s)" "${git_tree}" | ||||
|             git pull origin master | ||||
|             pull_tree "${git_tree}" "$head" | ||||
|  | ||||
|             subrepo_push "${PACKAGE}" | ||||
|             sleep 1 | ||||
|             git push origin master | ||||
|             subrepo_clean "${PACKAGE}" | ||||
| #             sleep 1 | ||||
|             push_tree "${git_tree}" | ||||
|         fi | ||||
|         git prune | ||||
|     else | ||||
| @@ -74,6 +85,8 @@ symlink_commit_pkg(){ | ||||
|         [[ $arch == 'any' ]] && CARCH=any | ||||
|         local ver=$(get_full_version "${PACKAGE}") | ||||
|  | ||||
|         local head=$(get_local_head) | ||||
|  | ||||
|         if [[ ${REPO_SRC} == 'trunk' ]];then | ||||
|             local action='add' | ||||
|             local dest="${REPO_DEST}-$CARCH" | ||||
| @@ -103,11 +116,12 @@ symlink_commit_pkg(){ | ||||
|         cd ${TREE_DIR_ARTIX}/${git_tree} | ||||
|  | ||||
|         if ${push};then | ||||
|             msg "Checking (%s)" "${git_tree}" | ||||
|             git pull origin master | ||||
|             pull_tree "${git_tree}" "$head" | ||||
|  | ||||
|             subrepo_push "${PACKAGE}" | ||||
|             sleep 1 | ||||
|             git push origin master | ||||
|             subrepo_clean "${PACKAGE}" | ||||
| #             sleep 1 | ||||
|             push_tree "${git_tree}" | ||||
|         fi | ||||
|         git prune | ||||
|     else | ||||
| @@ -115,20 +129,6 @@ symlink_commit_pkg(){ | ||||
|     fi | ||||
| } | ||||
|  | ||||
| display_settings(){ | ||||
|     show_version | ||||
|     show_config | ||||
|  | ||||
|     msg "OPTIONS:" | ||||
|     msg2 "REPO_SRC: %s" "${REPO_SRC}" | ||||
|     msg2 "REPO_DEST: %s" "${REPO_DEST}" | ||||
|     msg2 "PACKAGE: %s" "${PACKAGE}" | ||||
|  | ||||
|     msg "ARGS:" | ||||
|     msg2 "remove: %s" "${remove}" | ||||
|     msg2 "push: %s" "${push}" | ||||
| } | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
| @@ -139,7 +139,6 @@ REPO_SRC='trunk' | ||||
| PACKAGE='' | ||||
| remove=false | ||||
| push=false | ||||
| pretend=false | ||||
|  | ||||
| cmd=${0##*/} | ||||
| REPO_DEST=${cmd%pkg} | ||||
| @@ -150,7 +149,6 @@ usage() { | ||||
|     echo '    -p <pkg>           Package name' | ||||
|     echo '    -r                 Delete from repo (commitpkg only)' | ||||
|     echo '    -u                 Push' | ||||
|     echo '    -q                 Query settings and pretend' | ||||
|     echo '    -h                 This help' | ||||
|     echo '' | ||||
|     echo '' | ||||
| @@ -159,7 +157,7 @@ usage() { | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts='p:s:urqh' | ||||
| opts='p:s:urh' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
| @@ -167,7 +165,6 @@ while getopts "${opts}" arg; do | ||||
|         p) PACKAGE="$OPTARG" ;; | ||||
|         r) remove=true ;; | ||||
|         u) push=true ;; | ||||
|         q) pretend=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| @@ -175,8 +172,6 @@ done | ||||
|  | ||||
| shift $(($OPTIND - 1)) | ||||
|  | ||||
| ${pretend} && display_settings && exit 1 | ||||
|  | ||||
| if $(is_valid_repo "${REPO_SRC}");then | ||||
|     if [[ "${cmd}" == 'commitpkg' ]];then | ||||
|         commit_pkg | ||||
|   | ||||
							
								
								
									
										139
									
								
								bin/comparepkg.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								bin/comparepkg.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,139 @@ | ||||
| #!/bin/bash | ||||
| # | ||||
| # This program is free software; you can redistribute it and/or modify | ||||
| # it under the terms of the GNU General Public License as published by | ||||
| # the Free Software Foundation; version 2 of the License. | ||||
| # | ||||
| # This program is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| VERSION=@version@ | ||||
|  | ||||
| LIBDIR='@libdir@' | ||||
| SYSCONFDIR='@sysconfdir@' | ||||
| DATADIR='@datadir@' | ||||
|  | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util.sh | ||||
| import ${LIBDIR}/util-pkg.sh | ||||
|  | ||||
| show_version_table(){ | ||||
|     msg_table_header "%-20s %-20s %-25s %-30s %-30s" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version" | ||||
|  | ||||
|     for tree in ${tree_names[@]};do | ||||
|  | ||||
|         local git=$(find ${TREE_DIR_ARTIX}/$tree/ -mindepth 1 -maxdepth 1 -type d) | ||||
|  | ||||
|         for package in ${git[@]}; do | ||||
|  | ||||
|             local pkg=${package##*/} | ||||
|             local artixrepo=$(find_repo "$package" "${staging}" "${unstable}") | ||||
|             local artixshow=${artixrepo%-*} | ||||
|             local pkgbuild=$package/repos/$artixrepo/PKGBUILD | ||||
|  | ||||
|             if [[ -f $pkgbuild ]];then | ||||
|  | ||||
|                 source $pkgbuild 2>/dev/null | ||||
|                 local artixver=$(get_full_version $pkg) | ||||
|  | ||||
|                 local archpath=$(get_import_path $pkg) | ||||
|  | ||||
|                 local archrepo=$(find_repo "$archpath" "${staging}" "${unstable}") | ||||
|  | ||||
|                 local archshow=${archrepo%-*} | ||||
|                 pkgbuild=$archpath/repos/$archrepo/PKGBUILD | ||||
|  | ||||
|                 if [[ -f $pkgbuild ]];then | ||||
|                     source $pkgbuild 2>/dev/null | ||||
|                     local archver=$(get_full_version $pkg) | ||||
|                 fi | ||||
|  | ||||
|                 local result=$(vercmp "$artixver" "$archver") | ||||
|  | ||||
|                 local repomatch=false | ||||
|                 [[ "$archrepo" == "$artixrepo" ]] && repomatch=true | ||||
|  | ||||
|                 if ${move};then | ||||
|  | ||||
|                     if [ $result -gt -1 ];then | ||||
|                         case $artixrepo in | ||||
|                             *testing*|*staging*) | ||||
|                                 if $repomatch;then | ||||
|                                     msg_row "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                                 else | ||||
|                                     msg_row_notify "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                                 fi | ||||
|                             ;; | ||||
|                         esac | ||||
|                     fi | ||||
|  | ||||
|                 elif ${upgrades};then | ||||
|  | ||||
|                     if [ $result -eq -1 ];then | ||||
|                         msg_row_upgrade "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                     fi | ||||
|  | ||||
|                 elif ${downgrades};then | ||||
|  | ||||
|                     if [ $result -eq 1 ];then | ||||
|                         if [[ -n $archver ]] && [[ -n $archrepo ]];then | ||||
|                             msg_row_downgrade "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                         fi | ||||
|                     fi | ||||
|  | ||||
|                 fi | ||||
|                 unset pkgver epoch pkgrel artixver archver pkgbuild archpath | ||||
|  | ||||
|             fi | ||||
|         done | ||||
|     done | ||||
| } | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
| load_vars "${PAC_USERCONFDIR}/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
| load_vars /etc/makepkg.conf | ||||
|  | ||||
| unstable=false | ||||
| staging=true | ||||
| upgrades=false | ||||
| downgrades=false | ||||
| move=false | ||||
|  | ||||
| tree_names=(packages community) | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options]" | ||||
|     echo '    -u            Show upgrade packages' | ||||
|     echo '    -d            Show downgrade packages' | ||||
|     echo '    -m            Show packages to move' | ||||
|     echo "    -x            Don't inlcude staging packages" | ||||
|     echo '    -y            Include unstable kde and gnome' | ||||
|     echo '    -h            This help' | ||||
|     echo '' | ||||
|     echo '' | ||||
|     exit $1 | ||||
| } | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts='udmxyh' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
|         u) upgrades=true ;; | ||||
|         d) downgrades=true ;; | ||||
|         m) move=true ;; | ||||
|         x) staging=false ;; | ||||
|         y) unstable=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
| shift $(($OPTIND - 1)) | ||||
|  | ||||
| show_version_table | ||||
| @@ -33,31 +33,10 @@ sync_dir(){ | ||||
|     show_elapsed_time "${FUNCNAME}" "${timer_start}" | ||||
| } | ||||
|  | ||||
| display_settings(){ | ||||
|     show_version | ||||
|     show_config | ||||
|  | ||||
|     msg "OPTIONS:" | ||||
|     msg2 "PROFILE: %s" "${PROFILE}" | ||||
|     msg2 "UPLIMIT: %s kB/s" "${UPLIMIT}" | ||||
|  | ||||
|     msg "ARGS:" | ||||
|     msg2 "update: %s" "${update}" | ||||
|     msg2 "verbose: %s" "${verbose}" | ||||
|  | ||||
|     msg "REMOTE:" | ||||
|     msg2 "ACCOUNT: %s" "${ACCOUNT}" | ||||
|  | ||||
|     msg "UPLOAD:" | ||||
|     msg2 "SRC_DIR: ${SRC_DIR}" | ||||
|     msg2 "DEST_DIR: ${DEST_DIR}" | ||||
| } | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
|  | ||||
| pretend=false | ||||
| update=false | ||||
| verbose=false | ||||
|  | ||||
| @@ -68,7 +47,6 @@ usage() { | ||||
|     echo "    -p                 Source folder to upload [default: ${PROFILE}]" | ||||
|     echo "    -l                 Limit bandwidth in kB/s [default:${UPLIMIT}]" | ||||
|     echo '    -u                 Update remote directory' | ||||
|     echo '    -q                 Query settings and pretend upload' | ||||
|     echo '    -v                 Verbose output' | ||||
|     echo '    -h                 This help' | ||||
|     echo '' | ||||
| @@ -76,7 +54,7 @@ usage() { | ||||
|     exit $1 | ||||
| } | ||||
|  | ||||
| opts='p:l:uvqh' | ||||
| opts='p:l:uvh' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
| @@ -84,7 +62,6 @@ while getopts "${opts}" arg; do | ||||
|         l) UPLIMIT="$OPTARG" ;; | ||||
|         u) update=true; rsync_args+=(-u) ;; | ||||
|         v) verbose=true; rsync_args+=(-v --stats) ;; | ||||
|         q) pretend=true; rsync_args+=(-n) ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| @@ -98,6 +75,4 @@ rsync_args+=(--bwlimit=${UPLIMIT}) | ||||
|  | ||||
| prepare_transfer | ||||
|  | ||||
| ${pretend} && display_settings #&& exit 1 | ||||
|  | ||||
| sync_dir | ||||
|   | ||||
| @@ -13,6 +13,7 @@ VERSION=@version@ | ||||
|  | ||||
| LIBDIR='@libdir@' | ||||
| SYSCONFDIR='@sysconfdir@' | ||||
| DATADIR='@datadir@' | ||||
|  | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util.sh | ||||
| @@ -21,17 +22,19 @@ import ${LIBDIR}/util-pkg.sh | ||||
| update_repo(){ | ||||
|     local repo="$1" pkgfile ver ext=db.tar.xz | ||||
|     local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=() | ||||
|  | ||||
|     source PKGBUILD | ||||
|  | ||||
|     for name in ${pkgname[@]};do | ||||
|         [[ $arch == any ]] && CARCH=any | ||||
|         pkgarch=$(get_pkg_arch "$name") | ||||
|         ver=$(get_full_version "$name") | ||||
|         if pkgfile=$(find_cached_package "$name" "$ver" "$CARCH");then | ||||
|         if pkgfile=$(find_cached_package "$name" "$ver" "$pkgarch");then | ||||
|             local pkg=${pkgfile##*/} | ||||
|             info "Found: %s" "$pkg" | ||||
|             if ${add_pkg};then | ||||
|                 local action='add' | ||||
|                 packages+=("$pkg") | ||||
| #                 checkpkg $pkg | ||||
| #                 checkpkg "${pkgfile}" || return 2 | ||||
|                 if ${sign_pkg};then | ||||
|                     [[ -e ${pkgfile}.sig ]] && rm ${pkgfile}.sig | ||||
|                     signfile ${pkgfile} | ||||
| @@ -50,55 +53,37 @@ update_repo(){ | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| display_settings(){ | ||||
|     show_version | ||||
|     show_config | ||||
|  | ||||
|     msg "OPTIONS:" | ||||
|     msg2 "REPOSITORY: %s" "${REPOSITORY}" | ||||
|  | ||||
|     msg "ARGS:" | ||||
|     msg2 "add_pkg: %s" "${add_pkg}" | ||||
|     msg2 "del_pkg: %s" "${del_pkg}" | ||||
|     msg2 "sign_pkg: %s" "${sign_pkg}" | ||||
| } | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_config "${AT_USERCONFDIR}/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" | ||||
| load_vars "${PAC_USERCONFDIR}/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
| load_vars /etc/makepkg.conf | ||||
|  | ||||
| pretend=false | ||||
| add_pkg=false | ||||
| del_pkg=false | ||||
| REPOSITORY= | ||||
| sign_pkg=false | ||||
|  | ||||
| cmd=${0##*/} | ||||
| dest_repo=${cmd#*-} | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options]" | ||||
|     echo "    -d                 Destination repository [default:${REPOSITORY}]" | ||||
|     echo "Usage: ${cmd} [options]" | ||||
|     echo '    -a                 Add package(s) to repository' | ||||
|     echo '    -r                 Remove package(s) from repository' | ||||
|     echo '    -s                 Sign package(s)' | ||||
|     echo '    -q                 Query settings and pretend upload' | ||||
|     echo '    -h                 This help' | ||||
|     echo '' | ||||
|     echo '' | ||||
|     exit $1 | ||||
| } | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts='d:arsqh' | ||||
| opts='arsh' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
|         d) REPOSITORY="$OPTARG" ;; | ||||
|         a) add_pkg=true; del_pkg=false ;; | ||||
|         r) del_pkg=true; add_pkg=false ;; | ||||
|         s) sign_pkg=true ;; | ||||
|         q) pretend=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| @@ -108,6 +93,4 @@ shift $(($OPTIND - 1)) | ||||
|  | ||||
| prepare_dir "${REPOS_ROOT}" | ||||
|  | ||||
| ${pretend} && display_settings && exit 1 | ||||
|  | ||||
| update_repo "${REPOSITORY}" | ||||
| update_repo "${dest_repo}" | ||||
|   | ||||
| @@ -16,6 +16,23 @@ LIBDIR='@libdir@' | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util-pkg.sh | ||||
|  | ||||
| # $1: sofile | ||||
| # $2: soarch | ||||
| process_sofile() { | ||||
|     # extract the library name: libfoo.so | ||||
|     local soname="${1%.so?(+(.+([0-9])))}".so | ||||
|     # extract the major version: 1 | ||||
|     soversion="${1##*\.so\.}" | ||||
|     if [[ "$soversion" = "$1" ]] && (($IGNORE_INTERNAL)); then | ||||
|         continue | ||||
|     fi | ||||
|     if ! in_array "${soname}=${soversion}-$2" ${soobjects[@]}; then | ||||
|     # libfoo.so=1-64 | ||||
|         msg "${soname}=${soversion}-$2" | ||||
|         soobjects+=("${soname}=${soversion}-$2") | ||||
|     fi | ||||
| } | ||||
|  | ||||
| set -e | ||||
| shopt -s extglob | ||||
|  | ||||
|   | ||||
| @@ -58,35 +58,39 @@ usage() { | ||||
|     exit 1 | ||||
| } | ||||
|  | ||||
| sync_chroot() { | ||||
|     local chrootdir=$1 | ||||
|     local copy=$2 | ||||
|     local copydir='' | ||||
|     if [[ ${copy:0:1} = / ]]; then | ||||
|         copydir=$copy | ||||
|     else | ||||
|         copydir="$chrootdir/$copy" | ||||
|     fi | ||||
| # {{{ functions | ||||
|  | ||||
|     if [[ "$chrootdir/root" -ef "$copydir" ]]; then | ||||
| # Usage: sync_chroot $rootdir $copydir [$copy] | ||||
| sync_chroot() { | ||||
|     local rootdir=$1 | ||||
|     local copydir=$2 | ||||
|     local copy=${3:-$2} | ||||
|  | ||||
|     if [[ "$rootdir" -ef "$copydir" ]]; then | ||||
|         error 'Cannot sync copy with itself: %s' "$copydir" | ||||
|         return 1 | ||||
|     fi | ||||
|  | ||||
|     # Get a read lock on the root chroot to make | ||||
|     # sure we don't clone a half-updated chroot | ||||
|     slock 8 "$chrootdir/root.lock" \ | ||||
|         "Locking clean chroot [%s]" "$chrootdir/root" | ||||
|     slock 8 "$rootdir.lock" \ | ||||
|         "Locking clean chroot [%s]" "$rootdir" | ||||
|  | ||||
|     stat_busy "Synchronizing chroot copy [%s] -> [%s]" "$chrootdir/root" "$copydir" | ||||
|     if is_btrfs "$chrootdir" && ! mountpoint -q "$copydir"; then | ||||
|         subvolume_delete_recursive "$copydir" || | ||||
|             die "Unable to delete subvolume %s" "$copydir" | ||||
|         btrfs subvolume snapshot "$chrootdir/root" "$copydir" >/dev/null || | ||||
|     stat_busy "Synchronizing chroot copy [%s] -> [%s]" "$rootdir" "$copy" | ||||
|     if is_subvolume "$rootdir" && is_same_fs "$rootdir" "$(dirname -- "$copydir")" && ! mountpoint -q "$copydir"; then | ||||
|         if is_subvolume "$copydir"; then | ||||
|             subvolume_delete_recursive "$copydir" || | ||||
|                 die "Unable to delete subvolume %s" "$copydir" | ||||
|         else | ||||
|             # avoid change of filesystem in case of an umount failure | ||||
|             rm --recursive --force --one-file-system "$copydir" || | ||||
|                 die "Unable to delete %s" "$copydir" | ||||
|         fi | ||||
|         btrfs subvolume snapshot "$rootdir" "$copydir" >/dev/null || | ||||
|             die "Unable to create subvolume %s" "$copydir" | ||||
|     else | ||||
|         mkdir -p "$copydir" | ||||
|         rsync -a --delete -q -W -x "$chrootdir/root/" "$copydir" | ||||
|         rsync -a --delete -q -W -x "$rootdir/" "$copydir" | ||||
|     fi | ||||
|     stat_done | ||||
|  | ||||
| @@ -103,7 +107,7 @@ delete_chroot() { | ||||
|     local copy=${1:-$2} | ||||
|  | ||||
|     stat_busy "Removing chroot copy [%s]" "$copy" | ||||
|     if is_btrfs "$chrootdir" && ! mountpoint -q "$copydir"; then | ||||
|     if is_subvolume "$copydir" && ! mountpoint -q "$copydir"; then | ||||
|         subvolume_delete_recursive "$copydir" || | ||||
|             die "Unable to delete subvolume %s" "$copydir" | ||||
|     else | ||||
| @@ -128,7 +132,10 @@ install_packages() { | ||||
|     pkgnames=("${install_pkgs[@]##*/}") | ||||
|  | ||||
|     cp -- "${install_pkgs[@]}" "$copydir/root/" | ||||
|     chroot-run -r "${bindmounts_ro[*]}" -w "${bindmounts_rw[*]}" "$copydir" \ | ||||
|     chroot-run \ | ||||
|         -r "${bindmounts_ro[@]}" \ | ||||
|         -r "${bindmounts_rw[@]}" \ | ||||
|         "$copydir" \ | ||||
|         pacman -U --noconfirm -- "${pkgnames[@]/#//root/}" | ||||
|     ret=$? | ||||
|     rm -- "${pkgnames[@]/#/$copydir/root/}" | ||||
| @@ -148,8 +155,9 @@ prepare_chroot() { | ||||
|  | ||||
|     [[ $keepbuilddir = true ]] || rm -rf "$copydir/build" | ||||
|  | ||||
|     local builduser_uid="${SUDO_UID:-$UID}" | ||||
|     local builduser_gid="$(id -g "$builduser_uid")" | ||||
|     local builduser_uid builduser_gid | ||||
|     builduser_uid="${SUDO_UID:-$UID}" | ||||
|     builduser_gid="$(id -g "$builduser_uid")" | ||||
|     local install="install -o $builduser_uid -g $builduser_gid" | ||||
|     local x | ||||
|  | ||||
| @@ -157,16 +165,11 @@ prepare_chroot() { | ||||
|     # which we might not be able to load (i.e. when building i686 packages on | ||||
|     # an x86_64 host). | ||||
|     sed -e '/^builduser:/d' -i "$copydir"/etc/{passwd,shadow,group} | ||||
|     printf >>"$copydir/etc/group"  'builduser:x:%d:\n' $builduser_gid | ||||
|     printf >>"$copydir/etc/passwd" 'builduser:x:%d:%d:builduser:/build:/bin/bash\n' $builduser_uid $builduser_gid | ||||
|     printf >>"$copydir/etc/group"  'builduser:x:%d:\n' "$builduser_gid" | ||||
|     printf >>"$copydir/etc/passwd" 'builduser:x:%d:%d:builduser:/build:/bin/bash\n' "$builduser_uid" "$builduser_gid" | ||||
|     printf >>"$copydir/etc/shadow" 'builduser:!!:%d::::::\n' "$(( $(date -u +%s) / 86400 ))" | ||||
|  | ||||
|     $install -d "$copydir"/{build,build/.gnupg,startdir,{pkg,srcpkg,src,log}dest} | ||||
|  | ||||
| #     for x in .gnupg/pubring.{kbx,gpg}; do | ||||
| #         [[ -r $USER_HOME/$x ]] || continue | ||||
| #         $install -m 644 "$USER_HOME/$x" "$copydir/build/$x" | ||||
| #     done | ||||
|     $install -d "$copydir"/{build,startdir,{pkg,srcpkg,src,log}dest} | ||||
|  | ||||
|     sed -e '/^MAKEFLAGS=/d' -e '/^PACKAGER=/d' -i "$copydir/etc/makepkg.conf" | ||||
|     for x in BUILDDIR=/build PKGDEST=/pkgdest SRCPKGDEST=/srcpkgdest SRCDEST=/srcdest LOGDEST=/logdest \ | ||||
| @@ -203,19 +206,22 @@ _chrootbuild() { | ||||
|     # No coredumps | ||||
|     ulimit -c 0 | ||||
|  | ||||
|     # Work around chroot-run not giving a ctty | ||||
|     #exec </dev/console | ||||
|     . /etc/locale.conf | ||||
|  | ||||
|     # shellcheck source=/dev/null | ||||
|     . /etc/profile | ||||
|  | ||||
|     #export LANG=en_US.UTF-8 | ||||
|  | ||||
|     # Beware, there are some stupid arbitrary rules on how you can | ||||
|     # use "$" in arguments to commands with "sudo -i".  ${foo} or | ||||
|     # ${1} is OK, but $foo or $1 isn't. | ||||
|     # https://bugzilla.sudo.ws/show_bug.cgi?id=765 | ||||
|     sudo --preserve-env=SOURCE_DATE_EPOCH -iu builduser bash -c 'cd /startdir; makepkg "$@"' -bash "$@" | ||||
|  | ||||
|     ret=$? | ||||
|     case $ret in | ||||
|         0|14) return 0;; | ||||
|         *) return $ret;; | ||||
|         0|14) | ||||
|             return 0;; | ||||
|         *) | ||||
|             return $ret;; | ||||
|     esac | ||||
| } | ||||
|  | ||||
| @@ -227,17 +233,15 @@ _chrootnamcap() { | ||||
|     done | ||||
| } | ||||
|  | ||||
| # Usage: download_sources $copydir $src_owner | ||||
| # Usage: download_sources $copydir $makepkg_user | ||||
| # Globals: | ||||
| #  - SRCDEST | ||||
| #  - USER | ||||
| download_sources() { | ||||
|     local copydir=$1 | ||||
|     local makepkg_user=$2 | ||||
|  | ||||
|     local builddir | ||||
|     builddir="$(mktemp -d)" | ||||
| #     chmod 1777 "$builddir" | ||||
|     chown "$makepkg_user:" "$builddir" | ||||
|  | ||||
|     # Ensure sources are downloaded | ||||
| @@ -254,6 +258,7 @@ download_sources() { | ||||
| # Globals: | ||||
| #  - PKGDEST | ||||
| #  - LOGDEST | ||||
| #  - SRCPKGDEST | ||||
| move_products() { | ||||
|     local copydir=$1 | ||||
|     local src_owner=$2 | ||||
| @@ -301,8 +306,8 @@ main() { | ||||
|     chrootdir= | ||||
|     passeddir= | ||||
|     makepkg_user= | ||||
|     declare -ga install_pkgs | ||||
|     declare -gi ret=0 | ||||
|     declare -a install_pkgs | ||||
|     declare -i ret=0 | ||||
|  | ||||
|     bindmounts_ro=() | ||||
|     bindmounts_rw=() | ||||
| @@ -314,7 +319,7 @@ main() { | ||||
|  | ||||
|     local opts='hcur:I:l:nTD:d:U:' | ||||
|  | ||||
|     while getopts ${opts} arg; do | ||||
|     while getopts "${opts}" arg; do | ||||
|         case "$arg" in | ||||
|             c) clean_first=true ;; | ||||
|             D) bindmounts_ro+=("$OPTARG") ;; | ||||
| @@ -364,7 +369,7 @@ main() { | ||||
|  | ||||
|     umask 0022 | ||||
|  | ||||
|     load_vars "${PAC_USERCONFDIR}/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
|     load_vars "${XDG_CONFIG_HOME:-$USER_HOME/.config}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
|     load_vars /etc/makepkg.conf | ||||
|  | ||||
|     # Use PKGBUILD directory if these don't exist | ||||
| @@ -377,11 +382,14 @@ main() { | ||||
|     lock 9 "$copydir.lock" "Locking chroot copy [%s]" "$copy" | ||||
|  | ||||
|     if [[ ! -d $copydir ]] || $clean_first; then | ||||
|         sync_chroot "$chrootdir" "$copy" | ||||
|         sync_chroot "$chrootdir/root" "$copydir" "$copy" | ||||
|     fi | ||||
|  | ||||
|     $update_first && chroot-run -r "${bindmounts_ro[*]}" -w "${bindmounts_rw[*]}" "$copydir" \ | ||||
|         pacman -Syu --noconfirm | ||||
|     $update_first && chroot-run \ | ||||
|             -r "${bindmounts_ro[@]}" \ | ||||
|             -w "${bindmounts_rw[@]}" \ | ||||
|             "$copydir" \ | ||||
|             pacman -Syu --noconfirm | ||||
|  | ||||
|     if [[ -n ${install_pkgs[*]:-} ]]; then | ||||
|         install_packages "$copydir" "${install_pkgs[@]}" | ||||
| @@ -395,14 +403,18 @@ main() { | ||||
|         exit 1 | ||||
|     fi | ||||
|  | ||||
|     download_sources "$copydir" "$src_owner" | ||||
|     download_sources "$copydir" "$makepkg_user" | ||||
|  | ||||
|     prepare_chroot "$copydir" "$USER_HOME" "$keepbuilddir" "$run_namcap" | ||||
|  | ||||
|     bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest") | ||||
|  | ||||
|     if chroot-run -r "${bindmounts_ro[*]}" -w "${bindmounts_rw[*]}" "$copydir" \ | ||||
|         /chrootbuild "${makepkg_args[@]}"; then | ||||
|     if chroot-run \ | ||||
|         -r "${bindmounts_ro[*]}" \ | ||||
|         -w "${bindmounts_rw[*]}" \ | ||||
|         "$copydir" \ | ||||
|         /chrootbuild "${makepkg_args[@]}" | ||||
|     then | ||||
|         move_products "$copydir" "$src_owner" | ||||
|     else | ||||
|         (( ret += 1 )) | ||||
|   | ||||
							
								
								
									
										148
									
								
								bin/pkg2yaml.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								bin/pkg2yaml.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,148 @@ | ||||
| #!/bin/bash | ||||
| # | ||||
| # This program is free software; you can redistribute it and/or modify | ||||
| # it under the terms of the GNU General Public License as published by | ||||
| # the Free Software Foundation; version 2 of the License. | ||||
| # | ||||
| # This program is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| VERSION=@version@ | ||||
|  | ||||
| LIBDIR='@libdir@' | ||||
|  | ||||
| [[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh | ||||
| import ${LIBDIR}/util-yaml.sh | ||||
|  | ||||
| LIBRARY=${LIBRARY:-'/usr/share/makepkg'} | ||||
|  | ||||
| for lib in "$LIBRARY"/*.sh; do | ||||
|     source "$lib" | ||||
| done | ||||
| source /etc/makepkg.conf | ||||
|  | ||||
| write_attr(){ | ||||
|     local ident1="$1" ident2="$2" ident3="$3" | ||||
|     local attrname=$4 attrvalues=("${@:5}") | ||||
|  | ||||
|     # normalize whitespace, strip leading and trailing | ||||
|     attrvalues=("${attrvalues[@]//+([[:space:]])/ }") | ||||
|     attrvalues=("${attrvalues[@]#[[:space:]]}") | ||||
|     attrvalues=("${attrvalues[@]%[[:space:]]}") | ||||
|  | ||||
|     case $attrname in | ||||
|         makedepends|checkdepends|depends|provides|arch) | ||||
|             Yaml+=$(write_yaml_map $ident1 "$attrname") | ||||
|             for v in ${attrvalues[@]};do | ||||
|                 Yaml+=$(write_yaml_seq $ident2 "$v") | ||||
|             done | ||||
|         ;; | ||||
|         *) | ||||
|             for v in ${attrvalues[@]};do | ||||
|                 Yaml+=$(write_yaml_map $ident3 "$attrname" "$v") | ||||
|             done | ||||
|         ;; | ||||
|     esac | ||||
| } | ||||
|  | ||||
| extract_info() { | ||||
|     local pkgname=$1 attrname=$2 isarray=$3 outvalue= | ||||
|  | ||||
|     if get_pkgbuild_attribute "$pkgname" "$attrname" "$isarray" 'outvalue'; then | ||||
|         [[ -z $pkgname ]] && write_attr 2 4 2 "$attrname" "${outvalue[@]}" | ||||
|         [[ -n $pkgname ]] && write_attr 4 6 2 "$attrname" "${outvalue[@]}" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| write_details() { | ||||
|     local attr package_arch a | ||||
|     local multivalued_arch_attrs=(provides depends makedepends checkdepends) | ||||
|  | ||||
|     local singlevalued=() | ||||
|     local multivalued=(arch provides depends checkdepends) | ||||
|  | ||||
|     if [[ -z "$1" ]];then | ||||
|         singlevalued=(pkgver pkgrel epoch) | ||||
|         multivalued=(arch provides depends makedepends checkdepends) | ||||
|     fi | ||||
|  | ||||
|     for attr in "${singlevalued[@]}"; do | ||||
|         extract_info "$1" "$attr" 0 | ||||
|     done | ||||
|  | ||||
|     for attr in "${multivalued[@]}"; do | ||||
|         extract_info "$1" "$attr" 1 | ||||
|     done | ||||
|  | ||||
|     get_pkgbuild_attribute "$1" 'arch' 1 'package_arch' | ||||
|     for a in "${package_arch[@]}"; do | ||||
|         # 'any' is special. there's no support for, e.g. depends_any. | ||||
|         [[ $a = any ]] && continue | ||||
|  | ||||
|         for attr in "${multivalued_arch_attrs[@]}"; do | ||||
|             extract_info "$1" "${attr}_$a" 1 | ||||
|         done | ||||
|     done | ||||
| } | ||||
|  | ||||
| write_pkg_yaml(){ | ||||
|     local pkgfile=$(print_all_package_names) | ||||
|  | ||||
|     Yaml=$(write_yaml_header) | ||||
|  | ||||
|     Yaml+=$(write_empty_line) | ||||
|  | ||||
|     Yaml+=$(write_yaml_map 0 "pkgbase") | ||||
|     Yaml+=$(write_yaml_map 2 "pkgname" "${pkgbase:-$pkgname}") | ||||
|     ${details} && write_details '' | ||||
|  | ||||
|     Yaml+=$(write_empty_line) | ||||
|  | ||||
|     Yaml+=$(write_yaml_map 0 "package") | ||||
|     for pkg in "${pkgname[@]}"; do | ||||
|         Yaml+=$(write_yaml_seq_map 2 "pkgname" "$pkg") | ||||
|         ${details} && write_details "$pkg" | ||||
|     done | ||||
|  | ||||
|     Yaml+=$(write_empty_line) | ||||
|  | ||||
|     Yaml+=$(write_yaml_map 0 "pkgfile") | ||||
|     for f in ${pkgfile[@]};do | ||||
|         Yaml+=$(write_yaml_seq 2 "${f##*/}") | ||||
|     done | ||||
|  | ||||
|     Yaml+=$(write_empty_line) | ||||
|  | ||||
|     printf '%s' "${Yaml}" | ||||
| } | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options]" | ||||
|     echo "    -d            Don't include details" | ||||
|     echo '    -h            This help' | ||||
|     echo '' | ||||
|     exit $1 | ||||
| } | ||||
|  | ||||
| details=true | ||||
|  | ||||
| opts='dh' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
|         d) details=false ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
| shift $(( $OPTIND - 1 )) | ||||
|  | ||||
| [[ -f "$1"/PKGBUILD ]] || die "%s/PKGBUILD does not exist!" "$1" | ||||
| PACKAGE=$1/PKGBUILD; shift | ||||
|  | ||||
| source "$PACKAGE" | ||||
|  | ||||
| write_pkg_yaml | ||||
							
								
								
									
										146
									
								
								data/pacman-gnome-wobble.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								data/pacman-gnome-wobble.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,146 @@ | ||||
| # | ||||
| # /etc/pacman.conf | ||||
| # | ||||
| # See the pacman.conf(5) manpage for option and repository directives | ||||
|  | ||||
| # | ||||
| # GENERAL OPTIONS | ||||
| # | ||||
| [options] | ||||
| # The following paths are commented out with their default values listed. | ||||
| # If you wish to use different paths, uncomment and update the paths. | ||||
| #RootDir     = / | ||||
| #DBPath      = /var/lib/pacman/ | ||||
| #CacheDir    = /var/cache/pacman/pkg/ | ||||
| #LogFile     = /var/log/pacman.log | ||||
| #GPGDir      = /etc/pacman.d/gnupg/ | ||||
| #HookDir     = /etc/pacman.d/hooks/ | ||||
| HoldPkg     = pacman glibc | ||||
| #XferCommand = /usr/bin/curl -C - -f %u > %o | ||||
| #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u | ||||
| #CleanMethod = KeepInstalled | ||||
| #UseDelta    = 0.7 | ||||
| Architecture = auto | ||||
|  | ||||
| # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup | ||||
| #IgnorePkg   = | ||||
| #IgnoreGroup = | ||||
|  | ||||
| #NoUpgrade   = | ||||
| #NoExtract   = | ||||
|  | ||||
| # Misc options | ||||
| #UseSyslog | ||||
| #Color | ||||
| #TotalDownload | ||||
| CheckSpace | ||||
| VerbosePkgLists | ||||
|  | ||||
| # By default, pacman accepts packages signed by keys that its local keyring | ||||
| # trusts (see pacman-key and its man page), as well as unsigned packages. | ||||
| SigLevel    = Required DatabaseOptional | ||||
| LocalFileSigLevel = Optional | ||||
| #RemoteFileSigLevel = Required | ||||
|  | ||||
| # NOTE: You must run `pacman-key --init` before first using pacman; the local | ||||
| # keyring can then be populated with the keys of all official Artix Linux | ||||
| # packagers with `pacman-key --populate archlinux artix`. | ||||
|  | ||||
| # | ||||
| # REPOSITORIES | ||||
| #   - can be defined here or included from another file | ||||
| #   - pacman will search repositories in the order defined here | ||||
| #   - local/custom mirrors can be added here or in separate files | ||||
| #   - repositories listed first will take precedence when packages | ||||
| #     have identical names, regardless of version number | ||||
| #   - URLs will have $repo replaced by the name of the current repo | ||||
| #   - URLs will have $arch replaced by the name of the architecture | ||||
| # | ||||
| # Repository entries are of the format: | ||||
| #       [repo-name] | ||||
| #       Server = ServerName | ||||
| #       Include = IncludePath | ||||
| # | ||||
| # The header [repo-name] is crucial - it must be present and | ||||
| # uncommented to enable the repo. | ||||
| # | ||||
|  | ||||
| # The gremlins repositories are disabled by default. To enable, uncomment the | ||||
| # repo name header and Include lines. You can add preferred servers immediately | ||||
| # after the header, and they will be used before the default mirrors. | ||||
|  | ||||
| [gnome-wobble] | ||||
| Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| [goblins] | ||||
| Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| [gremlins] | ||||
| Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| [system] | ||||
| Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| [world] | ||||
| Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| [galaxy-goblins] | ||||
| Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| [galaxy-gremlins] | ||||
| Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| [galaxy] | ||||
| Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| # If you want to run 32 bit applications on your x86_64 system, | ||||
| # enable the lib32 repositories as required here. | ||||
|  | ||||
| #[lib32-goblins] | ||||
| #Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| #[lib32-gremlins] | ||||
| #Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| #[lib32] | ||||
| #Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| # An example of a custom package repository.  See the pacman manpage for | ||||
| # tips on creating your own repositories. | ||||
| #[custom] | ||||
| #SigLevel = Optional TrustAll | ||||
| #Server = file:///home/custompkgs | ||||
|  | ||||
| # | ||||
| # ARCHLINUX | ||||
| # | ||||
|  | ||||
| [gnome-unstable] | ||||
| Include = /etc/pacman.d/mirrorlist-arch | ||||
|  | ||||
| [staging] | ||||
| Include = /etc/pacman.d/mirrorlist-arch | ||||
|  | ||||
| [testing] | ||||
| Include = /etc/pacman.d/mirrorlist-arch | ||||
|  | ||||
| [extra] | ||||
| Include = /etc/pacman.d/mirrorlist-arch | ||||
|  | ||||
| [community-staging] | ||||
| Include = /etc/pacman.d/mirrorlist-arch | ||||
|  | ||||
| [community-testing] | ||||
| Include = /etc/pacman.d/mirrorlist-arch | ||||
|  | ||||
| [community] | ||||
| Include = /etc/pacman.d/mirrorlist-arch | ||||
|  | ||||
| #[multilib-staging] | ||||
| #Include = /etc/pacman.d/mirrorlist-arch | ||||
|  | ||||
| #[multilib-testing] | ||||
| #Include = /etc/pacman.d/mirrorlist-arch | ||||
|  | ||||
| #[multilib] | ||||
| #Include = /etc/pacman.d/mirrorlist-arch | ||||
							
								
								
									
										146
									
								
								data/pacman-kde-wobble.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								data/pacman-kde-wobble.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,146 @@ | ||||
| # | ||||
| # /etc/pacman.conf | ||||
| # | ||||
| # See the pacman.conf(5) manpage for option and repository directives | ||||
|  | ||||
| # | ||||
| # GENERAL OPTIONS | ||||
| # | ||||
| [options] | ||||
| # The following paths are commented out with their default values listed. | ||||
| # If you wish to use different paths, uncomment and update the paths. | ||||
| #RootDir     = / | ||||
| #DBPath      = /var/lib/pacman/ | ||||
| #CacheDir    = /var/cache/pacman/pkg/ | ||||
| #LogFile     = /var/log/pacman.log | ||||
| #GPGDir      = /etc/pacman.d/gnupg/ | ||||
| #HookDir     = /etc/pacman.d/hooks/ | ||||
| HoldPkg     = pacman glibc | ||||
| #XferCommand = /usr/bin/curl -C - -f %u > %o | ||||
| #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u | ||||
| #CleanMethod = KeepInstalled | ||||
| #UseDelta    = 0.7 | ||||
| Architecture = auto | ||||
|  | ||||
| # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup | ||||
| #IgnorePkg   = | ||||
| #IgnoreGroup = | ||||
|  | ||||
| #NoUpgrade   = | ||||
| #NoExtract   = | ||||
|  | ||||
| # Misc options | ||||
| #UseSyslog | ||||
| #Color | ||||
| #TotalDownload | ||||
| CheckSpace | ||||
| VerbosePkgLists | ||||
|  | ||||
| # By default, pacman accepts packages signed by keys that its local keyring | ||||
| # trusts (see pacman-key and its man page), as well as unsigned packages. | ||||
| SigLevel    = Required DatabaseOptional | ||||
| LocalFileSigLevel = Optional | ||||
| #RemoteFileSigLevel = Required | ||||
|  | ||||
| # NOTE: You must run `pacman-key --init` before first using pacman; the local | ||||
| # keyring can then be populated with the keys of all official Artix Linux | ||||
| # packagers with `pacman-key --populate archlinux artix`. | ||||
|  | ||||
| # | ||||
| # REPOSITORIES | ||||
| #   - can be defined here or included from another file | ||||
| #   - pacman will search repositories in the order defined here | ||||
| #   - local/custom mirrors can be added here or in separate files | ||||
| #   - repositories listed first will take precedence when packages | ||||
| #     have identical names, regardless of version number | ||||
| #   - URLs will have $repo replaced by the name of the current repo | ||||
| #   - URLs will have $arch replaced by the name of the architecture | ||||
| # | ||||
| # Repository entries are of the format: | ||||
| #       [repo-name] | ||||
| #       Server = ServerName | ||||
| #       Include = IncludePath | ||||
| # | ||||
| # The header [repo-name] is crucial - it must be present and | ||||
| # uncommented to enable the repo. | ||||
| # | ||||
|  | ||||
| # The gremlins repositories are disabled by default. To enable, uncomment the | ||||
| # repo name header and Include lines. You can add preferred servers immediately | ||||
| # after the header, and they will be used before the default mirrors. | ||||
|  | ||||
| [kde-wobble] | ||||
| Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| [goblins] | ||||
| Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| [gremlins] | ||||
| Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| [system] | ||||
| Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| [world] | ||||
| Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| [galaxy-goblins] | ||||
| Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| [galaxy-gremlins] | ||||
| Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| [galaxy] | ||||
| Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| # If you want to run 32 bit applications on your x86_64 system, | ||||
| # enable the lib32 repositories as required here. | ||||
|  | ||||
| #[lib32-goblins] | ||||
| #Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| #[lib32-gremlins] | ||||
| #Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| #[lib32] | ||||
| #Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| # An example of a custom package repository.  See the pacman manpage for | ||||
| # tips on creating your own repositories. | ||||
| #[custom] | ||||
| #SigLevel = Optional TrustAll | ||||
| #Server = file:///home/custompkgs | ||||
|  | ||||
| # | ||||
| # ARCHLINUX | ||||
| # | ||||
|  | ||||
| [kde-unstable] | ||||
| Include = /etc/pacman.d/mirrorlist-arch | ||||
|  | ||||
| [staging] | ||||
| Include = /etc/pacman.d/mirrorlist-arch | ||||
|  | ||||
| [testing] | ||||
| Include = /etc/pacman.d/mirrorlist-arch | ||||
|  | ||||
| [extra] | ||||
| Include = /etc/pacman.d/mirrorlist-arch | ||||
|  | ||||
| [community-staging] | ||||
| Include = /etc/pacman.d/mirrorlist-arch | ||||
|  | ||||
| [community-testing] | ||||
| Include = /etc/pacman.d/mirrorlist-arch | ||||
|  | ||||
| [community] | ||||
| Include = /etc/pacman.d/mirrorlist-arch | ||||
|  | ||||
| #[multilib-staging] | ||||
| #Include = /etc/pacman.d/mirrorlist-arch | ||||
|  | ||||
| #[multilib-testing] | ||||
| #Include = /etc/pacman.d/mirrorlist-arch | ||||
|  | ||||
| #[multilib] | ||||
| #Include = /etc/pacman.d/mirrorlist-arch | ||||
| @@ -9,20 +9,31 @@ | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| is_btrfs() { | ||||
| 	[[ -e "$1" && "$(stat -f -c %T "$1")" == btrfs ]] | ||||
|     [[ -e "$1" && "$(stat -f -c %T "$1")" == btrfs ]] | ||||
| } | ||||
|  | ||||
| is_subvolume() { | ||||
|     [[ -e "$1" && "$(stat -f -c %T "$1")" == btrfs && "$(stat -c %i "$1")" == 256 ]] | ||||
| } | ||||
|  | ||||
| is_same_fs() { | ||||
|     [[ "$(stat -c %d "$1")" == "$(stat -c %d "$1")" ]] | ||||
| } | ||||
|  | ||||
| subvolume_delete_recursive() { | ||||
|     local subvol | ||||
|  | ||||
|     is_btrfs "$1" || return 0 | ||||
|     is_subvolume "$1" || return 0 | ||||
|  | ||||
|     while IFS= read -d $'\0' -r subvol; do | ||||
|         if ! btrfs subvolume delete "$subvol" &>/dev/null; then | ||||
|             error "Unable to delete subvolume %s" "$subvol" | ||||
|         if ! subvolume_delete_recursive "$subvol"; then | ||||
|             return 1 | ||||
|         fi | ||||
|     done < <(find "$1" -xdev -depth -inum 256 -print0) | ||||
|     done < <(find "$1" -mindepth 1 -xdev -depth -inum 256 -print0) | ||||
|     if ! btrfs subvolume delete "$1" &>/dev/null; then | ||||
|         error "Unable to delete subvolume %s" "$subvol" | ||||
|         return 1 | ||||
|     fi | ||||
|  | ||||
|     return 0 | ||||
| } | ||||
|   | ||||
| @@ -26,6 +26,17 @@ init_profile(){ | ||||
|     [[ -d "$profdir/$prof/live-overlay" ]] && LIVE_OVERLAY="$profdir/$prof/live-overlay" | ||||
| } | ||||
|  | ||||
| show_profile(){ | ||||
|     msg2 "iso_file: %s" "${iso_file}" | ||||
|     msg2 "AUTOLOGIN: %s" "${AUTOLOGIN}" | ||||
|     msg2 "HOST_NAME: %s" "${HOST_NAME}" | ||||
|     msg2 "USER_NAME: %s" "${USER_NAME}" | ||||
|     msg2 "PASSWORD: %s" "${PASSWORD}" | ||||
|     msg2 "ADDGROUPS: %s" "${ADDGROUPS}" | ||||
|     msg2 "SERVICES_LIVE: %s" "${SERVICES_LIVE[*]}" | ||||
|     msg2 "SERVICES: %s" "${SERVICES[*]}" | ||||
| } | ||||
|  | ||||
| load_profile(){ | ||||
|     local prof="$1" | ||||
|     local profdir="${DATADIR}/iso-profiles" | ||||
| @@ -49,7 +60,7 @@ load_profile(){ | ||||
|     [[ -z ${PASSWORD} ]] && PASSWORD="artix" | ||||
|  | ||||
|     if [[ -z ${ADDGROUPS} ]];then | ||||
|         ADDGROUPS="video,power,storage,optical,network,lp,scanner,wheel,users,log" | ||||
|         ADDGROUPS="video,power,cdrom,network,lp,scanner,wheel,users,log" | ||||
|     fi | ||||
|  | ||||
|     if [[ -z ${SERVICES[@]} ]];then | ||||
| @@ -71,23 +82,14 @@ load_profile(){ | ||||
| } | ||||
|  | ||||
| write_live_session_conf(){ | ||||
|     local path=$1${SYSCONFDIR} | ||||
|     [[ ! -d $path ]] && mkdir -p "$path" | ||||
|     local conf=$path/live.conf | ||||
|     msg2 "Writing %s" "${conf##*/}" | ||||
|     echo '# live session configuration' > ${conf} | ||||
|     echo '' >> ${conf} | ||||
|     echo '# autologin' >> ${conf} | ||||
|     echo "AUTOLOGIN=${AUTOLOGIN}" >> ${conf} | ||||
|     echo '' >> ${conf} | ||||
|     echo '# live user name' >> ${conf} | ||||
|     echo "USERNAME=${USERNAME}" >> ${conf} | ||||
|     echo '' >> ${conf} | ||||
|     echo '# live password' >> ${conf} | ||||
|     echo "PASSWORD=${PASSWORD}" >> ${conf} | ||||
|     echo '' >> ${conf} | ||||
|     echo '# live group membership' >> ${conf} | ||||
|     echo "ADDGROUPS='${ADDGROUPS}'" >> ${conf} | ||||
|     msg2 "Writing live.conf" | ||||
|     local conf='' | ||||
|     conf+=$(printf '%s\n' '# live session configuration') | ||||
|     conf+=$(printf "\nAUTOLOGIN=%s\n" "${AUTOLOGIN}") | ||||
|     conf+=$(printf "\nUSER_NAME=%s\n" "${USER_NAME}") | ||||
|     conf+=$(printf "\nPASSWORD=%s\n" "${PASSWORD}") | ||||
|     conf+=$(printf "\nADDGROUPS='%s'\n" "${ADDGROUPS}") | ||||
|     printf '%s' "$conf" | ||||
| } | ||||
|  | ||||
| load_pkgs(){ | ||||
|   | ||||
| @@ -1,84 +0,0 @@ | ||||
| #!/bin/bash | ||||
| # | ||||
| # This program is free software; you can redistribute it and/or modify | ||||
| # it under the terms of the GNU General Public License as published by | ||||
| # the Free Software Foundation; version 2 of the License. | ||||
| # | ||||
| # This program is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| write_users_conf(){ | ||||
|     local conf="$1/users.conf" | ||||
|     msg2 "Writing %s ..." "${conf##*/}" | ||||
|     echo "---" > "$conf" | ||||
|     echo "defaultGroups:" >> "$conf" | ||||
|     local IFS=',' | ||||
|     for g in ${ADDGROUPS[@]};do | ||||
|         echo "    - $g" >> "$conf" | ||||
|     done | ||||
|     unset IFS | ||||
|     echo "autologinGroup:  autologin" >> "$conf" | ||||
|     echo "doAutologin:     false" >> "$conf" | ||||
|     echo "sudoersGroup:    wheel" >> "$conf" | ||||
|     echo "setRootPassword: true" >> "$conf" | ||||
|     echo "availableShells: /bin/bash, /bin/zsh" >> "$conf" # only used in new 'users' module | ||||
|  | ||||
| #     echo "passwordRequirements:" >> "$conf" | ||||
| #     echo "    minLength: -1" >> "$conf" | ||||
| #     echo "    maxLength: -1" >> "$conf" | ||||
| #     echo "    libpwquality:" >> "$conf" | ||||
| #     echo "        - minlen=8" >> "$conf" | ||||
| #     echo "        - minclass=80" >> "$conf" | ||||
| } | ||||
|  | ||||
| write_servicescfg_conf(){ | ||||
|     local init="$2" | ||||
|     local conf="$1"/services-"$init".conf | ||||
|     msg2 "Writing %s ..." "${conf##*/}" | ||||
|     echo '---' >  "$conf" | ||||
|     case "$init" in | ||||
|         'runit') | ||||
|             echo 'svDir: /etc/runit/sv' >> "$conf" | ||||
|             echo '' >> "$conf" | ||||
|             echo 'runsvDir: /etc/runit/runsvdir' >> "$conf" | ||||
|             echo '' >> "$conf" | ||||
|             echo 'services:' >> "$conf" | ||||
|             echo "    enabled:" >> "$conf" | ||||
|             for svc in ${SERVICES[@]};do | ||||
|                 echo "      - name: $svc" >> "$conf" | ||||
|                 echo '        runlevel: default' >> "$conf" | ||||
|             done | ||||
|         ;; | ||||
|         'openrc') | ||||
|             echo 'initdDir: /etc/init.d' >> "$conf" | ||||
|             echo '' >> "$conf" | ||||
|             echo 'runlevelsDir: /etc/runlevels' >> "$conf" | ||||
|             echo '' >> "$conf" | ||||
|             echo 'services:' >> "$conf" | ||||
|             for svc in ${SERVICES[@]};do | ||||
|                 echo "      - name: $svc" >> "$conf" | ||||
|                 echo '        runlevel: default' >> "$conf" | ||||
|             done | ||||
|         ;; | ||||
|     esac | ||||
| } | ||||
|  | ||||
| write_postcfg_conf(){ | ||||
|     local conf="$1/postcfg.conf" init="$2" | ||||
|     sed -e "s|openrc|$init|" -i "$conf" | ||||
| } | ||||
|  | ||||
| configure_calamares(){ | ||||
|     local mods="$1/etc/calamares/modules" init="$2" | ||||
|     if [[ -d "$mods" ]];then | ||||
|         info "Configuring [Calamares]" | ||||
|         write_users_conf "$mods" | ||||
|         write_servicescfg_conf "$mods" "$init" | ||||
|         write_postcfg_conf "$mods" "$init" | ||||
|         local name=services-"$init" | ||||
|         sed -e "s|services-openrc|$name|" -i "$1"/etc/calamares/settings.conf | ||||
|         info "Done configuring [Calamares]" | ||||
|     fi | ||||
| } | ||||
| @@ -11,8 +11,8 @@ | ||||
|  | ||||
| import ${LIBDIR}/util-chroot.sh | ||||
| import ${LIBDIR}/util-iso-grub.sh | ||||
| import ${LIBDIR}/util-iso-yaml.sh | ||||
| import ${LIBDIR}/util-iso-profile.sh | ||||
| import ${LIBDIR}/util-yaml.sh | ||||
|  | ||||
| track_img() { | ||||
|     info "mount: [%s]" "$2" | ||||
| @@ -105,7 +105,7 @@ run_safe() { | ||||
|     restoretrap=$(trap -p ERR) | ||||
|     trap 'error_function $func' ERR | ||||
|  | ||||
|     if ${verbose};then | ||||
|     if ${log};then | ||||
|         run_log "$func" | ||||
|     else | ||||
|         "$func" | ||||
| @@ -256,14 +256,79 @@ clean_up_image(){ | ||||
|     fi | ||||
| } | ||||
|  | ||||
| write_users_conf(){ | ||||
|     local yaml=$(write_yaml_header) | ||||
|     yaml+=$(write_empty_line) | ||||
|     yaml+=$(write_yaml_map 0 'defaultGroups') | ||||
|     local IFS=',' | ||||
|     for g in ${ADDGROUPS[@]};do | ||||
|         yaml+=$(write_yaml_seq 2 "$g") | ||||
|     done | ||||
|     unset IFS | ||||
|     yaml+=$(write_yaml_map 0 'autologinGroup' 'autologin') | ||||
|     yaml+=$(write_yaml_map 0 'doAutologin' 'false') | ||||
|     yaml+=$(write_yaml_map 0 'sudoersGroup' 'wheel') | ||||
|     yaml+=$(write_yaml_map 0 'setRootPassword' 'true') | ||||
|     yaml+=$(write_yaml_map 0 'availableShells' '/bin/bash, /bin/zsh') | ||||
| #     yaml+=$(write_yaml_map 0 'passwordRequirements') | ||||
| #     yaml+=$(write_yaml_map 2 'minLength' '-1') | ||||
| #     yaml+=$(write_yaml_map 2 'maxLength' '-1') | ||||
| #     yaml+=$(write_yaml_map 2 'libpwquality') | ||||
| #     yaml+=$(write_yaml_seq 4 "minlen=8") | ||||
| #     yaml+=$(write_yaml_seq 4 "minclass=80") | ||||
|     yaml+=$(write_empty_line) | ||||
|     printf '%s' "${yaml}" | ||||
| } | ||||
|  | ||||
| write_servicescfg_conf(){ | ||||
|     local yaml=$(write_yaml_header) | ||||
|     yaml+=$(write_empty_line) | ||||
|     case "${INITSYS}" in | ||||
|         'runit') | ||||
|             yaml+=$(write_yaml_map 0 'svDir' '/etc/runit/sv') | ||||
|             yaml+=$(write_yaml_map 0 'runsvDir' '/etc/runit/runsvdir') | ||||
|             yaml+=$(write_yaml_map 0 'services') | ||||
|             yaml+=$(write_yaml_map 2 'enabled') | ||||
|             for svc in ${SERVICES[@]};do | ||||
|                 yaml+=$(write_yaml_seq_map 4 'name' "$svc") | ||||
|                 yaml+=$(write_yaml_map 6 'runlevel' 'default') | ||||
|             done | ||||
|         ;; | ||||
|         'openrc') | ||||
|             yaml+=$(write_yaml_map 0 'initdDir' '/etc/init.d') | ||||
|             yaml+=$(write_yaml_map 0 'runlevelsDir' '/etc/runlevels') | ||||
|             yaml+=$(write_yaml_map 0 'services') | ||||
|             for svc in ${SERVICES[@]};do | ||||
|                 yaml+=$(write_yaml_seq_map 2 'name' "$svc") | ||||
|                 yaml+=$(write_yaml_map 4 'runlevel' 'default') | ||||
|             done | ||||
|         ;; | ||||
|     esac | ||||
|     yaml+=$(write_empty_line) | ||||
|     printf '%s' "${yaml}" | ||||
| } | ||||
|  | ||||
| configure_calamares(){ | ||||
|     local mods="$1/etc/calamares/modules" | ||||
|     if [[ -d "$mods" ]];then | ||||
|         info "Configuring [Calamares]" | ||||
|         write_users_conf > "$mods"/users.conf | ||||
|         write_servicescfg_conf > "$mods"/services-"${INITSYS}".conf | ||||
|         sed -e "s|openrc|${INITSYS}|" -i "$mods"/postcfg.conf | ||||
|         sed -e "s|services-openrc|services-${INITSYS}|" -i "$1"/etc/calamares/settings.conf | ||||
|         info "Done configuring [Calamares]" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| configure_live_image(){ | ||||
|     local fs="$1" | ||||
|     msg "Configuring [livefs]" | ||||
|     configure_hosts "$fs" | ||||
|     configure_system "$fs" | ||||
|     configure_services "$fs" | ||||
|     configure_calamares "$fs" "${INITSYS}" | ||||
|     write_live_session_conf "$fs" | ||||
|     configure_calamares "$fs" | ||||
|     [[ ! -d "$fs/etc/artools" ]] && mkdir -p "$fs/etc/artools" | ||||
|     write_live_session_conf > "$fs/etc/artools/live.conf" | ||||
|     msg "Done configuring [livefs]" | ||||
| } | ||||
|  | ||||
| @@ -316,7 +381,6 @@ make_sfs() { | ||||
|         msg2 "Creating ext4 image of %s ..." "${size}" | ||||
|         truncate -s ${size} "${src}.img" | ||||
|         local ext4_args=() | ||||
|         ${verbose} && ext4_args+=(-q) | ||||
|         ext4_args+=(-O ^has_journal,^resize_inode -E lazy_itable_init=0 -m 0) | ||||
|         mkfs.ext4 ${ext4_args[@]} -F "${src}.img" &>/dev/null | ||||
|         tune2fs -c 0 -i 0 "${src}.img" &> /dev/null | ||||
| @@ -340,11 +404,9 @@ make_sfs() { | ||||
|     local highcomp="-b 256K -Xbcj x86" comp='xz' | ||||
|  | ||||
|     mksfs_args+=(-comp ${comp} ${highcomp}) | ||||
|     if ${verbose};then | ||||
|         mksquashfs "${mksfs_args[@]}" >/dev/null | ||||
|     else | ||||
|         mksquashfs "${mksfs_args[@]}" | ||||
|     fi | ||||
|  | ||||
|     mksquashfs "${mksfs_args[@]}" | ||||
|  | ||||
|     make_checksum "${dest}" "${name}" | ||||
|     ${persist} && rm "${src}.img" | ||||
|  | ||||
|   | ||||
| @@ -9,51 +9,226 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| get_compliant_name(){ | ||||
|     local gitname="$1" | ||||
|     case $gitname in | ||||
|         *+) gitname=${gitname//+/plus} | ||||
|     esac | ||||
|     echo $gitname | ||||
| } | ||||
|  | ||||
|  | ||||
| create_repo(){ | ||||
|     local pkg="$1" | ||||
|     local pkg="$1" org="$2" | ||||
|     local gitname=$(get_compliant_name "$pkg") | ||||
|     curl -X POST "${GIT_URL}/api/v1/org/packages/repos?access_token=${GIT_TOKEN}" -H "accept: application/json" -H "content-type: application/json" -d "{ \"auto_init\": true, \"name\":\"$gitname\", \"readme\": \"Default\" }" | ||||
|     local json="{ \"auto_init\": true, \"name\":\"$gitname\", \"gitignores\":\"ArchLinuxPackages\", \"readme\": \"Default\" }" | ||||
|  | ||||
|     msg2 "Create package repo [%s] in org (%s)" "${pkg}" "${org}" | ||||
|  | ||||
|     curl -X POST "${GIT_URL}/api/v1/org/$org/repos?access_token=${GIT_TOKEN}" \ | ||||
|         -H "accept: application/json" \ | ||||
|         -H "content-type: application/json" \ | ||||
|         -d "$json" | ||||
|  | ||||
|     echo | ||||
| } | ||||
|  | ||||
| delete_repo(){ | ||||
|     local pkg="$1" | ||||
|     local pkg="$1" org="$2" | ||||
|     local gitname=$(get_compliant_name "$pkg") | ||||
|     curl -X DELETE "${GIT_URL}/api/v1/repos/packages/$gitname?access_token=${GIT_TOKEN}" -H  "accept: application/json" | ||||
|  | ||||
|     msg2 "Delete package repo [%s] in org (%s)" "${pkg}" "${org}" | ||||
|  | ||||
|     curl -X DELETE "${GIT_URL}/api/v1/repos/$org/$gitname?access_token=${GIT_TOKEN}" \ | ||||
|         -H  "accept: application/json" | ||||
| } | ||||
|  | ||||
| find_team(){ | ||||
|     local pkg="$1" team_id= | ||||
| get_pkg_org(){ | ||||
|     local pkg="$1" org= sub= | ||||
|     case ${pkg} in | ||||
| #         ruby-*) org=${pkg:0:6}; sub="${org:5}"; echo "packagesRuby" ;; | ||||
|         perl-*) org=${pkg:0:6}; sub="${org:5}"; echo "packagesPerl" ;; | ||||
|         python-*) org=${pkg:0:8}; sub="${org:7}"; echo "packagesPython" ;; | ||||
|         python2-*) org=${pkg:0:9}; sub="${org:8}"; echo "packagesPython" ;; | ||||
|         lib32*) org=${pkg:0:7}; sub="${org:6}"; echo "packagesL" ;; #"packages${sub^^}" ;; | ||||
| #         lib*) org=${pkg:0:4}; sub="${org:3}"; echo "packagesLib${sub^^}" ;; | ||||
|         *) org=${pkg:0:1}; echo "packages${org^^}" ;; | ||||
|     esac | ||||
| } | ||||
|  | ||||
|     if [[ -f $pkg/repos/core-x86_64/PKGBUILD ]];then | ||||
|         team_id=18 | ||||
|     elif [[ -f $pkg/repos/core-any/PKGBUILD ]];then | ||||
|         team_id=18 | ||||
|     elif [[ -f $pkg/repos/extra-x86_64/PKGBUILD ]];then | ||||
|         team_id=19 | ||||
|     elif [[ -f $pkg/repos/extra-any/PKGBUILD ]];then | ||||
|         team_id=19 | ||||
|     elif [[ -f $pkg/repos/community-x86_64/PKGBUILD ]];then | ||||
|         team_id=20 | ||||
|     elif [[ -f $pkg/repos/community-any/PKGBUILD ]];then | ||||
|         team_id=20 | ||||
|     elif [[ -f $pkg/repos/multilib-x86_64/PKGBUILD ]];then | ||||
|         team_id=21 | ||||
|     fi | ||||
|     echo $team_id | ||||
| load_team_id(){ | ||||
|     local org="$1" tree="$2" id=0 | ||||
|  | ||||
|     case $org in | ||||
|         packagesA) | ||||
|             case $tree in | ||||
|                 packages) id=70 ;; | ||||
|                 community) id=71 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesB) | ||||
|             case $tree in | ||||
|                 packages) id=72 ;; | ||||
|                 community) id=73 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesC) | ||||
|             case $tree in | ||||
|                 packages) id=74 ;; | ||||
|                 community) id=75 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesD) | ||||
|             case $tree in | ||||
|                 packages) id=76 ;; | ||||
|                 community) id=77 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesE) | ||||
|             case $tree in | ||||
|                 packages) id=78 ;; | ||||
|                 community) id=79 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesF) | ||||
|             case $tree in | ||||
|                 packages) id=80 ;; | ||||
|                 community) id=81 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesG) | ||||
|             case $tree in | ||||
|                 packages) id=82 ;; | ||||
|                 community) id=83 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesH) | ||||
|             case $tree in | ||||
|                 packages) id=84 ;; | ||||
|                 community) id=85 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesI) | ||||
|             case $tree in | ||||
|                 packages) id=86 ;; | ||||
|                 community) id=87 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesJ) | ||||
|             case $tree in | ||||
|                 packages) id=88 ;; | ||||
|                 community) id=89 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesK) | ||||
|             case $tree in | ||||
|                 packages) id=90 ;; | ||||
|                 community) id=91 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesL) | ||||
|             case $tree in | ||||
|                 packages) id=92 ;; | ||||
|                 community) id=93 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesM) | ||||
|             case $tree in | ||||
|                 packages) id=94 ;; | ||||
|                 community) id=95 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesN) | ||||
|             case $tree in | ||||
|                 packages) id=96 ;; | ||||
|                 community) id=97 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesO) | ||||
|             case $tree in | ||||
|                 packages) id=98 ;; | ||||
|                 community) id=99 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesP) | ||||
|             case $tree in | ||||
|                 packages) id=100 ;; | ||||
|                 community) id=101 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesQ) | ||||
|             case $tree in | ||||
|                 packages) id=105 ;; | ||||
|                 community) id=106 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesR) | ||||
|             case $tree in | ||||
|                 packages) id=107 ;; | ||||
|                 community) id=108 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesS) | ||||
|             case $tree in | ||||
|                 packages) id=109 ;; | ||||
|                 community) id=110 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesT) | ||||
|             case $tree in | ||||
|                 packages) id=111 ;; | ||||
|                 community) id=112 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesU) | ||||
|             case $tree in | ||||
|                 packages) id=113 ;; | ||||
|                 community) id=114 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesV) | ||||
|             case $tree in | ||||
|                 packages) id=115 ;; | ||||
|                 community) id=116 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesW) | ||||
|             case $tree in | ||||
|                 packages) id=117 ;; | ||||
|                 community) id=118 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesX) | ||||
|             case $tree in | ||||
|                 packages) id=119 ;; | ||||
|                 community) id=120 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesY) | ||||
|             case $tree in | ||||
|                 packages) id=121 ;; | ||||
|                 community) id=122 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesZ) | ||||
|             case $tree in | ||||
|                 packages) id=123 ;; | ||||
|                 community) id=124 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesPython) | ||||
|             case $tree in | ||||
|                 packages) id=103 ;; | ||||
|                 community) id=104 ;; | ||||
|             esac | ||||
|         ;; | ||||
|         packagesPerl) | ||||
|             case $tree in | ||||
|                 packages) id=102 ;; | ||||
|                 community) id=125 ;; | ||||
|             esac | ||||
|         ;; | ||||
|     esac | ||||
|     echo $id | ||||
| } | ||||
|  | ||||
| add_repo_to_team(){ | ||||
|     local pkg="$1" path="$2" | ||||
|     local id=$(find_team "$path") | ||||
|     local pkg="$1" org="$2" tree="$3" | ||||
|     local id=$(load_team_id "$org" "$tree") | ||||
|  | ||||
|     curl -X PUT "${GIT_URL}/api/v1/teams/$id/repos/packages/$pkg?access_token=${GIT_TOKEN}" -H  "accept: application/json" | ||||
|     msg2 "Adding package repo [%s] to team (%s)" "$pkg" "$tree" | ||||
|  | ||||
|     curl -X PUT "${GIT_URL}/api/v1/teams/$id/repos/$org/$pkg?access_token=${GIT_TOKEN}" \ | ||||
|         -H  "accept: application/json" | ||||
| } | ||||
|   | ||||
| @@ -9,22 +9,146 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| subrepo_init(){ | ||||
|     local pkg="$1" branch=master org=packages | ||||
|     git subrepo init "$pkg" -r gitea@"${GIT_DOMAIN}":"$org"/"$pkg".git -b "$branch" | ||||
| get_local_head(){ | ||||
|     echo $(git log --pretty=%H ...refs/heads/master^ | head -n 1) | ||||
| } | ||||
|  | ||||
| get_remote_head(){ | ||||
|     echo $(git ls-remote origin -h refs/heads/master | cut -f1) | ||||
| } | ||||
|  | ||||
| subrepo_push(){ | ||||
|     local pkg="$1" branch=master | ||||
|     git subrepo push "$pkg" -u -b "$branch" --clean | ||||
|     local pkg="$1" | ||||
|     msg2 "Update (%s)" "$pkg" | ||||
|     git subrepo push "$pkg" | ||||
| } | ||||
|  | ||||
| subrepo_config(){ | ||||
|     local pkg="$1" org="$2" | ||||
|     local gitname=$(get_compliant_name "$pkg") | ||||
|     local url=gitea@"${GIT_DOMAIN}":"$org"/"$gitname".git | ||||
|     msg2 "Update .gitrepo (%s) [%s]" "$pkg" "$url" | ||||
|     git subrepo config "$pkg" remote "$url" | ||||
| } | ||||
|  | ||||
| subrepo_clean(){ | ||||
|     local pkg="$1" | ||||
|     msg2 "Clean (%s)" "$pkg" | ||||
|     git subrepo clean "$pkg" | ||||
| } | ||||
|  | ||||
| subrepo_pull(){ | ||||
|     local pkg="$1" name="${2:-$1}" branch=master org=packages | ||||
|     git subrepo pull "$pkg" -r gitea@"${GIT_DOMAIN}":"$org"/"$name".git -u -b "$branch" #--clean | ||||
|     local pkg="$1" | ||||
|     git subrepo pull "$pkg" | ||||
| } | ||||
|  | ||||
| subrepo_clone(){ | ||||
|     local pkg="$1" name="${2:-$1}" branch=master org=packages | ||||
|     git subrepo clone gitea@"${GIT_DOMAIN}":"$org"/"$name".git "$pkg" -b "$branch" | ||||
|     local pkg="$1" org="$2" | ||||
|     local gitname=$(get_compliant_name "$pkg") | ||||
|     msg2 "Getting package repo [%s] from org (%s)" "$pkg" "$org/$gitname" | ||||
|     git subrepo clone gitea@"${GIT_DOMAIN}":"$org"/"$gitname".git "$pkg" | ||||
| } | ||||
|  | ||||
| clone_tree(){ | ||||
|     local timer=$(get_timer) url="$1" tree="$2" | ||||
|  | ||||
|     msg "Cloning (%s) ..." "$tree" | ||||
|  | ||||
|     git clone $url/$tree.git | ||||
|     show_elapsed_time "${FUNCNAME}" "${timer}" | ||||
| } | ||||
|  | ||||
| has_changes(){ | ||||
|     local head_l="$1" head_r="$2" | ||||
|     if [[ "$head_l" == "$head_r" ]]; then | ||||
|         msg2 "remote changes: no" | ||||
|         return 1 | ||||
|     else | ||||
|         msg2 "remote changes: yes" | ||||
|         return 0 | ||||
|     fi | ||||
| } | ||||
|  | ||||
| pull_tree(){ | ||||
|     local tree="$1" | ||||
|     local local_head=${2:-$(get_local_head)} | ||||
|     local remote_head=$(get_remote_head) | ||||
|  | ||||
|     msg "Checking (%s)" "${tree}" | ||||
|     if $(has_changes "${local_head}" "${remote_head}");then | ||||
|         git pull origin master | ||||
|     fi | ||||
| } | ||||
|  | ||||
| push_tree(){ | ||||
|     local tree="$1" | ||||
|     msg "Update (%s)" "${tree}" | ||||
|     git push origin master | ||||
| } | ||||
|  | ||||
| write_jenkinsfile(){ | ||||
|     local pkg="$1" | ||||
|     local jenkins=$pkg/Jenkinsfile | ||||
|  | ||||
|     echo "@Library('artix-ci') import org.artixlinux.RepoPackage" > $jenkins | ||||
|     echo '' >> $jenkins | ||||
|     echo 'PackagePipeline(new RepoPackage(this))' >> $jenkins | ||||
|     echo '' >> $jenkins | ||||
|  | ||||
|     git add $jenkins | ||||
| } | ||||
|  | ||||
| write_agentyaml(){ | ||||
|     local pkg="$1" | ||||
|     local agent=$pkg/.artixlinux/agent.yaml label='master' | ||||
|     [[ -d $pkg/.artixlinux ]] || mkdir $pkg/.artixlinux | ||||
|  | ||||
|     echo '%YAML 1.2' > $agent | ||||
|     echo '---' >> $agent | ||||
|     echo '' >> $agent | ||||
|     echo "label: $label" >> $agent | ||||
|     echo '' >> $agent | ||||
|  | ||||
|     git add $agent | ||||
| } | ||||
|  | ||||
| commit_jenkins_files(){ | ||||
|     local pkg="$1" | ||||
|  | ||||
|     write_jenkinsfile "$pkg" | ||||
|     write_agentyaml "$pkg" | ||||
|  | ||||
|     git commit -m "add jenkinsfile & .artixlinux/agent.yaml" | ||||
| } | ||||
|  | ||||
| config_tree(){ | ||||
|     local tree="$1" | ||||
|     cd $tree | ||||
|         git config --bool pull.rebase true | ||||
|         git config commit.gpgsign true | ||||
|         if [[ -n "${GPGKEY}" ]];then | ||||
|             git config user.signingkey "${GPGKEY}" | ||||
|         else | ||||
|             warning "No GPGKEY configured in makepkg.conf!" | ||||
|         fi | ||||
|     cd .. | ||||
| } | ||||
|  | ||||
| subrepo_new(){ | ||||
|     local pkg="$1" team="$2" | ||||
|     local dest=${TREE_DIR_ARTIX}/$team/$pkg/trunk | ||||
|  | ||||
|     cd ${TREE_DIR_ARTIX}/$team | ||||
|  | ||||
|     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" | ||||
| } | ||||
|   | ||||
							
								
								
									
										117
									
								
								lib/util-pkg.sh
									
									
									
									
									
								
							
							
						
						
									
										117
									
								
								lib/util-pkg.sh
									
									
									
									
									
								
							| @@ -9,26 +9,8 @@ | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| get_local_head(){ | ||||
|     echo $(git log --pretty=%H ...refs/heads/$1^ | head -n 1) | ||||
| } | ||||
|  | ||||
| get_remote_head(){ | ||||
|     echo $(git ls-remote origin -h refs/heads/$1 | cut -f1) | ||||
| } | ||||
|  | ||||
| is_dirty() { | ||||
|     [[ $(git diff --shortstat 2> /dev/null | tail -n1) != "" ]] || return 1 | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| is_untracked(){ | ||||
|     [[ $(git ls-files --others --exclude-standard)  != "" ]] || return 1 | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| patch_pkg(){ | ||||
|     local pkg="$1" repo="$2" | ||||
|     local pkg="$1" | ||||
|     case $pkg in | ||||
|         'glibc') | ||||
|             sed -e 's|{locale,systemd/system,tmpfiles.d}|{locale,tmpfiles.d}|' \ | ||||
| @@ -76,12 +58,12 @@ patch_pkg(){ | ||||
|     esac | ||||
| } | ||||
|  | ||||
| write_jenkinsfile(){ | ||||
|     local pkg="$1" jenkins=Jenkinsfile | ||||
|     echo '@Library(["PackagePipeline", "BuildPkg", "DeployPkg", "Notify", "PostBuild", "RepoPackage"]) import org.artixlinux.RepoPackage' > $pkg/$jenkins | ||||
|     echo '' >> $pkg/$jenkins | ||||
|     echo 'PackagePipeline(new RepoPackage(this))' >> $pkg/$jenkins | ||||
|     echo '' >> $pkg/$jenkins | ||||
| get_compliant_name(){ | ||||
|     local gitname="$1" | ||||
|     case $gitname in | ||||
|         *+) gitname=${gitname//+/plus} | ||||
|     esac | ||||
|     echo $gitname | ||||
| } | ||||
|  | ||||
| find_tree(){ | ||||
| @@ -91,51 +73,11 @@ find_tree(){ | ||||
|     echo ${result##*/} | ||||
| } | ||||
|  | ||||
| clone_tree(){ | ||||
|     local timer=$(get_timer) host_tree="$1" | ||||
|     git clone $host_tree.git | ||||
|     show_elapsed_time "${FUNCNAME}" "${timer}" | ||||
| } | ||||
|  | ||||
| pull_tree(){ | ||||
|     local branch="master" | ||||
|     local local_head=$(get_local_head "$branch") | ||||
|     local remote_head=$(get_remote_head "$branch") | ||||
|     if [[ "${local_head}" == "${remote_head}" ]]; then | ||||
|         msg2 "remote changes: no" | ||||
|     else | ||||
|         msg2 "remote changes: yes" | ||||
|         git pull origin "$branch" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| push_tree(){ | ||||
|     local branch="master" | ||||
|     git push origin "$branch" | ||||
| } | ||||
|  | ||||
| get_import_path(){ | ||||
|     local tree="$1" import_path= | ||||
|     case $tree in | ||||
|         packages) import_path=${TREE_DIR_ARCH}/packages ;; | ||||
|         packages-galaxy) import_path=${TREE_DIR_ARCH}/community ;; | ||||
|     esac | ||||
|     echo $import_path | ||||
| } | ||||
|  | ||||
| is_valid_repo(){ | ||||
|     local src="$1" | ||||
|     case $src in | ||||
|         core|extra|community|multilib|testing|staging|community-testing|community-staging|multilib-testing|multilib-staging|trunk) return 0 ;; | ||||
|         *) return 1 ;; | ||||
|     esac | ||||
| } | ||||
|  | ||||
| find_repo(){ | ||||
|     local pkg="$1" unst="$2" stag="$3" repo= | ||||
|     local repos=(core extra testing community community-testing mulitilib multilib-testing) | ||||
|     local pkg="$1" stag="$2" unst="$3" repo= | ||||
|     local repos=(core extra testing community community-testing multilib multilib-testing) | ||||
|  | ||||
|     $stag && repos+=(staging community-staging mulitilib-staging) | ||||
|     $stag && repos+=(staging community-staging multilib-staging) | ||||
|     $unst && repos+=(gnome-unstable kde-unstable) | ||||
|  | ||||
|     for r in ${repos[@]};do | ||||
| @@ -145,39 +87,12 @@ find_repo(){ | ||||
|     echo $repo | ||||
| } | ||||
|  | ||||
| find_artix_name(){ | ||||
|     local repo="$1" | ||||
|     case $repo in | ||||
|         core-*) repo=system ;; | ||||
|         extra-*) repo=world ;; | ||||
|         community-x86_64|community-any) repo=galaxy ;; | ||||
|         multilib-x86_64) repo=lib32 ;; | ||||
|         testing-*) repo=gremlins ;; | ||||
|         staging-*) repo=goblins ;; | ||||
|         multilib-testing-x86_64) repo=lib32-gremlins ;; | ||||
|         multilib-staging-x86_64) repo=lib32-goblins ;; | ||||
|         community-testing-*) repo=galaxy-gremlins ;; | ||||
|         community-staging-*) repo=galaxy-goblins ;; | ||||
|         kde-unstable-*|gnome-unstable-*) repo=goblins ;; | ||||
|     esac | ||||
|     echo $repo | ||||
| } | ||||
|  | ||||
| # $1: sofile | ||||
| # $2: soarch | ||||
| process_sofile() { | ||||
|     # extract the library name: libfoo.so | ||||
|     local soname="${1%.so?(+(.+([0-9])))}".so | ||||
|     # extract the major version: 1 | ||||
|     soversion="${1##*\.so\.}" | ||||
|     if [[ "$soversion" = "$1" ]] && (($IGNORE_INTERNAL)); then | ||||
|         continue | ||||
|     fi | ||||
|     if ! in_array "${soname}=${soversion}-$2" ${soobjects[@]}; then | ||||
|     # libfoo.so=1-64 | ||||
|         msg "${soname}=${soversion}-$2" | ||||
|         soobjects+=("${soname}=${soversion}-$2") | ||||
|     fi | ||||
| get_import_path(){ | ||||
|     local pkg="$1" import_path= | ||||
|     for tree in ${tree_names[@]};do | ||||
|         [[ -d ${TREE_DIR_ARCH}/$tree/$pkg ]] && import_path=${TREE_DIR_ARCH}/$tree/$pkg | ||||
|     done | ||||
|     echo $import_path | ||||
| } | ||||
|  | ||||
| pkgver_equal() { | ||||
|   | ||||
							
								
								
									
										32
									
								
								lib/util-yaml.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								lib/util-yaml.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| #!/bin/bash | ||||
| # This program is free software; you can redistribute it and/or modify | ||||
| # it under the terms of the GNU General Public License as published by | ||||
| # the Free Software Foundation; version 2 of the License. | ||||
| # | ||||
| # This program is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
|  | ||||
| write_yaml_header(){ | ||||
|     printf '%s' '---' | ||||
| } | ||||
|  | ||||
| write_empty_line(){ | ||||
|     printf '\n%s\n' ' ' | ||||
| } | ||||
|  | ||||
| write_yaml_map(){ | ||||
|     local ident="$1" key="$2" val="$3" | ||||
|     printf "\n%${ident}s%s: %s\n" '' "$key" "$val" | ||||
| } | ||||
|  | ||||
| write_yaml_seq(){ | ||||
|     local ident="$1" val="$2" | ||||
|     printf "\n%${ident}s- %s\n" '' "$val" | ||||
| } | ||||
|  | ||||
| write_yaml_seq_map(){ | ||||
|     local ident="$1" key="$2" val="$3" | ||||
|     printf "\n%${ident}s- %s: %s\n" '' "$key" "$val" | ||||
| } | ||||
							
								
								
									
										22
									
								
								lib/util.sh
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								lib/util.sh
									
									
									
									
									
								
							| @@ -68,9 +68,9 @@ init_artools_pkg(){ | ||||
|  | ||||
|     [[ -z ${GIT_TOKEN} ]] && GIT_TOKEN='' | ||||
|  | ||||
|     [[ -z ${TREE_DIR_ARTIX} ]] && TREE_DIR_ARTIX="${WORKSPACE_DIR}/artix" | ||||
|     [[ -z ${TREE_DIR_ARTIX} ]] && TREE_DIR_ARTIX="${WORKSPACE_DIR}/artixlinux" | ||||
|  | ||||
|     [[ -z ${HOST_TREE_ARTIX} ]] && HOST_TREE_ARTIX="gitea@${GIT_DOMAIN}:artix" | ||||
|     [[ -z ${HOST_TREE_ARTIX} ]] && HOST_TREE_ARTIX="gitea@${GIT_DOMAIN}:artixlinux" | ||||
|  | ||||
|     [[ -z ${TREE_DIR_ARCH} ]] && TREE_DIR_ARCH="${WORKSPACE_DIR}/archlinux" | ||||
|  | ||||
| @@ -155,23 +155,13 @@ load_user_info(){ | ||||
|     prepare_dir "${AT_USERCONFDIR}" | ||||
| } | ||||
|  | ||||
| show_version(){ | ||||
|     msg "ARTOOLS" | ||||
|     msg2 "VERSION: %s" "${VERSION}" | ||||
| } | ||||
|  | ||||
| show_config(){ | ||||
|     if [[ -f ${AT_USERCONFDIR}/artools.conf ]]; then | ||||
|         msg2 "config: %s" "~/.config/artools/artools.conf" | ||||
|     else | ||||
|         msg2 "config: %s" "${ARTOOLS_CONF}" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| # orig_argv=("$0" "$@") | ||||
| check_root() { | ||||
|     local keepenv=$1 | ||||
|  | ||||
|     (( EUID == 0 )) && return | ||||
|     if type -P sudo >/dev/null; then | ||||
|         exec sudo -- "${orig_argv[@]}" | ||||
|         exec sudo --preserve-env=$keepenv -- "${orig_argv[@]}" | ||||
|     else | ||||
|         exec su root -c "$(printf ' %q' "${orig_argv[@]}")" | ||||
|     fi | ||||
|   | ||||
		Reference in New Issue
	
	Block a user