aboutsummaryrefslogtreecommitdiff
/* GNU Guix --- Functional package management for GNU
   Copyright (C) 2016-2019, 2023 Ludovic Courtès <ludo@gnu.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/>.  */

#include <builtins.hh>
#include <util.hh>
#include <globals.hh>

#include <unistd.h>
#include <cstdlib>

namespace nix {

static void builtinDownload(const Derivation &drv,
			    const std::string &drvPath,
			    const std::string &output)
{
    /* Invoke 'guix perform-download'.  */
    Strings args;
    args.push_back("perform-download");
    args.push_back(drvPath);

    /* Close all other file descriptors. */
    closeMostFDs(set<int>());

    const char *const argv[] =
      {
	  "guix", "perform-download", drvPath.c_str(), output.c_str(), NULL
      };

    /* Tell the script what the store file name is, so that
       'strip-store-file-name' (used for instance to determine the URL of
       content-addressed mirrors) works correctly.  */
    setenv("NIX_STORE", settings.nixStore.c_str(), 1);

    /* Tell it about options such as "print-extended-build-trace".  */
    setenv("_NIX_OPTIONS", settings.pack().c_str(), 1);

    const string program = settings.guixProgram;
    execv(program.c_str(), (char *const *) argv);

    throw SysError(format("failed to run download program '%1%'") % program);
}

static const std::map<std::string, derivationBuilder> builtins =
{
    { "download", builtinDownload },
    { "git-download", builtinDownload }
};

derivationBuilder lookupBuiltinBuilder(const std::string & name)
{
    if (name.substr(0, 8) == "builtin:")
    {
	auto realName = name.substr(8);
	auto builder = builtins.find(realName);
	return builder == builtins.end() ? NULL : builder->second;
    }
    else
	return NULL;
}

std::list<std::string> builtinBuilderNames()
{
    std::list<std::string> result;
    for(auto&& iter: builtins)
    {
	result.push_back(iter.first);
    }
    return result;
}

}
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