Slackware on a Thinkpad T61 in 2023

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.  Done
  • Upgrade beyond the “max” 4GB memory to 2 x 4GB DIMM.  Upgraded to 8GB
  • Replace the 80G HD with a SATA II SSD.  Upgraded to 512G SSD
  • Replace 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`

 

 

 

About Will Foster

hobo devop/sysadmin/SRE
This entry was posted in open source and tagged , , , , , . Bookmark the permalink.

Have a Squat, Leave a Reply ..

This site uses Akismet to reduce spam. Learn how your comment data is processed.