about summary refs log tree commit diff
path: root/bundles/svtree
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2025-09-07 17:32:13 +0200
committerRobert Günzler <r@gnzler.io>2025-09-25 13:15:27 +0200
commitf2c4058bb88d6885f54e4b5025e6b7ca5541be9d (patch)
treee082acbb26a0078484e0772bdf72780c3268b63f /bundles/svtree
parentff3b77299dc6af690c834a83459bb594b0f1bdc6 (diff)
replace s6 with svtree bundle
Signed-off-by: Robert Günzler <r@gnzler.io>
Diffstat (limited to 'bundles/svtree')
-rw-r--r--bundles/svtree/items.py77
-rw-r--r--bundles/svtree/metadata.py9
2 files changed, 86 insertions, 0 deletions
diff --git a/bundles/svtree/items.py b/bundles/svtree/items.py
new file mode 100644
index 0000000..809f869
--- /dev/null
+++ b/bundles/svtree/items.py
@@ -0,0 +1,77 @@
+if node.os != "alpine":
+    raise BundleError(f"{node.name}: OS {node.os} is not supported.")
+
+git_deploy = {
+    "/opt/svtree": {
+        'repo': "https://git.sr.ht/~robertgzr/svtree",
+        'rev': "master",
+    },
+}
+
+symlinks = {
+    "/etc/init.d/svtree": {
+        'target': "/opt/svtree/openrc.service",
+        'needs': {"git_deploy:/opt/svtree"},
+    },
+    "/etc/s6-rc/templates/service": {
+        'target': "/opt/svtree/templates/service",
+        'needs': {"git_deploy:/opt/svtree"},
+    },
+    "/usr/bin/sv": {
+        'target': "/opt/svtree/bin/sv",
+        'needs': {"git_deploy:/opt/svtree"},
+    },
+}
+
+directories = {
+    "/opt/svtree": {},
+
+    "/etc/s6-rc/src": { 'purge': True },
+    "/etc/s6-rc/templates": { 'purge': True },
+    '/etc/s6-rc/generate': { 'purge': True },
+
+    "/etc/s6-rc/src/default/contents.d": { 'purge': True },
+
+    "/etc/s6-rc/src/services/contents.d": { 'purge': True },
+    "/etc/s6-rc/services": { 'purge': True },
+}
+
+files = {
+    "/etc/s6-rc/src/default/type": {
+        "content_type": "text",
+        "content": "bundle",
+        "triggers": {
+            "svc_openrc:svtree:reload",
+        },
+    },
+
+    "/etc/s6-rc/src/services/type": {
+        "content_type": "text",
+        "content": "bundle",
+        "triggers": {
+            "svc_openrc:svtree:reload",
+        },
+    },
+    "/etc/s6-rc/src/default/contents.d/services": {
+        "content_type": "text",
+        "content": "",
+        "triggers": {
+            "svc_openrc:svtree:reload",
+        },
+    },
+}
+
+svc_openrc = {
+    "svtree": {
+        'enabled': True,
+        'running': True,
+        'needs': {"symlink:/etc/init.d/svtree"},
+    },
+}
+
+for service, _ in node.metadata.get("services", {}).items():
+    svc_s6rc[service] = {
+        'runlevel': "default",
+        'bundle': "services",
+        'generate': "service",
+    }
diff --git a/bundles/svtree/metadata.py b/bundles/svtree/metadata.py
new file mode 100644
index 0000000..0ddc51b
--- /dev/null
+++ b/bundles/svtree/metadata.py
@@ -0,0 +1,9 @@
+defaults = {
+    "apk": {
+        "packages": {
+            "coreutils": {}, # TODO: make scripts busybox compatible
+            "s6-rc": {},
+            "s6-portable-utils": {},
+        },
+    },
+}