#!/bin/sh set -e INITRAMFS_ROOT="/build/initramfs" FIRMWARE_DIR="$INITRAMFS_ROOT/lib/firmware" echo "[+] Installing minimal network firmware (not full 600MB package)..." # Create firmware directory mkdir -p "$FIRMWARE_DIR" # Install full linux-firmware temporarily to extract essentials echo " Downloading linux-firmware package..." cd /tmp apk fetch linux-firmware tar -xf linux-firmware-*.apk # Extract only essential network firmware echo " Extracting 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)" 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)" fi # Broadcom Ethernet if [ -d lib/firmware/bnx2 ]; then mkdir -p "$FIRMWARE_DIR/bnx2" cp -r 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 fi # Essential system firmware if [ -d lib/firmware/regulatory.db ]; then cp lib/firmware/regulatory.db* "$FIRMWARE_DIR/" 2>/dev/null || true fi # Cleanup temporary files cd /build 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)" else echo "[-] Warning: No firmware installed" fi # Install essential ethernet kernel modules 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" # Copy essential ethernet driver modules from the built kernel KERNEL_BUILD_DIR="/build/kernel/linux-${KERNEL_VERSION}" if [ -d "$KERNEL_BUILD_DIR" ]; then echo " Copying ethernet drivers from kernel build..." # Intel drivers (e1000, e1000e, igb, ixgbe, i40e, ice) find "$KERNEL_BUILD_DIR" -name "e1000.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/ethernet/" \; 2>/dev/null || true find "$KERNEL_BUILD_DIR" -name "e1000e.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/ethernet/" \; 2>/dev/null || true find "$KERNEL_BUILD_DIR" -name "igb.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/ethernet/" \; 2>/dev/null || true find "$KERNEL_BUILD_DIR" -name "ixgbe.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/ethernet/" \; 2>/dev/null || true 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) 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 # Broadcom drivers (bnx2, tg3, b44) find "$KERNEL_BUILD_DIR" -name "bnx2.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) 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 # Create modules.dep for module loading if command -v depmod >/dev/null 2>&1; then depmod -b "$INITRAMFS_ROOT" "${KERNEL_VERSION}-Zero-OS" 2>/dev/null || true fi module_count=$(find "$MODULES_DIR" -name "*.ko" | wc -l) echo " Installed $module_count ethernet driver modules" else echo " Warning: Kernel build directory not found, modules may not be available" fi # Create essential kernel module directories that eudev expects mkdir -p "$INITRAMFS_ROOT/lib/modules" mkdir -p "$INITRAMFS_ROOT/sys/module" mkdir -p "$INITRAMFS_ROOT/dev" echo "[+] Minimal firmware and driver installation complete"