So by accident this morning, my 8 year old’s new digital watch’s alarm went off at 6am. Which also happened to be exactly the same time when the new nVidia GeForce 1080 GPUs went on sale. Unfortunately, in the 5 minutes that it took me to fumble for my credit card and open the laptop, they’d completely sold out. It’s still a few more weeks until the Oculus Rift shows up, but I’d really like to finish the 4U rackmount build soon.
I worked a little more on fixing up the 4U rackmount machine. Despite how big this puppy is, I keep running into limitations with space.
To accommodate the 256GB Samsung SSD drive, I ended up having to buy a 2.5″ to 3.5″ adapter which I put into a tray which used to be mounted on the side of the chassis. It turns out the placement of the RAM on the AMD motherboard meant the tray wouldn’t fit, so I’ll have to mount the drive with a 3.5″ to 5.25″ adapter. It’s adapters all the way down.
One big problem though, was that originally I was thinking of just leaving the stack of 9GB Seagate Barracuda drives in the 5.25″ bay in there until I could work out some way to get the data off. I’m not even 100% sure what’s on there, other than I use to run some ancient version of VMware ESX back when I used to work for Virtzilla. I guess the one big problem is really two problems. The first is I need to figure out how to get the Ultra SCSI drives working again, and the second is that they’re formatted with VMFS 2. Yay for ancient connectors and ancient file formats.
One thing I did get done, was both of the old fans have now been swapped out for much quieter Cooler Master 92mm units. I ended up snipping off the 3pin power connectors and splicing them with the old molex connector from the old fans. Cooler Master was nice enough to include a 3pin to molex adapter, but one of them wouldn’t fit into the Corsair PSU’s molex connector, and the other I had already cut off before realizing there was an included adapter. Oops.
The end result though is the machine is now quiet enough to put in my rack without my wife wanting to kill me, so it’s smiles all around.
I just found out something really cool about curl. Actually, it’s so cool that at first I couldn’t believe that I didn’t know about it, but apparently it’s a new thing. There is now a “–unix-socket” command which will allow you to pass HTTP through a unix socket.
This might not initially seem like a big deal, but it’s extremely handy when you’ve set up HTTP pass-through a unix socket to something like Gunicorn if you’re in Django land. It’s also particularly handy for debugging the Docker API which you can get to at /var/run/docker.sock. Here’s an example:
$ curl -s –unix-socket /var/run/docker.sock http:/images/json | jq -r “.”
That gives you a lot more data than if you were trying to directly parse “docker images”, plus makes it super easy to debug what’s going on under the covers.
While waiting for the parts to finish off the rackmount build, I put together the new machine for the Oculus. It’s amazing to me how nice things are these days compared to even 10 years ago. Everything just snaps together like Legos. I think the hardest part is probably spreading the Arctic Silver onto the top of the CPU.
The new GeForce 1080s still haven’t shipped yet, so in the mean time, I’ve borrowed the GeForce 660 from the rackmount machine. You can’t really tell that much of a difference from the the AMD mobo, but I guess now it’s technically “Oculus ready”, or at least, will be with a new GPU.
Here’s the part’s list, and here are some pics.
After a night of banging my head against the wall, I seem to have the blog more or less up and running. When I was originally setting everything up internally, I made a simple docker-compose.yaml file which used the official WordPress and Mariadb images. The problem though is that the docker images don’t support TLS out of the box, and the documentation on the Docker’s website doesn’t explain how to set it up (mea culpa, I should ask someone at work about this).
My assumption was this wouldn’t be a big deal, because I could just slap an nginx container onto the front to terminate the TLS, and then just use HTTP pass-through to the WordPress container. Unfortunately, that didn’t work out so well.
WordPress assumes ignores the WordPress Address and Site URL Address schemas when it serves up static content. That meant that some of the content was getting served up with HTTPS and some of it was still HTTP. To make things worse, the admin console completely ignores the settings and relies relative links. Unfortunately because I was passing things through to a private container, this meant that it tried hitting the container name.
I ended up ditching the Nginx container, and digging through the Apache configuration in the WordPress container, and finally figured out how to make TLS work. So, lots of mucking around with Dockerfiles, and a fresh new cert from Let’s Encrypt and we’re finally running with a modicum of security. Now I just need to figure out how to automate getting the certs, because they expire every three months.
Well, I’m a little further ahead. A new EVGA PSU and a cooler which actually fits into the 4U chassis have arrived today. I’ve now swapped out the old Cooler Master Hyper 212 EVO (say that five times quickly) with a more svelte Cooler Master GeminII M4 heat sink and fan. It doesn’t seem to cool quite as much, but it still works fine. It’s doubtful that I’m going to do any crazy over clocking on this box now that it’s going to be hidden away inside of a server closet.
I also have installed the newly minted Ubuntu Server 16.04 onto an extra 256GB Samsung Pro SSD drive that I had kicking around from Netkine days. This is replacing the 5 x 3.5″ Ultra SCSI drives which totaled a whopping 45GB worth of storage. Four of them were 9GB Seagate Barracuda drives, and the last one was a 9GB IBM drive. Do you remember when IBM made disk drives? Me neither.
Oh, funny thing about installing Ubuntu. The only spare USB drive that I could find happened to be in the form of an Apple Camp Wrist Bracelet that had been given to the kids by a family friend who works for Apple. Weird thing about it though, was that in El Capitan I couldn’t seem to get UNetbootin (the thing which writes ISO images to USB sticks) to work. I ended up having to use:
$ sudo dd if=ubuntu-16.04-server-amd64.iso of=/dev/disk2 bs=1024
That worked like a charm, but first I’d fiddled around with Disk Utility and even fdisk and couldn’t seem to manage to get UNetbootin to recognize the USB drive. Not sure what’s up with that.
Two problems are still left. The two 92mm fans in the chassis sound like an F-18 taking off, which isn’t going to work out well in my server rack. Also, the four of the drives were sitting in a 5.25″ drive bay and the last one was bolted onto the side of the server. Unfortunately the machine doesn’t have anything that can handle the SSD drive, so I’m going to need to get an adapter.
I’m kind of stuck. I’d wanted to take the 6 core AMD FX-6300 I had and stuff it into an old 4U rackmount chassis that I had lying around from my first mini-start-up (way back in 1999). Actually, the chassis itself may have come from a different start-up, but such is life in the Silicon Valley.
One thing that’s somewhat nice about PCs is that even though the standards change, the footprint for ATX motherboards is roughly the same as it was 20 years ago. I pulled the old dual-core Pentium III board out of the machine, and popped the new(-er) AMD board in, however, one thing I hadn’t anticipated was that a Cooler Master Hyper 212 EVO heat sink will not fit into a 4U (!) chassis. I guess I should have thought of this before, given it feels like the machine is really a heat sink with a motherboard strapped to it.
A quasi interesting historical footnote about the Pentium III vs the AMD FX6300. The P3 ran at 450 MHz with a 250 nm die size. The AMD runs at 3.5 GHz with a 32 nm die size. Not quite 10x the speed with 1/10th the size, but pretty close.
Oh, I also gutted a 350W PSU out of another machine I had lying around only to realize it didn’t have a PCIe cable on it to power the older nVidia GTX 660 I was planning on stuffing in to it. So… more parts from Amazon tomorrow. Yay 1-day shipping!
So back in January I pre-ordered an Oculus Rift. It’s now mid-May and I still haven’t gotten it yet, however, I think it’s probably imminent. When I ordered it, I actually didn’t want to get it right away, because my current PC gaming rig just isn’t going to cut the mustard. Plus, I figured out that nVidia was going to release a new GPU which would probably knock the socks off of the current generation.
So now it’s getting close to when the Rift is going to ship, and, wouldn’t-you-know-it, nVidia just announced the new GeForce 1080s are going to ship in a few weeks. So, it’s time to build the new machine. I figured I probably shouldn’t go overboard; my last machine I built I ended up getting an AMD CPU with 6-cores just because I thought it’d be interesting for Netkine (my now defunct startup). This time I’m dialing back the cores to 4 with an Intel i5-6600k, but overall it should be pretty smoking fast (or at least fast enough for driving the Rift).
OKAY. I think I’ve finally worked the kinks out getting a basic WordPress site deployed. I’ve been wanting to set up a blog for a bit now about some of the things I’ve been working on, but my first attempt with Docker Compose resulted in things going missing. I’ve since tweaked the compose file to use named volumes, which hopefully will mean that revisions to the compose file won’t cause data to disappear.
As an aside, I have to say the world of WordPress is really foreign for me. The ecosystem is just so massive that it’s really hard to figure out how to do basic things display a code snippet. I’ll see if I can figure out how to do that later, plus it would be great to figure out how to secure this beast with TLS.