From 9e2e6d63affe27a1af7cc033f52312e2a3b02147 Mon Sep 17 00:00:00 2001 From: Justin Zobel Date: Thu, 16 Apr 2026 15:56:05 +0930 Subject: [PATCH] Add Systemd init system support Fixes #77 --- Makefile | 12 ++++++++---- dist/systemd/tiny-cloud-boot.service | 10 ++++++++++ dist/systemd/tiny-cloud-early.service | 11 +++++++++++ dist/systemd/tiny-cloud-final.service | 11 +++++++++++ dist/systemd/tiny-cloud-main.service | 12 ++++++++++++ 5 files changed, 52 insertions(+), 4 deletions(-) create mode 100644 dist/systemd/tiny-cloud-boot.service create mode 100644 dist/systemd/tiny-cloud-early.service create mode 100644 dist/systemd/tiny-cloud-final.service create mode 100644 dist/systemd/tiny-cloud-main.service diff --git a/Makefile b/Makefile index 98e32fe..3794009 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ PREFIX ?= / CLOUDS = $(sort $(notdir $(patsubst %/,%,$(wildcard lib/tiny-cloud/cloud/*/)))) -SUBPACKAGES = core openrc $(CLOUDS) +SUBPACKAGES = core init $(CLOUDS) .PHONY: check install $(SUBPACKAGES) @@ -22,9 +22,13 @@ core: install -Dm755 -t "$(PREFIX)"/usr/sbin \ sbin/tiny-cloud -openrc: - install -Dm755 -t "$(PREFIX)"/etc/init.d \ - dist/openrc/* +init: + [ $(command -v rc-status) ] && \ + install -Dm755 -t "$(PREFIX)"/etc/init.d \ + dist/openrc/* + [ $(command -v systemctl) ] && \ + install -Dm755 -t "$(PREFIX)"/etc/systemd/system \ + dist/systemd/* $(CLOUDS): install -Dm644 -t "$(PREFIX)"/usr/lib/tiny-cloud/cloud/$@ \ diff --git a/dist/systemd/tiny-cloud-boot.service b/dist/systemd/tiny-cloud-boot.service new file mode 100644 index 0000000..c14565c --- /dev/null +++ b/dist/systemd/tiny-cloud-boot.service @@ -0,0 +1,10 @@ +[Unit] +Description=Tiny Cloud Bootstrap - boot phase + +[Service] +Type=oneshot +ExecStart=tiny-cloud boot +Restart=no + +[Install] +WantedBy=multi-user.target diff --git a/dist/systemd/tiny-cloud-early.service b/dist/systemd/tiny-cloud-early.service new file mode 100644 index 0000000..57ec913 --- /dev/null +++ b/dist/systemd/tiny-cloud-early.service @@ -0,0 +1,11 @@ +[Unit] +Description=Tiny Cloud Bootstrap - early phase +After=network.target + +[Service] +Type=oneshot +ExecStart=tiny-cloud early +Restart=no + +[Install] +WantedBy=multi-user.target diff --git a/dist/systemd/tiny-cloud-final.service b/dist/systemd/tiny-cloud-final.service new file mode 100644 index 0000000..8d0e69b --- /dev/null +++ b/dist/systemd/tiny-cloud-final.service @@ -0,0 +1,11 @@ +[Unit] +Description=Tiny Cloud Bootstrap - final phase +After=tiny-cloud-boot.service tiny-cloud-main.service tiny-cloud-early.service + +[Service] +Type=oneshot +ExecStart=tiny-cloud final +Restart=no + +[Install] +WantedBy=multi-user.target diff --git a/dist/systemd/tiny-cloud-main.service b/dist/systemd/tiny-cloud-main.service new file mode 100644 index 0000000..3c1fe20 --- /dev/null +++ b/dist/systemd/tiny-cloud-main.service @@ -0,0 +1,12 @@ +[Unit] +Description=Tiny Cloud Bootstrap - main phase +After=network.target sshd.service + +[Service] +Type=oneshot +ExecStart=tiny-cloud main +Restart=no + +[Install] +WantedBy=multi-user.target +