πŸ–₯️ Linux Development Workstation Setup Guide

This article explains how to configure a high-performance Linux development workstation running Debian 13 (Trixie) or Debian 12 (Bookworm).


πŸ“‘ Table of Contents

  • Introduction
  • Hardware & Network
  • OS Installation
  • Partition Layout (Actual Example)
  • Pre-requisites
  • Base System Configuration
  • Development Environment
  • Authentication Services (NIS)
  • Backup & Recovery

🧩 Introduction

This guide prepares a workstation optimized for local development, build pipelines, and database workloads on fast NVMe storage.
It focuses on reproducibility, speed, and maintainability.


πŸ–§ Hardware & Network

  • CPU: Ryzen 9 5950X / 7950X / 9950X
  • RAM: 64 – 128 GB DDR5
  • Storage: NVMe for OS + secondary NVMe for /data
  • Network: 2.5 Gbps Ethernet preferred
  • Hostname: devbox.local (or whatever your lcoal domain is)

πŸ–§ Actual Hardware Used

  • Case: Coolermaster TD500 Mesh V2
  • PSU: Coolermaster MWE 850W Gold
  • Motherboard: MSI X670E Gaming Plus Wifi
  • CPU: Ryzen 9 9950X
  • Cooler: Thermalright PA 140 Assassin
  • RAM: 128 GB DDR5 Crucial 5600MT/s
  • GPU: iGPU (Upgrade later)
  • Storage: Single 2tb Samsung 990 Pro for OS and /data (data will go on a RAID0 array later)
  • Network: 2.5 Gbps

πŸ’Ώ OS Installation

  1. Boot installer in UEFI mode.
  2. Use manual partitioning.
  3. Create the first user sysadmin (same password as root).

πŸ’½ Partition Layout (Actual Example)

Mount PointDeviceSizeUse%Description
//dev/nvme0n1p292 GB7%Root filesystem – OS and core packages
/boot/efi/dev/nvme0n1p1975 MB1%EFI System Partition
/var/dev/nvme0n1p337 GB2%Logs, APT cache, Docker layers, build artifacts
/tmp/dev/nvme0n1p52.7 GB2%Isolated temporary area – protects root from overflow
/home/dev/nvme0n1p6274 GB3%User homes, SDKMAN!, Maven, IDE configs
/data/dev/nvme0n1p71.3 TB1%Databases, container volumes, project data

Rationale: The layout isolates transient and variable data from system and user data for cleaner backups and improved stability.


πŸ“¦ Pre-requisites

sudo apt update
sudo apt install -y curl wget zip unzip ca-certificates

curl --version
wget --version

βš™οΈ Base System Configuration

Users & Groups

Create sysadmin during installation and assign sudo privileges to other users:

sudo usermod -aG sudo <username>

Sudo Configuration

sudo apt install -y sudo
sudo cp /etc/sudoers /etc/sudoers.bak.$(date -u +%Y%m%d-%H%M%S)
grep -qE 'includedir[[:space:]]+/etc/sudoers\.d' /etc/sudoers || \
  echo '#includedir /etc/sudoers.d' | sudo tee -a /etc/sudoers >/dev/null
sudo install -d -m 755 /etc/sudoers.d
echo '%sysadmin ALL=(ALL) NOPASSWD: ALL' | sudo tee /etc/sudoers.d/nopass >/dev/null
sudo chmod 0440 /etc/sudoers.d/nopass

Timezone & NTP

sudo timedatectl set-timezone Europe/Dublin
sudo apt install -y systemd-timesyncd
sudo systemctl enable --now systemd-timesyncd
timedatectl show | grep NTPSynchronized

πŸ›  Development Environment

Essentials

sudo apt install -y git build-essential cmake
gcc --version
make --version

Git

sudo apt install -y git
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
git config --global init.defaultBranch main
git config --global credential.helper 'cache --timeout=3600'

Vim (Full Version)

sudo apt install -y vim-gtk3
vim --version | grep +clipboard

Java & Maven (via SDKMAN!)

Note: Install as a regular user, not root.

curl -s "https://get.sdkman.io" | bash
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"
exec $SHELL -l
sdk install java 21.0.4-tem
sdk install maven
java -version
mvn -v

Go

sudo apt install -y golang
go version

Python

sudo apt install -y python3 python3-venv python3-pip
python3 --version
pip3 --version

Node.js (via nvm)

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm install --lts
node -v
npm -v

IDEs & Tools

IntelliJ IDEA (via JetBrains Toolbox)

sudo apt install -y libfuse2 libxi6 libxrender1 libxtst6 libgtk-3-bin
curl -fsSL https://raw.githubusercontent.com/nagygergo/jetbrains-toolbox-install/master/jetbrains-toolbox.sh | bash
jetbrains-toolbox

VS Code

sudo snap install code --classic
code --version

Google Chrome

wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | \
  gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/google.gpg >/dev/null

sudo tee /etc/apt/sources.list.d/google-chrome.sources <<'EOF'
Types: deb
URIs: http://dl.google.com/linux/chrome/deb/
Suites: stable
Components: main
Architectures: amd64
Signed-By: /etc/apt/trusted.gpg.d/google.gpg
EOF

sudo apt update
sudo apt install -y google-chrome-stable
google-chrome --version

Insomnia (API Client)

The official repo lacks Debian packages. Install from GitHub release:

wget https://github.com/Kong/insomnia/releases/download/core%4011.6.1/Insomnia.Core-11.6.1.deb
sudo apt install -y ./Insomnia.Core-11.6.1.deb
insomnia --version

πŸ” Authentication Services (NIS)

sudo apt install -y nis<br>echo "dublinux.net" | sudo tee /etc/defaultdomain<br>sudo tee /etc/yp.conf >/dev/null <<br><br>Enable automatic home directory creation:<br><br>sudo apt install -y libpam-mkhomedir<br>sudo pam-auth-update --enable mkhomedir

πŸ”„ Backup & Recovery

rsync -avh --delete /data /mnt/nas/devbox-backup
ls /mnt/nas/devbox-backup

βœ… Your Linux development workstation is fully configured.
All steps include verification commands for consistent reproducibility across machines.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.