2021-12-17 04:50:53 +00:00
|
|
|
#!/bin/sh
|
|
|
|
|
2022-08-27 06:14:42 +01:00
|
|
|
# Build OS using AUTO.ISO minimal auto-install as bootstrap to merge codebase, recompile system, attempt build limine UEFI hybrid ISO
|
2021-12-17 04:50:53 +00:00
|
|
|
|
2022-04-29 08:33:51 +01:00
|
|
|
# make sure we are in the correct directory
|
|
|
|
SCRIPT_DIR=$(realpath "$(dirname "$0")")
|
|
|
|
SCRIPT_NAME=$(basename "$0")
|
|
|
|
EXPECTED_DIR=$(realpath "$PWD")
|
|
|
|
|
|
|
|
if test "${EXPECTED_DIR}" != "${SCRIPT_DIR}"
|
|
|
|
then
|
2022-05-02 10:10:49 +01:00
|
|
|
( cd "$SCRIPT_DIR" || exit ; "./$SCRIPT_NAME" "$@" );
|
2022-04-29 08:33:51 +01:00
|
|
|
exit
|
|
|
|
fi
|
2021-12-17 04:50:53 +00:00
|
|
|
|
|
|
|
# Uncomment if you use doas instead of sudo
|
|
|
|
#alias sudo=doas
|
|
|
|
|
|
|
|
TMPDIR="/tmp/zealtmp"
|
2022-08-27 06:14:42 +01:00
|
|
|
TMPISODIR="$TMPDIR/iso"
|
2021-12-17 04:50:53 +00:00
|
|
|
TMPDISK="$TMPDIR/ZealOS.raw"
|
|
|
|
TMPMOUNT="$TMPDIR/mnt"
|
|
|
|
|
|
|
|
mount_tempdisk() {
|
|
|
|
sudo modprobe nbd
|
|
|
|
sudo qemu-nbd -c /dev/nbd0 -f raw $TMPDISK
|
|
|
|
sudo partprobe /dev/nbd0
|
|
|
|
sudo mount /dev/nbd0p1 $TMPMOUNT
|
|
|
|
}
|
|
|
|
|
|
|
|
umount_tempdisk() {
|
|
|
|
sync
|
|
|
|
sudo umount $TMPMOUNT
|
|
|
|
sudo qemu-nbd -d /dev/nbd0
|
|
|
|
}
|
|
|
|
|
|
|
|
[ ! -d $TMPMOUNT ] && mkdir -p $TMPMOUNT
|
2022-08-27 06:14:42 +01:00
|
|
|
[ ! -d $TMPISODIR ] && mkdir -p $TMPISODIR
|
2021-12-17 04:50:53 +00:00
|
|
|
|
2022-08-28 08:30:17 +01:00
|
|
|
set -e
|
2022-08-27 06:14:42 +01:00
|
|
|
echo "Building ZealBooter..."
|
2022-10-15 03:01:34 +01:00
|
|
|
( cd ../zealbooter && make distclean all )
|
2022-08-27 06:14:42 +01:00
|
|
|
set +e
|
|
|
|
|
|
|
|
echo "Making temp vdisk, running auto-install ..."
|
2021-12-17 04:50:53 +00:00
|
|
|
qemu-img create -f raw $TMPDISK 192M
|
2022-08-27 06:14:42 +01:00
|
|
|
qemu-system-x86_64 -machine q35,accel=kvm -drive format=raw,file=$TMPDISK -m 1G -rtc base=localtime -smp 4 -cdrom AUTO.ISO -device isa-debug-exit
|
|
|
|
|
|
|
|
echo "Copying src/Kernel/KStart16.ZC and src/Kernel/KernelA.HH into vdisk ..."
|
|
|
|
rm ../src/Home/Registry.ZC 2> /dev/null
|
|
|
|
rm ../src/Home/MakeHome.ZC 2> /dev/null
|
|
|
|
mount_tempdisk
|
|
|
|
sudo cp -rf ../src/Kernel/KStart16.ZC $TMPMOUNT/Kernel/
|
|
|
|
sudo cp -rf ../src/Kernel/KernelA.HH $TMPMOUNT/Kernel/
|
|
|
|
umount_tempdisk
|
|
|
|
|
|
|
|
echo "Rebuilding kernel headers ..."
|
|
|
|
qemu-system-x86_64 -machine q35,accel=kvm -drive format=raw,file=$TMPDISK -m 1G -rtc base=localtime -smp 4 -device isa-debug-exit
|
|
|
|
|
|
|
|
echo "Copying all kernel code into vdisk ..."
|
|
|
|
rm ../src/Home/Registry.ZC 2> /dev/null
|
|
|
|
rm ../src/Home/MakeHome.ZC 2> /dev/null
|
|
|
|
mount_tempdisk
|
|
|
|
sudo cp -rf ../src/Kernel/* $TMPMOUNT/Kernel/
|
|
|
|
umount_tempdisk
|
|
|
|
|
|
|
|
echo "Rebuilding kernel..."
|
|
|
|
qemu-system-x86_64 -machine q35,accel=kvm -drive format=raw,file=$TMPDISK -m 1G -rtc base=localtime -smp 4 -device isa-debug-exit
|
2021-12-17 04:50:53 +00:00
|
|
|
|
2022-08-27 06:14:42 +01:00
|
|
|
echo "Copying all src/ code into vdisk ..."
|
2021-12-17 04:50:53 +00:00
|
|
|
rm ../src/Home/Registry.ZC 2> /dev/null
|
|
|
|
rm ../src/Home/MakeHome.ZC 2> /dev/null
|
2022-08-27 06:14:42 +01:00
|
|
|
rm ../src/Boot/Kernel.ZXE 2> /dev/null
|
2021-12-17 04:50:53 +00:00
|
|
|
mount_tempdisk
|
|
|
|
sudo cp -r ../src/* $TMPMOUNT
|
2022-08-28 08:30:17 +01:00
|
|
|
umount_tempdisk
|
|
|
|
|
|
|
|
echo "Building Distro ISO ..."
|
|
|
|
qemu-system-x86_64 -machine q35,accel=kvm -drive format=raw,file=$TMPDISK -m 1G -rtc base=localtime -smp 4 -device isa-debug-exit
|
2022-08-27 06:14:42 +01:00
|
|
|
|
2022-09-13 09:31:27 +01:00
|
|
|
LIMINE_BINARY_BRANCH="v4.x-branch-binary"
|
|
|
|
|
2022-09-08 02:57:52 +01:00
|
|
|
if [ -d "limine" ]
|
|
|
|
then
|
|
|
|
cd limine
|
2022-09-13 09:31:27 +01:00
|
|
|
git remote set-branches origin $LIMINE_BINARY_BRANCH
|
|
|
|
git fetch
|
|
|
|
git remote set-head origin $LIMINE_BINARY_BRANCH
|
|
|
|
git switch $LIMINE_BINARY_BRANCH
|
2022-09-08 02:57:52 +01:00
|
|
|
git pull
|
|
|
|
rm limine-deploy
|
|
|
|
rm limine-version
|
2022-09-17 06:16:03 +01:00
|
|
|
|
2022-09-08 02:57:52 +01:00
|
|
|
cd ..
|
|
|
|
fi
|
2022-08-27 06:14:42 +01:00
|
|
|
if [ ! -d "limine" ]; then
|
2022-09-13 09:31:27 +01:00
|
|
|
git clone https://github.com/limine-bootloader/limine.git --branch=$LIMINE_BINARY_BRANCH --depth=1
|
2022-08-27 06:14:42 +01:00
|
|
|
fi
|
2022-09-08 02:57:52 +01:00
|
|
|
make -C limine
|
2022-08-27 06:14:42 +01:00
|
|
|
|
2022-09-17 07:51:44 +01:00
|
|
|
touch limine/Limine-HDD.HH
|
|
|
|
echo "/*\$WW,1\$" > limine/Limine-HDD.HH
|
|
|
|
cat limine/LICENSE.md >> limine/Limine-HDD.HH
|
|
|
|
echo "*/\$WW,0\$" >> limine/Limine-HDD.HH
|
|
|
|
cat limine/limine-hdd.h >> limine/Limine-HDD.HH
|
|
|
|
sed -i 's/const uint8_t/U8/g' limine/Limine-HDD.HH
|
2022-10-07 00:20:34 +01:00
|
|
|
sed -i "s/\[\]/\[$(grep -o "0x" ./limine/limine-hdd.h | wc -l)\]/g" limine/Limine-HDD.HH
|
2022-09-17 07:51:44 +01:00
|
|
|
|
2021-12-17 04:50:53 +00:00
|
|
|
mount_tempdisk
|
2022-08-27 06:14:42 +01:00
|
|
|
echo "Extracting MyDistro ISO from vdisk ..."
|
|
|
|
cp $TMPMOUNT/Tmp/MyDistro.ISO.C ./ZealOS-MyDistro.iso
|
2022-08-27 13:15:06 +01:00
|
|
|
sudo rm $TMPMOUNT/Tmp/MyDistro.ISO.C 2> /dev/null
|
2022-08-27 06:14:42 +01:00
|
|
|
echo "Setting up temp ISO directory contents for use with limine xorriso command ..."
|
|
|
|
sudo cp -rf $TMPMOUNT/* $TMPISODIR
|
2022-10-16 23:55:18 +01:00
|
|
|
sudo rm $TMPISODIR/Boot/OldMBR.BIN 2> /dev/null
|
|
|
|
sudo rm $TMPISODIR/Boot/BootMHD2.BIN 2> /dev/null
|
2022-08-28 08:30:17 +01:00
|
|
|
sudo mkdir -p $TMPISODIR/EFI/BOOT
|
2022-09-17 06:16:03 +01:00
|
|
|
sudo cp limine/Limine-HDD.HH $TMPISODIR/Boot/Limine-HDD.HH
|
2022-08-28 08:30:17 +01:00
|
|
|
sudo cp limine/BOOTX64.EFI $TMPISODIR/EFI/BOOT/BOOTX64.EFI
|
2022-09-13 04:07:09 +01:00
|
|
|
sudo cp limine/limine-cd-efi.bin $TMPISODIR/Boot/Limine-CD-EFI.BIN
|
|
|
|
sudo cp limine/limine-cd.bin $TMPISODIR/Boot/Limine-CD.BIN
|
|
|
|
sudo cp limine/limine.sys $TMPISODIR/Boot/Limine.SYS
|
2022-08-28 08:30:17 +01:00
|
|
|
sudo cp ../zealbooter/zealbooter.elf $TMPISODIR/Boot/ZealBooter.ELF
|
2022-10-17 00:57:46 +01:00
|
|
|
sudo cp ../zealbooter/Limine.CFG $TMPISODIR/Boot/Limine.CFG
|
2022-08-27 06:14:42 +01:00
|
|
|
echo "Copying DVDKernel.ZXE over ISO Boot/Kernel.ZXE ..."
|
|
|
|
sudo mv $TMPMOUNT/Tmp/DVDKernel.ZXE $TMPISODIR/Boot/Kernel.ZXE
|
2022-09-13 04:07:09 +01:00
|
|
|
sudo rm $TMPISODIR/Tmp/DVDKernel.ZXE 2> /dev/null
|
2021-12-17 04:50:53 +00:00
|
|
|
umount_tempdisk
|
|
|
|
|
2022-08-27 06:14:42 +01:00
|
|
|
sudo ls $TMPISODIR -al
|
2021-12-17 04:50:53 +00:00
|
|
|
|
2022-09-13 04:07:09 +01:00
|
|
|
xorriso -joliet "on" -rockridge "on" -as mkisofs -b Boot/Limine-CD.BIN \
|
2022-08-27 06:14:42 +01:00
|
|
|
-no-emul-boot -boot-load-size 4 -boot-info-table \
|
2022-09-13 04:07:09 +01:00
|
|
|
--efi-boot Boot/Limine-CD-EFI.BIN \
|
2022-08-27 06:14:42 +01:00
|
|
|
-efi-boot-part --efi-boot-image --protective-msdos-label \
|
|
|
|
$TMPISODIR -o ZealOS-UEFI-limine-dev.iso
|
|
|
|
|
|
|
|
./limine/limine-deploy ZealOS-UEFI-limine-dev.iso
|
|
|
|
|
2022-08-28 08:30:17 +01:00
|
|
|
if [ ! -d "ovmf" ]; then
|
|
|
|
echo "Downloading OVMF..."
|
|
|
|
mkdir ovmf
|
|
|
|
cd ovmf
|
|
|
|
curl -o OVMF-X64.zip https://efi.akeo.ie/OVMF/OVMF-X64.zip
|
|
|
|
7z x OVMF-X64.zip
|
|
|
|
cd ..
|
|
|
|
fi
|
|
|
|
|
2022-08-27 06:14:42 +01:00
|
|
|
echo "Testing limine-zealbooter-xorriso isohybrid boot in UEFI mode ..."
|
|
|
|
qemu-system-x86_64 -machine q35,accel=kvm -m 1G -rtc base=localtime -bios ovmf/OVMF.fd -smp 4 -cdrom ZealOS-UEFI-limine-dev.iso
|
|
|
|
echo "Testing limine-zealbooter-xorriso isohybrid boot in BIOS mode ..."
|
|
|
|
qemu-system-x86_64 -machine q35,accel=kvm -m 1G -rtc base=localtime -smp 4 -cdrom ZealOS-UEFI-limine-dev.iso
|
|
|
|
|
|
|
|
echo "Testing native ZealC MyDistro legacy ISO in BIOS mode ..."
|
|
|
|
qemu-system-x86_64 -machine q35,accel=kvm -m 1G -rtc base=localtime -smp 4 -cdrom ZealOS-MyDistro.iso
|
|
|
|
|
|
|
|
rm ./ZealOS-2*.iso 2> /dev/null # comment this line if you want lingering old Distro ISOs
|
|
|
|
mv ./ZealOS-MyDistro.iso ./ZealOS-$(date +%Y-%m-%d-%H_%M_%S).iso
|
|
|
|
|
|
|
|
echo "Deleting temp folder ..."
|
|
|
|
sudo rm -rf $TMPDIR
|
|
|
|
sudo rm -rf $TMPISODIR
|
|
|
|
echo "Finished."
|