Office furniture: under-desk rack

I recently realized that I never posted pictures of the completed under-desk rack.

Hiding under the desks, where it normally lives.

I guess I never posted about what’s going on in this rack. There are two ethernet switches, a Ubiquiti US24 and a Ubiquity 16XG. They’re connected via a pair of 10G fiber connections with LACP. The 16XG is also connected to the 16XG in the basement via a pair of 10G fiber connections with LACP. I use the copper 10G connections in the 16XG in the under-desk rack for Mac Studios and a Threadripper 3960X Linux workstation in my office. I use the US24 for CalDigit docks (for wired laptop connectivity), Raspberry Pis, etc. There’s a patch panel for each switch that passes through to parallel patch panels in the rear. This lets me keep the cabling in the front super-clean (just short patch cables).

There’s a Middle Atlantic 3U fan panel in the rear, exhausting air. There’s an ancient Best Power UPS in the bottom that just keeps on working (with battery replacements every 3 or 4 years). There’s a Furman PDU in the top with pull-out LED lights.

It’s on casters, and can be rolled out easily to gain some work space (more than shown here). The top insert is porcelain, the same as the rolling drawer cabinets.

There is a lot of ventilation in the front door. The front window is scratch-resistant polycarbonate, but the door box is vented on all 4 sides. There are two layers of stainless steel mesh in the vents. One is coarse for strength, the other is fine to keep pet hair and dust bunnies out. The inspiration here came from a pie cooling cabinet in an old bakery I used to visit. The air flow in this cabinet is front-to-back, for the components and the CloudPlate.

More office furniture: a second rolling drawer cabinet

This was mostly a duplicate of a similar cabinet I had already built. And I already had built the shell, but not the top or the base. It’s taller than the first, to allow for some shelf space. I finished it recently. No in-progress pictures or even nice pictures. 🙂 But it has 21U of rack space. 19U is consumed with old Middle Atlantic TD drawers. 1U is consumed by an old rack mount PDU. The drawers are much deeper front-to-back than the PDU. Hence 1U below the PDU is a blank, which allows space for wall warts to be plugged into the PDU. The shelves are on shelf pins, so it’s easy to get to the outlets on the PDU by pulling out the lower shelf. Having the PDU here let me mount my Lutron and Hue hubs on the wall next to the Unifi in-wall HD WiFi access point. The access point is powered via PoE, but the Lutron and Hue hubs use wall warts. The Hue hub lets me control the Hue table lamps and the Hue bulbs in the floor lamps in the den via HomeKit. The Lutron hub lets me control the recessed lighting via HomeKit. I have Lutron stuff elsewhere in the house, and all of it currently uses this hub for HomeKit control (usually via Siri).

I bought most of my Middle Atlantic drawers about 25 years ago. The price has nearly tripled since that time, so I’m glad I bought so many of them way back when. They were originally in two of my server racks and a pair of MDV-R12 cabinets. I’ve been repurposing them for years. They’re durable, they happily hold more weight than I’ll ever need to put in them, I can reconfigure as desired, and they look good to me. This cabinet has two 5U drawers with locks, a 4U drawer, a 3U drawer and a 2U drawer.

Below is the other cabinet that I mostly duplicated. This one was finished in July 2022 while I was still working on the floor (hadn’t finished the shoe moulding). It’s now on the opposite side of the French doors.

Both of these cabinets are on casters, so I can move them as needed. Both are solid oak with porcelain inserts in the top that are intentionally just taller than the wood frame. So when I slide something a bit off the porcelain, it doesn’t scar the wood frame.

More office furniture: a bench

I’ve been working on a bench for the home office. I wanted something big enough for a short person like me to be able to lie down on (say while waiting for a make -j4 buildworld to finish on FreeBSD on slow hardware), and strong enough to outlive me and a now young oak tree to replace the wood I used.

I also wanted a little bit more drawer space. As is my penchant, I’m using Middle Atlantic TD rack mount drawers (all of my office furniture is sized to accommodate 19″ rack mounted gear). However, the bench spans the only HVAC register in the room (in the floor), and the combination of the position of the register and the width of the window bay meant that I could only put drawers in one side. For now I’m only occupying 5U of the 8U rack space, because I suspect I’m going to want a 3U fan panel to assist the HVAC when summer arrives.

The bench will be getting a cushion, of course. It is solid oak, with the base constructed of 4×4 legs and 2×4 stretchers. The top is 1 3/8″ thick oak butcher block (a workbench top), which I framed with 1×2 oak. It’s 61.5″ wide and 25.5″ deep. The height was dictated by the window sill; I didn’t want to block access to the handle in the lower window sash.

The feet are 1″ thick Delrin, bolted to the bottom of the oak legs via countersunk 5/16″-18 stainless countersunk bolts that thread into threaded inserts installed in the oak. I rough cut the Delrin, then mill the countersinks on the drill press. I then mark for the inserts in the oak.

I then drill the holes for the inserts and install them.

I then bolt the foot to the leg.

I then use a flush cutting bit on my trim router to make the feet match the leg, then run a roundover bit on the edges. Delrin/acetal machines like butter, even with woodworking tools. I use 1″ thick Delrin/acetal for heavy furniture feet, since it allows me to countersink the 5/16″-18 bolt heads more than 1/4″ (zero chance of the bolt heads contacting a floor for the next 75 years), while still having a lot of Delrin/acetal grabbed by the bolts. It’s not cheap, but it is fantastic for this application. If this were going on a wood floor I’d round over the countersink edges, but it’s going to live on porcelain so there’s no need. When I first used these kind of feet on the desks, I used 4 bolts. But 2 is plenty.

I have more than once considered UHMW instead, mostly for the cost saving. But it doesn’t machine quite as nicely, and it’s also not terribly dimensionally stable over temperature and humidity. Of course, neither is wood, but oak sealed with shellac and polyurethane doesn’t move much. And importantly, all of the weight is sitting on the feet. I don’t want them to squish over time. My desks are REALLY heavy, but the feet have held up beautifully. Honestly, if your design affords it, I can heartily recommended Delrin/acetal for feet. But even if you don’t use Delrin/acetal… replaceable feet are awesome. Here they’re on square oak 4x4s, but Delrin/acetal is also easy to lathe if your leg ends are round.

The top also has threaded inserts in the bottom, and the base pieces bolt to the top via countersunk 5/16″-18 bolts through the stretchers from underneath. The next picture shows one of the bolts (washer not shown) threaded into one of the inserts, and an insert installed into the bottom of the top.

The next picture shows the deeply countersunk holes in one of the top stretchers (the bench is upside down here). This is from before I glued and doweled the base pieces together.

The left part of the base is doweled and glued (Titebond III) together, as is the right leg assembly. It looked like this after assembly.

The bench is heavy even without the drawers (I’d guess about 75 pounds), but the Delrin feet allow the bench to glide easily on the porcelain floor when desired.

I am one of those people that likes really solid bench seating and bedding. Something that doesn’t flex or squeak, at all. And doesn’t move unintentionally but can be moved easily as needed. And can be disassembled/reassembled should it need to be carted up/down stairs. And fits the intended space exactly.

Objectives met.

mcrover can now check backup status (dumpdates)

I finally finished the small remaining piece of work to have mcrover monitor my backups. Specifically, those using ‘dump’. I have 10 computers using dump for automated nightly backups, over the network. Once in a while I’ll accidentally create a problem via access configuration and not realize that my nightly backups aren’t happening for one of the 10 computers. Since I run mcroverd on all of these computers, it makes sense for it to be able to tell me when a backup hasn’t occurred as scheduled.

Right now mcrover only looks for any level of dump within a configured interval for the given configured devices, not for specific levels. I’ll augment this with the ability to check specific levels later, once I decide on a sane configuration syntax to support it. At the moment I trust my dump driver, I’ve been using it for more than 20 years at this point and have done multiple partial and full recoveries from the dumps. If dumpdates is correct, it just works.

The current configuration syntax in the local stanza of the configuration looks like this:

 #  Check that a 'dump' of the given devices has occurred within the
 #  given time interval.  
 DUMPS = [ { device = "/dev/gpt/gprootfs"; period = 1d6h; },
           { device = "/dev/gpt/gpusrfs";  period = 1d6h; },
           { device = "/dev/gpt/gpvarfs";  period = 1d6h; } ];

This ticks a box for yet another thing I’ve always wanted at home. mcrover only shows me problems, and that’s what I need. I don’t want a dashboard I have to make time to read. Checking my backups here is handy.