mirror of
https://github.com/dockur/windows.git
synced 2026-01-22 10:53:06 +00:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
71c9586fb4 | ||
|
|
81e9fff270 | ||
|
|
90df2d88e3 | ||
|
|
ffcb483452 | ||
|
|
c081ec2693 | ||
|
|
96fbb26d6f | ||
|
|
db45817a7c | ||
|
|
a9e3ffa413 |
@@ -1,7 +1,7 @@
|
|||||||
ARG VERSION_ARG="latest"
|
ARG VERSION_ARG="latest"
|
||||||
FROM scratch AS build-amd64
|
FROM scratch AS build-amd64
|
||||||
|
|
||||||
COPY --from=qemux/qemu:7.04 / /
|
COPY --from=qemux/qemu:7.07 / /
|
||||||
|
|
||||||
ARG DEBCONF_NOWARNINGS="yes"
|
ARG DEBCONF_NOWARNINGS="yes"
|
||||||
ARG DEBIAN_FRONTEND="noninteractive"
|
ARG DEBIAN_FRONTEND="noninteractive"
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas
|
|||||||
|
|
||||||
##### Via Github Codespaces:
|
##### Via Github Codespaces:
|
||||||
|
|
||||||
[`Click here to launch this container in the cloud!`](https://github.com/codespaces/new?skip_quickstart=true&machine=basicLinux32gb&repo=743140652&ref=master&devcontainer_path=.devcontainer.json)
|
[](https://codespaces.new/dockur/windows)
|
||||||
|
|
||||||
## FAQ 💬
|
## FAQ 💬
|
||||||
|
|
||||||
|
|||||||
@@ -741,11 +741,6 @@ getMido() {
|
|||||||
sum="2dedd44c45646c74efc5a028f65336027e14a56f76686a4631cf94ffe37c72f2"
|
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"
|
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" )
|
"win2025-eval" )
|
||||||
size=6014152704
|
size=6014152704
|
||||||
sum="d0ef4502e350e3c6c53c15b1b3020d38a5ded011bf04998e950720ac8579b23d"
|
sum="d0ef4502e350e3c6c53c15b1b3020d38a5ded011bf04998e950720ac8579b23d"
|
||||||
@@ -887,7 +882,7 @@ getLink1() {
|
|||||||
sum="0b738b55a5ea388ad016535a5c8234daf2e5715a0638488ddd8a228a836055a1"
|
sum="0b738b55a5ea388ad016535a5c8234daf2e5715a0638488ddd8a228a836055a1"
|
||||||
url="7/en_windows_7_with_sp1_x64.iso"
|
url="7/en_windows_7_with_sp1_x64.iso"
|
||||||
;;
|
;;
|
||||||
"win7x86" | "win7x86-enterprise" )
|
"win7x86" | "win7x86-enterprise" | "win7x86-enterprise-eval" )
|
||||||
size=2434502656
|
size=2434502656
|
||||||
sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad"
|
sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad"
|
||||||
url="7/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso"
|
url="7/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso"
|
||||||
@@ -971,7 +966,7 @@ getLink2() {
|
|||||||
sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808"
|
sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808"
|
||||||
url="Windows%207/en_windows_7_ultimate_with_sp1_x64_dvd_u_677332.iso"
|
url="Windows%207/en_windows_7_ultimate_with_sp1_x64_dvd_u_677332.iso"
|
||||||
;;
|
;;
|
||||||
"win7x86" | "win7x86-enterprise" )
|
"win7x86" | "win7x86-enterprise" | "win7x86-enterprise-eval" )
|
||||||
size=2434502656
|
size=2434502656
|
||||||
sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad"
|
sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad"
|
||||||
url="Windows%207/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso"
|
url="Windows%207/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso"
|
||||||
@@ -1055,11 +1050,36 @@ getLink3() {
|
|||||||
sum="a11116c0645d892d6a5a7c585ecc1fa13aa66f8c7cc6b03bf1f27bd16860cc35"
|
sum="a11116c0645d892d6a5a7c585ecc1fa13aa66f8c7cc6b03bf1f27bd16860cc35"
|
||||||
url="tiny-10-23-h2/tiny10%20x64%2023h2.iso"
|
url="tiny-10-23-h2/tiny10%20x64%2023h2.iso"
|
||||||
;;
|
;;
|
||||||
|
"win7x64" | "win7x64-enterprise" | "win7x64-enterprise-eval" )
|
||||||
|
size=3182604288
|
||||||
|
sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7"
|
||||||
|
url="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651_202006/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso"
|
||||||
|
;;
|
||||||
|
"win7x64-ultimate" )
|
||||||
|
size=3320903680
|
||||||
|
sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808"
|
||||||
|
url="win7-ult-sp1-english/Win7_Ult_SP1_English_x64.iso"
|
||||||
|
;;
|
||||||
|
"win7x86" | "win7x86-enterprise" | "win7x86-enterprise-eval" )
|
||||||
|
size=2434502656
|
||||||
|
sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad"
|
||||||
|
url="en_windows_7_enterprise_with_sp1_x86_dvd_u_677710_202006/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso"
|
||||||
|
;;
|
||||||
|
"win7x86-ultimate" )
|
||||||
|
size=2564476928
|
||||||
|
sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940"
|
||||||
|
url="win7-ult-sp1-english/Win7_Ult_SP1_English_x32.iso"
|
||||||
|
;;
|
||||||
"winxpx86" )
|
"winxpx86" )
|
||||||
size=617756672
|
size=617756672
|
||||||
sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46"
|
sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46"
|
||||||
url="XPPRO_SP3_ENU/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso"
|
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"
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
case "${ret,,}" in
|
case "${ret,,}" in
|
||||||
|
|||||||
@@ -10,21 +10,31 @@ EFISYS="efi/microsoft/boot/efisys_noprompt.bin"
|
|||||||
skipInstall() {
|
skipInstall() {
|
||||||
|
|
||||||
local iso="$1"
|
local iso="$1"
|
||||||
|
local method=""
|
||||||
local magic byte
|
local magic byte
|
||||||
local boot="$STORAGE/windows.boot"
|
local boot="$STORAGE/windows.boot"
|
||||||
local previous="$STORAGE/windows.base"
|
local previous="$STORAGE/windows.base"
|
||||||
|
|
||||||
if [ -f "$previous" ]; then
|
if [ -f "$previous" ]; then
|
||||||
previous=$(<"$previous")
|
previous=$(<"$previous")
|
||||||
|
previous="${previous//[![:print:]]/}"
|
||||||
if [ -n "$previous" ]; then
|
if [ -n "$previous" ]; then
|
||||||
previous="$STORAGE/$previous"
|
if [[ "${STORAGE,,}/${previous,,}" != "${iso,,}" ]]; then
|
||||||
if [[ "${previous,,}" != "${iso,,}" ]]; then
|
|
||||||
if [ -f "$boot" ] && hasDisk; then
|
if [ -f "$boot" ] && hasDisk; then
|
||||||
info "Detected that the version was changed, but ignoring this because Windows is already installed."
|
if [[ "${iso,,}" == "${STORAGE,,}/windows."* ]]; then
|
||||||
info "Please start with an empty /storage folder, if you want to install a different version of Windows."
|
method="your custom .iso file"
|
||||||
|
else
|
||||||
|
if [[ "${previous,,}" != "windows."* ]]; then
|
||||||
|
method="the VERSION variable"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ -n "$method" ]; then
|
||||||
|
info "Detected that $method was changed, but ignoring this because Windows is already installed."
|
||||||
|
info "Please start with an empty /storage folder, if you want to install a different version of Windows."
|
||||||
|
fi
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
[ -f "$previous" ] && rm -f "$previous"
|
rm -f "$STORAGE/$previous"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -199,13 +209,19 @@ abortInstall() {
|
|||||||
|
|
||||||
detectCustom() {
|
detectCustom() {
|
||||||
|
|
||||||
local file base
|
local dir file base
|
||||||
local fname="custom.iso"
|
local fname="custom.iso"
|
||||||
|
local boot="$STORAGE/windows.boot"
|
||||||
|
|
||||||
CUSTOM=""
|
CUSTOM=""
|
||||||
|
|
||||||
if [ -d "/$fname" ]; then
|
dir=$(find / -maxdepth 1 -type d -iname "$fname" | head -n 1)
|
||||||
error "The file /$fname has an invalid path!" && return 1
|
[ ! -d "$dir" ] && dir=$(find "$STORAGE" -maxdepth 1 -type d -iname "$fname" | head -n 1)
|
||||||
|
|
||||||
|
if [ -d "$dir" ]; then
|
||||||
|
if ! hasDisk || [ ! -f "$boot" ]; then
|
||||||
|
error "The bind $dir maps to a file that does not exist!" && return 1
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
file=$(find / -maxdepth 1 -type f -iname "$fname" | head -n 1)
|
file=$(find / -maxdepth 1 -type f -iname "$fname" | head -n 1)
|
||||||
@@ -494,7 +510,7 @@ setXML() {
|
|||||||
local file="/custom.xml"
|
local file="/custom.xml"
|
||||||
|
|
||||||
if [ -d "$file" ]; then
|
if [ -d "$file" ]; then
|
||||||
warn "The file $file has an invalid path!"
|
error "The bind $file maps to a file that does not exist!" && exit 67
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml"
|
[ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml"
|
||||||
@@ -1014,19 +1030,27 @@ bootWindows() {
|
|||||||
|
|
||||||
if [ -f "$STORAGE/windows.args" ]; then
|
if [ -f "$STORAGE/windows.args" ]; then
|
||||||
ARGS=$(<"$STORAGE/windows.args")
|
ARGS=$(<"$STORAGE/windows.args")
|
||||||
|
ARGS="${ARGS//[![:print:]]/}"
|
||||||
ARGUMENTS="$ARGS ${ARGUMENTS:-}"
|
ARGUMENTS="$ARGS ${ARGUMENTS:-}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then
|
if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then
|
||||||
[ -z "${DISK_TYPE:-}" ] && DISK_TYPE=$(<"$STORAGE/windows.type")
|
if [ -z "${DISK_TYPE:-}" ]; then
|
||||||
|
DISK_TYPE=$(<"$STORAGE/windows.type")
|
||||||
|
DISK_TYPE="${DISK_TYPE//[![:print:]]/}"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then
|
if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then
|
||||||
BOOT_MODE=$(<"$STORAGE/windows.mode")
|
BOOT_MODE=$(<"$STORAGE/windows.mode")
|
||||||
|
BOOT_MODE="${BOOT_MODE//[![:print:]]/}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then
|
if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then
|
||||||
[[ "${PLATFORM,,}" == "x64" ]] && MACHINE=$(<"$STORAGE/windows.old")
|
if [[ "${PLATFORM,,}" == "x64" ]]; then
|
||||||
|
MACHINE=$(<"$STORAGE/windows.old")
|
||||||
|
MACHINE="${MACHINE//[![:print:]]/}"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ download_windows() {
|
|||||||
|
|
||||||
# uuidgen: For MacOS (installed by default) and other systems (e.g. with no /proc) that don't have a kernel interface for generating random UUIDs
|
# 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=$(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
|
# 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
|
# Product edition ID: This specifies both the Windows release (e.g. 22H2) and edition ("multi-edition" is default, either Home/Pro/Edu/etc., we select "Pro" in the answer files) in one number
|
||||||
@@ -313,7 +314,7 @@ getWindows() {
|
|||||||
info "$msg" && html "$msg"
|
info "$msg" && html "$msg"
|
||||||
|
|
||||||
case "${version,,}" in
|
case "${version,,}" in
|
||||||
"win2008r2" | "win7${PLATFORM,,}"* | "win81${PLATFORM,,}"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* )
|
"win2008r2" | "win81${PLATFORM,,}"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* )
|
||||||
if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then
|
if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then
|
||||||
error "No download in the $language language available for $edition!"
|
error "No download in the $language language available for $edition!"
|
||||||
MIDO_URL="" && return 1
|
MIDO_URL="" && return 1
|
||||||
@@ -341,7 +342,7 @@ getWindows() {
|
|||||||
"win2025-eval" | "win2022-eval" | "win2019-eval" | "win2019-hv" | "win2016-eval" | "win2012r2-eval" )
|
"win2025-eval" | "win2022-eval" | "win2019-eval" | "win2019-hv" | "win2016-eval" | "win2012r2-eval" )
|
||||||
download_windows_eval "$version" "$lang" "$edition" && return 0
|
download_windows_eval "$version" "$lang" "$edition" && return 0
|
||||||
;;
|
;;
|
||||||
"win7${PLATFORM,,}"* | "win81${PLATFORM,,}-enterprise"* | "win2008r2" )
|
"win81${PLATFORM,,}-enterprise"* | "win2008r2" )
|
||||||
;;
|
;;
|
||||||
* ) error "Invalid VERSION specified, value \"$version\" is not recognized!" ;;
|
* ) error "Invalid VERSION specified, value \"$version\" is not recognized!" ;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
Reference in New Issue
Block a user