From 90748e28e58e035946ffeaa7b9cfbbd2bb47a3cf Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 29 Sep 2025 12:25:46 +0200 Subject: [PATCH] feat: Added custom BIOS logo (#852) --- Dockerfile | 2 ++ src/boot.sh | 1 + web/img/macos.ffs | Bin 0 -> 64506 bytes web/img/qemu.ffs | Bin 0 -> 61690 bytes web/img/windows.ffs | Bin 0 -> 72826 bytes 5 files changed, 3 insertions(+) create mode 100644 web/img/macos.ffs create mode 100644 web/img/qemu.ffs create mode 100644 web/img/windows.ffs diff --git a/Dockerfile b/Dockerfile index 05f94fc..a0a12de 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,6 @@ # syntax=docker/dockerfile:1 +FROM qemux/fiano AS src FROM debian:trixie-slim ARG VERSION_ARG="0.0" @@ -53,6 +54,7 @@ RUN set -eu && \ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./web /var/www/ +COPY --chmod=755 --from=src /utk.bin /run COPY --chmod=664 ./web/conf/defaults.json /usr/share/novnc COPY --chmod=664 ./web/conf/mandatory.json /usr/share/novnc COPY --chmod=744 ./web/conf/nginx.conf /etc/nginx/default.conf diff --git a/src/boot.sh b/src/boot.sh index 591e2c5..87fb774 100644 --- a/src/boot.sh +++ b/src/boot.sh @@ -70,6 +70,7 @@ case "${BOOT_MODE,,}" in if [ ! -s "$DEST.rom" ] || [ ! -f "$DEST.rom" ]; then [ ! -s "$OVMF/$ROM" ] || [ ! -f "$OVMF/$ROM" ] && error "UEFI boot file ($OVMF/$ROM) not found!" && exit 44 cp "$OVMF/$ROM" "$DEST.rom" + /run/utk.bin "$DEST.rom" replace_ffs LogoDXE "/var/www/img/${PROCESS,,}.ffs" save "$DEST.rom" fi if [ ! -s "$DEST.vars" ] || [ ! -f "$DEST.vars" ]; then diff --git a/web/img/macos.ffs b/web/img/macos.ffs new file mode 100644 index 0000000000000000000000000000000000000000..b478fde5ab0fd022064de7012ef067e3a0b01fb8 GIT binary patch literal 64506 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 A0RR91 literal 0 HcmV?d00001