X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=modules%2Fschroot%2Ffiles%2Fsetup-dchroot;h=7f372fe9eb79d5f65fce639dea85b34a77d550e4;hb=660ae219dc498840a7d4c38a371429d6a613431e;hp=998ad41478f3eeb6bea6ac4b09101dc31dc0c065;hpb=bab84ed1f4f426dbcd223672431827444768848e;p=mirror%2Fdsa-puppet.git diff --git a/modules/schroot/files/setup-dchroot b/modules/schroot/files/setup-dchroot index 998ad4147..7f372fe9e 100755 --- a/modules/schroot/files/setup-dchroot +++ b/modules/schroot/files/setup-dchroot @@ -72,26 +72,47 @@ do_cleanup() { done } +genname() { + local suite="$1"; shift + local arch="$1"; shift + + if [ -n "$sbuildnames" ]; then + local name="${suite}-${arch}-sbuild" + else + local name="${suite}_${arch}-dchroot" + fi + + echo "$name" +} + + genschrootconf() { local suite="$1"; shift local arch="$1"; shift local target="$1"; shift local extra="${1:-}"; shift || true + local aliases="" if [ -n "$extra" ]; then local suite="${suite}-${extra}" fi - if [ -n "$sbuildnames" ]; then - local name="${suite}-${arch}-sbuild" - else - local name="${suite}_${arch}-dchroot" - fi + local name="$(genname "$suite" "$arch")" + local fullname="$name" + case "$arch" in + kfreebsd-*) + aliases="$name" + # FreeBSD only allows relatively short paths to mountpoints + # therefore saving a few charakters making the chroot dir fit + name=${name/kfreebsd-amd64/k-a} + name=${name/kfreebsd-i386/k-i} + ;; + esac cat << EOF [${name}] -description=[${name}] Debian $suite chroot for $arch +description=[${fullname}] Debian $suite chroot for $arch type=file file=$target EOF @@ -103,10 +124,17 @@ EOF echo "profile=$personality" if [ "$THISARCH" = "$arch" ] && [ -z "$buildd" ]; then - echo "aliases=$suite" + if [ -z "$aliases" ] ; then + aliases="$suite" + else + aliases="$aliases,$suite" + fi + fi + if [ -n "$aliases" ] ; then + echo "aliases=$aliases" fi case "$arch" in - armel|armhf|i386|powerpc|s390|sparc) + armel|armhf|i386|mips|mipsel|powerpc|s390|sparc) echo "personality=linux32" ;; esac @@ -116,17 +144,23 @@ EOF sid) genschrootconf "experimental" "$arch" "$target" ;; - #experimental|jessie) experimental) : ;; *) if [ -z "$extra" ] && [ -z "$ubuntu" ]; then genschrootconf "$suite" "$arch" "$target" "backports" - [ -n "$buildd" ] && genschrootconf "$suite" "$arch" "$target" "backports-sloppy" - [ -n "$buildd" ] && genschrootconf "$suite" "$arch" "$target" "lts" - [ -n "$buildd" ] && genschrootconf "$suite" "$arch" "$target" "proposed-updates" - [ -n "$buildd" ] && genschrootconf "$suite" "$arch" "$target" "security" + if [ -n "$buildd" ] ; then + genschrootconf "$suite" "$arch" "$target" "backports-sloppy" + genschrootconf "$suite" "$arch" "$target" "proposed-updates" + genschrootconf "$suite" "$arch" "$target" "security" + case "$arch" in + kfreebsd-*) + genschrootconf "$suite" "$arch" "$target" "kfreebsd" + genschrootconf "$suite" "$arch" "$target" "kfreebsd-security" + ;; + esac + fi fi esac return 0 @@ -150,7 +184,8 @@ arch="$THISARCH" if [ -e /etc/schroot/dsa/default-mirror ]; then mirror=$(cat /etc/schroot/dsa/default-mirror ) fi -mirror="${mirror:-http://http.debian.net/debian}" +mirror="${mirror:-https://deb.debian.org/debian}" +smirror="https://deb.debian.org/debian-security" configonly="" force="" basedir="/srv/chroot" @@ -159,8 +194,9 @@ keyring=/usr/share/keyrings/debian-archive-keyring.gpg personality="dsa" sbuildnames="" ubuntu="" -groupuser="Debian,guest" +groupuser="Debian,guest,d-i" grouproot="" +include="apt,fakeroot,ca-certificates" users="" usersroot="" bare="" @@ -171,7 +207,7 @@ cleanup+=(":") trap do_cleanup EXIT buildd="" -while getopts "a:b:Bcd:Dfg:hKk:m:o:O:p:r:sS:u" OPTION +while getopts "a:b:Bcd:Dfg:hI:Kk:m:o:O:p:r:sS:u" OPTION do case $OPTION in a) @@ -192,8 +228,8 @@ do bare="1" groupuser="" grouproot="" - users="buildd" - usersroot="buildd" + users="buildd,buildd2" + usersroot="buildd,buildd2" personality="buildd" suffix="sbuild" ;; @@ -210,6 +246,9 @@ do usage exit 0 ;; + I) + include="$include,$OPTARG" + ;; K) keep="4" ;; @@ -255,7 +294,17 @@ fi suite="$1"; shift tuple="${suite}_${arch}" -builddir=${builddir:-$basedir} +if [ -z "${builddir:-}" ]; then + builddir=${builddir:-$basedir} + for u in schroot-unpack unpack; do + # if one of these directories exists and is on a different filesystem, prefer it. + candidate="$builddir/$u" + if [ -e "$candidate" ] && + [ "$(stat -f --printf '%i\n' "$builddir" )" != "$(stat -f --printf '%i\n' "$candidate")" ]; then + builddir="$candidate" + fi + done +fi [ -d "$basedir" ] || die "Error: $basedir does not exist (or is not a directory)." [ -d "$builddir" ] || die "Error: $builddir does not exist (or is not a directory)." @@ -265,6 +314,17 @@ target="$basedir/$tuple.tar.gz" schrootconfig="/etc/schroot/chroot.d/${tuple}-$suffix" ! [ -e "$schrootconfig" ] || [ -n "$force" ] || die "Error: $schrootconfig already exists." +suite_alias="$suite" +case "$arch" in + kfreebsd-*) + case "$suite" in + jessie) + suite_alias="$suite-kfreebsd" + ;; + esac + ;; +esac + # # let's go @@ -287,13 +347,29 @@ if ! [ -e "$script" ]; then fi fi +case "$suite" in + stretch|jessie|precise|trusty|xenial) + include="$include,apt-transport-https" + ;; +esac + +bindir=$(mktemp -d) +cleanup+=("rm -r $bindir") +cat > "$bindir/wget" << 'EOF' +#!/bin/sh +exec /usr/bin/wget --ca-directory=/etc/ssl/ca-global "$@" +EOF +chmod +x "$bindir/wget" + set -x -debootstrap \ +PATH="$bindir:$PATH" \ + debootstrap \ --keyring "$keyring" \ - --include="apt" \ + --include="$include" \ --variant=buildd \ --arch="$arch" \ - "$suite" "$rootdir" "$mirror" "$script" + --no-merged-usr \ + "$suite_alias" "$rootdir" "$mirror" "$script" echo "$tuple" > "$rootdir/etc/debian_chroot" echo "force-unsafe-io" > "$rootdir/etc/dpkg/dpkg.cfg.d/force-unsafe-io" echo "force-confnew" > "$rootdir/etc/dpkg/dpkg.cfg.d/force-confnew" @@ -312,7 +388,7 @@ esac chroot "$rootdir" apt-get update -chroot "$rootdir" apt-get install -y --force-yes --no-install-recommends policyrcd-script-zg2 +chroot "$rootdir" apt-get install -y --no-install-recommends policyrcd-script-zg2 cat > "$rootdir/usr/local/sbin/policy-rc.d" << 'EOF' #!/bin/sh @@ -331,9 +407,24 @@ while true; do done EOF chmod +x "$rootdir/usr/local/sbin/policy-rc.d" -[ -z "$bare" ] && [ -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 + +case "$suite" in + jessie) # LTS updates + echo "deb ${smirror} ${suite}/updates main" >> "$rootdir/etc/apt/sources.list" + chroot "$rootdir" apt-get update + chroot "$rootdir" apt-get dist-upgrade -y + ;; +esac +if [ -n "$ubuntu" ]; then + echo "deb $mirror ${suite}-updates main" >> "$rootdir/etc/apt/sources.list" + echo "deb $mirror ${suite}-security main" >> "$rootdir/etc/apt/sources.list" + chroot "$rootdir" apt-get update + chroot "$rootdir" apt-get dist-upgrade -y +fi + +[ -z "$bare" ] && [ -z "$ubuntu" ] && chroot "$rootdir" apt-get install -y --no-install-recommends locales-all +chroot "$rootdir" apt-get install -y --no-install-recommends build-essential +[ -z "$bare" ] && chroot "$rootdir" apt-get install -y --no-install-recommends zsh less vim fakeroot devscripts gdb rm -f "$rootdir/etc/apt/sources.list" "$rootdir/etc/apt/sources.list.d/*" chroot "$rootdir" apt-get clean umount "$rootdir/dev" 2>/dev/null || true @@ -343,9 +434,10 @@ tartmp=$(tempfile --directory "$basedir" --suffix=".tar.gz") cleanup+=("rm -f $tartmp") ( cd "$rootdir" + chmod 0755 "$rootdir" tar caf "$tartmp" . if ! [ -z "$keep" ]; then - savelog -l -c 4 "$target" + savelog -l -c 2 "$target" fi mv "$tartmp" "$target" )