61 lines
1.3 KiB
Bash
61 lines
1.3 KiB
Bash
#!/usr/bin/env bash
|
|
set -e
|
|
zig build
|
|
|
|
IMG=zig-out/disk.img
|
|
SIZE=256M
|
|
MNT=/tmp/$(tr -dc 'A-Za-z0-9' </dev/urandom | head -c 16)
|
|
LIMINE_DIR=$HOME/Limine
|
|
KERNEL=zig-out/yukiImage
|
|
|
|
echo "[*] Creating disk image..."
|
|
rm -f "$IMG"
|
|
truncate -s "$SIZE" "$IMG"
|
|
|
|
echo "[*] Creating GPT..."
|
|
sgdisk -o "$IMG"
|
|
|
|
echo "[*] Creating EFI System Partition..."
|
|
sgdisk -n 1:2048:0 -t 1:ef00 -c 1:"EFI System Partition" "$IMG"
|
|
partprobe
|
|
echo "[*] Attaching loop device..."
|
|
LOOP=$(sudo losetup --find --partscan --show "$IMG")
|
|
sudo udevadm settle
|
|
EFI_PART="${LOOP}p1"
|
|
|
|
echo "[*] Formatting FAT32 ESP..."
|
|
sudo mkfs.fat -F32 "$EFI_PART"
|
|
|
|
echo "[*] Mounting..."
|
|
mkdir -p "$MNT"
|
|
sudo mount "$EFI_PART" "$MNT"
|
|
|
|
echo "[*] Creating directory structure..."
|
|
sudo mkdir -p "$MNT/EFI/BOOT"
|
|
sudo mkdir -p "$MNT/boot"
|
|
|
|
echo "[*] Installing Limine UEFI..."
|
|
sudo cp "$LIMINE_DIR/BOOTX64.EFI" "$MNT/EFI/BOOT/BOOTX64.EFI"
|
|
echo "[*] Copying kernel..."
|
|
sudo cp "$KERNEL" "$MNT/boot/yukiImage"
|
|
|
|
echo "[*] Writing limine.conf..."
|
|
sudo tee "$MNT/boot/limine.conf" > /dev/null << 'EOF'
|
|
timeout: 1
|
|
|
|
/Yuki OS
|
|
protocol: multiboot2
|
|
path: boot():/boot/yukiImage
|
|
cmdline: earlyprintk=serial,ttyS0,115200
|
|
EOF
|
|
|
|
echo "[*] Syncing..."
|
|
sync
|
|
|
|
echo "[*] Unmounting..."
|
|
sudo umount "$MNT"
|
|
sudo losetup -d "$LOOP"
|
|
sudo chown $USER:$USER "$IMG"
|
|
rmdir "$MNT"
|
|
echo "[+] Done: $IMG created successfully"
|