workstation-setup

This repository documents reproducible Fedora workstation and server-oriented (non-GUI) research environments used by FS-ISE.

TipSupported platform

The workstation and cloud stacks are tested/supported on Fedora 44 x86_64. Their preflight role rejects other distributions, Fedora major versions, and architectures before running installation or configuration roles. Use the lab stack for Fedora Workstation and the cloud stack for an existing server-oriented (non-GUI) system.

The workstation stack includes:

We use Ansible to translate the following pragmatic principles into a reproducible workstation setup:

Research work often depends on fast-moving open-source software, custom tools, and local services. Ansible is the mechanism used here to turn that changing setup knowledge into a programmatic desired state: packages, configuration files, services, and checks can be reviewed in Git, applied to a new machine, and reapplied during maintenance. The diagram shows how the same repository connects initial setup, recurring updates, backup/sync, and data restoration.

flowchart TD
  %% External infrastructure (outside the subgraphs)
  GH[(<a href='backup.html#github'>GitHub</a>)]
  BK[(<a href='backup.html#hdd-backup'>HDD Backup</a>)]
  NC[(<a href='backup.html#nextcloud'>Nextcloud</a>)]
  A[("<a href='https://github.com/fs-ise/workstation-setup'>workstation-setup<br/>(Ansible)</a>")]

  %% Day-to-day flow
  subgraph Daily["<strong>Day-to-day operations</strong>"]
     AUpd["<a href='update_software.html'>Update software</a>"] --> S[<a href='backup.html'>Backup and sync</a>]
     S --> AUpd
  end
  A <-.-> AUpd

  S -. "~/*" .-> BK
  S <-. ~/repos* .-> GH
  S <-. ~/Nextcloud* .-> NC


  %% New machine flow
  subgraph New["<strong>New machine</strong>"]
    OS[<a href='install_os.html'>Install OS/Ansible</a>]
    OS --> AInst["<a href='install_software.html'>Install software</a>"] --> R
    R[<a href='restore.html'>Set up/restore data</a>]
  end
  A -.-> AInst

  BK -.-> R
  GH -.-> R
  NC -.-> R

  %% Styling
  classDef highlight fill:#ffec99,stroke:#f08c00,stroke-width:3px,color:#1b1b1b;
  classDef muted fill:#f6f7f9,stroke:#c9ced6,stroke-width:1px,color:#2b2b2b;

  class A highlight;
  class GH,BK,NC,AUpd,S,OS,AInst,R muted;

  %% Optional: soften subgraph borders
  style Daily fill:#ffffff,stroke:#d0d5dd,stroke-width:1px;
  style New fill:#ffffff,stroke:#d0d5dd,stroke-width:1px;

NoteWhy Ansible?

Workstation setup is a recurring configuration-management task. The same packages, defaults, accounts, and documentation links need to be applied consistently across notebooks and external drives. Ansible is useful here because the desired setup can be documented as code, reviewed in Git, rerun after changes, and reused as the setup evolves.

See how Uber uses Ansible playbooks for daily backup, generation, and push workflows in its corporate network setup: How Ansible Automation Powers the Uber Corporate Network at a Global Scale.