Home Lab Server – Hardware Setup

The next step on the journey of building a home lab server is to consider hardware and storage needs. This article cannot possibly provide any one individual or family or organization with the necessary knowledge to make an optimal decision about computing hardware. Therefore, consider this article the exploration of one man’s decision-making process with project goals and limited funds in mind.

The hardware “stack”

There are simply too many options and configurations to provide a full written guide in any one place that can stand the test of time. Therefore, this article will be a straightforward listing of the hardware I am working with in this project. It is not intended to be a guide for what you *should* purchase or use in your own design.

Hardware on the Network

  • Ubiquiti Dream Machine Special Edition. Runs a variety of Ubiquiti switches and access points from this single machine which can be connected to two separate WANs at once. (We will have fiber to the home soon, but I work remotely and the kids are homeschooled so having both a cable and fiber connection to provide redundanct connectivity is becoming critical to daily life.) Having Ubiquiti networking gear simplified my ability to manage multiple VLANs, mesh networking, and connectivity to IoT devices around the home. Expect to pay as much for this type of gear as for any one MacBook Pro 15″ or a high-end gaming desktop, but it is awfully nice to not have to troubleshoot WiFi problems every other month.
  • HP G600 with 1.2GB of disk space. This machine is for core services primarily, such as running an LXC with PiHole as my DNS filtering mechanism. (Helps cut down on the cybersecurity attack surface of my family’s devices, and allows some amount of control over general Internet browsing by completely dropping DNS queries for domains we know we wouldn’t want our kids exposed to on the Internet.)
  • Numerous laptops, gaming platforms, smartphones, and tablets connect to the primary WiFi network, with other IoT devices connecting to a separate VLAN I setup which can talk to the Internet but cannot access any of my general purpose computing machines on the main WiFi network. Again, this design limits our exposure to cybersecurity threats via poorly designed or maintained IoT devices by manufacturers of devices which primarily serve different purposes but have some sort of digital controls connecting to the Internet. For instance, my new furnace and A/C system is designed for Internet connectivity as an IoT device – you know, for saving the planet with eco-friendly stuff and such.

Hardware Design of the New Server

First, a quick way to display everything on my system directly from the command line:

[nix-shell:~]$ hwinfo --short
cpu:                                                            
                       AMD Ryzen 5 3600 6-Core Processor, 2200 MHz
                       AMD Ryzen 5 3600 6-Core Processor, 2800 MHz
                       AMD Ryzen 5 3600 6-Core Processor, 2800 MHz
                       AMD Ryzen 5 3600 6-Core Processor, 3410 MHz
                       AMD Ryzen 5 3600 6-Core Processor, 4203 MHz
                       AMD Ryzen 5 3600 6-Core Processor, 2200 MHz
                       AMD Ryzen 5 3600 6-Core Processor, 2200 MHz
                       AMD Ryzen 5 3600 6-Core Processor, 2200 MHz
                       AMD Ryzen 5 3600 6-Core Processor, 2200 MHz
                       AMD Ryzen 5 3600 6-Core Processor, 3715 MHz
                       AMD Ryzen 5 3600 6-Core Processor, 4200 MHz
                       AMD Ryzen 5 3600 6-Core Processor, 2800 MHz
keyboard:
  /dev/input/event1    Logitech USB Keyboard
mouse:
  /dev/input/mice      Logitech USB Optical Mouse
monitor:
                       GTW KX2153
graphics card:
                       nVidia VGA compatible controller
sound:
                       nVidia Multimedia controller
                       AMD Multimedia controller
storage:
                       Silicon Motion Mass storage controller
                       AMD Mass storage controller
network:
  enp34s0              Ethernet controller
network interface:
  tailscale0           Network Interface
  enp34s0              Ethernet network interface
  lo                   Loopback network interface
disk:
  /dev/nvme0n1         Silicon Motion Inland TN320 NVMe SSD
  /dev/sdd             WDC WD10EZEX-60W
  /dev/sdb             ST8000DM004-2U91
  /dev/sdc             ST8000DM004-2U91
  /dev/sda             WDC WD10EZEX-60W
partition:
  /dev/nvme0n1p1       Partition
  /dev/nvme0n1p2       Partition
  /dev/sdd1            Partition
  /dev/sdb1            Partition
  /dev/sdc1            Partition
  /dev/sda1            Partition
usb controller:
                       AMD USB Controller
                       nVidia USB Controller
                       AMD USB Controller
bios:
                       BIOS
bridge:
                       AMD PCI bridge
                       AMD Host bridge
                       AMD Host bridge
                       AMD PCI bridge
                       AMD PCI bridge
                       AMD Host bridge
                       AMD Host bridge
                       AMD Host bridge
                       AMD ISA bridge
                       AMD Host bridge
                       AMD Host bridge
                       AMD Host bridge
                       AMD PCI bridge
                       AMD Host bridge
                       AMD Host bridge
                       AMD Host bridge
                       AMD PCI bridge
                       AMD PCI bridge
                       AMD Host bridge
                       AMD PCI bridge
                       AMD Host bridge
                       AMD Host bridge
                       AMD Host bridge
                       AMD Host bridge
hub:
                       Linux 6.6.90 xhci-hcd xHCI Host Controller
                       Linux 6.6.90 xhci-hcd xHCI Host Controller
                       Linux 6.6.90 xhci-hcd xHCI Host Controller
                       Linux 6.6.90 xhci-hcd xHCI Host Controller
                       Linux 6.6.90 xhci-hcd xHCI Host Controller
                       Linux 6.6.90 xhci-hcd xHCI Host Controller
memory:
                       Main Memory
unknown:
                       FPU
                       DMA controller
                       PIC
                       Keyboard controller
                       unknown unknown
                       AMD Generic system peripheral
                       unknown unknown
                       AMD Encryption controller
                       nVidia Serial bus controller
                       AMD SMBus
                       Serial controller
  /dev/input/event2    Logitech USB Keyboard

However, this doesn’t tell you much about how to look up specific information for the model of motherboard, CPU, drives, etc. You might also have some questions about the reporting of the CPU, because it says it is an “AMD Ryzen 5 3600 6-Core Processor” and yet 12 cores with their current processor speed are displayed. My particular CPU does have just 6 CPU dies on the chip, but each die is a dual-core processor, hence the 12 cores shown.

Next, you might notice that I have 5 separate disks, one NVME drive on which I have already installed NixOS, and four additional drives. To simplify things, I have listed more detailed information of my hardware.

Motherboard: MSI A520M-A PRO with dual channel DDR4 RAM slots, AMD AM4 CPU slot, 1x PCIE 4 (for GPU), 1x PCIE 3, single NVME m.4 slot, and 4 SATA drive connectors, and up to 1Gb Ethernet.
Memory: 32GB at 3600MHz
CPU: AMD Ryzen 5 3600 6-core, dual CPU (12 logical CPUs total)
GPU: ASUS Nvidia 1650 Super
NVME Drive: Kingston 256GB m.4
HDDs: 2x Western Digital 1TB, 2x Seagate IronWolf 8TB

Remember, these components are half extra leftover parts from prior machines, and some new parts meant to provide more storage and capabilities for my server. Making a decision about the hardware to use may often be based on total cost and total availability of parts; in my case, availability of parts trumped cost because I wanted to spend as little as possible in order to run a server.

I began by installing NixOS (Gnome desktop version) directly to my NVME drive. Prior experience has taught me that (1) I often make mistakes not being a full-time sysadmin, and (2) sometimes the easiest way to correct mistakes is to search the internet and apply solutions from forums and help files online. It’s a big pain to drag around a laptop to lookup information online to solve problems, so I wanted an attached display and windowed desktop environment on my server when troubleshooting needed to progress to on-server work. (rather than SSH’ing into the server from an external laptop or desktop)

In the next article I will detail how I built out the storage of my new server after installing NixOS, along with explanations behind each of my decisions.

Comments

Leave a Reply