Zum Inhalt

Dev-Tools

Der Pi ist als vollständige Entwicklungsmaschine für ARM64 eingerichtet. Tools, die in den offiziellen Debian-Paketen nicht oder zu alt vorhanden sind, werden als ARM64-Binaries direkt installiert und über update-devtools aktuell gehalten.

Übersicht

Kategorie Tool Versionsmanager Wechsel
Runtime Node.js nvm nvm use 22
Runtime Python uv uv python pin 3.12
Runtime Go manuell Binary-Tausch
Runtime Rust rustup rustup default stable
Container Podman apt Docker-kompatibel, kein Daemon
IaC Terraform Binary update-devtools terraform
IaC OpenTofu Binary update-devtools tofu
K8s kubectl Binary update-devtools kubectl
K8s Helm Binary update-devtools helm
K8s kubectx/kubens apt Context/Namespace-Switcher
AI Claude Code nativer Installer claude update

Runtimes

Node.js via nvm

nvm ermöglicht parallele Node.js-Versionen ohne Root-Rechte.

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

nvm install --lts
nvm alias default lts/*

Die nvm-Integration ist in bash/bashrc_custom.sh eingebunden. Versionswechsel: nvm install 22 / nvm use 22

Python via uv

uv von Astral ersetzt pyenv, pip, virtualenv und pip-tools in einem Rust-basierten Tool. Es hat native ARM64-Unterstützung und ist deutlich schneller als klassische Python-Toolchains.

curl -LsSf https://astral.sh/uv/install.sh | sh
source ~/.bashrc

uv python install 3.12 3.13
uv python install 3.13 --default

Pro-Projekt-Pinning: uv python pin 3.12 (schreibt .python-version) Virtual Environments: uv venv / uv add <paket>

Go (manuell)

Go wird direkt als ARM64-Binary von go.dev installiert, ohne Paketmanager.

GO_VERSION=$(curl -s https://go.dev/VERSION?m=text | head -1)
wget "https://go.dev/dl/${GO_VERSION}.linux-arm64.tar.gz"
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf "${GO_VERSION}.linux-arm64.tar.gz"
rm "${GO_VERSION}.linux-arm64.tar.gz"

Der PATH (/usr/local/go/bin und $HOME/go/bin) ist in bash/bashrc_custom.sh gesetzt. Update: Gleiche Schritte erneut ausführen.

Rust via rustup

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

Versionswechsel: rustup default stable / rustup install nightly

Container Runtime: Podman

Podman statt Docker — kein Daemon-Prozess, rootless-fähig, weniger RAM-Verbrauch. Das Paket podman-docker stellt einen docker-Alias bereit, sodass alle Docker-Befehle transparent über Podman laufen.

sudo apt install -y podman podman-compose buildah skopeo podman-docker

# Rootless-Support aktivieren
sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER
podman system migrate
Docker Podman-Äquivalent
docker run podman run (oder via podman-docker transparent)
docker build podman build / buildah
docker-compose podman-compose
docker push/pull podman push/pull / skopeo
dockerd (Daemon) nicht nötig

Kubernetes-Tools

kubectl und Helm

kubectl und Helm werden als ARM64-Binaries nach /usr/local/bin installiert und über update-devtools aktuell gehalten (siehe unten).

# Erstinstallation kubectl
KUBECTL_VERSION=$(curl -fsSL https://dl.k8s.io/release/stable.txt)
curl -LO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/arm64/kubectl"
chmod +x kubectl && sudo mv kubectl /usr/local/bin/

# Erstinstallation Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

kubectx + kubens

sudo apt install -y kubectx

kubectx wechselt den Kubernetes-Kontext, kubens den Namespace — beide ohne den vollen kubectl config use-context-Befehl tippen zu müssen.

Infrastructure as Code

Terraform und OpenTofu sind parallel installiert. Beide werden als ARM64-Binaries direkt nach /usr/local/bin installiert — ohne HashiCorp- oder OpenTofu-APT-Repos, weil diese ARM64 nicht immer zeitnah unterstützen.

Erstinstallation manuell (danach übernimmt update-devtools):

# Terraform
TF_VERSION=$(curl -fsSL https://api.github.com/repos/hashicorp/terraform/releases/latest \
  | jq -r .tag_name | sed 's/^v//')
wget "https://releases.hashicorp.com/terraform/${TF_VERSION}/terraform_${TF_VERSION}_linux_arm64.zip"
unzip "terraform_${TF_VERSION}_linux_arm64.zip"
sudo mv terraform /usr/local/bin/

# OpenTofu
TOFU_VERSION=$(curl -fsSL https://api.github.com/repos/opentofu/opentofu/releases/latest \
  | jq -r .tag_name | sed 's/^v//')
wget "https://github.com/opentofu/opentofu/releases/download/v${TOFU_VERSION}/tofu_${TOFU_VERSION}_linux_arm64.zip"
unzip "tofu_${TOFU_VERSION}_linux_arm64.zip" tofu
sudo mv tofu /usr/local/bin/

update-devtools

Das Skript ~/bin/update-devtools (Quelle: bin/update-devtools im Repo) hält kubectl, Helm, Terraform und OpenTofu aktuell. Es prüft die installierte Version gegen die neueste GitHub-Release und lädt nur bei Bedarf herunter.

Verwendung

update-devtools              # Alle vier Tools prüfen und aktualisieren
update-devtools kubectl      # Nur kubectl
update-devtools terraform    # Nur Terraform
update-devtools tofu         # Nur OpenTofu
update-devtools helm kubectl # Mehrere auswählen

Beispielausgabe:

═══════════════════════════════════════════
  DevTools Update – Raspberry Pi (arm64)
═══════════════════════════════════════════

[INFO]  kubectl: Prüfe auf Updates...
[OK]    kubectl ist aktuell (v1.32.0)

[INFO]  Terraform: Prüfe auf Updates...
[INFO]  Terraform: v1.9.8 → v1.10.0
[OK]    Terraform aktualisiert auf v1.10.0

═══════════════════════════════════════════
  Installierte Versionen:
───────────────────────────────────────────
  kubectl      v1.32.0
  helm         v3.17.0
  terraform    v1.10.0
  tofu         v1.9.0
═══════════════════════════════════════════

Abhängigkeiten

Das Skript benötigt curl, jq und unzip — alle via apt verfügbar. Für die Binaries in /usr/local/bin wird sudo benötigt.

Wöchentlicher Cronjob

Das Skript läuft automatisch jeden Sonntag um 03:00 Uhr. Logs landen in ~/log/update-devtools.log. Einrichtung des Cronjobs:

crontab -l 2>/dev/null | cat - ~/repos/claude-pi/cron/update-devtools.cron | crontab -

Wichtige Pfade

Pfad Inhalt
/usr/local/bin/ kubectl, helm, terraform, tofu
/usr/local/go/ Go Installation
~/.nvm/ Node.js Versionen (nvm)
~/.local/share/uv/ Python Versionen (uv)
~/.cargo/ Rust Toolchain (rustup)
~/bin/ Eigene Skripte (update-devtools)
~/log/ Log-Dateien