Initial commit: Alpine Zero-OS initramfs build system with cleaned Docker configuration
This commit is contained in:
115
scripts/install-firmware-minimal.sh
Executable file
115
scripts/install-firmware-minimal.sh
Executable file
@@ -0,0 +1,115 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user