mirror of
https://github.com/dockur/windows.git
synced 2026-01-13 14:35:27 +00:00
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c8b4cb9c14 | ||
|
|
5425783f5c | ||
|
|
221f4feac3 | ||
|
|
a14426478c | ||
|
|
e56f059bd2 | ||
|
|
4a5e455389 | ||
|
|
0f918c8cb0 | ||
|
|
9c08dc7b1e | ||
|
|
bfc9b357e5 | ||
|
|
ea3003dec5 | ||
|
|
06518d8eb3 |
2
.github/workflows/check.yml
vendored
2
.github/workflows/check.yml
vendored
@@ -18,7 +18,7 @@ jobs:
|
||||
path: "assets"
|
||||
file-endings: ".xml"
|
||||
- name: Lint Dockerfile
|
||||
uses: hadolint/hadolint-action@v3.2.0
|
||||
uses: hadolint/hadolint-action@v3.3.0
|
||||
with:
|
||||
dockerfile: Dockerfile
|
||||
ignore: DL3006,DL3008
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
ARG VERSION_ARG="latest"
|
||||
FROM scratch AS build-amd64
|
||||
|
||||
COPY --from=qemux/qemu:7.14 / /
|
||||
COPY --from=qemux/qemu:7.16 / /
|
||||
|
||||
ARG TARGETARCH
|
||||
ARG DEBCONF_NOWARNINGS="yes"
|
||||
|
||||
@@ -436,7 +436,7 @@ printVersion() {
|
||||
"tiny11"* ) desc="Tiny 11" ;;
|
||||
"tiny10"* ) desc="Tiny 10" ;;
|
||||
"core11"* ) desc="Core 11" ;;
|
||||
"nano11"* ) desc="Nano 11" ;;
|
||||
"nano11"* ) desc="Nano 11" ;;
|
||||
"win7"* ) desc="Windows 7" ;;
|
||||
"win8"* ) desc="Windows 8" ;;
|
||||
"win10"* ) desc="Windows 10" ;;
|
||||
@@ -577,7 +577,7 @@ fromFile() {
|
||||
;;
|
||||
"nano11"* | "nano_11"* )
|
||||
id="nano11"
|
||||
;;
|
||||
;;
|
||||
"tiny11core"* | "tiny11_core"* | "tiny_11_core"* )
|
||||
id="core11"
|
||||
;;
|
||||
@@ -718,7 +718,7 @@ getMido() {
|
||||
local sum=""
|
||||
local size=""
|
||||
|
||||
[[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0
|
||||
[[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0
|
||||
|
||||
case "${id,,}" in
|
||||
"win11x64" )
|
||||
@@ -812,7 +812,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" )
|
||||
@@ -956,7 +956,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" )
|
||||
@@ -1055,7 +1055,7 @@ getLink3() {
|
||||
local size=""
|
||||
local host="https://nixsys.com/drivers"
|
||||
|
||||
[[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0
|
||||
[[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0
|
||||
|
||||
case "${id,,}" in
|
||||
"win7x64" | "win7x64-ultimate" )
|
||||
@@ -1098,7 +1098,7 @@ 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" )
|
||||
@@ -1406,7 +1406,7 @@ prepareInstall() {
|
||||
error "Failed to locate directory \"$target\" in $desc ISO image!" && return 1
|
||||
fi
|
||||
|
||||
if [[ "${driver,,}" == "xp" ]] || [[ "${driver,,}" == "2k3" ]]; then
|
||||
if [[ "${driver,,}" == "xp" || "${driver,,}" == "2k3" ]]; then
|
||||
|
||||
local msg="Adding drivers to image..."
|
||||
info "$msg" && html "$msg"
|
||||
@@ -1885,6 +1885,10 @@ skipVersion() {
|
||||
return 1
|
||||
}
|
||||
|
||||
isCompatible() {
|
||||
return 0
|
||||
}
|
||||
|
||||
setMachine() {
|
||||
|
||||
local id="$1"
|
||||
|
||||
@@ -212,7 +212,7 @@ finishInstall() {
|
||||
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"
|
||||
echo "$BOOT_MODE" > "$STORAGE/windows.mode"
|
||||
@@ -696,7 +696,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
|
||||
@@ -704,7 +704,7 @@ detectImage() {
|
||||
info "Detected: $desc"
|
||||
setXML "" && return 0
|
||||
|
||||
if [[ "$DETECTED" == "win81x86"* ]] || [[ "$DETECTED" == "win10x86"* ]]; then
|
||||
if [[ "$DETECTED" == "win81x86"* || "$DETECTED" == "win10x86"* ]]; then
|
||||
error "The 32-bit version of $desc is not supported!" && return 1
|
||||
fi
|
||||
|
||||
|
||||
138
src/mido.sh
138
src/mido.sh
@@ -254,7 +254,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")
|
||||
@@ -327,7 +327,7 @@ getWindows() {
|
||||
|
||||
case "${version,,}" in
|
||||
"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!"
|
||||
MIDO_URL="" && return 1
|
||||
fi ;;
|
||||
@@ -364,6 +364,36 @@ 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"
|
||||
@@ -371,6 +401,12 @@ 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,,}" )
|
||||
@@ -393,8 +429,9 @@ getCatalog() {
|
||||
|
||||
case "${ret,,}" in
|
||||
"url" ) echo "$url" ;;
|
||||
"file" ) echo "$file" ;;
|
||||
"name" ) echo "$name" ;;
|
||||
"edition" ) echo "$edition" ;;
|
||||
"edition" ) echo '[Edition="'"${edition}"'"]' ;;
|
||||
*) echo "";;
|
||||
esac
|
||||
|
||||
@@ -407,62 +444,71 @@ getESD() {
|
||||
local version="$2"
|
||||
local lang="$3"
|
||||
local desc="$4"
|
||||
local file
|
||||
local result
|
||||
local culture
|
||||
local language
|
||||
local editionName
|
||||
local winCatalog
|
||||
local edition
|
||||
local catalog
|
||||
|
||||
file=$(getCatalog "$version" "file")
|
||||
catalog=$(getCatalog "$version" "url")
|
||||
culture=$(getLanguage "$lang" "culture")
|
||||
winCatalog=$(getCatalog "$version" "url")
|
||||
editionName=$(getCatalog "$version" "edition")
|
||||
edition=$(getCatalog "$version" "edition")
|
||||
|
||||
if [ -z "$winCatalog" ] || [ -z "$editionName" ]; then
|
||||
if [ -z "$file" ] || [ -z "$catalog" ]; then
|
||||
error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1
|
||||
fi
|
||||
|
||||
local msg="Downloading product information from Microsoft server..."
|
||||
local msg="Downloading catalog..."
|
||||
info "$msg" && html "$msg"
|
||||
|
||||
rm -rf "$dir"
|
||||
mkdir -p "$dir"
|
||||
|
||||
local wFile="catalog.cab"
|
||||
local xFile="products.xml"
|
||||
local eFile="esd_edition.xml"
|
||||
local fFile="products_filter.xml"
|
||||
|
||||
{ wget "$winCatalog" -O "$dir/$wFile" -q --timeout=30 --no-http-keep-alive; rc=$?; } || :
|
||||
{ wget "$catalog" -O "$dir/$file" -q --timeout=30 --no-http-keep-alive; rc=$?; } || :
|
||||
|
||||
msg="Failed to download $winCatalog"
|
||||
msg="Failed to download $catalog"
|
||||
(( 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
|
||||
|
||||
cd "$dir"
|
||||
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
|
||||
|
||||
if ! cabextract "$wFile" > /dev/null; then
|
||||
cd /run
|
||||
error "Failed to extract $wFile!" && return 1
|
||||
fi
|
||||
|
||||
cd /run
|
||||
fi
|
||||
|
||||
if [ ! -s "$dir/$xFile" ]; then
|
||||
error "Failed to find $xFile in $wFile!" && return 1
|
||||
error "Failed to find $xFile in $file!" && return 1
|
||||
fi
|
||||
|
||||
local edQuery='//File[Architecture="'${PLATFORM,,}'"][Edition="'${editionName}'"]'
|
||||
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="'${editionName}'"]'
|
||||
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
|
||||
@@ -528,8 +574,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
|
||||
@@ -569,7 +615,6 @@ downloadFile() {
|
||||
local msg="Downloading $desc"
|
||||
local rc total total_gb progress domain dots agent space folder
|
||||
|
||||
rm -f "$iso"
|
||||
agent=$(get_agent)
|
||||
|
||||
if [ -n "$size" ] && [[ "$size" != "0" ]]; then
|
||||
@@ -600,7 +645,7 @@ downloadFile() {
|
||||
info "$msg..."
|
||||
[[ "$DEBUG" == [Yy1]* ]] && echo "Downloading: $url"
|
||||
|
||||
{ wget "$url" -O "$iso" -q --timeout=30 --no-http-keep-alive --user-agent "$agent" --show-progress "$progress"; rc=$?; } || :
|
||||
{ wget "$url" -O "$iso" --continue -q --timeout=30 --no-http-keep-alive --user-agent "$agent" --show-progress "$progress"; rc=$?; } || :
|
||||
|
||||
fKill "progress.sh"
|
||||
|
||||
@@ -624,23 +669,40 @@ downloadFile() {
|
||||
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
|
||||
info "$msg" && html "$msg" && sleep "$delay"
|
||||
delay "$seconds"
|
||||
downloadFile "$iso" "$version" "" "" "" "$desc" && return 0
|
||||
rm -f "$iso"
|
||||
|
||||
@@ -653,7 +715,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")
|
||||
@@ -670,15 +732,17 @@ downloadImage() {
|
||||
if getWindows "$version" "$lang" "$desc"; then
|
||||
success="y"
|
||||
else
|
||||
info "$msg" && html "$msg" && sleep "$delay"
|
||||
delay "$seconds"
|
||||
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
|
||||
info "$msg" && html "$msg" && sleep "$delay"
|
||||
delay "$seconds"
|
||||
downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0
|
||||
rm -f "$iso"
|
||||
fi
|
||||
@@ -698,14 +762,16 @@ downloadImage() {
|
||||
if getESD "$TMP/esd" "$version" "$lang" "$desc"; then
|
||||
success="y"
|
||||
else
|
||||
info "$msg" && html "$msg" && sleep "$delay"
|
||||
delay "$seconds"
|
||||
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
|
||||
info "$msg" && html "$msg" && sleep "$delay"
|
||||
delay "$seconds"
|
||||
downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0
|
||||
rm -f "$ISO"
|
||||
ISO="$iso"
|
||||
@@ -718,14 +784,18 @@ 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
|
||||
info "$msg" && html "$msg" && sleep "$delay"
|
||||
delay "$seconds"
|
||||
downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0
|
||||
rm -f "$iso"
|
||||
fi
|
||||
|
||||
@@ -111,10 +111,10 @@ for dir in "${dirs[@]}"; do
|
||||
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
|
||||
# Try to fix 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 || :
|
||||
|
||||
if ! smbd; then
|
||||
error "Samba daemon failed to start!"
|
||||
|
||||
Reference in New Issue
Block a user