aboutsummaryrefslogtreecommitdiff
path: root/vm/vm-win10
blob: 09351d2e440c1d31a2cf9c4e112f9e5bd8ae2205 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/bin/sh

set -e


WIN10_ZIP_URL="https://aka.ms/windev_VM_virtualbox"

ROOT_PATH=$(cd; pwd)/vm/win10
WIN10_ZIP_PATH=$ROOT_PATH/win10.zip
WIN10_IMG_PATH=$ROOT_PATH/win10.qcow2
TMP_PATH=$ROOT_PATH/tmp
INIT_ISO_PATH=$ROOT_PATH/init.iso


SAVE=
while getopts s flag; do
    case $flag in
        s)  SAVE=1;;
        ?)  ;;
    esac
done


mkdir -p $ROOT_PATH

if [ ! -f $WIN10_ZIP_PATH ]; then
    wget --show-progress -q -c -O $WIN10_ZIP_PATH $WIN10_ZIP_URL
fi

if [ ! -f $WIN10_IMG_PATH ]; then
    rm -rf $TMP_PATH
    mkdir -p $TMP_PATH
    unzip -d $TMP_PATH $WIN10_ZIP_PATH
    tar -x -f $TMP_PATH/*.ova -C $TMP_PATH
    qemu-img convert -p -c -f vmdk -O qcow2 $TMP_PATH/*.vmdk $WIN10_IMG_PATH
    rm -rf $TMP_PATH
fi

if [ ! -f $INIT_ISO_PATH ]; then
    rm -rf $TMP_PATH
    mkdir -p $TMP_PATH
    cat > $TMP_PATH/init.bat << EOF
powershell -executionpolicy bypass d:\\_init.ps1
EOF
    cat > $TMP_PATH/_init.ps1 << EOF
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
Set-MpPreference -DisableRealtimeMonitoring \$true
Set-Service -Name wuauserv -StartupType Disabled

\$wc = New-Object System.Net.WebClient
\$wc.DownloadFile("https://www.python.org/ftp/python/3.8.9/python-3.8.9-amd64.exe",
                  "c:\\\\Users\\\\User\\\\Downloads\\\\python-3.8.9-amd64.exe")
\$wc.DownloadFile("https://repo.msys2.org/distrib/x86_64/msys2-x86_64-20210228.exe",
                  "c:\\\\Users\\\\User\\\\Downloads\\\\msys2-x86_64-20210228.exe")
\$wc.DownloadFile("https://nodejs.org/dist/v14.16.1/node-v14.16.1-x64.msi",
                  "c:\\\\Users\\\\User\\\\Downloads\\\\node-v14.16.1-x64.msi")
\$wc.DownloadFile("https://yarnpkg.com/latest.msi",
                  "c:\\\\Users\\\\User\\\\Downloads\\\\yarn.msi")

\$env:Path = "C:\\Python38;C:\\Python38\\Scripts;C:\\msys64\\mingw64\\bin;C:\\msys64\\usr\\bin;" + \$env:Path
\$env:Path += ";C:\\nodejs;C:\\Yarn\\bin"
[Environment]::SetEnvironmentVariable(
    "Path", \$env:Path, [System.EnvironmentVariableTarget]::Machine)

cmd /C "c:\\Users\\User\\Downloads\\python-3.8.9-amd64.exe InstallAllUsers=1 TargetDir=c:\\Python38 /passive"
cmd /C "c:\\Users\\User\\Downloads\\node-v14.16.1-x64.msi INSTALLDIR=C:\\nodejs /passive"
cmd /C "c:\\Users\\User\\Downloads\\yarn.msi INSTALLDIR=c:\\Yarn /passive"

cmd /C "c:\\Users\\User\\Downloads\\msys2-x86_64-20210228.exe install -c --root c:\\msys64"
cmd.exe /C "pacman -Syu --noconfirm"
cmd.exe /C "pacman -Syu --noconfirm base-devel git mingw-w64-x86_64-toolchain socat"
EOF
    mkisofs -J -l -R -V "init" -iso-level 4 -o $INIT_ISO_PATH $TMP_PATH
    rm -rf $TMP_PATH
fi

if [ ! -z $SAVE ]; then
    TMP_IMG_PATH=$WIN10_IMG_PATH
else
    TMP_IMG_PATH=$WIN10_IMG_PATH.tmp
    rm -f $TMP_IMG_PATH
    qemu-img create -q -F qcow2 -f qcow2 -b $WIN10_IMG_PATH $TMP_IMG_PATH
fi

exec qemu-system-x86_64 \
    -enable-kvm -cpu host \
    -hda $TMP_IMG_PATH \
    -cdrom $INIT_ISO_PATH \
    -m 4G \
    -device e1000,netdev=net0 \
    -netdev user,id=net0 \
    -usb \
    -device usb-tablet \
    -rtc base=localtime