dist-upgrade
Update a Slackware -current system with slackpkg, then verify the initrd
still matches the newly installed kernel and still contains the modules the
system needs to boot.
The script wraps the standard -current routine (update, install-new,
upgrade-all, clean-system, new-config) and adds three initrd checks so a
stale or incomplete initrd cannot silently leave you with an unbootable system.
Usage
sudo ./dist-upgrade # unattended
sudo ./dist-upgrade -i # interactive, slackpkg prompts normally
Options:
-i,--interactiverun slackpkg with its normal prompts-h,--helpprint usage--self-testrun the internal logic checks and exit (no root needed)
Environment:
INITRDinitrd to inspect (default/boot/initrd-generic.img)LOGappend the non-interactive run, slackpkg output included, to this file (default/var/log/dist-upgrade.log; set it empty to disable)
A logrotate rule for that log ships in logrotate.d/dist-upgrade; install it
to /etc/logrotate.d/.
What it does
- Snapshots the current initrd's kernel version and module list.
- Runs
slackpkg update,install-new,upgrade-all,clean-system,new-config. - Checks:
- the initrd's kernel version against the newest installed kernel,
- the modules
mkinitrd_command_generator.shsays are needed against the initrd's contents, - the module set against the pre-upgrade snapshot (notices modules lost).
- Lists any leftover
.newconfig files. - Reports whether a reboot is recommended.
A non-interactive run is appended to LOG, with a timestamped header per run,
so an unattended upgrade can be reviewed afterwards. Interactive runs are not
logged: slackpkg's TUI needs the terminal, and redirecting it through the log
breaks the curses interface.
If slackpkg upgrades itself mid-run (exit status 50) the script re-executes once from the top to finish the operation, exactly as slackpkg's own message asks. A second occurrence aborts with a message instead of looping.
Unattended mode runs the package commands with -batch=on -default_answer=y.
clean-system is the exception: unattended it only lists packages that are not
part of the official Slackware set and removes nothing, so third-party or
local packages are never deleted silently. When it does find such packages, the
closing recap reminds you to re-run with -i to review and remove them.
Requirements
Slackware -current, run as root. Needs slackpkg, cpio and gzip; zstd
and xz are used only if the initrd is compressed with them. The module
bootability check uses Slackware's own
/usr/share/mkinitrd/mkinitrd_command_generator.sh when present.
Testing
bash -n dist-upgrade
./dist-upgrade --self-test
--self-test builds a small gzip/cpio initrd in a temp dir and round-trips it
through the reader, alongside checks of the module/version parsers.
License
GPLv2 (version 2 only). See LICENSE.
Development Approach
This project is developed using AI-assisted tools. Code is generated with the help of AI based on human-provided specifications, design decisions, and iterative feedback.
All contributions are reviewed, tested, and curated by the maintainer before being included in the codebase. AI is used as a productivity and exploration tool, while human oversight remains central to all decisions.
The goal is to combine the flexibility of AI-assisted development with standard open-source practices such as transparency, review, and accountability.
