help-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

How to compose sysctl-service-type?


From: Leo Famulari
Subject: How to compose sysctl-service-type?
Date: Wed, 10 Mar 2021 12:05:37 -0500

I'm trying to set some default sysctl settings for Guix System:

https://bugs.gnu.org/47013

The problem is that I can't figure out how to compose the
sysctl-service-type. Overall, I'm really confused at the variety of ways
that services are created and used.

If we put (service sysctl-service-type ...) in %base-services, then
users cannot set their own things in config.scm, because it fails with
"guix system: error: service 'sysctl' provided more than once". On the
other hand, special-files-service-type can be used this way.

So I tried to make a simple-service 'default-sysctl-settings':

------
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index f6a490f712..68058efe15 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -35,6 +35,7 @@
   #:use-module (gnu services)
   #:use-module (gnu services admin)
   #:use-module (gnu services shepherd)
+  #:use-module (gnu services sysctl)
   #:use-module (gnu system pam)
   #:use-module (gnu system shadow)                ; 'user-account', etc.
   #:use-module (gnu system uuid)
@@ -2484,6 +2485,14 @@ to handle."
                                            (requirement requirement)
                                            (name-servers name-servers)))))
 
+(define (default-sysctl-settings default-settings)
+  (simple-service 'base-sysctl-settings
+                  sysctl-service-type
+                  default-settings))
+
 
 (define %base-services
   ;; Convenience variable holding the basic services.
@@ -2532,6 +2541,12 @@ to handle."
                  (udev-configuration
                    (rules (list lvm2 fuse alsa-utils crda))))
 
+        (service default-sysctl-settings
+                 (sysctl-configuration
+                  (settings
+                   '(("fs.protected_hardlinks" . "1")
+                     ("fs.protected_symlinks" . "1")))))
+
         (service special-files-service-type
                  `(("/bin/sh" ,(file-append bash "/bin/sh"))
                    ("/usr/bin/env" ,(file-append coreutils "/bin/env"))))))
------

But, that crashes like this:

------
Backtrace:
In guix/ui.scm:
  2164:12 19 (run-guix-command _ . _)
In ice-9/boot-9.scm:
  1736:10 18 (with-exception-handler _ _ #:unwind? _ # _)
  1731:15 17 (with-exception-handler #<procedure 7f1973632750 at ic…> …)
In guix/scripts/system.scm:
   1394:8 16 (_)
In guix/status.scm:
    780:4 15 (call-with-status-report _ _)
In guix/scripts/system.scm:
   1228:4 14 (_)
In ice-9/boot-9.scm:
  1736:10 13 (with-exception-handler _ _ #:unwind? _ # _)
In guix/store.scm:
   636:37 12 (thunk)
   1305:8 11 (call-with-build-handler #<procedure 7f1975b9de40 at g…> …)
  2066:24 10 (run-with-store #<store-connection 256.99 7f19743da870> …)
In guix/scripts/system.scm:
    823:2  9 (_ _)
    705:7  8 (_ #<store-connection 256.99 7f19743da870>)
In gnu/system/vm.scm:
   737:31  7 (system-qemu-image/shared-store-script _ #:system _ # _ …)
    661:2  6 (system-qemu-image/shared-store #<<operating-system> k…> …)
In gnu/system.scm:
  1231:38  5 (operating-system-uuid #<<operating-system> kernel: #<…> …)
In gnu/services.scm:
    963:4  4 (instantiate-missing-services _)
In guix/combinators.scm:
    46:26  3 (fold2 #<procedure adjust-service-list (svc result ins…> …)
In gnu/services.scm:
   954:11  2 (adjust-service-list _ (#<<service> type: #<service…> …) …)
In ice-9/boot-9.scm:
  1669:16  1 (raise-exception _ #:continuable? _)
  1669:16  0 (raise-exception _ #:continuable? _)

ice-9/boot-9.scm:1669:16: In procedure raise-exception:
In procedure struct-vtable: Wrong type argument in position 1 (expecting 
struct): #<procedure default-sysctl-settings (a)>
------



reply via email to

[Prev in Thread] Current Thread [Next in Thread]