Initial commit: Alpine Zero-OS initramfs build system with cleaned Docker configuration
This commit is contained in:
111
docs/MINIMAL-DESIGN.md
Normal file
111
docs/MINIMAL-DESIGN.md
Normal file
@@ -0,0 +1,111 @@
|
||||
# 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
|
||||
1. **Initramfs**: Minimal (network + filesystems)
|
||||
2. **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.
|
||||
Reference in New Issue
Block a user