Build system for NurOS packages in APGv2 format. Runs inside Kubernetes pods, builds packages from TOML/JSON recipes, produces signed .apg archives with glibc hwcaps split libraries.
apger/
├── examples/ # example recipe / metadata files
│ ├── recipe.toml
│ └── repodata.toml
├── repodata/ # package recipes (.toml)
│ └── ...
├── src/
│ ├── apgbuild/ # APG package archiver (git submodule)
│ │ └── ...
│ ├── builder/
│ │ ├── downloader.go # (legacy) HTTP downloader
│ │ ├── orchestrator.go # Kubernetes Job lifecycle, multistage pipeline
│ │ ├── split.go # SplitAnalyzer: libs/bins/dev file grouping
│ │ └── templates.go # build system templates (meson/cmake/autotools/…)
│ ├── cmd/
│ │ └── apger/
│ │ └── main.go # binary entry point
│ ├── core/
│ │ ├── config.go # Config struct, LoadConfig, FindConfig
│ │ ├── main.go # Run(), CLI flags, apger.conf wiring
│ │ ├── march.go # MArch type: normalization, x86_64 level table
│ │ ├── publish_target.go
│ │ └── validate.go # OOMKill + march/CPUID pre-flight validation
│ ├── credentials/
│ │ ├── github_app.go # GitHub App token exchange
│ │ ├── manager.go # credential store
│ │ └── validate.go
│ ├── downloader/
│ │ └── downloader.go # aria2c (tarballs) + go-git (git repos) + progress
│ ├── k8s/
│ │ ├── client.go # Kubernetes client wrapper
│ │ ├── gen-krnl.go # kernel module job generator
│ │ └── generator.go # GenerateBuildJob, oomResources, pullPolicy
│ ├── logger/
│ │ ├── build_logger.go # kbuild-style filter: CC/CXX/LD/AS/CARGO/GO/…
│ │ └── export.go
│ ├── metadata/
│ │ ├── generator.go # GenerateMetadata, checksums, HashRecipe
│ │ ├── recipe_loader.go # LoadRecipe (.toml/.json), FindRecipes, template
│ │ ├── scripts.go
│ │ └── types.go # Recipe, RecipeSource, RecipeSplit, PackageMeta
│ ├── pgp/
│ │ └── signer.go # PGP package signing
│ ├── publisher/
│ │ └── github.go # publish .apg to GitHub Releases
│ ├── reporter/
│ │ └── build_report.go # build report generation
│ ├── settings/
│ │ └── settings.go
│ ├── storage/
│ │ ├── packages_db.go
│ │ └── store.go # Store interface + DB wrapper
│ ├── tui/
│ │ ├── icons.go # Nerd Font icons per build template
│ │ ├── main.go # Model, screens: Dashboard/FM/Editor/Build
│ │ ├── screen_credentials.go # credentials screen
│ │ └── screen_settings.go # settings screen
│ ├── go.mod
│ ├── go.sum
│ └── Meson.build # build system
├── .gitattributes
├── .gitignore
├── .gitmodules
├── apger.conf # build config (single source of truth)
├── COMMANDS.md
├── CREDENTIAL_MANAGER.md
├── ctrl-panel.sh
├── k8s-manifest.yml # Kubernetes PVC + ConfigMap + Job + Pod
├── README.md
└── SCRIPTS.md
Recipes live in repodata/ as .toml (preferred) or .json. Subdirectories are supported and shown as folders in the TUI file manager.
[package]
name = "curl"
version = "8.7.1"
type = "binary"
architecture = "x86_64"
description = "Command line tool for transferring data with URLs"
maintainer = "NurOS Team <team@nuros.org>"
license = "MIT"
homepage = "https://curl.se"
dependencies = []
bootstrap = false # true for libc, gcc, binutils — pre-toolchain packages
[source]
url = "https://curl.se/download/curl-8.7.1.tar.xz"
type_src = "tarball" # tarball | git-repo
# For git repos:
# url = "https://github.com/org/repo#v1.2.3"
# type_src = "git-repo"
# include_submodules = true
[build]
template = "autotools" # meson | cmake | autotools | cargo | python-pep517 | gradle | makefile
dependencies = ["openssl-devel", "zlib-devel", "libnghttp2-devel"]
use = []
[install]
script = ""[build.packages]
march = "x86_64-v2" # baseline for all packages
mtune = "x86_64-v3"
opt_level = "O2"
lto = "thin"
cc = "gcc"
cxx = "g++"
ld = "mold"
library_glibc_hwcaps = true
levels_hwcaps = ["x86_64-v3", "x86_64-v2"] # .so rebuilt per level
[kubernetes.options]
namespace = "apger"
base_image = "fedora:43"
search_local = true # IfNotPresent
pull_remote = false # true → Always
kind_load = false # true → kind load docker-image before each Job
[kubernetes.options.oomkill_limits]
cpu = "10" # validated against host at startup
memory = "16Gi"
[database.pkgs]
# Compile-time selection:
# go build -tags bbolt (default, no CGO)
# go build -tags sqlite (requires CGO + libsqlite3)
type = "bbolt"
name = "pkgs.db"
[logging]
verbose = false # true = less filtering, still highlightedSelf-build flags for apger/apgbuild (-march=native -O3 -flto=thin -fuse-ld=mold) are hardcoded in src/Meson.build and not in apger.conf.
See COMMANDS.md for full Kubernetes deployment and usage instructions.
# Default (bbolt, no CGO):
go build -tags bbolt ./...
# SQLite3 via modernc.org/sqlite (pure Go, no CGO):
go build -tags sqlite ./...Each built package produces three .apg archives (split by content type):
libcurl-8.7.1.apg ← shared libraries + glibc hwcaps variants
curl-8.7.1.apg ← executables
curl-dev-8.7.1.apg ← headers + pkgconfig
Each .apg is a tar.zst archive:
<name>-<version>.apg
├── usr/
│ ├── lib/
│ │ ├── libcurl.so.4 ← baseline (x86_64-v2)
│ │ └── glibc-hwcaps/
│ │ └── x86_64-v3/
│ │ └── libcurl.so.4 ← optimised variant
├── metadata.json
└── crc32sums
Packages with bootstrap = true (libc, gcc, binutils) are built before the toolchain is available. They skip dependency checks and use a pre-stage cross-compiler environment. Mark them in the recipe:
[package]
name = "glibc"
bootstrap = trueIn the TUI they are shown with the ⚡ icon.
| Metric | Value |
|---|---|
| Total packages | 106 |
| 🔵 core | 24 |
| 🟢 main | 26 |
| 🟡 extra | 56 |
| x86_64 | 3 |
| aarch64 | 103 |
| build: autotools | 55 |
| build: meson | 21 |
| build: makefile | 16 |
| build: cmake | 7 |
| build: kbuild | 4 |
| build: custom | 3 |
| Package | Version | Repo | Description | License | Build |
|---|---|---|---|---|---|
| bash | 5.3 |
🔵 core | GNU Bourne Again Shell — the standard interactive and scr... | GPL-3.0-or-later | autotools |
| binutils | 2.46.0 |
🔵 core | GNU Binutils — collection of binary tools including assem... | GPL-3.0-or-later | autotools |
| bzip2 | 1.0.8 |
🔵 core | bzip2 — high-quality block-sorting file compressor using ... | bzip2-1.0.6 | makefile |
| coreutils | 9.11 |
🔵 core | GNU Core Utilities — essential file, shell, and text mani... | GPL-3.0-or-later | autotools |
| dbus | 1.16.2 |
🔵 core | D-Bus — message bus system for inter-process communicatio... | AFL-2.1 OR GPL-2.0-or-later | autotools |
| gcc | 15.2.0 |
🔵 core | GNU Compiler Collection — optimising compilers for C, C++... | GPL-3.0-or-later | autotools |
| glibc | 2.43 |
🔵 core | GNU C Library — the standard C library for Linux; provide... | LGPL-2.1-or-later | autotools |
| libffi | 3.4.6 |
🔵 core | Foreign Function Interface library | MIT | autotools |
| libgcc | 14.1.0 |
🔵 core | GCC runtime support library (libgcc_s.so.1) | GPL-3.0 | custom |
| libstdc++ | 14.1.0 |
🔵 core | GNU C++ standard library runtime (libstdc++.so.6) | GPL-3.0 | custom |
| linux-kernel | 6.9.0 |
🔵 core | Linux kernel | GPL-2.0 | kbuild |
| linux-kernel | 6.9 |
🔵 core | Linux kernel — core of the NurOS operating system | GPL-2.0 | kbuild |
| linux-kernel-modules | 6.9.0 |
🔵 core | Linux kernel modules | GPL-2.0 | kbuild |
| linux-kernel-modules | 6.9 |
🔵 core | Linux kernel modules — loadable kernel modules split from... | GPL-2.0 | kbuild |
| ncurses | 6.5 |
🔵 core | Text-based UI library | MIT | autotools |
| openssl | 3.3.0 |
🔵 core | TLS/SSL and crypto library | Apache-2.0 | autotools |
| pam | 1.6.1 |
🔵 core | Pluggable Authentication Modules | GPL-2.0 | autotools |
| readline | 8.2 |
🔵 core | GNU readline library | GPL-3.0 | autotools |
| shadow | 4.15.1 |
🔵 core | Shadow password utilities | BSD-3-Clause | autotools |
| systemd | 255 |
🔵 core | System and service manager | LGPL-2.1 | meson |
| util-linux | 2.40 |
🔵 core | Miscellaneous system utilities | GPL-2.0 | autotools |
| xz | 5.6.1 |
🔵 core | XZ-format compression utilities | GPL-2.0 | autotools |
| zlib | 1.3.1 |
🔵 core | Compression library | Zlib | cmake |
| zstd | 1.5.6 |
🔵 core | Zstandard fast real-time compression algorithm | BSD-3-Clause | cmake |
| ca-certificates | 2024 |
🟢 main | Common CA certificates | MPL-2.0 | makefile |
| ca-certificates | 2024.2.2 |
🟢 main | Common CA certificates | MPL-2.0 | custom |
| curl | 8.19.0 |
🟢 main | Command line tool and library for transferring data with ... | curl | autotools |
| expat | 2.6.2 |
🟢 main | XML parser library | MIT | autotools |
| gdb | 14.2 |
🟢 main | GNU Project debugger | GPL-3.0 | autotools |
| git | 2.49.0 |
🟢 main | Fast, scalable, distributed revision control system | GPL-2.0 | autotools |
| glib2 | 2.80.0 |
🟢 main | Low-level core library for GNOME | LGPL-2.1 | meson |
| htop | 3.5.0 |
🟢 main | Interactive process viewer with a color display and mouse... | GPL-2.0 | autotools |
| iproute2 | 6.9.0 |
🟢 main | IP routing utilities | GPL-2.0 | makefile |
| iptables | 1.8.10 |
🟢 main | Linux kernel packet filtering framework tools | GPL-2.0 | autotools |
| libxml2 | 2.12.6 |
🟢 main | XML parsing library | MIT | autotools |
| lsof | 4.99.3 |
🟢 main | List open files utility | BSD | autotools |
| lua | 5.4.6 |
🟢 main | Lightweight embeddable scripting language | MIT | makefile |
| nano | 9.0 |
🟢 main | Small, friendly text editor inspired by Pico | GPL-3.0 | autotools |
| networkmanager | 1.46.0 |
🟢 main | Network connection manager | GPL-2.0 | meson |
| nftables | 1.0.9 |
🟢 main | Netfilter tables userspace tools | GPL-2.0 | autotools |
| openssh | 10.3p1 |
🟢 main | OpenBSD Secure Shell client and utilities for encrypted r... | BSD-2-Clause | autotools |
| pcre2 | 10.43 |
🟢 main | Perl Compatible Regular Expressions v2 | BSD-3-Clause | autotools |
| perl | 5.38.2 |
🟢 main | Practical Extraction and Report Language | GPL-1.0 | autotools |
| python3 | 3.13.3 |
🟢 main | High-level, general-purpose programming language with dyn... | PSF-2.0 | autotools |
| rsync | 3.3.0 |
🟢 main | Fast, versatile file copying tool | GPL-3.0 | autotools |
| sqlite | 3.45.3 |
🟢 main | Self-contained SQL database engine | Public Domain | autotools |
| strace | 6.9 |
🟢 main | Diagnostic, debugging and instructional userspace tracer | LGPL-2.1 | autotools |
| tmux | 3.4 |
🟢 main | Terminal multiplexer | ISC | autotools |
| vim | 9.2.0368 |
🟢 main | Highly configurable text editor built to enable efficient... | Vim | autotools |
| wget | 1.25.0 |
🟢 main | Non-interactive network downloader supporting HTTP, HTTPS... | GPL-3.0 | autotools |
| alsa-lib | 1.2.12 |
🟡 extra | Advanced Linux Sound Architecture library | LGPL-2.1 | autotools |
| aria2 | 1.37.0 |
🟡 extra | Lightweight multi-protocol and multi-source download utility | GPL-2.0 | autotools |
| avahi | 0.8 |
🟡 extra | mDNS/DNS-SD service discovery implementation | LGPL-2.1 | autotools |
| bpftrace | 0.21.1 |
🟡 extra | High-level tracing language for Linux eBPF | Apache-2.0 | cmake |
| cairo | 1.18.0 |
🟡 extra | 2D graphics library with support for multiple output devices | LGPL-2.1 | meson |
| containerd | 2.0.4 |
🟡 extra | Industry-standard container runtime | Apache-2.0 | makefile |
| cups | 2.4.8 |
🟡 extra | Common UNIX Printing System | Apache-2.0 | autotools |
| cyrus-sasl | 2.1.28 |
🟡 extra | Cyrus SASL authentication library | BSD-4-Clause | autotools |
| dhcpcd | 10.0.8 |
🟡 extra | DHCP client daemon | BSD-2-Clause | autotools |
| docker | 29.0.3 |
🟡 extra | Container platform for building, shipping and running app... | Apache-2.0 | makefile |
| ffmpeg | 7.1.1 |
🟡 extra | Complete, cross-platform solution to record, convert and ... | LGPL-2.1 | makefile |
| fontconfig | 2.15.0 |
🟡 extra | Font configuration and customization library | MIT | meson |
| freetype2 | 2.13.2 |
🟡 extra | Font rendering library | FTL | meson |
| gnutls | 3.8.5 |
🟡 extra | GNU Transport Layer Security library | LGPL-2.1 | autotools |
| go | 1.26.2 |
🟡 extra | The Go programming language compiler and tools | BSD-3-Clause | makefile |
| gstreamer | 1.24.3 |
🟡 extra | Pipeline-based multimedia framework | LGPL-2.1 | meson |
| gtk3 | 3.24.52 |
🟡 extra | GTK+ 3 graphical user interface toolkit | LGPL-2.1 | meson |
| gtk4 | 4.20.4 |
🟡 extra | GTK 4 graphical user interface toolkit | LGPL-2.1 | meson |
| harfbuzz | 8.5.0 |
🟡 extra | Text shaping library | MIT | meson |
| helm | 3.15.1 |
🟡 extra | Kubernetes package manager | Apache-2.0 | makefile |
| krb5 | 1.21.3 |
🟡 extra | MIT Kerberos 5 authentication system | MIT | autotools |
| libgcrypt | 1.10.3 |
🟡 extra | General purpose cryptographic library based on GnuPG code | LGPL-2.1 | autotools |
| libgpg-error | 1.49 |
🟡 extra | Common error values for GnuPG components | LGPL-2.1 | autotools |
| libjpeg-turbo | 3.0.3 |
🟡 extra | JPEG image codec with SIMD acceleration | BSD-3-Clause | cmake |
| libpng | 1.6.43 |
🟡 extra | PNG image format library | Libpng | autotools |
| libtasn1 | 4.19.0 |
🟡 extra | ASN.1 library used by GnuTLS | LGPL-2.1 | autotools |
| libwebp | 1.4.0 |
🟡 extra | WebP image format library | BSD-3-Clause | cmake |
| mesa | 26.0.5 |
🟡 extra | Open-source OpenGL, Vulkan and other graphics API impleme... | MIT | meson |
| nettle | 3.10 |
🟡 extra | Low-level cryptographic library | LGPL-3.0 | autotools |
| nodejs | 22.15.0 |
🟡 extra | JavaScript runtime built on Chrome's V8 engine | MIT | makefile |
| nss | 3.100 |
🟡 extra | Network Security Services cryptographic library | MPL-2.0 | makefile |
| openldap | 2.6.8 |
🟡 extra | Open source implementation of the Lightweight Directory A... | OLDAP-2.8 | autotools |
| openssh-server | 9.7p1 |
🟡 extra | OpenSSH server daemon (sshd) | BSD-2-Clause | autotools |
| p11-kit | 0.25.3 |
🟡 extra | Library for loading and sharing PKCS#11 modules | BSD-3-Clause | meson |
| pango | 1.52.2 |
🟡 extra | Text layout and rendering library | LGPL-2.1 | meson |
| perf | 6.9 |
🟡 extra | Linux kernel performance analysis tool | GPL-2.0 | makefile |
| pipewire | 1.0.7 |
🟡 extra | Low-latency audio/video router and processor | MIT | meson |
| pixman | 0.43.4 |
🟡 extra | Low-level pixel manipulation library | MIT | meson |
| podman | 5.7.0 |
🟡 extra | Daemonless container engine for managing OCI containers | Apache-2.0 | makefile |
| polkit | 124 |
🟡 extra | Authorization framework for controlling system-wide privi... | LGPL-2.0 | meson |
| pulseaudio | 17.0 |
🟡 extra | Sound server for POSIX and Win32 systems | LGPL-2.1 | meson |
| qt5-base | 5.15.13 |
🟡 extra | Qt5 base libraries and tools | LGPL-3.0 | makefile |
| qt6-base | 6.9.3 |
🟡 extra | Qt6 base libraries and tools | LGPL-3.0 | cmake |
| ruby | 3.3.1 |
🟡 extra | Dynamic, open source programming language with a focus on... | Ruby | autotools |
| rust | 1.87.0 |
🟡 extra | Systems programming language focused on safety and perfor... | MIT | makefile |
| screen | 4.9.1 |
🟡 extra | Full-screen window manager that multiplexes a terminal | GPL-3.0 | autotools |
| switch | 1.0.0 |
🟡 extra | Alternatives management tool for NurOS, similar to Gentoo... | GPL-3.0 | meson |
| tcl | 8.6.14 |
🟡 extra | Tool Command Language scripting language | TCL | autotools |
| udisks2 | 2.10.1 |
🟡 extra | D-Bus service to access and manipulate storage devices | GPL-2.0 | autotools |
| upower | 1.90.4 |
🟡 extra | D-Bus service for power management | GPL-2.0 | meson |
| vala | 0.56.17 |
🟡 extra | Compiler for the Vala programming language | LGPL-2.1 | autotools |
| valgrind | 3.23.0 |
🟡 extra | Instrumentation framework for dynamic analysis tools | GPL-2.0 | autotools |
| vulkan-loader | 1.4.309 |
🟡 extra | Vulkan ICD (Installable Client Driver) loader | Apache-2.0 | cmake |
| wayland | 1.25.0 |
🟡 extra | Wayland display server protocol and library | MIT | meson |
| wayland-protocols | 1.36 |
🟡 extra | Wayland protocol extensions | MIT | meson |
| wpa_supplicant | 2.11 |
🟡 extra | WPA/WPA2/IEEE 802.1X supplicant for wireless networks | BSD-3-Clause | makefile |
MIT — AnmiTaliDev anmitali198@gmail.com