263 lines
3.9 KiB
Bash
263 lines
3.9 KiB
Bash
#!/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" <<EOF
|
|
deb [trusted=yes] ${ESPOS_REPO} ${ESPOS_SUITE} main
|
|
EOF
|
|
|
|
|
|
|
|
echo "[+] Updating trusted repository"
|
|
|
|
|
|
chroot "$ROOTFS" apt update
|
|
|
|
|
|
|
|
echo "[+] Installing EspOS keyring from repository"
|
|
|
|
|
|
chroot "$ROOTFS" apt install -y \
|
|
"$KEYRING_PACKAGE"
|
|
|
|
|
|
|
|
echo "[+] Switching repository to signed-by"
|
|
|
|
|
|
cat > "$ROOTFS/etc/apt/sources.list.d/espos.list" <<EOF
|
|
deb [signed-by=${KEYRING_PATH}] ${ESPOS_REPO} ${ESPOS_SUITE} main
|
|
EOF
|
|
|
|
|
|
|
|
echo "[+] Updating signed repository"
|
|
|
|
|
|
chroot "$ROOTFS" apt update
|
|
|
|
|
|
|
|
echo "[+] Blocking systemd"
|
|
|
|
|
|
cat > "$ROOTFS/etc/apt/preferences.d/no-systemd" <<EOF
|
|
Package: systemd systemd-sysv libsystemd0
|
|
Pin: release *
|
|
Pin-Priority: -1
|
|
EOF
|
|
|
|
|
|
|
|
echo "[+] Installing OpenRC base"
|
|
|
|
|
|
chroot "$ROOTFS" apt install -y \
|
|
$BASE_PACKAGES
|
|
|
|
|
|
|
|
echo "[+] Installing EspOS packages"
|
|
|
|
|
|
chroot "$ROOTFS" apt install -y \
|
|
$ESPOS_PACKAGES
|
|
|
|
|
|
|
|
echo "[+] Removing systemd leftovers"
|
|
|
|
|
|
chroot "$ROOTFS" apt purge -y \
|
|
systemd \
|
|
systemd-sysv \
|
|
systemd-timesyncd \
|
|
2>/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
|
|
|
|
echo "[+] Installing Linux"
|
|
chroot "$ROOTFS" apt install espos-kernel -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 "=====================================" |