3.2 KiB
3.2 KiB
Minimal Embedded Initramfs Design
🎯 Requirements: Ultra-Minimal Embedded CPIO
- Size Target: 50-100MB (not 700MB!)
- Network drivers + essential firmware only
- eudev for module loading
- btrfs and vfat filesystem support
- Embedded in kernel for fastest boot
📦 Minimal Package List
Core System (Essential Only)
alpine-baselayout # Basic filesystem structure
busybox # Essential utilities
musl # C library
Module Loading & Hardware Detection
eudev # Hardware detection and module loading
kmod # Module management
Filesystem Support (Minimal)
btrfs-progs # btrfs filesystem support
dosfstools # vfat filesystem support
Network Essentials (Minimal)
# NO full linux-firmware (600MB!)
# Only essential network drivers via selective firmware
🗂️ Firmware Strategy: Selective Loading
Instead of 600MB linux-firmware package:
Essential Network Firmware Only
intel/ # Intel ethernet (e1000e, ixgbe, i40e)
realtek/ # Realtek ethernet (r8169)
broadcom/ # Broadcom ethernet (bnx2, tg3)
Load via Kernel Modules (Not Initramfs)
- WiFi firmware (loaded later from RFS)
- GPU firmware (not needed for initramfs)
- Sound firmware (not needed)
🎯 Size Optimization Strategy
What to EXCLUDE from Initramfs
- ❌ SSH tools (700KB) - load from RFS
- ❌ Debugging tools (gdb, strace, etc. - 50MB)
- ❌ Development tools (python, etc. - 50MB)
- ❌ Full linux-firmware (600MB) - selective only
- ❌ Compression tools (load from RFS)
- ❌ Network utilities (curl, wget, etc.)
What to INCLUDE in Initramfs
- ✅ Core Alpine base (~10MB)
- ✅ eudev + kmod (~5MB)
- ✅ Essential network drivers (~20MB firmware)
- ✅ btrfs-progs + dosfstools (~10MB)
- ✅ GitHub components (zinit, etc. ~5MB)
Target: ~50MB total
🔧 Implementation Changes Needed
1. Create Minimal Package List
Replace packages.txt with ultra-minimal version
2. Selective Firmware Installation
Custom script to install only essential network firmware:
/lib/firmware/intel//lib/firmware/realtek//lib/firmware/broadcom/
3. Build Process Changes
- Skip massive firmware installation
- Strip unnecessary files aggressively
- Optimize cpio compression
4. Two-Stage Loading
- Initramfs: Minimal (network + filesystems)
- RFS: Full tooling loaded after network
📊 Expected Size Breakdown
| Component | Size | Notes |
|---|---|---|
| Alpine base | ~10MB | Core system |
| eudev + kmod | ~5MB | Module loading |
| Filesystems | ~10MB | btrfs + vfat |
| Network firmware | ~20MB | Essential only |
| GitHub tools | ~5MB | zinit, core-x, etc |
| Total | ~50MB | 10x smaller! |
🚀 Benefits of Minimal Approach
- Fast boot: 50MB vs 700MB embedded
- Memory efficient: Less RAM usage
- Network focused: Only what's needed for connectivity
- Scalable: Load additional tools from RFS after network
This aligns with the original Zero-OS philosophy: minimal initramfs + network-loaded tools.