feat: Create minimal Zero-OS initramfs with console support

- Fixed build system to clone source repositories instead of downloading binaries
- Enhanced scripts/fetch-github.sh with proper git repo cloning and branch handling
- Updated scripts/compile-components.sh for RFS compilation with build-binary feature
- Added minimal firmware installation for essential network drivers (73 modules)
- Created comprehensive zinit configuration set (15 config files including getty)
- Added util-linux package for getty/agetty console support
- Optimized package selection for minimal 27MB initramfs footprint
- Successfully builds bootable vmlinuz.efi with embedded initramfs
- Confirmed working: VM boot, console login, network drivers, zinit init system

Components:
- initramfs.cpio.xz: 27MB compressed minimal Zero-OS image
- vmlinuz.efi: 35MB bootable kernel with embedded initramfs
- Complete Zero-OS toolchain: zinit, rfs, mycelium compiled from source
This commit is contained in:
2025-08-16 23:25:59 +02:00
parent 446eb02fb3
commit bf62e887e8
109 changed files with 7645 additions and 1945 deletions

View File

@@ -10,6 +10,9 @@ musl
eudev
kmod
# Console/terminal management
util-linux
# Essential networking (for Zero-OS connectivity)
iproute2
ethtool
@@ -24,6 +27,9 @@ zlib
# Network utilities (minimal)
dhcpcd
# Random number generation (for crypto/security)
haveged
# NO debugging tools, NO development tools, NO SSH, NO curl/wget
# NO python, NO redis, NO massive linux-firmware package
# These will be loaded from RFS after network connectivity

View File

@@ -0,0 +1,2 @@
exec: sh /etc/zinit/init/cgroup.sh
oneshot: true

View File

@@ -0,0 +1,2 @@
exec: /sbin/getty -L 9600 console
restart: always

2
configs/zinit/getty.yaml Normal file
View File

@@ -0,0 +1,2 @@
exec: /sbin/getty -L 115200 ttyS0 vt100
restart: always

View File

@@ -0,0 +1,2 @@
exec: haveged -w 1024 -d 32 -i 32 -v 1
oneshot: true

View File

@@ -0,0 +1,6 @@
#!/bin/bash
echo "start ash terminal"
while true; do
getty -l /bin/ash -n 19200 tty2
done

View File

@@ -0,0 +1,10 @@
set -x
mount -t tmpfs cgroup_root /sys/fs/cgroup
subsys="pids cpuset cpu cpuacct blkio memory devices freezer net_cls perf_event net_prio hugetlb"
for sys in $subsys; do
mkdir -p /sys/fs/cgroup/$sys
mount -t cgroup $sys -o $sys /sys/fs/cgroup/$sys/
done

View File

@@ -0,0 +1,10 @@
#!/bin/bash
modprobe fuse
modprobe btrfs
modprobe tun
modprobe br_netfilter
echo never > /sys/kernel/mm/transparent_hugepage/enabled
ulimit -n 524288

View File

@@ -0,0 +1,10 @@
#!/bin/sh
ntp_flags=$(grep -o 'ntp=.*' /proc/cmdline | sed 's/^ntp=//')
params=""
if [ -n "$ntp_flags" ]; then
params=$(echo "-p $ntp_flags" | sed s/,/' -p '/g)
fi
exec ntpd -n $params

View File

@@ -0,0 +1,4 @@
#!/bin/bash
echo "Enable ip forwarding"
echo 1 > /proc/sys/net/ipv4/ip_forward

View File

@@ -0,0 +1,15 @@
#!/bin/ash
if [ -f /etc/ssh/ssh_host_rsa_key ]; then
# ensure existing file permissions
chown root:root /etc/ssh/ssh_host_*
chmod 600 /etc/ssh/ssh_host_*
exit 0
fi
echo "Setting up sshd"
mkdir -p /run/sshd
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa
ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N '' -t dsa
ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -N '' -t ecdsa -b 521
ssh-keygen -f /etc/ssh/ssh_host_ed25519_key -N '' -t ed25519

View File

@@ -0,0 +1,4 @@
#!/bin/sh
udevadm trigger --action=add
udevadm settle

View File

@@ -0,0 +1,2 @@
exec: sh /etc/zinit/init/modprobe.sh
oneshot: true

3
configs/zinit/ntp.yaml Normal file
View File

@@ -0,0 +1,3 @@
exec: sh /etc/zinit/init/ntpd.sh
after:
- internet

View File

@@ -0,0 +1,2 @@
exec: sh /etc/zinit/init/routing.sh
oneshot: true

View File

@@ -0,0 +1,2 @@
exec: sh /etc/zinit/init/sshd-setup.sh
oneshot: true

3
configs/zinit/sshd.yaml Normal file
View File

@@ -0,0 +1,3 @@
exec: /usr/sbin/sshd -D -e
after:
- sshd-setup

View File

@@ -0,0 +1,4 @@
exec: sh /etc/zinit/init/udev.sh
oneshot: true
after:
- udevd

1
configs/zinit/udevd.yaml Normal file
View File

@@ -0,0 +1 @@
exec: udevd

View File

@@ -1,30 +0,0 @@
# Zero-OS Zinit Configuration
exec:
# Core Zero-OS Services
rfs:
exec: /usr/bin/rfs
after:
- mycelium
seektime:
exec: /usr/bin/seektime
core-x:
exec: /usr/bin/core-x
after:
- rfs
- mycelium
mycelium:
exec: /usr/bin/mycelium
# System Services
sshd:
exec: /usr/sbin/sshd -D
after:
- mycelium
# Network configuration
networking:
exec: /bin/sh -c "ip link set lo up"
oneshot: true