A couple of years ago I wrote a tutorial on installing Pritunl server on Orange Pi 5, which is a compact single-board computer (SBC). Back then @zach was skeptical regarding the computational capabilities of the SBC to handle the workload, but the CPU turned out to be mighty powerful and quite sufficient to handle significant loads (e.g. streaming HQ Youtube videos on multiple client devices).
Fast forward to 2026 and I wanted to post the updated guide on how I’ve handled the installation of the latest Pritunl server on the Orange Pi 5 running Armbian Noble (Ubuntu) 26.2.1 with 6.18.8 kernel. The guide was slightly updated and improved:
### Installing pritunl
sudo su
cd &&
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor &&
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-8.0.list &&
apt update && sudo apt install mongodb-org net-tools openvpn openssl iptables ipset ca-certificates psmisc gcc python3-dev python3-setuptools python3-virtualenv libssl-dev libffi-dev software-properties-common -y &&
systemctl start mongod && sudo systemctl enable mongod &&
add-apt-repository ppa:longsleep/golang-backports -y &&
apt remove golang-go -y &&
apt update && apt install golang-go -y &&
tee -a ~/.bashrc << EOF
export VERSION=1.34.4575.42
export GOPATH=\$HOME/go
export GOROOT=/usr/lib/go
export PATH=/usr/lib/go/bin:\$PATH
EOF
source ~/.bashrc &&
mkdir pritunl && cd pritunl &&
curl -fsSL -o $VERSION.tar.gz https://github.com/pritunl/pritunl/archive/refs/tags/$VERSION.tar.gz &&
tar xf $VERSION.tar.gz && rm $VERSION.tar.gz &&
cd pritunl-$VERSION &&
sed -i "s/’/'/" LICENSE &&
sed -i -e '/^dataclasses==0.8/,+2d' requirements.txt &&
virtualenv --python=python3 /usr/lib/pritunl &&
/usr/lib/pritunl/bin/pip install -U pip &&
/usr/lib/pritunl/bin/pip install -U setuptools &&
/usr/lib/pritunl/bin/python setup.py build &&
/usr/lib/pritunl/bin/pip install --require-hashes -r requirements.txt
go install github.com/pritunl/pritunl-dns@latest &&
go install github.com/pritunl/pritunl-web@latest &&
ln -s ~/go/bin/pritunl-dns /usr/bin/pritunl-dns &&
ln -s ~/go/bin/pritunl-web /usr/bin/pritunl-web &&
/usr/lib/pritunl/bin/python setup.py install &&
ln -s /usr/lib/pritunl/bin/pritunl /usr/bin/pritunl &&
systemctl start pritunl && sudo systemctl enable pritunl
A couple of comments on the procedure:
- The compilation process is almost identical in principal to the one used in the previous tutorial, so no big surprises;
- Probably the biggest adjustment is upgrading the golang-go version, since Ubuntu came with 1.22 version, while the minimal needed to install pritunl-dns & pritunl-web was 1.25. This is why we need software-properties-common to perform add-apt-repository ppa:longsleep/golang-backports, remove old golang-go and install the new one. In some of the tests I could to without this, but it felt like a correct approach to address the issue rather than let it slide;
- python3-virtualenv no longer came with Python, so I needed to add it manually. Maybe there is a more elegant approach I am not aware of or maybe it’s no longer needed, but I digress;
- The VERSION constant is hardcoded. Maybe there is a more elegant way;
- The installation is performed under Root user. In multiple tests it simply showed as a much more reliable approach overall, although you may be able to get away with adding a zillion of sudo’s.
To address possible questions about other OS’es and boards - this tutorial is a boilerplate for the installation process. Most likely with minor adjustments it can be tailored to your case. Your installed packages and dependencies can differ, so be prepared to get your hands dirty if the process fails at one point. Be patient and you should be good!
Cheers!