diff --git a/mullvad-vpn-daemon/APKBUILD b/mullvad-vpn-daemon/APKBUILD index ab18502..ef2a113 100644 --- a/mullvad-vpn-daemon/APKBUILD +++ b/mullvad-vpn-daemon/APKBUILD @@ -24,7 +24,15 @@ makedepends=" libnftnl-dev " checkdepends="" -install="$pkgname.post-install $pkgname.pre-upgrade $pkgname.post-upgrade $pkgname.pre-deinstall $pkgname.post-deinstall" +install=" + $pkgname.post-install + $pkgname.pre-upgrade + $pkgname.post-upgrade + $pkgname.pre-deinstall + $pkgname.post-deinstall + $pkgname-systemd.post-install + $pkgname-systemd.post-upgrade +" subpackages="$pkgname-systemd" source="" builddir="$srcdir/" @@ -44,6 +52,8 @@ build() { # Specify `--target` so that the build artifacts ends up in target//release to # avoid clashes with host system when running in a container with a mounted target folder. + + # Compile all binaries cargo auditable build --release --locked \ --target "$CHOST" \ -p mullvad-cli \ @@ -51,6 +61,12 @@ build() { -p mullvad-exclude \ -p mullvad-problem-report \ -p mullvad-setup + + # Generate vendored relay list + cargo run --release --locked \ + -p mullvad-api --bin relay_list \ + --target "$CHOST" \ + > "$builddir/relays.json" } check() { @@ -74,6 +90,10 @@ package() { install -m755 -D "$_cargo_target_dir/$CHOST/release/mullvad-setup" \ "$pkgdir"/usr/bin/mullvad-setup + + # Bundle the vendored relay list. It's copied to /var/cache/mullvad-vpn/ by the post-* scripts. + install -m644 -D "$builddir/relays.json" \ + "$pkgdir"/usr/share/mullvad-vpn/relays.json } systemd() { diff --git a/mullvad-vpn-daemon/mullvad-vpn-daemon-systemd.post-install b/mullvad-vpn-daemon/mullvad-vpn-daemon-systemd.post-install new file mode 100644 index 0000000..f9f78fd --- /dev/null +++ b/mullvad-vpn-daemon/mullvad-vpn-daemon-systemd.post-install @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +set -eu + +# Are we running systemd? +if which systemctl &> /dev/null && systemctl is-system-running | grep -vq offline &> /dev/null; then + # Does `mullvad-daemon.service` exist? + if systemctl list-unit-files mullvad-daemon.service &> /dev/null; then + systemctl enable "/usr/lib/systemd/system/mullvad-daemon.service" + systemctl start mullvad-daemon.service || echo "Failed to start mullvad-daemon.service" + systemctl enable "/usr/lib/systemd/system/mullvad-early-boot-blocking.service" + fi +fi diff --git a/mullvad-vpn-daemon/mullvad-vpn-daemon-systemd.post-upgrade b/mullvad-vpn-daemon/mullvad-vpn-daemon-systemd.post-upgrade new file mode 100644 index 0000000..f9f78fd --- /dev/null +++ b/mullvad-vpn-daemon/mullvad-vpn-daemon-systemd.post-upgrade @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +set -eu + +# Are we running systemd? +if which systemctl &> /dev/null && systemctl is-system-running | grep -vq offline &> /dev/null; then + # Does `mullvad-daemon.service` exist? + if systemctl list-unit-files mullvad-daemon.service &> /dev/null; then + systemctl enable "/usr/lib/systemd/system/mullvad-daemon.service" + systemctl start mullvad-daemon.service || echo "Failed to start mullvad-daemon.service" + systemctl enable "/usr/lib/systemd/system/mullvad-early-boot-blocking.service" + fi +fi diff --git a/mullvad-vpn-daemon/mullvad-vpn-daemon.post-install b/mullvad-vpn-daemon/mullvad-vpn-daemon.post-install index 23a3b59..9f0bee2 100644 --- a/mullvad-vpn-daemon/mullvad-vpn-daemon.post-install +++ b/mullvad-vpn-daemon/mullvad-vpn-daemon.post-install @@ -1,10 +1,7 @@ #!/usr/bin/env bash set -eu -if which systemctl &> /dev/null && systemctl is-system-running | grep -vq offline &> /dev/null; then - if systemctl status mullvad-daemon &> /dev/null; then - systemctl enable "/usr/lib/systemd/system/mullvad-daemon.service" - systemctl start mullvad-daemon.service || echo "Failed to start mullvad-daemon.service" - systemctl enable "/usr/lib/systemd/system/mullvad-early-boot-blocking.service" - fi -fi +# Overwrite the cached relay list with the one embedded in the package. +mkdir -p /var/cache/mullvad-vpn \ + && cp /usr/share/mullvad-vpn/relays.json /var/cache/mullvad-vpn/relays.json \ + || echo "failed to install /var/cache/mullvad-vpn/relays.json" diff --git a/mullvad-vpn-daemon/mullvad-vpn-daemon.post-upgrade b/mullvad-vpn-daemon/mullvad-vpn-daemon.post-upgrade index 23a3b59..1e32748 100644 --- a/mullvad-vpn-daemon/mullvad-vpn-daemon.post-upgrade +++ b/mullvad-vpn-daemon/mullvad-vpn-daemon.post-upgrade @@ -1,10 +1,6 @@ #!/usr/bin/env bash set -eu -if which systemctl &> /dev/null && systemctl is-system-running | grep -vq offline &> /dev/null; then - if systemctl status mullvad-daemon &> /dev/null; then - systemctl enable "/usr/lib/systemd/system/mullvad-daemon.service" - systemctl start mullvad-daemon.service || echo "Failed to start mullvad-daemon.service" - systemctl enable "/usr/lib/systemd/system/mullvad-early-boot-blocking.service" - fi -fi +# Overwrite the cached relay list with the one embedded in the package. +mkdir /var/cache/mullvad-vpn +cp /usr/share/mullvad-vpn/relays.json /var/cache/mullvad-vpn/relays.json diff --git a/mullvad-vpn-daemon/mullvad-vpn-daemon.pre-deinstall b/mullvad-vpn-daemon/mullvad-vpn-daemon.pre-deinstall index ce6973b..62e78f0 100644 --- a/mullvad-vpn-daemon/mullvad-vpn-daemon.pre-deinstall +++ b/mullvad-vpn-daemon/mullvad-vpn-daemon.pre-deinstall @@ -1,18 +1,6 @@ #!/usr/bin/env bash set -eu -echo "Running prerm." -is_number_re='^[0-9]+$' -# Check if we're running during an upgrade step on Fedora -# https://fedoraproject.org/wiki/Packaging:Scriptlets#Syntax -if [[ "$1" =~ $is_number_re ]] && [ "$1" -gt 0 ]; then - exit 0; -fi - -if [[ "$1" == "upgrade" ]]; then - exit 0; -fi - # the user might've disabled or stopped the service themselves already systemctl stop mullvad-daemon.service || true systemctl disable mullvad-daemon.service || true diff --git a/mullvad-vpn-daemon/mullvad-vpn-daemon.pre-upgrade b/mullvad-vpn-daemon/mullvad-vpn-daemon.pre-upgrade index 65d32c9..25c56e7 100644 --- a/mullvad-vpn-daemon/mullvad-vpn-daemon.pre-upgrade +++ b/mullvad-vpn-daemon/mullvad-vpn-daemon.pre-upgrade @@ -1,7 +1,9 @@ #!/usr/bin/env bash set -eu +# Are we running systemd? if which systemctl &> /dev/null && systemctl is-system-running | grep -vq offline &> /dev/null; then + # Is `mullvad-daemon.service` running? if systemctl status mullvad-daemon &> /dev/null; then mullvad-setup prepare-restart || true systemctl stop mullvad-daemon.service @@ -12,5 +14,5 @@ if which systemctl &> /dev/null && systemctl is-system-running | grep -vq offlin fi fi -rm -f /var/cache/mullvad-vpn/relays.json +# Since we are upgrading mullvad-daemon, it will probably have current IP baked into itself. rm -f /var/cache/mullvad-vpn/api-ip-address.txt