Writing

Feed Software, technology, sysadmin war stories, and more.

Thursday, February 17, 2022

My "daily drivers", and what happened to Slackware here

In yesterday's post, I mentioned taking my old Mac Mini out of the OS X/macos ecosystem and bringing it into Debian, and then what kind of hilarity followed when I attempted to install a Javascript linter (and it tried to drag in 180+ node-related packages).

This and some other mentions have prompted some questions, mostly along the lines of "Debian? What happened to Slackware and green-on-black?"... and I guess I can answer some of those.

Readers are advised that this post will probably containdefinitely contains an even higher than usual amount of navel-gazing as I dish out the details of my setup. My usual disclaimer of "this works for me and probably won't work for you, so if you have different tastes, then great, go with that" definitely applies here.

Right, so, with that out of the way, let's get into a discussion of what I'm actually using to get things done these days.

First of all, the one that most people actually notice is the actual box which is serving rachelbythebay.com, which at the moment is a box called snowgoose. I had installed it in early 2020 as CentOS 8 because it had advertised a final end-of-life date of 2029. I figured that was awesome. Of course, as we know now, they pulled the rug out from under us that year and decided that it would die in 2021 instead.

This got a whole bunch of projects off the ground to do something about it, and one of the several which survived is Rocky Linux. It pretty much is the CentOS for 2021 and beyond, and apparently has some of the same people involved, too.

I followed this project with interest, and fretted about what would happen if there wasn't an easy way to migrate. Fortunately, they did a bang-up job and came through with a migration script, and I ran it. Chances are, most people have no idea I ever did this migration, because nothing changed on the site itself. People who are looking really closely for the finer details (like Netcraft...) would have noticed that the "Server:" line emitted by my Apache changed subtly at one point. That's the only outward-facing difference as far as I can tell.

Basically, if I didn't tell people that it happened on September 22, 2021, would they have known? Apparently not. There was even a reboot involved just to verify that everything was solid in terms of the kernels and boot loader action. Everything worked great.

This migration didn't happen on a whim. I actually tortured a local machine into installing CentOS 8 and then migrating to Rocky in order to see what would happen and to have some idea of what to expect. The whole thing happened that afternoon.

Obviously, I am grateful to the Rocky Linux folks for delivering on something that saved a lot of people a whole lot of work.

...

But, okay, that's my server. People want to know about my machines at home, since that's where Slackware entered the picture. This is where I'll just drop the bomb: I stopped using Slackware in January. This was no small thing. I'd experimented with it late in 1993, did my first real install to a dedicated disk in 1994, and had at least one workstation box running it full time (having erased the DOS install) since 1996.

It was a nice, simple distribution that stayed out of my way. I used it for a handful of things, and it did those things well enough for my needs.

The problem is that the world didn't sit still. In particular, the software-defined radio world of GNU Radio keeps changing, and it keeps dragging its dependencies along with it. I found that keeping it current on my Slackware box had become too much of a burden. In particular, I ran afoul of VOLK (something they spun off a while back) requiring cmake "3.8 or higher", and the version of Slackware I was running had 3.5.2.

Now, I can build my own cmake. I've *built* my own cmake. I could have done this. But, I also noticed that cmake-using people tend to lie about what their stuff actually needs. I'd managed to build other things just fine by hacking their stuff to set the actual "required version" to 3.5.2.

Of course, once I had done that, then this happened:

-- Could NOT find PythonInterp: Found unsuitable version "2.7.17", but required is at least "3" (found /usr/bin/python)

GNU Radio also has heavy dependencies on Python, and there's no way it was ever going to play nicely with the ancient version my machine had. Also, there's no way I was going to try to wrangle a Python 3.whatever install onto this box.

While this was happening, I had put Debian on my Mac Mini as sort of a long-term shakedown test to see how it did. I even went as far as installing X and my usual set of X-related things to see how it would turn out. It all went pretty well, and soon I found myself actively building things over there since so many of the hurdles had been removed.

Continued development on my SDR-related stuff meant that it got ahead of what the GNU Radio install on my main workstation (the Slackware box) could support, and before long, I had to block those targets from my "build the world" tool. I could no longer work on them directly on this machine, since they relied on GNU Radio APIs that only existed in the newer versions, and those newer versions wanted too much done in order to happen on my version of Slackware.

Now, I do mean this was a long-term test of Debian. The Mini got it in February 2021, and my main workstation got it in January 2022. That's how long I remained open to the possibility of staying on Slackware.

Towards the end of 2021, it appeared that Slackware 15 would be coming out soon, and I had to ask myself some hard questions, like if I wanted to bother with it. In being brutally honest about the situation, I realized that it would come down to "install almost every package" or "play whack-a-mole with the inter-package dependencies". I didn't want to do either.

Back in the 90s, I actually had a pretty good handle on which packages required other packages in the Slackware tree. I could probably tell you that if you wanted to install such and such, you probably also would need this other thing, or it'd complain about a missing library or something. I couldn't (and didn't) do this for the KDE and GNOME stuff, naturally, but for things in the "AP" or "D" or "N" sets (applications, development, and networking, respectively), I had a pretty good feel for it. (You would hope, given that it was my job to keep a few dozen Slackware boxes running back then.)

At some point, even that stopped working. Somewhere in the early 2000s, there were just too many interconnected packages. I'd watch a system being installed and see all kinds of random stuff going by that I had never seen before - "WTF is pango? expat? Huh?" - you get the idea. I realized that the strategy had turned into "install *everything* from the L (library) set", and that's just awful.

There once was a time when you could do a "custom install" and be thoughtful about which packages were installed, and end up with a working system. These times are not those times. Those times are gone.

Having failed to convince myself to install the world, run into random issues from things I hadn't realized were needed, or throw down and code something up to solve my own dependencies, instead I created and took the fourth option: leave.

So, one day about a month ago, I headed out to one of the few computer stores left in the Bay Area and picked up a couple of SSDs - from two different manufacturers, so as to avoid "same batch" woes, naturally. Then I came back here, got 'em mounted in the case, did an install, and started pulling things across.

It didn't take too long to get back to where I wanted to be. Now, there have been growing pains and certain challenges, like when apt wanted to remove almost everything on the system one time. At this point, I think I have a handle on how their state machine works now, and can avoid doing anything particularly stupid to myself. I even upgraded the mini from Debian 10 to 11 without killing it. Hooray!

As for the green-on-black and whatnot, that's the thing: very little has changed about my day-to-day on the machine. It's running the same window manager (fluxbox) with the same theme, the same terminal (urxvt), the same color scheme (yes, really, green-on-black), the same AfterStep/WindowMaker era widgets I've relied on for years, and so on. Even the fonts are the same.

What's different? Well, I can run my current SDR stuff on here again. I can do other things like screw around with gqrx because Qt5 is here, too. Previously I had to do that in a "lab VM" on some other machine. Certain things also have gotten easier, like anything involving audio.

What's also notable is what *isn't* on here. If I see a package that looks useless, I can give it a tug and see what depends on it. A lot of times, it's just more useless stuff, and so I cast it all out. Do I want bluetooth on here? Nope. Gone. DOS filesystem utilities? Nope, seeya. modem manager? WPA supplicant? laptop tools? Don't need 'em. This is a box that isn't a laptop, has no modems, and has no wireless cards. So, I toss that out and shrink my "exploitable footprint" slightly. (Every daemon, suid or sgid program, or other funny hotpluggable thing with magic privileges is a potential problem.)

Being able to safely remove packages like that is great stuff.

Is Debian perfect? Nope. But it works well enough. Is Slackware broken? Nope. It's true to itself, still, after all these years. The difference is that I don't feel like that works for me any more.

I mean, I also used to run my own mail services. After 30 years of that (not an exaggeration: 1990 to 2020), I finally gave in and moved it to being hosted somewhere. It's the same deal: I paid my dues, and now I'm going to focus my efforts on something else.

...

As for the rest of my "daily driver" situation, it would be dishonest to not mention the ever-present Macs in my life. My desk has two monitors, two keyboards, and two mice. One set is for the aforementioned newly-Debianized Linux workstation, and the other one is for my MacBook Air. The old MacBook Pro sits off to the side, not doing much.

I tend to do all of my "real work" on the Linux box: writing, programming, managing other systems that are far away, etc. Basically, if it involves a terminal, I'm doing it right here ... *even if* that means sshing BACK to the Mac. Terminal stuff on the Mac just feels wrong, and it's a constant source of friction when trying to do actual work. It's been like this for a long time, and I stopped trying to figure it out or fight it many years ago.

At the moment, the Mac is fine for my web browsing, e-mail, photos, and music. This comes and goes. There was a point when it looked like both OS X and iOS were on a straight shot to usability hell, and I wasn't sure what would happen next. Somehow, things shifted again, and they stopped being so terrible for me, and I moved along. It took a while, though.

...

Finally, for the sake of anyone who really cares about the finer points, here's the full dump of way more crap than you actually ever wanted to know.

"Real work" machine: 2011 pile of parts originally specced out for a SDR project back in the day. Gigabyte motherboard, 8-way i7-2600 at 3.4 GHz. 16 GB of memory. A pair of 2 TB SSDs, hooked up via SATA (hey, it's a 2011 build). HP 2509b monitor. Logitech K120 keyboard that's seen so much use, it has nail indentations on some of the keycaps. Some random Logitech (wired) mouse of a similar vintage - apparently a M500 or M500s.

OS: Debian Linux 11 (bullseye). X. fluxbox. Flux theme. Toolbar set to auto-hide. urxvt. -bg black, -fg green, 7x14 font. wmCalClock and wmcpuload in the upper right corner. Other widgets may join the permanent set.

Dev environment: aforementioned green-on-black urxvts starting bash. nano editor. C++ (14). My own little build tool that understands that '#include "..."' is enough to figure out what needs what. No build scripts, no Makefiles, no cmake, no Java services, no funny stuff. No IDEs (gasp!).

Frequently used libraries: protobuf, jansson, gtest, gmock, gnuradio, osmosdr, uhd, libmp3lame, mysqlclient, libpq (Postgres client), libgd.

"Rest of the world" machine: 2020 Intel-based MacBook Air - the first one with the fixed keyboard, that really really sucked at Thunderbolt for basically all of 2020 (and looks to have regressed -more on that in another post). Last one before they went to their own "sillikin". 4-way i7-something or other at 1.2 GHz. 16 MB of memory and 2 TB SSD, no doubt soldered to the board. OWC Thunderbolt 3 dock. Apple Thunderbolt monitor ca 2014. Same models of keyboard and mouse as the Linux box.

macOS Monterey, 12.2. Oops, guess I should patch that (but apparently it won't fix the Thunderbolt stupidity that came back in 12.2). Macports.

Desk: something bought at IKEA in East Palo Alto about 15 years ago. Looks like a "Jonas" based on a sticker I just found. Whatever that is.

Chair: whatever I could find at the office supply store when the last one decided to fail. These things are all crap. It's not the least bit special. It has a seat, a back, some wheels, and some adjustable parts. Just like everything else. It, too, will fall apart eventually.

Music: I still buy CDs when I can. Airpods Pro. Usually playing my own library (which is largely from those CDs, else iTunes store), not streaming. (I also had a "land line" until 2012 or so. My lawn: get off of it.)

And, in case you couldn't get enough, the other two notable machines in my life:

"Distant server in a rack I'll never see": Some kind of SuperMicro cruft. 8-way Xeon E-2174G at 3.8 GHz. 16 GB of memory. 1 TB no-joke hard drive, presumably SATA. Pair of NICs running at 100 Mbps to the outside world, because I don't need more and the redundancy was free.

Rocky Linux 8.5. Apache httpd. MySQL. A bunch of the compiled versions of the C++ crap I write on the "real work" machine. CGI.

"Workhorse Mac mini": mid-2011 Mac Mini, 4-way i5-2415M @ 2.3 GHz. 16 GB memory. 1 TB SSD, SATA.

Debian Linux 11. Apache httpd. Postgres. A bunch of other dumb compiled things for projects I haven't written much about yet, like why I was wrangling Javascript the other night. More CGI.

I'll skip the Raspberry Pis since they have no personalities to speak of, but they'll show up in some future post where I talk about what they have to do with SDRs, Postgres, Apache, and yes, a bit of Javascript.

...

And there you have it. I resisted doing this kind of post for a long time. I hope it was worth running afoul of the haters.