From 56c38136090b4cda04965a31f364566ba13e6b2b Mon Sep 17 00:00:00 2001 From: Jan De Landtsheer Date: Wed, 20 Aug 2025 09:35:18 +0200 Subject: [PATCH] Embellishments for module dependencies and initramfs bootup sequence - add recursive module dependencies based on porper tools (modinfo) - fix zinit boot sequences - /dev/shm mount for alpine-built haveged - mycelium - rfs copy fixes - better sequencing overall (god I miss 'before:' --- configs/init | 2 +- configs/modules-essential.list | 41 ++++ configs/zinit/init/shm.sh | 3 + configs/zinit/lo.yaml | 2 + configs/zinit/mycelium.yaml | 2 +- configs/zinit/ntp.yaml | 2 +- configs/zinit/shm.yaml | 3 +- scripts/install-firmware-minimal.sh | 128 ++++-------- scripts/resolve-module-dependencies.sh | 268 +++++++++++++++++++++++++ scripts/setup-initramfs.sh | 48 +---- 10 files changed, 368 insertions(+), 131 deletions(-) create mode 100644 configs/modules-essential.list mode change 100644 => 100755 configs/zinit/init/shm.sh create mode 100644 configs/zinit/lo.yaml create mode 100755 scripts/resolve-module-dependencies.sh diff --git a/configs/init b/configs/init index c400f53..141682f 100755 --- a/configs/init +++ b/configs/init @@ -100,4 +100,4 @@ fi echo "[+] switching root" echo " exec switch_root /mnt/root /sbin/zinit init" -exec switch_root /mnt/root /sbin/zinit -d init \ No newline at end of file +exec switch_root /mnt/root /sbin/zinit init \ No newline at end of file diff --git a/configs/modules-essential.list b/configs/modules-essential.list new file mode 100644 index 0000000..a9206b9 --- /dev/null +++ b/configs/modules-essential.list @@ -0,0 +1,41 @@ +# Essential kernel modules for Zero-OS Alpine initramfs +# This file contains a curated list of essential modules for network and storage functionality +# Comments are supported (lines starting with #) + +# Network drivers - Intel +e1000 +e1000e +igb +ixgbe +i40e +ice + +# Network drivers - Realtek +r8169 +8139too +8139cp + +# Network drivers - Broadcom +bnx2 +bnx2x +tg3 +b44 + +# Network drivers - Atheros +atl1 +atl1e +atl1c +alx + +# VirtIO drivers +virtio_net +virtio_scsi +virtio_blk + +# Tunnel and container support +tun +overlay + +# Storage subsystem (essential only) +scsi_mod +sd_mod \ No newline at end of file diff --git a/configs/zinit/init/shm.sh b/configs/zinit/init/shm.sh old mode 100644 new mode 100755 index e69de29..39ac1fd --- a/configs/zinit/init/shm.sh +++ b/configs/zinit/init/shm.sh @@ -0,0 +1,3 @@ +#!/bin/sh +mkdir /dev/shm +mount -t tmpfs shm /dev/shm \ No newline at end of file diff --git a/configs/zinit/lo.yaml b/configs/zinit/lo.yaml new file mode 100644 index 0000000..e9a0623 --- /dev/null +++ b/configs/zinit/lo.yaml @@ -0,0 +1,2 @@ +exec: ip l set lo up +oneshot: true \ No newline at end of file diff --git a/configs/zinit/mycelium.yaml b/configs/zinit/mycelium.yaml index 0ca36ee..e61252a 100644 --- a/configs/zinit/mycelium.yaml +++ b/configs/zinit/mycelium.yaml @@ -1,4 +1,4 @@ -exec: ip netns exec public /usr/bin/mycelium --key-file /tmp/mycelium_priv_key.bin +exec: /usr/bin/mycelium --key-file /tmp/mycelium_priv_key.bin --tun-name my0 --silent --peers tcp://188.40.132.242:9651 tcp://136.243.47.186:9651 tcp://185.69.166.7:9651 tcp://185.69.166.8:9651 tcp://65.21.231.58:9651 tcp://65.109.18.113:9651 tcp://209.159.146.190:9651 tcp://5.78.122.16:9651 tcp://5.223.43.251:9651 tcp://142.93.217.194:9651 diff --git a/configs/zinit/ntp.yaml b/configs/zinit/ntp.yaml index dad7a3d..e7164e8 100644 --- a/configs/zinit/ntp.yaml +++ b/configs/zinit/ntp.yaml @@ -1,3 +1,3 @@ exec: sh /etc/zinit/init/ntpd.sh after: - - internet \ No newline at end of file + - network \ No newline at end of file diff --git a/configs/zinit/shm.yaml b/configs/zinit/shm.yaml index 6258b67..7919fea 100644 --- a/configs/zinit/shm.yaml +++ b/configs/zinit/shm.yaml @@ -1 +1,2 @@ -exec: /etc/zinit/shm.sh \ No newline at end of file +exec: /etc/zinit/init/shm.sh +oneshot: true \ No newline at end of file diff --git a/scripts/install-firmware-minimal.sh b/scripts/install-firmware-minimal.sh index 01b758f..82965e3 100755 --- a/scripts/install-firmware-minimal.sh +++ b/scripts/install-firmware-minimal.sh @@ -79,98 +79,56 @@ else echo "[-] Warning: No firmware installed" fi -# Install essential ethernet kernel modules -echo " Installing essential ethernet kernel modules..." +# 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" -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}" + if [ -d "$KERNEL_BUILD_DIR" ]; then - echo " Copying ethernet drivers from kernel build..." + echo " Using modinfo-based dependency resolver..." - # 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, 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, 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 - - # 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 - - # SCSI subsystem dependencies (for virtio_scsi) - mkdir -p "$MODULES_DIR/kernel/drivers/scsi" - find "$KERNEL_BUILD_DIR" -name "scsi_mod.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/scsi/" \; 2>/dev/null || true - find "$KERNEL_BUILD_DIR" -name "sd_mod.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/scsi/" \; 2>/dev/null || true - - # PTP subsystem dependencies (for e1000e and other ethernet drivers) - mkdir -p "$MODULES_DIR/kernel/drivers/ptp" - mkdir -p "$MODULES_DIR/kernel/drivers/pps" - find "$KERNEL_BUILD_DIR" -name "ptp.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/ptp/" \; 2>/dev/null || true - find "$KERNEL_BUILD_DIR" -name "pps_core.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/pps/" \; 2>/dev/null || true - - # Filesystem drivers (overlay for container support) - find "$KERNEL_BUILD_DIR" -name "overlay.ko" -exec cp {} "$MODULES_DIR/kernel/fs/" \; 2>/dev/null || true - - # Tunnel drivers (tun for Mycelium networking) - find "$KERNEL_BUILD_DIR" -name "tun.ko" -exec cp {} "$MODULES_DIR/kernel/drivers/net/" \; 2>/dev/null || true - - # Create modules directories - mkdir -p "$MODULES_DIR/kernel/drivers" - mkdir -p "$MODULES_DIR/kernel/fs" - - # 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/^/ /' + # Use the automatic dependency resolver with essential modules list + 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 + + echo " ✓ Automatic module dependency resolution completed successfully" + + # Count installed modules + module_count=$(find "$MODULES_DIR" -name "*.ko" 2>/dev/null | wc -l) + echo " Installed $module_count kernel modules with complete dependency chains" + + # 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 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 " Warning: Automatic dependency resolution failed, falling back to manual installation" + # Fallback to minimal manual installation + mkdir -p "$MODULES_DIR/kernel/drivers/net" + + # Install only the most critical modules manually + 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 + + module_count=$(find "$MODULES_DIR" -name "*.ko" 2>/dev/null | wc -l) + echo " Fallback: Installed $module_count essential modules" fi else - echo " Warning: Kernel build directory not found, modules may not be available" + echo " Warning: Kernel build directory not found at $KERNEL_BUILD_DIR" fi # Create essential kernel module directories that eudev expects diff --git a/scripts/resolve-module-dependencies.sh b/scripts/resolve-module-dependencies.sh new file mode 100755 index 0000000..cf5127a --- /dev/null +++ b/scripts/resolve-module-dependencies.sh @@ -0,0 +1,268 @@ +#!/bin/bash +# resolve-module-dependencies.sh - Automatically resolve kernel module dependencies using modinfo +# This script builds a complete dependency tree for specified kernel modules + +set -e + +# Configuration +KERNEL_BUILD_DIR="" +MODULES_DIR="" +KERNEL_VERSION="" +VERBOSE=${VERBOSE:-0} + +# Global arrays for tracking +declare -A RESOLVED_MODULES=() # Track resolved modules to avoid duplicates +declare -A PROCESSING_MODULES=() # Track modules being processed to detect cycles +declare -a DEPENDENCY_ORDER=() # Final ordered list of modules + +usage() { + echo "Usage: $0 [OPTIONS] MODULE [MODULE...]" + echo "" + echo "Resolve kernel module dependencies using modinfo and copy to initramfs" + echo "" + echo "Options:" + echo " -k DIR Kernel build directory (e.g., /build/kernel/linux-6.12.41)" + echo " -m DIR Target modules directory (e.g., /build/initramfs/lib/modules/6.12.41-Zero-OS)" + echo " -v VER Kernel version (e.g., 6.12.41-Zero-OS)" + echo " -V Verbose output" + echo " -h Show this help" + echo "" + echo "Examples:" + echo " $0 -k /build/kernel/linux-6.12.41 -m /build/initramfs/lib/modules/6.12.41-Zero-OS -v 6.12.41-Zero-OS tun e1000e" + echo " $0 -k /build/kernel/linux-6.12.41 -m /build/initramfs/lib/modules/6.12.41-Zero-OS -v 6.12.41-Zero-OS mycelium-modules.list" +} + +log() { + if [ "$VERBOSE" -eq 1 ]; then + echo "[INFO] $*" >&2 + fi +} + +warn() { + echo "[WARN] $*" >&2 +} + +error() { + echo "[ERROR] $*" >&2 + exit 1 +} + +# Find a kernel module file in the build directory +find_module() { + local module_name="$1" + + # Try with .ko extension + local ko_file=$(find "$KERNEL_BUILD_DIR" -name "${module_name}.ko" -type f 2>/dev/null | head -1) + if [ -n "$ko_file" ]; then + echo "$ko_file" + return 0 + fi + + # Try without extension (in case it was passed with .ko) + local base_name="${module_name%.ko}" + ko_file=$(find "$KERNEL_BUILD_DIR" -name "${base_name}.ko" -type f 2>/dev/null | head -1) + if [ -n "$ko_file" ]; then + echo "$ko_file" + return 0 + fi + + return 1 +} + +# Get dependencies for a module using modinfo +get_module_dependencies() { + local module_file="$1" + local module_name=$(basename "$module_file" .ko) + + if [ ! -f "$module_file" ]; then + warn "Module file not found: $module_file" + return 1 + fi + + # Use modinfo to get dependencies + local deps=$(modinfo -F depends "$module_file" 2>/dev/null | tr ',' ' ') + + if [ -n "$deps" ]; then + log "Dependencies for $module_name: $deps" + echo "$deps" + else + log "No dependencies for $module_name" + fi +} + +# Recursively resolve module dependencies +resolve_dependencies() { + local module_name="$1" + local depth="$2" + local indent="" + + # Create indentation for visual tree + for i in $(seq 1 $depth); do + indent=" $indent" + done + + log "${indent}Resolving: $module_name (depth: $depth)" + + # Check if we're already processing this module (circular dependency) + if [ "${PROCESSING_MODULES[$module_name]}" = "1" ]; then + warn "${indent}Circular dependency detected for: $module_name" + return 0 + fi + + # Check if already resolved + if [ "${RESOLVED_MODULES[$module_name]}" = "1" ]; then + log "${indent}Already resolved: $module_name" + return 0 + fi + + # Mark as being processed + PROCESSING_MODULES[$module_name]=1 + + # Find the module file + local module_file=$(find_module "$module_name") + if [ -z "$module_file" ]; then + warn "${indent}Module not found: $module_name" + unset PROCESSING_MODULES[$module_name] + return 1 + fi + + # Get dependencies + local deps=$(get_module_dependencies "$module_file") + + # Recursively resolve dependencies first + for dep in $deps; do + if [ -n "$dep" ]; then + resolve_dependencies "$dep" $((depth + 1)) + fi + done + + # Mark as resolved and add to ordered list + RESOLVED_MODULES[$module_name]=1 + DEPENDENCY_ORDER+=("$module_name") + log "${indent}Resolved: $module_name" + + # Remove from processing list + unset PROCESSING_MODULES[$module_name] +} + +# Copy module to target directory +copy_module() { + local module_name="$1" + local module_file=$(find_module "$module_name") + + if [ -z "$module_file" ]; then + warn "Cannot copy module, file not found: $module_name" + return 1 + fi + + # Determine target subdirectory based on module path + local rel_path=$(echo "$module_file" | sed "s|^$KERNEL_BUILD_DIR/||") + local target_dir="$MODULES_DIR/$(dirname "$rel_path")" + local target_file="$target_dir/$(basename "$module_file")" + + # Create target directory + mkdir -p "$target_dir" + + # Copy module + cp "$module_file" "$target_file" + log "Copied: $module_name -> $target_file" +} + +# Parse command line arguments +while getopts "k:m:v:Vh" opt; do + case $opt in + k) KERNEL_BUILD_DIR="$OPTARG" ;; + m) MODULES_DIR="$OPTARG" ;; + v) KERNEL_VERSION="$OPTARG" ;; + V) VERBOSE=1 ;; + h) usage; exit 0 ;; + *) usage; exit 1 ;; + esac +done + +shift $((OPTIND-1)) + +# Validate required parameters +if [ -z "$KERNEL_BUILD_DIR" ] || [ -z "$MODULES_DIR" ] || [ -z "$KERNEL_VERSION" ]; then + error "Missing required parameters. Use -h for help." +fi + +if [ ! -d "$KERNEL_BUILD_DIR" ]; then + error "Kernel build directory not found: $KERNEL_BUILD_DIR" +fi + +if [ $# -eq 0 ]; then + error "No modules specified. Use -h for help." +fi + +# Parse module list (can be individual modules or a file containing module names) +REQUIRED_MODULES=() +for arg in "$@"; do + if [ -f "$arg" ]; then + # Read modules from file + log "Reading modules from file: $arg" + while IFS= read -r line; do + # Skip empty lines and comments + line=$(echo "$line" | sed 's/#.*//' | xargs) + if [ -n "$line" ]; then + REQUIRED_MODULES+=("$line") + fi + done < "$arg" + else + # Individual module name + REQUIRED_MODULES+=("$arg") + fi +done + +if [ ${#REQUIRED_MODULES[@]} -eq 0 ]; then + error "No valid modules found to process" +fi + +log "Processing ${#REQUIRED_MODULES[@]} required modules: ${REQUIRED_MODULES[*]}" + +# Resolve dependencies for all required modules +echo "Resolving dependencies for: ${REQUIRED_MODULES[*]}" +for module in "${REQUIRED_MODULES[@]}"; do + echo "Processing: $module" + resolve_dependencies "$module" 0 +done + +# Report results +echo "" +echo "Dependency resolution complete!" +echo "Total modules required: ${#DEPENDENCY_ORDER[@]}" +echo "" +echo "Dependency order:" +for i in "${!DEPENDENCY_ORDER[@]}"; do + printf "%3d. %s\n" $((i+1)) "${DEPENDENCY_ORDER[$i]}" +done + +# Copy all modules +echo "" +echo "Copying modules to: $MODULES_DIR" +mkdir -p "$MODULES_DIR" + +COPIED_COUNT=0 +FAILED_COUNT=0 + +for module in "${DEPENDENCY_ORDER[@]}"; do + if copy_module "$module"; then + ((COPIED_COUNT++)) + else + ((FAILED_COUNT++)) + fi +done + +# Summary +echo "" +echo "Module installation summary:" +echo " Successfully copied: $COPIED_COUNT modules" +echo " Failed to copy: $FAILED_COUNT modules" +echo " Target directory: $MODULES_DIR" + +if [ $FAILED_COUNT -gt 0 ]; then + exit 1 +fi + +echo "" +echo "All modules installed successfully!" \ No newline at end of file diff --git a/scripts/setup-initramfs.sh b/scripts/setup-initramfs.sh index cce8078..1ed2462 100755 --- a/scripts/setup-initramfs.sh +++ b/scripts/setup-initramfs.sh @@ -129,47 +129,20 @@ if [ "$BINARIES_FOUND" = "false" ]; then echo "[DEBUG] Make sure to run compile-components.sh before setup-initramfs.sh" fi -# Install kernel modules for network interfaces -echo " Installing essential network kernel modules..." +# Kernel modules are now installed by install-firmware-minimal.sh using automatic dependency resolution +echo " Kernel modules installed by firmware installation script with automatic dependency resolution" + +# Copy essential kernel module metadata files from kernel build if they exist 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" -mkdir -p "$MODULES_DIR/kernel/drivers" - KERNEL_BUILD_DIR="/build/kernel/linux-${KERNEL_VERSION}" -if [ -d "$KERNEL_BUILD_DIR" ]; then - echo " Copying essential ethernet drivers from kernel build..." - - # Copy essential network driver modules and their dependencies - find "$KERNEL_BUILD_DIR" -name "*.ko" | grep -E "(e1000|r8169|bnx2|tg3|virtio|igb|ixgbe|i40e|ice|atl1|alx|8139|b44|mii|mdio|libphy|net_failover|failover|tun|ptp|pps|scsi|overlay)" | while read ko; do - if [ -f "$ko" ]; then - cp "$ko" "$MODULES_DIR/kernel/drivers/net/ethernet/" 2>/dev/null || \ - cp "$ko" "$MODULES_DIR/kernel/drivers/net/" 2>/dev/null || \ - cp "$ko" "$MODULES_DIR/kernel/drivers/" 2>/dev/null || \ - cp "$ko" "$MODULES_DIR/kernel/net/" 2>/dev/null - fi - done - - # Also copy any net_failover modules from net/ directory - find "$KERNEL_BUILD_DIR" -path "*/net/*" -name "*failover*.ko" | while read ko; do - if [ -f "$ko" ]; then - mkdir -p "$MODULES_DIR/kernel/net/" - cp "$ko" "$MODULES_DIR/kernel/net/" - fi - done - - # Count actual installed modules - actual_modules=$(find "$MODULES_DIR" -name "*.ko" 2>/dev/null | wc -l) - echo " Installed $actual_modules network driver modules" - - # Copy essential kernel module metadata files from kernel build + +if [ -d "$KERNEL_BUILD_DIR" ] && [ -d "$MODULES_DIR" ]; then echo " Copying kernel module metadata files..." if [ -f "$KERNEL_BUILD_DIR/modules.order" ]; then cp "$KERNEL_BUILD_DIR/modules.order" "$MODULES_DIR/" echo " ✓ modules.order copied" else - echo " Warning: modules.order not found in kernel build" touch "$MODULES_DIR/modules.order" fi @@ -177,7 +150,6 @@ if [ -d "$KERNEL_BUILD_DIR" ]; then cp "$KERNEL_BUILD_DIR/modules.builtin" "$MODULES_DIR/" echo " ✓ modules.builtin copied" else - echo " Warning: modules.builtin not found in kernel build" touch "$MODULES_DIR/modules.builtin" fi @@ -185,18 +157,10 @@ if [ -d "$KERNEL_BUILD_DIR" ]; then cp "$KERNEL_BUILD_DIR/modules.builtin.modinfo" "$MODULES_DIR/" echo " ✓ modules.builtin.modinfo copied" else - echo " Warning: modules.builtin.modinfo not found in kernel build" touch "$MODULES_DIR/modules.builtin.modinfo" fi - # Create basic module dependency files (these will be updated by depmod) - touch "$MODULES_DIR/modules.dep" - touch "$MODULES_DIR/modules.alias" - touch "$MODULES_DIR/modules.symbols" - echo " Module metadata files installed" -else - echo " Warning: Kernel build directory not found at $KERNEL_BUILD_DIR" fi # Copy other system configurations