Skip to content

Commit

Permalink
feat: Automatically execute script after installation (#94)
Browse files Browse the repository at this point in the history
  • Loading branch information
kroese authored Apr 28, 2024
1 parent 210efeb commit 5768ae5
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 3 deletions.
5 changes: 5 additions & 0 deletions assets/win10arm64.xml
Original file line number Diff line number Diff line change
Expand Up @@ -464,6 +464,11 @@
<CommandLine>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</CommandLine>
<Description>Enable File Sharing</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>
</FirstLogonCommands>
</component>
</settings>
Expand Down
5 changes: 5 additions & 0 deletions assets/win11arm64.xml
Original file line number Diff line number Diff line change
Expand Up @@ -488,6 +488,11 @@
<CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine>
<Description>Disable unsupported hardware notifications</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>
</FirstLogonCommands>
</component>
</settings>
Expand Down
15 changes: 12 additions & 3 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -155,9 +155,7 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_

* ### How do I customize the installation?

You can customize any part of the automatic installation, and even execute certain commands at boot if needed.

Download the XML file corresponding to your Windows version, for example [win11arm64.xml](https://raw.githubusercontent.com/dockur/windows-arm/master/assets/win11arm64.xml). Then apply your modifications to it, and add this line to your compose file:
You can customize every setting used by the automatic installation. Download the XML file corresponding to your Windows version, for example [win11arm64.xml](https://raw.githubusercontent.com/dockur/windows/master/assets/win11arm64.xml). Then apply your modifications to it, and add this line to your compose file:

```yaml
volumes:
Expand All @@ -166,6 +164,17 @@ docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --cap-add NET_

Replace the example path `/home/user/custom.xml` with the filename of the modified XML file.

* ### How do I run a script after installation?

To run your own script after installation, you can create a file called `install.bat` and place it in a folder together with other files it needs (programs to install for example). Then bind it in your compose file like this:

```yaml
volumes:
- /home/user/example:/storage/oem
```

The example path `/home/user/example` will be copied to `C:\OEM` during installation and the containing `install.bat` will be executed.

* ### How do I assign an individual IP address to the container?

By default, the container uses bridge networking, which shares the IP address with the host.
Expand Down
33 changes: 33 additions & 0 deletions src/install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -638,6 +638,35 @@ updateImage() {
return 0
}

copyOEM() {
local dir="$1"
local folder="$STORAGE/oem"
local src

[ ! -d "$folder" ] && folder="$STORAGE/OEM"
[ ! -d "$folder" ] && folder="$STORAGE/shared/oem"
[ ! -d "$folder" ] && folder="$STORAGE/shared/OEM"
[ ! -d "$folder" ] && return 0

local msg="Copying OEM folder to image..."
info "$msg" && html "$msg"

src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1)

if [ ! -d "$src" ]; then
error "failed to locate 'sources' folder in ISO image!" && return 1
fi

local dest="$src/\$OEM\$/\$1/"
mkdir -p "$dest"

if ! cp -r "$folder" "$dest"; then
error "Failed to copy OEM folder!" && return 1
fi

return 0
}

buildImage() {

local dir="$1"
Expand Down Expand Up @@ -736,6 +765,10 @@ if ! rm -f "$ISO" 2> /dev/null; then
rm -f "$ISO"
fi

if ! copyOEM "$DIR"; then
exit 63
fi

if ! buildImage "$DIR"; then
exit 65
fi
Expand Down

0 comments on commit 5768ae5

Please sign in to comment.