diff options
Diffstat (limited to 'src/archbuild.in')
-rw-r--r-- | src/archbuild.in | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/src/archbuild.in b/src/archbuild.in new file mode 100644 index 0000000..e6cf19a --- /dev/null +++ b/src/archbuild.in @@ -0,0 +1,98 @@ +#!/bin/bash +# +# SPDX-License-Identifier: GPL-3.0-or-later + +m4_include(lib/common.sh) +m4_include(lib/archroot.sh) + +base_packages=(base-devel) +makechrootpkg_args=(-c -n -C) + +cmd="${0##*/}" +if [[ "${cmd%%-*}" == 'multilib' ]]; then + repo="${cmd%-build}" + arch='x86_64' + base_packages+=(multilib-devel) +else + tag="${cmd%-build}" + repo=${tag%-*} + arch=${tag##*-} +fi +if [[ -f "@pkgdatadir@/setarch-aliases.d/${arch}" ]]; then + read -r set_arch < "@pkgdatadir@/setarch-aliases.d/${arch}" +else + set_arch="${arch}" +fi +chroots='/var/lib/archbuild' +clean_first=false + +pacman_config="@pkgdatadir@/pacman-${repo}.conf" +if [[ -f @pkgdatadir@/pacman-${repo}-${arch}.conf ]]; then + pacman_config="@pkgdatadir@/pacman-${repo}-${arch}.conf" +fi +makepkg_config="@pkgdatadir@/makepkg-${arch}.conf" +if [[ -f @pkgdatadir@/makepkg-${repo}-${arch}.conf ]]; then + makepkg_config="@pkgdatadir@/makepkg-${repo}-${arch}.conf" +fi + +usage() { + echo "Usage: $cmd [options] -- [makechrootpkg args]" + echo ' -h This help' + echo ' -c Recreate the chroot before building' + echo ' -r <dir> Create chroots in this directory' + echo '' + echo "Default makechrootpkg args: ${makechrootpkg_args[*]}" + echo '' + exit 1 +} + +while getopts 'hcr:' arg; do + case "${arg}" in + c) clean_first=true ;; + r) chroots="$OPTARG" ;; + *) usage ;; + esac +done + +check_root SOURCE_DATE_EPOCH,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER,GNUPGHOME + +# Pass all arguments after -- right to makepkg +makechrootpkg_args+=("${@:$OPTIND}") + +if ${clean_first} || [[ ! -d "${chroots}/${repo}-${arch}" ]]; then + msg "Creating chroot for [%s] (%s)..." "${repo}" "${arch}" + + for copy in "${chroots}/${repo}-${arch}"/*; do + [[ -d $copy ]] || continue + msg2 "Deleting chroot copy '%s'..." "$(basename "${copy}")" + + lock 9 "$copy.lock" "Locking chroot copy '%s'" "$copy" + + subvolume_delete_recursive "${copy}" + rm -rf --one-file-system "${copy}" + done + lock_close 9 + + rm -rf --one-file-system "${chroots}/${repo}-${arch}" + (umask 0022; mkdir -p "${chroots}/${repo}-${arch}") + setarch "${set_arch}" mkarchroot \ + -C "${pacman_config}" \ + -M "${makepkg_config}" \ + "${chroots}/${repo}-${arch}/root" \ + "${base_packages[@]}" || abort +else + lock 9 "${chroots}/${repo}-${arch}/root.lock" "Locking clean chroot" + arch-nspawn \ + -C "${pacman_config}" \ + -M "${makepkg_config}" \ + "${chroots}/${repo}-${arch}/root" \ + pacman -Syuu --noconfirm || abort +fi + +# Always build official packages reproducibly +if [[ ! -v SOURCE_DATE_EPOCH ]]; then + export SOURCE_DATE_EPOCH=$(date +%s) +fi + +msg "Building in chroot for [%s] (%s)..." "${repo}" "${arch}" +exec makechrootpkg -r "${chroots}/${repo}-${arch}" "${makechrootpkg_args[@]}" |