diff --git a/Dockerfile b/Dockerfile index c2035eb..a0e982d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:4.25 / / +COPY --from=qemux/qemu-docker:4.26 / / ARG DEBCONF_NOWARNINGS "yes" ARG DEBIAN_FRONTEND "noninteractive" diff --git a/readme.md b/readme.md index ed5a62e..1e4c45d 100644 --- a/readme.md +++ b/readme.md @@ -164,7 +164,7 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_ - /home/user/example.iso:/storage/custom.iso ``` - Replace the example path `/home/user/example.iso` with the filename of the desired ISO file. + Replace the example path `/home/user/example.iso` with the filename of the desired ISO file. The value of `VERSION` will be ignored in this case. * ### How do I customize the installation? diff --git a/src/install.sh b/src/install.sh index 7ecbb86..417e4ef 100644 --- a/src/install.sh +++ b/src/install.sh @@ -275,20 +275,25 @@ finishInstall() { fi fi + rm -f "$STORAGE/windows.ver" + rm -f "$STORAGE/windows.old" rm -f "$STORAGE/windows.boot" + rm -f "$STORAGE/windows.mode" + cp /run/version "$STORAGE/windows.ver" if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then - echo "$MACHINE" > "$STORAGE/windows.old" + if [[ "${MACHINE,,}" != "q35" ]]; then + echo "$MACHINE" > "$STORAGE/windows.old" + fi + echo "$BOOT_MODE" > "$STORAGE/windows.mode" else - rm -f "$STORAGE/windows.old" - fi - - # Enable secure boot + TPM on manual installs as Win11 requires - if [[ "$MANUAL" == [Yy1]* ]] || [[ "$aborted" == [Yy1]* ]]; then - if [[ "${DETECTED,,}" == "win11"* ]]; then - BOOT_MODE="windows_secure" - echo "$BOOT_MODE" > "$STORAGE/windows.mode" + # Enable secure boot + TPM on manual installs as Win11 requires + if [[ "$MANUAL" == [Yy1]* ]] || [[ "$aborted" == [Yy1]* ]]; then + if [[ "${DETECTED,,}" == "win11"* ]]; then + BOOT_MODE="windows_secure" + echo "$BOOT_MODE" > "$STORAGE/windows.mode" + fi fi fi @@ -1151,16 +1156,22 @@ buildImage() { bootWindows() { - if [ -f "$STORAGE/windows.old" ]; then - MACHINE=$(<"$STORAGE/windows.old") - [ -z "$MACHINE" ] && MACHINE="q35" - BOOT_MODE="windows_legacy" + if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then + BOOT_MODE=$(<"$STORAGE/windows.mode") + if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then + MACHINE=$(<"$STORAGE/windows.old") + fi rm -rf "$TMP" return 0 fi - if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then - BOOT_MODE=$(<"$STORAGE/windows.mode") + # Migrations + + if [ -f "$STORAGE/windows.old" ]; then + MACHINE=$(<"$STORAGE/windows.old") + [ -z "$MACHINE" ] && MACHINE="q35" + BOOT_MODE="windows_legacy" + echo "$BOOT_MODE" > "$STORAGE/windows.mode" rm -rf "$TMP" return 0 fi diff --git a/src/power.sh b/src/power.sh index 70e4bbf..7326f86 100644 --- a/src/power.sh +++ b/src/power.sh @@ -28,7 +28,7 @@ ready() { [ -f "$STORAGE/windows.boot" ] && return 0 [ ! -s "$QEMU_PTY" ] && return 1 - if [ -f "$STORAGE/windows.old" ]; then + if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then local last local bios="Booting from Hard" last=$(grep "^Booting.*" "$QEMU_PTY" | tail -1) diff --git a/src/samba.sh b/src/samba.sh index eb262af..7544fc6 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -3,22 +3,27 @@ set -Eeuo pipefail : "${SAMBA:="Y"}" -[[ "$DHCP" == [Yy1]* ]] && return 0 [[ "$SAMBA" != [Yy1]* ]] && return 0 [[ "$NETWORK" != [Yy1]* ]] && return 0 -SHARE="$STORAGE/shared" +hostname="host.lan" +interface="dockerbridge" -mkdir -p "$SHARE" -chmod -R 777 "$SHARE" +if [[ "$DHCP" == [Yy1]* ]]; then + hostname="$IP" + interface="$VM_NET_DEV" +fi -SAMBA="/etc/samba/smb.conf" +share="$STORAGE/shared" + +mkdir -p "$share" +[ -z "$(ls -A "$share")" ] && chmod -R 777 "$share" { echo "[global]" echo " server string = Dockur" - echo " netbios name = dockur" + echo " netbios name = $hostname" echo " workgroup = WORKGROUP" - echo " interfaces = dockerbridge" + echo " interfaces = $interface" echo " bind interfaces only = yes" echo " security = user" echo " guest account = nobody" @@ -32,14 +37,14 @@ SAMBA="/etc/samba/smb.conf" echo " disable spoolss = yes" echo "" echo "[Data]" - echo " path = $SHARE" + echo " path = $share" echo " comment = Shared" echo " writable = yes" echo " guest ok = yes" echo " guest only = yes" echo " force user = root" echo " force group = root" -} > "$SAMBA" +} > "/etc/samba/smb.conf" { echo "--------------------------------------------------------" echo " $APP for Docker v$( "$SHARE/readme.txt" +} | unix2dos > "$share/readme.txt" ! smbd && smbd --debug-stdout @@ -67,17 +72,16 @@ isXP="N" if [ -f "$STORAGE/windows.old" ]; then MT=$(<"$STORAGE/windows.old") - if [[ "${MT,,}" == "pc-q35-2"* ]]; then - isXP="Y" - fi + [[ "${MT,,}" == "pc-q35-2"* ]] && isXP="Y" fi if [[ "$isXP" == [Yy1]* ]]; then + [[ "$DHCP" == [Yy1]* ]] && return 0 # Enable NetBIOS on Windows XP ! nmbd && nmbd --debug-stdout else # Enable Web Service Discovery - wsdd -i dockerbridge -p -n "host.lan" & + wsdd -i "$interface" -p -n "$hostname" & fi return 0