diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6de102c..6f06c9e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -39,12 +39,14 @@ jobs: - name: Build images run: | docker build --tag ghcr.io/msys2/msys2-docker-experimental:latest ./msys2 + docker build --tag ghcr.io/msys2/cygwin-docker-experimental:latest ./cygwin docker build --tag ghcr.io/msys2/msys2-docker-devcontainer:latest ./devcontainer - name: Save images if: github.event_name == 'pull_request' run: | docker image save ghcr.io/msys2/msys2-docker-experimental:latest | zstd -T0 -c > experimental.tar.zst + docker image save ghcr.io/msys2/cygwin-docker-experimental:latest | zstd -T0 -c > cygwin.tar.zst docker image save ghcr.io/msys2/msys2-docker-devcontainer:latest | zstd -T0 -c > devcontainer.tar.zst - name: Upload artifacts @@ -63,4 +65,5 @@ jobs: if: github.event_name != 'pull_request' run: | docker push ghcr.io/msys2/msys2-docker-experimental:latest + docker push ghcr.io/msys2/cygwin-docker-experimental:latest docker push ghcr.io/msys2/msys2-docker-devcontainer:latest diff --git a/cygwin/Dockerfile b/cygwin/Dockerfile new file mode 100644 index 0000000..67ff350 --- /dev/null +++ b/cygwin/Dockerfile @@ -0,0 +1,46 @@ +FROM ghcr.io/msys2/msys2-docker-build-base AS build + +# Install dependencies and download Cygwin setup +RUN apt update && apt install -y --no-install-recommends curl ca-certificates + +# Download Cygwin setup executable +RUN mkdir -p /tmp/cygwin +RUN curl --fail -L 'https://www.cygwin.com/setup-x86_64.exe' -o /tmp/cygwin/setup-x86_64.exe + +FROM debian:trixie + +# Install runtime deps +RUN apt update \ + && apt install -y --no-install-recommends xvfb wine64 xauth ca-certificates \ + && apt remove -y wine64 libwine \ + && rm -rf /var/lib/apt/lists/* +COPY --from=build /wine / +RUN ldconfig + +# Avoid "tzset" startup warning + wineboot crashing +ENV TZ=UTC + +# Initialize Wine +RUN WINEDEBUG=-all wineboot --init && wineserver --wait + +# Copy Cygwin setup into Wine's filesystem +COPY --from=build /tmp/cygwin/setup-x86_64.exe /tmp/setup-x86_64.exe + +# Install Cygwin via Wine +RUN WINEDEBUG=-all xvfb-run -a wine /tmp/setup-x86_64.exe \ + --quiet-mode \ + --no-shortcuts \ + --no-startmenu \ + --no-desktop \ + --root 'C:\cygwin64' \ + --site 'https://mirrors.kernel.org/sourceware/cygwin/' \ + --local-package-dir 'C:\cygwin64\packages' \ + && wineserver --wait \ + && rm -Rf /root/.wine/drive_c/cygwin64/packages \ + && mv /tmp/setup-x86_64.exe /root/.wine/drive_c/cygwin64/bin/setup.exe + +COPY ./cygwin /usr/bin/cygwin +RUN chmod +x /usr/bin/cygwin + +WORKDIR /root/.wine/drive_c/cygwin64/home/root +CMD ["cygwin"] diff --git a/cygwin/cygwin b/cygwin/cygwin new file mode 100755 index 0000000..868b744 --- /dev/null +++ b/cygwin/cygwin @@ -0,0 +1,3 @@ +#!/bin/bash + +WINEDEBUG="-all" WINEPATH="C:\\cygwin64\\bin" xvfb-run -a wine bash.exe -o igncr -l "$@" diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..7caf77d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,27 @@ +services: + build-base: + build: + context: ./build-base + image: ghcr.io/msys2/msys2-docker-build-base:latest + pull_policy: never + + msys2: + build: + context: ./msys2 + additional_contexts: + ghcr.io/msys2/msys2-docker-build-base: "service:build-base" + image: ghcr.io/msys2/msys2-docker-experimental:latest + + cygwin: + build: + context: ./cygwin + additional_contexts: + ghcr.io/msys2/msys2-docker-build-base: "service:build-base" + image: ghcr.io/msys2/cygwin-docker-experimental:latest + + devcontainer: + build: + context: ./devcontainer + additional_contexts: + ghcr.io/msys2/msys2-docker-build-base: "service:build-base" + image: ghcr.io/msys2/msys2-docker-devcontainer:latest