fix: support backrest installation as an openrc service (#947)
Some checks failed
Release Please / release-please (push) Has been cancelled
Release Preview / call-reusable-release (push) Has been cancelled
Test / test-nix (push) Has been cancelled
Test / test-win (push) Has been cancelled
Update Restic / update-restic-version (push) Has been cancelled

This commit is contained in:
Garret_94
2025-10-25 05:21:44 +02:00
committed by GitHub
parent ecf74f9112
commit 32ead81622
2 changed files with 84 additions and 19 deletions

View File

@@ -28,12 +28,16 @@ else
echo "Local access only: Backrest will bind to 127.0.0.1:9898, run ./install.sh --allow-remote-access to enable remote access" echo "Local access only: Backrest will bind to 127.0.0.1:9898, run ./install.sh --allow-remote-access to enable remote access"
fi fi
install_or_update_unix() { stop_systemd_service() {
if systemctl is-active --quiet backrest; then if systemctl is-active --quiet backrest; then
sudo systemctl stop backrest sudo systemctl stop backrest
echo "Paused backrest for update" echo "Paused backrest for update"
fi fi
install_unix }
stop_openrc_service() {
sudo rc-service backrest --ifstarted stop
echo "Paused backrest for update (if started)"
} }
install_unix() { install_unix() {
@@ -44,11 +48,6 @@ install_unix() {
} }
create_systemd_service() { create_systemd_service() {
if [ ! -d /etc/systemd/system ]; then
echo "Systemd not found. This script is only for systemd based systems."
exit 1
fi
if [ -f /etc/systemd/system/backrest.service ]; then if [ -f /etc/systemd/system/backrest.service ]; then
echo "Systemd unit already exists. Skipping creation." echo "Systemd unit already exists. Skipping creation."
return 0 return 0
@@ -74,6 +73,42 @@ EOM
echo "Reloading systemd daemon" echo "Reloading systemd daemon"
sudo systemctl daemon-reload sudo systemctl daemon-reload
echo "Enabling systemd service backrest.service"
sudo systemctl enable backrest
sudo systemctl start backrest
}
create_openrc_service() {
if [ -f /etc/init.d/backrest ]; then
echo "Openrc service already exists. Skipping creation."
return 0
fi
echo "Creating openrc service at /etc/init.d/backrest"
sudo tee /etc/init.d/backrest > /dev/null <<- EOM
#!/sbin/openrc-run
description="Backrest Service"
depend() {
need loopback
use net logger
}
command=/usr/local/bin/backrest
command_background=true
pidfile="/run/\${RC_SVCNAME}.pid"
command_user="$(whoami):$(whoami)"
export BACKREST_PORT=$BACKREST_PORT
EOM
sudo chmod 755 /etc/init.d/backrest
echo "Adding backrest to runlevel default"
sudo rc-update add backrest default
echo "Reloading openrc service"
sudo rc-service backrest start
} }
create_launchd_plist() { create_launchd_plist() {
@@ -120,11 +155,28 @@ if [ "$OS" = "Darwin" ]; then
sudo xattr -d com.apple.quarantine /usr/local/bin/backrest # remove quarantine flag sudo xattr -d com.apple.quarantine /usr/local/bin/backrest # remove quarantine flag
elif [ "$OS" = "Linux" ]; then elif [ "$OS" = "Linux" ]; then
echo "Installing on Linux" echo "Installing on Linux"
install_or_update_unix
create_systemd_service systemctl --version
echo "Enabling systemd service backrest.service" systemd_=$?
sudo systemctl enable backrest rc-status --version
sudo systemctl start backrest openrc_=$?
if [ $systemd_ -eq 0 ]; then
echo "Systemd found."
stop_systemd_service
install_unix
create_systemd_service
elif [ $openrc_ -eq 0 ]; then
echo "Openrc found."
stop_openrc_service
install_unix
create_openrc_service
else
echo "neither systemd nor openrc were found"
fi
else else
echo "Unknown OS: $OS. This script only supports Darwin and Linux." echo "Unknown OS: $OS. This script only supports Darwin and Linux."
exit 1 exit 1

View File

@@ -8,11 +8,6 @@ uninstall_unix() {
} }
remove_systemd_service() { remove_systemd_service() {
if [ ! -d /etc/systemd/system ]; then
echo "Systemd not found. This script is only for systemd based systems."
exit 1
fi
echo "Removing systemd service at /etc/systemd/system/backrest.service" echo "Removing systemd service at /etc/systemd/system/backrest.service"
sudo systemctl stop backrest sudo systemctl stop backrest
sudo systemctl disable backrest sudo systemctl disable backrest
@@ -22,6 +17,13 @@ remove_systemd_service() {
sudo systemctl daemon-reload sudo systemctl daemon-reload
} }
remove_openrc_service() {
echo "Removing openrc service at /etc/init.d/backrest"
sudo rc-service backrest --ifstarted stop
sudo rc-update del backrest default
sudo rm -f /etc/init.d/backrest
}
remove_launchd_plist() { remove_launchd_plist() {
echo "Removing launchd plist at /Library/LaunchAgents/com.backrest.plist" echo "Removing launchd plist at /Library/LaunchAgents/com.backrest.plist"
@@ -39,9 +41,20 @@ if [ "$OS" = "Darwin" ]; then
elif [ "$OS" = "Linux" ]; then elif [ "$OS" = "Linux" ]; then
echo "Unnstalling on Linux" echo "Unnstalling on Linux"
uninstall_unix uninstall_unix
remove_systemd_service
echo "Done -- run 'systemctl status backrest' to check the status of the service." systemctl --version
systemd_=$?
rc-status --version
openrc_=$?
if [ $systemd_ -eq 0 ]; then
remove_systemd_service
echo "Done -- run 'systemctl status backrest' to check the status of the service."
elif [ $openrc_ -eq 0 ]; then
remove_openrc_service
echo "Done -- run 'rc-service backrest status' to check the status of the service."
fi
else else
echo "Unknown OS: $OS. This script only supports Darwin and Linux." echo "Unknown OS: $OS. This script only supports Darwin and Linux."
exit 1 exit 1