FlashLin

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 -m prints aarch64 before 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.