From b061e0f4ac654483d17b40b0eb509676193c92ef Mon Sep 17 00:00:00 2001 From: Chara Date: Thu, 3 Sep 2026 01:04:48 -0400 Subject: [PATCH 01/16] feat: add Artix Linux (OpenRC) rootfs templates Add minimal and base Artix Linux Dockerfiles as systemd-free alternatives to the existing Arch templates. - Uses artixlinux/artixlinux:base-openrc base image - Replaces systemd-udev with eudev - OpenRC service management with rc-update - Conditional NetworkManager startup for NAT/gateway mode - Restricted udev coldplug trigger for Android compatibility - All Android AID groups and iptables-legacy fixes preserved Base variant includes dev tools (base-devel, clang, llvm, valgrind, strace, python) and docker-openrc. Signed-off-by: Chara --- Artix-Base-OpenRC.Dockerfile | 223 ++++++++++++++++++++++++++++++++ Artix-Minimal-OpenRC.Dockerfile | 202 +++++++++++++++++++++++++++++ 2 files changed, 425 insertions(+) create mode 100644 Artix-Base-OpenRC.Dockerfile create mode 100644 Artix-Minimal-OpenRC.Dockerfile diff --git a/Artix-Base-OpenRC.Dockerfile b/Artix-Base-OpenRC.Dockerfile new file mode 100644 index 0000000..a41bee9 --- /dev/null +++ b/Artix-Base-OpenRC.Dockerfile @@ -0,0 +1,223 @@ +# Dockerfile (Artix Linux Base, OpenRC) +# +# This image intentionally uses Artix's OpenRC base instead of Arch/systemd. +# eudev supplies udev, while Artix's *-openrc packages supply service scripts. +ARG TARGETPLATFORM +FROM artixlinux/artixlinux:base-openrc AS customizer + +# Refresh the Artix keyring first, then install the full development rootfs. +# NetworkManager is enabled through a DroidSpaces wrapper below so it only runs +# for NAT/gateway containers and cannot disturb Android host networking. +RUN pacman -Sy --noconfirm artix-keyring && \ + pacman -Syu --noconfirm && \ + pacman -S --needed --noconfirm \ + bash \ + dialog \ + coreutils \ + file \ + findutils \ + grep \ + sed \ + gawk \ + curl \ + wget \ + ca-certificates \ + bash-completion \ + openrc \ + eudev \ + eudev-openrc \ + dbus \ + dbus-openrc \ + htop \ + vim \ + nano \ + git \ + sudo \ + openssh \ + openssh-openrc \ + networkmanager \ + networkmanager-openrc \ + net-tools \ + iptables \ + iputils \ + iproute2 \ + bind \ + usbutils \ + pciutils \ + lsof \ + psmisc \ + procps-ng \ + fastfetch \ + kmod \ + logrotate \ + base-devel \ + cmake \ + clang \ + llvm \ + valgrind \ + strace \ + ltrace \ + python \ + python-pip \ + docker \ + docker-openrc \ + docker-compose && \ + pacman -Scc --noconfirm + +# Copy shell aliases into the rootfs. +COPY scripts/bashrc.sh /etc/profile.d/ds-aliases.sh +RUN chmod 0755 /etc/profile.d/ds-aliases.sh + +# Force the xtables legacy frontends required by Android networking. +RUN ln -sf /usr/bin/iptables-legacy /usr/bin/iptables && \ + ln -sf /usr/bin/ip6tables-legacy /usr/bin/ip6tables && \ + ln -sf /usr/bin/arptables-legacy /usr/bin/arptables && \ + ln -sf /usr/bin/ebtables-legacy /usr/bin/ebtables + +# Configure locale and SSH. OpenRC's sshd service creates/uses the runtime state +# when booted, but keep the directory for container runtimes that start it early. +RUN sed -i '/en_US.UTF-8/s/^# //' /etc/locale.gen && \ + locale-gen && \ + printf '%s\n' 'LANG=en_US.UTF-8' > /etc/locale.conf && \ + install -d -m 0755 /run/sshd && \ + sed -i 's/^#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config && \ + sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config + +# NetworkManager DHCP profile replacing systemd-networkd's .network file. +# The wildcard match covers the conventional eth* interfaces DroidSpaces uses. +RUN install -d -m 0700 /etc/NetworkManager/system-connections && \ + cat > /etc/NetworkManager/system-connections/droidspaces-ethernet.nmconnection <<'EOF' +[connection] +id=droidspaces-ethernet +type=ethernet +autoconnect=true + +[match] +interface-name=eth* + +[ipv4] +method=auto +route-metric=100 + +[ipv6] +method=auto +addr-gen-mode=stable-privacy +EOF + +# Apply Android compatibility fixes and install OpenRC-native services. +RUN <<'EOF_RUN' +set -eu + +# Android network groups are required for socket access on Android kernels. +grep -q '^aid_inet:' /etc/group || echo 'aid_inet:x:3003:' >> /etc/group +grep -q '^aid_net_raw:' /etc/group || echo 'aid_net_raw:x:3004:' >> /etc/group +grep -q '^aid_net_admin:' /etc/group || echo 'aid_net_admin:x:3005:' >> /etc/group + +# Permit root to access Android networking and exposed hardware devices. +usermod -a -G aid_inet,aid_net_raw,input,video,tty root || true + +# Artix does not normally have _apt, but preserve compatibility if it is added. +if grep -q '^_apt:' /etc/passwd; then + usermod -g aid_inet _apt +fi + +# Replace systemd-udev-trigger overrides with a restricted OpenRC coldplug +# service. It only triggers subsystems useful inside DroidSpaces, avoiding a +# full coldplug of Android-owned hardware. +cat > /etc/init.d/droidspaces-udev-trigger <<'EOT' +#!/sbin/openrc-run + +description="Restricted eudev coldplug for DroidSpaces" + +depend() { + need udev + before localmount + keyword -lxc -vserver +} + +start() { + ebegin "Triggering container-safe eudev subsystems" + udevadm trigger --type=subsystems --action=add \ + --subsystem-match=usb \ + --subsystem-match=block \ + --subsystem-match=input \ + --subsystem-match=tty \ + --subsystem-match=net + udevadm trigger --type=devices --action=add \ + --subsystem-match=usb \ + --subsystem-match=block \ + --subsystem-match=input \ + --subsystem-match=tty \ + --subsystem-match=net + eend $? +} +EOT +chmod 0755 /etc/init.d/droidspaces-udev-trigger + +# Start NetworkManager only for DroidSpaces NAT/gateway networking. In host +# mode this service succeeds without touching Android's cellular networking. +cat > /etc/init.d/droidspaces-network <<'EOT' +#!/sbin/openrc-run + +description="Conditional DroidSpaces NetworkManager startup" +provide net + +depend() { + need dbus + after udev droidspaces-udev-trigger +} + +is_managed_mode() { + grep -qsE '(^|[[:space:]])net_mode=(nat|gateway)($|[[:space:]])' \ + /run/droidspaces/container.config +} + +start() { + if ! is_managed_mode; then + einfo "Host networking detected; leaving Android networking untouched" + return 0 + fi + + ebegin "Starting NetworkManager for DroidSpaces NAT/gateway mode" + rc-service NetworkManager start + eend $? +} + +stop() { + if rc-service NetworkManager status >/dev/null 2>&1; then + ebegin "Stopping NetworkManager" + rc-service NetworkManager stop + eend $? + fi +} +EOT +chmod 0755 /etc/init.d/droidspaces-network + +# OpenRC service enablement replaces all systemd target symlinks. eudev-openrc +# enables its unrestricted udev-trigger by default, so remove that coldplug +# service and substitute the Android-safe trigger above. Do not add +# NetworkManager directly; the conditional wrapper owns its startup. +rc-update add udev sysinit +rc-update del udev-trigger sysinit || true +rc-update add droidspaces-udev-trigger sysinit +rc-update add dbus default +rc-update add droidspaces-network default +rc-update add sshd default +rc-update add docker default + +# Keep logs bounded on storage-constrained Android devices. Artix does not use +# journald here, so there are no journald or logind overrides to install. +if [ -f /etc/logrotate.conf ]; then + sed -i 's/^#maxsize.*/maxsize 50M/' /etc/logrotate.conf + grep -q '^maxsize 50M$' /etc/logrotate.conf || echo 'maxsize 50M' >> /etc/logrotate.conf +fi + +printf 'Post-extraction OpenRC fixes applied on %s\n' "$(date)" > /etc/droidspaces +EOF_RUN + +# Final package-cache cleanup. +RUN pacman -Scc --noconfirm && rm -rf /var/cache/pacman/pkg/* + +# Export a plain rootfs for DroidSpaces extraction. +FROM scratch AS export +COPY --from=customizer / / diff --git a/Artix-Minimal-OpenRC.Dockerfile b/Artix-Minimal-OpenRC.Dockerfile new file mode 100644 index 0000000..94ec451 --- /dev/null +++ b/Artix-Minimal-OpenRC.Dockerfile @@ -0,0 +1,202 @@ +# Dockerfile (Artix Linux Minimal, OpenRC) +# +# This image intentionally uses Artix's OpenRC base instead of Arch/systemd. +# eudev supplies udev, while Artix's *-openrc packages supply service scripts. +ARG TARGETPLATFORM +FROM artixlinux/artixlinux:base-openrc AS customizer + +# Refresh the Artix keyring first, then install the minimal development rootfs. +# NetworkManager is enabled through a DroidSpaces wrapper below so it only runs +# for NAT/gateway containers and cannot disturb Android host networking. +RUN pacman -Sy --noconfirm artix-keyring && \ + pacman -Syu --noconfirm && \ + pacman -S --needed --noconfirm \ + bash \ + dialog \ + coreutils \ + file \ + findutils \ + grep \ + sed \ + gawk \ + curl \ + wget \ + ca-certificates \ + bash-completion \ + openrc \ + eudev \ + eudev-openrc \ + dbus \ + dbus-openrc \ + git \ + nano \ + sudo \ + openssh \ + openssh-openrc \ + networkmanager \ + networkmanager-openrc \ + net-tools \ + iptables \ + iputils \ + iproute2 \ + bind \ + logrotate \ + procps-ng && \ + pacman -Scc --noconfirm + +# Copy shell aliases into the rootfs. +COPY scripts/bashrc.sh /etc/profile.d/ds-aliases.sh +RUN chmod 0755 /etc/profile.d/ds-aliases.sh + +# Force the xtables legacy frontends required by Android networking. +RUN ln -sf /usr/bin/iptables-legacy /usr/bin/iptables && \ + ln -sf /usr/bin/ip6tables-legacy /usr/bin/ip6tables && \ + ln -sf /usr/bin/arptables-legacy /usr/bin/arptables && \ + ln -sf /usr/bin/ebtables-legacy /usr/bin/ebtables + +# Configure locale and SSH. OpenRC's sshd service creates/uses the runtime state +# when booted, but keep the directory for container runtimes that start it early. +RUN sed -i '/en_US.UTF-8/s/^# //' /etc/locale.gen && \ + locale-gen && \ + printf '%s\n' 'LANG=en_US.UTF-8' > /etc/locale.conf && \ + install -d -m 0755 /run/sshd && \ + sed -i 's/^#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config && \ + sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config + +# NetworkManager DHCP profile replacing systemd-networkd's .network file. +# The wildcard match covers the conventional eth* interfaces DroidSpaces uses. +RUN install -d -m 0700 /etc/NetworkManager/system-connections && \ + cat > /etc/NetworkManager/system-connections/droidspaces-ethernet.nmconnection <<'EOF' +[connection] +id=droidspaces-ethernet +type=ethernet +autoconnect=true + +[match] +interface-name=eth* + +[ipv4] +method=auto +route-metric=100 + +[ipv6] +method=auto +addr-gen-mode=stable-privacy +EOF + +# Apply Android compatibility fixes and install OpenRC-native services. +RUN <<'EOF_RUN' +set -eu + +# Android network groups are required for socket access on Android kernels. +grep -q '^aid_inet:' /etc/group || echo 'aid_inet:x:3003:' >> /etc/group +grep -q '^aid_net_raw:' /etc/group || echo 'aid_net_raw:x:3004:' >> /etc/group +grep -q '^aid_net_admin:' /etc/group || echo 'aid_net_admin:x:3005:' >> /etc/group + +# Permit root to access Android networking and exposed hardware devices. +usermod -a -G aid_inet,aid_net_raw,input,video,tty root || true + +# Artix does not normally have _apt, but preserve compatibility if it is added. +if grep -q '^_apt:' /etc/passwd; then + usermod -g aid_inet _apt +fi + +# Replace systemd-udev-trigger overrides with a restricted OpenRC coldplug +# service. It only triggers subsystems useful inside DroidSpaces, avoiding a +# full coldplug of Android-owned hardware. +cat > /etc/init.d/droidspaces-udev-trigger <<'EOT' +#!/sbin/openrc-run + +description="Restricted eudev coldplug for DroidSpaces" + + depend() { + need udev + before localmount + keyword -lxc -vserver +} + +start() { + ebegin "Triggering container-safe eudev subsystems" + udevadm trigger --type=subsystems --action=add \ + --subsystem-match=usb \ + --subsystem-match=block \ + --subsystem-match=input \ + --subsystem-match=tty \ + --subsystem-match=net + udevadm trigger --type=devices --action=add \ + --subsystem-match=usb \ + --subsystem-match=block \ + --subsystem-match=input \ + --subsystem-match=tty \ + --subsystem-match=net + eend $? +} +EOT +chmod 0755 /etc/init.d/droidspaces-udev-trigger + +# Start NetworkManager only for DroidSpaces NAT/gateway networking. In host +# mode this service succeeds without touching Android's cellular networking. +cat > /etc/init.d/droidspaces-network <<'EOT' +#!/sbin/openrc-run + +description="Conditional DroidSpaces NetworkManager startup" +provide net + + depend() { + need dbus + after udev droidspaces-udev-trigger +} + +is_managed_mode() { + grep -qsE '(^|[[:space:]])net_mode=(nat|gateway)($|[[:space:]])' \ + /run/droidspaces/container.config +} + +start() { + if ! is_managed_mode; then + einfo "Host networking detected; leaving Android networking untouched" + return 0 + fi + + ebegin "Starting NetworkManager for DroidSpaces NAT/gateway mode" + rc-service NetworkManager start + eend $? +} + +stop() { + if rc-service NetworkManager status >/dev/null 2>&1; then + ebegin "Stopping NetworkManager" + rc-service NetworkManager stop + eend $? + fi +} +EOT +chmod 0755 /etc/init.d/droidspaces-network + +# OpenRC service enablement replaces all systemd target symlinks. eudev-openrc +# enables its unrestricted udev-trigger by default, so remove that coldplug +# service and substitute the Android-safe trigger above. Do not add +# NetworkManager directly; the conditional wrapper owns its startup. +rc-update add udev sysinit +rc-update del udev-trigger sysinit || true +rc-update add droidspaces-udev-trigger sysinit +rc-update add dbus default +rc-update add droidspaces-network default +rc-update add sshd default + +# Keep logs bounded on storage-constrained Android devices. Artix does not use +# journald here, so there are no journald or logind overrides to install. +if [ -f /etc/logrotate.conf ]; then + sed -i 's/^#maxsize.*/maxsize 50M/' /etc/logrotate.conf + grep -q '^maxsize 50M$' /etc/logrotate.conf || echo 'maxsize 50M' >> /etc/logrotate.conf +fi + +printf 'Post-extraction OpenRC fixes applied on %s\n' "$(date)" > /etc/droidspaces +EOF_RUN + +# Final package-cache cleanup. +RUN pacman -Scc --noconfirm && rm -rf /var/cache/pacman/pkg/* + +# Export a plain rootfs for DroidSpaces extraction. +FROM scratch AS export +COPY --from=customizer / / From 0c22bfb27cc41a45e97c267bfad0725c64fab13a Mon Sep 17 00:00:00 2001 From: Chara Date: Thu, 3 Sep 2026 01:12:07 -0400 Subject: [PATCH 02/16] feat: add Artix Linux (OpenRC) rootfs templates Add minimal and base Artix Linux Dockerfiles as systemd-free alternatives to the existing Arch templates. - Uses Armtix rootfs tarball for ARM64 support - Replaces systemd-udev with eudev - OpenRC service management with rc-update - Conditional NetworkManager startup for NAT/gateway mode - Restricted udev coldplug trigger for Android compatibility - All Android AID groups and iptables-legacy fixes preserved Base variant includes dev tools (base-devel, clang, llvm, valgrind, strace, python) and docker-openrc. --- Artix-Base-OpenRC.Dockerfile | 37 ++++++++++++++--------------- Artix-Minimal-OpenRC.Dockerfile | 41 +++++++++++++++------------------ 2 files changed, 36 insertions(+), 42 deletions(-) diff --git a/Artix-Base-OpenRC.Dockerfile b/Artix-Base-OpenRC.Dockerfile index a41bee9..1676fc8 100644 --- a/Artix-Base-OpenRC.Dockerfile +++ b/Artix-Base-OpenRC.Dockerfile @@ -1,14 +1,20 @@ +# syntax=docker/dockerfile:1.6 # Dockerfile (Artix Linux Base, OpenRC) # -# This image intentionally uses Artix's OpenRC base instead of Arch/systemd. +# Uses Armtix (ARM64 Artix) rootfs tarball for Android device compatibility. # eudev supplies udev, while Artix's *-openrc packages supply service scripts. -ARG TARGETPLATFORM -FROM artixlinux/artixlinux:base-openrc AS customizer -# Refresh the Artix keyring first, then install the full development rootfs. +# Bootstrap from Armtix rootfs tarball (ARM64 only) +FROM scratch AS base +ADD https://armtixlinux.org/images/armtix-openrc-20260124.tar.xz / + +FROM base AS customizer + +# Initialize pacman keyring and install the full development rootfs. # NetworkManager is enabled through a DroidSpaces wrapper below so it only runs # for NAT/gateway containers and cannot disturb Android host networking. -RUN pacman -Sy --noconfirm artix-keyring && \ +RUN pacman-key --init && \ + pacman-key --populate artix && \ pacman -Syu --noconfirm && \ pacman -S --needed --noconfirm \ bash \ @@ -83,8 +89,7 @@ RUN sed -i '/en_US.UTF-8/s/^# //' /etc/locale.gen && \ sed -i 's/^#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config && \ sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config -# NetworkManager DHCP profile replacing systemd-networkd's .network file. -# The wildcard match covers the conventional eth* interfaces DroidSpaces uses. +# NetworkManager DHCP profile for eth* interfaces used by DroidSpaces. RUN install -d -m 0700 /etc/NetworkManager/system-connections && \ cat > /etc/NetworkManager/system-connections/droidspaces-ethernet.nmconnection <<'EOF' [connection] @@ -121,9 +126,7 @@ if grep -q '^_apt:' /etc/passwd; then usermod -g aid_inet _apt fi -# Replace systemd-udev-trigger overrides with a restricted OpenRC coldplug -# service. It only triggers subsystems useful inside DroidSpaces, avoiding a -# full coldplug of Android-owned hardware. +# Restricted OpenRC coldplug service for container-safe udev triggers. cat > /etc/init.d/droidspaces-udev-trigger <<'EOT' #!/sbin/openrc-run @@ -154,13 +157,11 @@ start() { EOT chmod 0755 /etc/init.d/droidspaces-udev-trigger -# Start NetworkManager only for DroidSpaces NAT/gateway networking. In host -# mode this service succeeds without touching Android's cellular networking. +# Conditional NetworkManager startup for NAT/gateway mode only. cat > /etc/init.d/droidspaces-network <<'EOT' #!/sbin/openrc-run description="Conditional DroidSpaces NetworkManager startup" -provide net depend() { need dbus @@ -193,20 +194,16 @@ stop() { EOT chmod 0755 /etc/init.d/droidspaces-network -# OpenRC service enablement replaces all systemd target symlinks. eudev-openrc -# enables its unrestricted udev-trigger by default, so remove that coldplug -# service and substitute the Android-safe trigger above. Do not add -# NetworkManager directly; the conditional wrapper owns its startup. +# OpenRC service enablement. rc-update add udev sysinit -rc-update del udev-trigger sysinit || true +rc-update del udev-trigger sysinit 2>/dev/null || true rc-update add droidspaces-udev-trigger sysinit rc-update add dbus default rc-update add droidspaces-network default rc-update add sshd default rc-update add docker default -# Keep logs bounded on storage-constrained Android devices. Artix does not use -# journald here, so there are no journald or logind overrides to install. +# Keep logs bounded on storage-constrained Android devices. if [ -f /etc/logrotate.conf ]; then sed -i 's/^#maxsize.*/maxsize 50M/' /etc/logrotate.conf grep -q '^maxsize 50M$' /etc/logrotate.conf || echo 'maxsize 50M' >> /etc/logrotate.conf diff --git a/Artix-Minimal-OpenRC.Dockerfile b/Artix-Minimal-OpenRC.Dockerfile index 94ec451..f30f761 100644 --- a/Artix-Minimal-OpenRC.Dockerfile +++ b/Artix-Minimal-OpenRC.Dockerfile @@ -1,14 +1,20 @@ +# syntax=docker/dockerfile:1.6 # Dockerfile (Artix Linux Minimal, OpenRC) # -# This image intentionally uses Artix's OpenRC base instead of Arch/systemd. +# Uses Armtix (ARM64 Artix) rootfs tarball for Android device compatibility. # eudev supplies udev, while Artix's *-openrc packages supply service scripts. -ARG TARGETPLATFORM -FROM artixlinux/artixlinux:base-openrc AS customizer -# Refresh the Artix keyring first, then install the minimal development rootfs. +# Bootstrap from Armtix rootfs tarball (ARM64 only) +FROM scratch AS base +ADD https://armtixlinux.org/images/armtix-openrc-20260124.tar.xz / + +FROM base AS customizer + +# Initialize pacman keyring and install the minimal rootfs packages. # NetworkManager is enabled through a DroidSpaces wrapper below so it only runs # for NAT/gateway containers and cannot disturb Android host networking. -RUN pacman -Sy --noconfirm artix-keyring && \ +RUN pacman-key --init && \ + pacman-key --populate artix && \ pacman -Syu --noconfirm && \ pacman -S --needed --noconfirm \ bash \ @@ -63,8 +69,7 @@ RUN sed -i '/en_US.UTF-8/s/^# //' /etc/locale.gen && \ sed -i 's/^#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config && \ sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config -# NetworkManager DHCP profile replacing systemd-networkd's .network file. -# The wildcard match covers the conventional eth* interfaces DroidSpaces uses. +# NetworkManager DHCP profile for eth* interfaces used by DroidSpaces. RUN install -d -m 0700 /etc/NetworkManager/system-connections && \ cat > /etc/NetworkManager/system-connections/droidspaces-ethernet.nmconnection <<'EOF' [connection] @@ -101,15 +106,13 @@ if grep -q '^_apt:' /etc/passwd; then usermod -g aid_inet _apt fi -# Replace systemd-udev-trigger overrides with a restricted OpenRC coldplug -# service. It only triggers subsystems useful inside DroidSpaces, avoiding a -# full coldplug of Android-owned hardware. +# Restricted OpenRC coldplug service for container-safe udev triggers. cat > /etc/init.d/droidspaces-udev-trigger <<'EOT' #!/sbin/openrc-run description="Restricted eudev coldplug for DroidSpaces" - depend() { +depend() { need udev before localmount keyword -lxc -vserver @@ -134,15 +137,13 @@ start() { EOT chmod 0755 /etc/init.d/droidspaces-udev-trigger -# Start NetworkManager only for DroidSpaces NAT/gateway networking. In host -# mode this service succeeds without touching Android's cellular networking. +# Conditional NetworkManager startup for NAT/gateway mode only. cat > /etc/init.d/droidspaces-network <<'EOT' #!/sbin/openrc-run description="Conditional DroidSpaces NetworkManager startup" -provide net - depend() { +depend() { need dbus after udev droidspaces-udev-trigger } @@ -173,19 +174,15 @@ stop() { EOT chmod 0755 /etc/init.d/droidspaces-network -# OpenRC service enablement replaces all systemd target symlinks. eudev-openrc -# enables its unrestricted udev-trigger by default, so remove that coldplug -# service and substitute the Android-safe trigger above. Do not add -# NetworkManager directly; the conditional wrapper owns its startup. +# OpenRC service enablement. rc-update add udev sysinit -rc-update del udev-trigger sysinit || true +rc-update del udev-trigger sysinit 2>/dev/null || true rc-update add droidspaces-udev-trigger sysinit rc-update add dbus default rc-update add droidspaces-network default rc-update add sshd default -# Keep logs bounded on storage-constrained Android devices. Artix does not use -# journald here, so there are no journald or logind overrides to install. +# Keep logs bounded on storage-constrained Android devices. if [ -f /etc/logrotate.conf ]; then sed -i 's/^#maxsize.*/maxsize 50M/' /etc/logrotate.conf grep -q '^maxsize 50M$' /etc/logrotate.conf || echo 'maxsize 50M' >> /etc/logrotate.conf From 59256a4de3d8640b2cac5ceb7ba385412db51c8f Mon Sep 17 00:00:00 2001 From: Chara Date: Thu, 3 Sep 2026 01:15:46 -0400 Subject: [PATCH 03/16] fix(artix): use alpine bootstrap to extract tarball and create /bin symlinks Armtix tarball uses merged-usr layout without legacy /bin symlinks. Use alpine stage to download, extract, and create symlinks before copying to scratch base. --- Artix-Base-OpenRC.Dockerfile | 13 +++++++++++-- Artix-Minimal-OpenRC.Dockerfile | 13 +++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/Artix-Base-OpenRC.Dockerfile b/Artix-Base-OpenRC.Dockerfile index 1676fc8..baf5751 100644 --- a/Artix-Base-OpenRC.Dockerfile +++ b/Artix-Base-OpenRC.Dockerfile @@ -4,9 +4,18 @@ # Uses Armtix (ARM64 Artix) rootfs tarball for Android device compatibility. # eudev supplies udev, while Artix's *-openrc packages supply service scripts. -# Bootstrap from Armtix rootfs tarball (ARM64 only) +# Download and prepare the Armtix rootfs +FROM alpine:latest AS bootstrap +RUN apk add --no-cache curl xz +WORKDIR /rootfs +RUN curl -fsSL https://armtixlinux.org/images/armtix-openrc-20260124.tar.xz | xz -d | tar x && \ + ln -sf usr/bin bin && \ + ln -sf usr/lib lib && \ + ln -sf usr/lib64 lib64 2>/dev/null || true && \ + ln -sf usr/sbin sbin + FROM scratch AS base -ADD https://armtixlinux.org/images/armtix-openrc-20260124.tar.xz / +COPY --from=bootstrap /rootfs / FROM base AS customizer diff --git a/Artix-Minimal-OpenRC.Dockerfile b/Artix-Minimal-OpenRC.Dockerfile index f30f761..57c7bc6 100644 --- a/Artix-Minimal-OpenRC.Dockerfile +++ b/Artix-Minimal-OpenRC.Dockerfile @@ -4,9 +4,18 @@ # Uses Armtix (ARM64 Artix) rootfs tarball for Android device compatibility. # eudev supplies udev, while Artix's *-openrc packages supply service scripts. -# Bootstrap from Armtix rootfs tarball (ARM64 only) +# Download and prepare the Armtix rootfs +FROM alpine:latest AS bootstrap +RUN apk add --no-cache curl xz +WORKDIR /rootfs +RUN curl -fsSL https://armtixlinux.org/images/armtix-openrc-20260124.tar.xz | xz -d | tar x && \ + ln -sf usr/bin bin && \ + ln -sf usr/lib lib && \ + ln -sf usr/lib64 lib64 2>/dev/null || true && \ + ln -sf usr/sbin sbin + FROM scratch AS base -ADD https://armtixlinux.org/images/armtix-openrc-20260124.tar.xz / +COPY --from=bootstrap /rootfs / FROM base AS customizer From 5b0a75e15507c49a5c1b7378b390a4c1280b509e Mon Sep 17 00:00:00 2001 From: Chara Date: Thu, 3 Sep 2026 01:18:19 -0400 Subject: [PATCH 04/16] fix(artix): disable pacman landlock sandbox for docker builds Pacman 7 uses Landlock sandboxing which requires kernel support not available in Docker containers. Use --disable-sandbox flag. --- Artix-Base-OpenRC.Dockerfile | 8 ++++---- Artix-Minimal-OpenRC.Dockerfile | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Artix-Base-OpenRC.Dockerfile b/Artix-Base-OpenRC.Dockerfile index baf5751..4f7eef0 100644 --- a/Artix-Base-OpenRC.Dockerfile +++ b/Artix-Base-OpenRC.Dockerfile @@ -24,8 +24,8 @@ FROM base AS customizer # for NAT/gateway containers and cannot disturb Android host networking. RUN pacman-key --init && \ pacman-key --populate artix && \ - pacman -Syu --noconfirm && \ - pacman -S --needed --noconfirm \ + pacman --disable-sandbox -Syu --noconfirm && \ + pacman --disable-sandbox -S --needed --noconfirm \ bash \ dialog \ coreutils \ @@ -77,7 +77,7 @@ RUN pacman-key --init && \ docker \ docker-openrc \ docker-compose && \ - pacman -Scc --noconfirm + pacman --disable-sandbox -Scc --noconfirm # Copy shell aliases into the rootfs. COPY scripts/bashrc.sh /etc/profile.d/ds-aliases.sh @@ -222,7 +222,7 @@ printf 'Post-extraction OpenRC fixes applied on %s\n' "$(date)" > /etc/droidspac EOF_RUN # Final package-cache cleanup. -RUN pacman -Scc --noconfirm && rm -rf /var/cache/pacman/pkg/* +RUN pacman --disable-sandbox -Scc --noconfirm && rm -rf /var/cache/pacman/pkg/* # Export a plain rootfs for DroidSpaces extraction. FROM scratch AS export diff --git a/Artix-Minimal-OpenRC.Dockerfile b/Artix-Minimal-OpenRC.Dockerfile index 57c7bc6..867022f 100644 --- a/Artix-Minimal-OpenRC.Dockerfile +++ b/Artix-Minimal-OpenRC.Dockerfile @@ -24,8 +24,8 @@ FROM base AS customizer # for NAT/gateway containers and cannot disturb Android host networking. RUN pacman-key --init && \ pacman-key --populate artix && \ - pacman -Syu --noconfirm && \ - pacman -S --needed --noconfirm \ + pacman --disable-sandbox -Syu --noconfirm && \ + pacman --disable-sandbox -S --needed --noconfirm \ bash \ dialog \ coreutils \ @@ -57,7 +57,7 @@ RUN pacman-key --init && \ bind \ logrotate \ procps-ng && \ - pacman -Scc --noconfirm + pacman --disable-sandbox -Scc --noconfirm # Copy shell aliases into the rootfs. COPY scripts/bashrc.sh /etc/profile.d/ds-aliases.sh @@ -201,7 +201,7 @@ printf 'Post-extraction OpenRC fixes applied on %s\n' "$(date)" > /etc/droidspac EOF_RUN # Final package-cache cleanup. -RUN pacman -Scc --noconfirm && rm -rf /var/cache/pacman/pkg/* +RUN pacman --disable-sandbox -Scc --noconfirm && rm -rf /var/cache/pacman/pkg/* # Export a plain rootfs for DroidSpaces extraction. FROM scratch AS export From a3c2fa2a59383020ed3c28e6445bcfeee5790477 Mon Sep 17 00:00:00 2001 From: Chara Date: Thu, 3 Sep 2026 01:23:58 -0400 Subject: [PATCH 05/16] fix(artix): ignore kernel packages during upgrade Containers do not need kernel, initramfs, or firmware packages. Ignoring them prevents mkinitcpio from failing when it cannot find the kernel image in a Docker build environment. --- Artix-Base-OpenRC.Dockerfile | 2 +- Artix-Minimal-OpenRC.Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Artix-Base-OpenRC.Dockerfile b/Artix-Base-OpenRC.Dockerfile index 4f7eef0..eda576f 100644 --- a/Artix-Base-OpenRC.Dockerfile +++ b/Artix-Base-OpenRC.Dockerfile @@ -24,7 +24,7 @@ FROM base AS customizer # for NAT/gateway containers and cannot disturb Android host networking. RUN pacman-key --init && \ pacman-key --populate artix && \ - pacman --disable-sandbox -Syu --noconfirm && \ + pacman --disable-sandbox -Syu --noconfirm --ignore linux-aarch64,linux-aarch64-lts,linux-aarch64-headers,linux-aarch64-lts-headers,linux-firmware,linux-firmware-whence,mkinitcpio && \ pacman --disable-sandbox -S --needed --noconfirm \ bash \ dialog \ diff --git a/Artix-Minimal-OpenRC.Dockerfile b/Artix-Minimal-OpenRC.Dockerfile index 867022f..ae899af 100644 --- a/Artix-Minimal-OpenRC.Dockerfile +++ b/Artix-Minimal-OpenRC.Dockerfile @@ -24,7 +24,7 @@ FROM base AS customizer # for NAT/gateway containers and cannot disturb Android host networking. RUN pacman-key --init && \ pacman-key --populate artix && \ - pacman --disable-sandbox -Syu --noconfirm && \ + pacman --disable-sandbox -Syu --noconfirm --ignore linux-aarch64,linux-aarch64-lts,linux-aarch64-headers,linux-aarch64-lts-headers,linux-firmware,linux-firmware-whence,mkinitcpio && \ pacman --disable-sandbox -S --needed --noconfirm \ bash \ dialog \ From 0eeba8ecfc617a51bf530598e757cbe11fdaa3b2 Mon Sep 17 00:00:00 2001 From: Chara Date: Thu, 3 Sep 2026 01:29:40 -0400 Subject: [PATCH 06/16] fix(artix): remove kernel packages before upgrade The tarball ships with linux-aarch64, linux-aarch64-lts, and mkinitcpio pre-installed. Even with --ignore, pacman still runs post-transaction hooks for existing packages. Remove them first so mkinitcpio never runs. --- Artix-Base-OpenRC.Dockerfile | 1 + Artix-Minimal-OpenRC.Dockerfile | 1 + 2 files changed, 2 insertions(+) diff --git a/Artix-Base-OpenRC.Dockerfile b/Artix-Base-OpenRC.Dockerfile index eda576f..0cdba08 100644 --- a/Artix-Base-OpenRC.Dockerfile +++ b/Artix-Base-OpenRC.Dockerfile @@ -23,6 +23,7 @@ FROM base AS customizer # NetworkManager is enabled through a DroidSpaces wrapper below so it only runs # for NAT/gateway containers and cannot disturb Android host networking. RUN pacman-key --init && \ + pacman --disable-sandbox -Rdd --noconfirm linux-aarch64 linux-aarch64-lts linux-aarch64-headers linux-aarch64-lts-headers mkinitcpio mkinitcpio-busybox 2>/dev/null || true && \ pacman-key --populate artix && \ pacman --disable-sandbox -Syu --noconfirm --ignore linux-aarch64,linux-aarch64-lts,linux-aarch64-headers,linux-aarch64-lts-headers,linux-firmware,linux-firmware-whence,mkinitcpio && \ pacman --disable-sandbox -S --needed --noconfirm \ diff --git a/Artix-Minimal-OpenRC.Dockerfile b/Artix-Minimal-OpenRC.Dockerfile index ae899af..7c936c4 100644 --- a/Artix-Minimal-OpenRC.Dockerfile +++ b/Artix-Minimal-OpenRC.Dockerfile @@ -23,6 +23,7 @@ FROM base AS customizer # NetworkManager is enabled through a DroidSpaces wrapper below so it only runs # for NAT/gateway containers and cannot disturb Android host networking. RUN pacman-key --init && \ + pacman --disable-sandbox -Rdd --noconfirm linux-aarch64 linux-aarch64-lts linux-aarch64-headers linux-aarch64-lts-headers mkinitcpio mkinitcpio-busybox 2>/dev/null || true && \ pacman-key --populate artix && \ pacman --disable-sandbox -Syu --noconfirm --ignore linux-aarch64,linux-aarch64-lts,linux-aarch64-headers,linux-aarch64-lts-headers,linux-firmware,linux-firmware-whence,mkinitcpio && \ pacman --disable-sandbox -S --needed --noconfirm \ From 75f420756232c2caae3e26b4d6c718c71ca00c74 Mon Sep 17 00:00:00 2001 From: Chara Date: Thu, 3 Sep 2026 01:34:52 -0400 Subject: [PATCH 07/16] fix(artix): remove eudev packages (no longer in repos) eudev and eudev-openrc were removed from Artix repos. The base tarball includes udev-261.2 via system upgrade. --- Artix-Base-OpenRC.Dockerfile | 2 -- Artix-Minimal-OpenRC.Dockerfile | 2 -- 2 files changed, 4 deletions(-) diff --git a/Artix-Base-OpenRC.Dockerfile b/Artix-Base-OpenRC.Dockerfile index 0cdba08..8fb84fc 100644 --- a/Artix-Base-OpenRC.Dockerfile +++ b/Artix-Base-OpenRC.Dockerfile @@ -40,8 +40,6 @@ RUN pacman-key --init && \ ca-certificates \ bash-completion \ openrc \ - eudev \ - eudev-openrc \ dbus \ dbus-openrc \ htop \ diff --git a/Artix-Minimal-OpenRC.Dockerfile b/Artix-Minimal-OpenRC.Dockerfile index 7c936c4..af0d0fe 100644 --- a/Artix-Minimal-OpenRC.Dockerfile +++ b/Artix-Minimal-OpenRC.Dockerfile @@ -40,8 +40,6 @@ RUN pacman-key --init && \ ca-certificates \ bash-completion \ openrc \ - eudev \ - eudev-openrc \ dbus \ dbus-openrc \ git \ From 7323542bd07327abadd0e79ea8ab3612d96e05c6 Mon Sep 17 00:00:00 2001 From: Chara Date: Thu, 3 Sep 2026 02:09:05 -0400 Subject: [PATCH 08/16] fix(artix): remove firmware, disable sandbox, delete armtix user - Remove linux-firmware-* packages (useless in containers) - Add DisableSandbox to pacman.conf (avoids landlock issues) - Delete default armtix user from tarball Applied to both Minimal and Base Dockerfiles. --- Artix-Base-OpenRC.Dockerfile | 6 ++++-- Artix-Minimal-OpenRC.Dockerfile | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Artix-Base-OpenRC.Dockerfile b/Artix-Base-OpenRC.Dockerfile index 8fb84fc..11187d9 100644 --- a/Artix-Base-OpenRC.Dockerfile +++ b/Artix-Base-OpenRC.Dockerfile @@ -23,7 +23,7 @@ FROM base AS customizer # NetworkManager is enabled through a DroidSpaces wrapper below so it only runs # for NAT/gateway containers and cannot disturb Android host networking. RUN pacman-key --init && \ - pacman --disable-sandbox -Rdd --noconfirm linux-aarch64 linux-aarch64-lts linux-aarch64-headers linux-aarch64-lts-headers mkinitcpio mkinitcpio-busybox 2>/dev/null || true && \ + pacman --disable-sandbox -Rdd --noconfirm linux-aarch64 linux-aarch64-lts linux-aarch64-headers linux-aarch64-lts-headers mkinitcpio mkinitcpio-busybox linux-firmware linux-firmware-whence linux-firmware-amdgpu linux-firmware-atheros linux-firmware-broadcom linux-firmware-cirrus linux-firmware-intel linux-firmware-mediatek linux-firmware-nvidia linux-firmware-other linux-firmware-radeon linux-firmware-realtek 2>/dev/null || true && \ pacman-key --populate artix && \ pacman --disable-sandbox -Syu --noconfirm --ignore linux-aarch64,linux-aarch64-lts,linux-aarch64-headers,linux-aarch64-lts-headers,linux-firmware,linux-firmware-whence,mkinitcpio && \ pacman --disable-sandbox -S --needed --noconfirm \ @@ -95,7 +95,9 @@ RUN sed -i '/en_US.UTF-8/s/^# //' /etc/locale.gen && \ printf '%s\n' 'LANG=en_US.UTF-8' > /etc/locale.conf && \ install -d -m 0755 /run/sshd && \ sed -i 's/^#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config && \ - sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config + sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config && \ + echo "DisableSandbox" >> /etc/pacman.conf && \ + userdel -r armtix 2>/dev/null || true # NetworkManager DHCP profile for eth* interfaces used by DroidSpaces. RUN install -d -m 0700 /etc/NetworkManager/system-connections && \ diff --git a/Artix-Minimal-OpenRC.Dockerfile b/Artix-Minimal-OpenRC.Dockerfile index af0d0fe..9a6547d 100644 --- a/Artix-Minimal-OpenRC.Dockerfile +++ b/Artix-Minimal-OpenRC.Dockerfile @@ -23,7 +23,7 @@ FROM base AS customizer # NetworkManager is enabled through a DroidSpaces wrapper below so it only runs # for NAT/gateway containers and cannot disturb Android host networking. RUN pacman-key --init && \ - pacman --disable-sandbox -Rdd --noconfirm linux-aarch64 linux-aarch64-lts linux-aarch64-headers linux-aarch64-lts-headers mkinitcpio mkinitcpio-busybox 2>/dev/null || true && \ + pacman --disable-sandbox -Rdd --noconfirm linux-aarch64 linux-aarch64-lts linux-aarch64-headers linux-aarch64-lts-headers mkinitcpio mkinitcpio-busybox linux-firmware linux-firmware-whence linux-firmware-amdgpu linux-firmware-atheros linux-firmware-broadcom linux-firmware-cirrus linux-firmware-intel linux-firmware-mediatek linux-firmware-nvidia linux-firmware-other linux-firmware-radeon linux-firmware-realtek 2>/dev/null || true && \ pacman-key --populate artix && \ pacman --disable-sandbox -Syu --noconfirm --ignore linux-aarch64,linux-aarch64-lts,linux-aarch64-headers,linux-aarch64-lts-headers,linux-firmware,linux-firmware-whence,mkinitcpio && \ pacman --disable-sandbox -S --needed --noconfirm \ @@ -75,7 +75,9 @@ RUN sed -i '/en_US.UTF-8/s/^# //' /etc/locale.gen && \ printf '%s\n' 'LANG=en_US.UTF-8' > /etc/locale.conf && \ install -d -m 0755 /run/sshd && \ sed -i 's/^#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config && \ - sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config + sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config && \ + echo "DisableSandbox" >> /etc/pacman.conf && \ + userdel -r armtix 2>/dev/null || true # NetworkManager DHCP profile for eth* interfaces used by DroidSpaces. RUN install -d -m 0700 /etc/NetworkManager/system-connections && \ From 06ae0f920061ed54c5f387d543e6d2a779e8ed55 Mon Sep 17 00:00:00 2001 From: Chara Date: Thu, 3 Sep 2026 02:16:40 -0400 Subject: [PATCH 09/16] fix(artix): insert DisableSandbox into [options] section Previously appended to end of file which put it in wrong section. --- Artix-Base-OpenRC.Dockerfile | 2 +- Artix-Minimal-OpenRC.Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Artix-Base-OpenRC.Dockerfile b/Artix-Base-OpenRC.Dockerfile index 11187d9..a5f4b7e 100644 --- a/Artix-Base-OpenRC.Dockerfile +++ b/Artix-Base-OpenRC.Dockerfile @@ -96,7 +96,7 @@ RUN sed -i '/en_US.UTF-8/s/^# //' /etc/locale.gen && \ install -d -m 0755 /run/sshd && \ sed -i 's/^#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config && \ sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config && \ - echo "DisableSandbox" >> /etc/pacman.conf && \ + sed -i "/^\[options\]/a DisableSandbox" /etc/pacman.conf && \ userdel -r armtix 2>/dev/null || true # NetworkManager DHCP profile for eth* interfaces used by DroidSpaces. diff --git a/Artix-Minimal-OpenRC.Dockerfile b/Artix-Minimal-OpenRC.Dockerfile index 9a6547d..f7c9417 100644 --- a/Artix-Minimal-OpenRC.Dockerfile +++ b/Artix-Minimal-OpenRC.Dockerfile @@ -76,7 +76,7 @@ RUN sed -i '/en_US.UTF-8/s/^# //' /etc/locale.gen && \ install -d -m 0755 /run/sshd && \ sed -i 's/^#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config && \ sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config && \ - echo "DisableSandbox" >> /etc/pacman.conf && \ + sed -i "/^\[options\]/a DisableSandbox" /etc/pacman.conf && \ userdel -r armtix 2>/dev/null || true # NetworkManager DHCP profile for eth* interfaces used by DroidSpaces. From ebe122d51795c1a3fb68286c5861e3b82ec6f6d5 Mon Sep 17 00:00:00 2001 From: Chara Date: Thu, 3 Sep 2026 02:42:01 -0400 Subject: [PATCH 10/16] fix(artix): handle locale.gen with or without space after # --- Artix-Base-OpenRC.Dockerfile | 2 +- Artix-Minimal-OpenRC.Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Artix-Base-OpenRC.Dockerfile b/Artix-Base-OpenRC.Dockerfile index a5f4b7e..e2871ee 100644 --- a/Artix-Base-OpenRC.Dockerfile +++ b/Artix-Base-OpenRC.Dockerfile @@ -90,7 +90,7 @@ RUN ln -sf /usr/bin/iptables-legacy /usr/bin/iptables && \ # Configure locale and SSH. OpenRC's sshd service creates/uses the runtime state # when booted, but keep the directory for container runtimes that start it early. -RUN sed -i '/en_US.UTF-8/s/^# //' /etc/locale.gen && \ +RUN sed -i '/en_US.UTF-8/s/^#\s\?//' /etc/locale.gen && \ locale-gen && \ printf '%s\n' 'LANG=en_US.UTF-8' > /etc/locale.conf && \ install -d -m 0755 /run/sshd && \ diff --git a/Artix-Minimal-OpenRC.Dockerfile b/Artix-Minimal-OpenRC.Dockerfile index f7c9417..43a0996 100644 --- a/Artix-Minimal-OpenRC.Dockerfile +++ b/Artix-Minimal-OpenRC.Dockerfile @@ -70,7 +70,7 @@ RUN ln -sf /usr/bin/iptables-legacy /usr/bin/iptables && \ # Configure locale and SSH. OpenRC's sshd service creates/uses the runtime state # when booted, but keep the directory for container runtimes that start it early. -RUN sed -i '/en_US.UTF-8/s/^# //' /etc/locale.gen && \ +RUN sed -i '/en_US.UTF-8/s/^#\s\?//' /etc/locale.gen && \ locale-gen && \ printf '%s\n' 'LANG=en_US.UTF-8' > /etc/locale.conf && \ install -d -m 0755 /run/sshd && \ From aea5baf4ad9f5d33dbff42609fd77075857c8a63 Mon Sep 17 00:00:00 2001 From: Chara Strait <92406354+diverselightchara@users.noreply.github.com> Date: Thu, 3 Sep 2026 03:14:12 -0400 Subject: [PATCH 11/16] Add Artix Linux rootfs entries to rootfs.json --- rootfs.json | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/rootfs.json b/rootfs.json index f87f624..19d3e91 100644 --- a/rootfs.json +++ b/rootfs.json @@ -51,6 +51,32 @@ "build_date": "20260906", "author": "Droidspaces developers" }, + { + "name": "Artix Linux - Minimal", + "distro": "Artix", + "description": "Artix Linux rootfs with basic packages(Uses OpenRC).", + "architecture": "aarch64", + "file": "Artix-Minimal-OpenRC", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260903-064222/Artix-Minimal-OpenRC-Droidspaces-rootfs-aarch64-20260903-v20260903-064222.tar.xz", + "sha256": "dcdcb31bab459566cb36f047aa65539c7318133258d0317847ce52f95d7db543", + "size_bytes": 160995400, + "version": "v20260903-064222", + "build_date": "20260903", + "author": "Droidspaces developers" + }, + { + "name": "Artix Linux - Base", + "distro": "Artix", + "description": "Artix Linux rootfs with basic packages, development tools and Docker (Uses OpenRC).", + "architecture": "aarch64", + "file": "Artix-Base-OpenRC", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260903-064222/Artix-Base-OpenRC-Droidspaces-rootfs-aarch64-20260903-v20260903-064222.tar.xz", + "sha256": "13c0dc08be6e3a9f24d4f7d2bdcc9b6f67c30f833c56495a73a91661235de300", + "size_bytes": 440785844, + "version": "v20260903-064222", + "build_date": "20260903", + "author": "Droidspaces developers" + }, { "name": "Debian GNU/Linux 13 (Trixie) - Minimal", "distro": "Debian", From 7c1f870553a2581580d495219dd6163ae352dbe1 Mon Sep 17 00:00:00 2001 From: Chara Date: Tue, 8 Sep 2026 11:52:22 -0400 Subject: [PATCH 12/16] (fixup) Ar(m)tix: Fix /dev/ permissions issues The changes here were copied directly from the Alpine container after ravindu mentioned how it had some OpenRC fixes Signed-off-by: Chara --- Artix-Minimal-OpenRC.Dockerfile | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Artix-Minimal-OpenRC.Dockerfile b/Artix-Minimal-OpenRC.Dockerfile index 43a0996..6d2f7ad 100644 --- a/Artix-Minimal-OpenRC.Dockerfile +++ b/Artix-Minimal-OpenRC.Dockerfile @@ -111,6 +111,14 @@ grep -q '^aid_net_admin:' /etc/group || echo 'aid_net_admin:x:3005:' >> /etc/gro # Permit root to access Android networking and exposed hardware devices. usermod -a -G aid_inet,aid_net_raw,input,video,tty root || true +# Tell OpenRC it's in an LXC-style container (same as Alpine) +sed -i 's/^#\?rc_sys=.*/rc_sys="lxc"/' /etc/rc.conf + +# Remove "dev" dependency from machine-id if it exists +if [ -f /etc/init.d/machine-id ]; then + sed -i 's/need root dev/need root/' /etc/init.d/machine-id +fi + # Artix does not normally have _apt, but preserve compatibility if it is added. if grep -q '^_apt:' /etc/passwd; then usermod -g aid_inet _apt From 9ad270af219bb0250cb940f316eba22f49429299 Mon Sep 17 00:00:00 2001 From: Chara Date: Tue, 8 Sep 2026 12:10:02 -0400 Subject: [PATCH 13/16] (fixup) Ar(m)tix: Add additional OpenRC fixes from Alpine Additionally reflect the fixes onto the Base container. Signed-off-by: Chara --- Artix-Base-OpenRC.Dockerfile | 17 +++++++++++++++++ Artix-Minimal-OpenRC.Dockerfile | 9 +++++++++ 2 files changed, 26 insertions(+) diff --git a/Artix-Base-OpenRC.Dockerfile b/Artix-Base-OpenRC.Dockerfile index e2871ee..55d6c73 100644 --- a/Artix-Base-OpenRC.Dockerfile +++ b/Artix-Base-OpenRC.Dockerfile @@ -131,6 +131,23 @@ grep -q '^aid_net_admin:' /etc/group || echo 'aid_net_admin:x:3005:' >> /etc/gro # Permit root to access Android networking and exposed hardware devices. usermod -a -G aid_inet,aid_net_raw,input,video,tty root || true +# Tell OpenRC it's in an LXC-style container (same as Alpine) +sed -i 's/^#\?rc_sys=.*/rc_sys="lxc"/' /etc/rc.conf + +# Remove "dev" dependency from machine-id if it exists +if [ -f /etc/init.d/machine-id ]; then + sed -i 's/need root dev/need root/' /etc/init.d/machine-id +fi + +# Fix inittab: +# 1. Remove useless tty1-6 (no VTs in a container) +# 2. Add console getty for the Droidspaces foreground console +# 3. Add console to securetty so root login is allowed +sed -i '/^tty[1-6]::/d' /etc/inittab +grep -q 'console::respawn' /etc/inittab || \ + echo 'console::respawn:/sbin/getty 38400 console' >> /etc/inittab +grep -q '^console$' /etc/securetty || echo 'console' >> /etc/securetty + # Artix does not normally have _apt, but preserve compatibility if it is added. if grep -q '^_apt:' /etc/passwd; then usermod -g aid_inet _apt diff --git a/Artix-Minimal-OpenRC.Dockerfile b/Artix-Minimal-OpenRC.Dockerfile index 6d2f7ad..6e02165 100644 --- a/Artix-Minimal-OpenRC.Dockerfile +++ b/Artix-Minimal-OpenRC.Dockerfile @@ -119,6 +119,15 @@ if [ -f /etc/init.d/machine-id ]; then sed -i 's/need root dev/need root/' /etc/init.d/machine-id fi +# Fix inittab: +# 1. Remove useless tty1-6 (no VTs in a container) +# 2. Add console getty for the Droidspaces foreground console +# 3. Add console to securetty so root login is allowed +sed -i '/^tty[1-6]::/d' /etc/inittab +grep -q 'console::respawn' /etc/inittab || \ + echo 'console::respawn:/sbin/getty 38400 console' >> /etc/inittab +grep -q '^console$' /etc/securetty || echo 'console' >> /etc/securetty + # Artix does not normally have _apt, but preserve compatibility if it is added. if grep -q '^_apt:' /etc/passwd; then usermod -g aid_inet _apt From 3f13e46417717a44339148873dc5f6a2bc65baf6 Mon Sep 17 00:00:00 2001 From: Chara Date: Tue, 8 Sep 2026 18:50:56 -0400 Subject: [PATCH 14/16] (fixup) Ar(m)tix: drop inittab fixes as they don't apply Signed-off-by: Chara --- Artix-Base-OpenRC.Dockerfile | 9 --------- Artix-Minimal-OpenRC.Dockerfile | 8 -------- 2 files changed, 17 deletions(-) diff --git a/Artix-Base-OpenRC.Dockerfile b/Artix-Base-OpenRC.Dockerfile index 55d6c73..bf445c8 100644 --- a/Artix-Base-OpenRC.Dockerfile +++ b/Artix-Base-OpenRC.Dockerfile @@ -139,15 +139,6 @@ if [ -f /etc/init.d/machine-id ]; then sed -i 's/need root dev/need root/' /etc/init.d/machine-id fi -# Fix inittab: -# 1. Remove useless tty1-6 (no VTs in a container) -# 2. Add console getty for the Droidspaces foreground console -# 3. Add console to securetty so root login is allowed -sed -i '/^tty[1-6]::/d' /etc/inittab -grep -q 'console::respawn' /etc/inittab || \ - echo 'console::respawn:/sbin/getty 38400 console' >> /etc/inittab -grep -q '^console$' /etc/securetty || echo 'console' >> /etc/securetty - # Artix does not normally have _apt, but preserve compatibility if it is added. if grep -q '^_apt:' /etc/passwd; then usermod -g aid_inet _apt diff --git a/Artix-Minimal-OpenRC.Dockerfile b/Artix-Minimal-OpenRC.Dockerfile index 6e02165..549b9aa 100644 --- a/Artix-Minimal-OpenRC.Dockerfile +++ b/Artix-Minimal-OpenRC.Dockerfile @@ -119,14 +119,6 @@ if [ -f /etc/init.d/machine-id ]; then sed -i 's/need root dev/need root/' /etc/init.d/machine-id fi -# Fix inittab: -# 1. Remove useless tty1-6 (no VTs in a container) -# 2. Add console getty for the Droidspaces foreground console -# 3. Add console to securetty so root login is allowed -sed -i '/^tty[1-6]::/d' /etc/inittab -grep -q 'console::respawn' /etc/inittab || \ - echo 'console::respawn:/sbin/getty 38400 console' >> /etc/inittab -grep -q '^console$' /etc/securetty || echo 'console' >> /etc/securetty # Artix does not normally have _apt, but preserve compatibility if it is added. if grep -q '^_apt:' /etc/passwd; then From d2f58fa02aec08b870e340fd26feb000c1aa83da Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 8 Sep 2026 23:08:49 +0000 Subject: [PATCH 15/16] chore: update rootfs.json for release v20260908-225124 --- rootfs.json | 198 ++++++++++++++++++++++++++-------------------------- 1 file changed, 99 insertions(+), 99 deletions(-) diff --git a/rootfs.json b/rootfs.json index 19d3e91..0e85124 100644 --- a/rootfs.json +++ b/rootfs.json @@ -5,11 +5,11 @@ "description": "Minimal Alpine Linux v3.23 rootfs with basic packages.", "architecture": "aarch64", "file": "Alpine-Minimal", - "download_url": "https://github.com/Droidspaces/Droidspaces-rootfs-builder/releases/download/v20260906-034335/Alpine-Minimal-Droidspaces-rootfs-aarch64-20260906-v20260906-034335.tar.xz", - "sha256": "40236922ec715b688f5dd158fe9ee66e0561f3e51a3591c89dee43c69969838a", - "size_bytes": 10123176, - "version": "v20260906-034335", - "build_date": "20260906", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/Alpine-Minimal-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", + "sha256": "0c5473bb9401f42d6f64eff4fe2cd1d9ab517410012bc2592543e4904f2ab838", + "size_bytes": 10125824, + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" }, { @@ -18,11 +18,11 @@ "description": "Alpine Linux v3.23 rootfs with basic packages, development tools, Python, and Docker.", "architecture": "aarch64", "file": "Alpine-base", - "download_url": "https://github.com/Droidspaces/Droidspaces-rootfs-builder/releases/download/v20260906-034335/Alpine-base-Droidspaces-rootfs-aarch64-20260906-v20260906-034335.tar.xz", - "sha256": "f53854f47a1c309f42bc6f4df1b52513bbf1f760f76875319f3b8c59ea2138c4", - "size_bytes": 235057976, - "version": "v20260906-034335", - "build_date": "20260906", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/Alpine-base-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", + "sha256": "974bd331d8c33df638cc4c7aecdb40379992a05afd78810b9fc8ab1213d7f328", + "size_bytes": 235052468, + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" }, { @@ -31,11 +31,11 @@ "description": "Minimal Arch Linux rootfs with basic packages. (Runs on Kernel 5.10 and above only).", "architecture": "aarch64", "file": "Arch-Minimal-Kernel-5.10-and-up", - "download_url": "https://github.com/Droidspaces/Droidspaces-rootfs-builder/releases/download/v20260906-034335/Arch-Minimal-Kernel-5.10-and-up-Droidspaces-rootfs-aarch64-20260906-v20260906-034335.tar.xz", - "sha256": "aa6c5c4eff173e6b8eb104bdb62e99acd165cb64435a72536e5e2d2db4570ca3", - "size_bytes": 110747400, - "version": "v20260906-034335", - "build_date": "20260906", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/Arch-Minimal-Kernel-5.10-and-up-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", + "sha256": "5a2173a4fcb03f3ce087439cec8e0c0afaafc09b1ee3e17826cbb16a5ee616b3", + "size_bytes": 110795636, + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" }, { @@ -44,11 +44,11 @@ "description": "Arch Linux rootfs with basic packages, development tools and Docker (Runs on Kernel 5.10 and above only).", "architecture": "aarch64", "file": "Arch-base-Kernel-5.10-and-up", - "download_url": "https://github.com/Droidspaces/Droidspaces-rootfs-builder/releases/download/v20260906-034335/Arch-base-Kernel-5.10-and-up-Droidspaces-rootfs-aarch64-20260906-v20260906-034335.tar.xz", - "sha256": "6cf58979f872a1e9f2fecdf6ac3c3c56d5663313a96d2b2bd74e68d511bc9d00", - "size_bytes": 354891384, - "version": "v20260906-034335", - "build_date": "20260906", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/Arch-base-Kernel-5.10-and-up-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", + "sha256": "f21907a629c7300263df75e0da7c8694e4817359f6b5e9d85df9cdb9ddb89d59", + "size_bytes": 355900700, + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" }, { @@ -57,11 +57,11 @@ "description": "Artix Linux rootfs with basic packages(Uses OpenRC).", "architecture": "aarch64", "file": "Artix-Minimal-OpenRC", - "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260903-064222/Artix-Minimal-OpenRC-Droidspaces-rootfs-aarch64-20260903-v20260903-064222.tar.xz", - "sha256": "dcdcb31bab459566cb36f047aa65539c7318133258d0317847ce52f95d7db543", - "size_bytes": 160995400, - "version": "v20260903-064222", - "build_date": "20260903", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/Artix-Minimal-OpenRC-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", + "sha256": "255d5f41cf9d283aa4e55d54a23151a29d863968e4aceb263232fdef0d2ffc04", + "size_bytes": 161177080, + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" }, { @@ -70,11 +70,11 @@ "description": "Artix Linux rootfs with basic packages, development tools and Docker (Uses OpenRC).", "architecture": "aarch64", "file": "Artix-Base-OpenRC", - "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260903-064222/Artix-Base-OpenRC-Droidspaces-rootfs-aarch64-20260903-v20260903-064222.tar.xz", - "sha256": "13c0dc08be6e3a9f24d4f7d2bdcc9b6f67c30f833c56495a73a91661235de300", - "size_bytes": 440785844, - "version": "v20260903-064222", - "build_date": "20260903", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/Artix-Base-OpenRC-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", + "sha256": "5159d11ca88af760041fd6e5741e568df65efaacaa007ee9029bc3cfa40e9099", + "size_bytes": 435521656, + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" }, { @@ -83,11 +83,11 @@ "description": "Minimal Debian 13 rootfs with basic packages.", "architecture": "aarch64", "file": "Debian-13-Minimal", - "download_url": "https://github.com/Droidspaces/Droidspaces-rootfs-builder/releases/download/v20260906-034335/Debian-13-Minimal-Droidspaces-rootfs-aarch64-20260906-v20260906-034335.tar.xz", - "sha256": "ee9024e6c5d77615242017379f72bb7f65b582b65363129582d299c5f20be1b7", - "size_bytes": 101486184, - "version": "v20260906-034335", - "build_date": "20260906", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/Debian-13-Minimal-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", + "sha256": "176a80ddbf4d6326d1c3db223af09ee5ed76c1b0aef681cab56dd24d99b27679", + "size_bytes": 101427944, + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" }, { @@ -96,11 +96,11 @@ "description": "Debian 13 rootfs with basic packages, development tools, and Docker.", "architecture": "aarch64", "file": "Debian-13-base", - "download_url": "https://github.com/Droidspaces/Droidspaces-rootfs-builder/releases/download/v20260906-034335/Debian-13-base-Droidspaces-rootfs-aarch64-20260906-v20260906-034335.tar.xz", - "sha256": "32a8b26ca1336f676fc6575fe9bb34421e04a4c96b5be1ea6a138de792a148c9", - "size_bytes": 347245988, - "version": "v20260906-034335", - "build_date": "20260906", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/Debian-13-base-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", + "sha256": "3bf3cdfb690a3b7e2a4e45cae29c6961c4332b6d8f827937c1be685bec6e920b", + "size_bytes": 347229752, + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" }, { @@ -109,11 +109,11 @@ "description": "Debian 13 rootfs with basic packages, development tools, Docker, XFCE desktop environment.", "architecture": "aarch64", "file": "Debian-13-XFCE", - "download_url": "https://github.com/Droidspaces/Droidspaces-rootfs-builder/releases/download/v20260906-034335/Debian-13-XFCE-Droidspaces-rootfs-aarch64-20260906-v20260906-034335.tar.xz", - "sha256": "31d95cedc8d039f44d06753579430b76627dbccaca4b3d76c3e9a81e70fc181a", - "size_bytes": 632546160, - "version": "v20260906-034335", - "build_date": "20260906", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/Debian-13-XFCE-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", + "sha256": "f3dd517170be94cd8fe5c6d40e84a267abad8adb0213824d981093ce02b794ad", + "size_bytes": 632392284, + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" }, { @@ -122,11 +122,11 @@ "description": "Minimal Kali Linux rootfs with basic packages.", "architecture": "aarch64", "file": "Kali-Linux-Minimal", - "download_url": "https://github.com/Droidspaces/Droidspaces-rootfs-builder/releases/download/v20260906-034335/Kali-Linux-Minimal-Droidspaces-rootfs-aarch64-20260906-v20260906-034335.tar.xz", - "sha256": "234b3fdb7682d2d4aca290225fc059c7e9c387d70db5cd93cd468c82098679ab", - "size_bytes": 118980844, - "version": "v20260906-034335", - "build_date": "20260906", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/Kali-Linux-Minimal-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", + "sha256": "a9b91eebcb431dbe464ff190e297f6fea13b1e3d87b2a333378b3b2624f07de1", + "size_bytes": 118945116, + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" }, { @@ -135,11 +135,11 @@ "description": "Kali Linux rootfs with basic packages, development tools, Docker, and XFCE desktop environment.", "architecture": "aarch64", "file": "Kali-Linux-XFCE", - "download_url": "https://github.com/Droidspaces/Droidspaces-rootfs-builder/releases/download/v20260906-034335/Kali-Linux-XFCE-Droidspaces-rootfs-aarch64-20260906-v20260906-034335.tar.xz", - "sha256": "0406b06076aaa931d0240ba967f328f1094d7aedaef835fb8e2e26b0e3b59fa9", - "size_bytes": 814668028, - "version": "v20260906-034335", - "build_date": "20260906", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/Kali-Linux-XFCE-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", + "sha256": "4e8afe91c31130b42f4ed5835c89656e65d29ebce39554356381a8535c71a9fa", + "size_bytes": 814791148, + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" }, { @@ -148,11 +148,11 @@ "description": "Minimal Ubuntu 22.04 rootfs with basic packages..", "architecture": "aarch64", "file": "Ubuntu-22.04-Minimal", - "download_url": "https://github.com/Droidspaces/Droidspaces-rootfs-builder/releases/download/v20260906-034335/Ubuntu-22.04-Minimal-Droidspaces-rootfs-aarch64-20260906-v20260906-034335.tar.xz", - "sha256": "280bf6139575b3251e06d621b9e1b8cffad02f4c17f2631a90abf44a8318aa9f", - "size_bytes": 70702972, - "version": "v20260906-034335", - "build_date": "20260906", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/Ubuntu-22.04-Minimal-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", + "sha256": "ab2e9ed318f6b582a3d253a25443a617dddcbdbe81520f4b4c3f0dfc18b2b764", + "size_bytes": 70694820, + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" }, { @@ -161,11 +161,11 @@ "description": "Ubuntu 22.04 rootfs with basic packages, development tools, and Docker.", "architecture": "aarch64", "file": "Ubuntu-22.04-base", - "download_url": "https://github.com/Droidspaces/Droidspaces-rootfs-builder/releases/download/v20260906-034335/Ubuntu-22.04-base-Droidspaces-rootfs-aarch64-20260906-v20260906-034335.tar.xz", - "sha256": "866f738720f6da3a6109cd96a9319547fde4e0df58b372177a8a1bc61718ce50", - "size_bytes": 279369064, - "version": "v20260906-034335", - "build_date": "20260906", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/Ubuntu-22.04-base-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", + "sha256": "48ddf77857adba1e25325a9788607527f95d87e9b44f8e04e81c7e1a89c3ece4", + "size_bytes": 279328096, + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" }, { @@ -174,11 +174,11 @@ "description": "Minimal Ubuntu 24.04 rootfs with basic packages.", "architecture": "aarch64", "file": "Ubuntu-24.04-Minimal", - "download_url": "https://github.com/Droidspaces/Droidspaces-rootfs-builder/releases/download/v20260906-034335/Ubuntu-24.04-Minimal-Droidspaces-rootfs-aarch64-20260906-v20260906-034335.tar.xz", - "sha256": "e8f4ec6c1b7b4948f26b4dd36434df39b0c93b73dabd15a401b9f8f49bc22692", - "size_bytes": 74049952, - "version": "v20260906-034335", - "build_date": "20260906", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/Ubuntu-24.04-Minimal-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", + "sha256": "c9ed56c1e277ab441fdb2ca6eb8c9aaca6a1a35d31db60888bed76b2638c4db0", + "size_bytes": 73976304, + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" }, { @@ -187,11 +187,11 @@ "description": "Ubuntu 24.04 rootfs with basic packages, development tools, and Docker.", "architecture": "aarch64", "file": "Ubuntu-24.04-base", - "download_url": "https://github.com/Droidspaces/Droidspaces-rootfs-builder/releases/download/v20260906-034335/Ubuntu-24.04-base-Droidspaces-rootfs-aarch64-20260906-v20260906-034335.tar.xz", - "sha256": "24482475db7a7bd61f40e8ce6494222e682ea8e5d32f928dc5b96a08d8d65ba9", - "size_bytes": 303014008, - "version": "v20260906-034335", - "build_date": "20260906", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/Ubuntu-24.04-base-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", + "sha256": "8d14eb2819bc4cc11400a5601c4efb79b3668e8bd9a4e7cd7b878cfb9c90d7db", + "size_bytes": 303034016, + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" }, { @@ -200,11 +200,11 @@ "description": "Ubuntu 24.04 rootfs with basic packages, development tools, Docker and XFCE desktop environment.", "architecture": "aarch64", "file": "Ubuntu-24.04-XFCE", - "download_url": "https://github.com/Droidspaces/Droidspaces-rootfs-builder/releases/download/v20260906-034335/Ubuntu-24.04-XFCE-Droidspaces-rootfs-aarch64-20260906-v20260906-034335.tar.xz", - "sha256": "b6686a5100b5bea22061e0cd21ae02a8b008aa27a5964d9e68ede68d5e6350ae", - "size_bytes": 567274860, - "version": "v20260906-034335", - "build_date": "20260906", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/Ubuntu-24.04-XFCE-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", + "sha256": "209f5c1bf0a3b790fc7b227b48b33189d65eeffe970e8689f9d332cef72ef03a", + "size_bytes": 567266292, + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" }, { @@ -213,11 +213,11 @@ "description": "Minimal NixOS rootfs with basic packages with basic packages and latest Systemd. (Runs on Kernel 5.10 and above only)", "architecture": "aarch64", "file": "NixOS-Minimal-Systemd-latest-Kernel-5.10-and-up", - "download_url": "https://github.com/Droidspaces/Droidspaces-rootfs-builder/releases/download/v20260906-034335/NixOS-Minimal-Systemd-latest-Kernel-5.10-and-up-Droidspaces-rootfs-aarch64-20260906-v20260906-034335.tar.xz", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/NixOS-Minimal-Systemd-latest-Kernel-5.10-and-up-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", "sha256": "86ad472977de85f5ef1416c1627f7c59c01d72b9a0c68cd6da7d13ac2f238fec", "size_bytes": 204216116, - "version": "v20260906-034335", - "build_date": "20260906", + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" }, { @@ -226,11 +226,11 @@ "description": "Minimal NixOS rootfs with basic packages with basic packages and Systemd v257.9.", "architecture": "aarch64", "file": "NixOS-Minimal-Systemd-v257.9", - "download_url": "https://github.com/Droidspaces/Droidspaces-rootfs-builder/releases/download/v20260906-034335/NixOS-Minimal-Systemd-v257.9-Droidspaces-rootfs-aarch64-20260906-v20260906-034335.tar.xz", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/NixOS-Minimal-Systemd-v257.9-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", "sha256": "10e828cfb6bef064c19338cf1d45604a646d95a308d5df60d5d396e7f057b4ed", "size_bytes": 189369976, - "version": "v20260906-034335", - "build_date": "20260906", + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" }, { @@ -239,11 +239,11 @@ "description": "Experimental Finix NixOS rootfs with basic packages.", "architecture": "aarch64", "file": "NixOS-Minimal-Finix-Experimental", - "download_url": "https://github.com/Droidspaces/Droidspaces-rootfs-builder/releases/download/v20260906-034335/NixOS-Minimal-Finix-Experimental-Droidspaces-rootfs-aarch64-20260906-v20260906-034335.tar.xz", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/NixOS-Minimal-Finix-Experimental-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", "sha256": "0d0f41556630c96aa7d8006ec7ce0132c2867c27f11145e69ebbbf9f43b943db", "size_bytes": 285773576, - "version": "v20260906-034335", - "build_date": "20260906", + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" }, { @@ -252,11 +252,11 @@ "description": "Azure Linux 3.0 rootfs with basic packages.", "architecture": "aarch64", "file": "AzureLinux-3.0-Minimal", - "download_url": "https://github.com/Droidspaces/Droidspaces-rootfs-builder/releases/download/v20260906-034335/AzureLinux-3.0-Minimal-Droidspaces-rootfs-aarch64-20260906-v20260906-034335.tar.xz", - "sha256": "4872f63cc72198c3d5a2b8420f96ca519c1e8e1eab19765333277e2033a899e7", - "size_bytes": 86674156, - "version": "v20260906-034335", - "build_date": "20260906", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/AzureLinux-3.0-Minimal-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", + "sha256": "c5b2291b9f78796deb547543a2c216b5a0d8cc9d74c36979745cebbca270c6c5", + "size_bytes": 86654480, + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" }, { @@ -265,11 +265,11 @@ "description": "Minimal OpenWrt 24.10 router rootfs built for Android kernels: nftables/fw4 stripped out in favor of iptables-legacy + fw3, with full firewall (NAT, zones, masquerade) working. Tuned for VirtualAP's managed-hotspot (container) mode.", "architecture": "aarch64", "file": "OpenWrt-24.10-Minimal", - "download_url": "https://github.com/Droidspaces/Droidspaces-rootfs-builder/releases/download/v20260906-034335/OpenWrt-24.10-Minimal-Droidspaces-rootfs-aarch64-20260906-v20260906-034335.tar.xz", - "sha256": "0299c7e6995441740b101d64eed0390b1911b40bc71d540bc43f5afdd6a3a0e0", - "size_bytes": 3004032, - "version": "v20260906-034335", - "build_date": "20260906", + "download_url": "https://github.com/diverselightchara/Droidspaces-rootfs-builder/releases/download/v20260908-225124/OpenWrt-24.10-Minimal-Droidspaces-rootfs-aarch64-20260908-v20260908-225124.tar.xz", + "sha256": "c9e28cfea11710d9de35202bc31ab345db83350efe54264ee007e9f2ece60ebb", + "size_bytes": 2998920, + "version": "v20260908-225124", + "build_date": "20260908", "author": "Droidspaces developers" } ] From 433fd7c8842e07f12aab8b52ceb79dd5e86da31f Mon Sep 17 00:00:00 2001 From: Chara Date: Tue, 8 Sep 2026 19:30:50 -0400 Subject: [PATCH 16/16] (fixup) Ar(m)tix: add initrc script to fix /dev/null permissions Signed-off-by: Chara --- Artix-Base-OpenRC.Dockerfile | 22 +++++++++++++++++++++- Artix-Minimal-OpenRC.Dockerfile | 21 +++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/Artix-Base-OpenRC.Dockerfile b/Artix-Base-OpenRC.Dockerfile index bf445c8..2125788 100644 --- a/Artix-Base-OpenRC.Dockerfile +++ b/Artix-Base-OpenRC.Dockerfile @@ -212,14 +212,34 @@ stop() { EOT chmod 0755 /etc/init.d/droidspaces-network +# Fix /dev/null permissions for container use +cat > /etc/init.d/droidspaces-devfix <<'EOT' +#!/sbin/openrc-run + +description="Fix /dev/null permissions for container use" + +depend() { + before * + after devfs +} + +start() { + ebegin "Fixing /dev/null permissions" + chmod 666 /dev/null + chown root:root /dev/null + eend $? +} +EOT +chmod 0755 /etc/init.d/droidspaces-devfix + # OpenRC service enablement. +rc-update add droidspaces-devfix sysinit rc-update add udev sysinit rc-update del udev-trigger sysinit 2>/dev/null || true rc-update add droidspaces-udev-trigger sysinit rc-update add dbus default rc-update add droidspaces-network default rc-update add sshd default -rc-update add docker default # Keep logs bounded on storage-constrained Android devices. if [ -f /etc/logrotate.conf ]; then diff --git a/Artix-Minimal-OpenRC.Dockerfile b/Artix-Minimal-OpenRC.Dockerfile index 549b9aa..1d93773 100644 --- a/Artix-Minimal-OpenRC.Dockerfile +++ b/Artix-Minimal-OpenRC.Dockerfile @@ -193,7 +193,28 @@ stop() { EOT chmod 0755 /etc/init.d/droidspaces-network +# Fix /dev/null permissions for container use +cat > /etc/init.d/droidspaces-devfix <<'EOT' +#!/sbin/openrc-run + +description="Fix /dev/null permissions for container use" + +depend() { + before * + after devfs +} + +start() { + ebegin "Fixing /dev/null permissions" + chmod 666 /dev/null + chown root:root /dev/null + eend $? +} +EOT +chmod 0755 /etc/init.d/droidspaces-devfix + # OpenRC service enablement. +rc-update add droidspaces-devfix sysinit rc-update add udev sysinit rc-update del udev-trigger sysinit 2>/dev/null || true rc-update add droidspaces-udev-trigger sysinit