Add in the mess from the original symbiosisware version.
[distorted-chroot] / mess / maint / mkbuildchroot
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