| 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 |
|
| 15 | proc 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 |
|
| 22 | proc 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 |
|
| 28 | proc 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 |
|
| 49 | proc enter-package-layer(package, cmd) {
|
| 50 | sudo chroot $DEBIAN_ROOT/package-overlays/$package.overlay/merged /bin/bash -l -c $cmd
|
| 51 | }
|
| 52 |
|
| 53 | proc 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 |
|
| 60 | proc 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 | }
|
| 68 | proc 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 |
|
| 78 | runproc @ARGV
|