Skip to content

Building a High-Performance Local Server

Tags: hardware, learning, tools • Categories: Learning

Table of Contents

It’s been a really long time since I built a custom PC. At least 15 years, maybe closer to 20. Inspired by DDH, the crazy high cost of renting high-performance compute in the cloud1 , and my success with running both an Orange Pi and Raspberry Pi I decided to go ahead and do a custom build to create a high-powered home server box that I could use to play with some higher-compute workloads and get to play with desktop ubuntu at the same time (I’ve only ever interacted with linux via the CLI).

Additionally, I wanted to play with self-hosting a wider array of production-related supporting applications:

  • Sentry
  • Windmill
  • Prometheus and other observability tools

As a bonus, I’m hoping this will heat my tiny house/office structure in the winter. I normally run an electric heater out in my man-shed-office, so I’m paying for the electricity anyway, may as well get some compute to go along with it.

Build Materials

Here’s the build I landed on:

  • MSI B550 MAG Tomahawk
    • Originally I tried the ASUS B550 Prime Plus. I will explain this more in the BIOS section, but this may not work with the Ryzen CPU I purchased.
  • Ryzen 7 5800X (Vermeer) (3.8GHz,105W,L3:32M,8)
    • BeQuiet Pure Rock slim 2 to cool the chip.
    • Thermal paste.
    • What I didn’t realize is the Ryzen CPUs require a CPU cooler to boot. The cooler requires this thermal paste.
    • Also, this chip does not have an integrated GPU. You’ll need a separate GPU which is a pain. I would try to get a chip with an integrated GPU.
  • 16GB x2 DDR4 RAM
  • 2TB NVMe storage. Again, totally overkill, but at $130, why not?!
  • BeQuiet Pure Base 500X. Great case, looks nice, easy to work with.
  • PSU MAG A750GL PCIE5. This was probably way overkill, but maybe I’ll put some powerful GPUs in this thing later on.
  • GeForce GT 710. Unfortunately, the CPU I purchased did not have an internal graphics unit. This is a bummer since I’m not a gamer and having a completely separate GPU is a waste. However, I needed this to boot the machine and set it up and I wanted to use it as a desktop ubuntu machine here and there.

Custom Builds Are for Gamers

I was really surprised at how gamer-centric all the custom builds are. This makes a lot of sense since most consumers are going to buy a laptop or an off-the-shelf computer. The only reason it makes sense to do a custom build is if you are looking for performance (gamers, crypto) or if you are curious (like me).

This meant there wasn’t a ton online about how to build a high-performance server rig. Too bad!

No ARM Processors

Most of my world is ARM at this point. Orange/Raspberry Pi, Mac M-series chips, and servers running Gravitron and other chips. I was surprised that it’s impossible to build a custom PC with an ARM processor.

It looks like this could change in the future but I imagine it will take time for the rest of the supply chain (mainly motherboards, I’m guessing) to catch up.

Experience With MicroCenter

There’s a MicroCenter near my house, so I figured I’d swing by and get some of my stuff there. Cool 1990s video gamer vibes in the place. Definitely a fun place to walk around if you love computers. Neat 3D printers that I’m going to have to tinker with at some point.

Their open box items are pretty well discounted and worked perfectly fine for me and they have a lot of networking stuff you need on hand.

However, I ran into a couple of issues:

  1. Their prices are consistently 20%+ higher than many online stores.
  2. Non-component product quality is poor. I bought an ethernet crimping tool and it was terrible quality.
  3. One of the main reasons I wanted to go there was to get advice from some of the tech guys about which components I needed and things to watch out for. They were much less helpful than I expected and led me in the wrong direction with my motherboard.
  4. Their return policy isn’t as good as online retailers. This is annoying when you don’t what you are doing, and don’t have consistent time to work on things, as you’ll probably leave your motherboard sitting around for 15d before touching it.

I wouldn’t recommend it: just buy components off Amazon or NewEgg.

Selecting a Motherboard

This is a critical piece of your setup. Here’s what you want:

  • Make sure the CPU slot is compatible with your CPU. Watch out for BIOS versions! More information below.
  • BIOS Flashback. This is a specific feature that enables you to update BIOS without a CPU. If you want this, more info below.
  • 4 RAM slots (future proof your box, you’ll want more memory in the future)
  • Max memory supported 128GB (you’ll probably want this at some point)
  • 2 M.2 (for future raid config). This is used to connect to your super-fast NVME drive.
    • Many M.2 compatible devices come with a heatsink already installed. My NVME did. However, my motherboard came with heatsinks for these on the motherboard, which actually made it harder to install the M.2 device.
  • The more fan slots, the better. I ended up using all four with my BeQuiet case.

Some other things I learned:

  • You cannot boot the BIOS without a CPU. It looks like the BIOS is effectively a micro-OS that sits on a < 1 GB flash drive soldered onto the motherboard.
  • You can flash the bios without a CPU installed. This is called "BIOS Flashback" but not all motherboards support this.
  • Q-LED are small LEDs on the motherboard that light up if there is a problem. Helpful for debugging boot issues.
  • Your system will not boot unless the power button is pressed. This may sound obvious, but this means you need to properly wire up the power button which makes it hard to build the motherboard outside of the box (for testing purposes).
  • Good video on physically installing the CPU on the motherboard
  • The ASUS support site is comprehensive and honestly better than expected. You can download the user manual and get compatibility information there.
  • You may get a notification about a [non-optimized memory layout](<- You may get a notification about a non-optimized memory layout>). If you have just installed two memory modules, you do not want to install memory right next to each other. You want to stagger which slots are used and start at slot #1.
  • There are two power connectors: one for general power (24 pin) and another specifically for the CPU.
  • The power switch connector is not installed vertically. This was counterintuitive to me. Here’s how it should be installed:

BIOS & CPU Compatibility

With the Asus B550 Prime board, I started out with, there was no way to determine the BIOS version installed. The BIOS chip did not contain any information about the particular version and the box did not seem to indicate this either.

Normally you would update a BIOS using a utility opened on computer boot. However, in my case, I couldn’t get the computer to boot at all since there was no CPU!

"BIOS Flashback" can be used to flash the BIOS without a bootable computer. However, my board did not support this—there’s an obvious button on the back connection array that would indicate that your board supports this. Here’s a good video which walks through how this works.

The version my CPU required was 1004, which was published in 2020, and the motherboard was manufactured in 2023, so it shouldn’t have been a problem. However, this post seems to indicate that the motherboard is not compatible and the original BIOS version on the motherboard was 0320 so it’s possible they just kept the original version on the board?

From this reddid post I learned:

if a board doesn’t have the correct BIOS to support a given CPU, the PC just won’t boot at all.

This was exactly what I was running into, but I didn’t have the exact model indicated in the post. After much googling I was not able to determine what the default BIOS version is on the motherboard I purchased, but found this recent post which seemed to indicate that what I purchased was not going to work properly.

PSA: the ASUS B550 Plus is not compatible with Ryzen 7 5800x out of the box and there is no way to flash the BIOS without a compatible CPU.

However, I could be wrong on this—I may have installed the power button incorrectly on the board. Make sure you install it horizontally, like this:

Bottom line: picking a motherboard with BIOS Flashback is a good idea. It reduces the chance of having to run back to the store or get an older CPU just to boot into BIOS.

Executing the Build

Here are the key steps

  1. Get a non-magnetic screwdriver set to use.
  2. Install components (RAM, NVME, CPU, GPU) on your motherboard before adding the motherboard to your case. It’s much harder to install components once the board is screwed into the case.
    1. Make sure to discharge static electric by touching something metal.
    2. There’s a little metal handle next to the CPU slot you want to pull up before inserting your CPU
    3. There’s always a screw needed to secure your M.2 device (NVMe card, in my case)
  3. Install your CPU cooler
    1. Make sure to put thermal paste on top of the CPU chip before installing the cooler
    2. Connect the cooling fan cable to the correct first fan port
  4. Put motherboard in your case and connect the following key cables:
    1. Power button connector
    2. Two PSU cables (one 24 pin and another smaller cable for your CPU).
  5. Make sure the board boots to your BIOS. Check the Q-LEDs if there is any trouble.
  6. Connect any other cables supported by your case (USB, audio, etc).
  7. Connect any additional fans.

Installing Ubuntu

After flashing the drive, I was able to get a black GNU command line boot-up screen (GNU Grub). However, after selecting "Install Ubuntu", the screen looked like it was attempting to boot up (spinning loader with a "MAG" on the top) and then went black.

Using the "boot ubuntu in safe mode" option I was able to install Ubuntu. I was really surprised that everything—including my external video card—worked just fine. The install process formatted my SSD.

Here’s how to get SSH up and running:

  • ctrl+opt+t to open up terminal
  • apt get install ssh
  • ssh service should start automatically

Now you are ready to start using the machine via ssh!

Omakub

DHH has been selling Linux hard the last couple months and he’s built a nice opinionated set of defaults you can install:

wget -qO- https://omakub.org/install | bash

You must install when logged in via desktop, not ssh, as it looks at some of the display-related env vars.

Speed Test

Geekbench looks like the best benchmarking tool. Let’s see what we get!

#!/bin/zsh
set -e

sudo apt update
sudo apt install -y unzip

url="https://cdn.geekbench.com/Geekbench-6.2.0-Linux.tar.gz"
curl -LO "$url"
tar -xzf Geekbench-*.tar.gz

cd Geekbench-*/
./geekbench6

Here’s the results!

Still slower than my M2 Max, but at ~$600, it’s pretty amazing!

1
Story for another day, but I recently ran a very simple three-container application with Redis + Postgres in Azure and got a $1k/month bill, which I still don’t fully understand. Additionally, I have some very simple applications running on tiny AWS VPSs (slower than my Orange Pi) and still get $25-40/mo bills.

Keep in Touch

Subscribe to my email list to keep in touch. I’ll send you new blog posts and other thoughts.