From 4a361dbb05fd2a56d4ff68787dae36cf41a3719d Mon Sep 17 00:00:00 2001 From: Jeffrey Damick Date: Fri, 3 Nov 2023 13:14:47 -0400 Subject: [PATCH] Added support to package dnscrypt for windows into an msi --- .ci/ci-package.sh | 58 ++++++++++++++++++++++++++++++++ .github/workflows/releases.yml | 6 ++++ .gitignore | 3 ++ contrib/msi/Dockerfile | 21 ++++++++++++ contrib/msi/README.md | 13 ++++++++ contrib/msi/build.sh | 29 ++++++++++++++++ contrib/msi/dnscrypt.wxs | 60 ++++++++++++++++++++++++++++++++++ 7 files changed, 190 insertions(+) create mode 100755 .ci/ci-package.sh create mode 100644 contrib/msi/Dockerfile create mode 100644 contrib/msi/README.md create mode 100755 contrib/msi/build.sh create mode 100644 contrib/msi/dnscrypt.wxs diff --git a/.ci/ci-package.sh b/.ci/ci-package.sh new file mode 100755 index 00000000..9e8b8300 --- /dev/null +++ b/.ci/ci-package.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +PACKAGE_VERSION="$1" + +cd dnscrypt-proxy || exit 1 + + +# setup the environment +####################### +sudo apt-get update -y +sudo apt-get install -y wget wine dotnet-sdk-6.0 +sudo dpkg --add-architecture i386 && sudo apt-get update && sudo apt-get install -y wine32 + +sudo apt-get install -y unzip + +export WINEPREFIX=$HOME/.wine32 +export WINEARCH=win32 +export WINEDEBUG=-all + +wget https://dl.winehq.org/wine/wine-mono/8.1.0/wine-mono-8.1.0-x86.msi +WINEPREFIX="$HOME/.wine32" WINEARCH=win32 wineboot --init +WINEPREFIX="$HOME/.wine32" WINEARCH=win32 wine msiexec /i wine-mono-8.1.0-x86.msi + +mkdir $HOME/.wine32/drive_c/temp +mkdir -p $HOME/.wine/drive_c/temp +wget https://github.com/wixtoolset/wix3/releases/download/wix3112rtm/wix311-binaries.zip -nv -O wix.zip + +unzip wix.zip -d $HOME/wix +rm -f wix.zip + +builddir=$(pwd) +srcdir=$(cd ..;pwd) +version=$PACKAGE_VERSION + +cd $HOME/wix + + +ln -s $builddir $HOME/wix/build +ln -s $srcdir/contrib/msi $HOME/wix/wixproj +echo "builddir: $builddir" + +# build the msi's +################# +for arch in x64 x86 +do + binpath="win32" + if [[ "$arch" == "x64" ]]; then + binpath="win64" + fi + + echo $arch + + wine candle.exe -dVersion=$version -dPlatform=$arch -dPath=build\\$binpath -arch $arch wixproj\\dnscrypt.wxs -out build\\dnscrypt-$arch.wixobj + wine light.exe -out build\\dnscrypt-proxy-$arch-$version.msi build\\dnscrypt-$arch.wixobj -sval + +done + +cd $builddir diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml index 1d2d5a7a..cf371d33 100644 --- a/.github/workflows/releases.yml +++ b/.github/workflows/releases.yml @@ -49,6 +49,11 @@ jobs: run: | .ci/ci-build.sh "${{ steps.get_version.outputs.VERSION }}" + - name: Package + if: startsWith(github.ref, 'refs/tags/') + run: | + .ci/ci-package.sh "${{ steps.get_version.outputs.VERSION }}" + - name: Install minisign and sign if: startsWith(github.ref, 'refs/tags/') run: | @@ -87,3 +92,4 @@ jobs: dnscrypt-proxy/*.zip dnscrypt-proxy/*.tar.gz dnscrypt-proxy/*.minisig + dnscrypt-proxy/*.msi diff --git a/.gitignore b/.gitignore index 5f3b9299..52f66867 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,6 @@ dnscrypt-proxy/dnscrypt-proxy .ci/*.md .ci/*.md.minisig .ci/test-dnscrypt-proxy.toml +contrib/msi/*.msi +contrib/msi/*.wixpdb +contrib/msi/*.wixobj diff --git a/contrib/msi/Dockerfile b/contrib/msi/Dockerfile new file mode 100644 index 00000000..33b7512b --- /dev/null +++ b/contrib/msi/Dockerfile @@ -0,0 +1,21 @@ +FROM ubuntu:latest +MAINTAINER dnscrypt-authors + +RUN apt-get update && \ + apt-get install -y wget wine dotnet-sdk-6.0 && \ + dpkg --add-architecture i386 && apt-get update && apt-get install -y wine32 + + +ENV WINEPREFIX=/root/.wine32 WINEARCH=win32 WINEDEBUG=-all + +RUN wget https://dl.winehq.org/wine/wine-mono/8.1.0/wine-mono-8.1.0-x86.msi && \ + WINEPREFIX="$HOME/.wine32" WINEARCH=win32 wineboot --init && \ + WINEPREFIX="$HOME/.wine32" WINEARCH=win32 wine msiexec /i wine-mono-8.1.0-x86.msi && \ + mkdir $WINEPREFIX/drive_c/temp && \ + apt-get install -y unzip && \ + wget https://github.com/wixtoolset/wix3/releases/download/wix3112rtm/wix311-binaries.zip -nv -O wix.zip && \ + unzip wix.zip -d /wix && \ + rm -f wix.zip + +WORKDIR /wix + diff --git a/contrib/msi/README.md b/contrib/msi/README.md new file mode 100644 index 00000000..cdf1c355 --- /dev/null +++ b/contrib/msi/README.md @@ -0,0 +1,13 @@ +# Scripts and utilities related to building an .msi (Microsoft Standard Installer) file. + +## Docker test image for building an MSI locally + +``` +docker build . -f Dockerfile -t ubuntu:dnscrypt-msi +``` + +## Test building msi files for intel win32 & win64 + +``` +./build.sh +``` diff --git a/contrib/msi/build.sh b/contrib/msi/build.sh new file mode 100755 index 00000000..ee9ff0bb --- /dev/null +++ b/contrib/msi/build.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +version=0.0.0 +gitver=$(git describe --tags --always --match="[0-9]*.[0-9]*.[0-9]*" --exclude='*[^0-9.]*') +if [[ "$gitver" != "" ]]; then + version=$gitver +fi + +# build the image by running: docker build . -f Dockerfile -t ubuntu:dnscrypt-msi +if [[ "$(docker image list -q ubuntu:dnscrypt-msi)" == "" ]]; then + docker build . -f Dockerfile -t ubuntu:dnscrypt-msi +fi + +image=ubuntu:dnscrypt-msi + + +for arch in x64 x86 +do + binpath="win32" + if [[ "$arch" == "x64" ]]; then + binpath="win64" + fi + src=$(cd ../../dnscrypt-proxy/$binpath; pwd) + echo $src + + docker run --rm -v $(pwd):/wixproj -v $src:/src $image wine candle.exe -dVersion=$version -dPlatform=$arch -dPath=\\src -arch $arch \\wixproj\\dnscrypt.wxs -out \\wixproj\\dnscrypt-$arch.wixobj + docker run --rm -v $(pwd):/wixproj -v $src:/src $image wine light.exe -out \\wixproj\\dnscrypt-proxy-$arch-$version.msi \\wixproj\\dnscrypt-$arch.wixobj -sval + +done diff --git a/contrib/msi/dnscrypt.wxs b/contrib/msi/dnscrypt.wxs new file mode 100644 index 00000000..c778a731 --- /dev/null +++ b/contrib/msi/dnscrypt.wxs @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + NOT NEWERVERSIONDETECTED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file