mirror of
https://github.com/dockur/windows.git
synced 2026-01-13 14:35:27 +00:00
Compare commits
40 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d008b18d1d | ||
|
|
fa40d30e5d | ||
|
|
de4bda71e2 | ||
|
|
aa16eeba6c | ||
|
|
70a92d3503 | ||
|
|
6c3ef15ffd | ||
|
|
71c9586fb4 | ||
|
|
81e9fff270 | ||
|
|
90df2d88e3 | ||
|
|
ffcb483452 | ||
|
|
c081ec2693 | ||
|
|
96fbb26d6f | ||
|
|
db45817a7c | ||
|
|
a9e3ffa413 | ||
|
|
77a8e4d26e | ||
|
|
9fd266a09d | ||
|
|
d570eca629 | ||
|
|
7b31f538ba | ||
|
|
6bf854fc12 | ||
|
|
6f604dca8e | ||
|
|
663a6b5da0 | ||
|
|
839900f495 | ||
|
|
e2be4f6d0c | ||
|
|
5d734616aa | ||
|
|
972240061e | ||
|
|
0c8943f541 | ||
|
|
b7ad0d3d88 | ||
|
|
522d646fa3 | ||
|
|
e5e71f67fa | ||
|
|
a3a2b3fb09 | ||
|
|
f454fa7b34 | ||
|
|
461be96ecd | ||
|
|
c31c530f2b | ||
|
|
a995ecc174 | ||
|
|
d3358f7345 | ||
|
|
c9abc7551a | ||
|
|
156eaaa2da | ||
|
|
9ffc4647aa | ||
|
|
5501437caa | ||
|
|
777af02ed4 |
6
.devcontainer.json
Normal file
6
.devcontainer.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"name": "windows",
|
||||
"service": "windows",
|
||||
"forwardPorts": [8006],
|
||||
"dockerComposeFile": "compose.yml"
|
||||
}
|
||||
13
Dockerfile
13
Dockerfile
@@ -1,7 +1,7 @@
|
||||
ARG VERSION_ARG="latest"
|
||||
FROM scratch AS build-amd64
|
||||
|
||||
COPY --from=qemux/qemu:6.22 / /
|
||||
COPY --from=qemux/qemu:7.09 / /
|
||||
|
||||
ARG DEBCONF_NOWARNINGS="yes"
|
||||
ARG DEBIAN_FRONTEND="noninteractive"
|
||||
@@ -10,19 +10,14 @@ ARG DEBCONF_NONINTERACTIVE_SEEN="true"
|
||||
RUN set -eu && \
|
||||
apt-get update && \
|
||||
apt-get --no-install-recommends -y install \
|
||||
bc \
|
||||
jq \
|
||||
curl \
|
||||
7zip \
|
||||
wsdd \
|
||||
samba \
|
||||
xz-utils \
|
||||
wimtools \
|
||||
dos2unix \
|
||||
cabextract \
|
||||
genisoimage \
|
||||
libxml2-utils \
|
||||
libarchive-tools && \
|
||||
libarchive-tools \
|
||||
netcat-openbsd && \
|
||||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||
|
||||
@@ -38,7 +33,7 @@ ARG VERSION_ARG="0.00"
|
||||
RUN echo "$VERSION_ARG" > /run/version
|
||||
|
||||
VOLUME /storage
|
||||
EXPOSE 8006 3389
|
||||
EXPOSE 3389 8006
|
||||
|
||||
ENV VERSION="11"
|
||||
ENV RAM_SIZE="4G"
|
||||
|
||||
@@ -415,6 +415,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>20</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>21</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -418,6 +418,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>20</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>21</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -424,6 +424,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>20</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>21</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -421,6 +421,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>20</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>21</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -418,6 +418,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>20</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>21</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -453,6 +453,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>23</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>24</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -456,6 +456,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>23</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>24</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -456,6 +456,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>23</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>24</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -456,6 +456,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>23</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>24</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -456,6 +456,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>23</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>24</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -290,6 +290,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>19</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>20</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -293,6 +293,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>19</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>20</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -308,6 +308,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>16</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>17</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -311,6 +311,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>16</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>17</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -328,6 +328,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>20</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>21</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -331,6 +331,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>20</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>21</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -332,6 +332,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>20</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>21</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -159,6 +159,11 @@
|
||||
<Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path>
|
||||
<Description>Set Network Location to Home</Description>
|
||||
</RunSynchronousCommand>
|
||||
<RunSynchronousCommand wcm:action="add">
|
||||
<Order>2</Order>
|
||||
<Path>dism.exe /online /Disable-Feature /FeatureName:Microsoft-Hyper-V /NoRestart</Path>
|
||||
<Description>Disable Hyper-V role</Description>
|
||||
</RunSynchronousCommand>
|
||||
</RunSynchronous>
|
||||
</component>
|
||||
<component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
|
||||
@@ -332,6 +337,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>20</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>21</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -335,6 +335,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>20</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>21</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -332,6 +332,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>20</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>21</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -335,6 +335,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>20</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>21</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -347,6 +347,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>22</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>23</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -350,6 +350,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>22</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>23</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -274,6 +274,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>17</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>18</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -278,6 +278,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>17</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>18</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -278,6 +278,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>17</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>18</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -278,6 +278,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>17</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>18</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -278,6 +278,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>17</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>18</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -278,6 +278,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>17</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>18</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -278,6 +278,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>17</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>18</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -293,6 +293,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>16</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>17</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -296,6 +296,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>16</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>17</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -303,6 +303,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>16</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>17</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -252,6 +252,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>22</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>23</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -252,6 +252,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>22</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>23</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -252,6 +252,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>22</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>23</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -252,6 +252,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>22</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>23</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -252,6 +252,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>22</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>23</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -252,6 +252,11 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>22</Order>
|
||||
<CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine>
|
||||
<Description>Add entry in hosts file</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>23</Order>
|
||||
<CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine>
|
||||
<Description>Execute custom script from the OEM folder if exists</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
99
readme.md
99
readme.md
@@ -26,7 +26,7 @@ Windows inside a Docker container.
|
||||
|
||||
## Usage 🐳
|
||||
|
||||
Via Docker Compose:
|
||||
##### Via Docker Compose:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
@@ -50,27 +50,21 @@ services:
|
||||
stop_grace_period: 2m
|
||||
```
|
||||
|
||||
Via Docker CLI:
|
||||
##### Via Docker CLI:
|
||||
|
||||
```bash
|
||||
docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v ${PWD:-.}/windows:/storage --stop-timeout 120 dockurr/windows
|
||||
```
|
||||
|
||||
Via Kubernetes:
|
||||
##### Via Kubernetes:
|
||||
|
||||
```shell
|
||||
kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/master/kubernetes.yml
|
||||
```
|
||||
|
||||
## Compatibility ⚙️
|
||||
##### Via Github Codespaces:
|
||||
|
||||
| **Product** | **Platform** | |
|
||||
|---|---|---|
|
||||
| Docker Engine | Linux| ✅ |
|
||||
| Docker Desktop | Linux | ❌ |
|
||||
| Docker Desktop | macOS | ❌ |
|
||||
| Docker Desktop | Windows 11 | ✅ |
|
||||
| Docker Desktop | Windows 10 | ❌ |
|
||||
[](https://codespaces.new/dockur/windows)
|
||||
|
||||
## FAQ 💬
|
||||
|
||||
@@ -78,7 +72,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
|
||||
|
||||
Very simple! These are the steps:
|
||||
|
||||
- Start the container and connect to [port 8006](http://localhost:8006) using your web browser.
|
||||
- Start the container and connect to [port 8006](http://127.0.0.1:8006/) using your web browser.
|
||||
|
||||
- Sit back and relax while the magic happens, the whole installation will be performed fully automatic.
|
||||
|
||||
@@ -97,28 +91,29 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
|
||||
|
||||
Select from the values below:
|
||||
|
||||
| **Value** | **Version** | **Size** |
|
||||
| **Value** | **Version** | **Size** |
|
||||
|---|---|---|
|
||||
| `11` | Windows 11 Pro | 5.4 GB |
|
||||
| `11l` | Windows 11 LTSC | 4.7 GB |
|
||||
| `11e` | Windows 11 Enterprise | 4.0 GB |
|
||||
| `11` | Windows 11 Pro | 5.4 GB |
|
||||
| `11l` | Windows 11 LTSC | 4.7 GB |
|
||||
| `11e` | Windows 11 Enterprise | 4.0 GB |
|
||||
||||
|
||||
| `10` | Windows 10 Pro | 5.7 GB |
|
||||
| `10l` | Windows 10 LTSC | 4.6 GB |
|
||||
| `10e` | Windows 10 Enterprise | 5.2 GB |
|
||||
| `10` | Windows 10 Pro | 5.7 GB |
|
||||
| `10l` | Windows 10 LTSC | 4.6 GB |
|
||||
| `10e` | Windows 10 Enterprise | 5.2 GB |
|
||||
||||
|
||||
| `8e` | Windows 8.1 Enterprise | 3.7 GB |
|
||||
| `7e` | Windows 7 Enterprise | 3.0 GB |
|
||||
| `ve` | Windows Vista Enterprise | 3.0 GB |
|
||||
| `xp` | Windows XP Professional | 0.6 GB |
|
||||
||||
|
||||
| `2025` | Windows Server 2025 | 5.6 GB |
|
||||
| `2022` | Windows Server 2022 | 4.7 GB |
|
||||
| `2019` | Windows Server 2019 | 5.3 GB |
|
||||
| `2016` | Windows Server 2016 | 6.5 GB |
|
||||
| `2012` | Windows Server 2012 | 4.3 GB |
|
||||
| `2008` | Windows Server 2008 | 3.0 GB |
|
||||
| `2003` | Windows Server 2003 | 0.6 GB |
|
||||
| `8e` | Windows 8.1 Enterprise | 3.7 GB |
|
||||
| `7e` | Windows 7 Enterprise | 3.0 GB |
|
||||
| `ve` | Windows Vista Enterprise | 3.0 GB |
|
||||
| `xp` | Windows XP Professional | 0.6 GB |
|
||||
| `2k` | Windows 2000 Professional | 0.4 GB |
|
||||
||||
|
||||
| `2025` | Windows Server 2025 | 5.6 GB |
|
||||
| `2022` | Windows Server 2022 | 4.7 GB |
|
||||
| `2019` | Windows Server 2019 | 5.3 GB |
|
||||
| `2016` | Windows Server 2016 | 6.5 GB |
|
||||
| `2012` | Windows Server 2012 | 4.3 GB |
|
||||
| `2008` | Windows Server 2008 | 3.0 GB |
|
||||
| `2003` | Windows Server 2003 | 0.6 GB |
|
||||
|
||||
> [!TIP]
|
||||
> To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/).
|
||||
@@ -176,7 +171,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
|
||||
|
||||
### How do I configure the username and password?
|
||||
|
||||
By default, a user called `Docker` (with an empty password) is created during installation.
|
||||
By default, a user called `Docker` is created during installation and its password is `admin`.
|
||||
|
||||
If you want to use different credentials, you can configure them in your compose file (only before installation):
|
||||
|
||||
@@ -209,15 +204,6 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
|
||||
KEYBOARD: "en-US"
|
||||
```
|
||||
|
||||
### How do I set the product key?
|
||||
|
||||
By default, an evaluation version of Windows will be installed, but if you have a product key you can add a `KEY` variable like this (before installation):
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
KEY: "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx"
|
||||
```
|
||||
|
||||
### How do I select the edition?
|
||||
|
||||
Windows Server offers a minimalistic Core edition without a GUI. To select those non-standard editions, you can add a `EDITION` variable like this (before installation):
|
||||
@@ -262,7 +248,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
|
||||
|
||||
It's recommended to stick to the automatic installation, as it adjusts various settings to prevent common issues when running Windows inside a virtual environment.
|
||||
|
||||
However, if you insist on performing the installation manually on your own risk, add the following environment variable to your compose file:
|
||||
However, if you insist on performing the installation manually at your own risk, add the following environment variable to your compose file:
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
@@ -273,7 +259,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
|
||||
|
||||
The web-viewer is mainly meant to be used during installation, as its picture quality is low, and it has no audio or clipboard for example.
|
||||
|
||||
So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username `Docker` and by leaving the password empty.
|
||||
So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username `Docker` and password `admin`.
|
||||
|
||||
There is a RDP client for [Android](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) available from the Play Store and one for [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) in the Apple Store. For Linux you can use [FreeRDP](https://www.freerdp.com/) and on Windows just type `mstsc` in the search box.
|
||||
|
||||
@@ -344,12 +330,12 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
|
||||
|
||||
### How do I pass-through a disk?
|
||||
|
||||
It is possible to pass-through disk devices directly by adding them to your compose file in this way:
|
||||
It is possible to pass-through disk devices or partitions directly by adding them to your compose file in this way:
|
||||
|
||||
```yaml
|
||||
devices:
|
||||
- /dev/sdb:/disk1
|
||||
- /dev/sdc:/disk2
|
||||
- /dev/sdc1:/disk2
|
||||
```
|
||||
|
||||
Use `/disk1` if you want it to become your main drive (which will be formatted during installation), and use `/disk2` and higher to add them as secondary drives (which will stay untouched).
|
||||
@@ -369,9 +355,16 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
|
||||
|
||||
### How do I verify if my system supports KVM?
|
||||
|
||||
Only Linux and Windows 11 support KVM virtualization, macOS and Windows 10 do not unfortunately.
|
||||
|
||||
You can run the following commands in Linux to check your system:
|
||||
First check if your software is compatible using this chart:
|
||||
|
||||
| **Product** | **Linux** | **Win11** | **Win10** | **macOS** |
|
||||
|---|---|---|---|---|
|
||||
| Docker CLI | ✅ | ✅ | ❌ | ❌ |
|
||||
| Docker Desktop | ❌ | ✅ | ❌ | ❌ |
|
||||
| Podman CLI | ✅ | ✅ | ❌ | ❌ |
|
||||
| Podman Desktop | ✅ | ✅ | ❌ | ❌ |
|
||||
|
||||
After that you can run the following commands in Linux to check your system:
|
||||
|
||||
```bash
|
||||
sudo apt install cpu-checker
|
||||
@@ -386,16 +379,16 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
|
||||
|
||||
- you are not using a cloud provider, as most of them do not allow nested virtualization for their VPS's.
|
||||
|
||||
If you do not receive any error from `kvm-ok` but the container still complains about KVM, please check whether:
|
||||
|
||||
- you are not using "Docker Desktop for Linux" as it does not support KVM, instead make use of Docker Engine directly.
|
||||
|
||||
- it could help to add `privileged: true` to your compose file (or `sudo` to your `docker run` command), to rule out any permission issue.
|
||||
If you did not receive any error from `kvm-ok` but the container still complains about a missing KVM device, it could help to add `privileged: true` to your compose file (or `sudo` to your `docker` command) to rule out any permission issue.
|
||||
|
||||
### How do I run macOS in a container?
|
||||
|
||||
You can use [dockur/macos](https://github.com/dockur/macos) for that. It shares many of the same features, except for the automatic installation.
|
||||
|
||||
### How do I run a Linux desktop in a container?
|
||||
|
||||
You can use [qemus/qemu](https://github.com/qemus/qemu) in that case.
|
||||
|
||||
### Is this project legal?
|
||||
|
||||
Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project will be considered legal.
|
||||
|
||||
282
src/define.sh
282
src/define.sh
@@ -17,7 +17,6 @@ set -Eeuo pipefail
|
||||
: "${PASSWORD:=""}"
|
||||
|
||||
MIRRORS=3
|
||||
PLATFORM="x64"
|
||||
|
||||
parseVersion() {
|
||||
|
||||
@@ -90,6 +89,9 @@ parseVersion() {
|
||||
"xp64" | "xpx64" | "5x64" | "winxp64" | "winxpx64" | "windowsxp64" | "windowsxpx64" )
|
||||
VERSION="winxpx64"
|
||||
;;
|
||||
"2k" | "2000" | "win2k" | "win2000" | "windows2k" | "windows2000" )
|
||||
VERSION="win2kx86"
|
||||
;;
|
||||
"25" | "2025" | "win25" | "win2025" | "windows2025" | "windows 2025" )
|
||||
VERSION="win2025-eval"
|
||||
;;
|
||||
@@ -102,7 +104,7 @@ parseVersion() {
|
||||
"16" | "2016" | "win16" | "win2016" | "windows2016" | "windows 2016" )
|
||||
VERSION="win2016-eval"
|
||||
;;
|
||||
"hv" | "hyperv" | "hyper v" | "hyper-v" | "19hv" | "2019hv" | "win2019hv")
|
||||
"hv" | "hyperv" | "hyper v" | "hyper-v" | "19hv" | "2019hv" | "win2019hv" )
|
||||
VERSION="win2019-hv"
|
||||
;;
|
||||
"2012" | "2012r2" | "win2012" | "win2012r2" | "windows2012" | "windows 2012" )
|
||||
@@ -742,11 +744,6 @@ getMido() {
|
||||
sum="2dedd44c45646c74efc5a028f65336027e14a56f76686a4631cf94ffe37c72f2"
|
||||
url="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO"
|
||||
;;
|
||||
"win7x64" | "win7x64-enterprise-eval" )
|
||||
size=3121248256
|
||||
sum="2c16c73388a5c02a0ec4cd8b9e5c14ba28b7b45d13d0c9c7d44459feecc0385f"
|
||||
url="http://care.dlservice.microsoft.com/dl/download/evalx/win7/x64/EN/7600.16385.090713-1255_x64fre_enterprise_en-us_EVAL_Eval_Enterprise-GRMCENXEVAL_EN_DVD.iso"
|
||||
;;
|
||||
"win2025-eval" )
|
||||
size=6014152704
|
||||
sum="d0ef4502e350e3c6c53c15b1b3020d38a5ded011bf04998e950720ac8579b23d"
|
||||
@@ -888,7 +885,7 @@ getLink1() {
|
||||
sum="0b738b55a5ea388ad016535a5c8234daf2e5715a0638488ddd8a228a836055a1"
|
||||
url="7/en_windows_7_with_sp1_x64.iso"
|
||||
;;
|
||||
"win7x86" | "win7x86-enterprise" )
|
||||
"win7x86" | "win7x86-enterprise" | "win7x86-enterprise-eval" )
|
||||
size=2434502656
|
||||
sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad"
|
||||
url="7/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso"
|
||||
@@ -918,6 +915,11 @@ getLink1() {
|
||||
sum="8fac68e1e56c64ad9a2aa0ad464560282e67fa4f4dd51d09a66f4e548eb0f2d6"
|
||||
url="xp/professional/en_win_xp_pro_x64_vl.iso"
|
||||
;;
|
||||
"win2kx86" )
|
||||
size=331701982
|
||||
sum="a93251b31f92316411bb48458a695d9051b13cdeba714c46f105012fdda45bf3"
|
||||
url="2000/5.00.2195.6717_x86fre_client-professional_retail_en-us.7z"
|
||||
;;
|
||||
esac
|
||||
|
||||
case "${ret,,}" in
|
||||
@@ -972,7 +974,7 @@ getLink2() {
|
||||
sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808"
|
||||
url="Windows%207/en_windows_7_ultimate_with_sp1_x64_dvd_u_677332.iso"
|
||||
;;
|
||||
"win7x86" | "win7x86-enterprise" )
|
||||
"win7x86" | "win7x86-enterprise" | "win7x86-enterprise-eval" )
|
||||
size=2434502656
|
||||
sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad"
|
||||
url="Windows%207/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso"
|
||||
@@ -1056,11 +1058,40 @@ getLink3() {
|
||||
sum="a11116c0645d892d6a5a7c585ecc1fa13aa66f8c7cc6b03bf1f27bd16860cc35"
|
||||
url="tiny-10-23-h2/tiny10%20x64%2023h2.iso"
|
||||
;;
|
||||
"win7x64" | "win7x64-enterprise" | "win7x64-enterprise-eval" )
|
||||
size=3182604288
|
||||
sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7"
|
||||
url="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651_202006/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso"
|
||||
;;
|
||||
"win7x64-ultimate" )
|
||||
size=3320903680
|
||||
sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808"
|
||||
url="win7-ult-sp1-english/Win7_Ult_SP1_English_x64.iso"
|
||||
;;
|
||||
"win7x86" | "win7x86-enterprise" | "win7x86-enterprise-eval" )
|
||||
size=2434502656
|
||||
sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad"
|
||||
url="en_windows_7_enterprise_with_sp1_x86_dvd_u_677710_202006/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso"
|
||||
;;
|
||||
"win7x86-ultimate" )
|
||||
size=2564476928
|
||||
sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940"
|
||||
url="win7-ult-sp1-english/Win7_Ult_SP1_English_x32.iso"
|
||||
;;
|
||||
"winxpx86" )
|
||||
size=617756672
|
||||
sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46"
|
||||
url="XPPRO_SP3_ENU/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso"
|
||||
;;
|
||||
"winxpx64" )
|
||||
size=614166528
|
||||
sum="8fac68e1e56c64ad9a2aa0ad464560282e67fa4f4dd51d09a66f4e548eb0f2d6"
|
||||
url="windows-xp-all-sp-msdn-iso-files-en-de-ru-tr-x86-x64/en_win_xp_sp1_pro_x64_vl.iso"
|
||||
;;
|
||||
"win2kx86" )
|
||||
size=386859008
|
||||
sum="e3816f6e80b66ff686ead03eeafffe9daf020a5e4717b8bd4736b7c51733ba22"
|
||||
url="MicrosoftWindows2000BuildCollection/5.00.2195.6717_x86fre_client-professional_retail_en-us-ZRMPFPP_EN.iso"
|
||||
esac
|
||||
|
||||
case "${ret,,}" in
|
||||
@@ -1197,89 +1228,104 @@ prepareInstall() {
|
||||
local driver="$4"
|
||||
local drivers="/tmp/drivers"
|
||||
|
||||
rm -rf "$drivers"
|
||||
mkdir -p "$drivers"
|
||||
|
||||
ETFS="[BOOT]/Boot-NoEmul.img"
|
||||
|
||||
if [ ! -f "$dir/$ETFS" ] || [ ! -s "$dir/$ETFS" ]; then
|
||||
error "Failed to locate file \"$ETFS\" in $desc ISO image!" && return 1
|
||||
fi
|
||||
|
||||
local msg="Adding drivers to image..."
|
||||
info "$msg" && html "$msg"
|
||||
|
||||
if ! bsdtar -xf /drivers.txz -C "$drivers"; then
|
||||
error "Failed to extract drivers!" && return 1
|
||||
fi
|
||||
|
||||
local arch target
|
||||
[ -d "$dir/AMD64" ] && arch="amd64" || arch="x86"
|
||||
[[ "${arch,,}" == "x86" ]] && target="$dir/I386" || target="$dir/AMD64"
|
||||
|
||||
if [ ! -f "$drivers/viostor/$driver/$arch/viostor.sys" ]; then
|
||||
error "Failed to locate required storage drivers!" && return 1
|
||||
if [ ! -d "$target" ]; then
|
||||
error "Failed to locate directory \"$target\" in $desc ISO image!" && return 1
|
||||
fi
|
||||
|
||||
cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$target" || return 1
|
||||
if [[ "${driver,,}" == "xp" ]] || [[ "${driver,,}" == "2k3" ]]; then
|
||||
|
||||
mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1
|
||||
cp -L "$drivers/viostor/$driver/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1
|
||||
cp -L "$drivers/viostor/$driver/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1
|
||||
cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1
|
||||
local msg="Adding drivers to image..."
|
||||
info "$msg" && html "$msg"
|
||||
|
||||
rm -rf "$drivers"
|
||||
mkdir -p "$drivers"
|
||||
|
||||
if ! bsdtar -xf /drivers.txz -C "$drivers"; then
|
||||
error "Failed to extract drivers!" && return 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$drivers/viostor/$driver/$arch/viostor.sys" ]; then
|
||||
error "Failed to locate required storage drivers!" && return 1
|
||||
fi
|
||||
|
||||
cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$target" || return 1
|
||||
|
||||
mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1
|
||||
cp -L "$drivers/viostor/$driver/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1
|
||||
cp -L "$drivers/viostor/$driver/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1
|
||||
cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1
|
||||
|
||||
if [ ! -f "$drivers/NetKVM/$driver/$arch/netkvm.sys" ]; then
|
||||
error "Failed to locate required network drivers!" && return 1
|
||||
fi
|
||||
|
||||
mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1
|
||||
cp -L "$drivers/NetKVM/$driver/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1
|
||||
cp -L "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1
|
||||
cp -L "$drivers/NetKVM/$driver/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1
|
||||
|
||||
if [ ! -f "$target/TXTSETUP.SIF" ]; then
|
||||
error "The file TXTSETUP.SIF could not be found!" && return 1
|
||||
fi
|
||||
|
||||
sed -i '/^\[SCSI.Load\]/s/$/\nviostor=viostor.sys,4/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\nviostor.sys=1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[SCSI\]/s/$/\nviostor=\"Red Hat VirtIO SCSI Disk Device\"/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00020000=\"viostor\"/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00021AF4=\"viostor\"/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF"
|
||||
|
||||
if [ ! -d "$drivers/sata/xp/$arch" ]; then
|
||||
error "Failed to locate required SATA drivers!" && return 1
|
||||
fi
|
||||
|
||||
mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" || return 1
|
||||
cp -Lr "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" || return 1
|
||||
cp -Lr "$drivers/sata/xp/$arch/." "$target" || return 1
|
||||
|
||||
sed -i '/^\[SCSI.Load\]/s/$/\niaStor=iaStor.sys,4/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaahci.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaAHCI.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$target/TXTSETUP.SIF"
|
||||
|
||||
rm -rf "$drivers"
|
||||
|
||||
if [ ! -f "$drivers/NetKVM/$driver/$arch/netkvm.sys" ]; then
|
||||
error "Failed to locate required network drivers!" && return 1
|
||||
fi
|
||||
|
||||
mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1
|
||||
cp -L "$drivers/NetKVM/$driver/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1
|
||||
cp -L "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1
|
||||
cp -L "$drivers/NetKVM/$driver/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1
|
||||
|
||||
if [ ! -f "$target/TXTSETUP.SIF" ]; then
|
||||
error "The file TXTSETUP.SIF could not be found!" && return 1
|
||||
fi
|
||||
|
||||
sed -i '/^\[SCSI.Load\]/s/$/\nviostor=viostor.sys,4/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\nviostor.sys=1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[SCSI\]/s/$/\nviostor=\"Red Hat VirtIO SCSI Disk Device\"/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00020000=\"viostor\"/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00021AF4=\"viostor\"/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF"
|
||||
|
||||
if [ ! -d "$drivers/sata/xp/$arch" ]; then
|
||||
error "Failed to locate required SATA drivers!" && return 1
|
||||
fi
|
||||
|
||||
mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" || return 1
|
||||
cp -Lr "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" || return 1
|
||||
cp -Lr "$drivers/sata/xp/$arch/." "$target" || return 1
|
||||
|
||||
sed -i '/^\[SCSI.Load\]/s/$/\niaStor=iaStor.sys,4/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaahci.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaAHCI.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$target/TXTSETUP.SIF"
|
||||
sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$target/TXTSETUP.SIF"
|
||||
|
||||
rm -rf "$drivers"
|
||||
|
||||
local pid file setup
|
||||
setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini | head -n 1)
|
||||
pid=$(<"$setup")
|
||||
pid="${pid:(-4)}"
|
||||
pid="${pid:0:3}"
|
||||
|
||||
if [[ "$pid" == "270" ]]; then
|
||||
warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation."
|
||||
if [ -n "$setup" ]; then
|
||||
|
||||
pid=$(<"$setup")
|
||||
pid="${pid:(-4)}"
|
||||
pid="${pid:0:3}"
|
||||
|
||||
if [[ "$pid" == "270" ]]; then
|
||||
warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation."
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
mkdir -p "$dir/\$OEM\$"
|
||||
|
||||
if ! addFolder "$dir"; then
|
||||
error "Failed to add OEM folder to image!" && return 1
|
||||
fi
|
||||
@@ -1294,30 +1340,48 @@ prepareInstall() {
|
||||
XHEX=$(printf '%x\n' "$WIDTH")
|
||||
YHEX=$(printf '%x\n' "$HEIGHT")
|
||||
|
||||
local username="Docker"
|
||||
local password="*"
|
||||
local username=""
|
||||
local password=""
|
||||
|
||||
[ -n "$PASSWORD" ] && password="$PASSWORD"
|
||||
[ -n "$USERNAME" ] && username=$(echo "$USERNAME" | sed 's/[^[:alnum:]@!._-]//g')
|
||||
[ -z "$username" ] && username="Docker"
|
||||
|
||||
[ -n "$PASSWORD" ] && password=$(echo "$PASSWORD" | sed 's/"//g')
|
||||
[ -z "$password" ] && password="admin"
|
||||
|
||||
local ip="20.20.20.1"
|
||||
[ -n "${VM_NET_IP:-}" ] && ip="${VM_NET_IP%.*}.1"
|
||||
|
||||
# These are not pirated keys, they come from the official MS documentation.
|
||||
if [[ "${driver,,}" == "xp" ]]; then
|
||||
if [[ "${arch,,}" == "x86" ]]; then
|
||||
# Windows XP Professional x86 generic key (no activation, trial-only)
|
||||
[ -z "$KEY" ] && KEY="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y"
|
||||
else
|
||||
# Windows XP Professional x64 generic key (no activation, trial-only)
|
||||
[ -z "$KEY" ] && KEY="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G"
|
||||
fi
|
||||
else
|
||||
if [[ "${arch,,}" == "x86" ]]; then
|
||||
# Windows Server 2003 Standard x86 generic key (no activation, trial-only)
|
||||
[ -z "$KEY" ] && KEY="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48"
|
||||
else
|
||||
# Windows Server 2003 Standard x64 generic key (no activation, trial-only)
|
||||
[ -z "$KEY" ] && KEY="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY"
|
||||
fi
|
||||
fi
|
||||
case "${driver,,}" in
|
||||
"xp" )
|
||||
|
||||
if [[ "${arch,,}" == "x86" ]]; then
|
||||
# Windows XP Professional x86 generic key (no activation, trial-only)
|
||||
[ -z "$KEY" ] && KEY="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y"
|
||||
else
|
||||
# Windows XP Professional x64 generic key (no activation, trial-only)
|
||||
[ -z "$KEY" ] && KEY="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G"
|
||||
fi ;;
|
||||
|
||||
"2k3" )
|
||||
|
||||
if [[ "${arch,,}" == "x86" ]]; then
|
||||
# Windows Server 2003 Standard x86 generic key (no activation, trial-only)
|
||||
[ -z "$KEY" ] && KEY="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48"
|
||||
else
|
||||
# Windows Server 2003 Standard x64 generic key (no activation, trial-only)
|
||||
[ -z "$KEY" ] && KEY="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY"
|
||||
fi ;;
|
||||
|
||||
"2k" )
|
||||
|
||||
# Windows 2000 Professional x86 generic key
|
||||
KEY="G74HG-XXQTJ-RTX64-QKP3F-HKHXP" ;;
|
||||
|
||||
* ) error "Unknown version: \"$driver\"" && return 1 ;;
|
||||
|
||||
esac
|
||||
|
||||
find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \;
|
||||
|
||||
@@ -1356,7 +1420,7 @@ prepareInstall() {
|
||||
echo " FullName=\"$username\""
|
||||
echo " ComputerName=\"*\""
|
||||
echo " OrgName=\"Windows for Docker\""
|
||||
echo " ProductKey=$KEY"
|
||||
echo " ProductID=$KEY"
|
||||
echo ""
|
||||
echo "[Identification]"
|
||||
echo " JoinWorkgroup = WORKGROUP"
|
||||
@@ -1415,12 +1479,14 @@ prepareInstall() {
|
||||
echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]"
|
||||
echo "\"HideFileExt\"=dword:00000000"
|
||||
echo ""
|
||||
echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer]"
|
||||
echo "\"NoWelcomeScreen\"=\"1\""
|
||||
echo ""
|
||||
echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]"
|
||||
echo "\"DefaultUserName\"=\"$username\""
|
||||
echo "\"DefaultDomainName\"=\"Dockur\""
|
||||
echo "\"AltDefaultUserName\"=\"$username\""
|
||||
echo "\"AltDefaultDomainName\"=\"Dockur\""
|
||||
echo "\"AutoAdminLogon\"=\"1\""
|
||||
echo "\"DefaultUserName\"=\"$username\""
|
||||
echo "\"DefaultPassword\"=\"$password\""
|
||||
echo "\"DefaultDomainName\"=\"Dockur\""
|
||||
echo ""
|
||||
echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{23A77BF7-ED96-40EC-AF06-9B1F4867732A}\0000]"
|
||||
echo "\"DefaultSettings.BitsPerPel\"=dword:00000020"
|
||||
@@ -1491,6 +1557,14 @@ prepareInstall() {
|
||||
echo ""
|
||||
echo "Call Domain.MoveHere(LocalAdminADsPath, \"$username\")"
|
||||
echo ""
|
||||
echo "With (CreateObject(\"Scripting.FileSystemObject\"))"
|
||||
echo " SysRoot = WshShell.ExpandEnvironmentStrings(\"%SystemRoot%\")"
|
||||
echo " Set oFile = .OpenTextFile(SysRoot & \"\system32\drivers\etc\hosts\", 8, true)"
|
||||
echo " oFile.Write(\"$ip host.lan\")"
|
||||
echo " oFile.Close()"
|
||||
echo " Set oFile = Nothing"
|
||||
echo "End With"
|
||||
echo ""
|
||||
} | unix2dos > "$dir/\$OEM\$/admin.vbs"
|
||||
|
||||
{ echo "[COMMANDS]"
|
||||
@@ -1586,7 +1660,9 @@ setMachine() {
|
||||
"win9"* )
|
||||
ETFS="[BOOT]/Boot-1.44M.img" ;;
|
||||
"win2k"* )
|
||||
ETFS="[BOOT]/Boot-NoEmul.img" ;;
|
||||
if ! prepareInstall "$iso" "$dir" "$desc" "2k"; then
|
||||
error "Failed to prepare $desc ISO!" && return 1
|
||||
fi ;;
|
||||
"winxp"* )
|
||||
if ! prepareInstall "$iso" "$dir" "$desc" "xp"; then
|
||||
error "Failed to prepare $desc ISO!" && return 1
|
||||
@@ -1598,10 +1674,20 @@ setMachine() {
|
||||
esac
|
||||
|
||||
case "${id,,}" in
|
||||
"win9"* | "win2k"* )
|
||||
"win9"* )
|
||||
USB="no"
|
||||
VGA="cirrus"
|
||||
DISK_TYPE="auto"
|
||||
ADAPTER="rtl8139"
|
||||
MACHINE="pc-i440fx-2.4"
|
||||
BOOT_MODE="windows_legacy" ;;
|
||||
"win2k"* )
|
||||
VGA="cirrus"
|
||||
MACHINE="pc"
|
||||
USB="pci-ohci"
|
||||
DISK_TYPE="auto"
|
||||
ADAPTER="rtl8139"
|
||||
BOOT_MODE="windows_legacy" ;;
|
||||
"winxp"* | "win2003"* )
|
||||
DISK_TYPE="blk"
|
||||
BOOT_MODE="windows_legacy" ;;
|
||||
|
||||
10
src/entry.sh
10
src/entry.sh
@@ -2,14 +2,16 @@
|
||||
set -Eeuo pipefail
|
||||
|
||||
: "${APP:="Windows"}"
|
||||
: "${PLATFORM:="x64"}"
|
||||
: "${BOOT_MODE:="windows"}"
|
||||
: "${SUPPORT:="https://github.com/dockur/windows"}"
|
||||
|
||||
cd /run
|
||||
|
||||
. utils.sh # Load functions
|
||||
. reset.sh # Initialize system
|
||||
. define.sh # Define versions
|
||||
. mido.sh # Download code
|
||||
. mido.sh # Download Windows
|
||||
. install.sh # Run installation
|
||||
. disk.sh # Initialize disks
|
||||
. display.sh # Initialize graphics
|
||||
@@ -31,8 +33,10 @@ info "Booting ${APP}${BOOT_DESC} using QEMU v$version..."
|
||||
terminal
|
||||
( sleep 30; boot ) &
|
||||
tail -fn +0 "$QEMU_LOG" 2>/dev/null &
|
||||
cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" &
|
||||
wait $! || :
|
||||
cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" | \
|
||||
sed -u -e 's/\x1B\[[=0-9;]*[a-z]//gi' \
|
||||
-e 's/failed to load Boot/skipped Boot/g' \
|
||||
-e 's/0): Not Found/0)/g' & wait $! || :
|
||||
|
||||
sleep 1 & wait $!
|
||||
[ ! -f "$QEMU_END" ] && finish 0
|
||||
|
||||
158
src/install.sh
158
src/install.sh
@@ -10,21 +10,31 @@ EFISYS="efi/microsoft/boot/efisys_noprompt.bin"
|
||||
skipInstall() {
|
||||
|
||||
local iso="$1"
|
||||
local method=""
|
||||
local magic byte
|
||||
local boot="$STORAGE/windows.boot"
|
||||
local previous="$STORAGE/windows.base"
|
||||
|
||||
if [ -f "$previous" ]; then
|
||||
previous=$(<"$previous")
|
||||
previous="${previous//[![:print:]]/}"
|
||||
if [ -n "$previous" ]; then
|
||||
previous="$STORAGE/$previous"
|
||||
if [[ "${previous,,}" != "${iso,,}" ]]; then
|
||||
if [[ "${STORAGE,,}/${previous,,}" != "${iso,,}" ]]; then
|
||||
if [ -f "$boot" ] && hasDisk; then
|
||||
info "Detected that the version was changed, but ignoring this because Windows is already installed."
|
||||
info "Please start with an empty /storage folder, if you want to install a different version of Windows."
|
||||
if [[ "${iso,,}" == "${STORAGE,,}/windows."* ]]; then
|
||||
method="your custom .iso file"
|
||||
else
|
||||
if [[ "${previous,,}" != "windows."* ]]; then
|
||||
method="the VERSION variable"
|
||||
fi
|
||||
fi
|
||||
if [ -n "$method" ]; then
|
||||
info "Detected that $method was changed, but ignoring this because Windows is already installed."
|
||||
info "Please start with an empty /storage folder, if you want to install a different version of Windows."
|
||||
fi
|
||||
return 0
|
||||
fi
|
||||
[ -f "$previous" ] && rm -f "$previous"
|
||||
rm -f "$STORAGE/$previous"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
@@ -118,6 +128,8 @@ finishInstall() {
|
||||
|
||||
rm -f "$STORAGE/windows.old"
|
||||
rm -f "$STORAGE/windows.vga"
|
||||
rm -f "$STORAGE/windows.net"
|
||||
rm -f "$STORAGE/windows.usb"
|
||||
rm -f "$STORAGE/windows.args"
|
||||
rm -f "$STORAGE/windows.base"
|
||||
rm -f "$STORAGE/windows.boot"
|
||||
@@ -160,10 +172,22 @@ finishInstall() {
|
||||
echo "$ARGS" > "$STORAGE/windows.args"
|
||||
fi
|
||||
|
||||
if [ -n "${VGA:-}" ] && [[ "${VGA:-}" != "virtio"* ]]; then
|
||||
echo "$VGA" > "$STORAGE/windows.vga"
|
||||
fi
|
||||
|
||||
if [ -n "${USB:-}" ] && [[ "${USB:-}" != "qemu-xhci"* ]]; then
|
||||
echo "$USB" > "$STORAGE/windows.usb"
|
||||
fi
|
||||
|
||||
if [ -n "${DISK_TYPE:-}" ] && [[ "${DISK_TYPE:-}" != "scsi" ]]; then
|
||||
echo "$DISK_TYPE" > "$STORAGE/windows.type"
|
||||
fi
|
||||
|
||||
if [ -n "${ADAPTER:-}" ] && [[ "${ADAPTER:-}" != "virtio-net-pci" ]]; then
|
||||
echo "$ADAPTER" > "$STORAGE/windows.net"
|
||||
fi
|
||||
|
||||
rm -rf "$TMP"
|
||||
return 0
|
||||
}
|
||||
@@ -175,6 +199,7 @@ abortInstall() {
|
||||
local efi
|
||||
|
||||
[[ "${iso,,}" == *".esd" ]] && exit 60
|
||||
[[ "${UNPACK:-}" == [Yy1]* ]] && exit 60
|
||||
|
||||
efi=$(find "$dir" -maxdepth 1 -type d -iname efi | head -n 1)
|
||||
|
||||
@@ -199,13 +224,19 @@ abortInstall() {
|
||||
|
||||
detectCustom() {
|
||||
|
||||
local file base
|
||||
local dir file base
|
||||
local fname="custom.iso"
|
||||
local boot="$STORAGE/windows.boot"
|
||||
|
||||
CUSTOM=""
|
||||
|
||||
if [ -d "/$fname" ]; then
|
||||
error "The file /$fname has an invalid path!" && return 1
|
||||
dir=$(find / -maxdepth 1 -type d -iname "$fname" | head -n 1)
|
||||
[ ! -d "$dir" ] && dir=$(find "$STORAGE" -maxdepth 1 -type d -iname "$fname" | head -n 1)
|
||||
|
||||
if [ -d "$dir" ]; then
|
||||
if ! hasDisk || [ ! -f "$boot" ]; then
|
||||
error "The bind $dir maps to a file that does not exist!" && return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
file=$(find / -maxdepth 1 -type f -iname "$fname" | head -n 1)
|
||||
@@ -250,12 +281,12 @@ extractESD() {
|
||||
mkdir -p "$dir"
|
||||
|
||||
size=16106127360
|
||||
size_gb=$(( (size + 1073741823)/1073741824 ))
|
||||
size_gb=$(formatBytes "$size")
|
||||
space=$(df --output=avail -B 1 "$dir" | tail -n 1)
|
||||
space_gb=$(( (space + 1073741823)/1073741824 ))
|
||||
space_gb=$(formatBytes "$space")
|
||||
|
||||
if (( size > space )); then
|
||||
error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && return 1
|
||||
error "Not enough free space in $STORAGE, have $space_gb available but need at least $size_gb." && return 1
|
||||
fi
|
||||
|
||||
local esdImageCount
|
||||
@@ -320,7 +351,7 @@ extractImage() {
|
||||
local dir="$2"
|
||||
local version="$3"
|
||||
local desc="local ISO"
|
||||
local size size_gb space space_gb
|
||||
local file size size_gb space space_gb
|
||||
|
||||
if [ -z "$CUSTOM" ]; then
|
||||
desc="downloaded ISO"
|
||||
@@ -341,16 +372,16 @@ extractImage() {
|
||||
mkdir -p "$dir"
|
||||
|
||||
size=$(stat -c%s "$iso")
|
||||
size_gb=$(( (size + 1073741823)/1073741824 ))
|
||||
size_gb=$(formatBytes "$size")
|
||||
space=$(df --output=avail -B 1 "$dir" | tail -n 1)
|
||||
space_gb=$(( (space + 1073741823)/1073741824 ))
|
||||
space_gb=$(formatBytes "$space")
|
||||
|
||||
if ((size<100000000)); then
|
||||
error "Invalid ISO file: Size is smaller than 100 MB" && return 1
|
||||
fi
|
||||
|
||||
if (( size > space )); then
|
||||
error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && return 1
|
||||
error "Not enough free space in $STORAGE, have $space_gb available but need at least $size_gb." && return 1
|
||||
fi
|
||||
|
||||
rm -rf "$dir"
|
||||
@@ -359,7 +390,26 @@ extractImage() {
|
||||
error "Failed to extract ISO file: $iso" && return 1
|
||||
fi
|
||||
|
||||
LABEL=$(isoinfo -d -i "$iso" | sed -n 's/Volume id: //p')
|
||||
if [[ "${UNPACK:-}" != [Yy1]* ]]; then
|
||||
|
||||
LABEL=$(isoinfo -d -i "$iso" | sed -n 's/Volume id: //p')
|
||||
|
||||
else
|
||||
|
||||
file=$(find "$dir" -maxdepth 1 -type f -iname "*.iso" | head -n 1)
|
||||
|
||||
if [ -z "$file" ]; then
|
||||
error "Failed to find any .iso file in archive!" && return 1
|
||||
fi
|
||||
|
||||
if ! 7z x "$file" -o"$dir" > /dev/null; then
|
||||
error "Failed to extract archive!" && return 1
|
||||
fi
|
||||
|
||||
LABEL=$(isoinfo -d -i "$file" | sed -n 's/Volume id: //p')
|
||||
rm -f "$file"
|
||||
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
@@ -494,7 +544,7 @@ setXML() {
|
||||
local file="/custom.xml"
|
||||
|
||||
if [ -d "$file" ]; then
|
||||
warn "The file $file has an invalid path!"
|
||||
error "The bind $file maps to a file that does not exist!" && exit 67
|
||||
fi
|
||||
|
||||
[ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml"
|
||||
@@ -581,6 +631,10 @@ detectImage() {
|
||||
info "Detected: $desc"
|
||||
setXML "" && return 0
|
||||
|
||||
if [[ "$DETECTED" == "win81x86"* ]] || [[ "$DETECTED" == "win10x86"* ]]; then
|
||||
error "The 32-bit version of $desc is not supported!" && return 1
|
||||
fi
|
||||
|
||||
msg="the answer file for $desc was not found ($DETECTED.xml)"
|
||||
local fallback="/run/assets/${DETECTED%%-*}.xml"
|
||||
|
||||
@@ -628,6 +682,10 @@ updateXML() {
|
||||
local language="$2"
|
||||
local culture region user admin pass keyboard
|
||||
|
||||
if [ -n "${VM_NET_IP:-}" ]; then
|
||||
sed -i "s/ 20.20.20.1 / ${VM_NET_IP%.*}.1 /g" "$asset"
|
||||
fi
|
||||
|
||||
[ -z "$HEIGHT" ] && HEIGHT="720"
|
||||
[ -z "$WIDTH" ] && WIDTH="1280"
|
||||
|
||||
@@ -665,16 +723,17 @@ updateXML() {
|
||||
sed -i "s/<Username>Docker<\/Username>/<Username>$user<\/Username>/g" "$asset"
|
||||
fi
|
||||
|
||||
if [ -n "$PASSWORD" ]; then
|
||||
pass=$(printf '%s' "${PASSWORD}Password" | iconv -f utf-8 -t utf-16le | base64 -w 0)
|
||||
admin=$(printf '%s' "${PASSWORD}AdministratorPassword" | iconv -f utf-8 -t utf-16le | base64 -w 0)
|
||||
sed -i "s/<Value>password<\/Value>/<Value>$admin<\/Value>/g" "$asset"
|
||||
sed -i "s/<PlainText>true<\/PlainText>/<PlainText>false<\/PlainText>/g" "$asset"
|
||||
sed -z "s/<Password>...........<Value \/>/<Password>\n <Value>$pass<\/Value>/g" -i "$asset"
|
||||
sed -z "s/<Password>...............<Value \/>/<Password>\n <Value>$pass<\/Value>/g" -i "$asset"
|
||||
sed -z "s/<AdministratorPassword>...........<Value \/>/<AdministratorPassword>\n <Value>$admin<\/Value>/g" -i "$asset"
|
||||
sed -z "s/<AdministratorPassword>...............<Value \/>/<AdministratorPassword>\n <Value>$admin<\/Value>/g" -i "$asset"
|
||||
fi
|
||||
[ -n "$PASSWORD" ] && pass="$PASSWORD" || pass="admin"
|
||||
|
||||
pw=$(printf '%s' "${pass}Password" | iconv -f utf-8 -t utf-16le | base64 -w 0)
|
||||
admin=$(printf '%s' "${pass}AdministratorPassword" | iconv -f utf-8 -t utf-16le | base64 -w 0)
|
||||
|
||||
sed -i "s/<Value>password<\/Value>/<Value>$admin<\/Value>/g" "$asset"
|
||||
sed -i "s/<PlainText>true<\/PlainText>/<PlainText>false<\/PlainText>/g" "$asset"
|
||||
sed -z "s/<Password>...........<Value \/>/<Password>\n <Value>$pw<\/Value>/g" -i "$asset"
|
||||
sed -z "s/<Password>...............<Value \/>/<Password>\n <Value>$pw<\/Value>/g" -i "$asset"
|
||||
sed -z "s/<AdministratorPassword>...........<Value \/>/<AdministratorPassword>\n <Value>$admin<\/Value>/g" -i "$asset"
|
||||
sed -z "s/<AdministratorPassword>...............<Value \/>/<AdministratorPassword>\n <Value>$admin<\/Value>/g" -i "$asset"
|
||||
|
||||
if [ -n "$EDITION" ]; then
|
||||
[[ "${EDITION^^}" == "CORE" ]] && EDITION="STANDARDCORE"
|
||||
@@ -722,7 +781,11 @@ addDriver() {
|
||||
|
||||
if [ -z "$folder" ]; then
|
||||
desc=$(printVersion "$id" "$id")
|
||||
warn "no \"$driver\" driver available for \"$desc\" !" && return 0
|
||||
if [[ "${id,,}" != *"x86"* ]]; then
|
||||
warn "no \"$driver\" driver available for \"$desc\" !" && return 0
|
||||
else
|
||||
warn "no \"$driver\" driver available for the 32-bit version of \"$desc\" !" && return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
[ ! -d "$path/$driver/$folder" ] && return 0
|
||||
@@ -953,12 +1016,12 @@ buildImage() {
|
||||
fi
|
||||
|
||||
size=$(du -h -b --max-depth=0 "$dir" | cut -f1)
|
||||
size_gb=$(( (size + 1073741823)/1073741824 ))
|
||||
size_gb=$(formatBytes "$size")
|
||||
space=$(df --output=avail -B 1 "$TMP" | tail -n 1)
|
||||
space_gb=$(( (space + 1073741823)/1073741824 ))
|
||||
space_gb=$(formatBytes "$space")
|
||||
|
||||
if (( size > space )); then
|
||||
error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && return 1
|
||||
error "Not enough free space in $STORAGE, have $space_gb available but need at least $size_gb." && return 1
|
||||
fi
|
||||
|
||||
if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then
|
||||
@@ -1002,19 +1065,48 @@ bootWindows() {
|
||||
|
||||
if [ -f "$STORAGE/windows.args" ]; then
|
||||
ARGS=$(<"$STORAGE/windows.args")
|
||||
ARGS="${ARGS//[![:print:]]/}"
|
||||
ARGUMENTS="$ARGS ${ARGUMENTS:-}"
|
||||
fi
|
||||
|
||||
if [ -s "$STORAGE/windows.vga" ] && [ -f "$STORAGE/windows.vga" ]; then
|
||||
if [ -z "${VGA:-}" ]; then
|
||||
VGA=$(<"$STORAGE/windows.vga")
|
||||
VGA="${VGA//[![:print:]]/}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -s "$STORAGE/windows.usb" ] && [ -f "$STORAGE/windows.usb" ]; then
|
||||
if [ -z "${USB:-}" ]; then
|
||||
USB=$(<"$STORAGE/windows.usb")
|
||||
USB="${USB//[![:print:]]/}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -s "$STORAGE/windows.net" ] && [ -f "$STORAGE/windows.net" ]; then
|
||||
if [ -z "${ADAPTER:-}" ]; then
|
||||
ADAPTER=$(<"$STORAGE/windows.net")
|
||||
ADAPTER="${ADAPTER//[![:print:]]/}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then
|
||||
[ -z "${DISK_TYPE:-}" ] && DISK_TYPE=$(<"$STORAGE/windows.type")
|
||||
if [ -z "${DISK_TYPE:-}" ]; then
|
||||
DISK_TYPE=$(<"$STORAGE/windows.type")
|
||||
DISK_TYPE="${DISK_TYPE//[![:print:]]/}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then
|
||||
BOOT_MODE=$(<"$STORAGE/windows.mode")
|
||||
BOOT_MODE="${BOOT_MODE//[![:print:]]/}"
|
||||
fi
|
||||
|
||||
if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then
|
||||
[[ "${PLATFORM,,}" == "x64" ]] && MACHINE=$(<"$STORAGE/windows.old")
|
||||
if [[ "${PLATFORM,,}" == "x64" ]]; then
|
||||
MACHINE=$(<"$STORAGE/windows.old")
|
||||
MACHINE="${MACHINE//[![:print:]]/}"
|
||||
fi
|
||||
fi
|
||||
|
||||
return 0
|
||||
|
||||
32
src/mido.sh
32
src/mido.sh
@@ -93,6 +93,7 @@ download_windows() {
|
||||
|
||||
# uuidgen: For MacOS (installed by default) and other systems (e.g. with no /proc) that don't have a kernel interface for generating random UUIDs
|
||||
session_id=$(cat /proc/sys/kernel/random/uuid 2> /dev/null || uuidgen --random)
|
||||
session_id="${session_id//[![:print:]]/}"
|
||||
|
||||
# Get product edition ID for latest release of given Windows version
|
||||
# Product edition ID: This specifies both the Windows release (e.g. 22H2) and edition ("multi-edition" is default, either Home/Pro/Edu/etc., we select "Pro" in the answer files) in one number
|
||||
@@ -313,7 +314,7 @@ getWindows() {
|
||||
info "$msg" && html "$msg"
|
||||
|
||||
case "${version,,}" in
|
||||
"win2008r2" | "win7${PLATFORM,,}"* | "win81${PLATFORM,,}"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* )
|
||||
"win2008r2" | "win81${PLATFORM,,}"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* )
|
||||
if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then
|
||||
error "No download in the $language language available for $edition!"
|
||||
MIDO_URL="" && return 1
|
||||
@@ -341,7 +342,7 @@ getWindows() {
|
||||
"win2025-eval" | "win2022-eval" | "win2019-eval" | "win2019-hv" | "win2016-eval" | "win2012r2-eval" )
|
||||
download_windows_eval "$version" "$lang" "$edition" && return 0
|
||||
;;
|
||||
"win7${PLATFORM,,}"* | "win81${PLATFORM,,}-enterprise"* | "win2008r2" )
|
||||
"win81${PLATFORM,,}-enterprise"* | "win2008r2" )
|
||||
;;
|
||||
* ) error "Invalid VERSION specified, value \"$version\" is not recognized!" ;;
|
||||
esac
|
||||
@@ -471,6 +472,18 @@ getESD() {
|
||||
return 0
|
||||
}
|
||||
|
||||
isCompressed() {
|
||||
|
||||
local file="$1"
|
||||
|
||||
case "${file,,}" in
|
||||
*".7z" | *".zip" | *".rar" | *".lzma" | *".bz" | *".bz2" )
|
||||
return 0 ;;
|
||||
esac
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
verifyFile() {
|
||||
|
||||
local iso="$1"
|
||||
@@ -516,14 +529,16 @@ downloadFile() {
|
||||
local size="$4"
|
||||
local lang="$5"
|
||||
local desc="$6"
|
||||
local rc total progress domain dots space folder
|
||||
local msg="Downloading $desc"
|
||||
local rc total total_gb progress domain dots space folder
|
||||
|
||||
rm -f "$iso"
|
||||
|
||||
if [ -n "$size" ] && [[ "$size" != "0" ]]; then
|
||||
folder=$(dirname -- "$iso")
|
||||
space=$(df --output=avail -B 1 "$folder" | tail -n 1)
|
||||
(( size > space )) && error "Not enough free space left to download file!" && return 1
|
||||
total_gb=$(formatBytes "$space")
|
||||
(( size > space )) && error "Not enough free space to download file, only $total_gb left!" && return 1
|
||||
fi
|
||||
|
||||
# Check if running with interactive TTY or redirected to docker log
|
||||
@@ -533,8 +548,8 @@ downloadFile() {
|
||||
progress="--progress=dot:giga"
|
||||
fi
|
||||
|
||||
local msg="Downloading $desc"
|
||||
html "$msg..."
|
||||
/run/progress.sh "$iso" "$size" "$msg ([P])..." &
|
||||
|
||||
domain=$(echo "$url" | awk -F/ '{print $3}')
|
||||
dots=$(echo "$domain" | tr -cd '.' | wc -c)
|
||||
@@ -545,7 +560,6 @@ downloadFile() {
|
||||
fi
|
||||
|
||||
info "$msg..."
|
||||
/run/progress.sh "$iso" "$size" "$msg ([P])..." &
|
||||
|
||||
{ wget "$url" -O "$iso" -q --timeout=30 --no-http-keep-alive --show-progress "$progress"; rc=$?; } || :
|
||||
|
||||
@@ -553,10 +567,12 @@ downloadFile() {
|
||||
|
||||
if (( rc == 0 )) && [ -f "$iso" ]; then
|
||||
total=$(stat -c%s "$iso")
|
||||
total_gb=$(formatBytes "$total")
|
||||
if [ "$total" -lt 100000000 ]; then
|
||||
error "Invalid download link: $url (is only $total bytes?). Please report this at $SUPPORT/issues." && return 1
|
||||
error "Invalid download link: $url (is only $total_gb ?). Please report this at $SUPPORT/issues." && return 1
|
||||
fi
|
||||
verifyFile "$iso" "$size" "$total" "$sum" || return 1
|
||||
isCompressed "$url" && UNPACK="Y"
|
||||
html "Download finished successfully..." && return 0
|
||||
fi
|
||||
|
||||
@@ -581,12 +597,14 @@ downloadImage() {
|
||||
local msg="Will retry after $delay seconds..."
|
||||
|
||||
if [[ "${version,,}" == "http"* ]]; then
|
||||
|
||||
base=$(basename "$iso")
|
||||
desc=$(fromFile "$base")
|
||||
downloadFile "$iso" "$version" "" "" "" "$desc" && return 0
|
||||
info "$msg" && html "$msg" && sleep "$delay"
|
||||
downloadFile "$iso" "$version" "" "" "" "$desc" && return 0
|
||||
rm -f "$iso"
|
||||
|
||||
return 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ boot() {
|
||||
grep -Fq "BOOTMGR is missing" "$QEMU_PTY" && fail="y"
|
||||
fi
|
||||
if [ -z "$fail" ]; then
|
||||
info "Windows started succesfully, visit http://localhost:8006/ to view the screen..."
|
||||
info "Windows started succesfully, visit http://127.0.0.1:8006/ to view the screen..."
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -14,6 +14,10 @@ if [[ "$DHCP" == [Yy1]* ]]; then
|
||||
interface="$VM_NET_DEV"
|
||||
fi
|
||||
|
||||
if [[ "${NETWORK,,}" == "user"* ]]; then
|
||||
interface="127.0.0.1"
|
||||
fi
|
||||
|
||||
addShare() {
|
||||
local dir="$1"
|
||||
local name="$2"
|
||||
|
||||
Reference in New Issue
Block a user