Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Introduction

Welcome! This guide will walk you through the essential steps and processes you need to get started.

Throughout this documentation, we’ll use “Klara Reinwasser” (kreinwasser@brita.net) as a placeholder for actual user names. Whenever you see this name in examples, screenshots, or instructions, simply substitute it with your own name or the relevant user’s name in your actual work.

Basic Setup

This guide walks you through setting up a development environment on Ubuntu with essential tools and utilities.

Operating System

Ubuntu

Download and install Ubuntu Desktop (version 25.10 or later recommended).

During installation:

  • Name: Klara Reinwasser
  • Username: kreinwasser
  • Computer name: keep the default

Configure sudo

sudo should already be installed. Configure passwordless sudo for convenience:

sudo sh -c 'echo "kreinwasser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/kreinwasser'

System Update

Update all packages to the latest versions:

sudo apt-get update && sudo apt-get upgrade -y

Essential Build Tools

Install the core development tools required for building software:

sudo apt-get install -y \
  build-essential \
  cmake \
  curl \
  git \
  git-lfs

Web Browser

Brave

A privacy-focused web browser built on Chromium. Official site

curl -fsS https://dl.brave.com/install.sh | sh

Terminal Enhancements

Nerd Fonts

Patched fonts with icons and glyphs for better terminal aesthetics. We recommend FiraCode Nerd Font.

Follow the installation guide for Ubuntu and select FiraCode Nerd Font.

Btop

A resource monitor that shows usage and stats for processor, memory, disks, network and processes. GitHub

Download the latest btop-x86_64-linux-musl.tbz from the releases page, then:

tar xvf btop-x86_64-linux-musl.tbz
cd btop
sudo make install

Programming Languages

Go

The Go programming language. Official site

Download the latest version for Linux (amd64) from the download page, then install:

# Replace version number with the latest available
sudo rm -rf /usr/local/go && \
  sudo tar -C /usr/local -xzf go1.*.linux-amd64.tar.gz

echo 'export PATH="/usr/local/go/bin:${HOME}/go/bin:${PATH}"' >> ~/.bashrc

Rust

A language empowering everyone to build reliable and efficient software. Official site

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

After installation, reopen your terminal so cargo becomes available.

Shell Customization

starship

A minimal, fast, and customizable prompt for any shell. GitHub

cargo install --locked starship

echo 'eval "$(starship init bash)"' >> ~/.bashrc

atuin

Magical shell history with sync, search, and backup capabilities. GitHub

cargo install --locked atuin

curl https://raw.githubusercontent.com/rcaloras/bash-preexec/master/bash-preexec.sh -o ~/.bash-preexec.sh
echo '[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh' >> ~/.bashrc

echo 'eval "$(atuin init bash)"' >> ~/.bashrc

Next Steps

After completing the basic setup, continue with:

SSH Configuration

SSH (Secure Shell) allows secure authentication and communication with remote systems. This guide walks you through setting up SSH keys for authentication.

Generating SSH Keys

SSH keys provide a secure authentication method. We’ll use the modern Ed25519 algorithm for strong security and small key size.

Silent Key Generation

Generate SSH keys automatically without prompts. This will create or overwrite ~/.ssh/id_ed25519 (private key) and ~/.ssh/id_ed25519.pub (public key):

ssh-keygen -q -t ed25519 -N '' <<< $'\ny' >/dev/null 2>&1

Interactive Key Generation

Alternatively, generate keys interactively with prompts for passphrase and file location:

ssh-keygen -t ed25519

Verifying SSH Keys

Check if your private key exists:

test -f ~/.ssh/id_ed25519 && echo "Private key exists" || echo "Private key not found"

Check if your public key exists:

test -f ~/.ssh/id_ed25519.pub && echo "Public key exists" || echo "Public key not found"

Next Steps

After generating your SSH keys:

  • Add your public key (~/.ssh/id_ed25519.pub) to your GitHub account or other remote systems
  • Use your private key for secure authentication to remote servers
  • Consider adding a passphrase to your SSH key for additional security

Recommended CLI Tools

The following modern CLI tools improve productivity and user experience. All are optional but highly recommended. They are installed via Cargo (Rust’s package manager).

bat

A cat clone with syntax highlighting and Git integration. GitHub

cargo install --locked bat

fd

A simple, fast, and user-friendly alternative to find. GitHub

cargo install --locked fd-find

zoxide

A smarter cd command that learns your habits. GitHub

cargo install --locked zoxide

echo 'eval "$(zoxide init bash)"' >> ~/.bashrc

xh

A friendly and fast tool for sending HTTP requests, similar to HTTPie. GitHub

cargo install --locked xh

gitui

A blazing fast terminal UI for Git written in Rust. GitHub

cargo install --locked gitui

Azure Authentication

Azure CLI

The Azure Command Line Interface (CLI) provides command-line tools for managing Azure resources and services. Official site

curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

Dual Account Setup

BRITA uses a dual-account security model to protect resources and maintain proper access control. As a developer, you will have two separate accounts:

  • Normal Account: kreinwasser@brita.net - Use for daily communication, email, and Microsoft Teams. This account has standard user permissions.
  • Admin Account: adm_kreinwasser@brita.net - Use for Azure CLI operations and infrastructure management. This account has extended permissions on Azure resources you need to work with. This account must be secured with MFA (Multi-Factor Authentication).

Daily Login Workflow

Follow this workflow at the start of each workday or after rebooting your machine:

1. Prepare Your Browser Sessions

Keep your normal browser session (using kreinwasser@brita.net) open for email, Teams, and regular work. You’ll use this session to authenticate with the admin account for Azure CLI.

2. Open a Private Browser Window

Open a private/incognito window in your web browser. This ensures clean session isolation from your normal account and prevents accidental cross-account operations.

3. Login with Admin Account

In the private browser window, navigate to the Azure portal or a login page and authenticate with your admin account:

  • Username: adm_kreinwasser@brita.net
  • Password: Your admin account password
  • MFA: Complete the Multi-Factor Authentication challenge when prompted

Keep this private window open and ready.

4. Authenticate via Azure CLI

In your terminal, initiate the Azure login process:

az login

This command will automatically detect that interactive authentication is available and open a login page in your default (normal) browser.

5. Complete Authentication in Private Window

Since the login page opened in your normal browser, copy the URL from your browser’s address bar and paste it into the address bar of your private browser window (the one where you’re already logged in with adm_kreinwasser@brita.net).

This allows the authentication to complete with your admin account credentials while keeping the session separate from your normal account. Your Azure CLI will now be authenticated with the admin account and ready to use.

Tip: If you find it easier, you can simply navigate to portal.azure.com directly in your private window and log in with your admin account.

6. You’re Ready to Work

Your terminal now has access to Azure resources through the admin account. You can proceed with infrastructure operations, deployments, and other Azure CLI commands.

Important Security Reminders

  • Never log in with your admin account in your normal browser session - Always use a private/incognito window to keep accounts separated
  • MFA is mandatory - Your admin account must have MFA enabled for security
  • Don’t share credentials - Your admin account credentials should be known only to you and securely managed
  • Re-authenticate as needed - If your Azure CLI session expires, repeat the login workflow above

Troubleshooting

If you encounter issues during login:

  1. Clear browser cache - In your private window, clear cookies and cache
  2. Check MFA device - Ensure your MFA device is available and working
  3. Verify account spelling - Double-check that you’re using adm_kreinwasser@brita.net (with “adm_” prefix)
  4. Restart the process - If problems persist, start the workflow from step 1

Session Duration

Azure CLI sessions typically remain valid for extended periods, but you may need to re-authenticate if:

  • Your machine reboots
  • You close your private browser window
  • The session expires due to inactivity
  • Azure security policies require re-authentication

When in doubt, simply repeat the login workflow above.

Development Tools

This guide covers additional development tools that complement the basic setup.

NVM (Node Version Manager)

A version manager for Node.js that allows you to install and switch between multiple Node.js versions. Official site

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

After installation, restart your terminal or run:

source ~/.bashrc

.NET SDK

The .NET SDK includes everything needed to build and run .NET applications. Official site

curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --channel LTS --install-dir /usr/share/dotnet

After installation, add the following to your ~/.bashrc:

export PATH="/usr/share/dotnet:${HOME}/.dotnet/tools:${PATH}"

Then restart your terminal or run:

source ~/.bashrc

JetBrains Toolbox

A manager for JetBrains IDEs that allows you to install, update, and manage multiple JetBrains products. Official site

  1. Download the latest .tar.gz from https://www.jetbrains.com/toolbox-app/download/

  2. Extract the archive:

    tar -xzf jetbrains-toolbox-*.tar.gz
    
  3. Run the application:

    ./jetbrains-toolbox-*/bin/jetbrains-toolbox
    

GitHub CLI and Code Editor

This guide covers the essential tools for version control and code editing.

GitHub CLI

A command-line interface for GitHub that lets you manage repositories, issues, pull requests, and other GitHub features directly from your terminal. Official site

(type -p wget >/dev/null || (sudo apt update && sudo apt install wget -y)) \
    && sudo mkdir -p -m 755 /etc/apt/keyrings \
    && out=$(mktemp) && wget -nv -O$out https://cli.github.com/packages/githubcli-archive-keyring.gpg \
    && cat $out | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null \
    && sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg \
    && sudo mkdir -p -m 755 /etc/apt/sources.list.d \
    && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
    && sudo apt update \
    && sudo apt install gh -y

GitHub Copilot CLI

An AI-powered coding assistant for your terminal that brings GitHub Copilot’s capabilities directly to the command line. Requires Node.js v22+ and an active Copilot subscription. Official site

npm install -g @github/copilot

Launch with:

copilot

Visual Studio Code

A lightweight but powerful source code editor with built-in support for debugging, syntax highlighting, intelligent code completion, and extensions. Official site

Install the editor first, then add recommended extensions for improved development experience:

code --install-extension "DavidAnson.vscode-markdownlint"
code --install-extension "esbenp.prettier-vscode"
code --install-extension "foxundermoon.shell-format"
code --install-extension "ms-azuretools.vscode-docker"
code --install-extension "ms-vscode-remote.remote-containers"
code --install-extension "redhat.vscode-xml"
code --install-extension "redhat.vscode-yaml"
code --install-extension "shardulm94.trailing-spaces"
code --install-extension "timonwong.shellcheck"
code --install-extension "zxh404.vscode-proto3"

Infrastructure Tools

This guide covers tools for infrastructure as code and cloud resource management.

OpenTofu

An open-source infrastructure as code tool for provisioning and managing cloud resources. It’s a community-driven fork of Terraform with enhanced features and flexibility. Official site

curl --proto '=https' --tlsv1.2 -fsSL https://get.opentofu.org/install-opentofu.sh -o install-opentofu.sh
chmod +x install-opentofu.sh
./install-opentofu.sh --install-method deb
rm -f install-opentofu.sh