Răsfoiți Sursa

feat: Disable S3 and S4 standby modes (#434)

Kroese 1 an în urmă
părinte
comite
3390ef8101
5 a modificat fișierele cu 47 adăugiri și 32 ștergeri
  1. 1 1
      Dockerfile
  2. 1 1
      readme.md
  3. 26 15
      src/install.sh
  4. 1 1
      src/power.sh
  5. 18 14
      src/samba.sh

+ 1 - 1
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"

+ 1 - 1
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?
 

+ 26 - 15
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

+ 1 - 1
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)

+ 18 - 14
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
+
+share="$STORAGE/shared"
 
-SAMBA="/etc/samba/smb.conf"
+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$(</run/version)..."
@@ -59,7 +64,7 @@ SAMBA="/etc/samba/smb.conf"
         echo ""
         echo "Replace the example path /home/user/example with the desired storage folder."
         echo ""
-} | unix2dos > "$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