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/Dockerfile b/Dockerfile index bf6dab2..7fef6a8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.27 / / +COPY --from=qemux/qemu:7.26 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" @@ -19,7 +19,7 @@ RUN set -eu && \ cabextract \ 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 && \ + wget "https://github.com/gershnik/wsdd-native/releases/download/v1.21/wsddn_1.21_${TARGETARCH}.deb" -O /tmp/wsddn.deb -q && \ dpkg -i /tmp/wsddn.deb && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* diff --git a/readme.md b/readme.md index adbb6bf..4256727 100644 --- a/readme.md +++ b/readme.md @@ -53,7 +53,7 @@ services: ##### 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: diff --git a/src/entry.sh b/src/entry.sh index 71e939e..2929503 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -39,8 +39,6 @@ terminal 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 $! || : diff --git a/src/install.sh b/src/install.sh index 7be2996..f9bd402 100644 --- a/src/install.sh +++ b/src/install.sh @@ -22,11 +22,7 @@ backup () { fi - if ! makeDir "$root"; then - error "Failed to create directory \"$root\" !" - return 1 - fi - + mkdir -p "$root" local folder="$name" local dir="$root/$folder" @@ -38,11 +34,7 @@ backup () { done rm -rf "$dir" - - if ! makeDir "$dir"; then - error "Failed to create directory \"$dir\" !" - return 1 - fi + mkdir -p "$dir" [ -f "$iso" ] && mv -f "$iso" "$dir/" find "$STORAGE" -maxdepth 1 -type f -iname 'data.*' -not -iname '*.iso' -exec mv -n {} "$dir/" \; @@ -135,6 +127,7 @@ startInstall() { if [[ "${VERSION,,}" == "http"* ]]; then file=$(basename "${VERSION%%\?*}") + file="${file//+/ }" printf -v file '%b' "${file//%/\\x}" file="${file//[!A-Za-z0-9._-]/_}" @@ -163,9 +156,7 @@ startInstall() { ! backup "" && error "Backup failed!" fi - if ! makeDir "$TMP"; then - error "Failed to create directory \"$TMP\" !" - fi + mkdir -p "$TMP" if [ -z "$CUSTOM" ]; then @@ -187,20 +178,6 @@ startInstall() { 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 -} - finishInstall() { local iso="$1" @@ -211,10 +188,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 +196,56 @@ finishInstall() { fi fi - local file="$STORAGE/windows.ver" - cp -f /run/version "$file" - ! setOwner "$file" && error "Failed to set the owner for \"$file\" !" + 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 [[ "${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" + echo "$ARGS" > "$STORAGE/windows.args" fi if [ -n "${VGA:-}" ] && [[ "${VGA:-}" != "virtio"* ]]; then - file="$STORAGE/windows.vga" - writeFile "$VGA" "$file" + echo "$VGA" > "$STORAGE/windows.vga" fi if [ -n "${USB:-}" ] && [[ "${USB:-}" != "qemu-xhci"* ]]; then - file="$STORAGE/windows.usb" - writeFile "$USB" "$file" + echo "$USB" > "$STORAGE/windows.usb" fi if [ -n "${DISK_TYPE:-}" ] && [[ "${DISK_TYPE:-}" != "scsi" ]]; then - file="$STORAGE/windows.type" - writeFile "$DISK_TYPE" "$file" + echo "$DISK_TYPE" > "$STORAGE/windows.type" fi if [ -n "${ADAPTER:-}" ] && [[ "${ADAPTER:-}" != "virtio-net-pci" ]]; then - file="$STORAGE/windows.net" - writeFile "$ADAPTER" "$file" + echo "$ADAPTER" > "$STORAGE/windows.net" fi rm -rf "$TMP" @@ -390,10 +351,7 @@ extractESD() { fi rm -rf "$dir" - - if ! makeDir "$dir"; then - error "Failed to create directory \"$dir\" !" && return 1 - fi + mkdir -p "$dir" size=9606127360 size_gb=$(formatBytes "$size") @@ -449,8 +407,6 @@ extractESD() { error "Adding WinPE failed ($retVal)" && return 1 } - fKill "progress.sh" - local msg="Extracting $desc setup" info "$msg..." @@ -530,17 +486,14 @@ extractImage() { 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 @@ -1224,8 +1177,6 @@ buildImage() { [[ "$error" != "$hide" ]] && echo "$error" mv -f "$out" "$BOOT" || return 1 - ! setOwner "$BOOT" && error "Failed to set the owner for \"$BOOT\" !" - return 0 } diff --git a/src/mido.sh b/src/mido.sh index 369fc17..cc5b251 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -487,11 +487,8 @@ getESD() { info "$msg" && html "$msg" rm -rf "$dir" + mkdir -p "$dir" - if ! makeDir "$dir"; then - error "Failed to create directory \"$dir\" !" && return 1 - fi - local xFile="products.xml" local eFile="esd_edition.xml" local fFile="products_filter.xml" diff --git a/src/power.sh b/src/power.sh index 98a6f73..8acb57b 100644 --- a/src/power.sh +++ b/src/power.sh @@ -105,9 +105,7 @@ finish() { 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 diff --git a/src/samba.sh b/src/samba.sh index 7cd3210..d70cb1a 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -46,21 +46,10 @@ addShare() { local cfg="$5" local owner="" - if [ ! -d "$dir" ]; then - if ! mkdir -p "$dir"; then - error "Failed to create shared folder ($dir)." && return 1 - fi - fi + mkdir -p "$dir" || return 1 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" + error "Failed to access directory $dir" && return 1 fi if [ -z "$(ls -A "$dir")" ]; then @@ -147,21 +136,26 @@ share="/shared" [ ! -d "$share" ] && [ -d "$STORAGE/data" ] && share="$STORAGE/data" [ ! -d "$share" ] && share="$tmp" -! addShare "$share" "/shared" "Data" "Shared" "$SAMBA_CONFIG" && return 0 +m1="Failed to add shared folder" +m2="Please check its permissions." + +if ! addShare "$share" "/shared" "Data" "Shared" "$SAMBA_CONFIG"; then + error "$m1 '$share'. $m2" && return 0 +fi if [ -d "/shared2" ]; then - addShare "/shared2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || : + addShare "/shared2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || error "$m1 '/shared2'. $m2" else if [ -d "/data2" ]; then - addShare "/data2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || : + addShare "/data2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || error "$m1 '/data2'. $m2." fi fi if [ -d "/shared3" ]; then - addShare "/shared3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || : + addShare "/shared3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || error "$m1 '/shared3'. $m2" else if [ -d "/data3" ]; then - addShare "/data3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || : + addShare "/data3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || error "$m1 '/data3'. $m2" fi fi