OILS / regtest / debian-setup.ysh View on Github | oils.pub

222 lines, 101 significant
1#!bin/ysh
2
3#
4# Set up Debian Linux chroot. See regtest/aports.md
5#
6# Usage:
7# regtest/aports-setup.sh <function name>
8
9proc download-oils() {
10 var tarball_id=${1:-$TARBALL_ID}
11
12 # var url="https://op.oilshell.org/uuu/github-jobs/$tarball_id/cpp-tarball.wwz/_release/oils-for-unix.tar"
13 var url="https://op.oilshell.org/code/github-jobs/git-fd65318bebefcacf83f0ba8678575c4a8f56fa4b/oils-for-unix.tar"
14
15 rm -f -v _tmp/oils-for-unix.tar
16
17 #wget --no-clobber --directory-prefix _tmp "$url"
18 wget --directory-prefix _tmp "$url"
19}
20
21proc make-user() {
22 exec-chroot "useradd -m -s /bin/bash udu"
23
24 # 'wheel' is for 'sudo'
25 exec-chroot "groupadd -f wheel"
26 exec-chroot "adduser udu wheel"
27}
28
29proc setup-doas() {
30 sudo rm -f $CHROOT_DIR/etc/doas.conf
31
32 # no password
33 exec-chroot u'echo "permit nopass :wheel" >> /etc/doas.conf'
34}
35
36proc change-perms(path) {
37 # pass any number of args
38
39 # get uid from /home/udu
40 var uid=$(stat -c '%u' $CHROOT_HOME_DIR)
41 sudo chown --verbose --recursive $uid $path
42}
43
44# test-time-tsv() {
45# enter-rootfs-user sh -c '
46# cd oils
47# pwd
48# whoami
49# echo ---
50
51# build/py.sh time-helper
52# regtest/aports-guest.sh my-time-tsv-test
53# '
54# }
55
56proc oils-in-chroot() {
57 # test-time-tsv
58 copy-oils
59 build-oils
60}
61
62proc copy-oils() {
63 var dest=CHROOT_HOME_DIR
64
65 var tar=$(pwd) ++ '/_tmp/oils-for-unix.tar'
66 pushd $dest
67 sudo tar -x < $tar
68 popd
69
70 change-perms "$dest/oils-for-unix-0.37.0"
71}
72
73proc build-oils() {
74 exec-chroot-user 'cd oils-for-unix-*
75 ./configure
76 _build/oils.sh # do not --skip-rebuild
77 doas ./install
78 '
79}
80
81proc create-osh-overlay() {
82 # _debian_chroot/
83 # debian-build/ # chroot image
84 # osh-as-sh.overlay/ # overlay
85 # merged/ # permanently mounted
86 # work/
87 # layer/ # has the OSH symlink
88
89
90 var osh_overlay=DEBIAN_ROOT ++ '/osh-as-sh.overlay'
91
92 mkdir -v -p $osh_overlay/{merged,work,layer}
93 cp regtest/sh_wrapper.sh $osh_overlay/layer/sh_wrapper.sh
94 chmod +x $osh_overlay/layer/sh_wrapper.sh
95
96 # -o index=off fixes this error: fsconfig() failed: Stale file handle
97 # See also https://oilshell.zulipchat.com/#narrow/channel/522730-distros/topic/setting.20up.20regtest.2Faports-setup.2Esh/with/544318771
98 sudo mount \
99 -t overlay \
100 osh-as-sh \
101 -o index=off \
102 -o "lowerdir=$CHROOT_DIR,upperdir=$osh_overlay/layer,workdir=$osh_overlay/work" \
103 $osh_overlay/merged
104
105 exec-chroot-osh '
106 set -x
107 if ! test -f /usr/local/bin/oils-for-unix; then
108 echo "Build Oils first"
109 exit
110 fi
111 ln -s -f /sh_wrapper.sh /bin/sh
112 ln -s -f /usr/local/bin/oils-for-unix /bin/dash
113 ln -s -f /usr/local/bin/oils-for-unix /bin/bash
114 '
115}
116
117proc remove-osh-overlay() {
118 var dir='_debian_chroot/osh-as-sh.overlay'
119 sudo umount $dir/merged || true
120 sudo rm -r -f $dir
121}
122
123# remove-shard-layers() {
124# sudo rm -r -f _chroot/shard*
125# }
126
127# make-distfiles-tar() {
128# local a_repo=$1 # 'main' or 'community'
129
130# local tar=_chroot/distfiles-${a_repo}.tar
131# tar --create --file $tar --directory $CHROOT_DIR/var/cache/distfiles .
132
133# tar --list < $tar
134# echo
135# ls -l --si $tar
136# echo
137# }
138
139# unpack-distfiles() {
140# local a_repo=$1 # 'main' or 'community'
141
142# local tar=_chroot/distfiles-${a_repo}.tar
143# sudo tar --verbose -x --directory $CHROOT_DIR/var/cache/distfiles < $tar
144# }
145
146. regtest/debian-common.ysh
147
148proc remove-all() {
149 set -x
150 remove-chroot
151 remove-osh-overlay
152# remove-shard-layers || true
153}
154
155proc remove-chroot() {
156 try {
157 sudo umount -R $CHROOT_DIR 2>/dev/null
158 }
159 sudo rm -rf $CHROOT_DIR
160}
161
162proc clone-debootstrap() {
163 var dir = '../debianlinux'
164 mkdir -p $dir
165 rm -rf "$dir/debootstrap"
166 pushd $dir
167
168 # Took 1m 13s, at 27 MiB /ssec
169 git clone \
170 https://salsa.debian.org/installer-team/debootstrap.git
171
172 popd
173}
174
175proc make-chroot() {
176 var dir = '../debianlinux/debootstrap'
177 pushd $dir
178 var debootstrap_dir = $(pwd)
179
180 # This takes about 1m20s
181 # need to pass --arch, automatic detection doesnt work on non-debian systems
182 sudo DEBOOTSTRAP_DIR=$debootstrap_dir ./debootstrap --arch=amd64 stable $CHROOT_DIR http://deb.debian.org/debian/
183 popd
184}
185
186proc add-build-deps() {
187 # takes around 2 minutes
188 exec-chroot "apt-get update; apt-get install doas dpkg-dev build-essential devscripts fakeroot apt-utils -y"
189}
190
191proc config-chroot() {
192 exec-chroot 'echo "deb-src http://deb.debian.org/debian stable main" >> /etc/apt/sources.list'
193 exec-chroot 'apt-get update' # else apt still doesnt know we added the deb-src line
194 make-user
195 setup-doas
196}
197
198proc fetch-all() {
199 # Download the resources required for setting up a new chroot
200 clone-debootstrap
201
202 download-oils
203}
204
205proc prepare-all() {
206 # Create a new chroot environment and set it up from scratch
207 make-chroot
208
209 add-build-deps
210
211 # TODO: mount /proc etc?
212 config-chroot
213
214 oils-in-chroot
215
216 create-osh-overlay
217
218 # # makes a host file
219 # apk-manifest
220}
221
222runproc @ARGV