X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=modules%2Fporterbox%2Ffiles%2Fsetup-dchroot;h=81732c614cf20d9830032ac5674546dc6794debd;hb=5dcca55f481da5b65e989a2d5712325bd32fe736;hp=130feac70fb6fbd3989b00225954f1d132efd1c1;hpb=7bb415b6547466ac679232f79496d371feb41417;p=mirror%2Fdsa-puppet.git diff --git a/modules/porterbox/files/setup-dchroot b/modules/porterbox/files/setup-dchroot index 130feac70..81732c614 100755 --- a/modules/porterbox/files/setup-dchroot +++ b/modules/porterbox/files/setup-dchroot @@ -39,11 +39,14 @@ OPTIONS: -a ARCH debootstrap arch [$arch] -m MIRROR http mirror to use [$mirror] -b basedir place where to put the tarball [$basedir] + -B install less stuff into chroot -c write config only -d dir place where to build the chroot [${builddir:-$basedir}] -f overwrite config and target tarball + -g GROUPS groups that should have access to the schroot [$groupuser] -k KEYRING use an alternate keyring [$keyring] -p PERS use a different sbuild personality [$personality] + -r GROUPS groups that should have root in the schroot [$grouproot] -s use sbuild compatible naming scheme -u Ubuntu target -h this help @@ -85,10 +88,10 @@ cat << EOF description=[${name}] Debian $suite chroot for $arch type=file file=$target -groups=Debian,guest -root-groups=adm -source-groups=adm -source-root-groups=adm +groups=$groupuser +root-groups=$grouproot +#source-groups=adm +#source-root-groups=adm EOF if dpkg --compare-versions "$(lsb_release --release --short)" '<' 7; then @@ -121,6 +124,16 @@ EOF esac } +do_config() { + local tmpschrootconf=$(tempfile) + cleanup+=("rm -f $tmpschrootconf") + genschrootconf "$suite" "$arch" "$target" > "$tmpschrootconf" + if ! [ -e "$schrootconfig" ] || ! diff "$schrootconfig" "$tmpschrootconf" > /dev/null; then + mv "$tmpschrootconf" "$schrootconfig" + chmod 644 "$schrootconfig" + fi +} + set -e set -u @@ -138,10 +151,13 @@ keyring=/usr/share/keyrings/debian-archive-keyring.gpg personality="dsa" sbuildnames="" ubuntu="" +groupuser="Debian,guest" +grouproot="" +bare="" declare -a cleanup trap do_cleanup EXIT -while getopts "a:b:cd:fhk:m:p:su" OPTION +while getopts "a:b:Bcd:fg:hk:m:p:r:su" OPTION do case $OPTION in a) @@ -150,6 +166,9 @@ do b) basedir="$OPTARG" ;; + B) + bare="1" + ;; c) configonly="1" ;; @@ -159,6 +178,9 @@ do f) force="1" ;; + g) + groupuser="$OPTARG" + ;; h) usage exit 0 @@ -172,6 +194,9 @@ do p) personality="$OPTARG" ;; + r) + grouproot="$OPTARG" + ;; s) sbuildnames="1" ;; @@ -207,13 +232,23 @@ schrootconfig="/etc/schroot/chroot.d/${tuple}-dchroot" # # let's go # -genschrootconf "$suite" "$arch" "$target" | tee "$schrootconfig" -if [ -n "$configonly" ]; then exit 0; fi +if [ -n "$configonly" ]; then + do_config + exit 0 +fi rootdir=$(mktemp -d "$builddir/create-$suite-XXXXXX") cleanup+=("rm -r $rootdir") cleanup+=("umount $rootdir/sys") +script=/usr/share/debootstrap/scripts/"$suite" +if ! [ -e "$script" ]; then + if [ -z "$ubuntu" ]; then + script=/usr/share/debootstrap/scripts/sid + else + script=/usr/share/debootstrap/scripts/gutsy + fi +fi set -x debootstrap \ @@ -221,11 +256,25 @@ debootstrap \ --include="apt" \ --variant=buildd \ --arch="$arch" \ - "$suite" "$rootdir" "$mirror" -echo "$tuple" > $rootdir/etc/debian_chroot + "$suite" "$rootdir" "$mirror" "$script" +echo "$tuple" > "$rootdir/etc/debian_chroot" +echo "force-unsafe-io" > "$rootdir/etc/dpkg/dpkg.cfg.d/force-unsafe-io" + +cleanup+=("umount $rootdir/dev") +case "$(uname -s)" in + Linux) + ;; + GNU/kFreeBSD) + mount -t devfs none "$rootdir/dev" + ;; + *) + echo >&2 "Warning: Unexpected uname -s output." + ;; +esac + chroot "$rootdir" apt-get update -chroot "$rootdir" apt-get install -y --no-install-recommends policyrcd-script-zg2 +chroot "$rootdir" apt-get install -y --force-yes --no-install-recommends policyrcd-script-zg2 cat > "$rootdir/usr/local/sbin/policy-rc.d" << 'EOF' #!/bin/sh @@ -244,11 +293,16 @@ while true; do done EOF chmod +x "$rootdir/usr/local/sbin/policy-rc.d" -[ -z "$ubuntu" ] && chroot "$rootdir" apt-get install -y --no-install-recommends locales-all -chroot "$rootdir" apt-get install -y --no-install-recommends zsh build-essential less vim fakeroot devscripts gdb +[ -z "$ubuntu" ] && chroot "$rootdir" apt-get install -y --force-yes --no-install-recommends locales-all +chroot "$rootdir" apt-get install -y --force-yes --no-install-recommends build-essential +[ -z "$bare" ] && chroot "$rootdir" apt-get install -y --force-yes --no-install-recommends zsh less vim fakeroot devscripts gdb rm -f "$rootdir/etc/apt/sources.list" "$rootdir/etc/apt/sources.list.d/*" -umount "$rootdir/sys" || true +chroot "$rootdir" apt-get clean +umount "$rootdir/dev" 2>/dev/null || true +umount "$rootdir/sys" 2>/dev/null || true tartmp=$(tempfile --directory "$basedir" --suffix=".tar.gz") cleanup+=("rm -f $tartmp") (cd "$rootdir" && tar caf "$tartmp" . && mv "$tartmp" "$target") + +do_config