чување bd7a869b524892a922f29cff6a45ce116365a9cc
родитељ ef41efe2ac22c6f3f61a107e26b8d8f80342618b
Аутор: Страхиња Радић <contact@strahinja.org>
Датум: Fri, 21 Apr 2023 21:31:42 +0200
* Use hwclock and mount from util-linux
* Add libnl and wpa_supplicant to /pkg/pkgdb.tsv
* Add (galeb-)mkinitramfs
* Add copying of firmware blobs to /lib/firmware
* Use tarball of svc instead of git clone
* Generate initramfs to /boot/initramfs.img
* Add support for initrd to fil/linux/config*-gl22
Signed-off-by: Страхиња Радић <contact@strahinja.org>
Diffstat:
измењених датотека: 8, додавања: 152(+), брисања: 46(-)
diff --git a/02-chroot.sh b/02-chroot.sh
@@ -120,7 +120,7 @@ cp_or_fail ${WD}/03-packages.sh ${GR}/bin/
cp_or_fail ${WD}/04-finale.sh ${GR}/bin/
check_dir ${G_LIB}
cp_or_fail ${WD}/lib/env.sh ${GR}/lib/env.sh
-/bin/sed -i 's,^\(GR=\).*,\1,' ${GR}/lib/env.sh
+/bin/sed -i 's,^\(GR=\).*,\1'\'\'',' ${GR}/lib/env.sh
cp_or_fail ${WD}/lib/fun.sh ${GR}/lib/fun.sh
cp_or_fail ${WD}/${FLD}/rc.d/g_fun.sh ${GR}/lib/g_fun.sh
cp_or_fail ${WD}/lib/createdirs ${GR}/lib/createdirs
diff --git a/03-packages.sh b/03-packages.sh
@@ -33,7 +33,7 @@ msg info "Creating symlinks"
begin_step "packages"
-totalsubsteps=135
+totalsubsteps=136
substep=1
msg info "Creating temporary links"
@@ -1115,7 +1115,7 @@ gcc -dumpspecs | sed -e 's,/'${TLD}',,g' \
mv_or_fail specs ${SPECFILE}
unset SPECFILE
-PATH=/local/bin:/bin:/sucks/bin:/${TLD}/bin
+PATH=/local/bin:/bin:/sucks/bin:/plan9/bin:/${TLD}/bin
export PATH
#for lib in gcc_s.so gcc_s.so.1 stdc++.a stdc++.so stdc++.so.6
@@ -5246,6 +5246,7 @@ mkpk_install()
NOCONFIGURE=1 ./autogen.sh || exit 1
+ #--disable-mount \\
./configure \\
--prefix="\${PREFIX}" \\
ADJTIME_PATH=/var/lib/hwclock/adjtime \\
@@ -5254,13 +5255,11 @@ mkpk_install()
--disable-chfn-chsh \\
--disable-eject \\
--disable-fallocate \\
- --disable-hwclock \\
--disable-kill \\
--disable-last \\
--disable-logger \\
--disable-login \\
--disable-mesg \\
- --disable-mount \\
--disable-mountpoint \\
--disable-nologin \\
--disable-pivot_root \\
@@ -7295,6 +7294,8 @@ mkpk_install()
unpack_pkg ${pkg} /
) || exit 1
fi
+timestamp=$(date +'%Y-%m-%d %T')
+printf "%s\t%s\t%s\n" libnl 3.7.10 "${timestamp}" >>${G_PKGDB}
end_substep
begin_substep wpa_supplicant-2.10
@@ -7346,6 +7347,41 @@ mkpk_install()
unpack_pkg ${pkg} /
) || exit 1
fi
+timestamp=$(date +'%Y-%m-%d %T')
+printf "%s\t%s\t%s\n" wpa_supplicant 2.10 "${timestamp}" >>${G_PKGDB}
+end_substep
+
+begin_substep mkinitramfs-0.3
+if [ -x /bin/mkinitramfs ]; then
+ msg info "%s exists, skipping %s" /bin/mkinitramfs ${pkg}
+elif [ -e ${G_SPKG}/${pkg}.tar.xz ]; then
+ unpack_pkg ${pkg} /
+else
+ extract_pkg ${G_SRC} galeb-mkinitramfs-v0.3 ${pkg}.tar.gz ${pkg}
+ (
+ cd_or_fail ${G_SRC}/${pkg}
+ cat <<! >MKPK
+mkpk_name()
+{
+ printf "%s" "${pkg}"
+}
+
+mkpk_install()
+{
+ FALLBACKVER=0.1
+ DESTDIR=/build
+ export FALLBACKVER DESTDIR
+
+ mk
+}
+!
+ mkpk ${pkg}
+ remove_dir ${G_SRC}/${pkg}
+ unpack_pkg ${pkg} /
+ ) || exit 1
+fi
+timestamp=$(date +'%Y-%m-%d %T')
+printf "%s\t%s\t%s\n" mkinitramfs 0.3 "${timestamp}" >>${G_PKGDB}
end_substep
end_step # packages
@@ -7407,6 +7443,26 @@ begin_substep linux-6.2.10
remove_file ${G_SRC}/linux
link_if_ne ${pkg} ${G_SRC}/linux
cd_or_fail ${G_SRC}/${pkg}
+
+ if [ -n "${INCLUDE_FIRMWARE}" ]; then
+ msg info "Cloning %s" \
+ https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
+
+ git_clone linux-firmware \
+ https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git \
+ 1
+
+ link_if_ne linux-firmware ${G_SRC}/firmware
+ remove_dir ${GR}/lib/firmware
+ check_dir ${GR}/lib/firmware
+
+ msg info "Copying firmware"
+ eval rsync -arv --numeric-ids \
+ ${INCLUDE_FIRMWARE} \
+ --exclude="*" \
+ ${G_SRC}/firmware/ ${GR}/lib/firmware/ || exit 1
+ fi
+
cp_or_fail ${G_FIL}/linux/config-20230417-gl22 .config
HOSTLDLIBS=-lz
export HOSTLDLIBS
@@ -7424,7 +7480,7 @@ msg warn " mv /bin/_ln /bin/ln "
msg warn "You might want to then use efibootmgr to add efistub to EFI. "
msg warn "See BOOTING. "
- PATH=/local/bin:/bin:/sucks/bin:/tools/bin
+ PATH=/local/bin:/bin:/sucks/bin:/plan9/bin:/tools/bin
export PATH
/bin/mksh -l +h
diff --git a/04-finale.sh b/04-finale.sh
@@ -229,6 +229,17 @@ mkpk_install()
-e "s,^LDLIBS\\s\\+= ,&-lc ,g" config.mk
fi
+ # - Use util-linux hwclock for now (supports more than UTC with no
+ # --systz)
+ # - Use mount from util-linux, as ubase mount doesn't seem to support
+ # ext4? TODO: More testing
+ if [ ! -e Makefile.orig ]; then
+ cp Makefile Makefile.orig
+ \${SED} -i -e '/^\\s\\+hwclock/d' \
+ -e '/^\\s\\+mount/d' \
+ Makefile
+ fi
+
make clean
make ${JN} || exit 1
make DESTDIR=/build install
@@ -249,12 +260,13 @@ timestamp=$(date +'%Y-%m-%d %T')
printf "%s\t%s\t%s\n" ubase 20230412 "${timestamp}" >>${G_PKGDB}
end_substep
-begin_substep svc-20230417
+begin_substep svc-0.1
if [ -x /bin/svc ]; then
msg info "%s exists, skipping %s" /bin/svc ${pkg}
elif [ -e ${G_SPKG}/${pkg}.tar.xz ]; then
unpack_pkg ${pkg} /
else
+ extract_pkg ${G_SRC} svc-v0.1 ${pkg}.tar.gz ${pkg}
(
cd_or_fail ${G_SRC}/${pkg}
@@ -275,12 +287,12 @@ mkpk_install()
}
!
mkpk ${pkg}
- #remove_dir ${G_SRC}/${pkg}
+ remove_dir ${G_SRC}/${pkg}
unpack_pkg ${pkg} /
) || exit 1
fi
timestamp=$(date +'%Y-%m-%d %T')
-printf "%s\t%s\t%s\n" svc 20230417 "${timestamp}" >>${G_PKGDB}
+printf "%s\t%s\t%s\n" svc 0.1 "${timestamp}" >>${G_PKGDB}
end_substep
begin_substep mkpk-0.1.10
@@ -335,6 +347,9 @@ cat <<! >/etc/galeb-release
Galeb musl/Linux ${G_VER}
!
+msg info "Generating initramfs"
+mkinitramfs
+
msg warn "Create a partition and copy files from here to it, then setup booting"
msg warn "(see BOOTING). "
diff --git a/05-mkbootimage.sh b/05-mkbootimage.sh
@@ -1,5 +1,10 @@
#!/bin/sh
+if [ ! -e ./lib/env.sh ] || [ ! -e ./lib/fun.sh ]; then
+ printf "Nonexistant lib/env.sh or lib/fun.sh!\n" >&2
+ exit 1
+fi
+
. ./lib/env.sh
. ./lib/fun.sh
@@ -41,12 +46,13 @@ PARTUUID=${BPUUID} /boot vfat rw,relatime,fmask=0133,dmask=0022,errors=remount-r
msg info "Generating %s" "${GR}/boot/EFI/GALEB/BOOT.CSV"
cat <<! >${GR}/boot/EFI/GALEB/BOOT-ASC.CSV
-vmlinuz,Galeb USB,root=PARTUUID=${RPUUID} ro rootdelay=5,Boot entry for Galeb USB
+vmlinuz,Galeb USB,initrd=\initramfs.img root=PARTUUID=${RPUUID} rw rootdelay=5,Boot entry for Galeb USB
!
iconv -f ASCII -t UCS-2LE <${GR}/boot/EFI/GALEB/BOOT-ASC.CSV \
>${GR}/boot/EFI/GALEB/BOOT.CSV
+msg info "Copying files"
rsync -arv --numeric-ids \
--exclude='/cross-tools' \
--exclude='/src/*' \
@@ -54,11 +60,12 @@ rsync -arv --numeric-ids \
--exclude='/var/log/galeb' \
${GR}/* /mnt/ || exit 1
+msg info "Umounting /mnt"
umount /mnt/boot || exit 1
umount /mnt || exit 1
-e2fsck -p /dev/loop0p2
-fsck.fat -p /dev/loop0p1
+e2fsck -p /dev/loop0p2 || exit 1
+fsck.fat -p /dev/loop0p1 || exit 1
losetup -d /dev/loop0 || exit 1
xz -9vvf "${diskimg}" || exit 1
diff --git a/fil/linux/config-20230417-gl22 b/fil/linux/config-20230417-gl22
@@ -210,7 +210,15 @@ CONFIG_NET_NS=y
# CONFIG_SCHED_AUTOGROUP is not set
# CONFIG_SYSFS_DEPRECATED is not set
CONFIG_RELAY=y
-# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_RD_GZIP=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+CONFIG_RD_XZ=y
+# CONFIG_RD_LZO is not set
+CONFIG_RD_LZ4=y
+CONFIG_RD_ZSTD=y
# CONFIG_BOOT_CONFIG is not set
CONFIG_INITRAMFS_PRESERVE_MTIME=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
@@ -521,8 +529,8 @@ CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_HOTPLUG_CPU=y
# CONFIG_ACPI_PROCESSOR_AGGREGATOR is not set
CONFIG_ACPI_THERMAL=y
-CONFIG_ACPI_PLATFORM_PROFILE=y
CONFIG_ARCH_HAS_ACPI_TABLE_UPGRADE=y
+CONFIG_ACPI_TABLE_UPGRADE=y
# CONFIG_ACPI_DEBUG is not set
# CONFIG_ACPI_PCI_SLOT is not set
CONFIG_ACPI_CONTAINER=y
@@ -947,7 +955,6 @@ CONFIG_SECRETMEM=y
# end of Memory Management options
CONFIG_NET=y
-CONFIG_COMPAT_NETLINK_MESSAGES=y
CONFIG_NET_INGRESS=y
CONFIG_NET_EGRESS=y
CONFIG_SKB_EXTENSIONS=y
@@ -1281,8 +1288,6 @@ CONFIG_NET_FLOW_LIMIT=y
# CONFIG_MCTP is not set
CONFIG_FIB_RULES=y
CONFIG_WIRELESS=y
-CONFIG_WEXT_CORE=y
-CONFIG_WEXT_PROC=y
CONFIG_CFG80211=y
# CONFIG_NL80211_TESTMODE is not set
# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
@@ -1291,13 +1296,13 @@ CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y
CONFIG_CFG80211_DEFAULT_PS=y
# CONFIG_CFG80211_DEBUGFS is not set
CONFIG_CFG80211_CRDA_SUPPORT=y
-CONFIG_CFG80211_WEXT=y
+# CONFIG_CFG80211_WEXT is not set
CONFIG_MAC80211=y
CONFIG_MAC80211_HAS_RC=y
CONFIG_MAC80211_RC_MINSTREL=y
CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
-CONFIG_MAC80211_MESH=y
+# CONFIG_MAC80211_MESH is not set
CONFIG_MAC80211_LEDS=y
# CONFIG_MAC80211_DEBUGFS is not set
# CONFIG_MAC80211_MESSAGE_TRACING is not set
@@ -1427,9 +1432,12 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
# Firmware loader
#
CONFIG_FW_LOADER=y
+CONFIG_FW_LOADER_PAGED_BUF=y
CONFIG_EXTRA_FIRMWARE=""
# CONFIG_FW_LOADER_USER_HELPER is not set
-# CONFIG_FW_LOADER_COMPRESS is not set
+CONFIG_FW_LOADER_COMPRESS=y
+CONFIG_FW_LOADER_COMPRESS_XZ=y
+CONFIG_FW_LOADER_COMPRESS_ZSTD=y
CONFIG_FW_CACHE=y
# CONFIG_FW_UPLOAD is not set
# end of Firmware loader
@@ -1579,7 +1587,7 @@ CONFIG_BLK_DEV_NVME=y
# CONFIG_EEPROM_AT24 is not set
# CONFIG_EEPROM_LEGACY is not set
# CONFIG_EEPROM_MAX6875 is not set
-CONFIG_EEPROM_93CX6=y
+# CONFIG_EEPROM_93CX6 is not set
# CONFIG_EEPROM_IDT_89HPESX is not set
# CONFIG_EEPROM_EE1004 is not set
# end of EEPROM support
@@ -2181,41 +2189,35 @@ CONFIG_USB_NET_DRIVERS=y
# CONFIG_USB_IPHETH is not set
CONFIG_WLAN=y
CONFIG_WLAN_VENDOR_ADMTEK=y
-CONFIG_ADM8211=y
+# CONFIG_ADM8211 is not set
CONFIG_ATH_COMMON=y
CONFIG_WLAN_VENDOR_ATH=y
# CONFIG_ATH_DEBUG is not set
-CONFIG_ATH5K=y
-# CONFIG_ATH5K_DEBUG is not set
-# CONFIG_ATH5K_TRACER is not set
-CONFIG_ATH5K_PCI=y
+# CONFIG_ATH5K is not set
+# CONFIG_ATH5K_PCI is not set
CONFIG_ATH9K_HW=y
CONFIG_ATH9K_COMMON=y
CONFIG_ATH9K_BTCOEX_SUPPORT=y
CONFIG_ATH9K=y
CONFIG_ATH9K_PCI=y
-CONFIG_ATH9K_AHB=y
+# CONFIG_ATH9K_AHB is not set
# CONFIG_ATH9K_DEBUGFS is not set
# CONFIG_ATH9K_DYNACK is not set
# CONFIG_ATH9K_WOW is not set
CONFIG_ATH9K_RFKILL=y
# CONFIG_ATH9K_CHANNEL_CONTEXT is not set
CONFIG_ATH9K_PCOEM=y
-CONFIG_ATH9K_PCI_NO_EEPROM=y
-CONFIG_ATH9K_HTC=y
-# CONFIG_ATH9K_HTC_DEBUGFS is not set
+# CONFIG_ATH9K_PCI_NO_EEPROM is not set
+# CONFIG_ATH9K_HTC is not set
# CONFIG_ATH9K_HWRNG is not set
-CONFIG_CARL9170=y
-CONFIG_CARL9170_LEDS=y
-CONFIG_CARL9170_WPC=y
-# CONFIG_CARL9170_HWRNG is not set
+# CONFIG_CARL9170 is not set
# CONFIG_ATH6KL is not set
-CONFIG_AR5523=y
+# CONFIG_AR5523 is not set
# CONFIG_WIL6210 is not set
CONFIG_ATH10K=y
CONFIG_ATH10K_CE=y
CONFIG_ATH10K_PCI=y
-CONFIG_ATH10K_USB=y
+# CONFIG_ATH10K_USB is not set
# CONFIG_ATH10K_DEBUG is not set
# CONFIG_ATH10K_DEBUGFS is not set
# CONFIG_ATH10K_TRACING is not set
@@ -2285,8 +2287,7 @@ CONFIG_RTLWIFI_DEBUG=y
CONFIG_RTL8192C_COMMON=y
CONFIG_RTL8723_COMMON=y
CONFIG_RTLBTCOEXIST=y
-CONFIG_RTL8XXXU=y
-# CONFIG_RTL8XXXU_UNTESTED is not set
+# CONFIG_RTL8XXXU is not set
CONFIG_RTW88=y
# CONFIG_RTW88_8822BE is not set
# CONFIG_RTW88_8822BU is not set
@@ -4108,7 +4109,7 @@ CONFIG_EEEPC_LAPTOP=y
# CONFIG_X86_PLATFORM_DRIVERS_HP is not set
# CONFIG_WIRELESS_HOTKEY is not set
# CONFIG_IBM_RTL is not set
-CONFIG_IDEAPAD_LAPTOP=y
+# CONFIG_IDEAPAD_LAPTOP is not set
# CONFIG_SENSORS_HDAPS is not set
# CONFIG_THINKPAD_ACPI is not set
# CONFIG_THINKPAD_LMI is not set
@@ -4944,6 +4945,10 @@ CONFIG_XZ_DEC_SPARC=y
# CONFIG_XZ_DEC_MICROLZMA is not set
CONFIG_XZ_DEC_BCJ=y
# CONFIG_XZ_DEC_TEST is not set
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_DECOMPRESS_XZ=y
+CONFIG_DECOMPRESS_LZ4=y
+CONFIG_DECOMPRESS_ZSTD=y
CONFIG_GENERIC_ALLOCATOR=y
CONFIG_INTERVAL_TREE=y
CONFIG_XARRAY_MULTI=y
diff --git a/fil/rc.d/rc.init b/fil/rc.d/rc.init
@@ -5,7 +5,7 @@ umask 022
. /etc/rc.conf
RCINIT=1 . /lib/g_fun.sh
-PATH=/local/bin:/bin:/sucks/bin
+PATH=/local/bin:/bin:/plan9/bin:/sucks/bin
export PATH
clear
@@ -14,15 +14,19 @@ printf "${green}===( ${bold}${white}%s${norm}${green} )=== booting${norm}\n" \
ctrlaltdel -s
+msg info "Mounted filesystems"
+mount
+sleep 10
msg info "Mounting essential filesystems"
-mount -n -t proc -o nosuid,noexec,nodev proc /proc
-mount -n -t sysfs -o nosuid,noexec,nodev sysfs /sys
-mount -n -t tmpfs -o nosuid,nodev,noatime,mode=1777 tmp /tmp
+mount -n -t proc -o nosuid,noexec,nodev proc /proc
+mount -n -t sysfs -o nosuid,noexec,nodev sysfs /sys
+mount -n -t tmpfs -o nosuid,nodev,noatime,mode=1777 tmp /tmp
mkdir -p /dev/shm
-mount -n -t tmpfs -o nosuid,nodev,noatime,mode=1777 shm /dev/shm
+mount -n -t tmpfs -o nosuid,nodev,noatime,mode=1777 shm /dev/shm
mkdir -p /dev/pts
-mount -n -t devpts -o nosuid,noexec,noatime,gid=5,mode=0620 devpts /dev/pts
-mount -n -t tmpfs -o nosuid,nodev,noatime,mode=0755 run /var/run
+mount -n -t devpts -o nosuid,noexec,noatime,gid=5,mode=0620 devpts /dev/pts
+mount -n -t tmpfs -o nosuid,nodev,noatime,mode=0755 run /var/run
+mount -n -t efivarfs -o nosuid,nodev,noexec efivarfs /sys/firmware/efi/efivars
create_logfile
diff --git a/lib/env.sh b/lib/env.sh
@@ -5,6 +5,23 @@
GUSER=strajder
+CONFIG_EXTRA_FIRMWARE=""
+
+# Enter custom firmware inclusion patterns
+# Contents of this variable is sent as argument to rsync(1)
+#
+# Important: If you don't need firmware, delete lines except the very next line,
+# until "# /Edit this"
+INCLUDE_FIRMWARE=''
+while read -r line
+do
+ INCLUDE_FIRMWARE="${INCLUDE_FIRMWARE}${line} "
+ # v-------- Enter patterns below this line
+done <<'!'
+--include="ath10k/"
+--include="ath10k/**"
+!
+
# /Edit this
GHOME=/home/${GUSER}
@@ -43,6 +60,7 @@ JN=${JN:- -j$(($(grep ^processor /proc/cpuinfo | wc -l) * 3))}
G_PKGDB=${G_SPKG}/pkgdb.tsv
+export GUSER INCLUDE_FIRMWARE
export CT_TRI GR_TRI GHOME GUID GGID GR CTD FLD PTD TLD CT TL G_ARCH G_ARCH_EXT
export G_ARCH_EXT_ALT G_FIFO G_LGL G_LOG G_FIL G_LIB G_LOGFILE G_PAT G_PKG
export G_SHORTLOG G_SPKG G_SRC G_TARGET G_VER JN
diff --git a/lib/pkgs.tsv b/lib/pkgs.tsv
@@ -70,6 +70,7 @@ https://ftp.gnu.org/gnu/texinfo/texinfo-7.0.3.tar.xz 7d14f7458f2b7d0ee0b740e00a
https://ftp.gnu.org/gnu/which/which-2.21.tar.gz d2f04a5c5291f2d7d1226982da7cf999d36cfe24d3f7bda145508efcfb359511251d3c68b860c0ddcedd66b15a0587b648a35ab6d1f173707565305c506dfc61
https://ftp.gnu.org/pub/gnu/gcc/gcc-12.2.0/gcc-12.2.0.tar.xz e9e857bd81bf7a370307d6848c81b2f5403db8c7b5207f54bce3f3faac3bde63445684092c2bc1a2427cddb6f7746496d9fbbef05fbbd77f2810b2998f1f9173
https://ftpmirror.gnu.org/autoconf-archive/autoconf-archive-2023.02.20.tar.xz a744f5aa0c1a813b81ad1528aebf7511bde7f470f34626d2057ed6664127120182e031fec5d22027d4a204544266135f202b8ef453bff70a3b0315c506c82528
+https://git.sr.ht/~strahinja/galeb-mkinitramfs/archive/v0.3.tar.gz mkinitramfs-0.3.tar.gz 93b0f5fd870da4fe4b2fb42f6a7fdcd6047b075336544c3132c76714b64c6b355aba9bb42422b0de2af4aa20e112c86707a5f1c045a64cc536ea1a593f815a33
https://git.sr.ht/~strahinja/mkpk/archive/v0.1.10.tar.gz mkpk-0.1.10.tar.gz 4fc1f20fb46a24ee96508890dc8928769b450153b914b83d20dc37834c4b229819b29fff97c64497fd567c9629f853e2eab80ff3bd07cbf42e8c3d51b2496c1d
https://git.sr.ht/~strahinja/sled/archive/v0.11.5.tar.gz sled-0.11.5.tar.gz c329eb5086ea5ab76f109a1b15d8ec3c94c37bc09e306490502fd0b8592c59feeb6afd041d6ad14aaedf1c32902fe254951d9af83319c35d50f302fccfe1e138
https://git.sr.ht/~strahinja/svc/archive/v0.1.tar.gz svc-0.1.tar.gz b78b30b87ce5d3803eafa6999219d2db51f7ab5f01a0e7fcc871b3fa09da5834fefe6d3e9a83eb31b27251afaa142bb4ff320cfa100efda46531700103805e13