aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2020-01-03 18:01:11 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2020-01-03 18:01:11 +0000
commitd7e8c75b56a90940bb4bdb18de72f641ade0a042 (patch)
tree23fd6ffe06f3e7941e345c69771b1eef95854560
parenta57659465b7eadbfec6d5bb09de6f60903035bf2 (diff)
downloadlh-bootstrap-d7e8c75b56a90940bb4bdb18de72f641ade0a042.tar.xz
Modernize, convert to s6li v1
-rw-r--r--layout/rootfs/etc/s6-linux-init/env/PATH1
-rw-r--r--layout/rootfs/run/.empty (renamed from layout/rootfs/run/shm/.empty)0
-rwxr-xr-xlayout/rootfs/run/service/.s6-svscan/SIGINT3
-rwxr-xr-xlayout/rootfs/run/service/.s6-svscan/SIGQUIT1
-rwxr-xr-xlayout/rootfs/run/service/.s6-svscan/SIGTERM1
-rwxr-xr-xlayout/rootfs/run/service/.s6-svscan/SIGUSR11
-rwxr-xr-xlayout/rootfs/run/service/.s6-svscan/SIGUSR21
-rwxr-xr-xlayout/rootfs/run/service/.s6-svscan/finish3
-rwxr-xr-xlayout/rootfs/run/service/s6-linux-init-early-getty/run3
-rwxr-xr-xlayout/rootfs/run/service/s6-svscan-log/run7
-rw-r--r--layout/rootfs/run/uncaught-logs/.empty0
-rw-r--r--lh-config.dist22
-rwxr-xr-xmake2
-rw-r--r--sub/bearssl/Makefile4
-rw-r--r--sub/busybox/Makefile4
-rw-r--r--sub/kernel/Makefile2
-rwxr-xr-xsub/layout/copylayout5
-rw-r--r--sub/layout/permissions4
-rw-r--r--sub/skarnet.org/Makefile60
-rwxr-xr-xsub/skarnet.org/rc.init4
-rwxr-xr-xsub/skarnet.org/rc.shutdown (renamed from layout/rootfs/run/service/.s6-svscan/crash)2
-rwxr-xr-xsub/skarnet.org/rc.shutdown.final (renamed from layout/rootfs/run/service/.s6-svscan/SIGHUP)0
-rwxr-xr-xsub/skarnet.org/runlevel3
-rw-r--r--sub/util-linux/Makefile2
24 files changed, 76 insertions, 59 deletions
diff --git a/layout/rootfs/etc/s6-linux-init/env/PATH b/layout/rootfs/etc/s6-linux-init/env/PATH
deleted file mode 100644
index a13f7be..0000000
--- a/layout/rootfs/etc/s6-linux-init/env/PATH
+++ /dev/null
@@ -1 +0,0 @@
-/command:/bin
diff --git a/layout/rootfs/run/shm/.empty b/layout/rootfs/run/.empty
index e69de29..e69de29 100644
--- a/layout/rootfs/run/shm/.empty
+++ b/layout/rootfs/run/.empty
diff --git a/layout/rootfs/run/service/.s6-svscan/SIGINT b/layout/rootfs/run/service/.s6-svscan/SIGINT
deleted file mode 100755
index a547aad..0000000
--- a/layout/rootfs/run/service/.s6-svscan/SIGINT
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/command/execlineb -P
-
-reboot
diff --git a/layout/rootfs/run/service/.s6-svscan/SIGQUIT b/layout/rootfs/run/service/.s6-svscan/SIGQUIT
deleted file mode 100755
index ef7d2c9..0000000
--- a/layout/rootfs/run/service/.s6-svscan/SIGQUIT
+++ /dev/null
@@ -1 +0,0 @@
-#!/command/execlineb -P
diff --git a/layout/rootfs/run/service/.s6-svscan/SIGTERM b/layout/rootfs/run/service/.s6-svscan/SIGTERM
deleted file mode 100755
index ef7d2c9..0000000
--- a/layout/rootfs/run/service/.s6-svscan/SIGTERM
+++ /dev/null
@@ -1 +0,0 @@
-#!/command/execlineb -P
diff --git a/layout/rootfs/run/service/.s6-svscan/SIGUSR1 b/layout/rootfs/run/service/.s6-svscan/SIGUSR1
deleted file mode 100755
index ef7d2c9..0000000
--- a/layout/rootfs/run/service/.s6-svscan/SIGUSR1
+++ /dev/null
@@ -1 +0,0 @@
-#!/command/execlineb -P
diff --git a/layout/rootfs/run/service/.s6-svscan/SIGUSR2 b/layout/rootfs/run/service/.s6-svscan/SIGUSR2
deleted file mode 100755
index ef7d2c9..0000000
--- a/layout/rootfs/run/service/.s6-svscan/SIGUSR2
+++ /dev/null
@@ -1 +0,0 @@
-#!/command/execlineb -P
diff --git a/layout/rootfs/run/service/.s6-svscan/finish b/layout/rootfs/run/service/.s6-svscan/finish
deleted file mode 100755
index c9ca6d5..0000000
--- a/layout/rootfs/run/service/.s6-svscan/finish
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/command/execlineb -P
-
-reboot -f
diff --git a/layout/rootfs/run/service/s6-linux-init-early-getty/run b/layout/rootfs/run/service/s6-linux-init-early-getty/run
deleted file mode 100755
index c48b72d..0000000
--- a/layout/rootfs/run/service/s6-linux-init-early-getty/run
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/command/execlineb -P
-
-getty -L -H %%HOSTNAME%% 38400 /dev/%%CONSOLE%%
diff --git a/layout/rootfs/run/service/s6-svscan-log/run b/layout/rootfs/run/service/s6-svscan-log/run
deleted file mode 100755
index 896a294..0000000
--- a/layout/rootfs/run/service/s6-svscan-log/run
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/command/execlineb -P
-
-redirfd -w 2 /dev/console
-redirfd -w 1 /dev/null
-redirfd -rnb 0 fifo
-s6-applyuidgid -u 98 -g 98 --
-s6-log -bp -- t /run/uncaught-logs
diff --git a/layout/rootfs/run/uncaught-logs/.empty b/layout/rootfs/run/uncaught-logs/.empty
deleted file mode 100644
index e69de29..0000000
--- a/layout/rootfs/run/uncaught-logs/.empty
+++ /dev/null
diff --git a/lh-config.dist b/lh-config.dist
index 8dd2fc6..f8acbbb 100644
--- a/lh-config.dist
+++ b/lh-config.dist
@@ -6,21 +6,23 @@ OUTPUT=
# Most of the build will be performed as that user.
NORMALUSER=nobody
-# Kernel config. Leave commented to use the one provided with the bootstrap,
-# which is suitable for qemu.
-# KERNEL_CONFIG=
+# The toolchain for your BUILD system
+# BUILD_TRIPLE is the triplet of your native build toolchain (if you want to cross libcs for instance)
+# BUILD_BASE is the base directory where to find your native build toolchain's binaries
+# Leave them empty if you're using your distro's native compiler.
+# BUILD_TRIPLE=
+# BUILD_BASE=
-# Uncomment, and define the triplet of the target system,
-# and the absolute path to the base of the toolchains.
+
+# The toolchain for your TARGET system
# TRIPLE=x86_64-linux-musl
# CROSS_BASE=/home/ska/toolchains/cross/$TRIPLE
-# HOST_HOST_BASE=/home/ska/toolchains/native/$TRIPLE
# Filesystems size, in megabytes.
ROOTFS_SIZE=32768
-SWAP_SIZE=4096
-RWFS_SIZE=4096
-USERFS_SIZE=1024
-EXTRA_SIZE=2048
+
+# The device on which to spawn an early getty.
+# Leave empty for no early getty.
+CONSOLE=
diff --git a/make b/make
index a206e4a..a4d2aea 100755
--- a/make
+++ b/make
@@ -48,5 +48,5 @@ exec env -i $crossenv LH_MAKE_MARKER=1 "WD=$WD" "NORMALUSER=$NORMALUSER" "TRIPLE
"ROOTFS_SIZE=$ROOTFS_SIZE" \
"BUILD_HOST_CC=$BUILD_HOST_CC" "BUILD_HOST_CC_FULL=$BUILD_HOST_CC_FULL" "BUILD_HOST_SYSROOT=$BUILD_HOST_SYSROOT" "BUILD_HOST_PREFIX=$BUILD_HOST_PREFIX" \
"KERNEL_ARCH=$KERNEL_ARCH" "KERNEL_GENERIC_ARCH=$KERNEL_GENERIC_ARCH" "QEMU_ARCH=$QEMU_ARCH" "KERNEL_CONFIG=$KERNEL_CONFIG" \
- "BUILD_BUILD_CC=$BUILD_BUILD_CC" SHELL=/bin/sh \
+ "BUILD_BUILD_CC=$BUILD_BUILD_CC" SHELL=/bin/sh "CONSOLE=$CONSOLE" \
make "$@"
diff --git a/sub/bearssl/Makefile b/sub/bearssl/Makefile
index aad2254..0b3c08c 100644
--- a/sub/bearssl/Makefile
+++ b/sub/bearssl/Makefile
@@ -1,7 +1,7 @@
BEARSSL_NAME := bearssl
-# latest version from 2019-05-03
-BEARSSL_VERSION := 9721b3e7566693128a5923cc1f481216b7853466
+# latest version from 2020-01-03
+BEARSSL_VERSION := 252dba914912e694d0e69754f0167060fc4d2ba6
BEARSSL_URLDIR := https://www.bearssl.org/git
$(OUTPUT)/sources/.lh_$(BEARSSL_NAME)_dled: | $(OUTPUT)/build-build/.lh_skarnet_installed
diff --git a/sub/busybox/Makefile b/sub/busybox/Makefile
index 9003a15..e362ff0 100644
--- a/sub/busybox/Makefile
+++ b/sub/busybox/Makefile
@@ -1,5 +1,5 @@
-# Version from 2019-05-03
-BUSYBOX_VERSION := 3106784e654e7443ab724d927f9de0230adbe5ac
+# Version from 2020-01-03
+BUSYBOX_VERSION := bd754746394a382e04d116df02547f61b2026da9
clean-busybox:
rm -f $(OUTPUT)/sources/.lh_bb_cloned
diff --git a/sub/kernel/Makefile b/sub/kernel/Makefile
index ea86c9b..049069d 100644
--- a/sub/kernel/Makefile
+++ b/sub/kernel/Makefile
@@ -1,5 +1,5 @@
-KERNEL_VERSION ?= 5.0.11
+KERNEL_VERSION ?= 5.4.7
KERNEL_MAJOR := $(firstword $(subst ., ,$(KERNEL_VERSION)))
KERNEL_ENV := DEPMOD=$(OUTPUT)/build-build/opt/kmod/bin/depmod INSTALL_MOD_PATH=$(OUTPUT)/rootfs CROSS_COMPILE=$(BUILD_HOST_PREFIX)- ARCH=$(KERNEL_GENERIC_ARCH) INSTALL_MOD_STRIP="-R .note -R .comment -R .note.GNU-stack --strip-debug"
diff --git a/sub/layout/copylayout b/sub/layout/copylayout
index 32b991d..e0ea0a2 100755
--- a/sub/layout/copylayout
+++ b/sub/layout/copylayout
@@ -8,10 +8,7 @@ find "$output/rootfs" -type f -name .empty -size 0c -exec s6-rmrf {} \;
buildtime=$(s6-clock)
hostarch=$(s6-echo $TRIPLE | cut -f1 -d-)
-sed -i -e "s/%%HOSTNAME%%/lh-$hostarch/g" $output/rootfs/run/service/s6-linux-init-early-getty/run $output/rootfs/etc/motd $output/rootfs/etc/issue.net $output/rootfs/root/.execline-shell
-sed -i -e "s/%%CONSOLE%%/$console/g" $output/rootfs/run/service/s6-linux-init-early-getty/run
-
-s6-mkfifo -m 0600 $output/rootfs/run/service/s6-svscan-log/fifo
+sed -i -e "s/%%HOSTNAME%%/lh-$hostarch/g" $output/rootfs/etc/motd $output/rootfs/etc/issue.net $output/rootfs/root/.execline-shell
while read file user group perms ; do
if s6-test -n "$file" -a "$file" != "#" ; then
diff --git a/sub/layout/permissions b/sub/layout/permissions
index d940583..76f737e 100644
--- a/sub/layout/permissions
+++ b/sub/layout/permissions
@@ -1,6 +1,4 @@
-rootfs/etc/shadow 0 0 0600
-rootfs/run/uncaught-logs 98 98 2700
-
+rootfs/etc/shadow 0 0 0600
rootfs/tmp 0 0 1777
rootfs/var/log/klogd 102 61 2700
rootfs/var/log/ntpclient 106 62 2700
diff --git a/sub/skarnet.org/Makefile b/sub/skarnet.org/Makefile
index 51c9e48..85d30bb 100644
--- a/sub/skarnet.org/Makefile
+++ b/sub/skarnet.org/Makefile
@@ -4,17 +4,22 @@
url := git://git.skarnet.org
suffix :=
-SKALIBS_VERSION := ab0416faed65154c408e4fb5066cd8433a4bfa11
-EXECLINE_VERSION := 093161d9ae606141027efa597ed9d57bc88d0ce2
-S6_PORTABLE_UTILS_VERSION := 9e064f1da7921319c342f121602c61a9f3f7a0ec
-S6_DNS_VERSION := 89c0ec11d4f10401f6d2311f7d8af7b17a1732ce
-S6_NETWORKING_VERSION := 10f60c0d4dd8882e5a7553efe33522c958f73e57
-S6_VERSION := 2051574efa08de08488810669b21d15f387aa3e8
-S6_RC_VERSION := 9343e7be5ac2941359808f013e107a03f232a377
-S6_LINUX_INIT_VERSION := 0467356533d60ab7de402f1e8d02a356e11dbbd3
-MDEVD_VERSION := d44a4f72892a89f757bdf7c0243f1917d27ee889
-BCNM_VERSION := 7677bcd347d9d8b53f4d3c01bd62838a08d40a6f
-
+SKALIBS_VERSION := d6169d90477a1b467545408f4ea9570ed4f36bf9
+EXECLINE_VERSION := fc71200d67593c4a2d7b3105dc592c3ac96e725c
+S6_PORTABLE_UTILS_VERSION := 41eb4700c94191f168bca13f4c630ed17259ed84
+S6_DNS_VERSION := 2a9ec169562d289667ec485a090ecc33f72c5e2f
+S6_NETWORKING_VERSION := 1b77e5d7ced260b8d9a8d4f90d9ed9a5ac06da37
+S6_VERSION := f59b79de8c8f49ffd5133b2a37e11a52edc2bdbd
+S6_RC_VERSION := efe2eb4bbf383864ff2bb83fb0d10d98ce8fd1da
+S6_LINUX_INIT_VERSION := f13cdf2fa9609644dd0556669889e8c83fa053ff
+MDEVD_VERSION := a3a658cc3373cd0c11cc6e14cf1ef8a7e2676e7c
+BCNM_VERSION := e2cb9de752149d6b5b61775c53534554cd57f75f
+
+ifeq ($(CONSOLE),)
+EARLY_GETTY :=
+else
+EARLY_GETTY := -G "getty -H lh-$(word 1,$(subst (-, ,$(TRIPLE))) $(CONSOLE)"
+endif
$(OUTPUT)/sources/.lh_skalibs_cloned: | $(OUTPUT)/tmp/.lh_prepared
if test -d $(OUTPUT)/sources/skalibs ; then cd $(OUTPUT)/sources/skalibs && setuidgid $(NORMALUSER) git fetch ; else cd $(OUTPUT)/sources && setuidgid $(NORMALUSER) git clone $(url)/skalibs$(suffix) skalibs ; fi
@@ -137,6 +142,28 @@ $(OUTPUT)/build-build/.lh_s6_installed: $(OUTPUT)/build-build/.lh_s6_built
exec setuidgid $(NORMALUSER) touch $@
+$(OUTPUT)/build-build/.lh_s6li_copied: $(OUTPUT)/sources/.lh_s6li_cloned
+ exec setuidgid $(NORMALUSER) rm -rf $(OUTPUT)/build-build/tmp/s6-linux-init
+ exec setuidgid $(NORMALUSER) cp -a $(OUTPUT)/sources/s6-linux-init $(OUTPUT)/build-build/tmp/s6-linux-init
+ exec setuidgid $(NORMALUSER) touch $@
+
+$(OUTPUT)/build-build/.lh_s6li_configured: $(OUTPUT)/build-build/.lh_s6li_copied $(OUTPUT)/build-build/.lh_skalibs_installed $(OUTPUT)/build-build/.lh_execline_installed $(OUTPUT)/build-build/.lh_s6_installed
+ cd $(OUTPUT)/build-build/tmp/s6-linux-init && setuidgid $(NORMALUSER) export CC "$(BUILD_BUILD_CC)" ./configure --enable-slashpackage --disable-shared --with-sysdeps=$(OUTPUT)/build-build/package/prog/skalibs/sysdeps --with-include=$(OUTPUT)/build-build/package/prog/skalibs/include --with-lib=$(OUTPUT)/build-build/package/prog/skalibs/library --with-include=$(OUTPUT)/build-build/package/admin/execline/include --with-lib=$(OUTPUT)/build-build/package/admin/execline/library --with-include=$(OUTPUT)/build-build/package/admin/s6/include --with-lib=$(OUTPUT)/build-build/package/admin/s6/library
+ exec setuidgid $(NORMALUSER) touch $@
+
+$(OUTPUT)/build-build/.lh_s6li_built: $(OUTPUT)/build-build/.lh_s6li_configured $(OUTPUT)/build-build/.lh_skalibs_installed $(OUTPUT)/build-build/.lh_execline_installed $(OUTPUT)/build-build/.lh_s6_installed
+ cd $(OUTPUT)/build-build/tmp/s6-linux-init && setuidgid $(NORMALUSER) $(MAKE) all strip
+ exec setuidgid $(NORMALUSER) touch $@
+
+$(OUTPUT)/build-build/.lh_s6li_installed: $(OUTPUT)/build-build/.lh_s6li_built sub/skarnet.org/rc.init sub/skarnet.org/rc.shutdown sub/skarnet.org/rc.shutdown.final sub/skarnet.org/runlevel
+ cd $(OUTPUT)/build-build/tmp/s6-linux-init && setuidgid $(NORMALUSER) $(MAKE) install update global-links DESTDIR=$(OUTPUT)/build-build
+ exec setuidgid $(NORMALUSER) s6-hiercopy sub/skarnet.org/rc.init $(OUTPUT)/build-build/etc/s6-linux-init/skel/rc.init
+ exec setuidgid $(NORMALUSER) s6-hiercopy sub/skarnet.org/rc.shutdown $(OUTPUT)/build-build/etc/s6-linux-init/skel/rc.shutdown
+ exec setuidgid $(NORMALUSER) s6-hiercopy sub/skarnet.org/rc.shutdown.final $(OUTPUT)/build-build/etc/s6-linux-init/skel/rc.shutdown.final
+ exec setuidgid $(NORMALUSER) s6-hiercopy sub/skarnet.org/runlevel $(OUTPUT)/build-build/etc/s6-linux-init/skel/runlevel
+ exec setuidgid $(NORMALUSER) touch $@
+
+
$(OUTPUT)/build-build/.lh_s6dns_copied: $(OUTPUT)/sources/.lh_s6dns_cloned
exec setuidgid $(NORMALUSER) rm -rf $(OUTPUT)/build-build/tmp/s6-dns
exec setuidgid $(NORMALUSER) cp -a $(OUTPUT)/sources/s6-dns $(OUTPUT)/build-build/tmp/s6-dns
@@ -155,7 +182,7 @@ $(OUTPUT)/build-build/.lh_s6dns_installed: $(OUTPUT)/build-build/.lh_s6dns_built
exec setuidgid $(NORMALUSER) touch $@
-$(OUTPUT)/build-build/.lh_skarnet_installed: $(OUTPUT)/build-build/.lh_skalibs_installed $(OUTPUT)/build-build/.lh_execline_installed $(OUTPUT)/build-build/.lh_s6pu_installed $(OUTPUT)/build-build/.lh_s6_installed $(OUTPUT)/build-build/.lh_s6dns_installed
+$(OUTPUT)/build-build/.lh_skarnet_installed: $(OUTPUT)/build-build/.lh_skalibs_installed $(OUTPUT)/build-build/.lh_execline_installed $(OUTPUT)/build-build/.lh_s6pu_installed $(OUTPUT)/build-build/.lh_s6_installed $(OUTPUT)/build-build/.lh_s6li_installed $(OUTPUT)/build-build/.lh_s6dns_installed
exec setuidgid $(NORMALUSER) touch $@
@@ -270,6 +297,13 @@ $(OUTPUT)/build-host/.lh_s6li_installed: $(OUTPUT)/build-host/.lh_s6li_built | $
exec cd $(OUTPUT)/build-host/s6-linux-init $(MAKE) install update global-links DESTDIR=$(OUTPUT)/rootfs
exec setuidgid $(NORMALUSER) s6-touch $@
+$(OUTPUT)/build-host/.lh_s6li_laidout: $(OUTPUT)/build-host/.lh_s6li_installed | $(OUTPUT)/tmp/.lh_prepared $(OUTPUT)/build-build/.lh_skarnet_installed
+ exec mkdir -p $(OUTPUT)/rootfs/etc/s6-linux-init
+ exec rm -rf $(OUTPUT)/rootfs/etc/s6-linux-init/s6lidir
+ exec s6-linux-init-maker -u catchlog $(EARLY_GETTY) -1 -p /command:/bin -s /run/kernel_env -f $(OUTPUT)/build-build/etc/s6-linux-init-skel -- $(OUTPUT)/rootfs/etc/s6-linux-init/s6lidir
+ exec rm -rf $(OUTPUT)/rootfs/etc/s6-linux-init/current
+ exec mv -f $(OUTPUT)/build-host/s6lidir $(OUTPUT)/rootfs/etc/s6-linux-init/current
+ exec setuidgid $(NORMALUSER) s6-touch $@
$(OUTPUT)/build-host/.lh_mdevd_copied: $(OUTPUT)/sources/.lh_mdevd_cloned | $(OUTPUT)/build-build/.lh_skarnet_installed
exec setuidgid $(NORMALUSER) s6-rmrf $(OUTPUT)/build-host/mdevd
@@ -307,5 +341,5 @@ $(OUTPUT)/build-host/.lh_bcnm_installed: $(OUTPUT)/build-host/.lh_bcnm_built | $
exec setuidgid $(NORMALUSER) s6-touch $@
-$(OUTPUT)/build-host/.lh_skarnet_installed: $(OUTPUT)/build-host/.lh_skalibs_installed $(OUTPUT)/build-host/.lh_execline_installed $(OUTPUT)/build-host/.lh_s6dns_installed $(OUTPUT)/build-host/.lh_s6net_installed $(OUTPUT)/build-host/.lh_s6_installed $(OUTPUT)/build-host/.lh_s6li_installed $(OUTPUT)/build-host/.lh_mdevd_installed $(OUTPUT)/build-host/.lh_bcnm_installed | $(OUTPUT)/build-build/.lh_skarnet_installed
+$(OUTPUT)/build-host/.lh_skarnet_installed: $(OUTPUT)/build-host/.lh_skalibs_installed $(OUTPUT)/build-host/.lh_execline_installed $(OUTPUT)/build-host/.lh_s6dns_installed $(OUTPUT)/build-host/.lh_s6net_installed $(OUTPUT)/build-host/.lh_s6_installed $(OUTPUT)/build-host/.lh_s6li_laidout $(OUTPUT)/build-host/.lh_mdevd_installed $(OUTPUT)/build-host/.lh_bcnm_installed | $(OUTPUT)/build-build/.lh_skarnet_installed
exec setuidgid $(NORMALUSER) s6-touch $@
diff --git a/sub/skarnet.org/rc.init b/sub/skarnet.org/rc.init
new file mode 100755
index 0000000..46ec269
--- /dev/null
+++ b/sub/skarnet.org/rc.init
@@ -0,0 +1,4 @@
+#!/command/execlineb -S1
+
+if { s6-rc-init /run/service }
+/etc/s6-linux-init/current/scripts/runlevel $1
diff --git a/layout/rootfs/run/service/.s6-svscan/crash b/sub/skarnet.org/rc.shutdown
index c9ca6d5..a9c3c07 100755
--- a/layout/rootfs/run/service/.s6-svscan/crash
+++ b/sub/skarnet.org/rc.shutdown
@@ -1,3 +1,3 @@
#!/command/execlineb -P
-reboot -f
+s6-rc -v2 -bda change
diff --git a/layout/rootfs/run/service/.s6-svscan/SIGHUP b/sub/skarnet.org/rc.shutdown.final
index ef7d2c9..ef7d2c9 100755
--- a/layout/rootfs/run/service/.s6-svscan/SIGHUP
+++ b/sub/skarnet.org/rc.shutdown.final
diff --git a/sub/skarnet.org/runlevel b/sub/skarnet.org/runlevel
new file mode 100755
index 0000000..24548e9
--- /dev/null
+++ b/sub/skarnet.org/runlevel
@@ -0,0 +1,3 @@
+#!/command/execlineb -S1
+
+s6-rc -v2 -up change $1
diff --git a/sub/util-linux/Makefile b/sub/util-linux/Makefile
index 88cabc6..f357a32 100644
--- a/sub/util-linux/Makefile
+++ b/sub/util-linux/Makefile
@@ -1,6 +1,6 @@
UTLX_NAME := util-linux
-UTLX_VERSION := 2.33.2
+UTLX_VERSION := 2.34
UTLX_MAJOR := $(word 1, $(subst ., ,$(UTLX_VERSION)))
UTLX_MINOR := $(word 2, $(subst ., ,$(UTLX_VERSION)))
UTLX_URLDIR := https://cdn.kernel.org/pub/linux/utils/$(UTLX_NAME)/v$(UTLX_MAJOR).$(UTLX_MINOR)