Files
zosbuilder/docs/MINIMAL-DESIGN.md

111 lines
3.2 KiB
Markdown

# 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.