Commit | Line | Data |
---|---|---|
fd0f20e1 MW |
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 |