Add build system ISO generation and QEMU improvements
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -10,22 +10,22 @@ all: $(BUILD)/harddrive.img
|
||||
live:
|
||||
-$(FUMOUNT) $(BUILD)/filesystem/ || true
|
||||
-$(FUMOUNT) /tmp/redbear_installer/ || true
|
||||
rm -f $(BUILD)/redbear-live.iso
|
||||
$(MAKE) $(BUILD)/redbear-live.iso
|
||||
rm -f $(LIVE_ISO) $(LIVE_IMG) $(LIVE_BOOTLOADER) $(LIVE_IPXE)
|
||||
$(MAKE) $(LIVE_ISO)
|
||||
|
||||
popsicle: $(BUILD)/redbear-live.iso
|
||||
popsicle-gtk $(BUILD)/redbear-live.iso
|
||||
popsicle: $(LIVE_ISO)
|
||||
popsicle-gtk $(LIVE_ISO)
|
||||
|
||||
image:
|
||||
-$(FUMOUNT) $(BUILD)/filesystem/ || true
|
||||
-$(FUMOUNT) /tmp/redbear_installer/ || true
|
||||
rm -f $(BUILD)/harddrive.img $(BUILD)/redbear-live.iso
|
||||
rm -f $(BUILD)/harddrive.img $(LIVE_ISO) $(LIVE_IMG) $(LIVE_BOOTLOADER) $(LIVE_IPXE)
|
||||
$(MAKE) all
|
||||
|
||||
rebuild:
|
||||
-$(FUMOUNT) $(BUILD)/filesystem/ || true
|
||||
-$(FUMOUNT) /tmp/redbear_installer/ || true
|
||||
rm -rf $(BUILD)/repo.tag $(BUILD)/harddrive.img $(BUILD)/redbear-live.iso
|
||||
rm -rf $(BUILD)/repo.tag $(BUILD)/harddrive.img $(LIVE_ISO) $(LIVE_IMG) $(LIVE_BOOTLOADER) $(LIVE_IPXE)
|
||||
$(MAKE) all
|
||||
|
||||
# To tell that it's not safe
|
||||
|
||||
@@ -166,6 +166,12 @@ else
|
||||
export GNU_TARGET=$(ARCH)-unknown-redox
|
||||
endif
|
||||
BUILD=build/$(ARCH)/$(CONFIG_NAME)
|
||||
LIVE_BUILD=build/$(ARCH)
|
||||
LIVE_IMAGE_NAME=$(CONFIG_NAME)
|
||||
LIVE_ISO=$(LIVE_BUILD)/$(LIVE_IMAGE_NAME).iso
|
||||
LIVE_IMG=$(LIVE_BUILD)/$(LIVE_IMAGE_NAME).img
|
||||
LIVE_BOOTLOADER=$(LIVE_BUILD)/$(LIVE_IMAGE_NAME)-bootloader-live.efi
|
||||
LIVE_IPXE=$(LIVE_BUILD)/$(LIVE_IMAGE_NAME).ipxe
|
||||
MOUNT_DIR=$(BUILD)/filesystem
|
||||
FSTOOLS=build/fstools
|
||||
INSTALLER=$(FSTOOLS)/bin/redox_installer
|
||||
|
||||
+47
-6
@@ -17,11 +17,11 @@ else
|
||||
mv $@.partial $@
|
||||
endif
|
||||
|
||||
$(BUILD)/redbear-live.iso: $(FSTOOLS) $(REPO_TAG) redbear.ipxe
|
||||
$(LIVE_IMG): $(FSTOOLS) $(REPO_TAG)
|
||||
ifeq ($(FSTOOLS_IN_PODMAN),1)
|
||||
$(PODMAN_RUN) make $@
|
||||
else
|
||||
mkdir -p $(BUILD)
|
||||
mkdir -p $(LIVE_BUILD)
|
||||
rm -rf $@ $@.partial
|
||||
-$(FUMOUNT) /tmp/redox_installer || true
|
||||
FILESYSTEM_SIZE=$(FILESYSTEM_SIZE) && \
|
||||
@@ -29,9 +29,50 @@ else
|
||||
FILESYSTEM_SIZE=$(shell $(INSTALLER) --filesystem-size -c $(FILESYSTEM_CONFIG)); \
|
||||
fi && \
|
||||
truncate -s "$$FILESYSTEM_SIZE"m $@.partial
|
||||
umask 002 && $(INSTALLER) $(INSTALLER_OPTS) -c $(FILESYSTEM_CONFIG) --write-bootloader="$(BUILD)/bootloader-live.efi" --live $@.partial
|
||||
umask 002 && $(INSTALLER) $(INSTALLER_OPTS) -c $(FILESYSTEM_CONFIG) --write-bootloader="$(LIVE_BOOTLOADER)" --live $@.partial
|
||||
mv $@.partial $@
|
||||
cp redbear.ipxe $(BUILD)/redbear.ipxe
|
||||
endif
|
||||
|
||||
$(LIVE_ISO): $(LIVE_IMG) redbear.ipxe
|
||||
ifeq ($(FSTOOLS_IN_PODMAN),1)
|
||||
$(PODMAN_RUN) make $@
|
||||
else
|
||||
mkdir -p $(LIVE_BUILD)
|
||||
rm -rf $@ $@.partial
|
||||
tmpdir="$$(mktemp -d)"; \
|
||||
esp_img="$$tmpdir/efiboot.img"; \
|
||||
trap 'rm -rf "$$tmpdir"' EXIT; \
|
||||
mkdir -p "$$tmpdir/EFI/BOOT"; \
|
||||
BOOTLOADER_LIVE_BIOS=""; \
|
||||
for path in recipes/core/bootloader/target/*/stage/usr/lib/boot/bootloader-live.bios repo/*/*/bootloader/*/usr/lib/boot/bootloader-live.bios; do \
|
||||
if [ -f "$$path" ]; then \
|
||||
BOOTLOADER_LIVE_BIOS="$$path"; \
|
||||
break; \
|
||||
fi; \
|
||||
done; \
|
||||
live_size="$$(stat -c%s "$(LIVE_IMG)")"; \
|
||||
esp_size="$$((live_size + 64 * 1024 * 1024))"; \
|
||||
truncate -s "$$esp_size" "$$esp_img"; \
|
||||
mkfs.fat -F 32 "$$esp_img" >/dev/null; \
|
||||
python3 local/scripts/fat_tool.py mkdir "$$esp_img" 0 EFI; \
|
||||
python3 local/scripts/fat_tool.py mkdir "$$esp_img" 0 EFI/BOOT; \
|
||||
python3 local/scripts/fat_tool.py cp-in "$$esp_img" 0 "$(LIVE_BOOTLOADER)" EFI/BOOT/BOOTX64.EFI; \
|
||||
python3 local/scripts/fat_tool.py cp-in "$$esp_img" 0 "$(LIVE_IMG)" redox-live.iso; \
|
||||
cp "$(LIVE_BOOTLOADER)" "$$tmpdir/EFI/BOOT/BOOTX64.EFI"; \
|
||||
cp redbear.ipxe "$$tmpdir/redbear.ipxe"; \
|
||||
if [ -n "$$BOOTLOADER_LIVE_BIOS" ]; then \
|
||||
cp "$$BOOTLOADER_LIVE_BIOS" "$$tmpdir/bootloader-live.bios"; \
|
||||
xorriso -as mkisofs -R -J -V "REDBEARLIVE" -o $@.partial \
|
||||
-b bootloader-live.bios -no-emul-boot \
|
||||
-eltorito-alt-boot -e efiboot.img -no-emul-boot \
|
||||
"$$tmpdir" >/dev/null; \
|
||||
else \
|
||||
xorriso -as mkisofs -R -J -V "REDBEARLIVE" -o $@.partial \
|
||||
-eltorito-alt-boot -e efiboot.img -no-emul-boot \
|
||||
"$$tmpdir" >/dev/null; \
|
||||
fi
|
||||
mv $@.partial $@
|
||||
cp redbear.ipxe $(LIVE_IPXE)
|
||||
endif
|
||||
|
||||
$(BUILD)/filesystem.img: $(FSTOOLS) $(REPO_TAG)
|
||||
@@ -84,9 +125,9 @@ ifeq ($(FSTOOLS_IN_PODMAN),1)
|
||||
$(PODMAN_RUN) make $@
|
||||
else
|
||||
@mkdir -p $(MOUNT_DIR)
|
||||
$(REDOXFS) $(BUILD)/redbear-live.iso $(MOUNT_DIR)
|
||||
$(REDOXFS) $(LIVE_IMG) $(MOUNT_DIR)
|
||||
@sleep 2
|
||||
@echo "\033[1;36;49mredbear-live.iso mounted ($$(pgrep redoxfs))\033[0m"
|
||||
@echo "\033[1;36;49m$(notdir $(LIVE_IMG)) mounted ($$(pgrep redoxfs))\033[0m"
|
||||
endif
|
||||
|
||||
unmount: FORCE
|
||||
|
||||
+13
-1
@@ -35,13 +35,24 @@ else ifeq ($(ARCH),x86_64)
|
||||
FIRMWARE=$(firstword \
|
||||
$(wildcard /usr/share/ovmf/OVMF.fd) \
|
||||
$(wildcard /usr/share/OVMF/OVMF_CODE.fd) \
|
||||
$(wildcard /usr/share/OVMF/x64/OVMF_CODE.fd) \
|
||||
$(wildcard /usr/share/edk2/x64/OVMF.4m.fd) \
|
||||
$(wildcard /usr/share/edk2/x64/OVMF_CODE.4m.fd) \
|
||||
$(wildcard /usr/share/edk2-ovmf/x64/OVMF.4m.fd) \
|
||||
$(wildcard /usr/share/edk2-ovmf/x64/OVMF_CODE.4m.fd) \
|
||||
)
|
||||
ifeq ($(FIRMWARE),)
|
||||
PFLASH0=$(firstword \
|
||||
$(wildcard /usr/share/qemu/edk2-x86_64-code.fd) \
|
||||
$(wildcard /usr/share/edk2/x64/OVMF_CODE.4m.fd) \
|
||||
$(wildcard /usr/share/edk2-ovmf/x64/OVMF_CODE.4m.fd) \
|
||||
$(wildcard /run/libvirt/nix-ovmf/edk2-x86_64-code.fd) \
|
||||
$(wildcard /opt/homebrew/opt/qemu/share/qemu/edk2s-x86_64-code.fd) \
|
||||
)
|
||||
PFLASH1=$(firstword \
|
||||
$(wildcard /usr/share/edk2/x64/OVMF_VARS.4m.fd) \
|
||||
$(wildcard /usr/share/edk2-ovmf/x64/OVMF_VARS.4m.fd) \
|
||||
)
|
||||
endif
|
||||
endif
|
||||
ifneq ($(usb),no)
|
||||
@@ -158,7 +169,8 @@ ifneq ($(QEMU_KERNEL),)
|
||||
endif
|
||||
|
||||
ifeq ($(live),yes)
|
||||
DISK=$(BUILD)/redbear-live.iso
|
||||
DISK=$(LIVE_ISO)
|
||||
disk?=cdrom
|
||||
else
|
||||
DISK=$(BUILD)/harddrive.img
|
||||
endif
|
||||
|
||||
@@ -2,14 +2,18 @@
|
||||
|
||||
# Build Red Bear OS live ISO
|
||||
# Usage: ./scripts/build-iso.sh [CONFIG_NAME] [ARCH]
|
||||
# CONFIG_NAME - build config (default: redbear-full)
|
||||
# CONFIG_NAME - build config (default: redbear-live)
|
||||
# ARCH - target architecture (default: x86_64)
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
CONFIG_NAME="${1:-redbear-full}"
|
||||
CONFIG_NAME="${1:-redbear-live}"
|
||||
ARCH="${2:-x86_64}"
|
||||
|
||||
if [ -z "${CI:-}" ] && { [ ! -t 0 ] || [ ! -t 1 ]; }; then
|
||||
export CI=1
|
||||
fi
|
||||
|
||||
echo "Building Red Bear OS ISO"
|
||||
echo " config: ${CONFIG_NAME}"
|
||||
echo " arch: ${ARCH}"
|
||||
@@ -17,4 +21,4 @@ echo " arch: ${ARCH}"
|
||||
make live CONFIG_NAME="${CONFIG_NAME}" ARCH="${ARCH}"
|
||||
|
||||
echo ""
|
||||
echo "Done: redbear-live.iso"
|
||||
echo "Done: build/${ARCH}/${CONFIG_NAME}.iso"
|
||||
|
||||
Reference in New Issue
Block a user