summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/chroot-tools/chcleanup.in15
-rwxr-xr-xsrc/chroot-tools/librechroot3
-rwxr-xr-xsrc/chroot-tools/libremakepkg60
3 files changed, 61 insertions, 17 deletions
diff --git a/src/chroot-tools/chcleanup.in b/src/chroot-tools/chcleanup.in
index 7826753..317bf10 100644
--- a/src/chroot-tools/chcleanup.in
+++ b/src/chroot-tools/chcleanup.in
@@ -88,7 +88,6 @@ pacman -b "${TEMPDIR}" \
# Diff installed packages against a clean chroot then remove leftovers
packages=($(comm -23 <(pacman -Qq | sort -u) \
<(sort -u "${pkglist}")))
-
if [[ ${#packages[@]} = 0 ]]; then
msg2 "No packages to remove"
else
@@ -101,3 +100,17 @@ else
pacman --noconfirm -R --nosave "${packages[@]}"
fi
fi
+
+packages=($(comm -13 <(pacman -Qq | sort -u) \
+ <(sort -u "${pkglist}")))
+if [[ ${#packages[@]} = 0 ]]; then
+ msg2 "No packages to add"
+else
+ msg2 "Adding %d packages" ${#packages[@]}
+
+ if ${DRYRUN}; then
+ echo "${packages[*]}"
+ else
+ pacman --noconfirm -S "${packages[@]}"
+ fi
+fi
diff --git a/src/chroot-tools/librechroot b/src/chroot-tools/librechroot
index 6db11a8..923b818 100755
--- a/src/chroot-tools/librechroot
+++ b/src/chroot-tools/librechroot
@@ -274,7 +274,8 @@ usage() {
flag 'clean-pkgs' 'Remove all packages from the chroot copy that
are not in base-devel, $CHROOTEXTRAPKG, or named
as a dependency in the file `/startdir/PKGBUILD`
- in the chroot copy'
+ in the chroot copy; and install all packages
+ that are.'
print ' Other:'
flag "run $(_ CMD...)" 'Run CMD in the chroot copy'
flag 'enter' 'Enter an interactive shell in the chroot copy'
diff --git a/src/chroot-tools/libremakepkg b/src/chroot-tools/libremakepkg
index f5f4855..c6faf31 100755
--- a/src/chroot-tools/libremakepkg
+++ b/src/chroot-tools/libremakepkg
@@ -110,24 +110,32 @@ chroot_cleanup() {
build() (
local copydir=$1
- local repack=$2
- local makepkg_args=("${@:3}")
+ local srcpkg=$2
+ local repack=$3
+ local makepkg_args=("${@:4}")
+
+ local startdir
+ startdir=$(mktemp -d)
+ chown "$LIBREUSER:" "$startdir"
+ trap "rm -rf -- ${startdir@Q}" EXIT
+ sudo -u "$LIBREUSER" bsdtar -xf "$srcpkg" -C "$startdir" --strip-components 1
local run_ynet=()
local run_nnet=()
if $INCHROOT; then
- run_ynet=(unshare)
- run_nnet=(unshare --net)
+ local _run=(sh -c "mount --bind -o ro -- ${startdir@Q} ${startdir@Q} && cd ${startdir@Q} && \$@" --)
+ run_ynet=(unshare --mount -- "${_run[@]}")
+ run_nnet=(unshare --mount --net -- "${_run[@]}")
else
+ librechroot_flags+=(-r "$startdir:/startdir")
run_ynet=(librechroot "${librechroot_flags[@]}" run)
run_nnet=(librechroot "${librechroot_flags[@]}" -N run)
fi
$NONET || run_nnet=("${run_ynet[@]}")
prepare_chroot "$copydir" "$LIBREHOME" "$repack" false
- "${run_ynet[@]}" /chrootprepare "${makepkg_args[@]}" |& indent
run_hook pre_build "$copydir"
- trap "run_hook post_build ${copydir@Q}" EXIT
+ trap "run_hook post_build ${copydir@Q}; rm -rf -- ${startdir@Q}" EXIT
"${run_nnet[@]}" /chrootbuild "${makepkg_args[@]}" |& indent
)
@@ -166,10 +174,10 @@ usage() {
flag "-w <$(_ 'PATH[:PATH]')>" 'Bind mount a file or directory, read/write'
flag "-r <$(_ 'PATH[:PATH]')>" 'Bind mount a file or directory, read-only'
print ' %s options:' libremakepkg
- flag '-N' "Don't disable networking during build() and
- package(). PLEASE don't use this unless you
- have a special reason, its use is a violation
- of Parabola policy."
+ flag '-N' "Don't disable networking during prepare(),
+ build(), and package(). PLEASE don't use this
+ unless you have a special reason, its use is a
+ violation of Parabola policy."
flag '-R' 'Repackage contents of the package without rebuilding'
flag '-h' 'Show this message'
}
@@ -248,7 +256,7 @@ main() {
fi
# Make sure that the various *DEST directories exist
- mkdir -p -- "$PKGDEST" "$SRCDEST" "$SRCPKGDEST" "$LOGDEST"
+ sudo -u "$LIBREUSER" mkdir -p -- "$PKGDEST" "$SRCDEST" "$SRCPKGDEST" "$LOGDEST"
# OK, we are starting now ##############################################
@@ -257,8 +265,6 @@ main() {
"Waiting for existing lock on build directory to be released"
else
librechroot_flags+=(
- -w "$PWD:/startdir"
- -w "$SRCDEST:/srcdest"
-n "$CHROOT"
-l "$copy"
)
@@ -279,13 +285,37 @@ main() {
# Pre-build
msg 'Starting pre-build activities...'
run_hook check_pkgbuild
+
msg 'Downloading sources...'
- download_sources "$copydir" "$LIBREUSER" |& indent
+ local srcpkgdest srcpkg
+ srcpkgdest="$(mktemp -d)"
+ chown "$LIBREUSER:" "$srcpkgdest"
+ trap "rm -rf -- ${srcpkgdest@Q}" EXIT
+ SRCPKGDEST="$srcpkgdest" download_sources "$copydir" "$LIBREUSER" |& indent
+ srcpkg=("$srcpkgdest"/*)
+ if (( ${#srcpkg[@]} != 1 )); then
+ error 'Something went funny with makepkg --allsource'
+ return $EXIT_FAILURE
+ fi
+ # We want to inject "-$pkgarch" in to srcpkg's filename, right before $SRCEXT
+ local srcext pkgarch srcpkg_filename
+ srcext="$(MAKEPKG_CONF=$copydir/etc/makepkg.conf get_var makepkg SRCEXT)"
+ if [[ "$(bsdtar xfO "$srcpkg" --include='*/.SRCINFO' | grep $'\tarch =')" = $'\tarch = any' ]]; then
+ pkgarch=any
+ else
+ pkgarch=$CARCH
+ fi
+ srcpkg_filename=${srcpkg##*/}
+ srcpkg_filename=${srcpkg_filename%"${srcext}"}-${pkgarch}${srcext}
+ mv -T -- "$srcpkg" "$SRCPKGDEST/${srcpkg_filename}"
+ srcpkg="$SRCPKGDEST/${srcpkg_filename}"
+ rmdir -- "${srcpkgdest}"
+ trap EXIT
# Build
msg 'Starting to build the package...'
trap "exit_copy '$copydir' '$LIBREUSER'" EXIT
- build "$copydir" "$repack" "${makepkg_args[@]}"
+ build "$copydir" "$srcpkg" "$repack" "${makepkg_args[@]}"
# Post-build
msg 'Starting post-build activities...'