Splux Linux

source-based Linux using SPS

SPS tools


SPS is a set of small POSIX shell and AWK programs, not one large front end. Splux uses them for the installer, live images, and official collections. The same tools can manage a tree that is not Splux.

On a live image they live on PATH under /usr. Package database, cache, and build directories are under SPS_ROOT (default /).

ToolRole
srcRepository handling. src update clones or indexes trees from /etc/sps/repos.conf.
sgetDependency-aware frontend. Resolves a graph, then calls mkpkg and pkin.
mkpkgBuilds one recipe into a .pkg.tar.zst (or gz/xz when compression says so).
pkinInstalls a built package into SPS_ROOT.
pkdelRemoves an installed package.
pkstatQueries the installed database.
pkcheckVerifies files against recorded checksums.
pkmarkMarks why a package is installed (explicit / as-needed).
setupSplux installer. Dialog screens, or the same choices from flags. Not required to use SPS.
mkisoBuilds Splux live images. Maintainer tool.

Configuration

/etc/sps/sps.conf must exist before the first sget. Live images already have one. Default keys:

db /var/lib/sps
cache /var/cache/sps
build /var/tmp/sps
repo_root /usr/src/sps
makejobs auto
cflags -O2 -pipe
cxxflags -O2 -pipe
march native
compression auto
preserve etc

Paths in that file are relative to SPS_ROOT unless you override them with environment variables. For an install into /mnt:

export SPS_ROOT=/mnt
unset SPS_DB SPS_CACHE SPS_BUILD SPS_CONFIG SPS_REPOS_CONFIG SPS_REPO_ROOT

Leaving those unset is required so they resolve under the target, not under the live root.

Repositories

/etc/sps/repos.conf lists trees. Higher priority wins. Clone from GitHub. The handbook git pages are an HTML mirror of the same trees, not a clone URL. Core and extra are enabled. Community is a commented hint only until you add it. See the community chapter.

dir core /usr/src/sps/core 100
dir extra /usr/src/sps/extra 80

git core https://github.com/RobertFlexx/sps-core.git 100
git extra https://github.com/RobertFlexx/sps-extra.git 80

# Community is not enabled by default.
# git community https://github.com/RobertFlexx/sps-community.git 50

On tty and Plasma images the live repos.conf uses dir entries pointing at the bundled trees. Slim images have no recipes, so they use the git lines. src update for a git repo needs git, which slim does not ship.

During a target install, setup writes dir paths prefixed with the target (/mnt/usr/src/sps/core) so src update can index them from the live system, then rewrites them to /usr/src/sps/... for the booted machine. The manual install does the same.

Install a package

src update
sget install curl

That resolves dependencies, builds each recipe with the live compiler, and installs into SPS_ROOT. Builds take as long as compiling that software usually takes. Plasma graphs compile Qt and KDE.

Init packages

These conflict. sget will not install more than one. Write the choice to $SPS_ROOT/etc/sps/init before the first package so service hooks see it.

FilePackagePID 1
systemdinit-systemdsystemd (udev, logind)
openrcinit-openrcOpenRC, eudev, elogind
s6init-s6s6, eudev, elogind
runitinit-runitrunit, eudev, elogind
dinitinit-dinitdinit, eudev, elogind
shepherdinit-shepherdGNU Shepherd, eudev, elogind, Guile
sysvinitinit-sysvinitSysV init, eudev, elogind
none(no init package)the installed tree has no PID 1 from SPS

Init packages live in extra. A bootable console needs extra recipes on the disc (tty or Plasma), not slim.

Kernels

linux-desktop is the Splux daily-driver config (DRM, NVMe, virtio, filesystems). It installs /boot/vmlinuz-desktop-7.2.2. linux is upstream defconfig and installs /boot/vmlinuz-7.2.2. Neither package runs grub-install. none will not boot a new disk.

Further reading