#!/usr/bin/env bash set -euo pipefail # ========================================== # EspOS OpenRC RootFS Builder # Debian 13 Trixie + EspOS unstable # ========================================== 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.zst" 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 " 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 previous rootfs" rm -rf "$ROOTFS" echo "[+] Creating Debian ${DEBIAN_SUITE} minbase" debootstrap \ --variant=minbase \ --arch="$ARCH" \ "$DEBIAN_SUITE" \ "$ROOTFS" \ "$DEBIAN_MIRROR" echo "[+] Copy DNS" cp /etc/resolv.conf "$ROOTFS/etc/resolv.conf" echo "[+] Mounting 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 Debian CA certificates" chroot "$ROOTFS" apt update chroot "$ROOTFS" apt install -y \ ca-certificates echo "[+] Adding temporary EspOS repository" cat > "$ROOTFS/etc/apt/sources.list.d/espos.list" < "$ROOTFS/etc/apt/sources.list.d/espos.list" < "$ROOTFS/etc/apt/preferences.d/no-systemd" </dev/null || true echo "[+] Setting OpenRC init" ln -sf /sbin/openrc-init "$ROOTFS/sbin/init" echo "[+] Hostname" echo "espos" > "$ROOTFS/etc/hostname" echo "[+] Locales" chroot "$ROOTFS" bash -c " echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen locale-gen " echo "[+] Installing network support..." chroot "$ROOTFS" apt install -y network-manager dhcpcd 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 chroot "$ROOTFS" rc-update add elogind default || true chroot "$ROOTFS" rc-update add dbus default || true chroot "$ROOTFS" rc-update add NetworkManager default || true echo "[+] Installing Linux" chroot "$ROOTFS" apt install espos-kernel -y echo "[+] Installing GNOME" chroot "$ROOTFS" apt install gnome-shell gnome-session gnome-control-center gnome-terminal nautilus mutter -y echo "[+] Cleaning" chroot "$ROOTFS" apt clean rm -rf "$ROOTFS/var/lib/apt/lists/*" rm -rf "$ROOTFS/tmp/*" echo "[+] Cleaning mounts before packaging" umount -lf "$ROOTFS/dev/pts" || true umount -lf "$ROOTFS/dev" || true umount -lf "$ROOTFS/proc" || true umount -lf "$ROOTFS/sys" || true echo "[+] Calculando tamaƱo" SIZE=$(du -sb "$ROOTFS" | cut -f1) echo "[+] Eliminando anterior ROOTFS" rm -rvf $OUTPUT echo "[+] Creando rootfs comprimido" tar \ --numeric-owner \ -C "$ROOTFS" \ -cf - . \ | pv -s "$SIZE" \ | zstd -19 -T0 -o "$OUTPUT" echo echo "=====================================" echo " EspOS rootfs generated" echo " $OUTPUT" echo "====================================="