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
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
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
}
do_config() {
if [ -e /etc/schroot/dsa/default-mirror ]; then
mirror=$(cat /etc/schroot/dsa/default-mirror )
fi
-mirror="${mirror:-http://cdn.debian.net/debian}"
+mirror="${mirror:-https://deb.debian.org/debian}"
+smirror="https://deb.debian.org/debian-security"
configonly=""
force=""
basedir="/srv/chroot"
personality="dsa"
sbuildnames=""
ubuntu=""
-groupuser="Debian,guest"
+groupuser="Debian,guest,d-i"
grouproot=""
+include="apt,fakeroot,ca-certificates"
users=""
usersroot=""
bare=""
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)
bare="1"
groupuser=""
grouproot=""
- users="buildd"
- usersroot="buildd"
+ users="buildd,buildd2"
+ usersroot="buildd,buildd2"
personality="buildd"
suffix="sbuild"
;;
usage
exit 0
;;
+ I)
+ include="$include,$OPTARG"
+ ;;
K)
keep="4"
;;
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)."
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
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"
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
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
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"
)