aboutsummaryrefslogtreecommitdiffstats

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, --interactive run slackpkg with its normal prompts
  • -h, --help print usage
  • --self-test run the internal logic checks and exit (no root needed)

Environment:

  • INITRD initrd to inspect (default /boot/initrd-generic.img)
  • LOG append 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

  1. Snapshots the current initrd's kernel version and module list.
  2. Runs slackpkg update, install-new, upgrade-all, clean-system, new-config.
  3. Checks:
  4. the initrd's kernel version against the newest installed kernel,
  5. the modules mkinitrd_command_generator.sh says are needed against the initrd's contents,
  6. the module set against the pre-upgrade snapshot (notices modules lost).
  7. Lists any leftover .new config files.
  8. 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.