diff options
author | bill-auger <mr.j.spam.me@gmail.com> | 2024-05-02 21:10:32 -0400 |
---|---|---|
committer | bill-auger <mr.j.spam.me@gmail.com> | 2024-05-02 23:16:43 -0400 |
commit | 9941568309750655393c5d97031f535995253761 (patch) | |
tree | 8a54d9bf5a69644eb530e3d1d53c2b4765f0b5a2 | |
parent | 19908fe4d282a0bd9055f3d7b721a7e0ec333250 (diff) |
scripts/package-all-parabola-base: create chroots if needed - refactorwip-parabola-base
-rwxr-xr-x | scripts/package-all-parabola-base | 110 |
1 files changed, 65 insertions, 45 deletions
diff --git a/scripts/package-all-parabola-base b/scripts/package-all-parabola-base index a1532b559..b4925ce96 100755 --- a/scripts/package-all-parabola-base +++ b/scripts/package-all-parabola-base @@ -1,11 +1,15 @@ #!/bin/bash +# package-all-parabola-base - rebuild all parabola standard system meta-packages # SPDX-License-Identifier: CC0-1.0 readonly ABSLIBRE_DIR=/var/lib/archbuild/abslibre -readonly SYSTEMD_CHROOT=x64 -readonly NONSYSTEMD_CHROOT=x64-nonsystemd +declare -rA CHROOTS=( + [systemd]=64 # meta-packages in [libre] will be built in this chroot + [nonsystemd]=64-nonsystemd # meta-packages in [nonsystemd] will be built in this chroot +) +readonly PACMAN_CONF=/usr/share/pacman/defaults/pacman.conf.x86_64 readonly PKG_DIRS=( nonsystemd/your-init-freedom @@ -26,46 +30,62 @@ readonly PKG_DIRS=( ) -echo "cleaning and upgrading chroots" -for chroot in ${SYSTEMD_CHROOT} ${NONSYSTEMD_CHROOT} -do sudo librechroot -n ${chroot} clean-pkgs && - sudo librechroot -n ${chroot} update || - ! echo "upgrading chroot '${chroot}' failed" || exit 1 -done - -for pkg_dir in ${PKG_DIRS[*]} -do cd ${ABSLIBRE_DIR}/${pkg_dir} - - # determine pkgname, current pkgver and pkgrel, and next pkgver and pkgrel - pkgname=$( source PKGBUILD ; echo ${pkgname} ;) - abs_pkgver=$(source PKGBUILD ; echo ${pkgver}-${pkgrel} ;) - repo_pkgver=$(pacman -S ${pkg_dir} --print-format='%r/%n %v' 2> /dev/null | grep ${pkg_dir} | cut -d' ' -f2) - pkgver=$(date +%Y%m%d) - pkgrel=$([[ ${abs_pkgver%-*} == ${pkgver} ]] && echo $((${abs_pkgver%-*} + 1)) || echo 1) - abs_pkgver=${pkgver}-${pkgrel} - - # sanity checks - echo -e "\n${pkg_dir} comparing versions: abs_pkgver=${abs_pkgver} repo_pkgver=${repo_pkgver}" - [[ -z "${repo_pkgver}" ]] && echo "${pkg_dir} package is not in the repos" - [[ "${abs_pkgver}" =~ [^-]-[^-] ]] && echo "${pkg_dir} invalid PKGBUILD" && continue - [[ "${abs_pkgver}" == "${repo_pkgver}" ]] && echo "${pkg_dir} package is in the repos" && continue - [[ -f ${pkgname}-${abs_pkgver}-any.pkg.tar.zst ]] && echo "${pkg_dir} package is built" && continue - - echo "\n${pkg_dir} starting build" # ; continue ; - if [[ "${pkg_dir}" =~ ^nonsystemd/ ]] - then # Clean nonsystemd chroot before packaging 'init-displaymanager' dependents. - # Otherwise, `chcleanup` will fail: - # :: removing *dm-openrc breaks dependency 'init-displaymanager' required by parabola-desktop - [[ "${pkg_dir}" =~ ^nonsystemd/parabola-desktop-(gnome|kde|lxde|mate)$ ]] && - sudo librechroot -n ${NONSYSTEMD_CHROOT} clean-pkgs && - sudo libremakepkg -n ${NONSYSTEMD_CHROOT} || ! echo "${pkg_dir} failed" || exit 1 - else sudo libremakepkg -n ${SYSTEMD_CHROOT} || ! echo "${pkg_dir} failed" || exit 1 - fi -done - -echo "all packages built successfully - staging ...." -for pkg_dir in ${PKG_DIRS[*]} -do cd ${ABSLIBRE_DIR}/${pkg_dir} - librestage $(dirname ${ABSLIBRE_DIR}/${pkg_dir})-testing -done -librerelease -l +Init() +{ + echo "creating, cleaning, and/or upgrading chroots" + sed 'N ; s|#\(\[nonsystemd\]\n\)#\(Include =.*\)|\1\2|' ${PACMAN_CONF} > ${PACMAN_CONF}.nonsystemd + sudo librechroot -n ${CHROOTS[systemd]} -C ${PACMAN_CONF} && + sudo librechroot -n ${CHROOTS[nonsystemd]} -C ${PACMAN_CONF}.nonsystemd || + ! echo "creating chroots failed" || exit 1 + for chroot in ${CHROOTS[*]} + do sudo librechroot -n ${chroot} clean-pkgs && + sudo librechroot -n ${chroot} update || + ! echo "upgrading chroot '${chroot}' failed" || exit 1 + done +} + +Package() +{ + for pkg_dir in ${PKG_DIRS[*]} + do cd ${ABSLIBRE_DIR}/${pkg_dir} + + # determine pkgname, current pkgver and pkgrel, and next pkgver and pkgrel + pkgname=$( source PKGBUILD ; echo ${pkgname} ;) + abs_pkgver=$(source PKGBUILD ; echo ${pkgver}-${pkgrel} ;) + repo_pkgver=$(pacman -S ${pkg_dir} --print-format='%r/%n %v' 2> /dev/null | grep ${pkg_dir} | cut -d' ' -f2) + pkgver=$(date +%Y%m%d) + pkgrel=$([[ ${abs_pkgver%-*} == ${pkgver} ]] && echo $((${abs_pkgver%-*} + 1)) || echo 1) + abs_pkgver=${pkgver}-${pkgrel} + + # sanity checks + echo -e "\n${pkg_dir} comparing versions: abs_pkgver=${abs_pkgver} repo_pkgver=${repo_pkgver}" + [[ -z "${repo_pkgver}" ]] && echo "${pkg_dir} package is not in the repos" + [[ "${pkgname}" == "${pkg_dir/*\//}" ]] && echo "${pkg_dir} invalid PKGBUILD" && continue + [[ "${abs_pkgver}" =~ [^-]-[^-] ]] && echo "${pkg_dir} invalid PKGBUILD" && continue + [[ "${abs_pkgver}" == "${repo_pkgver}" ]] && echo "${pkg_dir} package is in the repos" && continue + [[ -f ${pkgname}-${abs_pkgver}-any.pkg.tar.zst ]] && echo "${pkg_dir} package is built" && continue + + # inject pkgver and pkgrel + sed -i "s|^pkgver=.*|pkgver=${pkgver}| ; s|^pkgrel=.*|pkgrel=${pkgrel}|" PKGBUILD + + echo "\n${pkg_dir} - starting build" + chroot=${CHROOTS[${pkg_dir%/*}]} + sudo librechroot -n ${chroot} clean-pkgs && + sudo libremakepkg -n ${chroot} || ! echo "${pkg_dir} - build failed" || exit 1 + done +} + +Publish() +{ + echo "all packages built successfully - staging ...." + for pkg_dir in ${PKG_DIRS[*]} + do cd ${ABSLIBRE_DIR}/${pkg_dir} + librestage $(dirname ${ABSLIBRE_DIR}/${pkg_dir})-testing + done + librerelease -l +} + + +Init && +Package && +Publish |