| 1 | #! /bin/sh -e |
| 2 | |
| 3 | vg=vg-$(hostname) |
| 4 | lvsz=-L8g |
| 5 | mirror=http://deb.debian.org/debian/ |
| 6 | myarch=$(dpkg-architecture -qDEB_HOST_ARCH) qemup=nil; unset myqarch |
| 7 | eval $(apt-config -c /usr/local.schroot/config/apt/conf.d/90local \ |
| 8 | shell http_proxy Acquire::http::proxy) |
| 9 | case ${http_proxy+t} in t) export http_proxy ;; esac |
| 10 | |
| 11 | badp=nil forcep=nil dbsopts= crossp=nil; unset qemu |
| 12 | while getopts "a:e:fm:q:Qv:z:x" opt; do |
| 13 | case $opt in |
| 14 | a) myarch=$OPTARG ;; |
| 15 | f) forcep=t ;; |
| 16 | m) mirror=$OPTARG ;; |
| 17 | q) myqarch=$OPTARG ;; |
| 18 | Q) qemup=t dbsopts=--foreign ;; |
| 19 | v) vg=$OPTARG ;; |
| 20 | x) crossp=t ;; |
| 21 | z) lvsz=-$OPTARG ;; |
| 22 | *) badp=t ;; |
| 23 | esac |
| 24 | done |
| 25 | shift $(( $OPTIND - 1 )) |
| 26 | case $# in 0) badp=t ;; esac |
| 27 | case $badp in |
| 28 | t) |
| 29 | cat >&2 <<EOF |
| 30 | usage: $0 [-fxQ] [-a MYARCH] [-m MIRROR] [-q MYQARCH] [-v VG] [-z LVSZ] |
| 31 | DIST-ARCH ... |
| 32 | EOF |
| 33 | exit 1 |
| 34 | ;; |
| 35 | esac |
| 36 | case ${myqarch+t} in t) ;; *) myqarch=$myarch ;; esac |
| 37 | for arg in "$@"; do |
| 38 | case $arg in *-*-*) echo >&2 "$0: bad chroot name \`$arg'"; exit 1 ;; esac |
| 39 | done |
| 40 | if [ ! -d /dev/$vg/ ]; then echo >&2 "$0: no volume group \`$vg'"; exit 1; fi |
| 41 | |
| 42 | for arg in "$@"; do |
| 43 | d=${arg%-*} a=${arg#*-} |
| 44 | mnt=/mnt/chroot/$d-$a |
| 45 | mkdir -p $mnt |
| 46 | if mountpoint -q $mnt; then umount $mnt; fi |
| 47 | if [ -b /dev/$vg/$d-$a ]; then |
| 48 | case $forcep in |
| 49 | nil) echo >&2 "$0: volume \`$d-$a' already exists"; exit 1 ;; |
| 50 | t) lvremove -f $vg/$d-$a ;; |
| 51 | esac |
| 52 | fi |
| 53 | lvcreate --yes $lvsz -n$arg $vg |
| 54 | mkfs -j -L$arg /dev/$vg/$arg |
| 55 | mount -orelatime,data=writeback,commit=3600,barrier=0 /dev/$vg/$arg $mnt/ |
| 56 | mkdir -m755 $mnt/fs/ |
| 57 | chmod 750 $mnt/ |
| 58 | pkgs=ccache,eatmydata,fakeroot,libfile-fcntllock-perl,locales,tzdata |
| 59 | case $crossp in nil) pkgs=$pkgs,build-essential ;; esac |
| 60 | eatmydata debootstrap $dbsopts --arch=$a --variant=minbase --include=$pkgs \ |
| 61 | $d $mnt/fs/ $mirror |
| 62 | case $qemup in |
| 63 | t) |
| 64 | case $a in |
| 65 | armel | armhf) qarch=arm ;; |
| 66 | arm64) qarch=aarch64 ;; |
| 67 | amd64) qarch=x86_64 ;; |
| 68 | i386) qarch=i386 ;; |
| 69 | *) echo >&2 "$0: no qemu arch for $a"; exit 1 ;; |
| 70 | esac |
| 71 | qemu=qemu-$qarch-static |
| 72 | install /usr/local.schroot/cross/$d-$myqarch/QEMU/$qemu $mnt/fs/usr/bin/ |
| 73 | chroot $mnt/fs/ /debootstrap/debootstrap --second-stage |
| 74 | ln -sf /usr/local.schroot/cross/$d-$myqarch/QEMU/$qemu $mnt/fs/usr/bin/ |
| 75 | ;; |
| 76 | esac |
| 77 | cd $mnt/fs/usr/ |
| 78 | rm -rf local/; ln -s local.schroot/$a local |
| 79 | cd $mnt/fs/etc/apt/ |
| 80 | rm -rf apt.conf sources.list |
| 81 | ln -s /usr/local.schroot/config/apt/conf.d/10sbuild apt.conf.d/ |
| 82 | ln -s /usr/local.schroot/config/apt/conf.d/90local apt.conf.d/ |
| 83 | ln -s /usr/local.schroot/config/apt/sources.$d sources.list |
| 84 | cat >apt.conf.d/20arch <<EOF |
| 85 | ### -*-conf-*- |
| 86 | |
| 87 | APT { |
| 88 | Architecture "$a"; |
| 89 | }; |
| 90 | EOF |
| 91 | cd $mnt/fs/etc/ |
| 92 | cp /etc/locale.gen /etc/timezone ./ |
| 93 | tz=$(cat timezone); ln -sf /usr/share/zoneinfo/$tz localtime |
| 94 | ln -sf /proc/mounts mtab |
| 95 | cd $mnt/fs/etc/default/ |
| 96 | cp /etc/default/locale . |
| 97 | cd $mnt/fs/usr/sbin/ |
| 98 | cat >policy-rc.d <<EOF |
| 99 | #! /bin/sh |
| 100 | echo >&2 "policy-rc.d: Services disabled by policy." |
| 101 | exit 101 |
| 102 | EOF |
| 103 | chmod +x policy-rc.d |
| 104 | cd $mnt/fs/etc/ld.so.conf.d/ |
| 105 | cat >libc.conf <<EOF |
| 106 | # libc default configuration |
| 107 | EOF |
| 108 | cat >zzz-local.conf <<EOF |
| 109 | ### -*-conf-*- |
| 110 | ### Local hack to make /usr/local/ late. |
| 111 | /usr/local/lib |
| 112 | EOF |
| 113 | cd / |
| 114 | umount $mnt/ |
| 115 | case $qemup in |
| 116 | t) |
| 117 | schroot -uroot -csource:$d-$a -- eatmydata sh -e -c " |
| 118 | if dpkg-divert >/dev/null 2>&1 --no-rename --help |
| 119 | then no_rename=--no-rename |
| 120 | else no_rename= |
| 121 | fi |
| 122 | |
| 123 | dpkg-divert --package install-cross-tools \$no_rename \ |
| 124 | --divert /usr/bin/$qemu.$a --add /usr/bin/$qemu" |
| 125 | /usr/local.schroot/maint/install-cross-tools -a$myarch -q$myqarch $d-$a |
| 126 | ;; |
| 127 | esac |
| 128 | schroot -uroot -csource:$d-$a -- eatmydata sh -e -c ' |
| 129 | apt-get update |
| 130 | apt-get -y upgrade |
| 131 | locale-gen |
| 132 | ldconfig |
| 133 | apt-get -y autoremove |
| 134 | apt-get clean' |
| 135 | done |