]> piware.de Git - bin.git/commitdiff
claude-sysext: Add master
authorMartin Pitt <martin@piware.de>
Sun, 31 Aug 2025 10:49:51 +0000 (12:49 +0200)
committerMartin Pitt <martin@piware.de>
Sun, 31 Aug 2025 10:49:51 +0000 (12:49 +0200)
Script to install claude-code (works in toolbox) as a sysext on the
host.

claude-sysext [new file with mode: 0755]

diff --git a/claude-sysext b/claude-sysext
new file mode 100755 (executable)
index 0000000..a408f66
--- /dev/null
@@ -0,0 +1,52 @@
+#!/bin/sh
+set -eux
+SYSEXT_NAME="claude-code"
+SYSEXT_DIR="/var/lib/extensions/${SYSEXT_NAME}"
+
+inst=/tmp/claude-inst
+
+build() {
+    rm -rf "$inst"
+    npm install -g @anthropic-ai/claude-code --prefix "${inst}/usr"
+}
+
+stop() {
+    if [ -d "$SYSEXT_DIR" ]; then
+        rm -rf "$SYSEXT_DIR"
+        systemd-sysext refresh
+    fi
+}
+
+if [ "${1:-}" = root-stop ]; then
+    stop
+    exit 0
+fi
+
+if [ "${1:-}" = install ]; then
+    stop
+    cp -r "$inst" "$SYSEXT_DIR"
+    mkdir -p "${SYSEXT_DIR}/usr/lib/extension-release.d"
+    echo "ID=_any" > "${SYSEXT_DIR}/usr/lib/extension-release.d/extension-release.${SYSEXT_NAME}"
+
+    systemd-sysext refresh
+
+    echo
+    systemd-sysext status --no-pager
+    exit 0
+fi
+
+# build mode
+
+# call ourselves as root with possible toolbox → host escape
+if [ "${1:-}" = "stop" ]; then
+    arg="root-stop"
+else
+    build
+    arg="install"
+fi
+
+if systemd-detect-virt --quiet --container; then
+    flatpak-spawn --host sudo -S "$0" "$arg"
+else
+    sudo "$0" "$arg"
+fi