#!/bin/bash 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 and extracting linux-firmware package..." cd /tmp if apk fetch linux-firmware 2>/dev/null; then firmware_file=$(ls linux-firmware-*.apk 2>/dev/null | head -1) if [ -f "$firmware_file" ]; then tar -xf "$firmware_file" echo " Firmware package extracted successfully" FIRMWARE_AVAILABLE=true else echo " Warning: Failed to extract linux-firmware package" FIRMWARE_AVAILABLE=false fi else echo " Warning: Failed to download linux-firmware package (network/repo issue)" FIRMWARE_AVAILABLE=false fi # Extract only essential network firmware if [ "$FIRMWARE_AVAILABLE" = "true" ]; then 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 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 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 (bnx2, tigon) if [ -d lib/firmware/bnx2 ]; then mkdir -p "$FIRMWARE_DIR/bnx2" cp lib/firmware/bnx2/* "$FIRMWARE_DIR/bnx2/" 2>/dev/null || true fi if [ -d lib/firmware/tigon ]; then mkdir -p "$FIRMWARE_DIR/tigon" 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 [ -f lib/firmware/regulatory.db ]; then cp lib/firmware/regulatory.db* "$FIRMWARE_DIR/" 2>/dev/null || true fi else echo " Skipping firmware installation due to download failure" 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) 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 # Install essential kernel modules using automatic dependency resolution echo " Installing essential kernel modules with automatic dependency resolution..." KERNEL_VERSION=$(cat /build/configs/kernel-version) MODULES_DIR="$INITRAMFS_ROOT/lib/modules/${KERNEL_VERSION}-Zero-OS" KERNEL_BUILD_DIR="/build/kernel/linux-${KERNEL_VERSION}" if [ -d "$KERNEL_BUILD_DIR" ]; then echo " Using modinfo-based dependency resolver..." # Use the automatic dependency resolver with essential modules list echo " Running automatic module dependency resolution..." if /build/scripts/resolve-module-dependencies.sh \ -k "$KERNEL_BUILD_DIR" \ -m "$MODULES_DIR" \ -v "${KERNEL_VERSION}-Zero-OS" \ /build/configs/modules-essential.list; then # Count installed modules to verify some success module_count=$(find "$MODULES_DIR" -name "*.ko" 2>/dev/null | wc -l) if [ "$module_count" -gt 0 ]; then echo " ✓ Automatic module dependency resolution completed successfully" echo " Installed $module_count kernel modules with complete dependency chains" else echo " ⚠ Module dependency resolution completed but no modules found" echo " This might indicate kernel build directory issues" fi # Create modules.dep and modules.alias for module loading echo " Creating module dependency files..." if command -v depmod >/dev/null 2>&1; then depmod -a -b "$INITRAMFS_ROOT" "${KERNEL_VERSION}-Zero-OS" 2>/dev/null || true fi # Create basic module files if depmod failed if [ ! -f "$MODULES_DIR/modules.dep" ]; then touch "$MODULES_DIR/modules.dep" touch "$MODULES_DIR/modules.alias" touch "$MODULES_DIR/modules.symbols" fi else echo " ⚠ Automatic dependency resolution failed, falling back to manual installation" # Fallback to minimal manual installation mkdir -p "$MODULES_DIR/kernel/drivers/net" mkdir -p "$MODULES_DIR/kernel/drivers/block" mkdir -p "$MODULES_DIR/kernel/net" # Install only the most critical modules manually if they exist for module in tun e1000e virtio_net overlay; do find "$KERNEL_BUILD_DIR" -name "${module}.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/" \; 2>/dev/null || true done # Install virtio block driver find "$KERNEL_BUILD_DIR" -name "virtio_blk.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/block/" \; 2>/dev/null || true module_count=$(find "$MODULES_DIR" -name "*.ko" 2>/dev/null | wc -l) echo " Fallback: Installed $module_count essential modules" # Create basic module dependency files for depmod compatibility echo " Creating basic module dependency files..." touch "$MODULES_DIR/modules.dep" touch "$MODULES_DIR/modules.alias" touch "$MODULES_DIR/modules.symbols" touch "$MODULES_DIR/modules.builtin" touch "$MODULES_DIR/modules.devname" fi else echo " Warning: Kernel build directory not found at $KERNEL_BUILD_DIR" # Still create the modules directory structure for depmod compatibility echo " Creating minimal modules directory structure..." mkdir -p "$MODULES_DIR" touch "$MODULES_DIR/modules.dep" touch "$MODULES_DIR/modules.alias" touch "$MODULES_DIR/modules.symbols" touch "$MODULES_DIR/modules.builtin" touch "$MODULES_DIR/modules.devname" 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"