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

78 lines, 56 significant
1#!bin/ysh
2#
3# Build packages using the debian chroot.
4#
5# Usage:
6# regtest/debian-build.ysh <function-name>
7# Examples:
8# regtest/debian-build.ysh osh-package-build <package>
9# Build <package> using osh as the system shell
10# regtest/debian-build.ysh prepare-all
11# Build <package> in a standard Debian environment
12
13. regtest/debian-common.ysh
14
15proc create-package-layer(package) {
16 mkdir -p $DEBIAN_ROOT/package-overlays
17 var package_layer_dir = "$DEBIAN_ROOT/package-overlays/$package.overlay"
18 rm -rf $package_layer_dir
19 mkdir -v -p $package_layer_dir/{merged,work,layer}
20}
21
22proc remove-package-layer(package) {
23 var dir=DEBIAN_ROOT ++ '/package-overlays/' ++ package ++ '.overlay'
24 sudo umount $dir/merged || true
25 sudo rm -rf $dir
26}
27
28proc setup-package-layer(package, base) {
29 var package_dir = "$DEBIAN_ROOT/package-overlays/$package.overlay"
30 var lower_dir = ''
31 if(base === 'baseline') {
32 setvar lower_dir = CHROOT_DIR
33 } elif (base === 'osh-as-sh') {
34 setvar lower_dir=DEBIAN_ROOT ++ '/osh-as-sh.overlay/merged'
35 } else {
36 echo "Error: $base is not a valid option"
37 return 1
38 }
39 # -o index=off fixes this error: fsconfig() failed: Stale file handle
40 # See also https://oilshell.zulipchat.com/#narrow/channel/522730-distros/topic/setting.20up.20regtest.2Faports-setup.2Esh/with/544318771
41 sudo mount \
42 -t overlay \
43 $package-layer \
44 -o index=off \
45 -o "lowerdir=$lower_dir,upperdir=$package_dir/layer,workdir=$package_dir/work" \
46 $package_dir/merged
47}
48
49proc enter-package-layer(package, cmd) {
50 sudo chroot $DEBIAN_ROOT/package-overlays/$package.overlay/merged /bin/bash -l -c $cmd
51}
52
53proc build-package(package) {
54 var cd='cd /home/udu;'
55 enter-package-layer $package "apt-get update"
56 enter-package-layer $package "$cd apt-get source $package"
57 enter-package-layer $package "$cd cd $package-*; apt-get build-dep -y $package; dpkg-buildpackage -us -uc -b"
58}
59
60proc osh-package-build(package) {
61 try {
62 remove-package-layer $package
63 }
64 create-package-layer $package
65 setup-package-layer $package osh-as-sh
66 build-package $package
67}
68proc baseline-package-build(package) {
69 try {
70 remove-package-layer $package
71 }
72 create-package-layer $package
73 setup-package-layer $package baseline
74 build-package $package
75}
76
77
78runproc @ARGV