Files
YukiOS/tools/build_img.sh

57 lines
1.2 KiB
Bash

#!/usr/bin/env bash
set -e
IMG=disk.img
SIZE=256M
MNT=/tmp/$(tr -dc 'A-Za-z0-9' </dev/urandom | head -c 16)
LIMINE_DIR=$HOME/Limine
KERNEL=./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: efi
path: boot():/boot/yukiImage
EOF
echo "[*] Syncing..."
sync
echo "[*] Unmounting..."
sudo umount "$MNT"
sudo losetup -d "$LOOP"
echo "[+] Done: $IMG created successfully"