Introduce arch-chroot-helper, use it instead of clean-chroot-manager in ppa

This commit is contained in:
Travis Burtrum 2019-08-18 14:20:32 -04:00
parent 8e7ffccd93
commit 1a849f0c3b
4 changed files with 67 additions and 60 deletions

48
arch-chroot-helper Executable file
View File

@ -0,0 +1,48 @@
#!/bin/bash
# this is meant to be put in /usr/bin and allowed to use for for a user
# cp /home/ppa/arch-ppa/arch-chroot-helper /usr/bin/; chown root.root /usr/bin/arch-chroot-helper; chmod 555 /usr/bin/arch-chroot-helper
# then add this using visudo:
# ppa ALL= NOPASSWD: /usr/bin/arch-chroot-helper
ccm_root='/scratch/.chroot64'
prepare() {
if [ -d "${ccm_root}/root" ]; then
# this exists, so just update it
arch-nspawn "${ccm_root}/root" pacman -Syu --noconfirm
#yes | arch-nspawn "${ccm_root}/root" pacman -Scc
else
# does not exist, create it...
mkdir -p "${ccm_root}"
mkarchroot -C /etc/pacman.conf -M /etc/makepkg.conf "${ccm_root}/root" base-devel
fi
}
nuke() {
rm -rf "${ccm_root}"
}
make() {
set -e
prepare
makechrootpkg -c -u -r "${ccm_root}"
}
case $1 in
prepare)
prepare
exit $?
;;
nuke)
nuke
exit $?
;;
make)
make
exit $?
;;
*)
echo "Must specify command: prepare, nuke, make"
exit 1
esac

37
ppa
View File

@ -8,8 +8,6 @@ basedir="$(pwd)"
src_dir="${basedir}/src"
repo_name=aur
pkg_dir="${basedir}/$repo_name"
ccm='sudo ccm64'
ccm_root='/scratch/chroot64'
aurweb='https://aur.archlinux.org'
if [ `whoami` == 'root' ]; then
@ -76,7 +74,6 @@ sign_packages() {
build() {
cd "$src_dir"
if [ "$#" -gt 0 ]; then
$ccm d
failed=''
# create .SRCINFO, so aurqueue can use it next
for dir in "$@"
@ -88,27 +85,31 @@ build() {
for dir in $(aurqueue "$@")
do
cd $dir
$ccm s || failed="$failed $dir"
# delete any existing packages
grep '^pkgname = ' .SRCINFO | sed 's/^pkgname = //' | xargs -I {} sh -c 'rm -f {}*pkg.tar*'
sudo arch-chroot-helper make
if [ $? -ne 0 ]; then
# failed, append to failed string
failed="$failed $dir"
else
#list_of_packages="$(grep '^pkgname = ' .SRCINFO | sed 's/^pkgname = //' | sort -u | tr '\n' ' ')"
list_of_package_files="$(grep '^pkgname = ' .SRCINFO | sed 's/^pkgname = //' | xargs -I {} sh -c 'ls {}*pkg.tar*' 2>/dev/null | sort -u | tr '\n' ' ')"
mv $list_of_package_files "$pkg_dir"
cd "$pkg_dir"
sign_packages $list_of_package_files
# repose appears to work the same with both $list_of_packages and $list_of_package_files
repose -f -z $repo_name $list_of_package_files
sign_packages $repo_name.db $repo_name.files
fi
cd "$src_dir"
done
# save packages
cd "$pkg_dir"
for pkg in "$ccm_root"/root/repo/*pkg.tar*
do
mv "$pkg" .
sign_packages "$(basename "$pkg")"
done
repose -f -z $repo_name
sign_packages $repo_name.db $repo_name.files
if [ "$failed" == "" ]
then
# success!, nuke the chroot
echo $ccm n
echo sudo arch-chroot-helper nuke
else
# some failures, just delete the packages
$ccm d
# some failures
echo "failed packages:$failed"
fi
@ -119,7 +120,7 @@ build() {
rebuild_db() {
cd "$pkg_dir"
repose -f -z $repo_name
repose -v -f -z $repo_name
sign_packages $repo_name.db $repo_name.files
}

View File

@ -1,26 +0,0 @@
# Maintainer: graysky <graysky AT archlinux DOT us>
pkgname=clean-chroot-manager
pkgver=2.96
pkgrel=1
pkgdesc='Wrapper for managing clean chroot builds with local repo therein.'
arch=('any')
url='https://github.com/graysky2/clean-chroot-manager'
license=('MIT')
depends=('devtools>=20180528-1' 'rsync' 'libarchive>=3.3.3')
conflicts=('clean_chroot_manager')
replaces=('clean_chroot_manager')
source=("$pkgname-$pkgver.tar.gz::https://github.com/graysky2/clean-chroot-manager/archive/v$pkgver.tar.gz")
sha256sums=('3bbe344f92914a490f61c6fcb95189f4c95dacee45da975bf9c530e8fe867806')
install=ccm.install
build() {
cd "$pkgname-$pkgver"
make
}
package() {
cd "$pkgname-$pkgver"
make DESTDIR="$pkgdir" install
install -Dm644 MIT "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}

View File

@ -1,16 +0,0 @@
## arg 1: the new package version
## arg 2: the old package version
post_upgrade() {
for test in 2.92-1 2.87-1 2.81-1 2.73-1 2.72-1 2.55-1 2.17-1 2.22-1 2.69-1 2.93-1; do
if [ "$(vercmp $2 $test)" -lt 1 ]; then
echo
echo '--> Please check ~/.config/clean-chroot-manager.conf against the'
echo '--> provided /usr/share/clean-chroot-manager/ccm.skel to ensure it is'
echo '--> updated as the script does not do this automatically.'
exit 0
else
/bin/true
fi
done
}