#!/bin/bash # Contains code derived from devtools' "makechrootpkg" # Copyright 2011-2012 The Arch Linux Development Team # Copyright 2012 Luke Shumaker # # 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. chroot_init() { # no-op; make sure the chroot exists librechroot -n -l "$CHROOTCOPY" "$CHROOT" if [[ -r "$LIBREHOME/.gnupg/pubring.gpg" ]]; then install -D "$HOME/.gnupg/pubring.gpg" "$copydir/build/.gnupg/pubring.gpg" fi mkdir -p "$copydir/pkgdest" mkdir -p "$copydir/srcdest" chroot_makepkg_conf_set PKGDEST /pkgdest chroot_makepkg_conf_set SRCDEST /srcdest cat > "$copydir/etc/sudoers.d/nobody-pacman" <<EOF Defaults env_keep += "HOME" nobody ALL = NOPASSWD: /usr/bin/pacman EOF chmod 440 "$copydir/etc/sudoers.d/nobody-pacman" } chroot_extract() { rm -rf "$copydir"/build/* cp PKGBUILD "$copydir/build/" ( source PKGBUILD # Copy source files for file in "${source[@]}"; do file="${file%%::*}" file="${file##*://*/}" if [[ -f $file ]]; then cp "$file" "$copydir/srcdest/" elif [[ -f $SRCDEST/$file ]]; then cp "$SRCDEST/$file" "$copydir/srcdest/" fi done # Find all changelog and install files, even inside functions for i in 'changelog' 'install'; do while read -r file; do # evaluate any bash variables used eval file=\"$(sed 's/^\(['\''"]\)\(.*\)\1$/\2/' <<< "$file")\" if [[ -f $file ]]; then cp "$file" "$copydir/build/" fi done < <(sed -n "s/^[[:space:]]*$i=//p" PKGBUILD) done ) chown -R nobody "$copydir"/{build,pkgdest,srcdest} local file="$copydir/chrootextract" echo '#!/bin/bash' > "$file" echo '. /etc/profile' >> "$file" echo 'export HOME=/build' >> "$file" echo 'cd /build' >> "$file" echo "sudo -u nobody ${MAKEPKG} $makepkg_args -o" >> "$file" chmod 755 "$file" archroot "$copydir" -r /chrootextract } chroot_build() { local file="$copydir/chrootbuild" echo '#!/bin/bash' > "$file" echo '. /etc/profile' >> "$file" echo 'export HOME=/build' >> "$file" echo 'cd /build' >> "$file" echo "sudo -u nobody ${MAKEPKG} $makepkg_args -e" >> "$file" chmod 755 "$file" archroot -N "$copydir" -r /chrootbuild } copy_pkgs() { for pkgfile in "$copydir"/pkgdest/*.pkg.tar*; do mkdir -p "$copydir/repo" pushd "$copydir/repo" >/dev/null cp "$pkgfile" . repo-add repo.db.tar.gz "${pkgfile##*/}" popd >/dev/null chown "$LIBREUSER" "$pkgfile" mv "$pkgfile" "$PKGDEST" if [[ $PKGDEST != . ]]; then ln -s "$PKGDEST/${pkgfile##*/}" . fi done }