;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès ;;; Copyright © 2014 Alex Kost ;;; ;;; 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 . (define-module (test-profiles) #:use-module (guix tests) #:use-module (guix profiles) #:use-module (guix gexp) #:use-module (guix store) #:use-module (guix monads) #:use-module (guix grafts) #:use-module (guix packages) #:use-module (guix derivations) #:use-module (guix build-system trivial) #:use-module (gnu packages bootstrap) #:use-module ((gnu packages base) #:prefix packages:) #:use-module ((gnu packages guile) #:prefix packages:) #:use-module (ice-9 match) #:use-module (ice-9 regex) #:use-module (ice-9 popen) #:use-module (rnrs io ports) #:use-module (srfi srfi-1) #:use-module (srfi srfi-11) #:use-module (srfi srfi-34) #:use-module (srfi srfi-64)) ;; Test the (guix profiles) module. (define %store (open-connection-for-tests)) ;; Globally disable grafts because they can trigger early builds. (%graft? #f) ;; Example manifest entries. (define guile-1.8.8 (manifest-entry (name "guile") (version "1.8.8") (item "/gnu/store/...") (output "out"))) (define guile-2.0.9 (manifest-entry (name "guile") (version "2.0.9") (item "/gnu/store/...") (output "out"))) (define guile-2.0.9:debug (manifest-entry (inherit guile-2.0.9) (output "debug"))) (define glibc (manifest-entry (name "glibc") (version "2.19") (item "/gnu/store/...") (output "out"))) (test-begin "profiles") (test-assert "manifest-installed?" (let ((m (manifest (list guile-2.0.9 guile-2.0.9:debug)))) (and (manifest-installed? m (manifest-pattern (name "guile"))) (manifest-installed? m (manifest-pattern (name "guile") (output "debug"))) (manifest-installed? m (manifest-pattern (name "guile") (output "out") (version "2.0.9"))) (not (manifest-installed? m (manifest-pattern (name "guile") (version "1.8.8")))) (not (manifest-installed? m (manifest-pattern (name "guile") (output "foobar"))))))) (test-assert "manifest-matching-entries" (let* ((e (list guile-2.0.9 guile-2.0.9:debug)) (m (manifest e))) (and (equal? e (manifest-matching-entries m (list (manifest-pattern (name "guile") (output #f))))) (equal? (list guile-2.0.9) (manifest-matching-entries m (list (manifest-pattern (name "guile") (version "2.0.9")))))))) (test-assert "manifest-matching-entries, no match" (let ((m (manifest (list guile-2.0.9))) (p (manifest-pattern (name "python")))) (guard (c ((unmatched-pattern-error? c) (and (eq? p (unmatched-pattern-error-pattern c)) (eq? m (unmatched-pattern-error-manifest c))))) (manifest-matching-entries m (list p)) #f))) (test-assert "manifest-remove" (let* ((m0 (manifest (list guile-2.0.9 guile-2.0.9:debug))) (m1 (manifest-remove m0 (list (manifest-pattern (name "guile"))))) (m2 (manifest-remove m1 (list (manifest-pattern (name "guile"))))) ; same (m3 (manifest-remove m2 (list (manifest-pattern (name "guile") (output "debug"))))) (m4 (manifest-remove m3 (list (manifest-pattern (name "guile")))))) (match (manifest-entries m2) ((($ "guile" "2.0.9" "debug")) (and (equal? m1 m2) (null? (manifest-entries m3)) (null? (manifest-entries m4))))))) (test-assert "manifest-add" (let* ((m0 (manifest '())) (m1 (manifest-add m0 (list guile-1.8.8))) (m2 (manifest-add m1 (list guile-2.0.9))) (m3 (manifest-add m2 (list guile-2.0.9:debug))) (m4 (manifest-add m3 (list guile-2.0.9:debug)))) (and (match (manifest-entries m1) ((($ "guile" "1.8.8" "out")) #t) (_ #f)) (match (manifest-entries m2) ((($ "guile" "2.0.9" "out")) #t) (_ #f)) (equal? m3 m4)))) (test-equal "manifest-add removes duplicates" ; (list guile-2.0.9) (manifest-entries (manifest-add (manifest '()) (list guile-2.0.9 guile-2.0.9)))) (test-assert "manifest-perform-transaction" (let* ((m0 (manifest (list guile-2.0.9 guile-2.0.9:debug))) (t1 (manifest-transaction (install (list guile-1.8.8)) (remove (list (manifest-pattern (name "guile") (output "debug")))))) (t2 (manifest-transaction (remove (list (manifest-pattern (name "guile") (version "2.0.9") (output #f)))))) (m1 (manifest-perf2022-08-01services: opensmtpd: Make commands setgid to "smtpq" by default....This is a patch that fixes "<executable name>: this program must be setgid smtpq". * gnu/services/mail.scm (<opensmtpd-configuration>)[setgid-commands?]: New field. (opensmtpd-set-gids): New procedure. (opensmtpd-service-type)[extensions]: Add SETUID-PROGRAM-SERVICE-TYPE extension. * doc/guix.texi (Mail Services): Document it. Co-authored-by: Ludovic Courtès <ludo@gnu.org> Maya 2022-06-24services: configuration: Remove 'validate-configuration'....Now that configuration records use the 'sanitize' property for each field, 'validate-configuration' has become useless because it's impossible to construct an invalid configuration record. * gnu/services/configuration.scm (validate-configuration): Remove. * gnu/services/mail.scm (dovecot-service): Remove call. * gnu/services/vpn.scm (openvpn-client-service) (openvpn-server-service): Likewise. * doc/guix.texi (Complex Configurations): Remove documentation. Ludovic Courtès 2022-06-24services: configuration: Report the location of field type errors....Previously field type errors would be reported in a non-standard way, and without any source location information. This fixes it. * gnu/services/configuration.scm (configuration-field-error): Add a 'loc' parameter and honor it. Use 'formatted-message' instead of plain 'format'. (define-configuration-helper)[field-sanitizer]: New procedure. Use it. Use STEM as the identifier of the syntactic constructor of the record type. Add a 'sanitize' property to each field. Remove now useless STEM macro that would call 'validate-configuration'. * gnu/services/mail.scm (serialize-listener-configuration): Adjust to new 'configuration-field-error' prototype. * tests/services/configuration.scm ("wrong type for a field"): New test. * po/guix/POTFILES.in: Add gnu/services/configuration.scm. Ludovic Courtès 2022-04-29services: Add missing 'description' fields....* gnu/services/databases.scm (postgresql-service-type)[description]: New field. (memcached-service-type)[description]: New field. (mysql-service-type)[description]: New field. (redis-service-type)[description]: New field. * gnu/services/desktop.scm (geoclue-service-type)[description]: New field. (udisks-service-type)[description]: New field. (elogind-service-type)[description]: New field. (account-service-type)[description]: New field. * gnu/services/kerberos.scm (krb5-service-type)[description]: New field. (pam-krb5-service-type)[description]: New field. * gnu/services/lirc.scm (lirc-service-type)[description]: New field. * gnu/services/mail.scm (dovecot-service-type)[description]: New field. (opensmtpd-service-type)[description]: New field. (mail-aliases-service-type)[description]: New field. (exim-service-type)[description]: New field. * gnu/services/monitoring.scm (zabbix-server-service-type)[description]: New field. (zabbix-agent-service-type)[description]: New field. * gnu/services/nfs.scm (rpcbind-service-type)[description]: New field. (pipefs-service-type)[description]: New field. (gss-service-type)[description]: New field. (idmap-service-type)[description]: New field. * gnu/services/spice.scm (spice-vdagent-service-type)[description]: New field. * gnu/services/sysctl.scm (sysctl-service-type)[description]: New field. * gnu/services/virtualization.scm (libvirt-service-type)[description]: New field. (virtlog-service-type)[description]: New field. * gnu/services/vpn.scm (openvpn-server-service-type)[description]: New field. (openvpn-client-service-type)[description]: New field. (wireguard-service-type)[description]: New field. * gnu/services/web.scm (httpd-service-type)[description]: New field. (fcgiwrap-service-type)[description]: New field. (agate-service-type)[description]: New field. [name]: Fix. Ludovic Courtès 2021-11-30services: Accept <inferior-package>s in lieu of <package>s....* gnu/services/authentication.scm (fprintd-configuration) (nslcd-configuration): Substitute file-like objects for package ones. * gnu/services/cgit.scm (cgit-configuration, opaque-cgit-configuration): Likewise. * gnu/services/cups.scm (package-list?, cups-configuration): Likewise. * gnu/services/dns.scm (verify-knot-configuration) (ddclient-configuration): Likewise. * gnu/services/docker.scm (docker-configuration): Likewise. * gnu/services/file-sharing.scm (transmission-daemon-configuration): Likewise. * gnu/services/getmail.scm (getmail-configuration): Likewise. * gnu/services/mail.scm (dovecot-configuration) (opaque-dovecot-configuration): Likewise. * gnu/services/messaging.scm (prosody-configuration) (opaque-prosody-configuration): Likewise. * gnu/services/monitoring.scm (zabbix-server-configuration) (zabbix-agent-configuration): Likewise. * gnu/services/networking.scm (opendht-configuration): Likewise. * gnu/services/pm.scm (tlp-configuration): Likewise. * gnu/services/telephony.scm (jami-configuration): Likewise. * gnu/services/virtualization.scm (libvirt-configuration) (qemu-guest-agent-configuration): Likewise. * gnu/services/vpn.scm (openvpn-client-configuration): Likewise. Tobias Geerinckx-Rice 2021-05-06services: dovecot: Add ‘managesieve-sieve-capability’ option....* gnu/services/mail.scm (protocol-configuration): Add a ‘managesieve-sieve-capability’ field. * doc/guix.texi (Mail Services): Document it. Signed-off-by: Tobias Geerinckx-Rice <me@tobias.gr> Alexey Abramov 2021-05-06services: dovecot: Add ‘managesieve-notify-capability’ option....* gnu/services/mail.scm (protocol-configuration): Add a ‘managesieve-notify-capability’ field. * doc/guix.texi (Mail Services): Document it. Signed-off-by: Tobias Geerinckx-Rice <me@tobias.gr> Alexey Abramov 2021-05-06services: dovecot: Add ‘imap-metadata?’ protocol configuration option....* gnu/services/mail.scm (protocol-configuration): Add an ‘imap-metadata?’ setting to enable IMAP METADATA support in the ‘imap’ protocol. * doc/guix.texi (Mail Services): Document it. Signed-off-by: Tobias Geerinckx-Rice <me@tobias.gr> Alexey Abramov 2021-05-06services: dovecot: Add ‘mail-attribute-dict’ configuration option....* gnu/services/mail.scm (dovecot-configuration): Define a ‘mail-attribute-dict’ directive for IMAP METADATA storage. * doc/guix.texi (Mail Services): Document it. Signed-off-by: Tobias Geerinckx-Rice <me@tobias.gr> Alexey Abramov 2021-04-06services: dovecot: Fix serialization of a free-form-args arguments....* gnu/services/mail.scm (serialize-free-form-args): Change destination and return a string containing the formated text. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Alexey Abramov 2020-12-27services: Add radicale-service-type....* gnu/services/mail.scm (radicale-configuration) (radicale-configuration?): New procedures. (%default-radicale-config-file) (radicale-service-type): New variables. * doc/guix.texi: Document it. Jonathan Brielmaier 2020-09-11Revert "services: dovecot: Use modules via symlink to system profile."...This reverts commit bcfe0f0c1e9a2b91049d7c6c591c7f0c6a002c14 for now. It breaks most current use(r)s of the Dovecot service and needs to be combined with an extra modules configuration field of some kind. See <https://issues.guix.gnu.org/43347>. Tobias Geerinckx-Rice 2020-09-11services: dovecot: Only serialize settings with non-empty values....* gnu/services/mail.scm (serialize-space-separated-string-list): Protocols might have custom settings, which are not supported by other protocols. To prevent dovecot/services from crashing, serialize settings that hold non-empty values only. Signed-off-by: Tobias Geerinckx-Rice <me@tobias.gr> Alexey Abramov 2020-09-09services: dovecot: Serialize global settings first....* gnu/services/mail.scm (dovecot-configuration): To avoid dovecot warning messages, move serialization of protocol settings below the global one. Signed-off-by: Tobias Geerinckx-Rice <me@tobias.gr> Alexey Abramov 2020-09-09services: dovecot: Use modules via symlink to system profile....* gnu/services/mail.scm (%dovecot-activation): Link the location with multiple plugins (dovecot-pigeonhole, etc), to a place where dovecot can find them. * gnu/services/mail.scm (dovecot-configuration): Use the symlink. Signed-off-by: Tobias Geerinckx-Rice <me@tobias.gr> Alexey Abramov 2020-04-21services: dovecot: 'stop' method returns #f upon success....* gnu/services/mail.scm (dovecot-shepherd-service)[stop]: Use 'invoke' instead of 'make-forkexec-constructor'. Previously, the 'stop' method would return the PID of the "dovecot stop" process, which would be interpreted as a failure to stop the service. Ludovic Courtès 2020-03-16tests: opensmtpd: Check /var/spool/mail instead of /var/mail....The test had been failing since the upgrade to 6.6.3p1 in commit 2dbfd8eec43b602d23cee3fdd2842cc333e36c24. * gnu/services/mail.scm (opensmtpd-activation): Create /var/spool/mail. * gnu/tests/mail.scm (run-opensmtpd-test): Check /var/spool/mail instead of /var/mail. Ludovic Courtès 2020-01-31gnu: Update opensmtpd configuration grammar....This follows up on commit 0d486909083c98d7c75cdfc027f89e69f9bf8f48. * gnu/services/mail.scm (%default-opensmtpd-config-file): Adapt to ‘new’ ≥6.4 grammar. * gnu/tests/mail.scm (%opensmtpd-os): Likewise. Tobias Geerinckx-Rice 2019-09-21services: dovecot: Fix predicate names for free-form fields...* gnu/services/mail.scm (free-form-fields?, free-form-args?): Change 'string' to 'string?'. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Alexey Abramov 2019-06-20services: opensmtpd: Extend the PAM service....* gnu/services/mail.scm (%opensmtpd-pam-services): New variable. (opensmtpd-service-type)[extensions]: Add it, extending PAM-ROOT-SERVICE-TYPE. Signed-off-by: Tobias Geerinckx-Rice <me@tobias.gr> Kristofer Buffington 2019-06-20services: Fix typo in (gnu services mail) exports....* gnu/services/mail.scm (define-module): Re-spell ‘%default-imap4d-config-file’. Tobias Geerinckx-Rice 2019-05-07services: dovecot: Rename auth-verbose-passwords?....* gnu/services/mail.scm (dovecot-configuration)[auth-verbose-passwords?]: Rename to auth-verbose-passwords, and change the type to a string, as this parameter can take one of three string values. * doc/guix.texi (Dovecot service): Update the corresponding documentation. Christopher Baines 2019-04-07services: Add 'imap4d-service-type'....* gnu/services/mail.scm (<imap4d-configuration>): New record type. (imap4d-shepherd-service): New procedure. (%default-imap4d-config-file, imap4d-service-type): New variables. * gnu/services/mail.scm (Mail Services): Document it. 宋文武 2019-03-13Remove traces of "GuixSD"....* gnu/bootloader/extlinux.scm (extlinux-configuration-file): Remove mentions of "GuixSD". * gnu/bootloader/grub.scm (install-grub-efi): Likewise. * gnu/build/vm.scm (make-iso9660-image): Change default #:volume-id to "Guix_image". (initialize-hard-disk): Search for the "Guix_image" label. * gnu/ci.scm (system-test-jobs, tarball-jobs): Remove "GuixSD". * gnu/installer/newt/welcome.scm (run-welcome-page): Likewise. * gnu/packages/audio.scm (supercollider)[description]: Likewise. * gnu/packages/curl.scm (curl): Likewise. * gnu/packages/emacs.scm (emacs): Likewise. * gnu/packages/gnome.scm (network-manager): Likewise. * gnu/packages/julia.scm (julia): Likewise. * gnu/packages/linux.scm (alsa-plugins): Likewise. (powertop, wireless-regdb): Likewise. * gnu/packages/package-management.scm (guix): Likewise. * gnu/packages/polkit.scm (polkit): Likewise. * gnu/packages/tex.scm (texlive-bin): Likewise. * gnu/services/base.scm (file-systems->fstab): Likewise. * gnu/services/cups.scm (%cups-activation): Likewise. * gnu/services/mail.scm (%dovecot-activation): Likewise. * gnu/services/messaging.scm (prosody-configuration)[log]: Likewise. * gnu/system/examples/vm-image.tmpl (vm-image-motd): Likewise. * gnu/system/install.scm (installation-os)[file-systems]: Change root file system label to "Guix_image". * gnu/system/mapped-devices.scm (check-device-initrd-modules): Remove "GuixSD". * gnu/system/vm.scm (system-docker-image): Likewise. (system-disk-image)[root-label]: Change to "Guix_image". * gnu/tests/install.scm (run-install): Remove "GuixSD". * guix/modules.scm (guix-module-name?): Likewise. * nix/libstore/optimise-store.cc: Likewise. Ludovic Courtès 2018-11-10services: dovecot: Set correct default value for the "auth" service....* gnu/services/mail.scm (dovecot-configuration): Set 'service-count' to 0 for the "auth" service. Clément Lassieur 2018-11-10services: dovecot: Allow to set 'process-limit'....* doc/guix.texi (Mail Services): Update accordingly. * gnu/services/mail.scm (service-configuration)[process-limit]: New field. (dovecot-configuration)[services]: Set 'process-limit' to its correct default value. Clément Lassieur 2018-11-10services: dovecot: Allow to set 'client-limit'....* doc/guix.texi (Mail Services): Update accordingly. * gnu/services/mail.scm (service-configuration)[client-limit]: New field. (dovecot-configuration)[services]: Set 'client-limit' to its correct default value. Clément Lassieur 2018-03-09services: dovecot: Copy dovecot.conf to /etc/dovecot....Many Dovecot utilities compiled with assumption of ‘/etc/dovecot/dovecot.conf’ existence. * gnu/services/mail.scm (dovecot-shepherd-service): Move config generation. Invoke ‘dovecot’ without ‘-c’ flag. (%dovecot-activation): Copy ‘dovecot.conf’ to ‘/etc/dovecot’. (dovecot-service-type): Make ‘%dovecot-activation’ non-constant. Oleg Pykhalov 2017-12-23gnu: dovecot: Update to 2.3.0....* gnu/packages/mail.scm (dovecot): Update to 2.3.0. * gnu/services/mail.scm (dovecot-configuration)[director-doveadm-port] [ssl-parameters-regenerate]: Delete fields. [ssl-protocols]: Rename to... [ssl-min-protocol]: ...this. [mail-log-prefix, mdbox-rotate-size, ssl-cipher-list, imap-logout-format]: Update default values. * doc/guix.texi (Mail Services): Reflect the above changes to the service. Tobias Geerinckx-Rice 2017-04-19services: Make exim-service-type use mail-aliases-service-type...* gnu/services/mail.scm (exim-configuration)[aliases]: Remove field. (exim-activation, exim-shepherd-service): Remove alias from matches. (exim-etc): Remove procedure. (exim-service-type): Extend mail-aliases-service-type instead of etc-service-type. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Carlo Zancanaro 2017-04-19services: Add mail-aliases-service-type....* gnu/services/mail.scm (mail-aliases-etc): New procedure. (mail-aliases-service-type): New variable. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Carlo Zancanaro 2017-04-01services: dovecot: Fix passwd and userdb 'args' types....* gnu/services/mail.