diff --git a/contrib/msi/build-msi-ie.sh b/contrib/msi/build-msi-ie.sh new file mode 100644 index 00000000..e5422364 --- /dev/null +++ b/contrib/msi/build-msi-ie.sh @@ -0,0 +1,287 @@ +#!/bin/sh + +# This script generates an MSI file for Mesh for a given architecture. It +# needs to run on Windows within MSYS2 and Go 1.13 or later must be installed on +# the system and within the PATH. This is ran currently by Appveyor or GitHub Actions (see +# appveyor.yml in the repository root) for both x86 and x64. +# +# Author: Neil Alexander + +# Get arch from command line if given +PKGARCH=$1 +if [ "${PKGARCH}" == "" ]; +then + echo "tell me the architecture: x86, x64, arm or arm64" + exit 1 +fi + +# Get the rest of the repository history. This is needed within Appveyor because +# otherwise we don't get all of the branch histories and therefore the semver +# scripts don't work properly. +if [ "${APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH}" != "" ]; +then + git fetch --all + git checkout ${APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH} +elif [ "${APPVEYOR_REPO_BRANCH}" != "" ]; +then + git fetch --all + git checkout ${APPVEYOR_REPO_BRANCH} +fi + +# Install prerequisites within MSYS2 +pacman -S --needed --noconfirm unzip git curl + +# Download the wix tools! +if [ ! -d wixbin ]; +then + curl -LO https://wixtoolset.org/downloads/v3.14.0.6526/wix314-binaries.zip + if [ `md5sum wix314-binaries.zip | cut -f 1 -d " "` != "aecd655bb56238d48ef5254cd4dc958e" ]; + then + echo "wix package didn't match expected checksum" + exit 1 + fi + mkdir -p wixbin + unzip -o wix314-binaries.zip -d wixbin || ( + echo "failed to unzip WiX" + exit 1 + ) +fi + +# Build Mesh! +[ "${PKGARCH}" == "x64" ] && GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./build +[ "${PKGARCH}" == "x86" ] && GOOS=windows GOARCH=386 CGO_ENABLED=0 ./build +[ "${PKGARCH}" == "arm" ] && GOOS=windows GOARCH=arm CGO_ENABLED=0 ./build +[ "${PKGARCH}" == "arm64" ] && GOOS=windows GOARCH=arm64 CGO_ENABLED=0 ./build + +# Create the postinstall script +cat > updateconfig.bat << EOF +if not exist %ALLUSERSPROFILE%\\RiV-mesh ( + mkdir %ALLUSERSPROFILE%\\RiV-mesh +) +if not exist %ALLUSERSPROFILE%\\RiV-mesh\\mesh.conf ( + if exist mesh.exe ( + mesh.exe -genconf > %ALLUSERSPROFILE%\\RiV-mesh\\mesh.conf + ) +) +EOF + +# Work out metadata for the package info +PKGNAME=$(sh contrib/semver/name.sh) +PKGVERSION=$(sh contrib/msi/msversion.sh --bare) +PKGVERSIONMS=$(echo $PKGVERSION | tr - .) +[ "${PKGARCH}" == "x64" ] && \ + PKGGUID="5bcfdddd-66a7-4eb7-b5f7-4a7500dcc65d" PKGINSTFOLDER="ProgramFiles64Folder" || \ + PKGGUID="cbf6ffa1-219e-4bb2-a0e5-74dbf1b58a45" PKGINSTFOLDER="ProgramFilesFolder" + +PKGLICENSEFILE=LICENSE.rtf + +# Download the Wintun driver +if [ ! -d wintun ]; +then + curl -o wintun.zip https://www.wintun.net/builds/wintun-0.14.1.zip + unzip wintun.zip +fi +if [ $PKGARCH = "x64" ]; then + PKGWINTUNDLL=wintun/bin/amd64/wintun.dll +elif [ $PKGARCH = "x86" ]; then + PKGWINTUNDLL=wintun/bin/x86/wintun.dll +elif [ $PKGARCH = "arm" ]; then + PKGWINTUNDLL=wintun/bin/arm/wintun.dll +elif [ $PKGARCH = "arm64" ]; then + PKGWINTUNDLL=wintun/bin/arm64/wintun.dll +else + echo "wasn't sure which architecture to get wintun for" + exit 1 +fi + +if [ $PKGNAME != "master" ]; then + PKGDISPLAYNAME="RiV-mesh Network (${PKGNAME} branch)" +else + PKGDISPLAYNAME="RiV-mesh Network" +fi + +cat > mesh-ui-ie.js << EOF +var ie = new ActiveXObject("InternetExplorer.Application"); +ie.AddressBar = false; +ie.MenuBar = false; +ie.ToolBar = false; +ie.height = 960 +ie.width = 706 +ie.resizable = false +ie.Visible = true; +ie.Navigate("http://localhost:19019"); +EOF + +# Generate the wix.xml file +cat > wix.xml << EOF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed + + + + + + + 1 + + + + NOT Installed AND NOT REMOVE + + + + + + + ASSISTANCE_START_VIA_REGISTRY + + + +EOF + +# Generate the MSI +CANDLEFLAGS="-nologo" +LIGHTFLAGS="-nologo -spdb -sice:ICE71 -sice:ICE61" +wixbin/candle $CANDLEFLAGS -out ${PKGNAME}-${PKGVERSION}-${PKGARCH}.wixobj -arch ${PKGARCH} wix.xml && \ +wixbin/light $LIGHTFLAGS -ext WixUtilExtension.dll -out ${PKGNAME}-${PKGVERSION}-${PKGARCH}-win7-ie.msi ${PKGNAME}-${PKGVERSION}-${PKGARCH}.wixobj diff --git a/contrib/msi/build-msi.sh b/contrib/msi/build-msi.sh index 84ef8164..c913c9c4 100644 --- a/contrib/msi/build-msi.sh +++ b/contrib/msi/build-msi.sh @@ -98,18 +98,6 @@ else PKGDISPLAYNAME="RiV-mesh Network" fi -cat > mesh-ui-ie.js << EOF -var ie = new ActiveXObject("InternetExplorer.Application"); -ie.AddressBar = false; -ie.MenuBar = false; -ie.ToolBar = false; -ie.height = 960 -ie.width = 706 -ie.resizable = false -ie.Visible = true; -ie.Navigate("http://localhost:19019"); -EOF - # Generate the wix.xml file cat > wix.xml << EOF