# Maintainer: Mark Wagie # Contributor: David Birks # Contributor: Jeff Henson pkgname=mullvad-vpn-beta _pkgver=2024.2 _channel=beta _rel=1 pkgver=${_pkgver}.${_channel}${_rel} # beta #pkgver=${_pkgver}.${_channel} # stable pkgrel=1 pkgdesc="The Mullvad VPN client app for desktop (beta channel)" arch=('x86_64') url="https://www.mullvad.net" license=('GPL-3.0-or-later') depends=('alsa-lib' 'gtk3' 'iputils' 'libnftnl' 'libnotify' 'nss') makedepends=('cargo' 'git' 'go' 'libxcrypt-compat' 'npm' 'protobuf') provides=("${pkgname%-beta}") conflicts=("${pkgname%-beta}") install="${pkgname%-beta}.install" _tag=7324cfb63e668c810976e57b15f71541fb055fac # tags/2024.2-beta1^0 _commit=d5772339cee9c1a0d7671968746f02499b78e245 source=("git+https://github.com/mullvad/mullvadvpn-app.git#commit=${_tag}" # signed by Oskar Nyberg (raksooo), public key not uploaded yet "git+https://github.com/mullvad/mullvadvpn-app-binaries.git#commit=${_commit}?signed" 'no-rpm.diff' "${pkgname%-beta}.sh") sha256sums=('SKIP' 'SKIP' 'ea35edffea2cbbb05586abce19581fdd9f133801ed47e6af30fa64a29c5cf116' '2262346cb57deb187fe32a88ccd873dab669598889269088e749197c6e88954f') validpgpkeys=('225E40C8F1C8DEB7977ABF59F293063FECE2E8ED' # Linus Färnstrand '8339C7D2942EB854E3F27CE5AEE9DECFD582E984' # David Lönnhager (code signing) '4B986EF5222BA1B810230C602F391DE6B00D619C' # Oskar Nyberg (code signing) ) prepare() { cd mullvadvpn-app git submodule init git config submodule.dist-assets/binaries.url "$srcdir/mullvadvpn-app-binaries" git -c protocol.file.allow=always submodule update # Disable building rpm patch --strip=1 gui/tasks/distribution.js < ../no-rpm.diff export CARGO_HOME="$srcdir/cargo-home" export RUSTUP_TOOLCHAIN=stable cargo fetch --locked --target "$CARCH-unknown-linux-gnu" pushd wireguard/libwg export GOPATH="$srcdir/gopath" mkdir -p "../../build/lib/$CARCH-unknown-linux-gnu" go mod download -x popd pushd gui echo "Installing JavaScript dependencies..." export npm_config_cache="$srcdir/npm_cache" npm ci popd } build() { cd mullvadvpn-app CFLAGS+=" -ffat-lto-objects" export CARGO_HOME="$srcdir/cargo-home" export RUSTUP_TOOLCHAIN=stable export CARGO_TARGET_DIR=target local RUSTC_VERSION=$(rustc --version) local PRODUCT_VERSION=$(cargo run -q --bin mullvad-version) echo "Building Mullvad VPN ${PRODUCT_VERSION}..." echo "Building wireguard-go..." pushd wireguard/libwg export GOPATH="$srcdir/gopath" export CGO_CPPFLAGS="${CPPFLAGS}" export CGO_CFLAGS="${CFLAGS}" export CGO_CXXFLAGS="${CXXFLAGS}" export CGO_LDFLAGS="${LDFLAGS}" export GOFLAGS="-buildmode=pie -trimpath -ldflags=-linkmode=external -mod=readonly -modcacherw" go build -v -o "../../build/lib/$CARCH-unknown-linux-gnu"/libwg.a -buildmode c-archive popd # Clean module cache for makepkg -C go clean -modcache echo "Building Rust code in release mode using ${RUSTC_VERSION}..." cargo_crates_to_build=( -p mullvad-daemon --bin mullvad-daemon -p mullvad-cli --bin mullvad -p mullvad-setup --bin mullvad-setup -p mullvad-problem-report --bin mullvad-problem-report -p talpid-openvpn-plugin --lib -p mullvad-exclude --bin mullvad-exclude ) cargo build --frozen --release "${cargo_crates_to_build[@]}" echo "Preparing for packaging Mullvad VPN ${PRODUCT_VERSION}..." mkdir -p build/shell-completions for sh in bash zsh fish; do echo "Generating shell completion script for ${sh}..." cargo run --bin mullvad --frozen --release -- shell-completions ${sh} \ build/shell-completions/ done echo "Updating relays.json..." cargo run --bin relay_list --frozen --release > dist-assets/relays.json # Move binaries to correct locations in dist-assets binaries=( mullvad-daemon mullvad mullvad-problem-report libtalpid_openvpn_plugin.so mullvad-setup mullvad-exclude ) for binary in ${binaries[*]}; do cp "target/release/${binary}" "dist-assets/${binary}" done # Build Electron GUI pushd gui echo "Packing Mullvad VPN ${PRODUCT_VERSION} artifact(s)..." export npm_config_cache="$srcdir/npm_cache" npm run pack:linux --release popd } package() { cd mullvadvpn-app # Install main files install -d "$pkgdir/opt/Mullvad VPN" cp -r dist/linux-unpacked/* "$pkgdir/opt/Mullvad VPN/" chmod 4755 "$pkgdir/opt/Mullvad VPN/chrome-sandbox" # Install services install -Dm644 dist-assets/linux/mullvad{-daemon,-early-boot-blocking}.service -t \ "$pkgdir/usr/lib/systemd/system/" # Install binaries install -Dm755 dist-assets/{mullvad,mullvad{-daemon,-exclude}} -t "$pkgdir/usr/bin/" # Link to the problem report binary ln -s "/opt/Mullvad VPN/resources/mullvad-problem-report" "$pkgdir/usr/bin/" # Link to the GUI binary install -m755 "$srcdir/${pkgname%-beta}.sh" "$pkgdir/usr/bin/${pkgname%-beta}" # Install completions install -Dm644 build/shell-completions/mullvad.bash \ "$pkgdir/usr/share/bash-completion/completions/mullvad" install -Dm644 build/shell-completions/_mullvad -t \ "$pkgdir/usr/share/zsh/site-functions/" install -Dm644 build/shell-completions/mullvad.fish -t \ "$pkgdir/usr/share/fish/vendor_completions.d/" # Install desktop file & icons from deb cd dist ar x *.deb bsdtar -xf data.tar.xz install -Dm644 "usr/share/applications/${pkgname%-beta}.desktop" -t \ "$pkgdir/usr/share/applications/" for icon_size in 16 32 48 64 128 256 512 1024; do icons_dir="usr/share/icons/hicolor/${icon_size}x${icon_size}/apps" install -Dm644 "${icons_dir}/${pkgname%-beta}.png" -t "$pkgdir/${icons_dir}/" done }