Building upvpn app

February 26, 2026 ยท View on GitHub

Install build dependencies

Common for all Platforms

cargo install cargo-deb
cargo install cargo-generate-rpm
cargo install --force cargo-make
cargo install sd
cargo install ripgrep
cargo install cargo-about

Setup Git

For crates used via git repo

export CARGO_NET_GIT_FETCH_WITH_CLI=true

For OpenSSL

git config --global url."https://github.com/openssl/openssl.git".insteadOf "git://git.openssl.org/openssl.git"

Linux

sudo apt install libwebkit2gtk-4.1-dev \
    build-essential \
    curl \
    wget \
    file \
    libssl-dev \
    libayatana-appindicator3-dev \
    librsvg2-dev \
    pkg-config \
    libgtk-3-dev \
    libssl-dev \
    libsoup2.4-dev \
    libjavascriptcoregtk-4.0-dev \
    libnss3-tools \
    libmnl-dev \
    libnftnl-dev \
    protobuf-compiler \
    zip

Install protoc on x86_64/amd64 machines

# x86_64
curl -Lo protoc-3.19.1-linux-x86_64.zip \
    https://github.com/protocolbuffers/protobuf/releases/download/v3.19.1/protoc-3.19.1-linux-x86_64.zip  && \
    unzip protoc-3.19.1-linux-x86_64.zip -d /tmp && \
    mv /tmp/bin/protoc /usr/bin/protoc && \
    rm protoc-3.19.1-linux-x86_64.zip

Install protoc on arm64 machines

# aarch64
curl -Lo protoc-3.19.1-linux-aarch_64.zip \
    https://github.com/protocolbuffers/protobuf/releases/download/v3.19.1/protoc-3.19.1-linux-aarch_64.zip  && \
    unzip protoc-3.19.1-linux-aarch_64.zip -d /tmp && \
    sudo mv /tmp/bin/protoc /usr/bin/protoc && \
    rm protoc-3.19.1-linux-aarch_64.zip

macOS

TODO

Windows

TODO

Build Debian package

cargo make deb

Build RPM package

cargo make rpm

Build macOS package

cargo make pkg

To codesign for distribution provide following environment variables:

APPLE_TEAM_ID=...
APPLICATION_SIGNING_IDENTITY=...
INSTALLER_SIGNING_IDENTITY=...
cargo make pkg

Build installer for Windows

cargo make msi

To codesign for distribution:

SIGN=true cargo make msi

Building for Production for Linux

Build the Builder

Build the Docker image to build upvpn app.

cd upvpn-packages
cargo make builder

This will output tag.txt, commit it into source code.

Build .deb and .rpm

This step uses builder Docker image with tag in upvpn-packages/tag.txt. The final rpm and deb packages will be stored in dist directory.

# For host platform
cargo make linux

# For target platform
cargo make -e TARGET=x86_64-unknown-linux-gnu linux
cargo make -e TARGET=aarch64-unknown-linux-gnu linux