SPS · log · files · refs · tags · releases · people · languages · GitHub · file
man/setup.1
7239 bytes at 2909919 · GitHub
.TH SETUP 1 "2026-08-31" "SPS 1.0" "SPS Commands"
.SH NAME
setup \- dialog-based SPS Linux installer (Splux)
.SH SYNOPSIS
.nf
setup [options]
setup --list-profiles
setup --list-sets
setup --plan [options]
.fi
.SH DESCRIPTION
.B setup
installs
.B SPS Linux
(informally Splux) into a target root. It is the distro installer, not a
generic Linux From Scratch helper. SPS the package system can be used on
other trees without running this program; partitioning, users, and boot
layout on those trees are yours to decide.
.PP
Interactive use is a sequence of
.BR dialog (1)
screens in the same spirit as the Slackware and FreeBSD installers: profile,
optional package sets, extra packages, locale, hostname, timezone, keymap,
first user, login shell, then a visible package build.
.PP
Every screen has a command-line equivalent. Scripts and tests should pass
.B --non-interactive
or
.B --plan .
.B --plan
does not start
.BR dialog (1).
.PP
The installer does not run
.B grub-install
unless
.B --install-bootloader
is given with
.B --disk
, or the interactive bootloader screen is used to install GRUB and the
disk is confirmed a second time.
Guided partitioning asks for a format confirmation in the dialog, then
waits until the last summary before it writes the disk. Scripts still
need
.B --format yes
with
.B --disk .
.B --init systemd
,
.B --init openrc
,
.B --init s6
,
.B --init runit
,
.B --init dinit
,
.B --init shepherd
, or
.B --init sysvinit
selects PID 1;
.B sget
will not install more than one of those families.
After packages land,
.B setup
enables the scripts each daemon package already installed for that init
(stock copies from
.I $SPS_LIBDIR/setup/sv
fill a gap). Known services include SDDM, dbus, sshd, NetworkManager,
and others listed in
.I $SPS_LIBDIR/setup/services ).
Pass
.B --services no
to skip enablement.
Live images prefer systemd. If the build host has no systemd binaries,
busybox init runs instead and respawns gettys on tty1 and ttyS0.
.PP
On a live ISO,
.B setup
copies the bundled
.I /usr/src/sps/core
and
.I /usr/src/sps/extra
recipe trees into the target and indexes those
.B dir
repositories. That does not need a network.
.B src update
only clones GitHub when those trees are missing, which is why a slim
image fails offline.
.SH PROFILES
.TP
.B minimal
.B base-system
and
.BR dialog (1).
.TP
.B server
Minimal plus OpenSSH, GnuPG, rsync, and sudo.
.TP
.B plasma-desktop
KDE Plasma session without the full application suite.
.TP
.B plasma-full
Plasma plus
.BR kde-apps ,
Firefox, and Flatpak.
.SH SETS
Optional sets are listed by
.B --list-sets
and stored as text files under
.I $SPS_LIBDIR/setup/sets .
They include quality-of-life CLI tools, development tools, language
toolchains, KDE applications, NVIDIA drivers, Flatpak, power management,
multimedia, extra network tools, extra editors, container helpers, printing,
browsers, extra shells, extra fonts, office tools, and OpenSSH.
.PP
.B plasma-desktop
and
.B plasma-full
turn the power and qol-cli sets on by default.
.B --enable
adds sets.
.B --disable
removes them.
.SH OPTIONS
.TP
.BI --target " dir"
Installation root. Must be an absolute path. Becomes
.B SPS_ROOT
for
.BR src (1)
and
.BR sget (1).
.TP
.BI --profile " name"
One of the profiles above.
.TP
.BI --enable " set[,set...]"
.TP
.BI --disable " set[,set...]"
.TP
.BI --hostname " name"
.TP
.BI --timezone " zone"
.TP
.BI --keymap " map"
.TP
.BI --locale " name"
.B LANG
written to
.I /etc/locale.conf .
Default
.BR C.UTF-8 .
.TP
.BI --shell " path"
Login shell for the first user. Default
.IR /bin/sh .
Choosing zsh or fish also enables the
.B shells-extra
set.
.TP
.BI --extra " pkg[,pkg...]"
Individual packages in addition to the profile and sets. The extras
screen only lists names that exist as recipes in sps-core or sps-extra.
Unpackaged names are refused after the repository index is built.
Community recipes are not in that catalog until
.B git community
is added to
.IR /etc/sps/repos.conf .
.TP
.B --ssh yes|no
Enable the OpenSSH set.
.TP
.B --printing yes|no
Enable CUPS and related printing packages.
.TP
.BI --user " name"
First unprivileged account (uid 1000). Interactive setup asks for a
user password and a root password (empty keeps the account locked).
Scripts should pass a file or an already-hashed shadow field; plaintext
passwords are not accepted on the command line.
.TP
.BI --user-password-file " file"
.TP
.BI --root-password-file " file"
Hash the first line of
.I file
with
.B openssl passwd -6
(or python3 crypt / busybox cryptpw) and store it in shadow.
.TP
.BI --user-password-hash " hash"
.TP
.BI --root-password-hash " hash"
Already-hashed shadow field. Answers files may use
.B user-password-hash
and
.B root-password-hash
the same way. Those hashes are not written back to
.I /etc/sps/setup-answers .
Without a password flag, non-interactive setup leaves the account locked;
see
.I /root/sps-user.txt .
.TP
.B --flatpak yes|no
Install the Flatpak set and attempt to add Flathub after packages land.
.TP
.B --init systemd|openrc|s6|runit|dinit|shepherd|sysvinit|none
PID 1 on the installed system. Scripts default to none so a fixture
install does not pull an init. The interactive screen defaults to the
live image's
.I /etc/sps/init
when that file names a known init, otherwise systemd.
Supervision inits and SysV pull eudev and elogind the same way OpenRC does.
The power set does not pull elogind; systemd gets logind from systemd
itself so a Plasma install can use systemd without a conflict.
.TP
.B --services yes|no
Enable known services for the chosen init after packages install
(default yes). Missing unit or script files are filled from stock
copies under
.IR $SPS_LIBDIR/setup/sv .
Does not start daemons inside a target chroot; first boot starts them.
.B pkin
does the same after every later
.B sget install
of a mapped package such as sddm.
.TP
.B --format yes|no
Required
.B yes
for non-interactive guided layouts. The dialog asks this after you pick
a disk.
.TP
.B --nvidia yes|no
Install NVIDIA open kernel modules and utilities. A matching kernel is
required; this installer does not build one.
.TP
.B --bootloader none|grub
Write notes only.
.TP
.B --install-bootloader
Run
.B grub-install
on
.B --disk .
Refuses to guess a disk. The interactive screen offers the same step
behind a second confirmation.
.TP
.B --no-update
Skip
.B src update
before
.B sget install .
Live images still copy bundled recipe trees into the target.
.TP
.B --non-interactive
Never start
.BR dialog (1).
.TP
.B --plan
Print the resolved configuration and package list, then exit.
.TP
.BI --write-answers " file"
.TP
.BI --read-answers " file"
Options override values from the file.
.TP
.B --list-profiles
.TP
.B --list-sets
.SH FILES
.TP
.I $SPS_LIBDIR/setup
Profiles, sets, keymaps, timezones, extra package list, and the
service map.
.TP
.I $SPS_SETUP_DIR
Optional override of that directory, used by tests.
.TP
.I /etc/sps/setup-answers
Copy of the resolved answers in the target root.
.SH EXIT STATUS
Returns 0 on success, 2 for usage errors, 3 when a profile or set is unknown,
8 for permission problems, 9 when
.B src update
fails, and 10 when package installation fails.
.SH SEE ALSO
.BR dialog (1),
.BR sget (1),
.BR src (1),
.BR pkin (1)