Patchwork [2/2] Add system start-up files for "guix publish".

login
register
mail settings
Submitter Hartmut Goebel
Date Nov. 18, 2016, 11 a.m.
Message ID <1479466834-3508-3-git-send-email-h.goebel@crazy-compilers.com>
Download mbox | patch
Permalink /patch/17560/
State New
Headers show

Comments

Hartmut Goebel - Nov. 18, 2016, 11 a.m.
* .gitignore: add etc/guix-publish.conf and /etc/guix-publish.service.
* etc/guix-publish.conf.in: New file.
* etc/guix-publish.service.in: New file.
* nix/local.mk (etc/guix-%.service, etc/guix-%.conf): Generalized former
  build-rules for by using patterns.
  (nodist_systemdservice_DATA): Add etc/guix-publish.service, update
  comment.
  (nodist_upstartjob_DATA): Add etc/guix-publish.conf, update comment.
* doc/guix.texi (Binary Installation): Add step for setting up "guix
  publish" to start at system start using the new files.
---
 .gitignore                  |  2 ++
 doc/guix.texi               | 34 ++++++++++++++++++++++++++++++++++
 etc/guix-publish.conf.in    | 12 ++++++++++++
 etc/guix-publish.service.in | 19 +++++++++++++++++++
 nix/local.mk                | 16 ++++++++--------
 5 files changed, 75 insertions(+), 8 deletions(-)
 create mode 100644 etc/guix-publish.conf.in
 create mode 100644 etc/guix-publish.service.in
Leo Famulari - Nov. 18, 2016, 8:35 p.m.
On Fri, Nov 18, 2016 at 12:00:34PM +0100, Hartmut Goebel wrote:
> * .gitignore: add etc/guix-publish.conf and /etc/guix-publish.service.
> * etc/guix-publish.conf.in: New file.
> * etc/guix-publish.service.in: New file.
> * nix/local.mk (etc/guix-%.service, etc/guix-%.conf): Generalized former
>   build-rules for by using patterns.
>   (nodist_systemdservice_DATA): Add etc/guix-publish.service, update
>   comment.
>   (nodist_upstartjob_DATA): Add etc/guix-publish.conf, update comment.
> * doc/guix.texi (Binary Installation): Add step for setting up "guix
>   publish" to start at system start using the new files.

The changes related to systemd LGTM.
Ludovic Courtès - Nov. 21, 2016, 8:52 a.m.
Hartmut Goebel <h.goebel@crazy-compilers.com> skribis:

> * .gitignore: add etc/guix-publish.conf and /etc/guix-publish.service.
> * etc/guix-publish.conf.in: New file.
> * etc/guix-publish.service.in: New file.
> * nix/local.mk (etc/guix-%.service, etc/guix-%.conf): Generalized former
>   build-rules for by using patterns.
>   (nodist_systemdservice_DATA): Add etc/guix-publish.service, update
>   comment.
>   (nodist_upstartjob_DATA): Add etc/guix-publish.conf, update comment.
> * doc/guix.texi (Binary Installation): Add step for setting up "guix
>   publish" to start at system start using the new files.

Good idea!

> --- a/doc/guix.texi
> +++ b/doc/guix.texi
> @@ -504,6 +504,40 @@ To use substitutes from @code{hydra.gnu.org} or one of its mirrors
>  @example
>  # guix archive --authorize < ~root/.guix-profile/share/guix/hydra.gnu.org.pub
>  @end example
> +
> +@item
> +(Optional) You may want to publish the content of your store for other
> +systems in your network. For this run
> +@example
> +# guix archive --generate-key
> +# useradd -U -d /var/empty -s `which nologin`    \
> +           -c "Guix publish user" --system    \
> +           guixpublish
> +@end example
> +
> +Set @command{guix publish} to automatically start on boot.
> +
> +If your host distro uses the systemd init system, this can be achieved
> +with these commands:
> +
> +@example
> +# ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
> +        /etc/systemd/system/
> +# systemctl start guix-publish && systemctl enable guix-publish
> +@end example
> +
> +If your host distro uses the Upstart init system:
> +
> +@example
> +# ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
> +# start guix-publish
> +@end example
> +
> +Otherwise, you can still start @command{guix publish} manually with:
> +
> +@example
> +# ~root/.guix-profile/bin/guix publish --user=guixpublish
> +@end example
>  @end enumerate

I think this should rather go to “Invoking guix publish”, to avoid
making “Binary Installation” too intimidating (and because users do not
initially care about running ‘guix publish’).  WDYT?

Also, I think it would be enough to add a cross-reference to “Invoking
guix archive” where we mention that a key needs to be generated.

Last, I think we should simply recommend user ‘nobody’, which we can
expect to be already present.  It does the job and will make the
instructions shorter.

WDYT?

The rest LGTM, thanks!

Ludo’.
Hartmut Goebel - Nov. 21, 2016, 5:17 p.m.
Am 21.11.2016 um 09:52 schrieb Ludovic Courtès:
> I think this should rather go to “Invoking guix publish”, to avoid
> making “Binary Installation” too intimidating (and because users do not
> initially care about running ‘guix publish’).  WDYT?
>
> Also, I think it would be enough to add a cross-reference to “Invoking
> guix archive” where we mention that a key needs to be generated.

Invoking guix publish is the perfect place: There already is a paragraph about enabling the service on GuixSD and also a reference to guix archive.

Thanks for pointing there.

Patch

diff --git a/.gitignore b/.gitignore
index 6e892ca..7db5e9f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -50,6 +50,8 @@ 
 /emacs/guix-helper.scm
 /etc/guix-daemon.conf
 /etc/guix-daemon.service
+/etc/guix-publish.conf
+/etc/guix-publish.service
 /guix-daemon
 /guix-register
 /guix/config.scm
diff --git a/doc/guix.texi b/doc/guix.texi
index 92d7ee8..760639f 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -504,6 +504,40 @@  To use substitutes from @code{hydra.gnu.org} or one of its mirrors
 @example
 # guix archive --authorize < ~root/.guix-profile/share/guix/hydra.gnu.org.pub
 @end example
+
+@item
+(Optional) You may want to publish the content of your store for other
+systems in your network. For this run
+@example
+# guix archive --generate-key
+# useradd -U -d /var/empty -s `which nologin`    \
+           -c "Guix publish user" --system    \
+           guixpublish
+@end example
+
+Set @command{guix publish} to automatically start on boot.
+
+If your host distro uses the systemd init system, this can be achieved
+with these commands:
+
+@example
+# ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
+        /etc/systemd/system/
+# systemctl start guix-publish && systemctl enable guix-publish
+@end example
+
+If your host distro uses the Upstart init system:
+
+@example
+# ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
+# start guix-publish
+@end example
+
+Otherwise, you can still start @command{guix publish} manually with:
+
+@example
+# ~root/.guix-profile/bin/guix publish --user=guixpublish
+@end example
 @end enumerate
 
 This completes root-level install of Guix.  Each user will need to
diff --git a/etc/guix-publish.conf.in b/etc/guix-publish.conf.in
new file mode 100644
index 0000000..bf8b3f3
--- /dev/null
+++ b/etc/guix-publish.conf.in
@@ -0,0 +1,12 @@ 
+# This is a "job" for the Upstart init system to launch 'guix-daemon'.
+# Drop it in /etc/init to have 'guix-daemon' automatically started.
+
+description "Publish the GNU Guix store"
+
+start on runlevel [2345]
+
+stop on runlevel [016]
+
+task
+
+exec @bindir@/guix publish --user=guixpublish --port=8181
diff --git a/etc/guix-publish.service.in b/etc/guix-publish.service.in
new file mode 100644
index 0000000..bb3069c
--- /dev/null
+++ b/etc/guix-publish.service.in
@@ -0,0 +1,19 @@ 
+# This is a "service unit file" for the systemd init system to launch
+# 'guix publish'.  Drop it in /etc/systemd/system or similar to have
+# 'guix publish' automatically started.
+
+[Unit]
+Description=Publish the GNU Guix store
+
+[Service]
+ExecStart=@bindir@/guix publish --user=guixpublish --port=8181
+Environment=GUIX_LOCPATH=/root/.guix-profile/lib/locale
+RemainAfterExit=yes
+StandardOutput=syslog
+StandardError=syslog
+
+# See <https://lists.gnu.org/archive/html/guix-devel/2016-04/msg00608.html>.
+TasksMax=1024
+
+[Install]
+WantedBy=multi-user.target
diff --git a/nix/local.mk b/nix/local.mk
index c666edd..6cdcc84 100644
--- a/nix/local.mk
+++ b/nix/local.mk
@@ -180,26 +180,26 @@  endif BUILD_DAEMON_OFFLOAD
 nodist_libexec_SCRIPTS =			\
   %D%/scripts/guix-authenticate
 
-# The '.service' file for systemd.
+# The '.service' files for systemd.
 systemdservicedir = $(libdir)/systemd/system
-nodist_systemdservice_DATA = etc/guix-daemon.service
+nodist_systemdservice_DATA = etc/guix-daemon.service etc/guix-publish.service
 
-etc/guix-daemon.service: etc/guix-daemon.service.in	\
+etc/guix-%.service: etc/guix-%.service.in	\
 			 $(top_builddir)/config.status
 	$(AM_V_GEN)$(MKDIR_P) "`dirname $@`";				\
 	$(SED) -e 's|@''bindir''@|$(bindir)|' <				\
-	       "$(srcdir)/etc/guix-daemon.service.in" > "$@.tmp";	\
+	       "$(srcdir)/$<" > "$@.tmp";	\
 	mv "$@.tmp" "$@"
 
-# The '.conf' job for Upstart.
+# The '.conf' jobs for Upstart.
 upstartjobdir = $(libdir)/upstart/system
-nodist_upstartjob_DATA = etc/guix-daemon.conf
+nodist_upstartjob_DATA = etc/guix-daemon.conf etc/guix-publish.conf
 
-etc/guix-daemon.conf: etc/guix-daemon.conf.in	\
+etc/guix-%.conf: etc/guix-%.conf.in	\
 			 $(top_builddir)/config.status
 	$(AM_V_GEN)$(MKDIR_P) "`dirname $@`";				\
 	$(SED) -e 's|@''bindir''@|$(bindir)|' <				\
-	       "$(srcdir)/etc/guix-daemon.conf.in" > "$@.tmp";		\
+	       "$(srcdir)/$<" > "$@.tmp";		\
 	mv "$@.tmp" "$@"
 
 EXTRA_DIST +=					\