reversed(top()) code tags rss about

A couple of slackpkg+ tips

December 25, 2024
[issue] [slackware]

One tip is on an issue with https://slakfinder.org, another is about not upgrading some packages by default. They aren’t related to each other, but I’ve dealt with one and found a solution to the second one at about the same time. There is also an unrelated bonus section.

The tips are related to slackpkg+ (the link likely won’t open), which is useful if you have multilib installed because it allows treating it essentially the same as official Slackware packages which get masked. It’s not limited to multilib and allows managing any number of repositories in addition to the official one.

Tip #1: Timeouts on slackpkg check-updates/update

This started to happen recently and wasn’t very consistent, so I simply didn’t wait for those commands to finish and checked back on them after approximately 5 minutes. Eventually, I concluded that the issue is permanent, saw that it popped up over the years and that about 2 years ago AlienBOB set up a mirror.

Editing /etc/slackpkg/slackpkgplus.conf to replace

MIRRORPLUS['slackpkgplus']=https://slakfinder.org/slackpkg+15/

with

MIRRORPLUS['slackpkgplus']=https://slackware.nl/slackpkgplus15/

fixed everything. Although, this does mean that slackpkg+ is unmaintained at the moment and you might as well just drop its mirror. It does work fine on latest Slackware64-current and maybe AlienBOB will make some changes or update his repo when the author of slackpkg+ is back.

By the way, I think the timeout on slackpkg+ repository was causing issues for multilib repository, preventing it from being updated. So this wasn’t merely a convenience fix.

Tip #2: Not trying to upgrade AlienBOB’s packages by default

When using slackpkg+, slackpkg upgrade-all can offer a lot of downgrades if you’ve enabled AlienBOB’s repository which isn’t always in sync with SBO. For a while it was getting on my nerve to unselect those downgrades and still keep the rest selected. Recently, I accidentally saw /etc/slackpkg/greylist file with which one can automate the process simply by adding a line like this to the file:

# Most of these packages are outdated, so deselect by default.
[0-9]+alien

I still need to go through the list sometimes and check for upgrades, but that’s a much smaller problem. Ideally, downgrades wouldn’t be even suggested or it would be possible to bulk-unselect things based on the repository, but that’s not how slackpkg works. I have my version of sbopkg in the works because I find sbopkg too slow and C++ being awesome makes working with SBO packages blazingly fast, but the tool doesn’t support handling binary repositories at least yet (I’m aware that some such tools already exist, I just haven’t seen the one which I would like to use, some are even more laggy then sbopkg).

The greylist file is specific to slackpkg+, see man slackpkgplus.conf for a bit more details.

Bonus: Safe kernel upgrades

New kernels often have some kind of issues which may or may not affect a particular user, so it’s nice to be able to use an older kernel in case new version doesn’t work well. This is of greater importance if you use a rolling version like Slackware-current (might be done out of a necessity rather than a desire to use a bleeding edge and deal with its problems).

Slackware-current now makes it easy to install a new kernel without removing the old one. The old way required a procedure like this one (possibly as a script):

slackpkg download kernel
for f in System.map config vmlinuz vmlinuz-generic; do cp -d /boot/$f /boot/$f.old; done
find /var/cache/packages/slackware64/ -name 'kernel-*.txz' -exec installpkg {} \; -delete
touch /boot/have-old

# remove old kernel packages and a marker after testing new kernel
slackpkg remove kernel
rm /boot/have-old

Where /boot/have-old indicates presence of the old kernel to GRUB’s configuration. This also could require blacklisting kernel packages because slackpkg doesn’t like when several versions of the same package are installed at the same time.

New way is much simpler:

make-kernel-backup
slackpkg upgrade kernel

# remove old kernel package after testing new kernel
slackpkg remove kernel-backup

No need to manage a marker manually, /boot/vmlinuz-backup exists only when a backup kernel is present.

The only downside I found is that make-kernel-backup doesn’t preserve kernel sources/headers which can be a problem in certain cases (e.g., when you need to build kernel modules after making a backup and upgrading, but before rebooting), but it mostly worked fine for me so far.

There is much more to it: initrd is now generated automatically on kernel installation with /etc/default/geninitrd configuring finer details of the behaviour. I don’t use an initrd for the lack of a need for it, but still have it generated in case I’ll have to boot on a different device where it may be necessary (had to deal with this situation in the past). There is also no kernel-huge anymore, by the way.