forked from tfgrid/zosbuilder
- Add initramfs_finalize_customization() function - Remove root password for passwordless login (sed -i 's/^root:[^:]*:/root::/' /etc/passwd) - Update /etc/motd and /etc/issue to Zero-OS branding instead of Alpine - Called automatically before CPIO creation - Fixes init script duplication issue (/init vs /sbin/init) - Correct boot flow: /init → switch_root → /sbin/zinit init (no /sbin/init needed)
117 lines
2.8 KiB
Bash
Executable File
117 lines
2.8 KiB
Bash
Executable File
#!/bin/sh -x
|
|
# Alpine-based Zero-OS Init Script
|
|
# Maintains identical flow to original busybox version
|
|
|
|
if [ ! -c /dev/console ]; then
|
|
mknod /dev/console c 5 1
|
|
fi
|
|
|
|
# Redirect output to console explicitly
|
|
exec > /dev/console 2>&1
|
|
|
|
echo ""
|
|
echo "============================================"
|
|
echo "== ZERO-OS ALPINE INITRAMFS =="
|
|
echo "============================================"
|
|
|
|
echo "[+] creating ram filesystem"
|
|
target="/mnt/root"
|
|
mkdir -p $target
|
|
mount -t proc proc /proc
|
|
mount -t sysfs sysfs /sys
|
|
mount -t tmpfs tmpfs /mnt/root -o size=1536M
|
|
mount -t devtmpfs devtmpfs /dev
|
|
mkdir -p /dev/pts
|
|
mount -t devpts devpts /dev/pts
|
|
|
|
echo "[+] building ram filesystem"
|
|
|
|
|
|
# Copy Alpine filesystem to tmpfs (same as original)
|
|
echo " copying /bin..."
|
|
cp -ar /bin $target
|
|
echo " copying /etc..."
|
|
cp -ar /etc $target
|
|
echo " copying /lib..."
|
|
cp -ar /lib* $target
|
|
echo " copying /usr..."
|
|
cp -ar /usr $target
|
|
echo " copying /root..."
|
|
cp -ar /root $target
|
|
echo " copying /sbin..."
|
|
cp -ar /sbin $target
|
|
echo " copying /tmp..."
|
|
cp -ar /tmp $target
|
|
echo " copying /var..."
|
|
cp -ar /var $target
|
|
echo " copying /run..."
|
|
cp -ar /run $target
|
|
|
|
# Create essential directories
|
|
mkdir -p $target/dev
|
|
mkdir -p $target/sys
|
|
mkdir -p $target/proc
|
|
mkdir -p $target/mnt
|
|
|
|
# Mount filesystems in tmpfs
|
|
mount -t proc proc $target/proc
|
|
mount -t sysfs sysfs $target/sys
|
|
mount -t devtmpfs devtmpfs $target/dev
|
|
|
|
# Mount devpts for terminals
|
|
mkdir -p $target/dev/pts
|
|
mount -t devpts devpts $target/dev/pts
|
|
|
|
echo "[+] setting environment"
|
|
export PATH
|
|
|
|
echo "[+] probing drivers"
|
|
# Use Alpine's udev instead of busybox udevadm
|
|
if [ -x /sbin/udevd ]; then
|
|
echo " starting udevd..."
|
|
udevd --daemon
|
|
|
|
echo " triggering device discovery..."
|
|
udevadm trigger --action=add --type=subsystems
|
|
udevadm trigger --action=add --type=devices
|
|
udevadm settle
|
|
|
|
echo " stopping udevd..."
|
|
kill $(pidof udevd) || true
|
|
else
|
|
echo " warning: udevd not found, skipping hardware detection"
|
|
fi
|
|
|
|
echo "[+] loading essential drivers"
|
|
# Load core drivers for storage and network
|
|
modprobe btrfs 2>/dev/null || true
|
|
modprobe fuse 2>/dev/null || true
|
|
modprobe overlay 2>/dev/null || true
|
|
|
|
# Load storage drivers
|
|
modprobe ahci 2>/dev/null || true
|
|
modprobe nvme 2>/dev/null || true
|
|
modprobe virtio_blk 2>/dev/null || true
|
|
modprobe virtio_scsi 2>/dev/null || true
|
|
modprobe virtio_pci 2>/dev/null || true
|
|
|
|
# Load network drivers
|
|
modprobe virtio_net 2>/dev/null || true
|
|
modprobe e1000 2>/dev/null || true
|
|
modprobe e1000e 2>/dev/null || true
|
|
|
|
# Unmount init filesystems
|
|
umount /proc 2>/dev/null || true
|
|
umount /sys 2>/dev/null || true
|
|
|
|
echo "[+] checking for debug files"
|
|
if [ -e /init-debug ]; then
|
|
echo " executing debug script..."
|
|
sh /init-debug
|
|
fi
|
|
|
|
echo "[+] switching root"
|
|
echo " exec switch_root /mnt/root /sbin/zinit init"
|
|
exec switch_root /mnt/root /sbin/zinit -d init
|
|
|
|
## |