diff --git a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json
deleted file mode 100644
index cc0e5ae..0000000
--- a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Windows 11 Enterprise",
- "service": "windows",
- "containerEnv": {
- "VERSION": "11e"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json
deleted file mode 100644
index 23e54ff..0000000
--- a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Windows 11 LTSC",
- "service": "windows",
- "containerEnv": {
- "VERSION": "11l"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/030 - Windows 10 Pro/devcontainer.json b/.devcontainer/030 - Windows 10 Pro/devcontainer.json
deleted file mode 100644
index c5a647b..0000000
--- a/.devcontainer/030 - Windows 10 Pro/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Windows 10 Pro",
- "service": "windows",
- "containerEnv": {
- "VERSION": "10"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json
deleted file mode 100644
index 1466e11..0000000
--- a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Windows 10 Enterprise",
- "service": "windows",
- "containerEnv": {
- "VERSION": "10e"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json
deleted file mode 100644
index dfc8f5c..0000000
--- a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Windows 10 LTSC",
- "service": "windows",
- "containerEnv": {
- "VERSION": "10l"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json
deleted file mode 100644
index e58f7ad..0000000
--- a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Windows 8.1 Enterprise",
- "service": "windows",
- "containerEnv": {
- "VERSION": "8e"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json
deleted file mode 100644
index 85878f0..0000000
--- a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Windows 7 Ultimate",
- "service": "windows",
- "containerEnv": {
- "VERSION": "7u"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json
deleted file mode 100644
index b99c942..0000000
--- a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Windows Vista Ultimate",
- "service": "windows",
- "containerEnv": {
- "VERSION": "vu"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/090 - Windows XP Professional/devcontainer.json b/.devcontainer/090 - Windows XP Professional/devcontainer.json
deleted file mode 100644
index a2c51c4..0000000
--- a/.devcontainer/090 - Windows XP Professional/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Windows XP Professional",
- "service": "windows",
- "containerEnv": {
- "VERSION": "xp"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json
deleted file mode 100644
index e5fab13..0000000
--- a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Windows 2000 Professional",
- "service": "windows",
- "containerEnv": {
- "VERSION": "2k"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/110 - Windows Server 2025/devcontainer.json b/.devcontainer/110 - Windows Server 2025/devcontainer.json
deleted file mode 100644
index 96089cc..0000000
--- a/.devcontainer/110 - Windows Server 2025/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Windows Server 2025",
- "service": "windows",
- "containerEnv": {
- "VERSION": "2025"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/120 - Windows Server 2022/devcontainer.json b/.devcontainer/120 - Windows Server 2022/devcontainer.json
deleted file mode 100644
index 9897a67..0000000
--- a/.devcontainer/120 - Windows Server 2022/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Windows Server 2022",
- "service": "windows",
- "containerEnv": {
- "VERSION": "2022"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/130 - Windows Server 2019/devcontainer.json b/.devcontainer/130 - Windows Server 2019/devcontainer.json
deleted file mode 100644
index 9903599..0000000
--- a/.devcontainer/130 - Windows Server 2019/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Windows Server 2019",
- "service": "windows",
- "containerEnv": {
- "VERSION": "2019"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/140 - Windows Server 2016/devcontainer.json b/.devcontainer/140 - Windows Server 2016/devcontainer.json
deleted file mode 100644
index 614b171..0000000
--- a/.devcontainer/140 - Windows Server 2016/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Windows Server 2016",
- "service": "windows",
- "containerEnv": {
- "VERSION": "2016"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json
deleted file mode 100644
index 158036c..0000000
--- a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Windows Server 2012 R2",
- "service": "windows",
- "containerEnv": {
- "VERSION": "2012"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json
deleted file mode 100644
index 5dc1af6..0000000
--- a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Windows Server 2008 R2",
- "service": "windows",
- "containerEnv": {
- "VERSION": "2008"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/170 - Windows Server 2003/devcontainer.json b/.devcontainer/170 - Windows Server 2003/devcontainer.json
deleted file mode 100644
index c47effb..0000000
--- a/.devcontainer/170 - Windows Server 2003/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Windows Server 2003",
- "service": "windows",
- "containerEnv": {
- "VERSION": "2003"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/180 - Tiny11/devcontainer.json b/.devcontainer/180 - Tiny11/devcontainer.json
deleted file mode 100644
index 225a746..0000000
--- a/.devcontainer/180 - Tiny11/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Tiny11",
- "service": "windows",
- "containerEnv": {
- "VERSION": "tiny11"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/190 - Tiny11 Core/devcontainer.json b/.devcontainer/190 - Tiny11 Core/devcontainer.json
deleted file mode 100644
index 78da098..0000000
--- a/.devcontainer/190 - Tiny11 Core/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Tiny11 Core",
- "service": "windows",
- "containerEnv": {
- "VERSION": "core11"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/200 - Tiny11 Nano/devcontainer.json b/.devcontainer/200 - Tiny11 Nano/devcontainer.json
deleted file mode 100644
index c7fdca9..0000000
--- a/.devcontainer/200 - Tiny11 Nano/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Tiny11 Nano",
- "service": "windows",
- "containerEnv": {
- "VERSION": "nano11"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/210 - Tiny10/devcontainer.json b/.devcontainer/210 - Tiny10/devcontainer.json
deleted file mode 100644
index 3df1b88..0000000
--- a/.devcontainer/210 - Tiny10/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Tiny10",
- "service": "windows",
- "containerEnv": {
- "VERSION": "tiny10"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "../codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.devcontainer/codespaces.yml b/.devcontainer/codespaces.yml
deleted file mode 100644
index 85e3f64..0000000
--- a/.devcontainer/codespaces.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-services:
- windows:
- container_name: windows
- image: ghcr.io/dockur/windows
- environment:
- RAM_SIZE: "half"
- DISK_SIZE: "max"
- CPU_CORES: "max"
- devices:
- - /dev/kvm
- - /dev/net/tun
- cap_add:
- - NET_ADMIN
- ports:
- - 8006:8006
- - 3389:3389/tcp
- - 3389:3389/udp
- volumes:
- - ./windows:/storage
- restart: on-failure
- stop_grace_period: 2m
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
deleted file mode 100644
index d7c98a8..0000000
--- a/.devcontainer/devcontainer.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Windows 11 Pro",
- "service": "windows",
- "containerEnv": {
- "VERSION": "11"
- },
- "forwardPorts": [8006],
- "portsAttributes": {
- "8006": {
- "label": "Web",
- "onAutoForward": "notify"
- }
- },
- "otherPortsAttributes": {
- "onAutoForward": "ignore"
- },
- "dockerComposeFile": "codespaces.yml",
- "workspaceFolder": "/workspaces/windows",
- "initializeCommand": "docker system prune --all --force"
-}
diff --git a/.dockerignore b/.dockerignore
index 154d44a..258778b 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,5 +1,4 @@
.dockerignore
-.devcontainer
.git
.github
.gitignore
diff --git a/.github/ISSUE_TEMPLATE/1-issue.yml b/.github/ISSUE_TEMPLATE/1-issue.yml
index 87860c9..68f19b7 100644
--- a/.github/ISSUE_TEMPLATE/1-issue.yml
+++ b/.github/ISSUE_TEMPLATE/1-issue.yml
@@ -21,7 +21,6 @@ body:
attributes:
label: Docker compose
description: The compose file (or otherwise the `docker run` command used).
- render: yaml
validations:
required: true
- type: textarea
@@ -29,7 +28,6 @@ body:
attributes:
label: Docker log
description: The logfile of the container (as shown by `docker logs windows`).
- render: shell
validations:
required: true
- type: textarea
diff --git a/.github/ISSUE_TEMPLATE/3-bug.yml b/.github/ISSUE_TEMPLATE/3-bug.yml
index f614f27..131742c 100644
--- a/.github/ISSUE_TEMPLATE/3-bug.yml
+++ b/.github/ISSUE_TEMPLATE/3-bug.yml
@@ -23,7 +23,6 @@ body:
attributes:
label: Docker compose
description: The compose file (or otherwise the `docker run` command used).
- render: yaml
validations:
required: true
- type: textarea
@@ -31,7 +30,6 @@ body:
attributes:
label: Docker log
description: The logfile of the container (as shown by `docker logs windows`).
- render: shell
validations:
required: true
- type: textarea
diff --git a/.github/winboat.png b/.github/winboat.png
deleted file mode 100644
index 2b5f6db..0000000
Binary files a/.github/winboat.png and /dev/null differ
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 27c6385..8731ab4 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -2,6 +2,16 @@ name: Build
on:
workflow_dispatch:
+ push:
+ branches:
+ - master
+ paths-ignore:
+ - '**/*.md'
+ - '**/*.yml'
+ - '.gitignore'
+ - '.dockerignore'
+ - '.github/**'
+ - '.github/workflows/**'
concurrency:
group: build
@@ -22,7 +32,7 @@ jobs:
steps:
-
name: Checkout
- uses: actions/checkout@v5
+ uses: actions/checkout@v4
with:
fetch-depth: 0
-
diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml
index 9e9d278..b132f31 100644
--- a/.github/workflows/check.yml
+++ b/.github/workflows/check.yml
@@ -7,29 +7,19 @@ jobs:
name: shellcheck
runs-on: ubuntu-latest
steps:
- -
- name: Checkout
- uses: actions/checkout@v5
- -
- name: Run ShellCheck
+ - uses: actions/checkout@v4
+ - name: Run ShellCheck
uses: ludeeus/action-shellcheck@master
env:
SHELLCHECK_OPTS: -x --source-path=src -e SC1091 -e SC2001 -e SC2002 -e SC2034 -e SC2064 -e SC2153 -e SC2317 -e SC2028
- -
- name: Lint Dockerfile
- uses: hadolint/hadolint-action@v3.3.0
- with:
- dockerfile: Dockerfile
- ignore: DL3006,DL3008
- failure-threshold: warning
- -
- name: Validate XML
+ - name: Validate XML
uses: action-pack/valid-xml@v1
with:
path: "assets"
file-endings: ".xml"
- -
- name: Validate JSON and YML files
- uses: GrantBirki/json-yaml-validate@v4
+ - name: Lint Dockerfile
+ uses: hadolint/hadolint-action@v3.1.0
with:
- yaml_exclude_regex: ".*\\kubernetes\\.yml$"
+ dockerfile: Dockerfile
+ ignore: DL3006,DL3008
+ failure-threshold: warning
diff --git a/.github/workflows/hub.yml b/.github/workflows/hub.yml
index 0b2c17e..0e0bcd1 100644
--- a/.github/workflows/hub.yml
+++ b/.github/workflows/hub.yml
@@ -12,10 +12,10 @@ jobs:
dockerHubDescription:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v4
-
name: Docker Hub Description
- uses: peter-evans/dockerhub-description@v5
+ uses: peter-evans/dockerhub-description@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
diff --git a/.github/workflows/review.yml b/.github/workflows/review.yml
deleted file mode 100644
index 51f8503..0000000
--- a/.github/workflows/review.yml
+++ /dev/null
@@ -1,66 +0,0 @@
-on:
- pull_request:
-
-name: "Review"
-
-permissions:
- contents: read
- pull-requests: write
- checks: write
-
-jobs:
- review:
- name: review
- runs-on: ubuntu-latest
- steps:
- -
- name: Checkout
- uses: actions/checkout@v5
- -
- name: Spelling
- uses: reviewdog/action-misspell@v1
- with:
- locale: "US"
- level: warning
- pattern: |
- *.md
- *.sh
- reporter: github-pr-review
- github_token: ${{ secrets.REPO_ACCESS_TOKEN }}
- -
- name: Hadolint
- uses: reviewdog/action-hadolint@v1
- with:
- level: warning
- reporter: github-pr-review
- hadolint_ignore: DL3006 DL3008
- github_token: ${{ secrets.REPO_ACCESS_TOKEN }}
- -
- name: YamlLint
- uses: reviewdog/action-yamllint@v1
- with:
- level: warning
- reporter: github-pr-review
- github_token: ${{ secrets.REPO_ACCESS_TOKEN }}
- -
- name: ActionLint
- uses: reviewdog/action-actionlint@v1
- with:
- level: warning
- reporter: github-pr-review
- github_token: ${{ secrets.REPO_ACCESS_TOKEN }}
- -
- name: Shellformat
- uses: reviewdog/action-shfmt@v1
- with:
- level: warning
- shfmt_flags: "-i 2 -ci -bn"
- github_token: ${{ secrets.REPO_ACCESS_TOKEN }}
- -
- name: Shellcheck
- uses: reviewdog/action-shellcheck@v1
- with:
- level: warning
- reporter: github-pr-review
- shellcheck_flags: -x -e SC1091 -e SC2001 -e SC2002 -e SC2034 -e SC2064 -e SC2153 -e SC2317 -e SC2028
- github_token: ${{ secrets.REPO_ACCESS_TOKEN }}
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index c275f1a..4903636 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -1,6 +1,12 @@
on:
workflow_dispatch:
pull_request:
+ paths:
+ - '**/*.sh'
+ - '**/*.xml'
+ - '.github/workflows/test.yml'
+ - '.github/workflows/check.yml'
+ - 'Dockerfile'
name: "Test"
permissions: {}
diff --git a/Dockerfile b/Dockerfile
index bf6dab2..5360ad1 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,11 +1,8 @@
-# syntax=docker/dockerfile:1
-
ARG VERSION_ARG="latest"
FROM scratch AS build-amd64
-COPY --from=qemux/qemu:7.27 / /
+COPY --from=qemux/qemu:7.00 / /
-ARG TARGETARCH
ARG DEBCONF_NOWARNINGS="yes"
ARG DEBIAN_FRONTEND="noninteractive"
ARG DEBCONF_NONINTERACTIVE_SEEN="true"
@@ -13,21 +10,26 @@ 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 && \
- wget "https://github.com/gershnik/wsdd-native/releases/download/v1.22/wsddn_1.22_${TARGETARCH}.deb" -O /tmp/wsddn.deb -q && \
- dpkg -i /tmp/wsddn.deb && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
COPY --chmod=755 ./src /run/
COPY --chmod=755 ./assets /run/assets
-ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.48-0/virtio-win-1.9.48.tar.xz /var/drivers.txz
+ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.45-0/virtio-win-1.9.45.tar.xz /drivers.txz
FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64
FROM build-${TARGETARCH}
@@ -36,7 +38,7 @@ ARG VERSION_ARG="0.00"
RUN echo "$VERSION_ARG" > /run/version
VOLUME /storage
-EXPOSE 3389 8006
+EXPOSE 8006 3389
ENV VERSION="11"
ENV RAM_SIZE="4G"
diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml
index ee75f27..df17cbe 100644
--- a/assets/win10x64-enterprise-eval.xml
+++ b/assets/win10x64-enterprise-eval.xml
@@ -323,6 +323,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -355,81 +360,61 @@
9
- reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
- Hide Copilot button
-
-
- 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 11
+ 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 12
+ 11
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 13
+ 12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
- 14
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 15
+ 13
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 16
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 17
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 18
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 19
+ 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 20
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 21
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
- Disable Network Discovery popup
-
-
- 22
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 23
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 24
+ 20
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml
index 5e5eb8c..5b60828 100644
--- a/assets/win10x64-enterprise.xml
+++ b/assets/win10x64-enterprise.xml
@@ -326,6 +326,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -358,81 +363,61 @@
9
- reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
- Hide Copilot button
-
-
- 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 11
+ 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 12
+ 11
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 13
+ 12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
- 14
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 15
+ 13
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 16
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 17
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 18
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 19
+ 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 20
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 21
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
- Disable Network Discovery popup
-
-
- 22
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 23
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 24
+ 20
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml
index 00a049e..9516684 100644
--- a/assets/win10x64-iot.xml
+++ b/assets/win10x64-iot.xml
@@ -332,6 +332,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -364,81 +369,61 @@
9
- reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
- Hide Copilot button
-
-
- 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 11
+ 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 12
+ 11
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 13
+ 12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
- 14
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 15
+ 13
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 16
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 17
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 18
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 19
+ 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 20
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 21
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
- Disable Network Discovery popup
-
-
- 22
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 23
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 24
+ 20
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml
index e77dd6a..108db1f 100644
--- a/assets/win10x64-ltsc.xml
+++ b/assets/win10x64-ltsc.xml
@@ -329,6 +329,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -361,81 +366,61 @@
9
- reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
- Hide Copilot button
-
-
- 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 11
+ 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 12
+ 11
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 13
+ 12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
- 14
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 15
+ 13
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 16
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 17
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 18
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 19
+ 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 20
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 21
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
- Disable Network Discovery popup
-
-
- 22
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 23
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 24
+ 20
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win10x64.xml b/assets/win10x64.xml
index 7c21359..0b19f99 100644
--- a/assets/win10x64.xml
+++ b/assets/win10x64.xml
@@ -326,6 +326,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -358,81 +363,61 @@
9
- reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
- Hide Copilot button
-
-
- 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 11
+ 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 12
+ 11
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 13
+ 12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
- 14
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 15
+ 13
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 16
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 17
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 18
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 19
+ 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 20
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 21
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
- Disable Network Discovery popup
-
-
- 22
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 23
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 24
+ 20
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml
index 39c3f02..034fd6a 100644
--- a/assets/win11x64-enterprise-eval.xml
+++ b/assets/win11x64-enterprise-eval.xml
@@ -351,6 +351,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f
Disable SMB signing requirement
+
+ 3
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
4
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -358,7 +363,7 @@
5
- powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1
+ cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
Password Never Expires
@@ -378,91 +383,76 @@
9
- reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
- Hide Copilot button
-
-
- 10
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f
Show file extensions in Explorer
- 11
+ 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 12
+ 11
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 13
+ 12
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 14
+ 13
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
Enable RemoteAPP to launch unlisted programs
- 15
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 16
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 17
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 18
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 19
+ 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 20
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 21
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 22
+ 20
reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f
Disable unsupported hardware notifications
- 23
+ 21
reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f
Disable unsupported hardware notifications
- 24
+ 22
cmd /C rd /q C:\Windows.old
Remove empty Windows.old folder
- 25
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 26
+ 23
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml
index bafed49..284e510 100644
--- a/assets/win11x64-enterprise.xml
+++ b/assets/win11x64-enterprise.xml
@@ -354,6 +354,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f
Disable SMB signing requirement
+
+ 3
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
4
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -361,7 +366,7 @@
5
- powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1
+ cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
Password Never Expires
@@ -381,91 +386,76 @@
9
- reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
- Hide Copilot button
-
-
- 10
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f
Show file extensions in Explorer
- 11
+ 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 12
+ 11
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 13
+ 12
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 14
+ 13
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
Enable RemoteAPP to launch unlisted programs
- 15
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 16
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 17
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 18
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 19
+ 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 20
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 21
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 22
+ 20
reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f
Disable unsupported hardware notifications
- 23
+ 21
reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f
Disable unsupported hardware notifications
- 24
+ 22
cmd /C rd /q C:\Windows.old
Remove empty Windows.old folder
- 25
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 26
+ 23
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml
index d6825d0..46c8bd7 100644
--- a/assets/win11x64-iot.xml
+++ b/assets/win11x64-iot.xml
@@ -354,6 +354,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f
Disable SMB signing requirement
+
+ 3
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
4
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -361,7 +366,7 @@
5
- powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1
+ cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
Password Never Expires
@@ -381,91 +386,76 @@
9
- reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
- Hide Copilot button
-
-
- 10
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f
Show file extensions in Explorer
- 11
+ 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 12
+ 11
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 13
+ 12
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 14
+ 13
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
Enable RemoteAPP to launch unlisted programs
- 15
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 16
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 17
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 18
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 19
+ 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 20
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 21
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 22
+ 20
reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f
Disable unsupported hardware notifications
- 23
+ 21
reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f
Disable unsupported hardware notifications
- 24
+ 22
cmd /C rd /q C:\Windows.old
Remove empty Windows.old folder
- 25
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 26
+ 23
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml
index a9a6ce7..4d56000 100644
--- a/assets/win11x64-ltsc.xml
+++ b/assets/win11x64-ltsc.xml
@@ -354,6 +354,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f
Disable SMB signing requirement
+
+ 3
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
4
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -361,7 +366,7 @@
5
- powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1
+ cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
Password Never Expires
@@ -381,91 +386,76 @@
9
- reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
- Hide Copilot button
-
-
- 10
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f
Show file extensions in Explorer
- 11
+ 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 12
+ 11
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 13
+ 12
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 14
+ 13
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
Enable RemoteAPP to launch unlisted programs
- 15
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 16
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 17
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 18
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 19
+ 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 20
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 21
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 22
+ 20
reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f
Disable unsupported hardware notifications
- 23
+ 21
reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f
Disable unsupported hardware notifications
- 24
+ 22
cmd /C rd /q C:\Windows.old
Remove empty Windows.old folder
- 25
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 26
+ 23
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win11x64.xml b/assets/win11x64.xml
index 8082c7c..fe14705 100644
--- a/assets/win11x64.xml
+++ b/assets/win11x64.xml
@@ -354,6 +354,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f
Disable SMB signing requirement
+
+ 3
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
4
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -361,7 +366,7 @@
5
- powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1
+ cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
Password Never Expires
@@ -381,91 +386,76 @@
9
- reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
- Hide Copilot button
-
-
- 10
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f
Show file extensions in Explorer
- 11
+ 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 12
+ 11
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 13
+ 12
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 14
+ 13
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
Enable RemoteAPP to launch unlisted programs
- 15
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 16
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 17
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 18
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 19
+ 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 20
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 21
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 22
+ 20
reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f
Disable unsupported hardware notifications
- 23
+ 21
reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f
Disable unsupported hardware notifications
- 24
+ 22
cmd /C rd /q C:\Windows.old
Remove empty Windows.old folder
- 25
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 26
+ 23
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2008r2-eval.xml b/assets/win2008r2-eval.xml
index 09a23ce..ed35737 100644
--- a/assets/win2008r2-eval.xml
+++ b/assets/win2008r2-eval.xml
@@ -203,6 +203,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -266,35 +271,25 @@
15
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
16
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 18
+ 17
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 19
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 20
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 21
+ 19
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml
index 5dee0a5..bd75078 100644
--- a/assets/win2008r2.xml
+++ b/assets/win2008r2.xml
@@ -206,6 +206,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -269,35 +274,25 @@
15
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
16
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 18
+ 17
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 19
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 20
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 21
+ 19
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml
index 6351559..fcb7c32 100644
--- a/assets/win2012r2-eval.xml
+++ b/assets/win2012r2-eval.xml
@@ -236,6 +236,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -284,40 +289,25 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
13
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 14
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 15
+ 14
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 16
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
- Disable Network Discovery popup
-
-
- 17
+ 15
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 18
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 19
+ 16
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2012r2.xml b/assets/win2012r2.xml
index bb3dd70..dea2c37 100644
--- a/assets/win2012r2.xml
+++ b/assets/win2012r2.xml
@@ -239,6 +239,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -287,40 +292,25 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
13
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 14
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 15
+ 14
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 16
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
- Disable Network Discovery popup
-
-
- 17
+ 15
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 18
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 19
+ 16
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml
index d788960..66fc244 100644
--- a/assets/win2016-eval.xml
+++ b/assets/win2016-eval.xml
@@ -236,6 +236,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -284,60 +289,45 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
13
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 15
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 16
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 17
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 18
+ 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 19
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 20
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
- Disable Network Discovery popup
-
-
- 21
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 22
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 23
+ 20
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2016.xml b/assets/win2016.xml
index e055e00..1336e3f 100644
--- a/assets/win2016.xml
+++ b/assets/win2016.xml
@@ -239,6 +239,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -287,60 +292,45 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
13
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 15
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 16
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 17
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 18
+ 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 19
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 20
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
- Disable Network Discovery popup
-
-
- 21
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 22
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 23
+ 20
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml
index 332d974..e9aebfd 100644
--- a/assets/win2019-eval.xml
+++ b/assets/win2019-eval.xml
@@ -240,6 +240,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -288,60 +293,45 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
13
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 15
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 16
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 17
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 18
+ 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 19
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 20
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
- Disable Network Discovery popup
-
-
- 21
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 22
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 23
+ 20
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2019-hv.xml b/assets/win2019-hv.xml
index 2fb6e32..3ce3690 100644
--- a/assets/win2019-hv.xml
+++ b/assets/win2019-hv.xml
@@ -159,11 +159,6 @@
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f
Set Network Location to Home
-
- 2
- dism.exe /online /Disable-Feature /FeatureName:Microsoft-Hyper-V /NoRestart
- Disable Hyper-V role
-
@@ -245,6 +240,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -293,60 +293,45 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
13
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 15
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 16
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 17
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 18
+ 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 19
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 20
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
- Disable Network Discovery popup
-
-
- 21
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 22
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 23
+ 20
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2019.xml b/assets/win2019.xml
index b5d8235..aa43463 100644
--- a/assets/win2019.xml
+++ b/assets/win2019.xml
@@ -243,6 +243,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -291,60 +296,45 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
13
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 15
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 16
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 17
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 18
+ 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 19
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 20
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
- Disable Network Discovery popup
-
-
- 21
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 22
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 23
+ 20
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml
index 5748cb4..782752e 100644
--- a/assets/win2022-eval.xml
+++ b/assets/win2022-eval.xml
@@ -240,6 +240,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -288,60 +293,45 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
13
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 15
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 16
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 17
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 18
+ 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 19
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 20
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
- Disable Network Discovery popup
-
-
- 21
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 22
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 23
+ 20
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2022.xml b/assets/win2022.xml
index eac9414..3b61f90 100644
--- a/assets/win2022.xml
+++ b/assets/win2022.xml
@@ -243,6 +243,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -291,60 +296,45 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
13
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
Remove Search from the Taskbar
- 15
+ 14
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 16
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 17
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 18
+ 17
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 19
+ 18
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 20
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
- Disable Network Discovery popup
-
-
- 21
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 22
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 23
+ 20
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml
index 5b92f00..ebeb7a5 100644
--- a/assets/win2025-eval.xml
+++ b/assets/win2025-eval.xml
@@ -250,6 +250,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f
Disable SMB signing requirement
+
+ 3
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
4
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -257,7 +262,7 @@
5
- powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1
+ cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
Password Never Expires
@@ -277,81 +282,71 @@
9
- reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
- Hide Copilot button
-
-
- 10
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f
Show file extensions in Explorer
- 11
+ 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 12
+ 11
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 13
+ 12
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 14
+ 13
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
Enable RemoteAPP to launch unlisted programs
- 15
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
+ 14
+ reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
+ Remove Search from the Taskbar
- 16
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 17
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 18
+ 17
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 19
+ 18
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 20
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 21
+ 20
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 22
+ 21
cmd /C rd /q C:\Windows.old
Remove empty Windows.old folder
- 23
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 24
+ 22
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win2025.xml b/assets/win2025.xml
index 2796db6..6ac67e4 100644
--- a/assets/win2025.xml
+++ b/assets/win2025.xml
@@ -253,6 +253,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f
Disable SMB signing requirement
+
+ 3
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
4
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -260,7 +265,7 @@
5
- powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1
+ cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
Password Never Expires
@@ -280,81 +285,71 @@
9
- reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f
- Hide Copilot button
-
-
- 10
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f
Show file extensions in Explorer
- 11
+ 10
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f
Zero Hibernation File
- 12
+ 11
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f
Disable Hibernation
- 13
+ 12
cmd /C POWERCFG -X -standby-timeout-ac 0
Disable Sleep
- 14
+ 13
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
Enable RemoteAPP to launch unlisted programs
- 15
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
+ 14
+ reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f
+ Remove Search from the Taskbar
- 16
+ 15
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f
Remove Task View from the Taskbar
- 17
+ 16
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f
Remove Widgets from the Taskbar
- 18
+ 17
reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f
Remove Chat from the Taskbar
- 19
+ 18
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 20
+ 19
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 21
+ 20
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 22
+ 21
cmd /C rd /q C:\Windows.old
Remove empty Windows.old folder
- 23
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 24
+ 22
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win7x64-enterprise-eval.xml b/assets/win7x64-enterprise-eval.xml
index c3cc15b..fdfd002 100644
--- a/assets/win7x64-enterprise-eval.xml
+++ b/assets/win7x64-enterprise-eval.xml
@@ -197,6 +197,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -269,11 +274,6 @@
17
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 18
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win7x64-enterprise.xml b/assets/win7x64-enterprise.xml
index b362a9f..14c4060 100644
--- a/assets/win7x64-enterprise.xml
+++ b/assets/win7x64-enterprise.xml
@@ -201,6 +201,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -273,11 +278,6 @@
17
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 18
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml
index 2ee085a..f3c1ae3 100644
--- a/assets/win7x64-ultimate.xml
+++ b/assets/win7x64-ultimate.xml
@@ -201,6 +201,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -273,11 +278,6 @@
17
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 18
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win7x64.xml b/assets/win7x64.xml
index 3769dfd..b9f2908 100644
--- a/assets/win7x64.xml
+++ b/assets/win7x64.xml
@@ -201,6 +201,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -273,11 +278,6 @@
17
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 18
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win7x86-enterprise.xml b/assets/win7x86-enterprise.xml
index 7ac8ef0..ef606e5 100644
--- a/assets/win7x86-enterprise.xml
+++ b/assets/win7x86-enterprise.xml
@@ -201,6 +201,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -273,11 +278,6 @@
17
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 18
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win7x86-ultimate.xml b/assets/win7x86-ultimate.xml
index 419a508..f0748cd 100644
--- a/assets/win7x86-ultimate.xml
+++ b/assets/win7x86-ultimate.xml
@@ -201,6 +201,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -273,11 +278,6 @@
17
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 18
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win7x86.xml b/assets/win7x86.xml
index bae5a8f..c5cd323 100644
--- a/assets/win7x86.xml
+++ b/assets/win7x86.xml
@@ -201,6 +201,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -273,11 +278,6 @@
17
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 18
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml
index 745fd9d..2fe8c73 100644
--- a/assets/win81x64-enterprise-eval.xml
+++ b/assets/win81x64-enterprise-eval.xml
@@ -221,6 +221,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -269,40 +274,25 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
13
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 14
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 15
+ 14
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 16
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
- Disable Network Discovery popup
-
-
- 17
+ 15
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 18
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 19
+ 16
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win81x64-enterprise.xml b/assets/win81x64-enterprise.xml
index a073c38..d6c72dc 100644
--- a/assets/win81x64-enterprise.xml
+++ b/assets/win81x64-enterprise.xml
@@ -224,6 +224,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -272,40 +277,25 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
13
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 14
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 15
+ 14
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 16
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
- Disable Network Discovery popup
-
-
- 17
+ 15
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 18
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 19
+ 16
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/win81x64.xml b/assets/win81x64.xml
index 6b45785..e5e268e 100644
--- a/assets/win81x64.xml
+++ b/assets/win81x64.xml
@@ -231,6 +231,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f
@@ -279,40 +284,25 @@
12
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
13
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 14
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f
Turn off Windows Update auto download
- 15
+ 14
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 16
- reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
- Disable Network Discovery popup
-
-
- 17
+ 15
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 18
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 19
+ 16
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/winvistax64-enterprise.xml b/assets/winvistax64-enterprise.xml
index a3dac19..50527a0 100644
--- a/assets/winvistax64-enterprise.xml
+++ b/assets/winvistax64-enterprise.xml
@@ -150,6 +150,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -233,30 +238,20 @@
19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
20
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 22
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 23
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 24
+ 22
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/winvistax64-ultimate.xml b/assets/winvistax64-ultimate.xml
index eb12e60..14c627d 100644
--- a/assets/winvistax64-ultimate.xml
+++ b/assets/winvistax64-ultimate.xml
@@ -150,6 +150,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -233,30 +238,20 @@
19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
20
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 22
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 23
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 24
+ 22
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml
index ad2ac70..f753ea3 100644
--- a/assets/winvistax64.xml
+++ b/assets/winvistax64.xml
@@ -150,6 +150,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -233,30 +238,20 @@
19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
20
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 22
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 23
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 24
+ 22
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/winvistax86-enterprise.xml b/assets/winvistax86-enterprise.xml
index 5092331..d087355 100644
--- a/assets/winvistax86-enterprise.xml
+++ b/assets/winvistax86-enterprise.xml
@@ -150,6 +150,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -233,30 +238,20 @@
19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
20
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 22
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 23
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 24
+ 22
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/winvistax86-ultimate.xml b/assets/winvistax86-ultimate.xml
index 97ad23e..417722e 100644
--- a/assets/winvistax86-ultimate.xml
+++ b/assets/winvistax86-ultimate.xml
@@ -150,6 +150,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -233,30 +238,20 @@
19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
20
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 22
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 23
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 24
+ 22
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/assets/winvistax86.xml b/assets/winvistax86.xml
index ade1942..172e5dd 100644
--- a/assets/winvistax86.xml
+++ b/assets/winvistax86.xml
@@ -150,6 +150,11 @@
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f
Allow guest access to network shares
+
+ 2
+ reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f
+ Allow RDP login with blank password
+
3
cmd /C wmic useraccount where name="Docker" set PasswordExpires=false
@@ -233,30 +238,20 @@
19
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f
- Enable RemoteApp to launch unlisted programs
+ Enable RemoteAPP to launch unlisted programs
20
- reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f
- Disable RemoteApp allowlist
-
-
- 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes
Enable Network Discovery
- 22
+ 21
netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes
Enable File Sharing
- 23
- cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data
- Create desktop shortcut to shared folder
-
-
- 24
+ 22
cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"
Execute custom script from the OEM folder if exists
diff --git a/readme.md b/readme.md
index adbb6bf..880675d 100644
--- a/readme.md
+++ b/readme.md
@@ -26,7 +26,7 @@ Windows inside a Docker container.
## Usage 🐳
-##### Via Docker Compose:
+Via Docker Compose:
```yaml
services:
@@ -50,25 +50,27 @@ services:
stop_grace_period: 2m
```
-##### Via Docker CLI:
+Via Docker CLI:
```bash
-docker run -it --rm --name windows -e "VERSION=11" -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v "${PWD:-.}/windows:/storage" --stop-timeout 120 docker.io/dockurr/windows
+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
```
-##### Via Github Codespaces:
+## Compatibility ⚙️
-[](https://codespaces.new/dockur/windows)
-
-##### Via a graphical installer:
-
-[](https://winboat.app)
+| **Product** | **Platform** | |
+|---|---|---|
+| Docker Engine | Linux| ✅ |
+| Docker Desktop | Linux | ❌ |
+| Docker Desktop | macOS | ❌ |
+| Docker Desktop | Windows 11 | ✅ |
+| Docker Desktop | Windows 10 | ❌ |
## FAQ 💬
@@ -76,7 +78,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://127.0.0.1:8006/) using your web browser.
+ - Start the container and connect to [port 8006](http://localhost:8006) using your web browser.
- Sit back and relax while the magic happens, the whole installation will be performed fully automatic.
@@ -95,29 +97,28 @@ 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 | 7.2 GB |
- | `11l` | Windows 11 LTSC | 4.7 GB |
- | `11e` | Windows 11 Enterprise | 6.6 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 |
- | `7u` | Windows 7 Ultimate | 3.1 GB |
- | `vu` | Windows Vista Ultimate | 3.0 GB |
- | `xp` | Windows XP Professional | 0.6 GB |
- | `2k` | Windows 2000 Professional | 0.4 GB |
- ||||
- | `2025` | Windows Server 2025 | 6.7 GB |
- | `2022` | Windows Server 2022 | 6.0 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 |
+ ||||
+ | `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/).
@@ -143,24 +144,27 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
```
> [!TIP]
-> This can also be used to resize the existing disk to a larger capacity without any data loss. However you will need to [manually extend the disk partition](https://learn.microsoft.com/en-us/windows-server/storage/disk-management/extend-a-basic-volume?tabs=disk-management) since the added disk space will appear as unallocated.
+> This can also be used to resize the existing disk to a larger capacity without any data loss.
### How do I share files with the host?
- After installation there will be a folder called `Shared` on your desktop, which can be used to exchange files with the host machine.
+ Open 'File Explorer' and click on the 'Network' section, you will see a computer called `host.lan`.
- To select a folder on the host for this purpose, include the following bind mount in your compose file:
+ Double-click it and it will show a folder called `Data`, which can be bound to any folder on your host via the compose file:
```yaml
volumes:
- - ./example:/shared
+ - ./example:/data
```
- Replace the example path `./example` with your desired shared folder, which then will become visible as `Shared`.
+ The example folder `./example` will be available as ` \\host.lan\Data`.
+
+> [!TIP]
+> You can map this path to a drive letter in Windows, for easier access.
### How do I change the amount of CPU or RAM?
- By default, Windows will be allowed to use 2 CPU cores and 4 GB of RAM.
+ By default, the container will be allowed to use a maximum of 2 CPU cores and 4 GB of RAM.
If you want to adjust this, you can specify the desired amount using the following environment variables:
@@ -172,9 +176,9 @@ 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` is created and its password is `admin`.
+ By default, a user called `Docker` (with an empty password) is created during installation.
- If you want to use different credentials during installation, you can configure them in your compose file:
+ If you want to use different credentials, you can configure them in your compose file (only before installation):
```yaml
environment:
@@ -186,7 +190,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
By default, the English version of Windows will be downloaded.
- But you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language to be downloaded:
+ But before installation you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language:
```yaml
environment:
@@ -197,7 +201,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
### How do I select the keyboard layout?
- If you want to use a keyboard layout or locale that is not the default for your selected language, you can add `KEYBOARD` and `REGION` variables like this:
+ If you want to use a keyboard layout or locale that is not the default for your selected language, you can add `KEYBOARD` and `REGION` variables like this (before installation):
```yaml
environment:
@@ -205,6 +209,24 @@ 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):
+
+ ```yaml
+ environment:
+ EDITION: "core"
+ ```
+
### How do I install a custom image?
In order to download an unsupported ISO image, specify its URL in the `VERSION` environment variable:
@@ -218,7 +240,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
```yaml
volumes:
- - ./example.iso:/boot.iso
+ - ./example.iso:/custom.iso
```
Replace the example path `./example.iso` with the filename of your desired ISO file. The value of `VERSION` will be ignored in this case.
@@ -240,7 +262,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 at your own risk, add the following environment variable to your compose file:
+ However, if you insist on performing the installation manually on your own risk, add the following environment variable to your compose file:
```yaml
environment:
@@ -251,7 +273,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 password `admin`.
+ 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.
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.
@@ -322,12 +344,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 or partitions directly by adding them to your compose file in this way:
+ It is possible to pass-through disk devices directly by adding them to your compose file in this way:
```yaml
devices:
- /dev/sdb:/disk1
- - /dev/sdc1:/disk2
+ - /dev/sdc:/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).
@@ -347,16 +369,9 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
### How do I verify if my system supports KVM?
- 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:
+ 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:
```bash
sudo apt install cpu-checker
@@ -371,7 +386,11 @@ 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 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.
+ 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.
### How do I run macOS in a container?
@@ -385,6 +404,9 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
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.
+## Stars 🌟
+[](https://starchart.cc/dockur/windows)
+
## Disclaimer ⚖️
*The product names, logos, brands, and other trademarks referred to within this project are the property of their respective trademark holders. This project is not affiliated, sponsored, or endorsed by Microsoft Corporation.*
diff --git a/src/define.sh b/src/define.sh
index 3db2069..1b70ad0 100644
--- a/src/define.sh
+++ b/src/define.sh
@@ -16,7 +16,8 @@ set -Eeuo pipefail
: "${USERNAME:=""}"
: "${PASSWORD:=""}"
-MIRRORS=4
+MIRRORS=3
+PLATFORM="x64"
parseVersion() {
@@ -24,7 +25,6 @@ parseVersion() {
VERSION="${VERSION:1:-1}"
fi
- VERSION=$(expr "$VERSION" : "^\ *\(.*[^ ]\)\ *$")
[ -z "$VERSION" ] && VERSION="win11"
case "${VERSION,,}" in
@@ -34,11 +34,11 @@ parseVersion() {
"11e" | "win11e" | "windows11e" | "windows 11e" )
VERSION="win11x64-enterprise-eval"
;;
- "11i" | "11iot" | "iot11" | "win11i" | "win11-iot" | "win11x64-iot" )
+ "11i" | "11iot" | "iot11" | "win11i" | "win11-iot" | "win11x64-iot" | "win11x64-enterprise-iot-eval" )
VERSION="win11x64-enterprise-iot-eval"
[ -z "$DETECTED" ] && DETECTED="win11x64-iot"
;;
- "11l" | "11ltsc" | "ltsc11" | "win11l" | "win11-ltsc" | "win11x64-ltsc" )
+ "11l" | "11ltsc" | "ltsc11" | "win11l" | "win11-ltsc" | "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" )
VERSION="win11x64-enterprise-ltsc-eval"
[ -z "$DETECTED" ] && DETECTED="win11x64-ltsc"
;;
@@ -48,11 +48,11 @@ parseVersion() {
"10e" | "win10e" | "windows10e" | "windows 10e" )
VERSION="win10x64-enterprise-eval"
;;
- "10i" | "10iot" | "iot10" | "win10i" | "win10-iot" | "win10x64-iot" )
+ "10i" | "10iot" | "iot10" | "win10i" | "win10-iot" | "win10x64-iot" | "win10x64-enterprise-iot-eval" )
VERSION="win10x64-enterprise-iot-eval"
[ -z "$DETECTED" ] && DETECTED="win10x64-iot"
;;
- "10l" | "10ltsc" | "ltsc10" | "win10l" | "win10-ltsc" | "win10x64-ltsc" )
+ "10l" | "10ltsc" | "ltsc10" | "win10l" | "win10-ltsc" | "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" )
VERSION="win10x64-enterprise-ltsc-eval"
[ -z "$DETECTED" ] && DETECTED="win10x64-ltsc"
;;
@@ -62,45 +62,27 @@ parseVersion() {
"8e" | "81e" | "8.1e" | "win8e" | "win81e" | "windows 8e" )
VERSION="win81x64-enterprise-eval"
;;
- "7" | "win7" | "windows7" | "windows 7" )
+ "7" | "7e" | "win7" | "win7e" | "windows7" | "windows 7" )
VERSION="win7x64"
- [ -z "$DETECTED" ] && DETECTED="win7x64-ultimate"
+ [ -z "$DETECTED" ] && DETECTED="win7x64-enterprise-eval"
;;
"7u" | "win7u" | "windows7u" | "windows 7u" )
VERSION="win7x64-ultimate"
;;
- "7e" | "win7e" | "windows7e" | "windows 7e" )
- VERSION="win7x64-enterprise"
- ;;
- "7x86" | "win7x86" | "win732" | "windows7x86" )
+ "7x86" | "win7x86" | "windows7x86" | "win7x86-enterprise" )
VERSION="win7x86"
- [ -z "$DETECTED" ] && DETECTED="win7x86-ultimate"
+ [ -z "$DETECTED" ] && DETECTED="win7x86-enterprise"
;;
- "7ux86" | "7u32" | "win7x86-ultimate" )
- VERSION="win7x86-ultimate"
- ;;
- "7ex86" | "7e32" | "win7x86-enterprise" )
- VERSION="win7x86-enterprise"
- ;;
- "vista" | "vs" | "6" | "winvista" | "windowsvista" | "windows vista" )
+ "vista" | "ve" | "6" | "winvista" | "windowsvista" | "windows vista" )
VERSION="winvistax64"
- [ -z "$DETECTED" ] && DETECTED="winvistax64-ultimate"
+ [ -z "$DETECTED" ] && DETECTED="winvistax64-enterprise"
;;
- "vistu" | "vu" | "6u" | "winvistu" )
+ "vistu" | "vu" | "6u" | "winvistu" | "windowsvistu" | "windows vistu" )
VERSION="winvistax64-ultimate"
;;
- "viste" | "ve" | "6e" | "winviste" )
- VERSION="winvistax64-enterprise"
- ;;
- "vistax86" | "vista32" | "6x86" | "winvistax86" | "windowsvistax86" )
+ "vistax86" | "vex86" | "6x86" | "winvistax86" | "windowsvistax86" | "winvistax86-enterprise" )
VERSION="winvistax86"
- [ -z "$DETECTED" ] && DETECTED="winvistax86-ultimate"
- ;;
- "vux86" | "vu32" | "winvistax86-ultimate" )
- VERSION="winvistax86-ultimate"
- ;;
- "vex86" | "ve32" | "winvistax86-enterprise" )
- VERSION="winvistax86-enterprise"
+ [ -z "$DETECTED" ] && DETECTED="winvistax86-enterprise"
;;
"xp" | "xp32" | "xpx86" | "5" | "5x86" | "winxp" | "winxp86" | "windowsxp" | "windows xp" )
VERSION="winxpx86"
@@ -108,9 +90,6 @@ 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"
;;
@@ -123,7 +102,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" )
@@ -135,10 +114,6 @@ parseVersion() {
"2003" | "2003r2" | "win2003" | "win2003r2" | "windows2003" | "windows 2003" )
VERSION="win2003r2"
;;
- "nano11" | "nano 11" )
- VERSION="nano11"
- [ -z "$DETECTED" ] && DETECTED="win11x64"
- ;;
"core11" | "core 11" )
VERSION="core11"
[ -z "$DETECTED" ] && DETECTED="win11x64"
@@ -436,7 +411,6 @@ printVersion() {
"tiny11"* ) desc="Tiny 11" ;;
"tiny10"* ) desc="Tiny 10" ;;
"core11"* ) desc="Core 11" ;;
- "nano11"* ) desc="Nano 11" ;;
"win7"* ) desc="Windows 7" ;;
"win8"* ) desc="Windows 8" ;;
"win10"* ) desc="Windows 10" ;;
@@ -575,9 +549,6 @@ fromFile() {
*"winvista"* | *"win_vista"* | *"windowsvista"* | *"windows_vista"* )
id="winvista${arch}"
;;
- "nano11"* | "nano_11"* )
- id="nano11"
- ;;
"tiny11core"* | "tiny11_core"* | "tiny_11_core"* )
id="core11"
;;
@@ -702,9 +673,26 @@ switchEdition() {
local id="$1"
- if [[ "${id,,}" == *"-eval" ]]; then
- [ -z "$DETECTED" ] && DETECTED="${id::-5}"
- fi
+ case "${id,,}" in
+ "win11${PLATFORM,,}-enterprise-eval" )
+ DETECTED="win11${PLATFORM,,}-enterprise"
+ ;;
+ "win10${PLATFORM,,}-enterprise-eval" )
+ DETECTED="win10${PLATFORM,,}-enterprise"
+ ;;
+ "win81${PLATFORM,,}-enterprise-eval" )
+ DETECTED="win81${PLATFORM,,}-enterprise"
+ ;;
+ "win7${PLATFORM,,}" | "win7${PLATFORM,,}-enterprise-eval" )
+ DETECTED="win7${PLATFORM,,}-enterprise"
+ ;;
+ "win2025-eval" ) DETECTED="win2025" ;;
+ "win2022-eval" ) DETECTED="win2022" ;;
+ "win2019-eval" ) DETECTED="win2019" ;;
+ "win2016-eval" ) DETECTED="win2016" ;;
+ "win2012r2-eval" ) DETECTED="win2012r2" ;;
+ "win2008r2-eval" ) DETECTED="win2008r2" ;;
+ esac
return 0
}
@@ -718,18 +706,17 @@ getMido() {
local sum=""
local size=""
- [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0
+ [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0
case "${id,,}" in
"win11x64" )
- size=7736125440
- sum="d141f6030fed50f75e2b03e1eb2e53646c4b21e5386047cb860af5223f102a32"
- url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26200.6584.250915-1905.25h2_ge_release_svc_refresh_CLIENT_CONSUMER_x64FRE_en-us.iso"
+ size=5819484160
+ sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11"
;;
"win11x64-enterprise-eval" )
- size=7092807680
- sum="a61adeab895ef5a4db436e0a7011c92a2ff17bb0357f58b13bbc4062e535e7b9"
- url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26200.6584.250915-1905.25h2_ge_release_svc_refresh_CLIENTENTERPRISEEVAL_OEMRET_x64FRE_en-us.iso"
+ size=4295096320
+ sum="dad633276073f14f3e0373ef7e787569e216d54942ce522b39451c8f2d38ad43"
+ url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_CLIENTENTERPRISEEVAL_OEMRET_A64FRE_en-us.iso"
;;
"win11x64-enterprise-iot-eval" | "win11x64-enterprise-ltsc-eval" )
size=5060020224
@@ -755,6 +742,11 @@ 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"
@@ -813,7 +805,7 @@ getLink1() {
local size=""
local host="https://dl.bobpony.com/windows"
- [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0
+ [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0
case "${id,,}" in
"win11x64" | "win11x64-enterprise" | "win11x64-enterprise-eval" )
@@ -821,12 +813,12 @@ getLink1() {
sum="aa1ad990f930d907b7a34ea897abbb0dfbe47552ca8acc146f92e40381839e05"
url="11/en-us_windows_11_24h2_x64.iso"
;;
- "win11x64-iot" | "win11x64-enterprise-iot" | "win11x64-enterprise-iot-eval" )
+ "win11x64-iot" | "win11x64-enterprise-iot-eval" )
size=5144817664
sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a"
url="11/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso"
;;
- "win11x64-ltsc" | "win11x64-enterprise-ltsc" | "win11x64-enterprise-ltsc-eval" )
+ "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" )
size=5144817664
sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a"
url="11/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso"
@@ -836,12 +828,12 @@ getLink1() {
sum="557871965263d0fd0a1ea50b5d0d0d7cb04a279148ca905c1c675c9bc0d5486c"
url="10/en-us_windows_10_22h2_x64.iso"
;;
- "win10x64-iot" | "win10x64-enterprise-iot" | "win10x64-enterprise-iot-eval" )
+ "win10x64-iot" | "win10x64-enterprise-iot-eval" )
size=4851668992
sum="a0334f31ea7a3e6932b9ad7206608248f0bd40698bfb8fc65f14fc5e4976c160"
url="10/en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f.iso"
;;
- "win10x64-ltsc" | "win10x64-enterprise-ltsc" | "win10x64-enterprise-ltsc-eval" )
+ "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" )
size=4899461120
sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d"
url="10/en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96.iso"
@@ -857,14 +849,14 @@ getLink1() {
url="8.x/8.1/en_windows_8.1_enterprise_with_update_x64_dvd_6054382.iso"
;;
"win2025" | "win2025-eval" )
- size=6786627584
- sum="bf3ef0849c7cb5e818e1035b7466d206af5aa227ace1a3f4b0de2bf00d2e2144"
- url="server/2025/en-us_windows_server_2025_updated_april_2025_x64_dvd_ea86301d.iso"
+ size=5307176960
+ sum="2293897341febdcea599f5412300b470b5288c6fd2b89666a7b27d283e8d3cf3"
+ url="server/2025/en-us_windows_server_2025_preview_x64_dvd_ce9eb1a5.iso"
;;
"win2022" | "win2022-eval" )
- size=6005706752
- sum="cea2cb2c09de9910c236e64eae3a801c55e9c77ec25e8d81585e3a4581d24bfb"
- url="server/2022/en-us_windows_server_2022_updated_april_2025_x64_dvd_3f755ec1.iso"
+ size=5365624832
+ sum="c3c57bb2cf723973a7dcfb1a21e97dfa035753a7f111e348ad918bb64b3114db"
+ url="server/2022/en-us_windows_server_2022_updated_jan_2024_x64_dvd_2b7a0c9f.iso"
;;
"win2019" | "win2019-eval" )
size=5575774208
@@ -886,41 +878,36 @@ getLink1() {
sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8"
url="server/2008r2/en_windows_server_2008_r2_with_sp1_x64_dvd_617601-018.iso"
;;
- "win7x64" | "win7x64-ultimate" )
- size=3320836096
- sum="0b738b55a5ea388ad016535a5c8234daf2e5715a0638488ddd8a228a836055a1"
- url="7/en_windows_7_with_sp1_x64.iso"
- ;;
- "win7x64-enterprise" | "win7x64-enterprise-eval" )
+ "win7x64" | "win7x64-enterprise" | "win7x64-enterprise-eval" )
size=3182604288
sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7"
url="7/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso"
;;
- "win7x86" | "win7x86-ultimate" )
- size=2564411392
- sum="99f3369c90160816be07093dbb0ac053e0a84e52d6ed1395c92ae208ccdf67e5"
- url="7/en_windows_7_with_sp1_x86.iso"
+ "win7x64-ultimate" )
+ size=3320836096
+ sum="0b738b55a5ea388ad016535a5c8234daf2e5715a0638488ddd8a228a836055a1"
+ url="7/en_windows_7_with_sp1_x64.iso"
;;
- "win7x86-enterprise" | "win7x86-enterprise-eval" )
+ "win7x86" | "win7x86-enterprise" )
size=2434502656
sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad"
url="7/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso"
;;
- "winvistax64" | "winvistax64-ultimate" )
+ "win7x86-ultimate" )
+ size=2564411392
+ sum="99f3369c90160816be07093dbb0ac053e0a84e52d6ed1395c92ae208ccdf67e5"
+ url="7/en_windows_7_with_sp1_x86.iso"
+ ;;
+ "winvistax64-ultimate" )
size=3861460992
sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78"
url="vista/en_windows_vista_sp2_x64_dvd_342267.iso"
;;
- "winvistax86" | "winvistax86-ultimate" )
+ "winvistax86-ultimate" )
size=3243413504
sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c"
url="vista/en_windows_vista_with_sp2_x86_dvd_342266.iso"
;;
- "win2003r2" )
- size=731650535
- sum="6b64bbae7eb00fd000cc887ffdc9f224d00c557daad7f756cfa373950b880dc8"
- url="server/2003r2/en_win_srv_2003_r2_standard_x64_with_sp2_cd1_cd2.zip"
- ;;
"winxpx86" )
size=617756672
sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46"
@@ -931,11 +918,6 @@ 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
@@ -957,7 +939,7 @@ getLink2() {
local size=""
local host="https://files.dog/MSDN"
- [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0
+ [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0
case "${id,,}" in
"win81x64" )
@@ -980,46 +962,46 @@ getLink2() {
sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8"
url="Windows%20Server%202008%20R2/en_windows_server_2008_r2_with_sp1_x64_dvd_617601.iso"
;;
- "win7x64" | "win7x64-ultimate" )
- size=3320903680
- sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808"
- url="Windows%207/en_windows_7_ultimate_with_sp1_x64_dvd_u_677332.iso"
- ;;
- "win7x64-enterprise" | "win7x64-enterprise-eval" )
+ "win7x64" | "win7x64-enterprise" | "win7x64-enterprise-eval" )
size=3182604288
sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7"
url="Windows%207/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso"
;;
- "win7x86" | "win7x86-ultimate" )
- size=2564476928
- sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940"
- url="Windows%207/en_windows_7_ultimate_with_sp1_x86_dvd_u_677460.iso"
+ "win7x64-ultimate" )
+ size=3320903680
+ sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808"
+ url="Windows%207/en_windows_7_ultimate_with_sp1_x64_dvd_u_677332.iso"
;;
- "win7x86-enterprise" | "win7x86-enterprise-eval" )
+ "win7x86" | "win7x86-enterprise" )
size=2434502656
sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad"
url="Windows%207/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso"
;;
- "winvistax64" | "winvistax64-ultimate" )
- size=3861460992
- sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78"
- url="Windows%20Vista/en_windows_vista_sp2_x64_dvd_342267.iso"
+ "win7x86-ultimate" )
+ size=2564476928
+ sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940"
+ url="Windows%207/en_windows_7_ultimate_with_sp1_x86_dvd_u_677460.iso"
;;
- "winvistax64-enterprise" )
+ "winvistax64" | "winvistax64-enterprise" )
size=3205953536
sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016"
url="Windows%20Vista/en_windows_vista_enterprise_sp2_x64_dvd_342332.iso"
;;
- "winvistax86" | "winvistax86-ultimate" )
- size=3243413504
- sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c"
- url="Windows%20Vista/en_windows_vista_with_sp2_x86_dvd_342266.iso"
+ "winvistax64-ultimate" )
+ size=3861460992
+ sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78"
+ url="Windows%20Vista/en_windows_vista_sp2_x64_dvd_342267.iso"
;;
- "winvistax86-enterprise" )
+ "winvistax86" | "winvistax86-enterprise" )
size=2420981760
sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5"
url="Windows%20Vista/en_windows_vista_enterprise_sp2_x86_dvd_342329.iso"
;;
+ "winvistax86-ultimate" )
+ size=3243413504
+ sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c"
+ url="Windows%20Vista/en_windows_vista_with_sp2_x86_dvd_342266.iso"
+ ;;
"win2003r2" )
size=652367872
sum="74245cba888f935b138b106c2744bec7f392925b472358960a0b5643cd6abb32"
@@ -1048,49 +1030,6 @@ getLink2() {
getLink3() {
- local id="$1"
- local lang="$2"
- local ret="$3"
- local url=""
- local sum=""
- local size=""
- local host="https://nixsys.com/drivers"
-
- [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0
-
- case "${id,,}" in
- "win7x64" | "win7x64-ultimate" )
- size=3319478272
- sum="3286963e1476082ba882a5058c205c264772bead9e99e15cd1cb255f04b72900"
- url="WINDOWS764_EN_DVD.iso"
- ;;
- "win7x86" | "win7x86-ultimate" )
- size=2564784128
- sum="bd4c03c917d00a40222d92a6fab04981a7bd46140bda1888eb961a322e3c5d89"
- url="WINDOWS732_EN_DVD.iso"
- ;;
- "winxpx86" )
- size=618065920
- sum="8177d0137dfe4e8296a85793f140806c9250a5992c8e0e50158c742767ad1182"
- url="WinXPsp3.iso"
- ;;
- "win2kx86" )
- size=387424256
- sum="08b11c3897eb38d1e6566a17cec5cdf2b3c620444e160e3db200a7e223aabbd8"
- url="Windows_2000_SP4.iso"
- esac
-
- case "${ret,,}" in
- "sum" ) echo "$sum" ;;
- "size" ) echo "$size" ;;
- *) [ -n "$url" ] && echo "$host/$url";;
- esac
-
- return 0
-}
-
-getLink4() {
-
local id="$1"
local lang="$2"
local ret="$3"
@@ -1099,158 +1038,29 @@ getLink4() {
local size=""
local host="https://archive.org/download"
- [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0
+ [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0
case "${id,,}" in
- "nano11" )
- size=2463565824
- sum="a1e0614372768cbe2d24de74b78a4a97bc1017ea5080dfed1d2125e4a527eb1a"
- url="nano11_25h2/nano11%2025h2.iso"
- ;;
"core11" )
- size=3176654848
- sum="29c055fcfb7b089abd9e007e7abe4bb82c70a03aac9d65e56a38b87ab32d04d2"
- url="tiny11_25H2/tiny11core_25H2_Oct25.iso"
+ size=2159738880
+ sum="78f0f44444ff95b97125b43e560a72e0d6ce0a665cf9f5573bf268191e5510c1"
+ url="tiny-11-core-x-64-beta-1/tiny11%20core%20x64%20beta%201.iso"
;;
"tiny11" )
- size=5514559488
- sum="92484f2b7f707e42383294402a9eabbadeaa5ede80ac633390ae7f3537e36275"
- url="tiny11_25H2/tiny11_25H2_Oct25.iso"
+ size=3788177408
+ sum="a028800a91addc35d8ae22dce7459b67330f7d69d2f11c70f53c0fdffa5b4280"
+ url="tiny11-2311/tiny11%202311%20x64.iso"
;;
"tiny10" )
size=3839819776
sum="a11116c0645d892d6a5a7c585ecc1fa13aa66f8c7cc6b03bf1f27bd16860cc35"
url="tiny-10-23-h2/tiny10%20x64%2023h2.iso"
;;
- "win11x64" )
- size=7736125440
- sum="d141f6030fed50f75e2b03e1eb2e53646c4b21e5386047cb860af5223f102a32"
- url="W11x64_26200.6584/26200.6584.250915-1905.25h2_ge_release_svc_refresh_CLIENT_CONSUMER_x64FRE_en-us.iso"
- ;;
- "win11x64-enterprise" | "win11x64-enterprise-eval" )
- size=6209064960
- sum="c8dbc96b61d04c8b01faf6ce0794fdf33965c7b350eaa3eb1e6697019902945c"
- url="Windows11Enterprise23H2x64/22631.2428.231001-0608.23H2_NI_RELEASE_SVC_REFRESH_CLIENTENTERPRISEEVAL_OEMRET_x64FRE_en-us.iso"
- ;;
- "win11x64-iot" | "win11x64-enterprise-iot" | "win11x64-enterprise-iot-eval" )
- size=5144817664
- sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a"
- url="Windows11LTSC/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso"
- ;;
- "win11x64-ltsc" | "win11x64-enterprise-ltsc" | "win11x64-enterprise-ltsc-eval" )
- size=5144817664
- sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a"
- url="Windows11LTSC/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso"
- ;;
- "win10x64" | "win10x64-enterprise" | "win10x64-enterprise-eval" )
- size=6978310144
- sum="7847abd6f39abd02dc8089c4177d354f9eb66fa0ee2fe8ae20e596e675d1ab67"
- url="Windows-10-22H2-July-2024-64-bit-DVD-English/en-us_windows_10_business_editions_version_22h2_updated_july_2024_x64_dvd_c004521a.iso"
- ;;
- "win10x64-iot" | "win10x64-enterprise-iot" | "win10x64-enterprise-iot-eval" )
- size=4851668992
- sum="a0334f31ea7a3e6932b9ad7206608248f0bd40698bfb8fc65f14fc5e4976c160"
- url="en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f_202411/en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f.iso"
- ;;
- "win10x64-ltsc" | "win10x64-enterprise-ltsc" | "win10x64-enterprise-ltsc-eval" )
- size=4899461120
- sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d"
- url="en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96_202302/en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96.iso"
- ;;
- "win81x64" )
- size=4320526336
- sum="d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51"
- url="en_windows_8.1_with_update_x64_dvd_6051480/en_windows_8.1_with_update_x64_dvd_6051480.iso"
- ;;
- "win81x64-enterprise" | "win81x64-enterprise-eval" )
- size=4139163648
- sum="c3c604c03677504e8905090a8ce5bb1dde76b6fd58e10f32e3a25bef21b2abe1"
- url="en_windows_8.1_enterprise_with_update_x64_dvd/en_windows_8.1_enterprise_with_update_x64_dvd_6054382.iso"
- ;;
- "win2022" | "win2022-eval" )
- size=5365624832
- sum="c3c57bb2cf723973a7dcfb1a21e97dfa035753a7f111e348ad918bb64b3114db"
- url="win-server-2022/2227-January_2024/en-us_windows_server_2022_updated_jan_2024_x64_dvd_2b7a0c9f.iso"
- ;;
- "win2019" | "win2019-eval" )
- size=5575774208
- sum="0067afe7fdc4e61f677bd8c35a209082aa917df9c117527fc4b2b52a447e89bb"
- url="sw-dvd-9-win-server-std-core-2019-1809.18-64-bit-english-dc-std-mlf-x-22-74330/SW_DVD9_Win_Server_STD_CORE_2019_1809.18_64Bit_English_DC_STD_MLF_X22-74330.ISO"
- ;;
- "win2016" | "win2016-eval" )
- size=6006587392
- sum="af06e5483c786c023123e325cea4775050324d9e1366f46850b515ae43f764be"
- url="en_windows_server_2016_updated_feb_2018_x64_dvd_11636692/en_windows_server_2016_updated_feb_2018_x64_dvd_11636692.iso"
- ;;
- "win2012r2" | "win2012r2-eval" )
- size=5397889024
- sum="f351e89eb88a96af4626ceb3450248b8573e3ed5924a4e19ea891e6003b62e4e"
- url="en_windows_server_2012_r2_with_update_x64_dvd_6052708_202006/en_windows_server_2012_r2_with_update_x64_dvd_6052708.iso"
- ;;
- "win2008r2" | "win2008r2-eval" )
- size=3166584832
- sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8"
- url="en_windows_server_2008_r2_with_sp1_x64_dvd_617601_202006/en_windows_server_2008_r2_with_sp1_x64_dvd_617601.iso"
- ;;
- "win7x64" | "win7x64-ultimate" )
- size=3320903680
- sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808"
- url="win7-ult-sp1-english/Win7_Ult_SP1_English_x64.iso"
- ;;
- "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"
- ;;
- "win7x86" | "win7x86-ultimate" )
- size=2564476928
- sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940"
- url="win7-ult-sp1-english/Win7_Ult_SP1_English_x32.iso"
- ;;
- "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"
- ;;
- "winvistax64" | "winvistax64-ultimate" )
- size=3861460992
- sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78"
- url="en_windows_vista_sp2_x64_dvd_342267_202010/en_windows_vista_sp2_x64_dvd_342267.iso"
- ;;
- "winvistax64-enterprise" )
- size=3205953536
- sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016"
- url="en_windows_vista_enterprise_sp2_x64_dvd_342332_202007/en_windows_vista_enterprise_sp2_x64_dvd_342332.iso"
- ;;
- "winvistax86" | "winvistax86-ultimate" )
- size=3243413504
- sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c"
- url="en_windows_vista_sp2_x86_dvd_342266/en_windows_vista_sp2_x86_dvd_342266.iso"
- ;;
- "winvistax86-enterprise" )
- size=2420981760
- sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5"
- url="en_windows_vista_enterprise_sp2_x86_dvd_342329_202007/en_windows_vista_enterprise_sp2_x86_dvd_342329.iso"
- ;;
- "win2003r2" )
- size=652367872
- sum="74245cba888f935b138b106c2744bec7f392925b472358960a0b5643cd6abb32"
- url="en_win_srv_2003_r2_standard_x64_with_sp2_cd1_x13-05757/en_win_srv_2003_r2_standard_x64_with_sp2_cd1_x13-05757.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
@@ -1311,8 +1121,6 @@ isMido() {
local lang="$2"
local sum
- [[ "${MIDO:-}" == [Nn]* ]] && return 1
-
sum=$(getMido "$id" "en" "sum")
[ -n "$sum" ] && return 0
@@ -1324,8 +1132,6 @@ isESD() {
local id="$1"
local lang="$2"
- [[ "${ESD:-}" == [Nn]* ]] && return 1
-
case "${id,,}" in
"win11${PLATFORM,,}" | "win10${PLATFORM,,}" )
return 0
@@ -1378,7 +1184,7 @@ addFolder() {
cp -Lr "$folder/." "$dest" || return 1
local file
- file=$(find "$dest" -maxdepth 1 -type f -iname install.bat -print -quit)
+ file=$(find "$dest" -maxdepth 1 -type f -iname install.bat | head -n 1)
[ -f "$file" ] && unix2dos -q "$file"
return 0
@@ -1386,180 +1192,93 @@ addFolder() {
prepareInstall() {
- local pid=""
- local file=""
local dir="$2"
local desc="$3"
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 [ ! -d "$target" ]; then
- error "Failed to locate directory \"$target\" in $desc ISO image!" && return 1
+ if [ ! -f "$drivers/viostor/$driver/$arch/viostor.sys" ]; then
+ error "Failed to locate required storage drivers!" && return 1
fi
- if [[ "${driver,,}" == "xp" || "${driver,,}" == "2k3" ]]; then
+ cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$target" || return 1
- local msg="Adding drivers to image..."
- info "$msg" && html "$msg"
-
- rm -rf "$drivers"
- mkdir -p "$drivers"
-
- if ! bsdtar -xf /var/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
-
- file=$(find "$target" -maxdepth 1 -type f -iname TXTSETUP.SIF -print -quit)
-
- if [ -z "$file" ]; then
- error "The file TXTSETUP.SIF could not be found!" && return 1
- fi
-
- sed -i '/^\[SCSI.Load\]/s/$/\nviostor=viostor.sys,4/' "$file"
- sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\nviostor.sys=1,,,,,,4_,4,1,,,1,4/' "$file"
- sed -i '/^\[SCSI\]/s/$/\nviostor=\"Red Hat VirtIO SCSI Disk Device\"/' "$file"
- sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$file"
- sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00020000=\"viostor\"/' "$file"
- sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00021AF4=\"viostor\"/' "$file"
- sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$file"
-
- 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/' "$file"
- sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$file"
- sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.cat = 1,,,,,,,1,0,0/' "$file"
- sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.inf = 1,,,,,,,1,0,0/' "$file"
- sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,4_,4,1,,,1,4/' "$file"
- sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,,1,0,0/' "$file"
- sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaahci.cat = 1,,,,,,,1,0,0/' "$file"
- sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaAHCI.inf = 1,,,,,,,1,0,0/' "$file"
- sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$file"
- sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$file"
-
- rm -rf "$drivers"
+ 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
- local key setup
- setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini -print -quit)
-
- if [ -n "$setup" ] && [ -z "$KEY" ]; then
-
- pid=$(<"$setup")
- pid="${pid%$'\r'}"
-
- if [[ "$driver" == "2k" ]]; then
-
- echo "${pid:0:$((${#pid})) - 3}270" > "$setup"
-
- else
-
- if [[ "$pid" == *"270" ]]; then
-
- warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation."
-
- else
-
- file=$(find "$target" -maxdepth 1 -type f -iname PID.INF -print -quit)
-
- if [ -n "$file" ]; then
-
- if [[ "$driver" == "2k3" ]]; then
-
- key=$(grep -i -A 2 "StagingKey" "$file" | tail -n 2 | head -n 1)
-
- else
-
- key="${pid:$((${#pid})) - 8:5}"
- if [[ "${pid^^}" == *"OEM" ]]; then
- key=$(grep -i -A 2 "$key" "$file" | tail -n 2 | head -n 1)
- else
- key=$(grep -i -m 1 -A 2 "$key" "$file" | tail -n 2 | head -n 1)
- fi
- key="${key#*= }"
-
- fi
-
- key="${key%$'\r'}"
- [[ "${#key}" == "29" ]] && KEY="$key"
-
- fi
-
- if [ -z "$KEY" ]; then
-
- # These are NOT pirated keys, they come from official MS documentation.
-
- case "${driver,,}" in
- "xp" )
-
- if [[ "${arch,,}" == "x86" ]]; then
- # Windows XP Professional x86 generic trial key (no activation)
- KEY="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y"
- else
- # Windows XP Professional x64 generic trial key (no activation)
- KEY="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G"
- fi ;;
-
- "2k3" )
-
- if [[ "${arch,,}" == "x86" ]]; then
- # Windows Server 2003 Standard x86 generic trial key (no activation)
- KEY="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48"
- else
- # Windows Server 2003 Standard x64 generic trial key (no activation)
- KEY="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY"
- fi ;;
-
- esac
-
- echo "${pid:0:$((${#pid})) - 3}000" > "$setup"
-
- fi
-
- fi
- 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
- [ -n "$KEY" ] && KEY="ProductID=$KEY"
+ 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"
- mkdir -p "$dir/\$OEM\$"
+ 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."
+ fi
if ! addFolder "$dir"; then
error "Failed to add OEM folder to image!" && return 1
@@ -1575,14 +1294,30 @@ prepareInstall() {
XHEX=$(printf '%x\n' "$WIDTH")
YHEX=$(printf '%x\n' "$HEIGHT")
- local username=""
- local password=""
+ local username="Docker"
+ 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"
+ # 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
find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \;
@@ -1620,8 +1355,8 @@ prepareInstall() {
echo "[UserData]"
echo " FullName=\"$username\""
echo " ComputerName=\"*\""
- echo " OrgName=\"$APP for $ENGINE\""
- echo " $KEY"
+ echo " OrgName=\"Windows for Docker\""
+ echo " ProductKey=$KEY"
echo ""
echo "[Identification]"
echo " JoinWorkgroup = WORKGROUP"
@@ -1671,24 +1406,21 @@ prepareInstall() {
echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\GloballyOpenPorts\List]"
echo "\"3389:TCP\"=\"3389:TCP:*:Enabled:@xpsp2res.dll,-22009\""
echo ""
+ echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]"
+ echo "\"LimitBlankPasswordUse\"=dword:00000000"
+ echo ""
echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Tour]"
echo "\"RunCount\"=dword:00000000"
echo ""
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_CURRENT_USER\Software\Microsoft\Internet Connection Wizard]"
- echo "\"Completed\"=\"1\""
- echo "\"Desktopchanged\"=\"1\""
- echo ""
echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]"
- echo "\"AutoAdminLogon\"=\"1\""
echo "\"DefaultUserName\"=\"$username\""
- echo "\"DefaultPassword\"=\"$password\""
echo "\"DefaultDomainName\"=\"Dockur\""
+ echo "\"AltDefaultUserName\"=\"$username\""
+ echo "\"AltDefaultDomainName\"=\"Dockur\""
+ echo "\"AutoAdminLogon\"=\"1\""
echo ""
echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{23A77BF7-ED96-40EC-AF06-9B1F4867732A}\0000]"
echo "\"DefaultSettings.BitsPerPel\"=dword:00000020"
@@ -1707,18 +1439,11 @@ prepareInstall() {
echo ""
} | unix2dos > "$dir/\$OEM\$/install.reg"
- if [[ "$driver" == "2k" ]]; then
- { echo "[HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Runonce]"
- echo "\"^SetupICWDesktop\"=-"
- echo ""
- } | unix2dos >> "$dir/\$OEM\$/install.reg"
- fi
-
if [[ "$driver" == "2k3" ]]; then
{ echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\srvWiz]"
echo "@=dword:00000000"
echo ""
- echo "[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ServerOOBE\SecurityOOBE]"
+ echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ServerOOBE\SecurityOOBE]"
echo "\"DontLaunchSecurityOOBE\"=dword:00000000"
echo ""
} | unix2dos >> "$dir/\$OEM\$/install.reg"
@@ -1766,18 +1491,11 @@ prepareInstall() {
echo ""
echo "Call Domain.MoveHere(LocalAdminADsPath, \"$username\")"
echo ""
- echo "Set oLink = WshShell.CreateShortcut(WshShell.ExpandEnvironmentStrings(\"%userprofile%\\Desktop\\Shared.lnk\"))"
- echo "With oLink"
- echo " .TargetPath = \"\\\\host.lan\\Data\""
- echo " .Save"
- echo "End With"
- echo "Set oLink = Nothing"
- echo ""
- } | unix2dos > "$dir/\$OEM\$/install.vbs"
+ } | unix2dos > "$dir/\$OEM\$/admin.vbs"
{ echo "[COMMANDS]"
echo "\"REGEDIT /s install.reg\""
- echo "\"Wscript install.vbs\""
+ echo "\"Wscript admin.vbs\""
echo ""
} | unix2dos > "$dir/\$OEM\$/cmdlines.txt"
@@ -1812,59 +1530,34 @@ prepareLegacy() {
detectLegacy() {
local dir="$1"
- local find
+ local find find2
- find=$(find "$dir" -maxdepth 1 -type d -iname WIN95 -print -quit)
+ find=$(find "$dir" -maxdepth 1 -type d -iname win95 | head -n 1)
[ -n "$find" ] && DETECTED="win95" && return 0
- find=$(find "$dir" -maxdepth 1 -type d -iname WIN98 -print -quit)
+ find=$(find "$dir" -maxdepth 1 -type d -iname win98 | head -n 1)
[ -n "$find" ] && DETECTED="win98" && return 0
- find=$(find "$dir" -maxdepth 1 -type d -iname WIN9X -print -quit)
+ find=$(find "$dir" -maxdepth 1 -type d -iname win9x | head -n 1)
[ -n "$find" ] && DETECTED="win9x" && return 0
- find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_W.40 -print -quit)
- [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_S.40 -print -quit)
- [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_TS.40 -print -quit)
- [ -n "$find" ] && DETECTED="winnt4" && return 0
+ find=$(find "$dir" -maxdepth 1 -type f -iname cdrom_nt.5 | head -n 1)
+ [ -n "$find" ] && DETECTED="win2k" && return 0
- find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_NT.5 -print -quit)
-
- if [ -n "$find" ]; then
-
- find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_IA.5 -print -quit)
- [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_ID.5 -print -quit)
- [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_IP.5 -print -quit)
- [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_IS.5 -print -quit)
- [ -n "$find" ] && DETECTED="win2k" && return 0
+ find=$(find "$dir" -maxdepth 1 -type d -iname win51 | head -n 1)
+ find2=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm | head -n 1)
+ if [ -n "$find" ] || [ -n "$find2" ] || [ -f "$dir/WIN51AP" ] || [ -f "$dir/WIN51IC" ]; then
+ [ -d "$dir/AMD64" ] && DETECTED="winxpx64" && return 0
+ DETECTED="winxpx86" && return 0
fi
- find=$(find "$dir" -maxdepth 1 -iname WIN51 -print -quit)
-
- if [ -n "$find" ]; then
-
- find=$(find "$dir" -maxdepth 1 -type f -iname WIN51AP -print -quit)
- [ -n "$find" ] && DETECTED="winxpx64" && return 0
-
- find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IC -print -quit)
- [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IP -print -quit)
- [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm -print -quit)
- [ -n "$find" ] && DETECTED="winxpx86" && return 0
-
- find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IS -print -quit)
- [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IA -print -quit)
- [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IB -print -quit)
- [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51ID -print -quit)
- [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IL -print -quit)
- [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IS -print -quit)
- [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51AA -print -quit)
- [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51AD -print -quit)
- [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51AS -print -quit)
- [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51MA -print -quit)
- [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51MD -print -quit)
- [ -n "$find" ] && DETECTED="win2003r2" && return 0
+ if [ -f "$dir/WIN51IA" ] || [ -f "$dir/WIN51IB" ] || [ -f "$dir/WIN51ID" ] || [ -f "$dir/WIN51IL" ] || [ -f "$dir/WIN51IS" ]; then
+ DETECTED="win2003r2" && return 0
+ fi
+ if [ -f "$dir/WIN51AA" ] || [ -f "$dir/WIN51AD" ] || [ -f "$dir/WIN51AS" ] || [ -f "$dir/WIN51MA" ] || [ -f "$dir/WIN51MD" ]; then
+ DETECTED="win2003r2" && return 0
fi
return 1
@@ -1882,10 +1575,6 @@ skipVersion() {
return 1
}
-isCompatible() {
- return 0
-}
-
setMachine() {
local id="$1"
@@ -1897,9 +1586,7 @@ setMachine() {
"win9"* )
ETFS="[BOOT]/Boot-1.44M.img" ;;
"win2k"* )
- if ! prepareInstall "$iso" "$dir" "$desc" "2k"; then
- error "Failed to prepare $desc ISO!" && return 1
- fi ;;
+ ETFS="[BOOT]/Boot-NoEmul.img" ;;
"winxp"* )
if ! prepareInstall "$iso" "$dir" "$desc" "xp"; then
error "Failed to prepare $desc ISO!" && return 1
@@ -1911,20 +1598,10 @@ setMachine() {
esac
case "${id,,}" in
- "win9"* )
- USB="no"
- VGA="cirrus"
+ "win9"* | "win2k"* )
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" ;;
diff --git a/src/entry.sh b/src/entry.sh
index 71e939e..be6335a 100644
--- a/src/entry.sh
+++ b/src/entry.sh
@@ -2,18 +2,14 @@
set -Eeuo pipefail
: "${APP:="Windows"}"
-: "${PLATFORM:="x64"}"
: "${BOOT_MODE:="windows"}"
: "${SUPPORT:="https://github.com/dockur/windows"}"
cd /run
-. start.sh # Startup hook
-. utils.sh # Load functions
. reset.sh # Initialize system
-. server.sh # Start webserver
. define.sh # Define versions
-. mido.sh # Download Windows
+. mido.sh # Download code
. install.sh # Run installation
. disk.sh # Initialize disks
. display.sh # Initialize graphics
@@ -22,9 +18,7 @@ cd /run
. boot.sh # Configure boot
. proc.sh # Initialize processor
. power.sh # Configure shutdown
-. memory.sh # Check available memory
. config.sh # Configure arguments
-. finish.sh # Finish initialization
trap - ERR
@@ -36,13 +30,9 @@ info "Booting ${APP}${BOOT_DESC} using QEMU v$version..."
terminal
( sleep 30; boot ) &
-tail -fn +0 "$QEMU_LOG" --pid=$$ 2>/dev/null &
-cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" | \
-sed -u -e 's/\x1B\[[=0-9;]*[a-z]//gi' \
--e 's/\x1B\x63//g' -e 's/\x1B\[[=?]7l//g' \
--e '/^$/d' -e 's/\x44\x53\x73//g' \
--e 's/failed to load Boot/skipped Boot/g' \
--e 's/0): Not Found/0)/g' & wait $! || :
+tail -fn +0 "$QEMU_LOG" 2>/dev/null &
+cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" &
+wait $! || :
sleep 1 & wait $!
[ ! -f "$QEMU_END" ] && finish 0
diff --git a/src/install.sh b/src/install.sh
index 7be2996..1ff6a0e 100644
--- a/src/install.sh
+++ b/src/install.sh
@@ -1,107 +1,33 @@
#!/usr/bin/env bash
set -Eeuo pipefail
-ETFS="boot/etfsboot.com"
+TMP="$STORAGE/tmp"
+DIR="$TMP/unpack"
FB="falling back to manual installation!"
+ETFS="boot/etfsboot.com"
EFISYS="efi/microsoft/boot/efisys_noprompt.bin"
-backup () {
-
- local count=1
- local iso="$1"
- local name="unknown"
- local root="$STORAGE/backups"
- local previous="$STORAGE/windows.base"
-
- if [ -f "$previous" ]; then
-
- previous=$(<"$previous")
- previous="${previous//[![:print:]]/}"
-
- [ -n "$previous" ] && name="${previous%.*}"
-
- fi
-
- if ! makeDir "$root"; then
- error "Failed to create directory \"$root\" !"
- return 1
- fi
-
- local folder="$name"
- local dir="$root/$folder"
-
- while [ -d "$dir" ]
- do
- count=$((count+1))
- folder="${name}.${count}"
- dir="$root/$folder"
- done
-
- rm -rf "$dir"
-
- if ! makeDir "$dir"; then
- error "Failed to create directory \"$dir\" !"
- return 1
- fi
-
- [ -f "$iso" ] && mv -f "$iso" "$dir/"
- find "$STORAGE" -maxdepth 1 -type f -iname 'data.*' -not -iname '*.iso' -exec mv -n {} "$dir/" \;
- find "$STORAGE" -maxdepth 1 -type f -iname 'windows.*' -not -iname '*.iso' -exec mv -n {} "$dir/" \;
- find "$STORAGE" -maxdepth 1 -type f \( -iname '*.rom' -or -iname '*.vars' \) -exec mv -n {} "$dir/" \;
-
- [ -z "$(ls -A "$dir")" ] && rm -rf "$dir"
- [ -z "$(ls -A "$root")" ] && rm -rf "$root"
-
- return 0
-}
-
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
- if [[ "${STORAGE,,}/${previous,,}" != "${iso,,}" ]]; then
-
- if ! hasDisk; then
-
- rm -f "$STORAGE/$previous"
- return 1
-
+ previous="$STORAGE/$previous"
+ if [[ "${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."
+ return 0
fi
-
- if [[ "${iso,,}" == "${STORAGE,,}/windows."* ]]; then
- method="your custom .iso file was changed"
- else
- if [[ "${previous,,}" != "windows."* ]]; then
- method="the VERSION variable was changed"
- else
- method="your custom .iso file was removed"
-
- if [ -f "$boot" ]; then
- info "Detected that $method, will be ignored."
- return 0
- fi
-
- fi
- fi
-
- info "Detected that $method, a backup of your previous installation will be saved..."
- ! backup "$STORAGE/$previous" && error "Backup failed!"
-
+ [ -f "$previous" ] && rm -f "$previous"
return 1
-
fi
fi
-
fi
[ -f "$boot" ] && hasDisk && return 0
@@ -115,10 +41,8 @@ skipInstall() {
byte="16" && [[ "$MANUAL" == [Yy1]* ]] && byte="17"
if [[ "$magic" != "$byte" ]]; then
-
info "The ISO will be processed again because the configuration was changed..."
return 1
-
fi
return 0
@@ -135,8 +59,8 @@ startInstall() {
if [[ "${VERSION,,}" == "http"* ]]; then
file=$(basename "${VERSION%%\?*}")
- printf -v file '%b' "${file//%/\\x}"
- file="${file//[!A-Za-z0-9._-]/_}"
+ : "${file//+/ }"; printf -v file '%b' "${_//%/\\x}"
+ file=$(echo "$file" | sed -e 's/[^A-Za-z0-9._-]/_/g')
else
@@ -154,18 +78,10 @@ startInstall() {
fi
- TMP="$STORAGE/tmp"
- rm -rf "$TMP"
-
skipInstall "$BOOT" && return 1
- if hasDisk; then
- ! backup "" && error "Backup failed!"
- fi
-
- if ! makeDir "$TMP"; then
- error "Failed to create directory \"$TMP\" !"
- fi
+ rm -rf "$TMP"
+ mkdir -p "$TMP"
if [ -z "$CUSTOM" ]; then
@@ -179,25 +95,6 @@ startInstall() {
fi
rm -f "$BOOT"
-
- find "$STORAGE" -maxdepth 1 -type f -iname 'data.*' -not -iname '*.iso' -delete
- find "$STORAGE" -maxdepth 1 -type f -iname 'windows.*' -not -iname '*.iso' -delete
- find "$STORAGE" -maxdepth 1 -type f \( -iname '*.rom' -or -iname '*.vars' \) -delete
-
- return 0
-}
-
-writeFile() {
-
- local txt="$1"
- local path="$2"
-
- echo "$txt" >"$path"
-
- if ! setOwner "$path"; then
- error "Failed to set the owner for \"$path\" !"
- fi
-
return 0
}
@@ -211,10 +108,6 @@ finishInstall() {
error "Failed to find ISO file: $iso" && return 1
fi
- if [[ "$iso" == "$STORAGE/"* ]]; then
- ! setOwner "$iso" && error "Failed to set the owner for \"$iso\" !"
- fi
-
if [[ "$aborted" != [Yy1]* ]]; then
# Mark ISO as prepared via magic byte
byte="16" && [[ "$MANUAL" == [Yy1]* ]] && byte="17"
@@ -223,68 +116,52 @@ finishInstall() {
fi
fi
- local file="$STORAGE/windows.ver"
- cp -f /run/version "$file"
- ! setOwner "$file" && error "Failed to set the owner for \"$file\" !"
+ rm -f "$STORAGE/windows.old"
+ rm -f "$STORAGE/windows.vga"
+ rm -f "$STORAGE/windows.args"
+ rm -f "$STORAGE/windows.base"
+ rm -f "$STORAGE/windows.boot"
+ rm -f "$STORAGE/windows.mode"
+ rm -f "$STORAGE/windows.type"
+
+ cp -f /run/version "$STORAGE/windows.ver"
if [[ "$iso" == "$STORAGE/"* ]]; then
if [[ "$aborted" != [Yy1]* ]] || [ -z "$CUSTOM" ]; then
base=$(basename "$iso")
- file="$STORAGE/windows.base"
- writeFile "$base" "$file"
+ echo "$base" > "$STORAGE/windows.base"
fi
fi
if [[ "${PLATFORM,,}" == "x64" ]]; then
if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then
- file="$STORAGE/windows.mode"
- writeFile "$BOOT_MODE" "$file"
+ echo "$BOOT_MODE" > "$STORAGE/windows.mode"
if [[ "${MACHINE,,}" != "q35" ]]; then
- file="$STORAGE/windows.old"
- writeFile "$MACHINE" "$file"
+ echo "$MACHINE" > "$STORAGE/windows.old"
fi
else
# Enable secure boot + TPM on manual installs as Win11 requires
- if [[ "$MANUAL" == [Yy1]* || "$aborted" == [Yy1]* ]]; then
+ if [[ "$MANUAL" == [Yy1]* ]] || [[ "$aborted" == [Yy1]* ]]; then
if [[ "${DETECTED,,}" == "win11"* ]]; then
BOOT_MODE="windows_secure"
- file="$STORAGE/windows.mode"
- writeFile "$BOOT_MODE" "$file"
+ echo "$BOOT_MODE" > "$STORAGE/windows.mode"
fi
fi
# Enable secure boot on multi-socket systems to workaround freeze
if [ -n "$SOCKETS" ] && [[ "$SOCKETS" != "1" ]]; then
BOOT_MODE="windows_secure"
- file="$STORAGE/windows.mode"
- writeFile "$BOOT_MODE" "$file"
+ echo "$BOOT_MODE" > "$STORAGE/windows.mode"
fi
fi
fi
if [ -n "${ARGS:-}" ]; then
ARGUMENTS="$ARGS ${ARGUMENTS:-}"
- file="$STORAGE/windows.args"
- writeFile "$ARGS" "$file"
- fi
-
- if [ -n "${VGA:-}" ] && [[ "${VGA:-}" != "virtio"* ]]; then
- file="$STORAGE/windows.vga"
- writeFile "$VGA" "$file"
- fi
-
- if [ -n "${USB:-}" ] && [[ "${USB:-}" != "qemu-xhci"* ]]; then
- file="$STORAGE/windows.usb"
- writeFile "$USB" "$file"
+ echo "$ARGS" > "$STORAGE/windows.args"
fi
if [ -n "${DISK_TYPE:-}" ] && [[ "${DISK_TYPE:-}" != "scsi" ]]; then
- file="$STORAGE/windows.type"
- writeFile "$DISK_TYPE" "$file"
- fi
-
- if [ -n "${ADAPTER:-}" ] && [[ "${ADAPTER:-}" != "virtio-net-pci" ]]; then
- file="$STORAGE/windows.net"
- writeFile "$ADAPTER" "$file"
+ echo "$DISK_TYPE" > "$STORAGE/windows.type"
fi
rm -rf "$TMP"
@@ -298,9 +175,8 @@ abortInstall() {
local efi
[[ "${iso,,}" == *".esd" ]] && exit 60
- [[ "${UNPACK:-}" == [Yy1]* ]] && exit 60
- efi=$(find "$dir" -maxdepth 1 -type d -iname efi -print -quit)
+ efi=$(find "$dir" -maxdepth 1 -type d -iname efi | head -n 1)
if [ -z "$efi" ]; then
[[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy"
@@ -321,23 +197,19 @@ abortInstall() {
return 1
}
-findFile() {
+detectCustom() {
- local dir file base
- local fname="$1"
- local boot="$STORAGE/windows.boot"
+ local file base
+ local fname="custom.iso"
- dir=$(find / -maxdepth 1 -type d -iname "$fname" -print -quit)
- [ ! -d "$dir" ] && dir=$(find "$STORAGE" -maxdepth 1 -type d -iname "$fname" -print -quit)
+ CUSTOM=""
- if [ -d "$dir" ]; then
- if ! hasDisk || [ ! -f "$boot" ]; then
- error "The bind $dir maps to a file that does not exist!" && return 1
- fi
+ if [ -d "/$fname" ]; then
+ error "The file /$fname has an invalid path!" && return 1
fi
- file=$(find / -maxdepth 1 -type f -iname "$fname" -print -quit)
- [ ! -s "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname "$fname" -print -quit)
+ file=$(find / -maxdepth 1 -type f -iname "$fname" | head -n 1)
+ [ ! -s "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname "$fname" | head -n 1)
if [ ! -s "$file" ] && [[ "${VERSION,,}" != "http"* ]]; then
base=$(basename "$VERSION")
@@ -353,49 +225,31 @@ findFile() {
[ -z "$size" ] || [[ "$size" == "0" ]] && return 0
ISO="$file"
- CUSTOM="$file"
+ CUSTOM="$ISO"
BOOT="$STORAGE/windows.$size.iso"
return 0
}
-detectCustom() {
-
- CUSTOM=""
-
- ! findFile "custom.iso" && return 1
- [ -n "$CUSTOM" ] && return 0
-
- ! findFile "boot.iso" && return 1
- [ -n "$CUSTOM" ] && return 0
-
- return 0
-}
-
extractESD() {
local iso="$1"
local dir="$2"
local version="$3"
local desc="$4"
- local size size_gb sizes space space_gb
- local desc total total1 total2 total3 total4
- local imageIndex links links1 links2 links3 links4
+ local size size_gb space space_gb desc
- local msg="Extracting $desc bootdisk"
- info "$msg..." && html "$msg..."
+ local msg="Extracting $desc bootdisk..."
+ info "$msg" && html "$msg"
if [ "$(stat -c%s "$iso")" -lt 100000000 ]; then
error "Invalid ESD file: Size is smaller than 100 MB" && return 1
fi
rm -rf "$dir"
+ mkdir -p "$dir"
- if ! makeDir "$dir"; then
- error "Failed to create directory \"$dir\" !" && return 1
- fi
-
- size=9606127360
+ size=16106127360
size_gb=$(formatBytes "$size")
space=$(df --output=avail -B 1 "$dir" | tail -n 1)
space_gb=$(formatBytes "$space")
@@ -407,74 +261,40 @@ extractESD() {
local esdImageCount
esdImageCount=$(wimlib-imagex info "$iso" | awk '/Image Count:/ {print $3}')
- if [ -z "$esdImageCount" ]; then
- error "Cannot read the image count in ESD file!" && return 1
- fi
-
- sizes=$(wimlib-imagex info "$iso" | grep "Total Bytes:")
- links=$(wimlib-imagex info "$iso" | grep "Hard Link Bytes:")
-
- total1=$(awk "NR==1{ print; }" <<< "$sizes" | cut -d':' -f2 | sed 's/^ *//')
- links1=$(awk "NR==1{ print; }" <<< "$links" | cut -d':' -f2 | sed 's/^ *//')
- total=$(( total1 - links1 ))
-
- total3=$(awk "NR==3{ print; }" <<< "$sizes" | cut -d':' -f2 | sed 's/^ *//')
- links3=$(awk "NR==3{ print; }" <<< "$links" | cut -d':' -f2 | sed 's/^ *//')
- total3=$(( total3 - links3 ))
- total3=$(( total3 + 60000000 ))
-
- /run/progress.sh "$dir" "$total" "$msg ([P])..." &
-
- imageIndex="1"
- wimlib-imagex apply "$iso" "$imageIndex" "$dir" --quiet 2>/dev/null || {
+ wimlib-imagex apply "$iso" 1 "$dir" --quiet 2>/dev/null || {
retVal=$?
- fKill "progress.sh"
- error "Extracting $desc bootdisk failed ($retVal)" && return 1
+ error "Extracting $desc bootdisk failed" && return $retVal
}
- fKill "progress.sh"
-
local bootWimFile="$dir/sources/boot.wim"
local installWimFile="$dir/sources/install.wim"
- local msg="Extracting $desc environment"
- info "$msg..." && html "$msg..."
+ local msg="Extracting $desc environment..."
+ info "$msg" && html "$msg"
- imageIndex="2"
- /run/progress.sh "$bootWimFile" "$total3" "$msg ([P])..." &
-
- wimlib-imagex export "$iso" "$imageIndex" "$bootWimFile" --compress=none --quiet || {
+ wimlib-imagex export "$iso" 2 "$bootWimFile" --compress=none --quiet || {
retVal=$?
- fKill "progress.sh"
- error "Adding WinPE failed ($retVal)" && return 1
+ error "Adding WinPE failed" && return ${retVal}
}
- fKill "progress.sh"
+ local msg="Extracting $desc setup..."
+ info "$msg" && html "$msg"
- local msg="Extracting $desc setup"
- info "$msg..."
-
- imageIndex="3"
- /run/progress.sh "$bootWimFile" "$total3" "$msg ([P])..." &
-
- wimlib-imagex export "$iso" "$imageIndex" "$bootWimFile" --compress=none --boot --quiet || {
+ wimlib-imagex export "$iso" 3 "$bootWimFile" --compress=none --boot --quiet || {
retVal=$?
- fKill "progress.sh"
- error "Adding Windows Setup failed ($retVal)" && return 1
+ error "Adding Windows Setup failed" && return ${retVal}
}
- fKill "progress.sh"
-
if [[ "${PLATFORM,,}" == "x64" ]]; then
LABEL="CCCOMA_X64FRE_EN-US_DV9"
else
LABEL="CPBA_A64FRE_EN-US_DV9"
fi
- local msg="Extracting $desc image"
- info "$msg..." && html "$msg..."
+ local msg="Extracting $desc image..."
+ info "$msg" && html "$msg"
- local edition imageEdition
+ local edition imageIndex imageEdition
edition=$(getCatalog "$version" "name")
if [ -z "$edition" ]; then
@@ -482,27 +302,15 @@ extractESD() {
fi
for (( imageIndex=4; imageIndex<=esdImageCount; imageIndex++ )); do
-
- imageEdition=$(wimlib-imagex info "$iso" "$imageIndex" | grep '^Description:' | sed 's/Description:[ \t]*//')
+ imageEdition=$(wimlib-imagex info "$iso" ${imageIndex} | grep '^Description:' | sed 's/Description:[ \t]*//')
[[ "${imageEdition,,}" != "${edition,,}" ]] && continue
-
- total4=$(du -sb "$iso" | cut -f1)
- total4=$(( total4 + 3000000 ))
-
- /run/progress.sh "$installWimFile" "$total4" "$msg ([P])..." &
-
- wimlib-imagex export "$iso" "$imageIndex" "$installWimFile" --compress=LZMS --chunk-size 128K --quiet || {
+ wimlib-imagex export "$iso" ${imageIndex} "$installWimFile" --compress=LZMS --chunk-size 128K --quiet || {
retVal=$?
- fKill "progress.sh"
- error "Addition of $imageIndex to the $desc image failed ($retVal)" && return 1
+ error "Addition of $imageIndex to the $desc image failed" && return $retVal
}
-
- fKill "progress.sh"
return 0
-
done
- fKill "progress.sh"
error "Failed to find product '$edition' in install.wim!" && return 1
}
@@ -512,7 +320,7 @@ extractImage() {
local dir="$2"
local version="$3"
local desc="local ISO"
- local file size size_gb space space_gb
+ local size size_gb space space_gb
if [ -z "$CUSTOM" ]; then
desc="downloaded ISO"
@@ -526,21 +334,18 @@ extractImage() {
return 1
fi
- local msg="Extracting $desc image"
- info "$msg..." && html "$msg..."
+ local msg="Extracting $desc image..."
+ info "$msg" && html "$msg"
rm -rf "$dir"
-
- if ! makeDir "$dir"; then
- error "Failed to create directory \"$dir\" !" && return 1
- fi
+ mkdir -p "$dir"
size=$(stat -c%s "$iso")
size_gb=$(formatBytes "$size")
space=$(df --output=avail -B 1 "$dir" | tail -n 1)
space_gb=$(formatBytes "$space")
- if (( size < 100000000 )); then
+ if ((size<100000000)); then
error "Invalid ISO file: Size is smaller than 100 MB" && return 1
fi
@@ -549,35 +354,12 @@ extractImage() {
fi
rm -rf "$dir"
- /run/progress.sh "$dir" "$size" "$msg ([P])..." &
if ! 7z x "$iso" -o"$dir" > /dev/null; then
- fKill "progress.sh"
error "Failed to extract ISO file: $iso" && return 1
fi
- fKill "progress.sh"
-
- 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" -print -quit)
-
- 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
+ LABEL=$(isoinfo -d -i "$iso" | sed -n 's/Volume id: //p')
return 0
}
@@ -712,7 +494,7 @@ setXML() {
local file="/custom.xml"
if [ -d "$file" ]; then
- error "The bind $file maps to a file that does not exist!" && exit 67
+ warn "The file $file has an invalid path!"
fi
[ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml"
@@ -759,19 +541,20 @@ detectImage() {
fi
local src wim info
- src=$(find "$dir" -maxdepth 1 -type d -iname sources -print -quit)
+ src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1)
if [ ! -d "$src" ]; then
warn "failed to locate 'sources' folder in ISO image, $FB" && return 1
fi
- wim=$(find "$src" -maxdepth 1 -type f \( -iname install.wim -or -iname install.esd \) -print -quit)
+ wim=$(find "$src" -maxdepth 1 -type f -iname install.wim | head -n 1)
+ [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1)
if [ ! -f "$wim" ]; then
warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" && return 1
fi
- info=$(wimlib-imagex info -xml "$wim" | iconv -f UTF-16LE -t UTF-8)
+ info=$(wimlib-imagex info -xml "$wim" | tr -d '\000')
checkPlatform "$info" || exit 67
DETECTED=$(detectVersion "$info")
@@ -790,7 +573,7 @@ detectImage() {
desc=$(printEdition "$DETECTED" "$DETECTED")
detectLanguage "$info"
- if [[ "${LANGUAGE,,}" != "en" && "${LANGUAGE,,}" != "en-"* ]]; then
+ if [[ "${LANGUAGE,,}" != "en" ]] && [[ "${LANGUAGE,,}" != "en-"* ]]; then
language=$(getLanguage "$LANGUAGE" "desc")
desc+=" ($language)"
fi
@@ -798,10 +581,6 @@ 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"
@@ -852,7 +631,6 @@ updateXML() {
[ -z "$HEIGHT" ] && HEIGHT="720"
[ -z "$WIDTH" ] && WIDTH="1280"
- sed -i "s/>Windows for Docker>$APP for $ENGINE1080<\/VerticalResolution>/$HEIGHT<\/VerticalResolution>/g" "$asset"
sed -i "s/1920<\/HorizontalResolution>/$WIDTH<\/HorizontalResolution>/g" "$asset"
@@ -881,24 +659,22 @@ updateXML() {
user=$(echo "$USERNAME" | sed 's/[^[:alnum:]@!._-]//g')
if [ -n "$user" ]; then
- sed -i "s/-name \"Docker\"/-name \"$user\"/g" "$asset"
sed -i "s/Docker<\/Name>/$user<\/Name>/g" "$asset"
sed -i "s/where name=\"Docker\"/where name=\"$user\"/g" "$asset"
sed -i "s/Docker<\/FullName>/$user<\/FullName>/g" "$asset"
sed -i "s/Docker<\/Username>/$user<\/Username>/g" "$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/password<\/Value>/$admin<\/Value>/g" "$asset"
- sed -i "s/true<\/PlainText>/false<\/PlainText>/g" "$asset"
- sed -z "s/.........../\n $pw<\/Value>/g" -i "$asset"
- sed -z "s/.............../\n $pw<\/Value>/g" -i "$asset"
- sed -z "s/.........../\n $admin<\/Value>/g" -i "$asset"
- sed -z "s/.............../\n $admin<\/Value>/g" -i "$asset"
+ 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/password<\/Value>/$admin<\/Value>/g" "$asset"
+ sed -i "s/true<\/PlainText>/false<\/PlainText>/g" "$asset"
+ sed -z "s/.........../\n $pass<\/Value>/g" -i "$asset"
+ sed -z "s/.............../\n $pass<\/Value>/g" -i "$asset"
+ sed -z "s/.........../\n $admin<\/Value>/g" -i "$asset"
+ sed -z "s/.............../\n $admin<\/Value>/g" -i "$asset"
+ fi
if [ -n "$EDITION" ]; then
[[ "${EDITION^^}" == "CORE" ]] && EDITION="STANDARDCORE"
@@ -946,11 +722,7 @@ addDriver() {
if [ -z "$folder" ]; then
desc=$(printVersion "$id" "$id")
- 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
+ warn "no \"$driver\" driver available for \"$desc\" !" && return 0
fi
[ ! -d "$path/$driver/$folder" ] && return 0
@@ -988,7 +760,7 @@ addDrivers() {
warn "Windows version unknown, falling back to Windows 11 drivers..."
fi
- if ! bsdtar -xf /var/drivers.txz -C "$drivers"; then
+ if ! bsdtar -xf /drivers.txz -C "$drivers"; then
error "Failed to extract drivers from archive!" && return 1
fi
@@ -1057,20 +829,21 @@ updateImage() {
rm -rf "$tmp"
mkdir -p "$tmp"
- src=$(find "$dir" -maxdepth 1 -type d -iname sources -print -quit)
+ 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, $FB" && return 1
fi
- wim=$(find "$src" -maxdepth 1 -type f \( -iname boot.wim -or -iname boot.esd \) -print -quit)
+ wim=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1)
+ [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1)
if [ ! -f "$wim" ]; then
error "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" && return 1
fi
index="1"
- result=$(wimlib-imagex info -xml "$wim" | iconv -f UTF-16LE -t UTF-8)
+ result=$(wimlib-imagex info -xml "$wim" | tr -d '\000')
if [[ "${result^^}" == *""* ]]; then
index="2"
@@ -1126,7 +899,7 @@ updateImage() {
local find="$file"
[[ "$MANUAL" == [Yy1]* ]] && find="$org"
- path=$(find "$dir" -maxdepth 1 -type f -iname "$find" -print -quit)
+ path=$(find "$dir" -maxdepth 1 -type f -iname "$find" | head -n 1)
if [ -f "$path" ]; then
if [[ "$MANUAL" != [Yy1]* ]]; then
@@ -1170,8 +943,8 @@ buildImage() {
desc=$(printVersion "$DETECTED" "ISO")
- local msg="Building $desc image"
- info "$msg..." && html "$msg..."
+ local msg="Building $desc image..."
+ info "$msg" && html "$msg"
[ -z "$LABEL" ] && LABEL="Windows"
@@ -1188,8 +961,6 @@ buildImage() {
error "Not enough free space in $STORAGE, have $space_gb available but need at least $size_gb." && return 1
fi
- /run/progress.sh "$out" "$size" "$msg ([P])..." &
-
if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then
genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \
@@ -1210,8 +981,6 @@ buildImage() {
fi
- fKill "progress.sh"
-
if [ -n "$failed" ]; then
[ -s "$log" ] && echo "$(<"$log")"
error "Failed to build image!" && return 1
@@ -1224,57 +993,28 @@ buildImage() {
[[ "$error" != "$hide" ]] && echo "$error"
mv -f "$out" "$BOOT" || return 1
- ! setOwner "$BOOT" && error "Failed to set the owner for \"$BOOT\" !"
-
return 0
}
bootWindows() {
+ rm -rf "$TMP"
+
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
- if [ -z "${DISK_TYPE:-}" ]; then
- DISK_TYPE=$(<"$STORAGE/windows.type")
- DISK_TYPE="${DISK_TYPE//[![:print:]]/}"
- fi
+ [ -z "${DISK_TYPE:-}" ] && DISK_TYPE=$(<"$STORAGE/windows.type")
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
- if [[ "${PLATFORM,,}" == "x64" ]]; then
- MACHINE=$(<"$STORAGE/windows.old")
- MACHINE="${MACHINE//[![:print:]]/}"
- fi
+ [[ "${PLATFORM,,}" == "x64" ]] && MACHINE=$(<"$STORAGE/windows.old")
fi
return 0
@@ -1298,8 +1038,6 @@ if [ ! -s "$ISO" ] || [ ! -f "$ISO" ]; then
fi
fi
-DIR="$TMP/unpack"
-
if ! extractImage "$ISO" "$DIR" "$VERSION"; then
rm -f "$ISO" 2> /dev/null || true
exit 62
diff --git a/src/mido.sh b/src/mido.sh
index 369fc17..bbaa5c2 100644
--- a/src/mido.sh
+++ b/src/mido.sh
@@ -93,7 +93,6 @@ 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
@@ -182,7 +181,6 @@ download_windows_eval() {
local desc="$3"
local filter=""
local culture=""
- local compare=""
local language=""
local user_agent=""
local enterprise_type=""
@@ -255,7 +253,7 @@ download_windows_eval() {
iso_download_links=$(echo "$iso_download_page_html" | grep -io "$filter") || {
# This should only happen if there's been some change to the download endpoint web address
- if [[ "${lang,,}" == "en" || "${lang,,}" == "en-"* ]]; then
+ if [[ "${lang,,}" == "en" ]] || [[ "${lang,,}" == "en-"* ]]; then
error "Windows server download page gave us no download link!"
else
language=$(getLanguage "$lang" "desc")
@@ -265,38 +263,28 @@ download_windows_eval() {
}
case "$enterprise_type" in
- "iot" | "ltsc" )
- case "${PLATFORM,,}" in
- "x64" )
- if [[ "$windows_version" != "windows-10"* ]]; then
- iso_download_link=$(echo "$iso_download_links" | head -n 1)
- else
- iso_download_link=$(echo "$iso_download_links" | head -n 4 | tail -n 1)
- fi ;;
- "arm64" )
- iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) ;;
- esac ;;
"enterprise" )
- case "${PLATFORM,,}" in
- "x64" )
- if [[ "$windows_version" != "windows-10"* ]]; then
- iso_download_link=$(echo "$iso_download_links" | head -n 1)
- else
- iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1)
- fi ;;
- "arm64" )
- iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) ;;
- esac ;;
+ iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1)
+ ;;
+ "iot" )
+ if [[ "${PLATFORM,,}" == "x64" ]]; then
+ iso_download_link=$(echo "$iso_download_links" | head -n 1)
+ fi
+ if [[ "${PLATFORM,,}" == "arm64" ]]; then
+ iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1)
+ fi
+ ;;
+ "ltsc" )
+ iso_download_link=$(echo "$iso_download_links" | head -n 4 | tail -n 1)
+ ;;
"server" )
- case "${PLATFORM,,}" in
- "x64" )
- iso_download_link=$(echo "$iso_download_links" | head -n 1) ;;
- esac ;;
+ iso_download_link=$(echo "$iso_download_links" | head -n 1)
+ ;;
* )
error "Invalid type specified, value \"$enterprise_type\" is not recognized!" && return 1 ;;
esac
- [ -z "$iso_download_link" ] && error "Could not parse download link from page!" && return 1
+ [[ "$DEBUG" == [Yy1]* ]] && echo "Found download link: $iso_download_link"
# Follow redirect so proceeding log message is useful
# This is a request we make that Fido doesn't
@@ -307,30 +295,6 @@ download_windows_eval() {
return $?
}
- case "${PLATFORM,,}" in
- "x64" )
- if [[ "${iso_download_link,,}" != *"x64"* ]]; then
- echo "Found download link: $iso_download_link"
- error "Download link is for the wrong platform? Please report this at $SUPPORT/issues"
- return 1
- fi ;;
- "arm64" )
- if [[ "${iso_download_link,,}" != *"a64"* && "${iso_download_link,,}" != *"arm64"* ]]; then
- if [[ "$DEBUG" == [Yy1]* ]]; then
- echo "Found download link: $iso_download_link"
- echo "Link for ARM platform currently not available!"
- fi
- return 1
- fi ;;
- esac
-
- if [[ "$DEBUG" == [Yy1]* && "$VERIFY" == [Yy1]* && "${lang,,}" == "en"* ]]; then
- compare=$(getMido "$id" "$lang" "")
- if [[ "${iso_download_link,,}" != "${compare,,}" ]]; then
- echo "Retrieved link does not match the fixed link: $compare"
- fi
- fi
-
MIDO_URL="$iso_download_link"
return 0
}
@@ -349,8 +313,8 @@ getWindows() {
info "$msg" && html "$msg"
case "${version,,}" in
- "win2008r2" | "win81${PLATFORM,,}"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* )
- if [[ "${lang,,}" != "en" && "${lang,,}" != "en-"* ]]; then
+ "win2008r2" | "win7${PLATFORM,,}"* | "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
fi ;;
@@ -358,7 +322,8 @@ getWindows() {
case "${version,,}" in
"win11${PLATFORM,,}" ) ;;
- "win11${PLATFORM,,}-enterprise"* ) ;;
+ "win11${PLATFORM,,}-enterprise-iot"* ) ;;
+ "win11${PLATFORM,,}-enterprise-ltsc"* ) ;;
* )
if [[ "${PLATFORM,,}" != "x64" ]]; then
error "No download for the ${PLATFORM^^} platform available for $edition!"
@@ -376,7 +341,7 @@ getWindows() {
"win2025-eval" | "win2022-eval" | "win2019-eval" | "win2019-hv" | "win2016-eval" | "win2012r2-eval" )
download_windows_eval "$version" "$lang" "$edition" && return 0
;;
- "win81${PLATFORM,,}-enterprise"* | "win2008r2" )
+ "win7${PLATFORM,,}"* | "win81${PLATFORM,,}-enterprise"* | "win2008r2" )
;;
* ) error "Invalid VERSION specified, value \"$version\" is not recognized!" ;;
esac
@@ -387,36 +352,6 @@ getWindows() {
return 0
}
-getBuild() {
-
- local id="$1"
- local ret="$2"
- local url=""
- local name=""
- local build="$3"
- local edition=""
- local file="catalog.xml"
-
- case "${id,,}" in
- "win11${PLATFORM,,}" )
- name="Windows 11 Pro"
- url="https://worproject.com/dldserv/esd/getcatalog.php?build=${build}&arch=${PLATFORM^^}&edition=Professional" ;;
- "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval")
- name="Windows 11 Enterprise"
- url="https://worproject.com/dldserv/esd/getcatalog.php?build=${build}&arch=${PLATFORM^^}&edition=Enterprise" ;;
- esac
-
- case "${ret,,}" in
- "url" ) echo "$url" ;;
- "file" ) echo "$file" ;;
- "name" ) echo "$name" ;;
- "edition" ) echo "$edition" ;;
- *) echo "";;
- esac
-
- return 0
-}
-
getCatalog() {
local id="$1"
@@ -424,12 +359,6 @@ getCatalog() {
local url=""
local name=""
local edition=""
- local file="catalog.cab"
-
- if [[ "${id,,}" == "win11"* ]] && ! isCompatible; then
- # ARMv8.0 cannot run Windows 11 builds 24H2 and up.
- getBuild "$1" "$2" "22631.2861" && return 0
- fi
case "${id,,}" in
"win11${PLATFORM,,}" )
@@ -452,9 +381,8 @@ getCatalog() {
case "${ret,,}" in
"url" ) echo "$url" ;;
- "file" ) echo "$file" ;;
"name" ) echo "$name" ;;
- "edition" ) echo '[Edition="'"${edition}"'"]' ;;
+ "edition" ) echo "$edition" ;;
*) echo "";;
esac
@@ -467,132 +395,82 @@ getESD() {
local version="$2"
local lang="$3"
local desc="$4"
- local file
- local result
local culture
local language
- local edition
- local catalog
+ local editionName
+ local winCatalog size
- file=$(getCatalog "$version" "file")
- catalog=$(getCatalog "$version" "url")
culture=$(getLanguage "$lang" "culture")
- edition=$(getCatalog "$version" "edition")
+ winCatalog=$(getCatalog "$version" "url")
+ editionName=$(getCatalog "$version" "edition")
- if [ -z "$file" ] || [ -z "$catalog" ]; then
+ if [ -z "$winCatalog" ] || [ -z "$editionName" ]; then
error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1
fi
- local msg="Downloading catalog..."
+ local msg="Downloading product information from Microsoft server..."
info "$msg" && html "$msg"
rm -rf "$dir"
+ mkdir -p "$dir"
- if ! makeDir "$dir"; then
- error "Failed to create directory \"$dir\" !" && return 1
- fi
-
+ local wFile="catalog.cab"
local xFile="products.xml"
local eFile="esd_edition.xml"
local fFile="products_filter.xml"
- { wget "$catalog" -O "$dir/$file" -q --timeout=30 --no-http-keep-alive; rc=$?; } || :
+ { wget "$winCatalog" -O "$dir/$wFile" -q --timeout=30 --no-http-keep-alive; rc=$?; } || :
- msg="Failed to download $catalog"
+ msg="Failed to download $winCatalog"
(( rc == 3 )) && error "$msg , cannot write file (disk full?)" && return 1
(( rc == 4 )) && error "$msg , network failure!" && return 1
(( rc == 8 )) && error "$msg , server issued an error response!" && return 1
(( rc != 0 )) && error "$msg , reason: $rc" && return 1
- if [[ "$file" == *".xml" ]]; then
-
- mv -f "$dir/$file" "$dir/$xFile"
-
- else
-
- cd "$dir"
-
- if ! cabextract "$file" > /dev/null; then
- cd /run
- error "Failed to extract $file!" && return 1
- fi
+ cd "$dir"
+ if ! cabextract "$wFile" > /dev/null; then
cd /run
-
+ error "Failed to extract $wFile!" && return 1
fi
+ cd /run
+
if [ ! -s "$dir/$xFile" ]; then
- error "Failed to find $xFile in $file!" && return 1
+ error "Failed to find $xFile in $wFile!" && return 1
fi
- local edQuery='//File[Architecture="'${PLATFORM,,}'"]'"${edition}"''
- result=$(xmllint --nonet --xpath "${edQuery}" "$dir/$xFile" 2>/dev/null)
-
- if [ -z "$result" ]; then
-
- edQuery='//File[Architecture="'${PLATFORM^^}'"]'"${edition}"''
-
- result=$(xmllint --nonet --xpath "${edQuery}" "$dir/$xFile" 2>/dev/null)
-
- if [ -z "$result" ]; then
- desc=$(printEdition "$version" "$desc")
- language=$(getLanguage "$lang" "desc")
- error "No download link available for $desc!" && return 1
- fi
-
- fi
+ local edQuery='//File[Architecture="'${PLATFORM}'"][Edition="'${editionName}'"]'
echo -e '' > "$dir/$fFile"
- echo "$result" >> "$dir/$fFile"
+ xmllint --nonet --xpath "${edQuery}" "$dir/$xFile" >> "$dir/$fFile" 2>/dev/null
echo -e ''>> "$dir/$fFile"
- result=$(xmllint --nonet --xpath "//File[LanguageCode=\"${culture,,}\"]" "$dir/$fFile" 2>/dev/null)
+ xmllint --nonet --xpath "//File[LanguageCode=\"${culture,,}\"]" "$dir/$fFile" >"$dir/$eFile"
- if [ -z "$result" ]; then
+ size=$(stat -c%s "$dir/$eFile")
+ if ((size<20)); then
desc=$(printEdition "$version" "$desc")
language=$(getLanguage "$lang" "desc")
error "No download in the $language language available for $desc!" && return 1
fi
- echo "$result" > "$dir/$eFile"
-
local tag="FilePath"
- ESD=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g" 2>/dev/null)
+ ESD=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g")
if [ -z "$ESD" ]; then
error "Failed to find ESD URL in $eFile!" && return 1
fi
tag="Sha1"
- ESD_SUM=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g" 2>/dev/null)
-
- if [ -z "$ESD_SUM" ]; then
- error "Failed to find ESD checksum in $eFile!" && return 1
- fi
-
+ ESD_SUM=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g")
tag="Size"
- ESD_SIZE=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g" 2>/dev/null)
-
- if [ -z "$ESD_SIZE" ]; then
- error "Failed to find ESD filesize in $eFile!" && return 1
- fi
+ ESD_SIZE=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g")
rm -rf "$dir"
return 0
}
-isCompressed() {
-
- local file="$1"
-
- case "${file,,}" in
- *".7z" | *".zip" | *".rar" | *".lzma" | *".bz" | *".bz2" )
- return 0 ;;
- esac
-
- return 1
-}
-
verifyFile() {
local iso="$1"
@@ -600,8 +478,8 @@ verifyFile() {
local total="$3"
local check="$4"
- if [ -n "$size" ] && [[ "$total" != "$size" && "$size" != "0" ]]; then
- if [[ "$VERIFY" == [Yy1]* || "$DEBUG" == [Yy1]* ]]; then
+ if [ -n "$size" ] && [[ "$total" != "$size" ]] && [[ "$size" != "0" ]]; then
+ if [[ "$VERIFY" == [Yy1]* ]] || [[ "$DEBUG" == [Yy1]* ]]; then
warn "The downloaded file has a different size ( $total bytes) than expected ( $size bytes). Please report this at $SUPPORT/issues"
fi
fi
@@ -623,7 +501,7 @@ verifyFile() {
fi
if [[ "$hash" == "$check" ]]; then
- info "Successfully verified ISO!" && return 0
+ info "Succesfully verified ISO!" && return 0
fi
error "The downloaded file has an unknown $algo checksum: $hash , as the expected value was: $check. Please report this at $SUPPORT/issues"
@@ -638,10 +516,9 @@ downloadFile() {
local size="$4"
local lang="$5"
local desc="$6"
- local msg="Downloading $desc"
- local rc total total_gb progress domain dots agent space folder
+ local rc total total_gb progress domain dots space folder
- agent=$(get_agent)
+ rm -f "$iso"
if [ -n "$size" ] && [[ "$size" != "0" ]]; then
folder=$(dirname -- "$iso")
@@ -657,8 +534,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)
@@ -669,9 +546,9 @@ downloadFile() {
fi
info "$msg..."
- [[ "$DEBUG" == [Yy1]* ]] && echo "Downloading: $url"
+ /run/progress.sh "$iso" "$size" "$msg ([P])..." &
- { wget "$url" -O "$iso" --continue -q --timeout=30 --no-http-keep-alive --user-agent "$agent" --show-progress "$progress"; rc=$?; } || :
+ { wget "$url" -O "$iso" -q --timeout=30 --no-http-keep-alive --show-progress "$progress"; rc=$?; } || :
fKill "progress.sh"
@@ -679,59 +556,39 @@ downloadFile() {
total=$(stat -c%s "$iso")
total_gb=$(formatBytes "$total")
if [ "$total" -lt 100000000 ]; then
- error "Invalid download link: $url (is only $total_gb ?). 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
msg="Failed to download $url"
(( rc == 3 )) && error "$msg , cannot write file (disk full?)" && return 1
(( rc == 4 )) && error "$msg , network failure!" && return 1
- (( rc == 8 )) && error "$msg , server issued an error response! Please report this at $SUPPORT/issues" && return 1
+ (( rc == 8 )) && error "$msg , server issued an error response! Please report this at $SUPPORT/issues." && return 1
error "$msg , reason: $rc"
return 1
}
-delay() {
-
- local i
- local delay="$1"
- local msg="Will retry in X seconds..."
-
- info "${msg/X/$delay}"
-
- for i in $(seq "$delay" -1 1); do
- html "${msg/X/$i}"
- sleep 1
- done
-
- return 0
-}
-
downloadImage() {
local iso="$1"
local version="$2"
local lang="$3"
+ local delay=5
local tried="n"
local success="n"
- local seconds="5"
local url sum size base desc language
+ local msg="Will retry after $delay seconds..."
if [[ "${version,,}" == "http"* ]]; then
-
base=$(basename "$iso")
desc=$(fromFile "$base")
-
- rm -f "$iso"
downloadFile "$iso" "$version" "" "" "" "$desc" && return 0
- delay "$seconds"
+ info "$msg" && html "$msg" && sleep "$delay"
downloadFile "$iso" "$version" "" "" "" "$desc" && return 0
rm -f "$iso"
-
return 1
fi
@@ -741,7 +598,7 @@ downloadImage() {
desc=$(printVersion "$version" "")
- if [[ "${lang,,}" != "en" && "${lang,,}" != "en-"* ]]; then
+ if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then
language=$(getLanguage "$lang" "desc")
if ! validVersion "$version" "$lang"; then
desc=$(printEdition "$version" "$desc")
@@ -758,17 +615,15 @@ downloadImage() {
if getWindows "$version" "$lang" "$desc"; then
success="y"
else
- delay "$seconds"
+ info "$msg" && html "$msg" && sleep "$delay"
getWindows "$version" "$lang" "$desc" && success="y"
fi
if [[ "$success" == "y" ]]; then
size=$(getMido "$version" "$lang" "size" )
sum=$(getMido "$version" "$lang" "sum")
-
- rm -f "$iso"
downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0
- delay "$seconds"
+ info "$msg" && html "$msg" && sleep "$delay"
downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0
rm -f "$iso"
fi
@@ -779,7 +634,7 @@ downloadImage() {
if isESD "$version" "$lang"; then
if [[ "$tried" != "n" ]]; then
- info "Failed to download $desc, will try a different method now..."
+ info "Failed to download $desc, will try a diferent method now..."
fi
tried="y"
@@ -788,16 +643,14 @@ downloadImage() {
if getESD "$TMP/esd" "$version" "$lang" "$desc"; then
success="y"
else
- delay "$seconds"
+ info "$msg" && html "$msg" && sleep "$delay"
getESD "$TMP/esd" "$version" "$lang" "$desc" && success="y"
fi
if [[ "$success" == "y" ]]; then
ISO="${ISO%.*}.esd"
-
- rm -f "$ISO"
downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0
- delay "$seconds"
+ info "$msg" && html "$msg" && sleep "$delay"
downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0
rm -f "$ISO"
ISO="$iso"
@@ -810,18 +663,14 @@ downloadImage() {
url=$(getLink "$i" "$version" "$lang")
if [ -n "$url" ]; then
-
if [[ "$tried" != "n" ]]; then
info "Failed to download $desc, will try another mirror now..."
fi
-
tried="y"
size=$(getSize "$i" "$version" "$lang")
sum=$(getHash "$i" "$version" "$lang")
-
- rm -f "$iso"
downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0
- delay "$seconds"
+ info "$msg" && html "$msg" && sleep "$delay"
downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0
rm -f "$iso"
fi
diff --git a/src/power.sh b/src/power.sh
index 98a6f73..e7ceaff 100644
--- a/src/power.sh
+++ b/src/power.sh
@@ -1,11 +1,11 @@
#!/usr/bin/env bash
set -Eeuo pipefail
-: "${QEMU_TIMEOUT:="110"}" # QEMU Termination timeout
-
# Configure QEMU for graceful shutdown
QEMU_TERM=""
+QEMU_PORT=7100
+QEMU_TIMEOUT=110
QEMU_DIR="/run/shm"
QEMU_PID="$QEMU_DIR/qemu.pid"
QEMU_PTY="$QEMU_DIR/qemu.pty"
@@ -35,7 +35,7 @@ boot() {
grep -Fq "BOOTMGR is missing" "$QEMU_PTY" && fail="y"
fi
if [ -z "$fail" ]; then
- info "Windows started successfully, visit http://127.0.0.1:8006/ to view the screen..."
+ info "Windows started succesfully, visit http://localhost:8006/ to view the screen..."
return 0
fi
fi
@@ -74,7 +74,6 @@ ready() {
finish() {
local pid
- local cnt=0
local reason=$1
touch "$QEMU_END"
@@ -82,32 +81,20 @@ finish() {
if [ -s "$QEMU_PID" ]; then
pid=$(<"$QEMU_PID")
- echo && error "Forcefully terminating Windows, reason: $reason..."
+ error "Forcefully terminating Windows, reason: $reason..."
{ kill -15 "$pid" || true; } 2>/dev/null
while isAlive "$pid"; do
-
sleep 1
- cnt=$((cnt+1))
-
# Workaround for zombie pid
[ ! -s "$QEMU_PID" ] && break
-
- if [ "$cnt" == "5" ]; then
- echo && error "QEMU did not terminate itself, forcefully killing process..."
- { kill -9 "$pid" || true; } 2>/dev/null
- fi
-
done
-
fi
if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$BOOT" ]; then
# Remove CD-ROM ISO after install
if ready; then
- local file="$STORAGE/windows.boot"
- touch "$file"
- ! setOwner "$file" && error "Failed to set the owner for \"$file\" !"
+ touch "$STORAGE/windows.boot"
if [[ "$REMOVE" != [Nn]* ]]; then
rm -f "$BOOT" 2>/dev/null || true
fi
@@ -116,19 +103,11 @@ finish() {
pid="/var/run/tpm.pid"
[ -s "$pid" ] && pKill "$(<"$pid")"
- rm -f "$pid"
pid="/var/run/wsdd.pid"
[ -s "$pid" ] && pKill "$(<"$pid")"
- rm -f "$pid"
- pid="/var/run/samba/nmbd.pid"
- [ -s "$pid" ] && pKill "$(<"$pid")"
- rm -f "$pid"
-
- pid="/var/run/samba/smbd.pid"
- [ -s "$pid" ] && pKill "$(<"$pid")"
- rm -f "$pid"
+ fKill "smbd"
closeNetwork
@@ -160,7 +139,7 @@ terminal() {
fi
if [ ! -c "$dev" ]; then
- dev=$(echo 'info chardev' | nc -q 1 -w 1 localhost "$MON_PORT" | tr -d '\000')
+ dev=$(echo 'info chardev' | nc -q 1 -w 1 localhost "$QEMU_PORT" | tr -d '\000')
dev="${dev#*serial0}"
dev="${dev#*pty:}"
dev="${dev%%$'\n'*}"
@@ -209,7 +188,7 @@ _graceful_shutdown() {
fi
# Send ACPI shutdown signal
- echo 'system_powerdown' | nc -q 1 -w 1 localhost "$MON_PORT" > /dev/null
+ echo 'system_powerdown' | nc -q 1 -w 1 localhost "${QEMU_PORT}" > /dev/null
local cnt=0
while [ "$cnt" -lt "$QEMU_TIMEOUT" ]; do
@@ -224,7 +203,7 @@ _graceful_shutdown() {
info "Waiting for Windows to shutdown... ($cnt/$QEMU_TIMEOUT)"
# Send ACPI shutdown signal
- echo 'system_powerdown' | nc -q 1 -w 1 localhost "$MON_PORT" > /dev/null
+ echo 'system_powerdown' | nc -q 1 -w 1 localhost "${QEMU_PORT}" > /dev/null
done
@@ -236,7 +215,7 @@ _graceful_shutdown() {
}
SERIAL="pty"
-MONITOR="telnet:localhost:$MON_PORT,server,nowait,nodelay"
+MONITOR="telnet:localhost:$QEMU_PORT,server,nowait,nodelay"
MONITOR+=" -daemonize -D $QEMU_LOG -pidfile $QEMU_PID"
_trap _graceful_shutdown SIGTERM SIGHUP SIGINT SIGABRT SIGQUIT
diff --git a/src/samba.sh b/src/samba.sh
index 7cd3210..7105a89 100644
--- a/src/samba.sh
+++ b/src/samba.sh
@@ -1,123 +1,72 @@
#!/usr/bin/env bash
set -Eeuo pipefail
-: "${SAMBA:="Y"}" # Enable Samba
-: "${SAMBA_LEVEL:="1"}" # Logging level
-: "${SAMBA_DEBUG:="N"}" # Disable debug
-
-tmp="/tmp/smb"
-rm -rf "$tmp"
-
-rm -f /var/run/wsdd.pid
-rm -f /var/run/samba/nmbd.pid
-rm -f /var/run/samba/smbd.pid
+: "${SAMBA:="Y"}"
[[ "$SAMBA" == [Nn]* ]] && return 0
[[ "$NETWORK" == [Nn]* ]] && return 0
-if [[ "$DHCP" == [Yy1]* ]]; then
- socket="$IP"
- hostname="$IP"
- interfaces="$VM_NET_DEV"
-else
- hostname="host.lan"
- case "${NETWORK,,}" in
- "passt" | "slirp" )
- interfaces="lo"
- socket="127.0.0.1" ;;
- *)
- socket="$VM_NET_IP"
- interfaces="$VM_NET_BRIDGE" ;;
- esac
- if [ -n "${SAMBA_INTERFACE:-}" ]; then
- interfaces+=",$SAMBA_INTERFACE"
- fi
-fi
+hostname="host.lan"
+interface="dockerbridge"
-html "Initializing shared folder..."
-SAMBA_CONFIG="/etc/samba/smb.conf"
-[[ "$DEBUG" == [Yy1]* ]] && echo "Starting Samba daemon..."
+if [[ "$DHCP" == [Yy1]* ]]; then
+ hostname="$IP"
+ interface="$VM_NET_DEV"
+fi
addShare() {
local dir="$1"
- local ref="$2"
- local name="$3"
- local comment="$4"
- local cfg="$5"
- local owner=""
+ local name="$2"
+ local comment="$3"
- if [ ! -d "$dir" ]; then
- if ! mkdir -p "$dir"; then
- error "Failed to create shared folder ($dir)." && return 1
- fi
- fi
-
- if ! ls -A "$dir" >/dev/null 2>&1; then
- msg="No permission to access shared folder ($dir)."
- msg+=" If SELinux is active, you need to add the \":Z\" flag to the bind mount."
- error "$msg" && return 1
- fi
-
- if [ ! -w "$dir" ]; then
- msg="shared folder ($dir) is not writeable!"
- warn "$msg"
- fi
+ mkdir -p "$dir" || return 1
if [ -z "$(ls -A "$dir")" ]; then
- if ! chmod 2777 "$dir"; then
- error "Failed to set permissions for directory $dir" && return 1
- fi
- owner=$(stat -c %u "$dir")
- if [[ "$owner" == "0" ]]; then
- if ! chown "1000:1000" "$dir"; then
- error "Failed to set ownership for directory $dir" && return 1
- fi
- fi
- fi
- if [[ "$dir" == "$tmp" ]]; then
+ chmod 777 "$dir"
- { echo "--------------------------------------------------------"
- echo " $APP for $ENGINE v$( "$dir/readme.txt"
fi
- { echo ""
- echo "[$name]"
- echo " path = $dir"
- echo " comment = $comment"
- echo " writable = yes"
- echo " guest ok = yes"
- echo " guest only = yes"
- } >> "$cfg"
+ { echo ""
+ echo "[$name]"
+ echo " path = $dir"
+ echo " comment = $comment"
+ echo " writable = yes"
+ echo " guest ok = yes"
+ echo " guest only = yes"
+ echo " force user = root"
+ echo " force group = root"
+ } >> "/etc/samba/smb.conf"
return 0
}
-{ echo "[global]"
+{ echo "[global]"
echo " server string = Dockur"
echo " netbios name = $hostname"
echo " workgroup = WORKGROUP"
- echo " interfaces = $interfaces"
+ echo " interfaces = $interface"
echo " bind interfaces only = yes"
- echo " socket address = $socket"
echo " security = user"
echo " guest account = nobody"
echo " map to guest = Bad User"
@@ -125,104 +74,51 @@ addShare() {
echo " follow symlinks = yes"
echo " wide links = yes"
echo " unix extensions = no"
- echo " inherit owner = yes"
- echo " create mask = 0666"
- echo " directory mask = 02777"
- echo " force user = root"
- echo " force group = root"
- echo " force create mode = 0666"
- echo " force directory mode = 02777"
echo ""
- echo " # Disable printing services"
+ echo " # disable printing services"
echo " load printers = no"
echo " printing = bsd"
echo " printcap name = /dev/null"
echo " disable spoolss = yes"
-} > "$SAMBA_CONFIG"
+} > "/etc/samba/smb.conf"
-# Add shared folders
-share="/shared"
-[ ! -d "$share" ] && [ -d "$STORAGE/shared" ] && share="$STORAGE/shared"
-[ ! -d "$share" ] && [ -d "/data" ] && share="/data"
+share="/data"
[ ! -d "$share" ] && [ -d "$STORAGE/data" ] && share="$STORAGE/data"
-[ ! -d "$share" ] && share="$tmp"
+[ ! -d "$share" ] && [ -d "/shared" ] && share="/shared"
+[ ! -d "$share" ] && [ -d "$STORAGE/shared" ] && share="$STORAGE/shared"
-! addShare "$share" "/shared" "Data" "Shared" "$SAMBA_CONFIG" && return 0
+addShare "$share" "Data" "Shared" || error "Failed to create shared folder!"
-if [ -d "/shared2" ]; then
- addShare "/shared2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || :
-else
- if [ -d "/data2" ]; then
- addShare "/data2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || :
- fi
+[ -d "/data2" ] && addShare "/data2" "Data2" "Shared"
+[ -d "/data3" ] && addShare "/data3" "Data3" "Shared"
+
+IFS=',' read -r -a dirs <<< "${SHARES:-}"
+for dir in "${dirs[@]}"; do
+ [ ! -d "$dir" ] && continue
+ dir_name=$(basename "$dir")
+ addShare "$dir" "$dir_name" "Shared $dir_name" || error "Failed to create shared folder for $dir!"
+done
+
+# Fix Samba permissions
+[ -d /run/samba/msg.lock ] && chmod -R 0755 /run/samba/msg.lock
+[ -d /var/log/samba/cores ] && chmod -R 0700 /var/log/samba/cores
+[ -d /var/cache/samba/msg.lock ] && chmod -R 0755 /var/cache/samba/msg.lock
+
+if ! smbd; then
+ error "Samba daemon failed to start!"
+ smbd -i --debug-stdout || true
fi
-if [ -d "/shared3" ]; then
- addShare "/shared3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || :
-else
- if [ -d "/data3" ]; then
- addShare "/data3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || :
- fi
-fi
-
-# Create directories if missing
-mkdir -p /var/lib/samba/sysvol
-mkdir -p /var/lib/samba/private
-mkdir -p /var/lib/samba/bind-dns
-
-# Try to repair Samba permissions
-[ -d /run/samba/msg.lock ] && chmod -R 0755 /run/samba/msg.lock 2>/dev/null || :
-[ -d /var/log/samba/cores ] && chmod -R 0700 /var/log/samba/cores 2>/dev/null || :
-[ -d /var/cache/samba/msg.lock ] && chmod -R 0755 /var/cache/samba/msg.lock 2>/dev/null || :
-
-rm -f /var/log/samba/log.smbd
-
-if ! smbd -l /var/log/samba; then
- SAMBA_DEBUG="Y"
- error "Failed to start Samba daemon!"
-fi
-
-if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then
- tail -fn +0 /var/log/samba/log.smbd --pid=$$ &
-fi
-
-case "${NETWORK,,}" in
- "passt" | "slirp" )
- return 0 ;;
-esac
-
if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then
-
# Enable NetBIOS on Windows 7 and lower
- [[ "$DEBUG" == [Yy1]* ]] && echo "Starting NetBIOS daemon..."
-
- rm -f /var/log/samba/log.nmbd
-
- if ! nmbd -l /var/log/samba; then
- SAMBA_DEBUG="Y"
- error "Failed to start NetBIOS daemon!"
+ if ! nmbd; then
+ error "NetBIOS daemon failed to start!"
+ nmbd -i --debug-stdout || true
fi
-
- if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then
- tail -fn +0 /var/log/samba/log.nmbd --pid=$$ &
- fi
-
else
-
# Enable Web Service Discovery on Vista and up
- [[ "$DEBUG" == [Yy1]* ]] && echo "Starting wsddn daemon..."
-
- rm -f /var/log/wsddn.log
-
- if ! wsddn -i "${interfaces%%,*}" -H "$hostname" --unixd --log-file=/var/log/wsddn.log --pid-file=/var/run/wsdd.pid; then
- SAMBA_DEBUG="Y"
- error "Failed to start wsddn daemon!"
- fi
-
- if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then
- tail -fn +0 /var/log/wsddn.log --pid=$$ &
- fi
-
+ wsdd -i "$interface" -p -n "$hostname" &
+ echo "$!" > /var/run/wsdd.pid
fi
return 0