- initramfs.img, rootfs.img for AArch64 Linux guest - mkdisk.py for disk image creation - initramfs and rootfs directories
62 lines
1.7 KiB
Bash
62 lines
1.7 KiB
Bash
#!/bin/bash
|
|
# Build a minimal initramfs for UniversalisOS Linux guest.
|
|
# Cross-compiles init.c for AArch64 and creates a cpio archive.
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
OUTPUT_DIR="$SCRIPT_DIR/.."
|
|
INITRAMFS_DIR="$SCRIPT_DIR/rootfs"
|
|
|
|
# Cross-compiler
|
|
CROSS=aarch64-linux-gnu
|
|
CC=${CROSS}-gcc
|
|
OBJCOPY=${CROSS}-objcopy
|
|
STRIP=${CROSS}-strip
|
|
|
|
echo "=== Building minimal initramfs ==="
|
|
|
|
# Create rootfs directory structure
|
|
rm -rf "$INITRAMFS_DIR"
|
|
mkdir -p "$INITRAMFS_DIR"/{bin,dev,proc,sys,etc,sbin}
|
|
|
|
# Compile init.c as static binary
|
|
echo "Compiling init.c..."
|
|
${CC} -static -O2 -o "$INITRAMFS_DIR/init" "$SCRIPT_DIR/init.c"
|
|
${STRIP} "$INITRAMFS_DIR/init"
|
|
echo "init binary: $(file "$INITRAMFS_DIR/init")"
|
|
|
|
# Create a minimal /etc/init.d/rcS
|
|
cat > "$INITRAMFS_DIR/etc/init.d/rcS" << 'EOF'
|
|
#!/bin/sh
|
|
echo "Running rcS..."
|
|
mount -t proc proc /proc
|
|
mount -t sysfs sysfs /sys
|
|
mount -t tmpfs tmpfs /dev
|
|
exec /init
|
|
EOF
|
|
chmod +x "$INITRAMFS_DIR/etc/init.d/rcS"
|
|
|
|
# Create a minimal /etc/fstab
|
|
cat > "$INITRAMFS_DIR/etc/fstab" << 'EOF'
|
|
# <filesystem> <mount point> <type> <options> <dump> <pass>
|
|
proc /proc proc defaults 0 0
|
|
sysfs /sys sysfs defaults 0 0
|
|
tmpfs /dev tmpfs defaults 0 0
|
|
EOF
|
|
|
|
# Create cpio archive
|
|
echo "Creating cpio archive..."
|
|
cd "$INITRAMFS_DIR"
|
|
find . -print0 | cpio --null -o --format=newc > "$OUTPUT_DIR/initramfs.cpio"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
# Create gzip-compressed version
|
|
echo "Compressing..."
|
|
gzip -9 -f "$OUTPUT_DIR/initramfs.cpio"
|
|
mv "$OUTPUT_DIR/initramfs.cpio.gz" "$OUTPUT_DIR/initramfs.img"
|
|
|
|
echo "=== Initramfs built ==="
|
|
echo "Output: $OUTPUT_DIR/initramfs.img"
|
|
echo "Size: $(du -h "$OUTPUT_DIR/initramfs.img" | cut -f1)"
|
|
ls -la "$OUTPUT_DIR/initramfs.img"
|