aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017 Sou Bunnbu <iyzsong@member.fsf.org>
;;;
;;; 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 sysctl)
  #:use-module (gnu services)
  #:use-module (gnu services shepherd)
  #:use-module (gnu packages linux)
  #:use-module (guix gexp)
  #:use-module (guix records)
  #:use-module (srfi srfi-1)
  #:use-module (ice-9 match)
  #:export (sysctl-configuration
            sysctl-configuration-sysctl
            sysctl-configuration-settings
            sysctl-service-type
            %default-sysctl-settings))


;;;
;;; System Control Service.
;;;

(define %default-sysctl-settings
  ;; Default kernel parameters enabled with sysctl.
  '(("fs.protected_hardlinks" . "1")
    ("fs.protected_symlinks" . "1")))

(define-record-type* <sysctl-configuration>
  sysctl-configuration make-sysctl-configuration
  sysctl-configuration?
  (sysctl   sysctl-configuration-sysctl    ; path of the 'sysctl' command
            (default (file-append procps "/sbin/sysctl")))
  (settings sysctl-configuration-settings  ; alist of string pairs
            (default %default-sysctl-settings)))

(define (sysctl-configuration-settings->sysctl.conf settings)
  "Return a file for @command{sysctl} to set kernel parameters as specified by
@var{settings}."
  (apply mixed-text-file "sysctl.conf"
         (append-map (match-lambda
                       ((key . value)
                        (list key "=" value "\n")))
                     settings)))

(define sysctl-shepherd-service
  (match-lambda
    (($ <sysctl-configuration> sysctl settings)
     (let ((sysctl.conf
            (sysctl-configuration-settings->sysctl.conf settings)))
       (shepherd-service
        (documentation "Configure kernel parameters at boot.")
        (provision '(sysctl))
        (start #~(lambda _
                   (zero? (system* #$sysctl "--load" #$sysctl.conf))))
        (one-shot? #t))))))

(define sysctl-service-type
  (service-type
   (name 'sysctl)
   (extensions
    (list (service-extension shepherd-root-service-type
                             (compose list sysctl-shepherd-service))))
   (compose concatenate)
   (extend (lambda (config settings)
             (sysctl-configuration
              (inherit config)
              (settings (append (sysctl-configuration-settings config)
                                settings)))))
   (default-value (sysctl-configuration))
   (description "Set Linux kernel parameters under @file{/proc/sys} at system
startup time.")))
(nfs-service-type)[extensions]: Refer to %NFS-ACTIVATION. Ludovic Courtès 2020-03-08services: nfs: Run rpc.mountd in foreground....Fixes <https://bugs.gnu.org/39708>. Shepherd doesn't keep track of processes that fork themselves and would disable the process after restarting it a couple times. * gnu/services/nfs.scm (nfs-shepherd-services): Invoke rpc.mountd with the '--foreground' option. Maxim Cournoyer 2020-01-08services: nfs: Add nfs-service-type....* gnu/services/nfs.scm (<nfs-configuration>): New record. (nfs-configuration, nfs-configuration?, nfs-configuration-nfs-utils, nfs-configuration-nfs-version, nfs-configuration-exports, nfs-configuration-rpcmountd-port, nfs-configuration-rpcstatd-port, nfs-configuration-rpcbind, nfs-configuration-idmap-domain, nfs-configuration-nfsd-port, nfs-configuration-nfsd-threads, nfs-configuration-pipefs-directory, nfs-configuration-debug, nfs-shepherd-services): New procedures. (nfs-service-type): New variable. * doc/guix.texi (Network File System): Document it. * gnu/tests/nfs.scm (%test-nfs-server): New variable. (%base-os): Use default value of rpcbind-service-type. Ricardo Wurmus 2020-01-08services: nfs: Allow gss-service-type to be extended....* gnu/services/nfs.scm (gss-service-type): Rewrite using SERVICE-TYPE to add ability to extend the service. Ricardo Wurmus 2020-01-08services: nfs: Add verbosity control to idmap-service-type....* gnu/services/nfs.scm (<idmap-configuration>)[verbosity]: New field. (idmap-configuration-verbosity): New procedure. (idmap-service-type): Use it. * doc/guix.texi (Network File System): Document it. Ricardo Wurmus 2020-01-08services: nfs: Allow idmap-service-type to be extended....* gnu/services/nfs.scm (idmap-service-type): Rewrite using SERVICE-TYPE to add ability to extend the service. Ricardo Wurmus 2020-01-08services: nfs: Fix indentation and typo....* gnu/services/nfs.scm (<gss-configuration>, <idmap-configuration>): Fix indentation. (<idmap-configuration>): Rename accessor for NFS-UTILS field to IDMAP-CONFIGURATION-NFS-UTILS. (idmap-service-type): Use IDMAP-CONFIGURATION-NFS-UTILS. Ricardo Wurmus 2020-01-08services: nfs: Allow pipefs-service-type to be extended....* gnu/services/nfs.scm (pipefs-service-type): Rewrite using SERVICE-TYPE to add ability to extend the service. Ricardo Wurmus 2020-01-08services: nfs: Allow rpcbind-service-type to be extended....* gnu/services/nfs.scm (rpcbind-service-type): Rewrite using SERVICE-TYPE to add ability to extend the service. Ricardo Wurmus 2020-01-08services: nfs: Fix name of package variable....* gnu/services/nfs.scm (rpcbind-service-type): Correct name from nfs-utils to rpcbind. Ricardo Wurmus 2018-01-19gnu: Consistently Write ‘file system(s)’....It is the GNU way. * doc/guix.texi (Build Systems, DNS Services): Write ‘file system(s)’. * gnu/build/vm.scm (create-ext-file-system, create-fat-file-system): Likewise. * gnu/packages/backup.scm (dirvish, rsnapshot)[description]: Likewise. * gnu/packages/check.scm (python-testpath)[description]: Likewise. * gnu/packages/disk.scm (pydf)[description]: Likewise. * gnu/packages/file-systems.scm (disorderfs)[synopsis, description]: Likewise. (glusterfs)[description]: Likewise. * gnu/packages/haskell.scm (ghc-directory, ghc-system-fileio-bootstrap) (ghc-system-fileio)[synopsis]: Likewise. (ghc-fsnotify)[description]: Likewise. * gnu/packages/linux.scm (proot)[description]: Likewise. (jmtpfs)[synopsis, description]: Likewise. * gnu/packages/mate.scm (caja, caja-extensions)[description]: Likewise. * gnu/packages/storage.scm (ceph)[description]: Likewise. * gnu/packages/sync.scm (lsyncd)[description]: Likewise. * gnu/packages/syncthing.scm (syncthing)[synopsis]: Likewise. (go-github-com-zillode-notify)[description]: Likewise. * gnu/services/nfs.scm (pipefs-service-type): Likewise. * guix/scripts/system.scm (perform-action): Likewise. Tobias Geerinckx-Rice 2016-10-12gnu: Add NFS related services....* gnu/services/nfs.scm (pipefs-service-type): New variable, (gss-service-type): New variable, (idmap-service-type) New variable. * doc/guix.texi (Network File System): New node. John Darrington 2016-10-01gnu: rpcbind-configuration: Rename pkg to nfs-utils...* gnu/services/nfs.scm (<rpcbind-configuration>): "pkg" --> "nfs-utils" John Darrington 2016-09-07gnu: Add rpc-daemon service...* gnu/services/nfs.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add it. John Darrington