December 2025 · 7 min read

NullSec 2.0: The Arch Rebuild

NullSec v1.x was Debian-based. v2.0 is Arch. Here's why we switched and what it took.

Why leave Debian?

Why Arch?

Migration process

We rewrote the build system from live-build (Debian) to archiso. The tool manifest moved from .deb package names to a mix of Arch packages and AUR builds. Our CI pipeline builds and tests the ISO nightly.

Results

The v2.0 ISO is 200 MB smaller than v1.x despite having 80 more tools. Boot time dropped from 22 seconds to 14 seconds. Package updates that took weeks on Debian now land same-day.

The build system

NullSec v2.0's ISO is built entirely by a Lateralus pipeline. The build system replaced 3,000 lines of shell scripts with 800 lines of structured Lateralus code:

// build.ltl — NullSec ISO builder
let config = Config::load("nullsec.toml")

// Phase 1: Bootstrap the Arch base
let rootfs = archiso::bootstrap(config.arch_mirror)
    |> install_base_packages(["base", "linux-hardened", "linux-firmware"])
    |> configure_locale("en_US.UTF-8")
    |> configure_timezone("UTC")

// Phase 2: Install tools by category
config.tools
    |> group_by(|t| t.source)  // pacman vs AUR vs manual
    |> each(|(source, tools)| match source {
        Pacman => pacman_install(rootfs, tools),
        Aur    => aur_build_install(rootfs, tools),
        Manual => tools |> each(|t| t.install_script(rootfs)),
    })

// Phase 3: Apply NullSec customizations
rootfs
    |> install_nullkia_de()
    |> install_lateralus_sdk()
    |> apply_kernel_hardening(config.kernel_config)
    |> apply_sysctl_hardening(config.sysctl_rules)
    |> configure_firewall(config.nftables_rules)
    |> copy_dotfiles(config.dotfiles_dir)

// Phase 4: Package and sign
let iso = archiso::build_iso(rootfs, config.iso_settings)
iso |> sign_gpg(config.gpg_key)
    |> generate_sha256()
    |> upload_to_mirror(config.cdn_endpoint)

The entire build runs in CI on every merge to main. Build time: 45 minutes on a 4-core runner.

AUR integration

One of the biggest wins of moving to Arch is the AUR. Here are some security tools we can now install directly instead of packaging ourselves:

Before Arch, maintaining these packages consumed ~20 hours per release. Now they update automatically with paru -Syu.

Rolling release strategy

Rolling release doesn't mean reckless updates. NullSec v2.0 uses a staged update model:

Users can opt into the bleeding-edge channel (nullsec-testing) or pin specific packages. The update manager shows a diff of changes before applying, and every update creates a btrfs snapshot for instant rollback.

Performance comparison

Benchmarks against v1.x (Debian) and Kali 2025.4:

Lateralus is built by bad-antics. Follow development on GitHub or try the playground.