Technitium DNS Server as deb and rpm packages (amd64 and arm64)
Why
Technitium DNS Server is my DNS server of
choice at home. The official way to
install it on Linux is a shell script that downloads the .NET runtime and a
tarball, creates the user and writes the systemd unit. It works well, but it
sits outside the package manager: apt and dnf know nothing about it, so
there is no clean uninstall, no dependency tracking and no inventory
of what is installed where.
So I wrapped the same layout into proper packages.
What you get
Packages for both architectures, in both formats:
| x86_64 | arm64 | |
|---|---|---|
| Debian / Ubuntu | technitium-dns-server_<ver>_amd64.deb | technitium-dns-server_<ver>_arm64.deb |
| RHEL / Alma / Rocky | technitium-dns-server-<ver>-1.x86_64.rpm | technitium-dns-server-<ver>-1.aarch64.rpm |
The arm64 ones are for Raspberry Pi, Orange Pi and other Armbian boards. I
run it on an Orange Pi with Armbian (Debian 13 trixie). The app itself is
managed .NET code, so the contents are identical on both architectures;
only the package architecture label differs, which lets apt and dnf pick
the right file.
The package mirrors what the official installer sets up:
- app in
/opt/technitium/dns - config and data in
/etc/dns, logs in/var/log/technitium/dns - a
dns.servicesystemd unit running as adns-serversystem user
The ASP.NET Core dependency
Technitium needs the ASP.NET Core 10 runtime. The installer script downloads
it with Microsoft’s dotnet-install.sh. The packages instead depend on
aspnetcore-runtime-10.0, which is itself a deb/rpm, so the package manager
pulls it in for you:
- Ubuntu 24.04 and 26.04: in the distribution archive.
- Debian 12 and 13: from the Microsoft package repository.
- RHEL 8/9/10 and clones: from the distro AppStream or the Microsoft repository.
Install
Step 1: make the ASP.NET Core runtime available
Ubuntu 24.04 and 26.04 already have aspnetcore-runtime-10.0 in their own
repositories, so skip this step there. On Debian 12/13 (and Raspberry Pi OS
or Armbian based on them) add the Microsoft repository:
. /etc/os-release
curl -fsSL -o /tmp/packages-microsoft-prod.deb "https://packages.microsoft.com/config/debian/$VERSION_ID/packages-microsoft-prod.deb"
sudo dpkg -i /tmp/packages-microsoft-prod.deb
sudo apt update
On RHEL, Alma and Rocky 8/9/10, add it with:
sudo rpm -Uvh "https://packages.microsoft.com/config/rhel/$(rpm -E %rhel)/packages-microsoft-prod.rpm"
If your RHEL clone already ships .NET 10 in its own repos you can skip this, but it does no harm.
Step 2a: from the package repository (recommended)
The packages are published to a Gemfury repository, so apt and dnf
install the latest version and upgrade it with the rest of the system. The
repo works for both x86_64 and arm64.
Debian, Ubuntu, Raspberry Pi OS, Armbian:
echo "deb [trusted=yes] https://apt.fury.io/cloudalbania/ /" | sudo tee /etc/apt/sources.list.d/cloudalbania.list
sudo apt update
sudo apt install technitium-dns-server
RHEL, Alma, Rocky:
sudo tee /etc/yum.repos.d/cloudalbania.repo <<'EOF'
[cloudalbania]
name=CloudAlbania
baseurl=https://yum.fury.io/cloudalbania/
enabled=1
gpgcheck=0
EOF
sudo dnf install technitium-dns-server
The repo is not GPG-signed (trusted=yes / gpgcheck=0), so only use it if
you trust that I built it, or install from the GitHub release below.
Step 2b: from the GitHub release
If you would rather not add a repository, download the package from the
latest release.
This needs only curl, and no version number: it asks the GitHub API for
the latest release and picks the file for your architecture.
Debian, Ubuntu, Raspberry Pi OS, Armbian:
curl -fsSLO "$(curl -s https://api.github.com/repos/besmirzanaj/technitium-dns-packages/releases/latest \
| grep -o "https://[^\"]*_$(dpkg --print-architecture)\.deb")"
sudo apt install ./technitium-dns-server_*.deb
RHEL, Alma, Rocky:
curl -fsSLO "$(curl -s https://api.github.com/repos/besmirzanaj/technitium-dns-packages/releases/latest \
| grep -o "https://[^\"]*\.$(uname -m)\.rpm")"
sudo dnf install ./technitium-dns-server-*.rpm
Then open http://<host>:5380/ and set the admin password.
One deliberate difference from the official script: the package does not
disable systemd-resolved or rewrite /etc/resolv.conf. A package should
not silently take over the machine’s resolver. If port 53 is already taken
by systemd-resolved, free it yourself:
sudo systemctl disable --now systemd-resolved
echo 'nameserver 127.0.0.1' | sudo tee /etc/resolv.conf
Config and logs are kept when you remove the package; apt purge deletes
them.
How it is built
Everything is in one public repo: besmirzanaj/technitium-dns-packages.
A daily GitHub Actions workflow asks the upstream project for its latest release, and if there is no matching release in my repo yet it:
- downloads the official
DnsServerPortable.tar.gz, - builds the four packages with nfpm,
- installs one deb (Ubuntu 24.04) and one rpm (AlmaLinux 9) in a clean container and checks that the web console answers,
- publishes the packages as a GitHub release.
So new upstream versions show up on their own, a day or so after they land.
The repo also has a scripts/test.sh that runs the install test on Ubuntu
24.04 and 26.04, Debian 12 and 13 and AlmaLinux 8, 9 and 10, on x86_64 or
arm64 (via Docker’s --platform). One honest limit: the containers have no
systemd, so I run the app directly rather than through dns.service; the
unit file is the upstream one, unmodified.
These are unofficial packages and not affiliated with Technitium. If you hit a packaging problem, open an issue on the repo.
