I’ve been away for a couple months, busy with two big life changes this past fall: the birth of my (second) daughter in early October, and starting a new job later in the month. However I’m still trying to find time to expand my skills and share them with friends and colleagues. This fall I started using Proxmox VE at home, a Linux distro that, among its many features, makes it easy to create lots of virtual machines and manage them all from a simple, web-based interface. From the first day I used it I knew I would have to do a presentation about it, and was given the honor of being the last Philadelphia Linux Users Group presenter of the 2010s decade at PLUG West in Malvern last week:
I have a home lab of around a dozen PCs (mostly physical, but some virtual) running Linux down in my basement. I like running lots of different Linux distros in my lab just to keep pace with the varying developments in the open source community, however constantly updating the machines to get all the latest bug fixes and security patches can be a tedious process. Here’s a short Ansible playbook I wrote a little while back to automate the update process across all my machines. Besides this file you also need an “inventory” file (a simple text file with all the hostnames or IPs of the machines to update), as well as the Ansible engine installed, which is available in virtually all Linux repos these days.
If you look at the playbook below you’ll see the main section of the code runs four different “Tasks”, each one corresponding with the command in Ansible to upgrade the Linux system software for a specific style of package manager (which tends to vary widely among mainstream Linux distros).
A link to this playbook as well as additional information on how to run it can also be found on my GitHub page here.
--- - hosts: all become: yes tasks: - name: install updates for Debian, Ubuntu, Mint apt: upgrade=dist update_cache=yes when: ansible_pkg_mgr == 'apt' - name: install updates for CentOS and RHEL 7 yum: name=* state=latest update_cache=yes when: ansible_pkg_mgr == 'yum' - name: install updates for Fedora and RHEL 8 dnf: name=* state=latest update_cache=yes when: ansible_pkg_mgr == 'dnf' - name: install updates for Arch and Manjaro pacman: upgrade=yes update_cache=yes when: ansible_pkg_mgr == 'pacman' ...
Ever since I first turned on a computer in elementary school, I’ve been interested in programming. From BASIC, C, and Pascal in school to Visual Basic, SQL, and now Python, it’s been a winding path and (for me, anyway) a pretty unconventional one as many of my jobs through the years have offered the promise of improving my programming skills but then branched off in unrelated directions. However, I’ve never lost my interest and this year I decided I badly needed to start coding again. Here are a couple of the things I’ve been working on lately.
- Python scripting – while as a long time Linux user I’ve been tinkering with Python scripts for years, tweaking a constant here or a string variable there, now I’m writing scripts from scratch. I especially enjoy the “programming as online game” approach promoted by Codewars, HackerRank, and others. Here is a link to a Python script I wrote this past summer for one of the coding challenges on HackerRank. It uses one of the Python standard libraries (“re”, regular expressions) to validate streams of sample data (in this case, credit card numbers).
- Infrastructure as code – in my opinion, one of the most exciting developments in programming in the past few years has been the rapid spread of infrastructure as code. When I was first introduced to AWS a couple years ago, I immediately recognized its CloudFormation IaC tool as a huge game changer for systems administators like me. Here is a link to an entire demo website that can be built using AWS CloudFormation with just a few mouse clicks and keystrokes. Since writing this code, I’ve since learned that Terraform is the IaC tool of choice in the industry since it’s not locked in to a single cloud vendor like CloudFormation is with AWS, so it’s definitely a goal of mine to learn Terraform and eventually refactor this code to use that tool instead.
As a computer hardware enthusiast, I’ve always been keen on getting the best performance and reliability out of all my machines. Whenever I build a new box, one of the first things I like to do after installing the OS is “burn-in” testing to make sure it can hold up under a heavy processing load. For the last five years or so, my preferred burn-in tool of choice has been the Phoronix Test Suite (PTS), a free and open source hardware benchmarking tool created by Michael “Phoronix” Larabel for his technology blog. PTS is developed specifically with Linux users in mind (although it works great on many other OSes as well), and so I gave a presentation on it to the Philadelphia Linux Users Group (West) in Malvern, PA this past July. After going through my slideshow (linked below) I did a live demo of the tool for the group measuring hardware performance for SSL encryption, using the PTS web front end “Phoromatic” to automatically benchmark SSL performance on six different machines simultaneously in my home lab.
2019 marks 20 years since I first installed Linux on a computer I owned. It went from being just a hobby of mine to something I’ve structured much of my entire professional career around. This is the chronology of my “main” Linux distribution throughout that time.
1999-2001: Red Hat 6 – I got a copy of Jon “maddog” Hall’s book, “Linux for Dummies” in 1999. It came with install media for Red Hat 6 on CD-ROM in an envelope in the back of the book. True to its promise, maddog’s book successfully improved me from someone who knew nothing at all about Linux to someone who was a dummy about Linux, a status I cheerfully maintained for several years. I installed Red Hat 6 on a beat up old Cyrix 133 (Pentium clone) and remember struggling a great deal with it to make it even remotely usable. After a few months I kind of “gave up” for a while and just dual booted with Windows 98.
2001-2005: Mandrake 7 – this was my first “daily driver” Linux distro. I had it installed on a Dell Optiplex Pentium II desktop. Mandrake was developed in France and specifically targeted to Linux dummies like myself for ease of installation. I remember really liking the KDE 2 desktop and endlessly customizing it with all kinds of strange fonts. I also remember really liking that Ethernet worked flawlessly without any additional configuration.
2005-2011: Ubuntu – By 2005 I was living by myself and making OK money so it was time for my computer hobby to really pick up steam. I got into AMD processors (Intel was kind of stagnant in ’05 with a weak Pentium 4 lineup) and when it came time to pick a Linux distro for my shiny new AMD 64 I saw that all of the “easy to install” crowd were moving over to Ubuntu. I installed Ubuntu on several desktops as well as doing my first ever laptop Linux install. I do remember some issues with laptop WiFi polluting what would have been otherwise perfect memories of Ubuntu, but after many long hours chipping away at the infamous NDISwrapper I finally got where I needed to be and all was well for a couple years.
2011-2017: Mint– in 2010, Ubuntu introduced its Unity desktop in version 10.10 which I tried very hard to like, but in vain. I quickly found out that I was not alone and that an entire distro, Mint, had seemingly magically appeared with its “Cinnamon” desktop to let us turn back the clock to 2008 again. That it was 99% compatible with Ubuntu was merely the icing on top. Mint has the distinction of being the first Linux distro I ever used at work. As my job in 2013 slowly moved toward more and more responsibilities with Linux servers, I had some leeway with my job at the time to use it on my personal workstation as well (though not without some curious stares and even a few sneers from coworkers).
2018: Manjaro and Solus – Like Ubuntu before it, Mint released a poor version (Mint 19), which caused me to distro-hop again for the first time in six years. This time, there was no clear obvious choice, so it wasn’t just hopping, it was shopping. For a while in 2018, it seemed like Solus, with its incredibly slick Budgie desktop, was the way to go, but it didn’t have enough apps and packages to totally work for me. So I moved to Manjaro later in the year, after an install on one of my gaming rigs went incredibly well, but then I began having hardware detection issues on some other installs so I had to keep looking.
2019: Fedora – as of 2019, my current distro of choice is Fedora 30. Seems a bit odd to loop back to a *very* distant descendant of my first distro 20 years later, but here we are. However, to make Fedora 30 fit my peculiar tastes these days, I have to do two major customizations: 1) Add the RPMFusion repo for all the non-free goodies the purists hate, and 2) Swap out the annoying, sluggish Wayland-based stock GNOME desktop with the snappy, familiar, X11-based Cinnamon desktop from my Mint days. Even though I don’t use Mint anymore I still love their desktop!
On Saturday, August 17, 2019, I spoke at FOSSCON 2019 at the International House in Philadelphia. FOSSCON is the Free and Open Source Software (FOSS) conference that has taken place in the city for over 10 years. The presentation I gave was on “Afforable Gaming on Linux”, an adaptation and revision of a talk I originally gave at the Philadelphia Linux Users Group – West (PLUG West) meeting in May 2019.
The presentation consists of 33 slides detailing how I built a living room “entertainment center” PC that’s good for light gaming and streaming video. I installed Manjaro Linux on the PC due to its superior support (at the time of construction) of my PC’s hardware. If I had to do it again today I might choose Fedora (my current top distro of choice) but I won’t be reimaging this box any time soon, it’s going to be running Manjaro for a long time.
Depending on how active this blog is, I plan on updating/modifying the content of the posts here as time goes by. Some of the items (such as configs I post) might even be useful to me for personal reference at future points in time – if they’re especially useful I might post them as GitHub repos or gists, but this blog also seems like a good “holding area” for scripts/configs that are “not quite ready for prime time”.