Skip to content

NurOS-Linux/apger

Repository files navigation

APGer — NurOS Package Builder

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.

Architecture

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

Recipe Format

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 = ""

Configuration — apger.conf

[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 highlighted

Self-build flags for apger/apgbuild (-march=native -O3 -flto=thin -fuse-ld=mold) are hardcoded in src/Meson.build and not in apger.conf.

Running on Kubernetes

See COMMANDS.md for full Kubernetes deployment and usage instructions.

Build Tags

# Default (bbolt, no CGO):
go build -tags bbolt ./...

# SQLite3 via modernc.org/sqlite (pure Go, no CGO):
go build -tags sqlite ./...

APGv2 Package Format

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

Bootstrap Packages

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 = true

In the TUI they are shown with the ⚡ icon.

Package Stats

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

Packages

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

License

MIT — AnmiTaliDev anmitali198@gmail.com

About

Automated package build system for NurOS in APGv2 format using GitHub Actions.

Topics

Resources

Code of conduct

Stars

Watchers

Forks

Contributors