diff --git a/Dockerfile b/Dockerfile index 5b9620d..e0340db 100644 --- a/Dockerfile +++ b/Dockerfile @@ -44,7 +44,7 @@ EXPOSE 22 5900 8006 ENV CPU_CORES "1" ENV RAM_SIZE "1G" ENV DISK_SIZE "16G" -ENV BOOT "http://www.example.com/image.iso" +ENV BOOT "http://example.com/image.iso" ARG VERSION_ARG "0.0" RUN echo "$VERSION_ARG" > /run/version diff --git a/src/boot.sh b/src/boot.sh index 3d2827d..8a76634 100644 --- a/src/boot.sh +++ b/src/boot.sh @@ -58,6 +58,7 @@ if [[ "${BOOT_MODE,,}" != "legacy" ]]; then BOOT_OPTS="$BOOT_OPTS -chardev socket,id=chrtpm,path=/dev/shm/tpm/swtpm-sock" BOOT_OPTS="$BOOT_OPTS -tpmdev emulator,id=tpm0,chardev=chrtpm -device tpm-tis,tpmdev=tpm0" + BOOT_OPTS="$BOOT_OPTS -no-hpet -global kvm-pit.lost_tick_policy=discard -global ICH9-LPC.disable_s3=1" mkdir -p /dev/shm/tpm swtpm socket -t -d --tpmstate dir=/dev/shm/tpm --ctrl type=unixio,path=/dev/shm/tpm/swtpm-sock --tpm2 diff --git a/src/config.sh b/src/config.sh index b4de4b1..fee92d1 100644 --- a/src/config.sh +++ b/src/config.sh @@ -6,8 +6,8 @@ SERIAL_OPTS="-serial mon:stdio" USB_OPTS="-device qemu-xhci -device usb-tablet" MON_OPTS="-monitor telnet:localhost:7100,server,nowait,nodelay" RAM_OPTS=$(echo "-m $RAM_SIZE" | sed 's/MB/M/g;s/GB/G/g;s/TB/T/g') -CPU_OPTS="-cpu $CPU_MODEL -smp $CPU_CORES,sockets=1,dies=1,cores=$CPU_CORES,threads=1" -MAC_OPTS="-machine type=q35${SECURE},graphics=off,dump-guest-core=off,hpet=off${KVM_OPTS}" +CPU_OPTS="-cpu $CPU_FLAGS -smp $CPU_CORES,sockets=1,dies=1,cores=$CPU_CORES,threads=1" +MAC_OPTS="-machine type=q35${SECURE},graphics=off,vmport=off,dump-guest-core=off,hpet=off${KVM_OPTS}" DEV_OPTS="-device virtio-balloon-pci,id=balloon0,bus=pcie.0,addr=0x4" DEV_OPTS="$DEV_OPTS -object rng-random,id=objrng0,filename=/dev/urandom" DEV_OPTS="$DEV_OPTS -device virtio-rng-pci,rng=objrng0,id=rng0,bus=pcie.0,addr=0x1c" diff --git a/src/proc.sh b/src/proc.sh index 00fe2d8..c78a4f2 100644 --- a/src/proc.sh +++ b/src/proc.sh @@ -4,8 +4,8 @@ set -Eeuo pipefail # Docker environment variables : "${KVM:="Y"}" +: "${CPU_FLAGS:=""}" : "${CPU_MODEL:="host"}" -: "${CPU_FEATURES:="+ssse3,+sse4.1,+sse4.2"}" [ "$ARCH" != "amd64" ] && KVM="N" @@ -36,20 +36,35 @@ fi if [[ "$KVM" != [Nn]* ]]; then + CPU_FEATURES="kvm=on" KVM_OPTS=",accel=kvm -enable-kvm" + if [[ "${BOOT_MODE,,}" == "windows" ]]; then + + CPU_FEATURES="kvm=on,+hypervisor,+invtsc,l3-cache=on,migratable=no,hv_passthrough" + + fi + else KVM_OPTS="" + CPU_FEATURES="+ssse3,+sse4.1,+sse4.2" + + if [[ "${CPU_MODEL,,}" == "host"* ]]; then - if [[ "$CPU_MODEL" == "host"* ]]; then if [[ "$ARCH" == "amd64" ]]; then - CPU_MODEL="max,$CPU_FEATURES" + CPU_MODEL="max" else - CPU_MODEL="qemu64,$CPU_FEATURES" + CPU_MODEL="qemu64" fi - fi + fi +fi + +if [ -z "$CPU_FLAGS" ]; then + CPU_FLAGS="$CPU_MODEL,$CPU_FEATURES" +else + CPU_FLAGS="$CPU_MODEL,$CPU_FEATURES,$CPU_FLAGS" fi return 0