feat: Create minimal Zero-OS initramfs with console support
- Fixed build system to clone source repositories instead of downloading binaries - Enhanced scripts/fetch-github.sh with proper git repo cloning and branch handling - Updated scripts/compile-components.sh for RFS compilation with build-binary feature - Added minimal firmware installation for essential network drivers (73 modules) - Created comprehensive zinit configuration set (15 config files including getty) - Added util-linux package for getty/agetty console support - Optimized package selection for minimal 27MB initramfs footprint - Successfully builds bootable vmlinuz.efi with embedded initramfs - Confirmed working: VM boot, console login, network drivers, zinit init system Components: - initramfs.cpio.xz: 27MB compressed minimal Zero-OS image - vmlinuz.efi: 35MB bootable kernel with embedded initramfs - Complete Zero-OS toolchain: zinit, rfs, mycelium compiled from source
This commit is contained in:
@@ -10,45 +10,59 @@ echo "[+] Installing minimal network firmware (not full 600MB package)..."
|
||||
mkdir -p "$FIRMWARE_DIR"
|
||||
|
||||
# Install full linux-firmware temporarily to extract essentials
|
||||
echo " Downloading linux-firmware package..."
|
||||
echo " Downloading and extracting linux-firmware package..."
|
||||
cd /tmp
|
||||
apk fetch linux-firmware
|
||||
tar -xf linux-firmware-*.apk
|
||||
firmware_file=$(ls linux-firmware-*.apk | head -1)
|
||||
if [ -f "$firmware_file" ]; then
|
||||
tar -xf "$firmware_file"
|
||||
echo " Firmware package extracted successfully"
|
||||
else
|
||||
echo " Error: Failed to download linux-firmware package"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Extract only essential network firmware
|
||||
echo " Extracting essential network drivers..."
|
||||
echo " Installing essential network drivers..."
|
||||
|
||||
# Intel Ethernet (most common)
|
||||
if [ -d lib/firmware/intel ]; then
|
||||
mkdir -p "$FIRMWARE_DIR/intel"
|
||||
# e1000e, ixgbe, i40e, ice drivers
|
||||
cp -r lib/firmware/intel/*e1000* "$FIRMWARE_DIR/intel/" 2>/dev/null || true
|
||||
cp -r lib/firmware/intel/*ixgbe* "$FIRMWARE_DIR/intel/" 2>/dev/null || true
|
||||
cp -r lib/firmware/intel/*i40e* "$FIRMWARE_DIR/intel/" 2>/dev/null || true
|
||||
cp -r lib/firmware/intel/*ice* "$FIRMWARE_DIR/intel/" 2>/dev/null || true
|
||||
echo " Intel ethernet firmware: $(du -sh $FIRMWARE_DIR/intel 2>/dev/null | cut -f1)"
|
||||
find lib/firmware/intel -name "*e1000*" -exec cp {} "$FIRMWARE_DIR/intel/" \; 2>/dev/null || true
|
||||
find lib/firmware/intel -name "*ixgbe*" -exec cp {} "$FIRMWARE_DIR/intel/" \; 2>/dev/null || true
|
||||
find lib/firmware/intel -name "*i40e*" -exec cp {} "$FIRMWARE_DIR/intel/" \; 2>/dev/null || true
|
||||
find lib/firmware/intel -name "*ice*" -exec cp {} "$FIRMWARE_DIR/intel/" \; 2>/dev/null || true
|
||||
intel_size=$(du -sh "$FIRMWARE_DIR/intel" 2>/dev/null | cut -f1 || echo "0")
|
||||
echo " Intel ethernet firmware: $intel_size"
|
||||
fi
|
||||
|
||||
# Realtek Ethernet
|
||||
if [ -d lib/firmware/rtl_nic ]; then
|
||||
mkdir -p "$FIRMWARE_DIR/rtl_nic"
|
||||
# r8169 driver
|
||||
cp -r lib/firmware/rtl_nic/* "$FIRMWARE_DIR/rtl_nic/" 2>/dev/null || true
|
||||
echo " Realtek ethernet firmware: $(du -sh $FIRMWARE_DIR/rtl_nic 2>/dev/null | cut -f1)"
|
||||
cp lib/firmware/rtl_nic/* "$FIRMWARE_DIR/rtl_nic/" 2>/dev/null || true
|
||||
realtek_size=$(du -sh "$FIRMWARE_DIR/rtl_nic" 2>/dev/null | cut -f1 || echo "0")
|
||||
echo " Realtek ethernet firmware: $realtek_size"
|
||||
fi
|
||||
|
||||
# Broadcom Ethernet
|
||||
# Broadcom Ethernet (bnx2, tigon)
|
||||
if [ -d lib/firmware/bnx2 ]; then
|
||||
mkdir -p "$FIRMWARE_DIR/bnx2"
|
||||
cp -r lib/firmware/bnx2/* "$FIRMWARE_DIR/bnx2/" 2>/dev/null || true
|
||||
cp lib/firmware/bnx2/* "$FIRMWARE_DIR/bnx2/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d lib/firmware/tigon ]; then
|
||||
mkdir -p "$FIRMWARE_DIR/tigon"
|
||||
cp -r lib/firmware/tigon/* "$FIRMWARE_DIR/tigon/" 2>/dev/null || true
|
||||
cp lib/firmware/tigon/* "$FIRMWARE_DIR/tigon/" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# Broadcom tg3 firmware
|
||||
if [ -d lib/firmware ]; then
|
||||
find lib/firmware -name "tigon3*" -exec cp {} "$FIRMWARE_DIR/" \; 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# Essential system firmware
|
||||
if [ -d lib/firmware/regulatory.db ]; then
|
||||
if [ -f lib/firmware/regulatory.db ]; then
|
||||
cp lib/firmware/regulatory.db* "$FIRMWARE_DIR/" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
@@ -59,7 +73,8 @@ rm -rf /tmp/lib /tmp/linux-firmware-*
|
||||
# Show firmware size
|
||||
if [ -d "$FIRMWARE_DIR" ]; then
|
||||
total_size=$(du -sh "$FIRMWARE_DIR" 2>/dev/null | cut -f1)
|
||||
echo "[+] Essential firmware installed: $total_size (vs 600MB full package)"
|
||||
file_count=$(find "$FIRMWARE_DIR" -type f | wc -l)
|
||||
echo "[+] Essential firmware installed: $total_size ($file_count files vs 600MB full package)"
|
||||
else
|
||||
echo "[-] Warning: No firmware installed"
|
||||
fi
|
||||
@@ -69,6 +84,7 @@ echo " Installing essential ethernet kernel modules..."
|
||||
KERNEL_VERSION=$(cat /build/configs/kernel-version)
|
||||
MODULES_DIR="$INITRAMFS_ROOT/lib/modules/${KERNEL_VERSION}-Zero-OS"
|
||||
mkdir -p "$MODULES_DIR/kernel/drivers/net/ethernet"
|
||||
mkdir -p "$MODULES_DIR/kernel/drivers/net"
|
||||
|
||||
# Copy essential ethernet driver modules from the built kernel
|
||||
KERNEL_BUILD_DIR="/build/kernel/linux-${KERNEL_VERSION}"
|
||||
@@ -83,26 +99,58 @@ if [ -d "$KERNEL_BUILD_DIR" ]; then
|
||||
find "$KERNEL_BUILD_DIR" -name "i40e.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/ethernet/" \; 2>/dev/null || true
|
||||
find "$KERNEL_BUILD_DIR" -name "ice.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/ethernet/" \; 2>/dev/null || true
|
||||
|
||||
# Realtek drivers (r8169, 8139too)
|
||||
# Realtek drivers (r8169, 8139too, 8139cp)
|
||||
find "$KERNEL_BUILD_DIR" -name "r8169.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/ethernet/" \; 2>/dev/null || true
|
||||
find "$KERNEL_BUILD_DIR" -name "8139too.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/ethernet/" \; 2>/dev/null || true
|
||||
find "$KERNEL_BUILD_DIR" -name "8139cp.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/ethernet/" \; 2>/dev/null || true
|
||||
|
||||
# Broadcom drivers (bnx2, tg3, b44)
|
||||
# Broadcom drivers (bnx2, bnx2x, tg3, b44, b43, b43legacy)
|
||||
find "$KERNEL_BUILD_DIR" -name "bnx2.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/ethernet/" \; 2>/dev/null || true
|
||||
find "$KERNEL_BUILD_DIR" -name "bnx2x.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/ethernet/" \; 2>/dev/null || true
|
||||
find "$KERNEL_BUILD_DIR" -name "tg3.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/ethernet/" \; 2>/dev/null || true
|
||||
find "$KERNEL_BUILD_DIR" -name "b44.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/ethernet/" \; 2>/dev/null || true
|
||||
|
||||
# Common dependencies (mii, mdio)
|
||||
# Atheros drivers (atl1, atl1e, atl1c, alx)
|
||||
find "$KERNEL_BUILD_DIR" -name "atl1.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/ethernet/" \; 2>/dev/null || true
|
||||
find "$KERNEL_BUILD_DIR" -name "atl1e.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/ethernet/" \; 2>/dev/null || true
|
||||
find "$KERNEL_BUILD_DIR" -name "atl1c.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/ethernet/" \; 2>/dev/null || true
|
||||
find "$KERNEL_BUILD_DIR" -name "alx.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/ethernet/" \; 2>/dev/null || true
|
||||
|
||||
# VirtIO network driver
|
||||
find "$KERNEL_BUILD_DIR" -name "virtio_net.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/" \; 2>/dev/null || true
|
||||
find "$KERNEL_BUILD_DIR" -name "virtio.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/" \; 2>/dev/null || true
|
||||
find "$KERNEL_BUILD_DIR" -name "virtio_ring.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/" \; 2>/dev/null || true
|
||||
find "$KERNEL_BUILD_DIR" -name "virtio_pci.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/" \; 2>/dev/null || true
|
||||
|
||||
# Common dependencies (mii, mdio, libphy)
|
||||
find "$KERNEL_BUILD_DIR" -name "mii.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/" \; 2>/dev/null || true
|
||||
find "$KERNEL_BUILD_DIR" -name "mdio.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/" \; 2>/dev/null || true
|
||||
find "$KERNEL_BUILD_DIR" -name "libphy.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/" \; 2>/dev/null || true
|
||||
|
||||
# Create modules.dep for module loading
|
||||
# Create modules directories
|
||||
mkdir -p "$MODULES_DIR/kernel/drivers"
|
||||
|
||||
# Create modules.dep and modules.alias for module loading
|
||||
echo " Creating module dependency files..."
|
||||
if command -v depmod >/dev/null 2>&1; then
|
||||
depmod -b "$INITRAMFS_ROOT" "${KERNEL_VERSION}-Zero-OS" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# Create a simple modules.dep file if depmod is not available
|
||||
if [ ! -f "$MODULES_DIR/modules.dep" ]; then
|
||||
touch "$MODULES_DIR/modules.dep"
|
||||
touch "$MODULES_DIR/modules.alias"
|
||||
touch "$MODULES_DIR/modules.symbols"
|
||||
fi
|
||||
|
||||
module_count=$(find "$MODULES_DIR" -name "*.ko" | wc -l)
|
||||
echo " Installed $module_count ethernet driver modules"
|
||||
|
||||
# List installed modules for debugging
|
||||
if [ $module_count -gt 0 ]; then
|
||||
echo " Modules installed:"
|
||||
find "$MODULES_DIR" -name "*.ko" -exec basename {} \; | sort | sed 's/^/ /'
|
||||
fi
|
||||
else
|
||||
echo " Warning: Kernel build directory not found, modules may not be available"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user