Documentation
Installing FlashLin on your Linux distribution
Distro-specific install notes for every Linux FlashLin supports, x86_64 and arm64.
One command works on every distro below — it detects your OS and CPU architecture, downloads the matching package, and installs it:
curl -fsSL https://flashlin.com/install_linux.sh | bash
It picks one of five packages: a distro-matched x86_64 build for Ubuntu,
Debian-family, or RHEL-family systems, an arm64 build for Raspberry Pi and
other 64-bit ARM boards, or a universal x86_64 build for everything else.
All five install the identical binary and run the identical install.sh —
the package choice only changes which README you get and, for arm64,
which CPU architecture the binary is compiled for. See
Getting started for what the installer sets up
(/etc/flashlin, the systemd service, firewall ports) and the manual
build-from-source path.
The sections below cover what's specific to each distro: package manager, firewall tool, and anything else worth knowing before you run it.
Ubuntu
- Package manager:
apt - Firewall:
ufw(opens 80/tcp, 443/tcp, 443/udp for optional HTTP/3) - Service manager: systemd
Verified end-to-end in this project's own Docker test matrix, including the CDN installer's package auto-selection.
Debian family
Covers Debian, Kali, Linux Mint and Pop!_OS — all apt-based with the
same firewall handling as Ubuntu (ufw, falling back to nftables or
iptables if ufw isn't installed).
Debian
Verified end-to-end via Docker (debian:12), including the CDN
installer's package auto-selection and a full install run.
Kali
Debian-based; same install path as Debian. Not independently Docker-tested this round — the package-manager and firewall detection is identical to Debian's, which was.
Mint
Ubuntu-based; same install path as Ubuntu. Not independently Docker-tested this round.
Pop!_OS
Ubuntu-based; same install path as Ubuntu. Not independently Docker-tested this round.
Raspberry Pi (arm64)
Raspberry Pi OS
- Package manager:
apt - Firewall:
ufw - Architecture: this is the one package that ships an arm64
binary instead of x86_64 — Raspberry Pi OS has been 64-bit-only since
Bookworm. Check
uname -mprintsaarch64before installing; a 32-bit (armhf) install isn't supported by this package.
Verified via Docker with QEMU-emulated arm64 (arm64v8/ubuntu:24.04),
including the CDN installer correctly selecting the arm64 package by
architecture regardless of which distro it detected — and a full install
run, both against a locally-served package and the real CDN. Not
verified on physical Raspberry Pi hardware.
RHEL / CentOS family
Covers CentOS Stream, RHEL, Rocky Linux, AlmaLinux, Fedora and Oracle
Linux — all dnf/yum-based, with firewalld for firewall rules and
SELinux port labeling (semanage port -a -t http_port_t) handled
automatically when SELinux is Enforcing.
CentOS
Same dnf family as Rocky Linux, which was Docker-tested. Not
independently tested this round.
RHEL
Same dnf family as Rocky Linux, which was Docker-tested. Not
independently tested this round.
Rocky Linux
Verified end-to-end via Docker (rockylinux:9), including the CDN
installer's package auto-selection and a full install run. Along the way
this surfaced and fixed a real bug: dnf install curl fails with a
package conflict on images that ship curl-minimal pre-installed — the
installer now only installs curl/unzip if they're missing.
AlmaLinux
Same dnf family as Rocky Linux, which was Docker-tested. Not
independently tested this round.
Fedora
Same dnf family as Rocky Linux, which was Docker-tested. Not
independently tested this round.
Oracle Linux
Same dnf/yum family as Rocky Linux, which was Docker-tested. Not
independently tested this round.
Other distributions (universal package)
Covers Arch, Manjaro, openSUSE, Alpine and Gentoo. The installer detects
each one's native package manager (pacman, zypper, apk, emerge)
and firewall tooling, with Alpine using OpenRC instead of systemd for the
service. This tier hasn't been run through this project's Docker test
matrix the way Ubuntu, Debian, Rocky Linux and the arm64 build have — the
detection logic is generic and should work, but treat it as less
battle-tested than the distros above.
Arch
Package manager: pacman. Firewall: nftables or iptables, whichever
is present (Arch ships neither by default).
Manjaro
Arch-based; same install path as Arch.
openSUSE
Package manager: zypper. Firewall: firewalld if installed, otherwise
iptables.
Alpine
Package manager: apk. Uses OpenRC, not systemd, for service
management — the installer detects this and registers the service with
rc-update instead.
Known gap: this package's binary is built against glibc, but Alpine
uses musl libc by default and doesn't ship glibc — the installer doesn't
yet install a compatibility shim for you. Run apk add gcompat before
the installer, or the binary will fail to start with a dynamic-linker
error.
Gentoo
Package manager: emerge. Expect the initial install to take noticeably
longer than the other distros here — emerge builds packages from
source rather than installing prebuilt binaries.
If the one-line installer isn't an option
Every package is also just a folder you can scp to a server yourself —
useful for air-gapped hosts or if you'd rather review install.sh before
running it as root. Grab the matching zip
(flashlin-ubuntu-x86_64.zip, flashlin-debian-x86_64.zip,
flashlin-centos-x86_64.zip, flashlin-raspberry-pi-arm64.zip, or
flashlin-universal-x86_64.zip) from the same CDN path as the installer
script, extract it, and run sudo ./install.sh from inside.
