I always enjoy looking at what other people use to get their work done, or what they use for their hobbies. With that in mind, I decided to write the kind of post I like reading!

This is going to cover: -

  • My desktops
  • My laptops
  • My peripherals
  • My network and server setup
  • Audio
  • Applications/workflow
  • A few bonus parts too

Rooms

I am very lucky in that I have two rooms to use for my setup. I am very aware of the fact that not everyone has this luxury, so I do not take it for granted.

The first is my office. This was classed as a bedroom (from a legal standpoint) when we purchased the house, but it could barely fit a single bed in. Recently though, thanks to some work we did on our house last year, the room is much larger. This work also happened to finish within a day of the UK going into lockdown for the first time. This was lucky as I effectively became a remote employee from that day onwards. I have since changed jobs, meaning I will now work remotely on a permanent basis.

The second is what we refer to as my music room. The room is quite small, but is enough to fit in my desk, guitar equipment and guitars. It is where I do podcasting, playing guitar, and also playing games with my son.

The separation is nice, as it allows me to focus entirely on my work when I am in my office, while also allowing me to shut the door on it when the day is done. It also gives a dedicated space for “play”, in that when I go into the music room, I don’t feel the need or urge to check up on work or anything similar.

Pictures

Office Office setup

Music Room Music room setup

Naming conventions

All of my computers are named after metal or rock bands. I used to name them after Greek gods or science fiction-related names, but I would end up either forgetting which was which or run out of usable names that were memorable.

Naming them after bands I like makes them easy to remember and personally relevant.

Because of this, I’m going to add a link to band each is named after when referring to the computers. A little bonus for those who want to hear lots of notes and/or shouty music!

Desktops

As of 2021, I have two desktop computers (one in the office, one in the music room).

Behemoth

Music Link: Behemoth

Appropriately named due to the specifications of this machine, I put together this machine in September 2020 after not building a machine in nearly a decade. As you’ll see later on, I have only quite recently moved my workflow mostly away from MacOS to Linux, hence not building a machine for so long.

This machine is my primary desktop in my office.

The specs are: -

  • AMD Ryzen 3900X (12 cores, 24 threads)
  • 64Gb of Corsair DDR4-3200Mhz RAM
  • NVIDIA GTX1660 Super GPU
  • Samsung 970 EVO Plus 1TB NVME drive (Mounted as /)
  • Crucial BX500 1TB SSD (Mounted as /var)
  • Western Digital Blue 4TB spinning rust drive (Mounted as /home/$MY-USER/Store)
  • Chelsio CC2-S310E-CR 10Gb SFP+ NIC
  • Intel AX200 802.11ax WiFi and Bluetooth 5.0 PCIe card
  • ASUS X570-P ATX Motherboard
  • Corsair RM650x PSU
  • Noctua NH-D15 CPU cooler
  • Fractal Design Meshify S2 Mid Tower case

This is running on Manjaro i3 edition.

I previously ran the Western Digital Blue drive as /home, but this drive is not quick. Most actions (including opening a terminal to my home directory) involved waiting for the drive to spin up. While the idea of having lots of storage for /home was nice, the speed penalty wasn’t worth it. Instead I now use it for larger directories (eg music, games, photos) and the NVME drive for nearly everything else.

I also run the Crucial SSD (SATA SSD, not NVME) for the /var directory. The reason for this is because both KVM/libvirt (for virtual machines) and containers (either Docker, Podman, CRI-O or otherwise) both use directories in /var for storage. This machine serves a dual purpose of being my primary personal desktop, as well as where I run most of my labs (that contribute to the other posts on this site). Having a dedicated SSD for this means that the lab machines start and run quick, without impacting other storage. My recent series on running a Kubernetes cluster with Windows and Linux used this machine, and the workers (even the Windows ones) started in seconds.

I also use a 10Gb SFP+ NIC, with multimode fibre to my core switch. Other than my router, nothing else I own runs 10Gb as of yet so this is more of a luxury for now, but in the future I intend to move as much as I can over to 10Gb (or at least multigigabit) networking.

Pictures and screenshots

Behemoth Desktop

Behemoth Screenshot

Behemoth Terminal

Symphony X

Music Link: Symphony X - Inferno (Unleash The Fire)

This machine was originally acquired for labbing and testing purposes, as my other machines at the time were all laptops (and hence burning my knees when running multiple VMs) or providing services in my home (DNS, DHCP, Prometheus, Plex etc). However since putting Behemoth together, I no longer needed a dedicated labbing machine.

Instead, this is now the main computer in my music room, replacing Pink Floyd.

The machine is a Dell Optiplex 3020 SFF, with the following specs: -

  • Intel i5-4570 (4 cores, 4 threads)
  • 16Gb of RAM
  • NVIDIA GeForce GT1030 GPU
  • 256Gb SSD (Mounted as /)
  • 480Gb spinning rust drive (Mounted as /home)

This machine is runs Ubuntu MATE 20.10, using the Pantheon layout, Yaru icons and Yaru theme. There is work on Ubuntu MATE having official Yaru theme support in future, so I won’t need to do this myself in future.

I added the RAM when I used the machine for labbing, and then the SSD and GPU when I turned it into a desktop machine. It’s primary use is for podcasting, a little video editing, and playing Minecraft, SuperTuxKart and Hotshot Racing with my son. I have yet to do much in the way of music recording with it, but I intend to at least get it functional for this purpose.

I am aiming to replace this machine at some point in the future with something more powerful and upgradable (currently limited to 16Gb of RAM and two PCIe slots), but right now it serves what I use it for with no issues or slowdown at all.

I also recently purchased a 10G SFP+ NIC for this machine, but unfortunately I made the error in not checking if I had any free PCIe slots that could handle it. The only slot it will work in is already taken up by the GT1030! At least when I decide to replace the machine, I’ll have a 10G NIC available…

Pictures and screenshots

Symphony X Desktop

Symphony X Screenshot

Symphony X Terminal

Dream Theater

Music Link: Dream Theater - Count Of Tuscany

Dream Theater is a Raspberry Pi 4 (4Gb model). This used to host Nextcloud (with a couple of SSDs attached), however it is in the process of being turned into an ARM64-based workstation, with a USB-attached SSD. While it may not be up to something like an Apple M1, Graviton2 or Ampere Altra, it will be useful to test the ARM64 ecosystem for my workflow.

Laptops

I currently own 3 laptops (not including my work-provided machine): -

Laptops

Deep Purple

Music Link: Deep Purple - Burn (Live 1974)

Deep Purple is a 2015 Apple Macbook Pro, which up until last September was the most powerful machine I owned. I am a bit of a recovering Mac addict, having used Linux daily for nearly 15 years, but only in the past 2-3 years have I transitioned to Linux being my primary desktop operating system.

When I was more focussed on music and audio, Macs made a lot of sense. I don’t record anywhere near the amount of music I used to though, so staying in the Mac ecosystem made less and less sense, especially given how much easier I find developing and my day-to-day responsibilities using Linux.

If I do get back into recording music on a more consistent basis, I may still end up with a Mac again (mainly for plugin/virtual instrument availability), but right now my need is low for anything in the Apple ecosystem.

The specs of this laptop are: -

  • Intel i7-4470HQ (4 cores, 8 threads)
  • 16Gb of RAM
  • Intel Iris Pro GPU
  • 256Gb PCIe SSD
  • 15” Retina Display

Pictures and screenshots

Deep Purple Screenshot

Deep Purple Terminal

Meshuggah

Music Link: Meshuggah - New Millenium Cyanide Christ

Meshuggah is a 2011 Lenovo Thinkpad X220. This machine was acquired when I fell into the /r/thinkpad rabbithole a few years ago while wanting a machine to run Linux on.

After going through a number of different distributions (Arch, Ubuntu MATE, KDE Neon), I didn’t use it for about a year or so. I revived it as my homeserver for over a year.

The primary reason for using the X220 as a server over the previous setup of a couple of Raspberry Pis was because I wanted to learn more about Prometheus. To do so, I wanted a machine I could run VMs and containers on for testing purposes. This is all detailed in this post I made towards the end of 2019.

In late 2020, with my move to using Symphony X as my main music room machine, I retired Pink Floyd. Pink Floyd then replaced Meshuggah as one of my home servers (as it is more powerful and with faster storage).

Meshuggah has now become my distribution testing laptop again, currently running GhostBSD (a Desktop spin of FreeBSD).

The specs for this laptop are: -

  • Intel i5-2420M (2 cores, 4 threads)
  • 16Gb of RAM
  • 256Gb SSD
  • Inbuilt Intel GPU
  • 13” display

Pictures and screenshots

Meshuggah Screenshot

Meshuggah Terminal

Haken

Music Link: Haken - 1985

Haken is a 2012 HP Elitebook 9470m. This machine was given to me by my old workplace, as it was destined for eWaste. I wanted a machine for testing Linux/BSD on, and at the time Meshuggah was still in place as my homeserver.

Currently this machine runs Ubuntu 20.10 (Using GNOME rather than MATE) and also dual-boots to OpenBSD (using i3). I am still working on the OpenBSD install, but overall it is a very pleasant experience.

The specs for thie laptop are: -

  • Intel i7-3687u (2 cores, 4 threads)
  • 16Gb of RAM
  • 240Gb SSD
  • Inbuilt Intel GPU
  • 14” Display

Pictures and screenshots

Ubuntu Haken Ubuntu Screenshot

Haken Ubuntu Terminal

OpenBSD Haken OpenBSD Screenshot

Haken OpenBSD Terminal

Peripherals

The peripherals in my office can be seen below: -

Office Peripherals

The peripherals in the music room can be seen below: -

Music Room Peripherals

Monitors

As can be seen in the Rooms section of this post, I run dual monitors in both setups.

Office

In the office I have a Dell P3421W 34” ultrawide display. This also functions as my KVM switch. All my other peripherals (keyboard, mice, audio interface, card reader, webcam) connect to it via USB.

When I switch between inputs, it also switches the USB peripherals over to the computer being displayed. This is normally either my personal desktop and my work laptop (via a USB-C dock). When I replace my main laptop later this year, it will also use the USB-C dock (or the dock will be replaced with a Thunderbolt dock) and hence be integrated into this setup.

I also have a Dell P2419H 1080p display in portrait mode, mainly for when I’m working in the terminal (which is most of the time!).

They are both mounted on a dual monitor arm rather than using the provided stands. I can adjust them to the correct height, layout, and also have more space on my desk for computers and peripherals.

Office Monitors

Music Room

In the music room I have two AOC E2460SH 1080p displays. I have owned these displays for around 6 years now and they have served me well. I previously ran three of them in my office (prior to the two Dell monitors), with one in the music room. Now I am back to two monitors in the music room, and two spare monitors that will be used for something someday…

The monitors are mounted on a vertical dual monitor stand. They are mounted above each other, rather than next to each other, making the best use of space in the music room. The desk isn’t quite big enough to have them side-by-side (along with the other peripherals and audio equipment), so this is the best compromise for now.

Music Room Monitors

Keyboards

Around 2016 I got bitten by the mechanical keyboard bug. Another I can blame on Reddit. Previously I was happy with any keyboard, but now membrane/rubber dome keyboards feel oddly squishy to me. It was probably better when I never knew the difference!

My main keyboard in the office is a ZSA Moonlander with Cherry MX Brown switches, which I purchased at the end of 2020. I am still getting used to it, but I love the split design and the linear keys (rather than being staggered like on a standard keyboard). I can also customize every single key (which I have done several times). Now I don’t need to get used to a layout, instead being able to make it exactly as I want.

ZSA Moonlander

My main keyboard in the music room is a Vortex Pok3r, also with Cherry MX Browns. This was my first mechanical keyboard and has held up very well since I bought it. I don’t use the layer functionality much, but it is nice for those who require it. The Caps Lock key has been changed to work as a Fn key, as I never use Caps Lock anyway.

Vortex Pok3r

I also own an original IBM Model M keyboard, and a USB to SDL cable so that it can be plugged in to modern devices. Currently it isn’t part of any setup, but I am hoping to rejig the layout in the rooms at some point to accomodate the Model M, as it is a wonderful (and LOUD) keyboard to type on.

Model M

Finally, I have a Drevo Calibur V2 65% keyboard with Cherry MX Red clone (Outemu) switches. This was my main keyboard in my office before replacing it with the Moonlander. It is a very nice keyboard, especially for the price, but right now it isn’t used for anything.

Drevo Calibur

I have given away three keyboards recently as well. I had acquired quite a few over the years, namely a Noppoo Spyder, Aukey KM-G9 and a Magicforce 68. It is quite easy to get hooked into mechanical keyboards and getting new ones (especially when trying out different switches/options), so I had accumulated way more than I would ever need!

Mice

I prefer trackballs over traditional mice. They help with avoiding strain in my arms and wrists when using computers for long periods. I also have a preference toward trackballs that have the ball on the top rather than at the side (i.e. controlled with fingers rather than just the thumb). I found those with trackballs under the thumb eventually led to strain anyway, whereas I get no strain at all using the “top”-style trackballs.

In my office I use the Elecom M-HT1DRBK, also known as the Elecom Huge. The entire mouse serves as a hand/wrist wrest, and the size works for me as I have large hands. It doesn’t feel as premium as some mice I have used, but the shape and functionality makes it worth it for me.

In my music room I use a Kensington Expert Wired trackball. This is a really nice trackball, and will probably last for years. This used to be my main office mouse, but the Elecom Huge replaced it as the shape works a little better for me.

I recently purcased a Microsoft Intellimouse Pro for my office. The primary reason is that Behemoth is a very capable gaming machine, and for the few occassions I want to play an FPS game (eg Quake 3 Arena, Unreal Tournament, Xonotic, Unvanquished, Prodeus) I find trackballs are not well suited. The Intellimouse is essentially a gaming mouse in a non-flashy case, and is large enough for my hands too.

I also have a couple of Kensington Orbit mice (that the Expert and Huge superceded), as well as a few thumb-style trackballs (Logitech MX570, Speedlink Aptico, Elecom M-XT3URBK). I use the Kensington Orbits when I need to use a mouse with a laptop, but otherwise the rest are side-effects of trying to find the right mouse.

My network and server setup

Home Rack

Wired Networking

I spent many years as a Network Engineer, so I have a tendency towards equipment that is command-line driven and very flexible. The network has multiple VLANs, 802.1x-based Wireless (to assign the correct VLAN based upon the client connectint) and can support BGP and OSPF if I chose to enable it (I’m just looking for the right excuse!).

The brains of the network is the MikroTik RB4011. The router my ISP (Virgin Media) provides runs in bridge mode, with the MikroTik receiving the public IP from the ISP via DHCP. This is rather than sitting behind NAT from the ISP-provided router (meaning I would need to double NAT everything for traffic to flow back through the router).

The MikroTik has 10 1G ports and a single 10G SFP+ port. One of the 1G ports connects to my core switch, serving as the “WAN” (i.e. the logical link to the ISP-provided router), and the 10G SFP+ port is connected by a Direct Attach Copper (DAC) cable to the same switch as the “LAN”, carrying all inter-VLAN traffic.

The default gateway for each VLAN is on the MikroTik router, so all traffic that routes between VLANs, as well as to the internet traverses this device.

The core switch is an FS S3900-24T4S. This is a fanless switch with 24 1G ports and 4 10G SFP+ ports. The command line interface is similar enough to Cisco that I can do most configuration on it without referring to the manual (most of my network career was managing Cisco devices, so this is very familiar territory for me!). One of the 10G ports connects to the MikroTik RB4011 router, and another connects to Behemoth (using multimode fibre and 10G SFP+ fibre tranceivers). I intend to add more 10G devices, at the moment it is just so that I can see a 10G link on ethtool!

I also have two ZyXEL GS1900-8 switches, one in the music room and one in the living room. The music room switch is to connect the equipment in there, whereas the one in the living room is mostly to connect the ISP-provided router and one of my wireless access points. Both of these are connected using 1G copper cabling.

I intend to run the cabling between rooms at 10G at some point in the future, but for now 1G is more than enough for each. The switches are basic, but do have VLAN functionality and SNMP so I can monitor them.

Wireless Networking

For Wireless I use two Unifi UAP-AC-LR access points. While they only support 802.11ac rather than 802.11ax, they provide more than enough connectivity for any wireless device in my home.

I run the Unifi controller in a Docker container rather than a Cloud Key. I also run multiple SSIDs, mostly because not all devices support 802.1x (particularly games consoles), and also to provide a guest network for people visting (although 2020 has stopped that from happening!).

When the time comes to do a refresh on my Wireless setup, I am in two minds as to whether I will stick with Ubiquiti or not. Some of the recent moves in terms of data privacy and removing features gives me cause for concern, but I haven’t found anything else at the right price point as of yet. I would gladly use Aruba or Ruckus access points, but they are a little pricey for what is mostly phones, tablets and laptops in this house.

VLANs

I run multiple VLANs to keep my network segregated, allowing me to limit what hosts in each VLAN can access: -

  • VLAN1: Management
    • Purpose: Management of physical hardware (servers, access points, switches, routers)
  • VLAN2:
    • Purpose: Standard Users
    • Access: Allowed internet access and also to reach the IOT VLAN
  • VLAN3:
    • Purpose: IOT - Any device that is not a computer that has internet access, eg TVs, games consoles, Chromecasts, Rokus etc
    • Access: Can reach the internet, and DHCP/DNS in the server VLAN. Can receive traffic from other VLANs (except guest)
  • VLAN4:
    • Purpose: Guest - People visting or device testing/install (when no other access required)
    • Access: Completely separate from the rest of the network, doesn’t use internal DNS servers, can only reach the internet
  • VLAN5:
    • Purpose: Engineer Users - Basically me!
    • Access: Full access to everything
  • VLAN10:
    • Purpose: Servers - All virtual machines are in this range
    • Access: Access to most VLANs (due to monitoring/management)
  • VLAN30:
    • Purpose: Lab - Labbing and testing
    • Access: Separate VLAN for testing/labbing, no DNS and DHCP running (as I may be testing DNS and DHCP servers)
  • VLAN999:
    • Purpose: Bridge - The VLAN bridge between the ISP router and the MikroTik
    • Access: Layer 2 only, not routed, used due to the ISP router and the MikroTik being in different rooms (otherwise it would be plugged in directlyi to the MikroTik)

While this may seem overkill, it does allow me to restrict what devices can talk to what, while also still providing enough connectivity where required. Also, given my Network Engineering background, I may have a bit of a tendency to overengineer the network sometimes!

Servers

While I don’t run a rack full of Dell/HP/Supermicro servers at home, I do have a few capable machines that run all the infrastructure I currently need.

Archspire

Music Link: Archspire - Relentless Mutation

One of the servers is an Intel NUC NUC6i5SYH with an Intel i5-6260U, 16Gb of RAM and a 256Gb internal NVME drive. I also have a Western Digital My Book 10Tb drive connected to it for backups, Plex and basic NAS functionality. This server runs Debian Buster. It has a mixture of virtual machines (running on KVM), containers (running in Docker) and native applications (Plex and Syncthing). The 10Tb drive is also exposed via Samba and NFS, allowing direct disk access from machines in my network.

The virtual machines on this server are: -

  • netutil-01 (Debian Buster) - Running a TFTP server, the Unifi controller, NetBox (for IPAM) and Oxidized for network config backups
  • auth-01 (Debian Buster) - Running RADIUS for the 802.1x wireless authentication
  • ns-04 (Debian Buster) - DNS and DHCP using BIND9, PiHole (for ad blocking) and isc-dhcp-server
  • bastion-01 (OpenBSD) - A bastion machine for external SSH access
  • mdns-01 (Alpine) - An MDNS repeater to allow hosts on the engineers or users VLANs to “cast” to the streaming devices in our network
    • Most streaming devices (Chromecast, Roku, FireTV) expect a single subnet, at which point they do not cross VLAN boundaries. Using the mDNS repeater allows other VLANs to see the devices and cast without an issue.
  • db-02 (Ubuntu 20.04) - The secondary for MySQL (for RADIUS and Nextcloud) and PostgreSQL (for Netbox)
  • config-01 (Debian Buster) - This is where all of the Ansible Playbooks run from, and is also the Salt Master for my infrastructure (all servers and VMs run the Salt Minion)

It also runs the following containers: -

  • Statping (for service status)
  • Airsonic (to share my music collection)
  • Traefik (for routing HTTP requests)
  • cadvisor (for container metrics in Prometheus)
  • promtail (for logs to Grafana’s Loki)

This connects directly to the core switch in the office at 1Gb. I recently experimented with using a USB-connected 1G NIC to bond 2x1G ports with LACP, but it appears my VLAN configuration and bonding didn’t work well together. I will probably rework this at some point to fix this.

This also runs: -

  • Plex (for media)
  • Syncthing (for internal file syncing)

Archspire

Pink Floyd

Music Link: Pink Floyd - High Hopes

The other server is a 2012 Mac Mini with an Intel i7-3615QM, 16Gb of RAM and a 1Tb internal SSD drive. This machine used to be my main desktop workstation in the music room, originally MacOS only (technically OS X, as the name change hadn’t happened yet when I bought this machine). Around a year ago I installed Ubuntu MATE on it alongside MacOS, allowing me to get my Linux workflow for podcasting how I wanted it.

When Symphony X became superfluous for labbing purposes, I decided to make that my music room workstation, replace MacOS entirely with Debian Buster (as I could no longer install the latest MacOS anyway) on the Mac Mini and move all of the virtual machines, containers and other applications from Meshuggah to Pink Floyd

Despite not being much higher in CPU generation, the machine being an i7 (with 4 cores and 8 threads) compared to Meshuggah’s i5 (with 2 cores and 4 threads) and the much better SSD (Samsung EVO compared to Kingspec) made all the machines and containers much more performant. This also meant I could run Nextcloud on here as well (with the additional storage capacity and speed available) without taxing the machine too much. Previously Nextcloud was running on Dream Theater (a Raspberry Pi 4), whereas now it doesn’t require a dedicated device.

The virtual machines on this server are: -

  • auth-02 (Debian Buster) - Secondary RADIUS server, in the evnt that auth-01 fails
  • db-01 (Ubuntu 20.04) - Primary MySQL and PostgreSQL server
  • git-01 (Alpine) - Runs Gitea, for my internal repositories
  • ns-03 (Ubuntu 20.04) - The backup DNS and DHCP server
  • vpn-01 (Debian Buster) - Wireguard VPN server for external VPN access to my network
  • gitlab-01 (Ubuntu 20.04) - Running Gitlab, will eventually replace git-01

It also hosts the following containers: -

  • Grafana (monitoring dashboard)
  • Traefik
  • cadvisor
  • promtail

In addition, this machine also runs: -

  • Nextcloud (replaced Dropbox)
  • Prometheus (Monitoring my infrastructure)

Pink Floyd

Monitoring and management

As you may have seen if you follow my articles, I love Prometheus. Each server and virtual machine has the Prometheus node_exporter installed to get retrieve CPU, memory, storage and network statistics. I also run a number of other exporters for various applications including: -

  • blackbox_exporter - For a number of black box style metrics (i.e. ICMP, HTTP, DNS, TCP checks on external services)
    • I also use the TCP checks for streaming devices (Roku and Chromecast) to monitor their availability
  • cadvisor - For container metrics (network, storage, CPU etc)
  • dhcp_exporter - For metrics on DHCP leases
  • libvirt_exporter - For metrics on my virtual machines
  • mikrotik_exporter - For metrics from my MikroTik RB4011 router
  • mysql_exporter - Metrics from the database servers
  • named_exporter - Metrics from the BIND servers
  • nextcloud_exporter - Metrics from Nextcloud on Pink Floyd
  • pihole_exporter - Metrics on blocked/allowed domains
  • plex_exporter - Plex-based metrics (active watchers, size of collection etc)
  • postgres_exporter - PostgreSQL metrics from the database servers
  • redis_exporter - For Redis metrics (used by both Nextcloud and Netbox)
  • snmp_exporter - For monitoring my core switch and the two ZyXEL switches
  • wireguard_exporter - For monitoring my VPNs to and from the network

The Prometheus configuration itself is quite small, as I also use Hashicorp’s Consul for service discovery. This means that rather than statically configuring all of the exporters and what machine they run on, the machines themselves register with Consul, and inform the Consul servers what services they are running. I cover this in a bit more detail here

All of the services, exporters, Consul configuration, DNS/DHCP configuration, SSH key management and more are managed with a mixture of Ansible and Saltstack. I run both mainly because I like both tools, and like to keep fresh on both. Saltstack has a speed advantage once it is up and running (in my experience) but Ansible is quicker to start using straight away.

I also run Prometheus’s Alertmanager, with most of the alerts being sent to a Slack channel on a personal Slack instance. Nobody else but me uses it, so I never have to worry about losing history (or at least not for a long time anyway). I am tempted to move this to Discord or Matrix, but no native integrations exist for these as of yet.

I also use some alerts in Grafana, but have gradually moved them over to Alertmanager, as it is much more flexible at defining thresholds, conditions, complex queries and conditions.

The whys

There are a few questions I would expect to be asked of this setup: -

  1. Why do you run so many different virtual machines?
  2. Why do you run some in containers, some in virtual machines, and some natively on the servers?
  3. Why do you need a monitoring system for all of this?
  4. Why bother with all of this?

Why so many VMs?

To answer the first, there are a few reasons. The primary reason, if I’m being realistic, is because trying to learn something like Prometheus, Consul, Saltstack, Ansible or anything else with only a machine or two doesn’t teach you as much as trying to run it on many machines. The infrastructure is as much as about learning as it is about providing services for my home.

For similar reasons, I run different operating systems (Debian, Ubuntu, OpenBSD and Alpine) because it means that my Ansible and Saltstack configuration needs to cater to different systems (rather than being tailored to one, and never working on anything else).

I also do appreciate the lightness of Alpine when it makes sense, Ubuntu for the software availability, Debian for the stability and OpenBSD for the wonderful documentation and focus on security/networking. I can choose the system which works best for the purpose, rather than trying to make a certain system fit where it doesn’t quite match up.

Containers, VMs, native processes?

The reason for this is because some of the software is packaged as containers (eg Grafana), and updating is really straightforward. I rarely, if ever need to change the running configuration of Grafana, so running it in a container works really well.

Something like Ansible or Saltstack though is well suited to being on a virtual machine I can login to. I could setup a CI/CD pipeline to roll out changes, but that is probably a step too far for my infrastructure. Logging in to the virtual machine to update my Playbooks/States is a good compromise here.

For native processes, Prometheus especially makes a lot of sense not being a virtual machine, as if for some reason my virtualization fails (due to configuration changes or otherwise), then the monitoring carries on functioning (and bombarding me with notifications to fix it!).

Eventually I aim to move to some form of container orchestration (Kubernetes, K3S or similar), but this is a long term goal rather than anything I will be doing soon.

Why a monitoring system?

Originally, it was because one of the streaming devices in the house was dropping off the networ regularly but I couldn’t narrow down the issue (see here). Eventually it became apparent that there were issues with using Powerline adapters (random dropouts) and the location was a bit of a wireless deadspot. The move to Unifi Access Points solved these issues.

In the process though, I fell in love with Prometheus as a technology, and decided to keep it. Any time I find out something new about Prometheus, I can improve my home setup as well.

In short, the answer is “Because I can” 😁

Why bother?

Similar to the previous, none of this is required, I just enjoy it. There is always something to learn. Also there is no SLA better than your own family for making you fix the issues you just caused when trying something out new…

I’ve learned a lot about Prometheus, Consul, Ansible and Saltstack with all of this, which is worth it for me. Is it for everyone? Not at all. Is it for me? Definitely.

Audio

As mentioned previously on this site, I have some background in Sound Engineering/Music Technology. It never became my career, but it did mean that when it came to starting with Podcasting, I wasn’t starting fresh.

In my music room, I have a Behringer UMC404HD audio interface, a Rode NT1-A microphone and a Rode PSA1 boom arm for the microphone. I use a set of Audio Technica M50x over-ear headphones for monitoring the podcasts (and just general listening). I also have a Onkyo A-9155 amplifier and Mission MX-1 speakers for when I want to play something at volume too.

When I’m podcasting, this is generally what I’m seeing: -

Rode NT1-A

In my office, I have a Focusrite Scarlett 2i2 audio interface, a Pyle PDMIC78 microphone (a Shure SM57 clone) and a generic boom arm. The boom arm used to be in my music room, but the weight of the NT1-A meant that it would slowly drop to my desk during recording. The Pyle microphone is much lighter, meaning no such problems. I also have a set of Beyerdynamic DT100 headphones that I have had for 15 years for monitoring audio via this interface. Finally, I have a set of Edifier R1850DB speakers for when I want something loud to listen to when working/coding/labbing/gaming.

Last but not least, I have a Jabra Evolve2 65 Wireless Headset for work calls and music when I’m not the only person in the house.

Applications and workflow

A lot of my work is based arond the terminal and CLI applications. While I am not immune to a a good GUI experience (hence why I used MacOS for so many years), I still tend to prefer working in the terminal for most of what I do.

Shell

I use zsh, with powerlevel10k as a theme on workstations (as seen in the Desktops/Laptops sections) and gianu on servers (example here). I use different themes just to give myself some visual separation in terms of what I am working on (i.e. my local machine or a server/virtual machine).

I prefer zsh over bash mainly because of the syntax highlighting, history substring search (i.e. type the first part of a command and you will be given options from your history for completion) and autocompletions (especially useful for git, kubectl, terraform etc). I find zsh is close enough to bash that a lot of my quick awk, sed, for and xargs one-liners work without issue (mainly for quick text/output manipulation). I previously used the fish shell, but the difference between native bash and fish caused a lot of errors with my one-liners.

For the terminal itself, I use either termite when on i3 (although I am evaluating alacritty right now), the standard MATE terminal when on Ubuntu MATE, and iTerm when on MacOS.

Text editor

I use vim for nearly all of my text editing (including writing the articles on this site). One of my first jobs in tech (around 12 years ago) required editing files on machines with SCO or HP-UX Unix, and only had vi on them (no nano or anything similar). This required learning some of the vi commands quickly, as otherwise I wouldn’t have been able to do my job. Since then, I have found that I can move around, replace text, jump to different parts of files/lines and more far quicker than I can in anything else. That vi is installed on pretty much every system I manage also helps.

I customize my ViM experience with the following: -

  • airline - For a nice looking status bar
  • nerdtree - I don’t use it much, but it is nice have a directory structure when required
  • challenger-deep theme - I just like the way it looks!
  • vim-go - This does linting and syntax checking for Golang

ViM Setup

I am also experimenting with coc.nvim (see here) for syntax completion and linting. I currently use it with Golang, Python, YAML, Terraform, Markdown and Shell, while also using the Git extension to show Git status inside of files.

I do sparingly use Sublime Text and Visual Studio Code. I like Sublime Text for it being quick to start and having the last bit of text I wrote in it (useful for quick notes, or quickly copying and pasting configuration sections on network hardware), and I will sometimes use Visual Studio Code for quick previews/conversion to PDF of Markdown files. Besides that, almost my entire text/configuration/coding workflow is in ViM.

Dotfiles

My dotfiles were previously all managed with a Bash script, however it wasn’t very idempotent. Subsequent runs would create errors, and had no true checks for whether a file/application existed before trying to reinstall it. It catered for the following operating systems: -

  • Debian-based Linux distributions (Debian, Ubuntu, Raspbian)
  • RHEL-based (CentOS, Fedora, Amazon Linux)
  • Arch-based (Arch, Manjaro, Endeavour)
  • Clear Linux
  • Alpine Linux
  • Void Linux
  • OpenSUSE
  • OpenBSD
  • FreeBSD
  • Solaris/illumos
  • Darwin/MacOS

I am currently migrating this to use Ansible. A lot of the logic I put in place (distribution checking, packaging installs, templating, file downloads) can be covered with native Ansible modules, while also making it quite straightforward to add feature flags, additional modules, and idempotence.

Currently it works on all of the above operating systems except: -

  • Clear Linux - I use it so rarely that it doesn’t matter anyway
  • Void - The xbps package installs don’t seem to work correctly in Ansible right now
  • illumos - The support for package installs isn’t perfect
  • Darwin/MacOS - I’m moving away from MacOS so…

I intend to make at least Void work at some point, and maybe the others. However in reality as long as it works on Debian-based, RHEL-based, Arch-based, Alpine and Open/FreeBSD, I have covered most/all of the systems I run. The others are just more out of curiosity.

In the near future I will put an article together on this, including how to manage multiple user’s configurations.

Other shell applications

I use tmux from time to time, mostly when labbing. This is especially useful when managing network hardware. I don’t use it all the time (a lot of my work now is comitting to repositories and running CI jobs, or managing immutable infrastructure like containers), but for labbing it is wonderful.

I sometimes use the fish shell, mainly for labbing machines. This is so that the machine “feels” different (especially useful when replicating a production service!), but also has the syntax highlighting and history search that fish provides. If I installed zsh on every lab machine as well, I would find it too easy to forget I’m not on a lab machine and end up breaking something in my network!

I use a lot of the Hashicorp tools for work and labbing, especially Terraform. I also make a lot of use of Packer and Consul. I am starting to get into using Vault more (I may run my own Vault server at home, as secret management for labs is becoming unwieldy), and I am finally making use of Vagrant after years of not really having a use case for it. Putting together my Ansible-based Dotfiles playbooks has been so much easier using Vagrant to quickly spin up and check that they work, rather than having to have dedicated VMs running at all times.

I use Kubernetes and containers at work and at home, so the Kubernetes CLI tools and Docker are a must. I am looking to move away from Docker (to Podman and/or CRI-O), but for the moment Docker is where I am still at.

Finally, I also use a few other tools like the aws CLI (along with aws-mfa for two-factor authentication), bpytop (for a pretty system resource usage view) and the standard Linux/Unix toolset (awk, sed, xargs, cut, tr etc).

Desktop Environments

I tend to use two styles of desktop environment: -

  • Tiling window managers like i3 for machines that are either lower in resource requirements, or for high productivity
  • Standard desktop environments (Usually the MATE desktop) for machines that are used for “play” or “creative” workflows

For example, my main desktop uses i3 because while it serves as a gaming machine as well, the primary focus on it is my coding, labbing and infrastructure management. I find the i3 desktop very well suited to this, as it is very keyboard driven. I very rarely need to touch a mouse when using this machine (unless I’ve fired up The Longest Yard on Quake 3). Even in my early years with computers, I always used keyboard shortcuts rather than the mouse, so using i3 (and other tiling window managers like dwm) feels like a natural progression.

The desktop that is in my music room is centred around creative/play endeavours. This could be podcasting, playing games with son, playing guitar or some light video editing. This means that the speed of my workflow is less of a concern, and more about the ease of using it. While I do love the workflow that a tiling window manager provides, I find that it doesn’t translate as well (for me) to these use cases. Also if my son wants to do anything on the machine, I don’t want to have to give him an i3 cheat sheet to be able to start Minecraft!

I may be leaving MacOS, but I still do appreciate the ease of the workflow when it comes to audio and recording. Because of this, my “standard” desktop environment veers towards the MacOS/ElementaryOS style of a title bar at the top of the screen and a dock at the bottom. With Ubuntu MATE specifically, I use the Pantheon layout.

Other applications

The other applications I use on a GUI are: -

  • Firefox or Brave for a browser
    • I am stuck between the two, as Brave has better support across the web (due to the Chromium backend) but I prefer Firefox. Unfortunately I don’t know how much longer there will be a choice, so I am readying myself for the Chromium-based domination of all browsers.
  • Bitwarden for password management
  • Syncthing and Nextcloud for file synchronization
  • Wireguard for VPNs
  • Protonmail for email
  • Spotify for streaming music
    • I am still undecided on a desktop music player on Linux
  • Trello for task management
    • I would use something open source here, but I also have shared boards with family and friends so I’d need them to migrate too!
  • Backblaze for offsite backups, using rclone
  • Guitar Pro or TuxGuitar for writing/reading guitar tabs and music
  • Reaper or Ardour for recording music
  • Audacity and Mumble for podcasting
  • KDEnlive for video editing

Why Syncthing and Nextcloud?

I use both Syncthing and Nextcloud for slighty different purposes.

Syncthing is used to synchronize directories between my machines (eg using the same Downloads/Documents/Pictures/Podcasts/Music/Video folders across all machines), meaning if I download something on one machine, it appears on all others I’m syncing with. The same is true of videos I edit, pictures and temporary text files that I’m working with (command output that I’m manipulating, configuration files I’m working with etc). This is a trick I picked up from Jay Lacroix of LearnLinux.tv and means I don’t need to work out which machine I downloaded a file on, or edited a file on or similar.

For Nextcloud, I use it the way I used to use Dropbox, which is just an easy way to access files on multiple devices (i.e. phones, tablets, laptops) and also for easy sharing with other people. Syncthing could be used for this, but I previously used Dropbox for so many years that the workflow is still imprinted on my brain!

Musical instruments

For those who came for the tech and computers, this section is probably not of interest. However I enjoy playing guitar (and other instruments) as much as I like tech, so it felt right to include it all in here too.

My twenties were almost entirely defined by guitars, bands and playing gigs, tech was just what paid for it all!

Guitars

My favourite music to play is metal (mainly progressive, tech death or death metal) so you’ll notice most of my guitars are geared towards that. I also prefer extended range instruments (particularly 7 string guitars) as they fit with my writing style better. For over a decade I didn’t own a 6 string guitar (until a few years ago).

ESP/LTD M207

Bought: 2002
Tuned: BEADGBE Pickups: Bridge - Entwistle Dark Star, Neck - Stock Duncan Designed

This was my first 7 string guitar, bought within my first year of playing. Strange to think I’ve had this for nearly two decades!

I have upgraded it a lot over time, with new pickups (it had a Bareknuckle Nailbomb in at one stage as well), new tremolo, new tuners, pickup switcher and all of the electronics. However the body, neck and neck pickup are still the same.

ESP/LTD M207

Jackson Rhoads RR7R

Bought: 2008
Tuned: Not tuned currently….
Pickups: Warman Deadly Sinners

This was my second 7 string, and started the path to me getting rid of all my 6 string guitars and become 7+ string only for a decade.

Unfortunately this guitar has been through a lot, with part of the headstock getting snapped off (fixed back together, but still a shame). Around 5-6 years ago, I removed all of the electronics, pickups and strings ready to overhaul the guitar, but time constraints, shifting priorities and house moves stopped that.

Ever since, it has unfortunately been left in it’s current state. I do intend to get back to sorting the electronics and restorting it to it’s former glory, I just don’t know when!

Jackson RR7R

Ibanez Xiphos XPT707

Bought: 2011
Tuned: BEADGBE Pickups: Dimarzio D-Activators (Bridge and Neck)

This guitar was purchased from a friend, who had also purchased it from another friend.

This became my main guitar in both bands I was in at the time, and is an absolute monster. The sound is huge, and it was because of this guitar that I ended up putting Dimarzio D-Activators in a lot of my other guitars too.

Other than adding straplocks, I have done nothing but change strings and clean it. Wonderful guitar.

Ibanez Xiphos XPT707

BC Rich Stealth 7 (Marc Rizzo signature)

Bought: 2012
Tuned: ADGCFAD
Pickups: Bridge - Dimarzio X2N, Neck - Nothing, removed

This guitar was purchased during my obsession with Chuck Schuldiner (of Death and Control Denied). While Chuck never played 7 strings, this was the closest I would come and have a guitar I’d actually use!

This is tuned one step below 7 string standard (to match Chuck’s one step below 6 string standard), has the neck pickup removed, and the X2N is wired directly to the volume control and output jack.

BC Rich Stealth 7

Ibanez Prestige RGD2127Z

Bought: 2013
Tuned: GCFA#D#GC
Pickups: Bridge - Dimarzio D-Activator, Neck - Stock Ibanez V77

This guitar is probably my favourite to play out of all of my collection, and has a wonderful sound to it. The Edge Zero 7 tremolo is also one of the most stable and easy to work with tremolos I’ve used.

I have this tuned down two steps from 7 string standard, with some of my favourite songs I’ve written came from playing this guitar.

Ibanez RGD2127z

Jackson JS32-8Q Dinky

Bought: 2013 Tuned: F#BEADGBE Pickups: Bridge - Dimarzio D-Activator, Neck - Stock

I bought this guitar due to it being easier to use than the 8 string I already had (an Agile Intrepid Pro 828), and I ended up selling the Agile because of it.

I am more of a 7 string player than an 8 string player, but I do like the extra range every so often. One of my favourite songs I’ve written (prior to owning the Agile) was already in the key of F# Harmonic Minor, so it worked instantly with the extra range.

Jackson JS32-8Q

Ibanez RG7321

Bought: 2014
Tuned: AEADGBE Pickups: Bridge - Entwistle Dark Star, Neck - Stock Ibanez

I bought this guitar as part of trading in a guitar I didn’t use much. I replaced the bridge pickup with an Entwistle Dark Star (a wonderful sounding pickup from a UK-based pickup manufacturer), and also added a mirrored pickguard.

My wife also bought me a feather boa guitar strap for it, which I think improves it!

Ibanez RG7321

Charvel So-Cal Pro Mod

Bought: 2018 Tuned: EADGBE Pickups: Seymour Duncan Distortions (Bridge and Neck)

This was the first 6 string I bought in a decade, and came right around the time I got back into 80s rock and metal quite heavily.

This guitar is wonderful to play and sounds outstanding. It might not be one of the original 1980s Charvels, but it plays so well I don’t care!

Charvel So-Cal Pro Mod

“Fender” Stratocaster (Partscaster)

Bought: 2020 Tuned: EADGBE Pickups: Bridge - Entwistle Dark Star, Middle and Neck - Entwistle XS-62N

A friend of mine (who I used to be in two bands with) sold this guitar to me last year, and it is a dream to play. It isn’t a real Fender, instead made from parts sourced from multiple locations.

The neck is also scalloped (a la Yngwie Malmsteen and Ritchie Blackmore), meaning when you press down the strings behind the fret, you don’t actually touch the wood of the fretboard. This makes it easy to go out of tune if you are heavy handed, but also means that bends and vibrato are easier due to no friction from the fretboard.

Partscaster

Other instruments

I also dabble in a few other instruments, namely bass, ukulele, banjo, and sometimes keyboards/piano.

I got my first ukulele about 12-13 years ago, and while it isn’t my main instrument, it is nice to make noise with. The kids also love playing it too!

Ukulele

I play bass sometimes, although mainly for recording music. I’m no Victor Wooten, Sean Malone or Billy Sheehan, but I do okay on bass when I need to. I own an OLP MM5 5-string Stingray bass (the pre-Sterling officially licensed Musicman copy brand) that I bought about 15 years ago, and it has served me (and the bassist in one of my previous bands) well when we needed some low end fun.

Bass

I dabble in banjo, although other than a clunky version of Duelling Banjos and some random tunes I’ve put together, I have not played this as much as I would have liked. Still, it is nice when I want a bluegrass edge to what I am doing.

Banjo

I also own a Novation Launchkey 49 for when I want to play some keyboards, synths or piano. Right now I don’t have the space to have it set up and playable at all times, but hopefully in the future there will be a place for it and I can resurrect my basic keyboard skills!

Amplifiers

My main amplifier is an Engl Invader 150. I bought this in 2008 and instantly found the tone I’d been searching for since I started playing guitar. I have owned, played and borrowed many other amplifiers over the years, but none feel as “right” to me as this one does. It is paired with an Engl Standard 4x12, with Celestion V60 speakers.

This amplifier has been with me for every gig I’ve played since I bought it, and has never caused me any reliability concerns or problems. To say I’m glad I bought it would be an understatement!

The below photo is from the day I purchased it (with the amp it replaced, an Engl Thunder 50, on top): -

Engl Invader 150

I also own a Marshall Valvestate 8100 head. This was purchased due to my obsession with Chuck Schuldiner, and while it does need some repair work (the volume can cut out every so often), the sound is wonderful, especially for what worked out to be the £30 I paid for i. I bought it for £100 including a 4x12 speaker cabinet and sold the 4x12 at a later date for £70. Bargain!

Marshall 8100

Finally, I own a Hotone Purple Wind that my wife bought me for my birthday a few years go. This has a slight Marshall Plexi-style tone to it, which when fronted with an overdrive can get tones like Yngwie Malmsteen, Eddie Van Halen or even Brian May at a push.

Effects

For effects, I have used a Line 6 HD500 for about a decade now in conjunction with my Engl Invader. While the Line 6 would often be used as a standalone device (with the amplifier models), I use it mainly as a very good multieffects device. With my Engl also having MIDI capabilities, I can switch presets and channels on my amplifier at the same time with a single button press.

I have tried to do the whole pedalboard/tap dancing thing in the past, but I often want to change between a lot of effects in quick succession (eg reverb/delay and maybe chorus on a clean channel, to just my rhythm sound with no effects, to a lead channel with delay and the option of harmony/wah). I would always end up almost falling over trying to use a traditional pedalboard, so I have always strived for a one-stomp style setup.

As the HD500 is over a decade old now, and at the time the effects algorithms were not the latest and greatest, I am considering replacing this at some point in the near future. Wheter this is with something like a Fractal Audio AxeFX, Neural DSP Quad Cortex or something else entirely, I am not sure.

I do own some other effects as well for playing with/recording, with my favourites being: -

  • Mr Black Eterna shimmering reverb
  • Homebrew Electronics Germania treble booster (for my best Brian May impression)
  • Greg Covington Fireplace treble booster prototype (that I found for sale in a guitar shop mostly unlabelled!)

I also own a couple of slides (for when the blues hits) and an eBow for when I want to pretend I own a violin.

Summary

While this type of post isn’t my usual technical affair, I hope you enjoy reading it. As I mentioned at the beginning, I always enjoy seeing peoples setups, whether to get ideas, enjoy the aesthetics or simply see a personal side of what is going on behind the work.