GNU bug report logs - #35648
[PATCH] services: Add 'nix-service-type'.

Previous Next

Package: guix-patches;

Reported by: Oleg Pykhalov <go.wigust <at> gmail.com>

Date: Thu, 9 May 2019 12:31:01 UTC

Severity: normal

Tags: patch

Done: Oleg Pykhalov <go.wigust <at> gmail.com>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 35648 in the body.
You can then email your comments to 35648 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#35648; Package guix-patches. (Thu, 09 May 2019 12:31:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Oleg Pykhalov <go.wigust <at> gmail.com>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Thu, 09 May 2019 12:31:01 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Oleg Pykhalov <go.wigust <at> gmail.com>
To: guix-patches <at> gnu.org
Cc: Oleg Pykhalov <go.wigust <at> gmail.com>
Subject: [PATCH] services: Add 'nix-service-type'.
Date: Thu,  9 May 2019 15:29:51 +0300
* gnu/services/nix.scm: New file.
* gnu/local.mk: Add this.
* doc/guix.texi (Miscellaneous Services): Document this.
---
 doc/guix.texi        |  46 ++++++++++++++++++
 gnu/local.mk         |   3 +-
 gnu/services/nix.scm | 112 +++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 160 insertions(+), 1 deletion(-)
 create mode 100644 gnu/services/nix.scm

diff --git a/doc/guix.texi b/doc/guix.texi
index df7208229c..c79d64e444 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -23604,6 +23604,52 @@ The Containerd package to use.
 @end table
 @end deftp
 
+@cindex Nix
+@subsubheading Nix service
+
+The @code{(gnu services nix)} module provides the following service.
+
+@defvr {Scheme Variable} nix-service-type
+
+This is the type of the service that runs @url{https://nixos.org/nix/, Nix}, a
+daemon that is required to use the Nix package manager.
+
+@example
+(use-modules (gnu))
+(use-service-modules nix)
+(use-package-modules package-management)
+
+(operating-system
+  (packages (append (list nix)
+                    %base-packages))
+
+  (services (append (list (service nix-service-type))
+                    %base-services)))
+@end example
+
+After @command{guix system reconfigure} you need to configure Nix for your
+user, e.g.:
+
+@example
+$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable
+$ nix-channel --update
+$ ln -s "/nix/var/nix/profiles/per-user/$USER/profile" ~/.nix-profile
+$ source /run/current-system/profile/etc/profile.d/nix.sh
+$ nix-env --install hello
+$ hello
+@end example
+
+You could add the following Bash snippet to your @file{~/.bashrc} file to load
+all Nix required variables automatically after login:
+
+@example
+if [ -f /run/current-system/profile/etc/profile.d/nix.sh ]
+then
+    . /run/current-system/profile/etc/profile.d/nix.sh
+fi
+@end example
+@end defvr
+
 @node Setuid Programs
 @section Setuid Programs
 
diff --git a/gnu/local.mk b/gnu/local.mk
index 3f97397c4a..760181f25f 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -17,7 +17,7 @@
 # Copyright © 2017 Mathieu Othacehe <m.othacehe <at> gmail.com>
 # Copyright © 2017, 2018 Gábor Boskovits <boskovits <at> gmail.com>
 # Copyright © 2018 Amirouche Boubekki <amirouche <at> hypermove.net>
-# Copyright © 2018 Oleg Pykhalov <go.wigust <at> gmail.com>
+# Copyright © 2018, 2019 Oleg Pykhalov <go.wigust <at> gmail.com>
 # Copyright © 2018 Stefan Stefanović <stefanx2ovic <at> gmail.com>
 # Copyright © 2018 Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
 #
@@ -521,6 +521,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/services/messaging.scm			\
   %D%/services/monitoring.scm			\
   %D%/services/networking.scm			\
+  %D%/services/nix.scm				\
   %D%/services/nfs.scm			\
   %D%/services/security-token.scm		\
   %D%/services/shepherd.scm			\
diff --git a/gnu/services/nix.scm b/gnu/services/nix.scm
new file mode 100644
index 0000000000..72ecb7d089
--- /dev/null
+++ b/gnu/services/nix.scm
@@ -0,0 +1,112 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2019 Oleg Pykhalov <go.wigust <at> gmail.com>
+;;;
+;;; 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 <http://www.gnu.org/licenses/>.
+
+(define-module (gnu services nix)
+  #:use-module (gnu packages admin)
+  #:use-module (gnu packages package-management)
+  #:use-module (gnu services base)
+  #:use-module (gnu services configuration)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu services web)
+  #:use-module (gnu services)
+  #:use-module (gnu system shadow)
+  #:use-module (guix gexp)
+  #:use-module (guix packages)
+  #:use-module (guix records)
+  #:use-module (guix store)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
+  #:export (nix-service-type))
+
+;;; Commentary:
+;;;
+;;; This module provides a service definition for the Nix daemon.
+;;;
+;;; Code:
+
+
+;;;
+;;; Accounts
+;;;
+
+;; Copied from gnu/services/base.scm
+(define* (nix-build-accounts count #:key
+                             (group "nixbld")
+                             (shadow shadow))
+  "Return a list of COUNT user accounts for Nix build users with the given
+GID."
+  (unfold (cut > <> count)
+          (lambda (n)
+            (user-account
+             (name (format #f "nixbld~2,'0d" n))
+             (system? #t)
+             (group group)
+             (supplementary-groups (list group "kvm"))
+             (comment (format #f "Nix Build User ~2d" n))
+             (home-directory "/var/empty")
+             (shell (file-append shadow "/sbin/nologin"))))
+          1+
+          1))
+(define (nix-accounts _)
+  "Return the user accounts and user groups."
+  (cons (user-group
+         (name "nixbld")
+         (system? #t)
+
+         ;; Use a fixed GID so that we can create the store with the right
+         ;; owner.
+         (id 40000))
+        (nix-build-accounts 10 #:group "nixbld")))
+
+(define (nix-activation _)
+  "Return the activation gexp."
+  (with-imported-modules '((guix build utils))
+    #~(begin
+        (use-modules (guix build utils))
+        (for-each (cut mkdir-p <>) '("/nix/store" "/nix/var/log"
+                                     "/nix/var/nix/gcroots/per-user"
+                                     "/nix/var/nix/profiles/per-user"))
+        (chown "/nix/store"
+               (passwd:uid (getpw "root")) (group:gid (getpw "nixbld01")))
+        (chmod "/nix/store" #o775)
+        (for-each (cut chmod <> #o777) '("/nix/var/nix/profiles"
+                                         "/nix/var/nix/profiles/per-user")))))
+
+(define (nix-shepherd-service _)
+  "Return a <shepherd-service> for Nix."
+  (list
+   (shepherd-service
+    (provision '(nix-daemon))
+    (documentation "Run nix-daemon.")
+    (requirement '())
+    (start #~(make-forkexec-constructor
+              (list (string-append #$nix "/bin/nix-daemon"))))
+    (respawn? #f)
+    (stop #~(make-kill-destructor)))))
+
+(define nix-service-type
+  (service-type
+   (name 'nix)
+   (extensions
+    (list (service-extension shepherd-root-service-type nix-shepherd-service)
+          (service-extension account-service-type nix-accounts)
+          (service-extension activation-service-type nix-activation)))
+   (default-value '())
+   (description "Run the Nix daemon.")))
+
+;;; nix.scm ends here
-- 
2.21.0





Information forwarded to guix-patches <at> gnu.org:
bug#35648; Package guix-patches. (Sat, 01 Jun 2019 13:27:02 GMT) Full text and rfc822 format available.

Message #8 received at 35648 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Oleg Pykhalov <go.wigust <at> gmail.com>
Cc: 35648 <at> debbugs.gnu.org
Subject: Re: [bug#35648] [PATCH] services: Add 'nix-service-type'.
Date: Sat, 01 Jun 2019 15:26:13 +0200
Hi Oleg,

Oleg Pykhalov <go.wigust <at> gmail.com> skribis:

> * gnu/services/nix.scm: New file.
> * gnu/local.mk: Add this.
> * doc/guix.texi (Miscellaneous Services): Document this.

[...]

> +@defvr {Scheme Variable} nix-service-type
> +
> +This is the type of the service that runs @url{https://nixos.org/nix/, Nix}, a
> +daemon that is required to use the Nix package manager.

“… that runs the build daemon of the @url{https://nixos.org/nix, Nix}
package manager.  Here is an example showing how to use it:”

> +@example
> +(use-modules (gnu))
> +(use-service-modules nix)
> +(use-package-modules package-management)
> +
> +(operating-system

Add a line like:

  ;; @dots{}

> +  (packages (append (list nix)
> +                    %base-packages))
> +
> +  (services (append (list (service nix-service-type))
> +                    %base-services)))
> +@end example
> +
> +After @command{guix system reconfigure} you need to configure Nix for your
> +user, e.g.:
> +
> +@example
> +$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable
> +$ nix-channel --update
> +$ ln -s "/nix/var/nix/profiles/per-user/$USER/profile" ~/.nix-profile
> +$ source /run/current-system/profile/etc/profile.d/nix.sh
> +$ nix-env --install hello
> +$ hello
> +@end example

Can we instead simply add a link to upstream documentation for this?  I
would feel more comfortable that way.

Otherwise LGTM, thanks!

Ludo’.




Information forwarded to guix-patches <at> gnu.org:
bug#35648; Package guix-patches. (Thu, 06 Jun 2019 07:48:01 GMT) Full text and rfc822 format available.

Message #11 received at 35648 <at> debbugs.gnu.org (full text, mbox):

From: Oleg Pykhalov <go.wigust <at> gmail.com>
To: Ludovic Courtès <ludo <at> gnu.org>
Cc: 35648 <at> debbugs.gnu.org
Subject: Re: [bug#35648] [PATCH] services: Add 'nix-service-type'.
Date: Thu, 06 Jun 2019 10:47:01 +0300
[Message part 1 (text/plain, inline)]
Hi Ludovic,

Apologies for a delay.

Ludovic Courtès <ludo <at> gnu.org> writes:

[…]

>> * doc/guix.texi (Miscellaneous Services): Document this.

[…]

>> +After @command{guix system reconfigure} you need to configure Nix
>> for your
>> +user, e.g.:
>> +
>> +@example
>> +$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable
>> +$ nix-channel --update
>> +$ ln -s "/nix/var/nix/profiles/per-user/$USER/profile" ~/.nix-profile
>> +$ source /run/current-system/profile/etc/profile.d/nix.sh
>> +$ nix-env --install hello
>> +$ hello
>> +@end example
>
> Can we instead simply add a link to upstream documentation for this?  I
> would feel more comfortable that way.

I'm not sure it will be comfortable for most of Guix users.  Upstream
documentation doesn't mention ‘ln -s …’ step and ‘source …’ is Guix
system relative.  I guess we could automate those steps, but I have no
idea how to implement this at the moment.

Maybe a link to upstream documentation and a link to this bug report?

    Currently manual steps are required to configure Nix for a user,
    which you could find on @url{https://issues.guix.info/issue/35648,
    35648}.  Also *note @url{https://nixos.org/nix/manual/, Nix Package
    Manager Guide} for more information about the installation process.

Regards,
Oleg.
[signature.asc (application/pgp-signature, inline)]

Information forwarded to guix-patches <at> gnu.org:
bug#35648; Package guix-patches. (Thu, 06 Jun 2019 09:33:01 GMT) Full text and rfc822 format available.

Message #14 received at 35648 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Oleg Pykhalov <go.wigust <at> gmail.com>
Cc: 35648 <at> debbugs.gnu.org
Subject: Re: [bug#35648] [PATCH] services: Add 'nix-service-type'.
Date: Thu, 06 Jun 2019 11:32:43 +0200
Hi Oleg,

Oleg Pykhalov <go.wigust <at> gmail.com> skribis:

> Ludovic Courtès <ludo <at> gnu.org> writes:
>
> […]
>
>>> * doc/guix.texi (Miscellaneous Services): Document this.
>
> […]
>
>>> +After @command{guix system reconfigure} you need to configure Nix
>>> for your
>>> +user, e.g.:
>>> +
>>> +@example
>>> +$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable
>>> +$ nix-channel --update
>>> +$ ln -s "/nix/var/nix/profiles/per-user/$USER/profile" ~/.nix-profile
>>> +$ source /run/current-system/profile/etc/profile.d/nix.sh
>>> +$ nix-env --install hello
>>> +$ hello
>>> +@end example
>>
>> Can we instead simply add a link to upstream documentation for this?  I
>> would feel more comfortable that way.
>
> I'm not sure it will be comfortable for most of Guix users.  Upstream
> documentation doesn't mention ‘ln -s …’ step and ‘source …’ is Guix
> system relative.

What about providing just these two lines (“ln -s” and “source …”) and
adding a cross-reference to the Nix manual for more information?

If that works for you, you can push with these changes.

Thanks,
Ludo’.




Reply sent to Oleg Pykhalov <go.wigust <at> gmail.com>:
You have taken responsibility. (Mon, 10 Jun 2019 06:25:01 GMT) Full text and rfc822 format available.

Notification sent to Oleg Pykhalov <go.wigust <at> gmail.com>:
bug acknowledged by developer. (Mon, 10 Jun 2019 06:25:02 GMT) Full text and rfc822 format available.

Message #19 received at 35648-done <at> debbugs.gnu.org (full text, mbox):

From: Oleg Pykhalov <go.wigust <at> gmail.com>
To: Ludovic Courtès <ludo <at> gnu.org>
Cc: 35648-done <at> debbugs.gnu.org
Subject: Re: [bug#35648] [PATCH] services: Add 'nix-service-type'.
Date: Mon, 10 Jun 2019 09:24:06 +0300
[Message part 1 (text/plain, inline)]
Ludovic Courtès <ludo <at> gnu.org> writes:

[…]

>>>> +After @command{guix system reconfigure} you need to configure Nix
>>>> for your
>>>> +user, e.g.:
>>>> +
>>>> +@example
>>>> +$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable
>>>> +$ nix-channel --update
>>>> +$ ln -s "/nix/var/nix/profiles/per-user/$USER/profile" ~/.nix-profile
>>>> +$ source /run/current-system/profile/etc/profile.d/nix.sh
>>>> +$ nix-env --install hello
>>>> +$ hello
>>>> +@end example
>>>
>>> Can we instead simply add a link to upstream documentation for this?  I
>>> would feel more comfortable that way.
>>
>> I'm not sure it will be comfortable for most of Guix users.  Upstream
>> documentation doesn't mention ‘ln -s …’ step and ‘source …’ is Guix
>> system relative.
>
> What about providing just these two lines (“ln -s” and “source …”) and
> adding a cross-reference to the Nix manual for more information?
>
> If that works for you, you can push with these changes.

OK, pushed as 47b9614b3110307093382363c0ba70d31f32ef59 to master.

Thanks,
Oleg.
[signature.asc (application/pgp-signature, inline)]

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 08 Jul 2019 11:24:07 GMT) Full text and rfc822 format available.

This bug report was last modified 4 years and 265 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.