#!/usr/bin/env bash set -euo pipefail # ========================================== # EspOS OpenRC RootFS Builder # Debian 13 Trixie + EspOS unstable # # Output: # espos-openrc-rootfs.tar.xz # # No incluye: # - live user # - escritorio # - instalador # ========================================== ARCH="amd64" DEBIAN_SUITE="trixie" DEBIAN_MIRROR="http://deb.debian.org/debian" ESPOS_REPO="https://repo.elordenador.org" ESPOS_SUITE="espos-unstable" ROOTFS="$(pwd)/rootfs" OUTPUT="espos-openrc-rootfs.tar.xz" KEYRING_PACKAGE="espos-archive-keyring" KEYRING_PATH="/usr/share/keyrings/espos-archive-keyring.gpg" BASE_PACKAGES=" bash coreutils sudo ca-certificates locales tzdata curl wget openssh-server openrc dbus elogind init-system-helpers " ESPOS_PACKAGES=" base-files espos-release " cleanup() { echo "[+] Cleaning mounts" umount -lf "$ROOTFS/dev/pts" 2>/dev/null || true umount -lf "$ROOTFS/dev" 2>/dev/null || true umount -lf "$ROOTFS/proc" 2>/dev/null || true umount -lf "$ROOTFS/sys" 2>/dev/null || true } trap cleanup EXIT echo "[+] Removing old rootfs" rm -rf "$ROOTFS" echo "[+] Creating Debian ${DEBIAN_SUITE} minbase" debootstrap \ --variant=minbase \ --arch="$ARCH" \ "$DEBIAN_SUITE" \ "$ROOTFS" \ "$DEBIAN_MIRROR" echo "[+] Copying DNS" cp /etc/resolv.conf "$ROOTFS/etc/resolv.conf" echo "[+] Mounting virtual filesystems" mount --bind /dev "$ROOTFS/dev" mount --bind /dev/pts "$ROOTFS/dev/pts" mount -t proc proc "$ROOTFS/proc" mount -t sysfs sys "$ROOTFS/sys" echo "[+] Installing ca-certificates first" chroot "$ROOTFS" apt update chroot "$ROOTFS" apt install -y \ ca-certificates echo "[+] Blocking systemd packages" cat > "$ROOTFS/etc/apt/preferences.d/no-systemd" < "$ROOTFS/etc/apt/sources.list.d/espos.list" </dev/null || true echo "[+] Installing EspOS archive keyring" if ls "$ROOTFS/tmp/packages/${KEYRING_PACKAGE}"*.deb >/dev/null 2>&1 then chroot "$ROOTFS" dpkg -i \ /tmp/packages/${KEYRING_PACKAGE}*.deb else echo "[ERROR] Missing ${KEYRING_PACKAGE}.deb" exit 1 fi echo "[+] Switching EspOS repo to signed-by" cat > "$ROOTFS/etc/apt/sources.list.d/espos.list" </dev/null || true echo "[+] Configuring OpenRC init" ln -sf /sbin/openrc-init "$ROOTFS/sbin/init" echo "[+] Configuring hostname" echo "espos" > "$ROOTFS/etc/hostname" echo "[+] Generating locales" chroot "$ROOTFS" bash -c " echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen locale-gen " echo "[+] Enabling OpenRC base services" chroot "$ROOTFS" rc-update add devfs sysinit || true chroot "$ROOTFS" rc-update add procfs boot || true chroot "$ROOTFS" rc-update add sysfs boot || true echo "[+] Cleaning apt" chroot "$ROOTFS" apt clean rm -rf "$ROOTFS/var/lib/apt/lists/*" rm -rf "$ROOTFS/tmp/*" echo "[+] Creating rootfs archive" tar \ --numeric-owner \ -C "$ROOTFS" \ -cJf "$OUTPUT" . echo echo "========================================" echo " EspOS OpenRC rootfs created" echo echo " Output:" echo " $OUTPUT" echo "========================================"