From: Peter Palfrader Date: Wed, 8 Feb 2012 11:23:22 +0000 (+0100) Subject: apt-in-chroot: add schroot support X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dsa-metapackages.git;a=commitdiff_plain;h=216ab9e2344557d85f989029c21e9c372b55b380;hp=7019d54b2ae1a22f7d973bf1245b8ebe63583823 apt-in-chroot: add schroot support --- diff --git a/apt-in-chroot b/apt-in-chroot index 9082965..ee02a10 100755 --- a/apt-in-chroot +++ b/apt-in-chroot @@ -3,6 +3,7 @@ # apt-in-chroot - runs apt in a specified chroot # # Copyright (C) 2010 Martin Zobel-Helas +# Copyright (C) 2012 Peter Palfrader # # 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 @@ -19,15 +20,13 @@ # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # -VALID_CHROOTS="$(/usr/bin/dchroot -l 2>&1 | /usr/bin/awk -F": " '{print $2}' | /usr/bin/tr ' ' '\n')" -VALID_CHROOTS_PARSE="$(/usr/bin/dchroot -l 2>&1 | /usr/bin/awk -F": " '{print $2}' | /bin/sed -e 's/ /|/g')" +PATH="/usr/bin:/bin" +export PATH usage() { bn="`basename "$0"`" echo "Usage: $bn []" echo "" - echo " allowed chroots are ($VALID_CHROOTS_PARSE)" - echo "" echo " allowed apt sub-commands are:" echo " + install" echo " + remove" @@ -37,16 +36,48 @@ usage() { } -if [ "$#" -lt "3" ]; then +if [ "$#" -lt "2" ]; then usage >&2 exit 1 fi CHROOT_DIR="/chroot" -CHROOT=$1; shift -APTCMD=$1; shift -PACKAGES=$* +CHROOT="$1"; shift +APTCMD="$1"; shift +PACKAGES="$*" + +declare -a suffix +suffix[0]="" + +if [ -x /usr/bin/dchroot ] ; then + chroots=$(dchroot -l 2>&1 | awk -F": " '{print $2}' | tr ' ' '\n') + method=dchroot + suffix[${#suffix[*]}]="_$(dpkg --print-architecture)" +elif [ -x /usr/bin/schroot ] ; then + chroots=$(schroot -l | awk -F":" '{print $2}' | grep -- '-dchroot$' ) + method=schroot + suffix="-dchroot" + suffix[${#suffix[*]}]="-dchroot" + suffix[${#suffix[*]}]="-$(dpkg --print-architecture)-dchroot" +else + echo >&2 "Cannot find chroot wrapper." + exit 1 +fi +requested_chroot="" +while read c; do + for (( i = 0 ; i < ${#suffix[*]} ; i++ )); do + if [ "$c" == "$CHROOT${suffix[$i]}" ]; then + requested_chroot="$c" + fi + done +done <<< "$chroots" + +if ! [ -n "$requested_chroot" ]; then + echo >&2 "$CHROOT is not a valid dchroot. Available chroots are:" + echo "$chroots" + exit 1 +fi case "$APTCMD" in install|remove|purge|build-dep|update) @@ -58,13 +89,14 @@ install|remove|purge|build-dep|update) ;; esac -if echo "$VALID_CHROOTS" | grep -qFx "$CHROOT"; then - # valid chroot - echo "Will run '/usr/sbin/chroot $CHROOT_DIR/$CHROOT apt-get $APTCMD $PACKAGES'" - /usr/sbin/chroot $CHROOT_DIR/$CHROOT apt-get $APTCMD $PACKAGES +# valid chroot +if [ "$method" = "dchroot" ]; then + echo "Will run '/usr/sbin/chroot $CHROOT_DIR/$requested_chroot apt-get $APTCMD $PACKAGES'" + /usr/sbin/chroot $CHROOT_DIR/"$requested_chroot" apt-get "$APTCMD" $PACKAGES +elif [ "$method" = "schroot" ]; then + echo "Will run 'schroot -c $requested_chroot apt-get $APTCMD $PACKAGES'" + #/usr/sbin/chroot $CHROOT_DIR/"$requested_chroot" apt-get "$APTCMD" $PACKAGES else - echo "$CHROOT not in $VALID_CHROOTS_PARSE" + echo >&2 "Invalid method." exit 1 fi - - diff --git a/debian/changelog b/debian/changelog index 88b1cdb..645581b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -9,7 +9,10 @@ debian.org (46) Xnstable; urgency=low [ Cyril Brulebois ] * release.debian.org: Add git-email. - -- Peter Palfrader Sun, 05 Feb 2012 22:26:37 +0100 + [ Peter Palfrader ] + * apt-in-chroot: add schroot support. + + -- Peter Palfrader Wed, 08 Feb 2012 12:22:55 +0100 debian.org (45) unstable; urgency=low