Zum Hauptinhalt springen

Entwicklermodus

Die Bluefin Developer Experience (bluefin-dx) ist ein dediziertes Entwickler-Image mit gebündelten Tools. Im Gegensatz zu herkömmlichen Linux-Systemen sind Betriebssystem und Entwicklungsumgebung explizit und absichtlich getrennt. Das bedeutet, dass Tooling nicht auf dem Host installiert wird, sondern containerisiert ist, in einer virtuellen Maschine oder auf das Home-Verzeichnis des Nutzers beschränkt. Es ist darauf ausgelegt, diese Anwendungsfälle zu erfüllen:

Bluefin ist bestrebt, Folgendes auszuliefern:

Gemeinsam stärker

Es gibt 15,6 Millionen Cloud-Native-Entwickler auf der Welt. Unser Workflow basiert auf den Entwicklungslehren aus diesen Techniken

Der Cloud-Native-Entwicklungsansatz​

Bluefin geht „all in“ auf Cloud-Native-Entwicklung und wird anders verwendet als eine traditionelle Distribution wie Ubuntu:

  • Entwicklung erfolgt in Containern; gängige Container-Muster sind:
  • Befehlszeilen-Anwendungen werden mit Homebrew installiert
  • Vorkonfigurierte Ad-hoc-Container für Ubuntu, Fedora und Wolfi sind enthalten. Verwende die Distribution, die du möchtest.

Dies unterscheidet sich von traditionellen Distributionen, indem es den Entwicklungsprozess betriebssystemagnostisch macht. Es gibt auf Bluefin kein Äquivalent zu apt install php; Entwicklung erfolgt mit podman oder docker direkt über eine IDE.

Wir glauben auch an einfachen Zugang zu anderen florierenden Ökosystemen wie Python via uv. Wir werfen das Handtuch auf „ein Linux-System-Paketmanager, um sie alle zu beherrschen“, weil diese Ökosysteme selbst Giganten sind. Kritiker werden sagen, dass wir zu viele Paketmanager ausliefern; wir sagen, dass wir keine Paketmanager ausliefern, sondern Ökosysteme, die Nutzer wollen. Und diese modernen Paketmanager sind für eine Welt gebaut, die auf Containern läuft, weil das tatsächlich stimmt. Und wir wollen sie out of the box auf unseren Desktops.

Warum Cloud Native?

Wir haben das Cloud-Native-Muster gewählt, weil lokale Entwicklung in Containern die Bereitstellung von Containern auf moderner Infrastruktur ermöglicht.

image

Das Muster in bluefin-dx (und aurora-dx) dreht sich um Devcontainer. Da Devcontainer im Git-Repository des Projekts leben, können sie auf jedem Betriebssystem bereitgestellt werden: Linux, macOS oder Windows (via WSL). Dies ermöglicht „von Natur aus verteilte“ Entwicklung und vermeidet, dass Linux-Nutzer „die Außenseiter“ sind, wenn sie mit Teamkollegen auf anderen Betriebssystemen arbeiten.

Jedes Projekt enthält eine deklarative Umgebung, die den Nutzer mit einem „Best Practice“-Cloud-Native-Workflow out of the box starten lassen soll. Der Ultimate Guide to Dev Containers hat einen guten Beitrag über die Vorteile der Verwendung von Devcontainern. Das bedeutet, dass die Entwicklungsumgebung in der Versionsverwaltung gehalten wird, statt an den Host gekoppelt zu sein.

Homebrew kann auch verwendet werden, um Entwicklungstools zu installieren. Es wird jedoch empfohlen, dies zu vermeiden und die Abhängigkeiten des Projekts in der Versionsverwaltung zu deklarieren. Es ist manchmal so bequem, it's okay.

Mise ist ein Tool, mit dem du bestimmte Versionen von Anwendungen für ein Projekt installieren kannst (zum Beispiel Node 20 in einem Projekt und Node 21 in einem anderen). Du kannst die mise.toml-Datei in deinem Repository verwenden, um festzuhalten, welche bestimmten Tools du benötigst. Diese können auch global installiert werden. Dies kann ähnlich wie Devcontainer verwendet werden, erfordert aber nicht, dass du in einen Container wechselst, um es zu verwenden.

Du kannst immer verwenden, was du willst. Du musst nicht alles hier verwenden, um produktiv zu sein — am Ende des Tages ist es dein Computer und dies ist ein Satz von Standards.

Entwicklermodus aktivieren​

Das Aktivieren des Entwicklermodus ist ein zweistufiger Prozess:

Schritt 1: Aktivieren​

ujust devmode zum Aktivieren oder Deaktivieren des dx-Modus, dann neu starten:

image

Schritt 2: Füge dich den richtigen Gruppen hinzu​

ujust dx-group — um deinen Benutzer-Account den richtigen Gruppen hinzuzufügen. Dann neu starten. Dieser Schritt muss nur einmal durchgeführt werden.

Wie bei allen Universal-Blue-Images ist der Wechsel atomar, was ein sauberes Umschalten zwischen den Modi je nach Anwendungsfall ermöglicht.

Funktionen​

Visual Studio Code mit Docker​

Visual Studio Code ist im Image als Standard-IDE enthalten. Es kommt mit der bereits installierten Devcontainer-Erweiterung. Es ist die empfohlene Entwicklererfahrung, also starte hier, wenn du neu in der containerisierten Entwicklung bist!

Die aktuellste Docker Engine ist standardmäßig enthalten und ist als Standard-Container-Runtime für VSCode eingerichtet. docker compose zu verwenden ist auch eine großartige Möglichkeit, in die Container-Entwicklung einzusteigen, und ist eine Option, wenn Devcontainer nicht zu deinem Stil passen. Beachte, dass Docker Desktop nicht verfügbar ist; verwende Podman Desktop für grafische Container-Verwaltung.

Podman mit Dev Containern verwenden​

Die Dev-Containers-Erweiterung verwendet standardmäßig Docker. Um sie auf Podman umzustellen, füge diese Einstellungen zu VS Code hinzu:

"dev.containers.dockerComposePath": "podman-compose"
"dev.containers.dockerPath": "podman"
"dev.containers.dockerSocketPath": "/run/user/1000/podman/podman.sock"

Führe systemctl --user status podman.socket aus, um den Socket-Pfad für deine Benutzer-ID zu bestätigen. Für rootful Podman verwende /run/podman/podman.sock.

SELinux-Fehlerbehebung: Wenn dein Devcontainer mit SELinux-Zugriffsfehlern nicht startet (prüfe ausearch -m avc -ts recent), führe restorecon -R -v $HOME/.local/share aus. Für Volume-Mount-Fehler führe restorecon -R -v /path/to/your/project aus. Als letztes Mittel kannst du die SELinux-Beschriftung für einen bestimmten Container in .devcontainer/devcontainer.json deaktivieren:

{
"runArgs": ["--security-opt", "label=disable"]
}

Podman und Podman Desktop​

Podman Desktop

Podman Desktop ist enthalten, um Container-Verwaltung bereitzustellen. Sieh in die Podman Desktop-Dokumentation für weitere Informationen. Alle Upstream-podman-Tools sind enthalten. Dies ist die Standard-System-Container-Runtime und ist die empfohlene Entwicklerkonfiguration für neue Nutzer.

Eingebaute Performance-Tools​

Sysprof ist als systemweiter Performance-Profiler enthalten. Sowie Brendan Greggs empfohlene CLI-Tools:

  • bcc, bpftrace, iproute2, nicstat, numactl, sysprof, sysstat, tiptop, trace-cmd und util-linux

Dank an Ubuntu und Canonical für die detaillierte Spezifikation und Begründung. Das Projekt hofft, dass die Aufnahme von Performance-Tools zu besserer Upstream-Software führen wird.

Quality-of-Life-Verbesserungen​

  • Eine Sammlung gut kuratierter Monospace-Schriften
  • Just Task-Runner für Automatisierungsaufgaben
  • fish und zsh als optionale Shells verfügbar

Pet-Container​

Pet-Container sind als interaktive Terminals via Distrobox verfügbar. Verwalte diese über die enthaltene DistroShelf-Anwendung, verfügbar über das Logomenü oben links auf deinem Desktop unter „Container“:

image

Verwende die DistroShelf-Oberfläche, um deine eigenen Pet-Container aus der in der Liste enthaltenen Distribution zu erstellen:

image

Für CLI-Krieger kannst du deine Container mit der eingebauten Container-Unterstützung des Terminals verwalten:

image

Das enthaltene Terminal enthält ein Host-Terminal, sodass du schnell zwischen Containern und dem Host wechseln kannst.

  • Das Standard-Terminal ist Ptyxis, das eingebaute Integration von Distrobox-Containern enthält. Es ist im Menü als „Terminal“ aliasiert. Es ist standardmäßig auf Strg-Alt-Eingabe zum Schnellstart gebunden
  • Podman Desktop — Container und Kubernetes für Anwendungsentwickler
  • Pods ist auch eine großartige Möglichkeit, deine Container grafisch zu verwalten

Andere Tools​

JetBrains​

ujust jetbrains-toolbox holt und installiert die JetBrains Toolbox-Anwendung, die die Installation der JetBrains-Tool-Sammlung verwaltet. Diese Anwendung übernimmt Installation, Entfernung und Upgrade der JetBrains-Produkte und wird vollständig in deinem Home-Verzeichnis gehandhabt, unabhängig vom Betriebssystem-Image. Wir empfehlen nicht, die JetBrains-Flatpaks zu verwenden.

Der JetBrains-Blog hat auch weitere Informationen zur JetBrains-Dev-Containers-Unterstützung:

Neovim​

brew install neovim devcontainer und folge dann diesen Anweisungen für ein Devcontainer-Setup:

Virtualisierung und Container-Runtimes​

  • virt-manager und zugehörige Tools (KVM, qemu)
  • Incus stellt System-Container bereit

Lokale Anwendungsentwicklung​

GNOME Builder ist der empfohlene Anwendungs-Stack zum Erstellen von Anwendungen.

Kubernetes​

Installiere einen gemeinsamen Satz von Tools, die von Kubernetes-Administratoren verwendet werden, via Homebrew (brew install <name>):

NameBeschreibung
cdk8sDefiniert Kubernetes-Anwendungen und wiederverwendbare Abstraktionen mit vertrauten Programmiersprachen
daggerEin portables Devkit für CI/CD-Pipelines
grypeEin Vulnerability-Scanner für Container-Images und Dateisysteme
helmDer Paketmanager für Kubernetes
k0sctlEin Befehlszeilen-Tool zum Bootstrappen und Verwalten von k0s-Kubernetes-Clustern
k3supEin leichtgewichtiges Utility, um k3s auf jeder lokalen oder Remote-VM zu installieren
k9sStellt eine Terminal-UI zur Interaktion mit deinen Kubernetes-Clustern bereit
kindEin Tool zum Ausführen lokaler Kubernetes-Cluster mit Docker-Container-„Knoten“
kubectlDas Kubernetes-Befehlszeilen-Tool, mit dem du Befehle gegen Kubernetes-Cluster ausführen kannst
kubectxEin Tool zum schnelleren Wechseln zwischen Kontexten (Clustern) in kubectl
packEin CLI-Tool zum Erstellen von Apps mit Cloud-Native Buildpacks
syftEin CLI-Tool und eine Bibliothek zum Erzeugen einer Software Bill of Materials (SBOM) aus Container-Images und Dateisystemen

CNCF-Tools​

Für Zugriff auf die vollständige Suite von Cloud Native Computing Foundation-Tools verwende ujust cncf, um aus einer umfangreichen Sammlung von 89 CNCF-Projekten zu browsen und zu installieren, einschließlich graduierter, inkubierender und Sandbox-Tools. Dies umfasst Argo, Cilium, Envoy, Flux, Istio, Linkerd, Prometheus und viele mehr.

Fonts​

Installiere kuratierte Entwickler-Fonts via Homebrew (brew install --cask <font-name>) oder verwende das enthaltene Embellish-Tool:

Name
CaskaydiaMono Nerd Font
Comic Shanns Mono Nerd Font
Droid Sans Mono Nerd Font
Go Mono Nerd Font
Blex Mono Nerd Font
Sauce Code Pro Nerd Font
Source Code Pro
Ubuntu Nerd Font
FiraCode Nerd Font
0xProto Nerd Font

Benutzerdefinierte Images mit Finpilot bauen​

Wenn du dein eigenes angepasstes, boot-fähiges bootc-Betriebssystem-Image basierend auf Bluefin erstellen möchtest:

  • finpilot stellt ein offizielles Template-Repository zum Bauen benutzerdefinierter Linux-Images bereit.
  • Implementiert eine mehrstufige Container-Build-Architektur für gelayerte Pakete, Konfigurationsdateien und Desktop-Anpassungen.
  • Enthält GitHub-Actions-Workflows für automatisierte Builds, schlüsselloses Image-Signing via Cosign und Veröffentlichung in der GitHub Container Registry (GHCR).
  • Um dein benutzerdefiniertes Image bereitzustellen, wechsle mit:
    sudo bootc switch ghcr.io/<your-username>/<your-image>:latest --enforce-container-sigpolicy

Contributors to this page

  • Aelvryx
  • castrojo
  • liachra
  • rwaltr
  • salim-b
  • xordspar0