Venerable Slackware, the oldest maintained Linux distribution. For many Linux users it was the one you learned on, yours truly included. I recently felt the nostalgic urge to add Slackware back to my armada of Linuxes on an old IBM Thinkpad T61 (which has one of the best keyboards I’ve ever used on a laptop). Here’s my experiences with Slackware 15.0 in 2023 on older hardware.
The Hardware (Thinkpad T61 circa 2007)
I found an affordable used IBM Thinkpad T61 with the following specs for about $80.
- Intel Core 2 Duo T7300 (4M Cache, 2.00 GHz, 800 MHz FSB)
- 4GB of memory (expandable to 8GB via the Middleton BIOS)
- 80GB SATA Hard Disk (upgrade to SATA II / SSD)
- 15.4″ 1680×1050 (WSXGA+) widescreen
- Intel 965GM IGPU
- Intel iwl4965 Wifi
Installing Slackware
The Slackware installation hasn’t changed in decades except I didn’t use floppy disks and simply used a bootable USB thumbdrive. There are two variations of Slackware – Slackware and Slackware64 (for x86_64). This hardware is 64-bit capable unlike the T60 so I went with that. There is also Slack for Arm but we won’t cover that.
One thing I did differently is opt for Luks disk encryption and LVM following this guide here. I opted to install the XFCE window manager since that’s my preference and it’s relatively lightweight compared to the other major desktop environments. Of note, Slackware 15 ships XFCE-4.16 and not the latest XFCE-4.18 but as always it’s reliable and stays out of your way and you won’t notice the difference.
I won’t go through the installation here except provide an action photo of it installing packages. I had no problem booting to a Slackware64 USB stick and into the installation after using the cfdisk utility to create my partitions, and luks/LVM to complete the layout.
Booting up and First Impressions
Slackware is as comfy and laid back as it always was. There’s no systemd and it uses LILO instead of grub. I felt like I had returned to an old log cabin with a raging fire in the chimney, a cup of piping hot tea handed to me as I step into the door.
The boot process is simplistic and easy to troubleshoot, it booted rather quickly for such old hardware (and mainly such an old SATA spinning rust disk). Another aspect of the Middleton BIOS is it can be unlocked to support SATA II and an SSD so I may upgrade it later depending on how much usage this sees. Did I mention the T61 keyboard? They just don’t make them like this anymore.
Battery life is around 5 hours with an aftermarket 8800 mAh extended battery that cost around $35.
Slackware 15.0 with XFCE-4.16
Fixing the Wifi Issues with iwl4965
Everything worked great except the Wifi, which the Intel iwl4965 would produce errors like the following:
Sep 26 21:33:16 oldflame NetworkManager[1124]: <info> [1695756796.6555] device (wlan0): supplicant interface state: scanning -> authenticating Sep 26 21:33:16 oldflame kernel: wlan0: authenticate with ec:3e:b3:42:78:ff Sep 26 21:33:16 oldflame kernel: wlan0: send auth to ec:3e:b3:42:78:ff (try 1/3) Sep 26 21:33:18 oldflame kernel: wlan0: send auth to ec:3e:b3:42:78:ff (try 2/3) Sep 26 21:33:19 oldflame kernel: wlan0: aborting authentication with ec:3e:b3:42:78:ff by local choice (Reason: 3=DEAUTH_LEAVING) Sep 26 21:33:19 oldflame NetworkManager[1124]: <info> [1695756799.3408] device (wlan0): state change: config -> failed (reason 'ssid-not-found', sys-iface-state: 'managed') Sep 26 21:33:19 oldflame NetworkManager[1124]: <info> [1695756799.3425] manager: NetworkManager state is now DISCONNECTED Sep 26 21:33:19 oldflame NetworkManager[1124]: <info> [1695756799.3733] device (wlan0): set-hw-addr: set MAC address to F2:37:B9:E3:AD:15 (scanning) Sep 26 21:33:19 oldflame NetworkManager[1124]: <info> [1695756799.6157] device (wlan0): supplicant interface state: authenticating -> disconnected Sep 26 21:33:19 oldflame NetworkManager[1124]: <info> [1695756799.6163] device (wlan0): state change: failed -> disconnected (reason 'none', sys-iface-state: 'managed')
It would see access points, try to connect but ultimately fail during the negotiation phase. After some research this post on the Linux Mint forums pointed me in the right direction. I needed to load the iwl4965 kernel module without wireless N support but first also force removal of the dependent kernel module chain.
modprobe -rv iwl4965 modprobe -v iwl4965 11n_disable=1
This was also a bit kludgy and sometimes needed be done after the system was booted up fully rather than the modprobe phase so I added this to the /etc/rc.d/rc.local script in Slackware.
Adding the Wifi Fix in rc.local
This is my /etc/rc.d/rc.local below, first you want to make it executable. In Slackware there are just plain good old bash init scripts and marking something executable is enough to ensure it’s “started”. You can also just run /etc/rc.d/rc.$service start|stop|restart as needed.
chmod +x /etc/rc.d/rc.local
Now I do some ugly hack to unload and reload the wifi kernel module to omit wireless N support so it works. You can paste this in as root to add the commands or add them yourself at the end of the file.
cat >> /etc/rc.d/rc.local<<EOF # hack/fix for iwl4965 wifi modprobe -rfv iwl4965 sleep 1 modprobe -v iwl4965 11n_disable=1 EOF
Further Setup and Usage – Installing Updates
After my wifi was finally working I pulled down all the errata updates available. Slackware15 is actually fairly modern with a 5.15 LTS Kernel, Python3 and other programs having been released on 2022-02-02 and routinely updated.
First, comment out an HTTP or FTP close to you in /etc/slackpkg/mirrors
# IRELAND (IE) # ftp://ftp.heanet.ie/mirrors/ftp.slackware.com/pub/slackware/slackware64-15.0/ http://ftp.heanet.ie/mirrors/ftp.slackware.com/pub/slackware/slackware64-15.0/
Next, run slackpkg to fetch the latest changelog and manifests.
slackpkg update
Lastly run the update command and choose what you want to update via a timeless ncurses menu.
slackpkg upgrade-all
Note: there is very little hand-holding in Slackware, if your kernel is updated you need to regenerate a new initrd and in the case of my LVM / Luks crypt setup I needed to update and run lilo as well. Slackware provides an initrd command generation script, you’ll need to modify this with the name of your new kernel.
Run this:
/usr/share/mkinitrd/mkinitrd_command_generator.sh
Which generates this:
mkinitrd -c -k 5.15.117 -f ext4 -r /dev/flamevg/root -m jbd2:mbcache:crc32c_intel:crc32c_generic:ext4 -C /dev/sda2 -L -u -o /boot/initrd.gz
If above you upgraded from 5.15.117 to 5.15.233 you’d need to modify that line then run the command to generate your new initrd against 5.15.233
You’d then need to edit /etc/lilo.conf and adjust the name of your /boot/vmlinuz-generic-5.15.117 to /boot/vmlinuz-generic-5.15.233
# Linux bootable partition config begins image = /boot/vmlinuz-generic-5.15.223 initrd = /boot/initrd.gz root = /dev/flamevg/root label = Slackware read-only # Partitions should be mounted read-only for checking # Linux bootable partition config ends
After this update LILO.
lilo -v
Installing Flatpak
Lastly for now I wanted to have Flatpak available, it’s a useful tool for running sandboxed applications. This is fairly straightforward in Slackware, alienbob has packaged flatpak for modern versions of Slackware and slackware-current.
I’ve pulled down his slackware packages below and installed them with the following commands (as root)
mkdir flatpakfiles ; cd flatpakfiles wget http://www.slackware.com/~alien/slackbuilds/flatpak/pkg64/15.0/flatpak-1.12.7-x86_64-2alien.txz wget http://www.slackware.com/~alien/slackbuilds/appstream-glib/pkg64/15.0/appstream-glib-0.8.1-x86_64-1alien.txz wget http://www.slackware.com/~alien/slackbuilds/bubblewrap/pkg64/15.0/bubblewrap-0.8.0-x86_64-1alien.txz wget http://www.slackware.com/~alien/slackbuilds/gcab/pkg64/15.0/gcab-1.5-x86_64-1alien.txz wget http://www.slackware.com/~alien/slackbuilds/libostree/pkg64/15.0/libostree-2022.6-x86_64-1alien.txz wget http://www.slackware.com/~alien/slackbuilds/xdg-desktop-portal-gtk/pkg64/15.0/xdg-desktop-portal-gtk-1.12.0-x86_64-1alien.txz
Now install all the packages
installpkg *.txz
Next you’ll need to make some modifications for reasons outlined in alienbob’s blog post. post for fixing some things around RPC and mounting.
chown root:root /usr/bin/bwrap chmod u+s /usr/bin/bwrap
Lastly, initialize Flatpak with the flathub repo to install software as your normal user
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
Search for software on flathub and install it as your normal user.
flatpak install org.signal.Signal
Installing Third-Party Software via sbopkg
This is better covered in official docs but you can build your own Slack packages by making slackbuilds (or downloading ones people have already made and building from source) or you can use a wide range of prebuilt binary packages.
There is a utility called sbopkg that helps with this and allows you access to all the third-party packages on slackbuilds.org
This is very similar to the BSD ports tree so if you’ve used that you’ll find it familiar.
First, download the sbopkg Slackware package from Github.
wget https://github.com/sbopkg/sbopkg/releases/download/0.38.2/sbopkg-0.38.2-noarch-1_wsr.tgz
Install sbopkg with the installpkg command
installpkg sbopkg-0.38.2-noarch-1_wsr.tgz
Now sync the mirror tree of packages
sbopkg -r
Now you can install packages via sbopkg -i $packagename and it will fetch the Slackbuild for them and build it from source for you.
# sbopkg -i weechat ########################################### New queue process started on: Wed Sep 27 17:19:05 CEST 2023 ########################################### +++++++++++++++++++++++++++++++++++++++++++ PRE-CHECK LOG Using the SBo repository for Slackware 15.0 Queue Process: Download, build, and install weechat: Checking GPG for weechat.tar.gz ... OK Processing weechat 4.0.4-1 Using original .info file Using original SlackBuild file No build options selected. +++++++++++++++++++++++++++++++++++++++++++ Pre-check complete. Do you wish to proceed based on the search results above? Packages not found will be skipped during the process. (P)roceed or (Q)uit?:
Fast forward past a lot of build activity and we’ve built and installed weechat for Slackware.
Verifying package weechat-4.0.4-x86_64-1_SBo.tgz. Installing package weechat-4.0.4-x86_64-1_SBo.tgz: PACKAGE DESCRIPTION: # weechat (IRC client) # # WeeChat is a fast & light multilingual curses-based multiplatform # IRC client written from scratch and released under the GPL. # # Homepage: https://www.weechat.org # # This package was built WITHOUT lua scripting support. # Executing install script for weechat-4.0.4-x86_64-1_SBo.tgz. Package weechat-4.0.4-x86_64-1_SBo.tgz installed.
You can specify multiple packages by putting them in quotes.
Managing Packages with Dependency Checking
sbokg is a useful tool but it doesn’t handle dependencies, for this I have been using sbotools. sbotools will check the dependencies in the Slackbuild structure and build/install all appropriate packages as needed. I particularly like it because it’s very similar to the BSD ports structure.
Install sbotools
sbopkg -i sbotools
Fetch an updated snapshot of all of slackbuilds.org packages
sbosnap fetch
Install something with sbotools
sboinstall libreoffice
Search for something with sbotools
# sbofind wine SBo: winetricks 20230212 Path: /usr/sbo/repo/system/winetricks SBo: wine-staging 8.8 Path: /usr/sbo/repo/system/wine-staging SBo: wine 8.0.1 Path: /usr/sbo/repo/system/wine
Use sbotools to check/upgrade your installed slackbuild packages
# sbocheck Updating SlackBuilds tree... Updating files: 100% (45066/45066), done. HEAD is now at 62d9058181 20231021.1 global branch merge. Checking for updated SlackBuilds... KeePass 2.54 < needs updating (2.55 from SBo)
Use sbotools to upgrade packages
sboupgrade --all
sbopkg and sbotools can happily co-exist, and they should not conflict with the native slackpkg commands from Slackware base OS either.
Once discovering sbotools I tend to prefer them over sbopkg simply because of the package dependency checking.
What’s this thing for anyway?
I don’t know! I missed the old Thinkpad keyboards and I just wanted to run Slackware again. I will use it for something, I’ve got a few small projects around it that I’ll work on and update this post when I have time:
Install Middleton BIOS.DoneUpgrade beyond the “max” 4GB memory to 2 x 4GB DIMM.Upgraded to 8GBReplace the 80G HD with a SATA II SSD.Upgraded to 512G SSDReplace the German keyboard with US/UK English keyboard.Done
Updated: 2023-10-20: with the above hardware upgrades on T61 this has proven to be a very reliable personal laptop with an excellent keyboard. The processor is a little slow since it’s from 2007-2008 but overall it’s pretty great. It’s even better with Slackware.
Keep on Slackin`