unos-repository

APK repository for unos
git clone git://git.finwo.net/misc/unos-repository
Log | Files | Refs | README

commit b36fa44d554ceb9e9a481ad439e12712569082e9
parent 4ea0753f34ef66a4f2e71edbe83d0504d22a3485
Author: Robin Bron <robin.bron@yourhosting.nl>
Date:   Thu,  1 Oct 2026 14:21:06 +0200

Supervise only enabled services, via runsvdir profiles

Diffstat:
M.conductor.yml | 60+++++++++++++++++++++++++++++++++++++++++++++++++++---------
Mchannels/base/packages/base-files/files/rcS | 26++++++++++++++++----------
Achannels/base/packages/base-files/files/runsvchdir | 9+++++++++
Mchannels/base/packages/base-files/template | 11++++++++---
Mchannels/base/packages/linkd/template | 4+++-
Mchannels/base/packages/tinyssh/template | 4+++-
Achannels/base/packages/unos-services/template | 15+++++++++++++++
7 files changed, 105 insertions(+), 24 deletions(-)

diff --git a/.conductor.yml b/.conductor.yml @@ -122,7 +122,7 @@ tasks: arch: [x86_64] requires: [unos-sign-key] script: - - ./mk/check-revision.sh --channel edge base-files --pkgver 0.1.0-r7 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } + - ./mk/check-revision.sh --channel edge base-files --pkgver 0.1.0-r8 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } - ./mk/channel-assemble.sh edge - ./mk/bootstrap-host.sh - ./mk/sysroot.sh --channel edge --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" base-files @@ -332,7 +332,7 @@ tasks: arch: [x86_64] requires: [unos-sign-key] script: - - ./mk/check-revision.sh --channel edge linkd --pkgver 0.2.0-r1 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } + - ./mk/check-revision.sh --channel edge linkd --pkgver 0.2.0-r2 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } - ./mk/channel-assemble.sh edge - ./mk/bootstrap-host.sh - ./mk/sysroot.sh --channel edge --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" linkd @@ -360,7 +360,7 @@ tasks: arch: [x86_64] requires: [unos-sign-key] script: - - ./mk/check-revision.sh --channel edge tinyssh --pkgver 20260906-r4 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } + - ./mk/check-revision.sh --channel edge tinyssh --pkgver 20260906-r5 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } - ./mk/channel-assemble.sh edge - ./mk/bootstrap-host.sh - ./mk/sysroot.sh --channel edge --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" tinyssh @@ -393,6 +393,19 @@ tasks: - ./mk/build.sh --channel edge unos-keys - ./mk/publish.sh --channel edge --arch "$ARCH" unos-keys + pkg-edge-unos-services: + needs: + - check + arch: [x86_64] + requires: [unos-sign-key] + script: + - ./mk/check-revision.sh --channel edge unos-services --pkgver 0.1.0-r0 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } + - ./mk/channel-assemble.sh edge + - ./mk/bootstrap-host.sh + - ./mk/sysroot.sh --channel edge --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" unos-services + - ./mk/build.sh --channel edge unos-services + - ./mk/publish.sh --channel edge --arch "$ARCH" unos-services + pkg-lts-glibc: needs: - check @@ -468,7 +481,7 @@ tasks: arch: [x86_64] requires: [unos-sign-key] script: - - ./mk/check-revision.sh --channel lts base-files --pkgver 0.1.0-r7 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } + - ./mk/check-revision.sh --channel lts base-files --pkgver 0.1.0-r8 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } - ./mk/channel-assemble.sh lts - ./mk/bootstrap-host.sh - ./mk/sysroot.sh --channel lts --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" base-files @@ -678,7 +691,7 @@ tasks: arch: [x86_64] requires: [unos-sign-key] script: - - ./mk/check-revision.sh --channel lts linkd --pkgver 0.2.0-r1 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } + - ./mk/check-revision.sh --channel lts linkd --pkgver 0.2.0-r2 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } - ./mk/channel-assemble.sh lts - ./mk/bootstrap-host.sh - ./mk/sysroot.sh --channel lts --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" linkd @@ -706,7 +719,7 @@ tasks: arch: [x86_64] requires: [unos-sign-key] script: - - ./mk/check-revision.sh --channel lts tinyssh --pkgver 20260906-r4 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } + - ./mk/check-revision.sh --channel lts tinyssh --pkgver 20260906-r5 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } - ./mk/channel-assemble.sh lts - ./mk/bootstrap-host.sh - ./mk/sysroot.sh --channel lts --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" tinyssh @@ -739,6 +752,19 @@ tasks: - ./mk/build.sh --channel lts unos-keys - ./mk/publish.sh --channel lts --arch "$ARCH" unos-keys + pkg-lts-unos-services: + needs: + - check + arch: [x86_64] + requires: [unos-sign-key] + script: + - ./mk/check-revision.sh --channel lts unos-services --pkgver 0.1.0-r0 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } + - ./mk/channel-assemble.sh lts + - ./mk/bootstrap-host.sh + - ./mk/sysroot.sh --channel lts --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" unos-services + - ./mk/build.sh --channel lts unos-services + - ./mk/publish.sh --channel lts --arch "$ARCH" unos-services + pkg-stable-glibc: needs: - check @@ -814,7 +840,7 @@ tasks: arch: [x86_64] requires: [unos-sign-key] script: - - ./mk/check-revision.sh --channel stable base-files --pkgver 0.1.0-r7 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } + - ./mk/check-revision.sh --channel stable base-files --pkgver 0.1.0-r8 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } - ./mk/channel-assemble.sh stable - ./mk/bootstrap-host.sh - ./mk/sysroot.sh --channel stable --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" base-files @@ -1024,7 +1050,7 @@ tasks: arch: [x86_64] requires: [unos-sign-key] script: - - ./mk/check-revision.sh --channel stable linkd --pkgver 0.2.0-r1 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } + - ./mk/check-revision.sh --channel stable linkd --pkgver 0.2.0-r2 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } - ./mk/channel-assemble.sh stable - ./mk/bootstrap-host.sh - ./mk/sysroot.sh --channel stable --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" linkd @@ -1052,7 +1078,7 @@ tasks: arch: [x86_64] requires: [unos-sign-key] script: - - ./mk/check-revision.sh --channel stable tinyssh --pkgver 20260906-r4 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } + - ./mk/check-revision.sh --channel stable tinyssh --pkgver 20260906-r5 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } - ./mk/channel-assemble.sh stable - ./mk/bootstrap-host.sh - ./mk/sysroot.sh --channel stable --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" tinyssh @@ -1085,6 +1111,19 @@ tasks: - ./mk/build.sh --channel stable unos-keys - ./mk/publish.sh --channel stable --arch "$ARCH" unos-keys + pkg-stable-unos-services: + needs: + - check + arch: [x86_64] + requires: [unos-sign-key] + script: + - ./mk/check-revision.sh --channel stable unos-services --pkgver 0.1.0-r0 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; } + - ./mk/channel-assemble.sh stable + - ./mk/bootstrap-host.sh + - ./mk/sysroot.sh --channel stable --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" unos-services + - ./mk/build.sh --channel stable unos-services + - ./mk/publish.sh --channel stable --arch "$ARCH" unos-services + index-edge: after: - pkg-edge-glibc @@ -1112,6 +1151,7 @@ tasks: - pkg-edge-tinyssh - pkg-edge-unos-firstboot - pkg-edge-unos-keys + - pkg-edge-unos-services arch: [x86_64] requires: [unos-sign-key] script: @@ -1148,6 +1188,7 @@ tasks: - pkg-lts-tinyssh - pkg-lts-unos-firstboot - pkg-lts-unos-keys + - pkg-lts-unos-services arch: [x86_64] requires: [unos-sign-key] script: @@ -1184,6 +1225,7 @@ tasks: - pkg-stable-tinyssh - pkg-stable-unos-firstboot - pkg-stable-unos-keys + - pkg-stable-unos-services arch: [x86_64] requires: [unos-sign-key] script: diff --git a/channels/base/packages/base-files/files/rcS b/channels/base/packages/base-files/files/rcS @@ -8,17 +8,23 @@ mkdir -p /dev/pts 2>/dev/null || true mount -t devpts devpts /dev/pts -o gid=5,mode=620 2>/dev/null || mount -t devpts devpts /dev/pts 2>/dev/null || true [ -c /dev/ptmx ] || mknod /dev/ptmx c 5 2 2>/dev/null || true chmod 666 /dev/ptmx 2>/dev/null || true -mkdir -p /run 2>/dev/null || true +mkdir -p /run /tmp 2>/dev/null || true +mount -t tmpfs tmpfs /run 2>/dev/null || true +mount -t tmpfs tmpfs /tmp 2>/dev/null || true +chmod 1777 /tmp 2>/dev/null || true if [ -f /etc/hostname ]; then hostname -F /etc/hostname 2>/dev/null || hostname unos 2>/dev/null || true echo "rcS: hostname $(hostname 2>/dev/null || cat /etc/hostname)" fi -if [ -d /etc/sv ]; then - echo "rcS: starting runsvdir" - runsvdir /etc/sv & -fi -if [ -x /etc/sv/tinyssh/run ]; then - echo "rcS: tinyssh will be supervised" -else - echo "rcS: no tinyssh service found" -fi + +runlevel=default +for arg in $(cat /proc/cmdline 2>/dev/null); do + [ -d "/etc/runit/runsvdir/${arg}" ] && runlevel="${arg}" +done +runsvchdir "${runlevel}" +echo "rcS: runlevel ${runlevel}" + +mkdir -p /run/runit/runsvdir +ln -s /etc/runit/runsvdir/current /run/runit/runsvdir/current +echo "rcS: starting runsvdir" +runsvdir -P /run/runit/runsvdir/current & diff --git a/channels/base/packages/base-files/files/runsvchdir b/channels/base/packages/base-files/files/runsvchdir @@ -0,0 +1,9 @@ +#!/bin/sh +set -eu + +d=${1:?usage: runsvchdir <runlevel>} +[ -d "/etc/runit/runsvdir/${d}" ] || { + echo "runsvchdir: no such runlevel: ${d}" >&2 + exit 1 +} +ln -sfn "${d}" /etc/runit/runsvdir/current diff --git a/channels/base/packages/base-files/template b/channels/base/packages/base-files/template @@ -1,7 +1,7 @@ # Template file for 'base-files' pkgname=base-files version=0.1.0 -revision=7 +revision=8 short_desc="UNOS filesystem skeleton - passwd, profile, nsswitch, fstab" maintainer="finwo <finwo@pm.me>" license="GPL-2.0-only" @@ -27,6 +27,13 @@ do_install() { vinstall ${FILESDIR}/os-release 644 etc vinstall ${FILESDIR}/inittab 644 etc vinstall ${FILESDIR}/rcS 755 etc/init.d rcS + vinstall ${FILESDIR}/runsvchdir 755 sbin runsvchdir + install -d "${DESTDIR}/etc/sv" + install -d "${DESTDIR}/etc/runit/runsvdir/default" + install -d "${DESTDIR}/etc/runit/runsvdir/single" + ln -sfn default "${DESTDIR}/etc/runit/runsvdir/current" + install -d "${DESTDIR}/var" + ln -sfn ../run/runit/runsvdir/current "${DESTDIR}/var/service" vinstall ${FILESDIR}/network/ports 644 etc/network ports vinstall ${FILESDIR}/network/interfaces 644 etc/network interfaces vinstall ${FILESDIR}/network/interfaces.d/eth0.cnf 644 etc/network/interfaces.d eth0.cnf @@ -35,8 +42,6 @@ do_install() { install -d "${DESTDIR}/etc/network/ports.d" install -d -m700 "${DESTDIR}/root" install -d "${DESTDIR}/etc/ld.so.conf.d" - # standard mount points (fstab references /run and /tmp; init mounts the - # rest - the dirs must exist first) install -d "${DESTDIR}/proc" "${DESTDIR}/sys" "${DESTDIR}/dev" install -d "${DESTDIR}/dev/pts" "${DESTDIR}/tmp" "${DESTDIR}/run" } diff --git a/channels/base/packages/linkd/template b/channels/base/packages/linkd/template @@ -1,7 +1,7 @@ # Template file for 'linkd' pkgname=linkd version=0.2.0 -revision=1 +revision=2 short_desc="Network interface manager - ifupdown replacement with RESP plugins" maintainer="finwo <finwo@pm.me>" license="GPL-2.0-only" @@ -30,5 +30,7 @@ do_install() { vinstall ${FILESDIR}/linkd-run 755 etc/sv/linkd run vinstall ${FILESDIR}/linkd-check 755 etc/sv/linkd check vinstall ${FILESDIR}/linkd-log-run 755 etc/sv/linkd/log run + ln -sfn /run/runit/supervise.linkd "${DESTDIR}/etc/sv/linkd/supervise" + ln -sfn /run/runit/supervise.linkd-log "${DESTDIR}/etc/sv/linkd/log/supervise" install -d "${DESTDIR}/var/log/linkd" } diff --git a/channels/base/packages/tinyssh/template b/channels/base/packages/tinyssh/template @@ -1,7 +1,7 @@ # Template file for 'tinyssh' pkgname=tinyssh version=20260906 -revision=4 +revision=5 short_desc="Small SSH server" maintainer="finwo <finwo@pm.me>" license="CC0-1.0" @@ -39,6 +39,8 @@ do_install() { vinstall ${FILESDIR}/tinyssh-run 755 etc/sv/tinyssh run vinstall ${FILESDIR}/tinyssh-check 755 etc/sv/tinyssh check vinstall ${FILESDIR}/tinyssh-log-run 755 etc/sv/tinyssh/log run + ln -sfn /run/runit/supervise.tinyssh "${DESTDIR}/etc/sv/tinyssh/supervise" + ln -sfn /run/runit/supervise.tinyssh-log "${DESTDIR}/etc/sv/tinyssh/log/supervise" # owned (empty) so the keydir parent always exists; the run script also # mkdir -p's defensively for wiped-state recovery install -d "${DESTDIR}/etc/tinyssh" diff --git a/channels/base/packages/unos-services/template b/channels/base/packages/unos-services/template @@ -0,0 +1,15 @@ +# Template file for 'unos-services' +pkgname=unos-services +version=0.1.0 +revision=0 +short_desc="The set of services enabled on a fresh UNOS system" +maintainer="finwo <finwo@pm.me>" +license="GPL-2.0-only" +homepage="https://unos.finwo.dev" +depends="base-files linkd tinyssh" + +do_install() { + install -d "${DESTDIR}/etc/runit/runsvdir/default" + ln -sfn /etc/sv/linkd "${DESTDIR}/etc/runit/runsvdir/default/linkd" + ln -sfn /etc/sv/tinyssh "${DESTDIR}/etc/runit/runsvdir/default/tinyssh" +}