From cabac732deffafc796537658a6c33c6c4aec821e Mon Sep 17 00:00:00 2001 From: Morgan Smith Date: Thu, 17 Sep 2020 13:03:09 +0200 Subject: [PATCH] guix-install.sh: Support OpenRC. * etc/guix-install.sh (chk_init_sys): Detect OpenRC. (sys_enable_guix_daemon): Install & enable the Guix daemon on such systems. * etc/openrc/guix-daemon.in: New file. * nix/local.mk: Add a rule for it. (openrcservicedir, nodist_openrcservice_DATA): New variables. (CLEANFILES, EXTRA_DIST): Add them. * .gitignore: Ignore etc/openrc/guix-daemon. Signed-off-by: Tobias Geerinckx-Rice --- .gitignore | 1 + etc/guix-install.sh | 15 +++++++++++++++ etc/openrc/guix-daemon.in | 28 ++++++++++++++++++++++++++++ nix/local.mk | 17 +++++++++++++++-- 4 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 etc/openrc/guix-daemon.in diff --git a/.gitignore b/.gitignore index f630444a0f..e2f745b42a 100644 --- a/.gitignore +++ b/.gitignore @@ -74,6 +74,7 @@ /etc/guix-publish.conf /etc/guix-publish.service /etc/init.d/guix-daemon +/etc/openrc/guix-daemon /guix-daemon /guix/config.scm /libformat.a diff --git a/etc/guix-install.sh b/etc/guix-install.sh index 9768f1c620..eb7205a261 100755 --- a/etc/guix-install.sh +++ b/etc/guix-install.sh @@ -4,6 +4,7 @@ # Copyright © 2018 Ricardo Wurmus # Copyright © 2018 Efraim Flashner # Copyright © 2019, 2020 Tobias Geerinckx-Rice +# Copyright © 2020 Morgan Smith # # This file is part of GNU Guix. # @@ -150,6 +151,10 @@ chk_init_sys() _msg "${INF}init system is: sysv-init" INIT_SYS="sysv-init" return 0 + elif [[ $(openrc --version 2>/dev/null) =~ \(OpenRC\) ]]; then + _msg "${INF}init system is: OpenRC" + INIT_SYS="openrc" + return 0 else INIT_SYS="NA" _err "${ERR}Init system could not be detected." @@ -383,6 +388,16 @@ sys_enable_guix_daemon() service guix-daemon start; } && _msg "${PAS}enabled Guix daemon via sysv" ;; + openrc) + { mkdir -p /etc/init.d; + cp "${ROOT_HOME}/.config/guix/current/etc/openrc/guix-daemon" \ + /etc/init.d/guix-daemon; + chmod 775 /etc/init.d/guix-daemon; + + rc-update add guix-daemon default && + rc-service guix-daemon start; } && + _msg "${PAS}enabled Guix daemon via OpenRC" + ;; NA|*) _msg "${ERR}unsupported init system; run the daemon manually:" echo " ${ROOT_HOME}/.config/guix/current/bin/guix-daemon --build-users-group=guixbuild" diff --git a/etc/openrc/guix-daemon.in b/etc/openrc/guix-daemon.in new file mode 100644 index 0000000000..110a58b88d --- /dev/null +++ b/etc/openrc/guix-daemon.in @@ -0,0 +1,28 @@ +#!/sbin/openrc-run +# GNU Guix --- Functional package management for GNU +# Copyright © 2020 Morgan Smith +# +# This file is part of GNU Guix. +# +# GNU Guix is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GNU Guix is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Guix. If not, see . + +export GUIX_LOCPATH=@localstatedir@/guix/profiles/per-user/root/guix-profile/lib/locale +export LC_ALL=en_US.utf8 +command="@localstatedir@/guix/profiles/per-user/root/current-guix/bin/guix-daemon" +command_args="--build-users-group=guixbuild" +command_background="yes" +pidfile="/var/run/guix-daemon.pid" + +output_log="/var/log/guix-daemon-stdout.log" +error_log="/var/log/guix-daemon-stderr.log" diff --git a/nix/local.mk b/nix/local.mk index 005cde5563..2bb01041b9 100644 --- a/nix/local.mk +++ b/nix/local.mk @@ -180,6 +180,17 @@ etc/init.d/guix-daemon: etc/init.d/guix-daemon.in \ "$<" > "$@.tmp"; \ mv "$@.tmp" "$@" +# The service script for openrc. +openrcservicedir = $(sysconfdir)/init.d +nodist_openrcservice_DATA = etc/openrc/guix-daemon + +etc/openrc/guix-daemon: etc/openrc/guix-daemon.in \ + $(top_builddir)/config.status + $(AM_V_GEN)$(MKDIR_P) "`dirname $@`"; \ + $(SED) -e 's|@''localstatedir''@|$(localstatedir)|' < \ + "$<" > "$@.tmp"; \ + mv "$@.tmp" "$@" + # The '.conf' jobs for Upstart. upstartjobdir = $(libdir)/upstart/system nodist_upstartjob_DATA = etc/guix-daemon.conf etc/guix-publish.conf @@ -194,7 +205,8 @@ etc/guix-%.conf: etc/guix-%.conf.in \ CLEANFILES += \ $(nodist_systemdservice_DATA) \ $(nodist_upstartjob_DATA) \ - $(nodist_sysvinitservice_DATA) + $(nodist_sysvinitservice_DATA) \ + $(nodist_openrcservice_DATA) EXTRA_DIST += \ %D%/AUTHORS \ @@ -203,7 +215,8 @@ EXTRA_DIST += \ etc/guix-daemon.conf.in \ etc/guix-publish.service.in \ etc/guix-publish.conf.in \ - etc/init.d/guix-daemon.in + etc/init.d/guix-daemon.in \ + etc/openrc/guix-daemon.in if CAN_RUN_TESTS