From 8698d986db21d6399fb57f1af1e38d6223bf9b92 Mon Sep 17 00:00:00 2001 From: Kei Kebreau Date: Fri, 24 May 2019 20:50:31 -0400 Subject: gnu: supertux: Update to 0.6.0. * gnu/packages/games.scm (supertux): Update to 0.6.0. [source]: Add patches. [arguments]: Add -DUSE_SYSTEM_PHYSFS=ON. Add 'patch-squirrel-path' phase. [inputs]: Add freetype and squirrel. * gnu/packages/patches/supertux-fix-build-with-gcc5.patch, gnu/packages/patches/supertux-unbundle-squirrel.patch: New files. * gnu/local.mk (dist_patch_DATA): Add them. --- gnu/local.mk | 2 ++ 1 file changed, 2 insertions(+) (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index d0745b0056e..57d3590b578 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1283,6 +1283,8 @@ dist_patch_DATA = \ %D%/packages/patches/superlu-dist-awpm-grid.patch \ %D%/packages/patches/superlu-dist-fix-mpi-deprecations.patch \ %D%/packages/patches/superlu-dist-scotchmetis.patch \ + %D%/packages/patches/supertux-fix-build-with-gcc5.patch \ + %D%/packages/patches/supertux-unbundle-squirrel.patch \ %D%/packages/patches/swig-guile-gc.patch \ %D%/packages/patches/swish-e-search.patch \ %D%/packages/patches/swish-e-format-security.patch \ -- cgit v1.3 From 0d3dbe3f56949ad07d8a3816a8a884d3726d2c7d Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Sun, 26 May 2019 14:18:26 +0200 Subject: gnu: libevent: Update to 2.1.0. * gnu/packages/patches/libevent-2.1-dns-tests.patch, gnu/packages/patches/libevent-2.1-skip-failing-test.patch: Delete files. * gnu/local.mk (dist_patch_DATA): Adjust accordingly. * gnu/packages/libevent.scm (libevent): Update to 2.1.10. [source](patches): Remove. --- gnu/local.mk | 2 -- gnu/packages/libevent.scm | 10 +++------ gnu/packages/patches/libevent-2.1-dns-tests.patch | 26 ---------------------- .../patches/libevent-2.1-skip-failing-test.patch | 24 -------------------- 4 files changed, 3 insertions(+), 59 deletions(-) delete mode 100644 gnu/packages/patches/libevent-2.1-dns-tests.patch delete mode 100644 gnu/packages/patches/libevent-2.1-skip-failing-test.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 57d3590b578..3a199f82f8a 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -989,8 +989,6 @@ dist_patch_DATA = \ %D%/packages/patches/libevent-2.0-CVE-2016-10196.patch \ %D%/packages/patches/libevent-2.0-CVE-2016-10197.patch \ %D%/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch \ - %D%/packages/patches/libevent-2.1-dns-tests.patch \ - %D%/packages/patches/libevent-2.1-skip-failing-test.patch \ %D%/packages/patches/libexif-CVE-2016-6328.patch \ %D%/packages/patches/libexif-CVE-2017-7544.patch \ %D%/packages/patches/libgcrypt-make-yat2m-reproducible.patch \ diff --git a/gnu/packages/libevent.scm b/gnu/packages/libevent.scm index 01e1e3b00a5..72227c1d957 100644 --- a/gnu/packages/libevent.scm +++ b/gnu/packages/libevent.scm @@ -3,7 +3,7 @@ ;;; Copyright © 2015, 2017 Mark H Weaver ;;; Copyright © 2015 Eric Dvorsak ;;; Copyright © 2016 David Thompson -;;; Copyright © 2017 Marius Bakke +;;; Copyright © 2017, 2019 Marius Bakke ;;; Copyright © 2017 Efraim Flashner ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice ;;; Copyright © 2019 Pierre Neidhardt @@ -41,7 +41,7 @@ (define-public libevent (package (name "libevent") - (version "2.1.8") + (version "2.1.10") (source (origin (method url-fetch) (uri (string-append @@ -49,11 +49,7 @@ version "-stable/libevent-" version "-stable.tar.gz")) (sha256 (base32 - "1hhxnxlr0fsdv7bdmzsnhdz16fxf3jg2r6vyljcl3kj6pflcap4n")) - (patches (search-patches "libevent-2.1-dns-tests.patch" - ;; XXX: Try removing this for > 2.1.8. - ;; https://github.com/libevent/libevent/issues/452 - "libevent-2.1-skip-failing-test.patch")))) + "1c25928gdv495clxk2v1d4gkr5py7ack4gx2n7d13frnld0syr78")))) (build-system gnu-build-system) (arguments ;; This skips some of the tests which fail on armhf and aarch64. diff --git a/gnu/packages/patches/libevent-2.1-dns-tests.patch b/gnu/packages/patches/libevent-2.1-dns-tests.patch deleted file mode 100644 index 091752a49db..00000000000 --- a/gnu/packages/patches/libevent-2.1-dns-tests.patch +++ /dev/null @@ -1,26 +0,0 @@ -Disable tests that rely on usable DNS lookups, which aren't available -in build chroots. - ---- libevent-2.0.21-stable/test/regress_dns.c 2013-01-20 22:32:09.000000000 +0100 -+++ libevent-2.0.21-stable/test/regress_dns.c 2013-01-20 22:32:30.000000000 +0100 -@@ -2120,10 +2120,6 @@ - - struct testcase_t dns_testcases[] = { - DNS_LEGACY(server, TT_FORK|TT_NEED_BASE), -- DNS_LEGACY(gethostbyname, TT_FORK|TT_NEED_BASE|TT_NEED_DNS|TT_OFF_BY_DEFAULT), -- DNS_LEGACY(gethostbyname6, TT_FORK|TT_NEED_BASE|TT_NEED_DNS|TT_OFF_BY_DEFAULT), -- DNS_LEGACY(gethostbyaddr, TT_FORK|TT_NEED_BASE|TT_NEED_DNS|TT_OFF_BY_DEFAULT), -- { "resolve_reverse", dns_resolve_reverse, TT_FORK|TT_OFF_BY_DEFAULT, NULL, NULL }, - { "search_empty", dns_search_empty_test, TT_FORK|TT_NEED_BASE, &basic_setup, NULL }, - { "search", dns_search_test, TT_FORK|TT_NEED_BASE, &basic_setup, NULL }, - { "search_lower", dns_search_lower_test, TT_FORK|TT_NEED_BASE, &basic_setup, NULL }, -@@ -2163,9 +2159,6 @@ - - { "client_fail_requests", dns_client_fail_requests_test, - TT_FORK|TT_NEED_BASE, &basic_setup, NULL }, -- { "client_fail_requests_getaddrinfo", -- dns_client_fail_requests_getaddrinfo_test, -- TT_FORK|TT_NEED_BASE, &basic_setup, NULL }, - - END_OF_TESTCASES - }; diff --git a/gnu/packages/patches/libevent-2.1-skip-failing-test.patch b/gnu/packages/patches/libevent-2.1-skip-failing-test.patch deleted file mode 100644 index d9ea1d422d1..00000000000 --- a/gnu/packages/patches/libevent-2.1-skip-failing-test.patch +++ /dev/null @@ -1,24 +0,0 @@ -These fail on 32-bit due to an overflow bug in the test program. - -See test/regress_util.c:1448. - -Upstream bug URL: - -https://github.com/libevent/libevent/issues/452 - -diff --git a/test/regress_util.c b/test/regress_util.c -index ef6a1487..4de501fc 100644 ---- a/test/regress_util.c -+++ b/test/regress_util.c -@@ -1413,9 +1413,9 @@ static struct date_rfc1123_case { - { 1323648000, "Mon, 12 Dec 2011 00:00:00 GMT"}, - #ifndef _WIN32 - /** In win32 case we have max "23:59:59 January 18, 2038, UTC" for time32 */ -- { 4294967296, "Sun, 07 Feb 2106 06:28:16 GMT"} /* 2^32 */, -+ //{ 4294967296, "Sun, 07 Feb 2106 06:28:16 GMT"} /* 2^32 */, - /** In win32 case we have max "23:59:59, December 31, 3000, UTC" for time64 */ -- {253402300799, "Fri, 31 Dec 9999 23:59:59 GMT"} /* long long future no one can imagine */, -+ //{253402300799, "Fri, 31 Dec 9999 23:59:59 GMT"} /* long long future no one can imagine */, - { 1456704000, "Mon, 29 Feb 2016 00:00:00 GMT"} /* leap year */, - #endif - { 1435708800, "Wed, 01 Jul 2015 00:00:00 GMT"} /* leap second */, -- cgit v1.3 From db6dd04c3dc0f893931f5cb823755eb792f2e9ee Mon Sep 17 00:00:00 2001 From: Julien Lepiller Date: Fri, 31 May 2019 14:37:16 +0200 Subject: gnu: gtksourceview-2: Fix finding default data. * gnu/packages/patches/gtksourceview-2-add-default-directory.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/gtk.scm (gtksourceview-2)[source]: Use it. --- gnu/local.mk | 1 + gnu/packages/gtk.scm | 5 +++- .../gtksourceview-2-add-default-directory.patch | 33 ++++++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/gtksourceview-2-add-default-directory.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 3a199f82f8a..55fa90f9267 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -897,6 +897,7 @@ dist_patch_DATA = \ %D%/packages/patches/gtk3-respect-GUIX_GTK3_PATH.patch \ %D%/packages/patches/gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch \ %D%/packages/patches/gtkglext-disable-disable-deprecated.patch \ + %D%/packages/patches/gtksourceview-2-add-default-directory.patch \ %D%/packages/patches/gzdoom-search-in-installed-share.patch \ %D%/packages/patches/haskell-mode-unused-variables.patch \ %D%/packages/patches/haskell-mode-make-check.patch \ diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm index 62b33a45ba5..b864225e3d9 100644 --- a/gnu/packages/gtk.scm +++ b/gnu/packages/gtk.scm @@ -348,7 +348,10 @@ diagrams.") name "-" version ".tar.bz2")) (sha256 (base32 - "07hrabhpl6n8ajz10s0d960jdwndxs87szxyn428mpxi8cvpg1f5")))) + "07hrabhpl6n8ajz10s0d960jdwndxs87szxyn428mpxi8cvpg1f5")) + (patches + (search-patches + "gtksourceview-2-add-default-directory.patch")))) (build-system gnu-build-system) (native-inputs `(("intltool" ,intltool) diff --git a/gnu/packages/patches/gtksourceview-2-add-default-directory.patch b/gnu/packages/patches/gtksourceview-2-add-default-directory.patch new file mode 100644 index 00000000000..c4b5052b813 --- /dev/null +++ b/gnu/packages/patches/gtksourceview-2-add-default-directory.patch @@ -0,0 +1,33 @@ +From fc401acb15f15d487c942437b6fb429289dd3c67 Mon Sep 17 00:00:00 2001 +From: Julien Lepiller +Date: Fri, 31 May 2019 13:22:25 +0200 +Subject: [PATCH] Add installation directory as a default directory. + +In Guix, this library is installed in a separate directory in the store, +and it's typically not installed system-wide in a fixed directory. Add +the store path to the set of default directories so dependents can find +default langs and source highlighting scheme. +--- + gtksourceview/gtksourceview-utils.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/gtksourceview/gtksourceview-utils.c b/gtksourceview/gtksourceview-utils.c +index 6f06bab..c3467d5 100644 +--- a/gtksourceview/gtksourceview-utils.c ++++ b/gtksourceview/gtksourceview-utils.c +@@ -66,6 +66,12 @@ _gtk_source_view_get_default_dirs (const char *basename, + basename, + NULL)); + ++ /* installed dir */ ++ g_ptr_array_add (dirs, g_build_filename (DATADIR, ++ SOURCEVIEW_DIR, ++ basename, ++ NULL)); ++ + g_ptr_array_add (dirs, NULL); + + return (gchar**) g_ptr_array_free (dirs, FALSE); +-- +2.21.0 + -- cgit v1.3 From f6b0e1f8ff6a6459d7d39238ced165f4caa988fe Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Thu, 4 Apr 2019 17:36:49 +0100 Subject: services: Add getmail. Getmail is a mail retriever written in Python, this commit adds a service-type to run getmail. I'm looking at this, as it's a convinient way of getting mailing list messages in to Patchwork. I initially tried putting this in the (gnu services mail) module, but due to also trying to use the define-configuration pattern, it conflicted with the dovecot service. * gnu/services/getmail.scm: New file. * gnu/local.mk: Add it. * gnu/tests/mail.scm (%getmail-os, %test-getmail): New variables. (run-getmail-test): New procedure. --- doc/guix.texi | 291 ++++++++++++++++++++++++++++++++++++ gnu/local.mk | 1 + gnu/services/getmail.scm | 380 +++++++++++++++++++++++++++++++++++++++++++++++ gnu/tests/mail.scm | 178 +++++++++++++++++++++- 4 files changed, 849 insertions(+), 1 deletion(-) create mode 100644 gnu/services/getmail.scm (limited to 'gnu/local.mk') diff --git a/doc/guix.texi b/doc/guix.texi index 340b806962c..d94b1f2b16d 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -16716,6 +16716,297 @@ variables. @end table @end deftp +@subsubheading Getmail service + +@cindex IMAP +@cindex POP + +@deffn {Scheme Variable} getmail-service-type +This is the type of the @uref{http://pyropus.ca/software/getmail/, Getmail} +mail retriever, whose value should be an @code{getmail-configuration}. +@end deffn + +Available @code{getmail-configuration} fields are: + +@deftypevr {@code{getmail-configuration} parameter} symbol name +A symbol to identify the getmail service. + +Defaults to @samp{"unset"}. + +@end deftypevr + +@deftypevr {@code{getmail-configuration} parameter} package package +The getmail package to use. + +@end deftypevr + +@deftypevr {@code{getmail-configuration} parameter} string user +The user to run getmail as. + +Defaults to @samp{"getmail"}. + +@end deftypevr + +@deftypevr {@code{getmail-configuration} parameter} string group +The group to run getmail as. + +Defaults to @samp{"getmail"}. + +@end deftypevr + +@deftypevr {@code{getmail-configuration} parameter} string directory +The getmail directory to use. + +Defaults to @samp{"/var/lib/getmail/default"}. + +@end deftypevr + +@deftypevr {@code{getmail-configuration} parameter} getmail-configuration-file rcfile +The getmail configuration file to use. + +Available @code{getmail-configuration-file} fields are: + +@deftypevr {@code{getmail-configuration-file} parameter} getmail-retriever-configuration retriever +What mail account to retrieve mail from, and how to access that account. + +Available @code{getmail-retriever-configuration} fields are: + +@deftypevr {@code{getmail-retriever-configuration} parameter} string type +The type of mail retriever to use. Valid values include @samp{passwd} +and @samp{static}. + +Defaults to @samp{"SimpleIMAPSSLRetriever"}. + +@end deftypevr + +@deftypevr {@code{getmail-retriever-configuration} parameter} string server +Space separated list of arguments to the userdb driver. + +Defaults to @samp{unset}. + +@end deftypevr + +@deftypevr {@code{getmail-retriever-configuration} parameter} string username +Space separated list of arguments to the userdb driver. + +Defaults to @samp{unset}. + +@end deftypevr + +@deftypevr {@code{getmail-retriever-configuration} parameter} non-negative-integer port +Space separated list of arguments to the userdb driver. + +Defaults to @samp{#f}. + +@end deftypevr + +@deftypevr {@code{getmail-retriever-configuration} parameter} string password +Override fields from passwd. + +Defaults to @samp{""}. + +@end deftypevr + +@deftypevr {@code{getmail-retriever-configuration} parameter} list password-command +Override fields from passwd. + +Defaults to @samp{()}. + +@end deftypevr + +@deftypevr {@code{getmail-retriever-configuration} parameter} string keyfile +PEM-formatted key file to use for the TLS negotiation + +Defaults to @samp{""}. + +@end deftypevr + +@deftypevr {@code{getmail-retriever-configuration} parameter} string certfile +PEM-formatted certificate file to use for the TLS negotiation + +Defaults to @samp{""}. + +@end deftypevr + +@deftypevr {@code{getmail-retriever-configuration} parameter} string ca-certs +CA certificates to use + +Defaults to @samp{""}. + +@end deftypevr + +@deftypevr {@code{getmail-retriever-configuration} parameter} parameter-alist extra-parameters +Extra retriever parameters + +Defaults to @samp{()}. + +@end deftypevr + +@end deftypevr + +@deftypevr {@code{getmail-configuration-file} parameter} getmail-destination-configuration destination +What to do with retrieved messages. + +Available @code{getmail-destination-configuration} fields are: + +@deftypevr {@code{getmail-destination-configuration} parameter} string type +The type of mail destination. Valid values include @samp{Maildir}, +@samp{Mboxrd} and @samp{MDA_external}. + +Defaults to @samp{unset}. + +@end deftypevr + +@deftypevr {@code{getmail-destination-configuration} parameter} string-or-filelike path +The path option for the mail destination. The behaviour depends on the +chosen type. + +Defaults to @samp{""}. + +@end deftypevr + +@deftypevr {@code{getmail-destination-configuration} parameter} parameter-alist extra-parameters +Extra destination parameters + +Defaults to @samp{()}. + +@end deftypevr + +@end deftypevr + +@deftypevr {@code{getmail-configuration-file} parameter} getmail-options-configuration options +Configure getmail. + +Available @code{getmail-options-configuration} fields are: + +@deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer verbose +If set to @samp{0}, getmail will only print warnings and errors. A +value of @samp{1} means that messages will be printed about retrieving +and deleting messages. If set to @samp{2}, getmail will print messages +about each of it's actions. + +Defaults to @samp{1}. + +@end deftypevr + +@deftypevr {@code{getmail-options-configuration} parameter} boolean read-all +If true, getmail will retrieve all available messages. Otherwise it +will only retrieve messages it hasn't seen previously. + +Defaults to @samp{#t}. + +@end deftypevr + +@deftypevr {@code{getmail-options-configuration} parameter} boolean delete +If set to true, messages will be deleted from the server after +retrieving and successfully delivering them. Otherwise, messages will +be left on the server. + +Defaults to @samp{#f}. + +@end deftypevr + +@deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer delete-after +Getmail will delete messages this number of days after seeing them, if +they have not been delivered. This means messages will be left on the +server this number of days after delivering them. A value of @samp{0} +disabled this feature. + +Defaults to @samp{0}. + +@end deftypevr + +@deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer delete-bigger-than +Delete messages larger than this of bytes after retrieving them, even if +the delete and delete-after options are disabled. A value of @samp{0} +disables this feature. + +Defaults to @samp{0}. + +@end deftypevr + +@deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer max-bytes-per-session +Retrieve messages totalling up to this number of bytes before closing +the session with the server. A value of @samp{0} disables this feature. + +Defaults to @samp{0}. + +@end deftypevr + +@deftypevr {@code{getmail-options-configuration} parameter} non-negative-integer max-message-size +Don't retrieve messages larger than this number of bytes. A value of +@samp{0} disables this feature. + +Defaults to @samp{0}. + +@end deftypevr + +@deftypevr {@code{getmail-options-configuration} parameter} boolean delivered-to +If true, getmail will add a Delivered-To header to messages. + +Defaults to @samp{#t}. + +@end deftypevr + +@deftypevr {@code{getmail-options-configuration} parameter} boolean received +If set, getmail adds a Received header to the messages. + +Defaults to @samp{#t}. + +@end deftypevr + +@deftypevr {@code{getmail-options-configuration} parameter} string message-log +Getmail will record a log of its actions to the named file. A value of +@samp{""} disables this feature. + +Defaults to @samp{""}. + +@end deftypevr + +@deftypevr {@code{getmail-options-configuration} parameter} boolean message-log-syslog +If true, getmail will record a log of its actions using the system +logger. + +Defaults to @samp{#t}. + +@end deftypevr + +@deftypevr {@code{getmail-options-configuration} parameter} boolean message-log-verbose +If true, getmail will log information about messages not retrieved and +the reason for not retrieving them, as well as starting and ending +information lines. + +Defaults to @samp{#t}. + +@end deftypevr + +@deftypevr {@code{getmail-options-configuration} parameter} parameter-alist extra-parameters +Extra options to include. + +Defaults to @samp{()}. + +@end deftypevr + +@end deftypevr + +@end deftypevr + +@deftypevr {@code{getmail-configuration} parameter} list idle +A list of mailboxes that getmail should wait on the server for new mail +notifications. This depends on the server supporting the IDLE +extension. + +Defaults to @samp{()}. + +@end deftypevr + +@deftypevr {@code{getmail-configuration} parameter} list environment-variables +Environment variables to set for getmail. + +Defaults to @samp{()}. + +@end deftypevr + @subsubheading Mail Aliases Service @cindex email aliases diff --git a/gnu/local.mk b/gnu/local.mk index 55fa90f9267..9b9c6e00ecc 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -516,6 +516,7 @@ GNU_SYSTEM_MODULES = \ %D%/services/docker.scm \ %D%/services/authentication.scm \ %D%/services/games.scm \ + %D%/services/getmail.scm \ %D%/services/kerberos.scm \ %D%/services/lirc.scm \ %D%/services/virtualization.scm \ diff --git a/gnu/services/getmail.scm b/gnu/services/getmail.scm new file mode 100644 index 00000000000..b807bb3a5dc --- /dev/null +++ b/gnu/services/getmail.scm @@ -0,0 +1,380 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2019 Christopher Baines +;;; +;;; 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 (gnu services getmail) + #:use-module (gnu services) + #:use-module (gnu services base) + #:use-module (gnu services configuration) + #:use-module (gnu services shepherd) + #:use-module (gnu system pam) + #:use-module (gnu system shadow) + #:use-module (gnu packages mail) + #:use-module (gnu packages admin) + #:use-module (gnu packages tls) + #:use-module (guix records) + #:use-module (guix store) + #:use-module (guix packages) + #:use-module (guix gexp) + #:use-module (ice-9 match) + #:use-module (ice-9 format) + #:use-module (srfi srfi-1) + #:export (getmail-retriever-configuration + getmail-retriever-configuration-extra-parameters + getmail-destination-configuration + getmail-options-configuration + getmail-configuration-file + getmail-configuration + getmail-service-type)) + +;;; Commentary: +;;; +;;; Service for the getmail mail retriever. +;;; +;;; Code: + +(define (uglify-field-name field-name) + (let ((str (symbol->string field-name))) + (string-join (string-split (if (string-suffix? "?" str) + (substring str 0 (1- (string-length str))) + str) + #\-) + "_"))) + +(define (serialize-field field-name val) + #~(let ((val '#$val)) + (format #f "~a = ~a\n" + #$(uglify-field-name field-name) + (cond + ((list? val) + (string-append + "(" + (string-concatenate + (map (lambda (list-val) + (format #f "\"~a\", " list-val)) + val)) + ")")) + (else + val))))) + +(define (serialize-string field-name val) + (if (string=? val "") + "" + (serialize-field field-name val))) + +(define (string-or-filelike? val) + (or (string? val) + (file-like? val))) +(define (serialize-string-or-filelike field-name val) + (if (equal? val "") + "" + (serialize-field field-name val))) + +(define (serialize-boolean field-name val) + (serialize-field field-name (if val "true" "false"))) + +(define (non-negative-integer? val) + (and (exact-integer? val) (not (negative? val)))) +(define (serialize-non-negative-integer field-name val) + (serialize-field field-name val)) + +(define serialize-list serialize-field) + +(define parameter-alist? list?) +(define (serialize-parameter-alist field-name val) + #~(string-append + #$@(map (match-lambda + ((key . value) + (serialize-field key value))) + val))) + +(define (serialize-getmail-retriever-configuration field-name val) + (serialize-configuration val getmail-retriever-configuration-fields)) + +(define-configuration getmail-retriever-configuration + (type + (string "SimpleIMAPSSLRetriever") + "The type of mail retriever to use. Valid values include +@samp{passwd} and @samp{static}.") + (server + (string 'unset) + "Space separated list of arguments to the userdb driver.") + (username + (string 'unset) + "Space separated list of arguments to the userdb driver.") + (port + (non-negative-integer #f) + "Space separated list of arguments to the userdb driver.") + (password + (string "") + "Override fields from passwd.") + (password-command + (list '()) + "Override fields from passwd.") + (keyfile + (string "") + "PEM-formatted key file to use for the TLS negotiation") + (certfile + (string "") + "PEM-formatted certificate file to use for the TLS negotiation") + (ca-certs + (string "") + "CA certificates to use") + (extra-parameters + (parameter-alist '()) + "Extra retriever parameters")) + +(define (serialize-getmail-destination-configuration field-name val) + (serialize-configuration val getmail-destination-configuration-fields)) + +(define-configuration getmail-destination-configuration + (type + (string 'unset) + "The type of mail destination. Valid values include @samp{Maildir}, +@samp{Mboxrd} and @samp{MDA_external}.") + (path + (string-or-filelike "") + "The path option for the mail destination. The behaviour depends on the +chosen type.") + (extra-parameters + (parameter-alist '()) + "Extra destination parameters")) + +(define (serialize-getmail-options-configuration field-name val) + (serialize-configuration val getmail-options-configuration-fields)) + +(define-configuration getmail-options-configuration + (verbose + (non-negative-integer 1) + "If set to @samp{0}, getmail will only print warnings and errors. A value +of @samp{1} means that messages will be printed about retrieving and deleting +messages. If set to @samp{2}, getmail will print messages about each of it's +actions.") + (read-all + (boolean #t) + "If true, getmail will retrieve all available messages. Otherwise it will +only retrieve messages it hasn't seen previously.") + (delete + (boolean #f) + "If set to true, messages will be deleted from the server after retrieving +and successfully delivering them. Otherwise, messages will be left on the +server.") + (delete-after + (non-negative-integer 0) + "Getmail will delete messages this number of days after seeing them, if +they have not been delivered. This means messages will be left on the server +this number of days after delivering them. A value of @samp{0} disabled this +feature.") + (delete-bigger-than + (non-negative-integer 0) + "Delete messages larger than this of bytes after retrieving them, even if +the delete and delete-after options are disabled. A value of @samp{0} +disables this feature.") + (max-bytes-per-session + (non-negative-integer 0) + "Retrieve messages totalling up to this number of bytes before closing the +session with the server. A value of @samp{0} disables this feature.") + (max-message-size + (non-negative-integer 0) + "Don't retrieve messages larger than this number of bytes. A value of +@samp{0} disables this feature.") + (delivered-to + (boolean #t) + "If true, getmail will add a Delivered-To header to messages.") + (received + (boolean #t) + "If set, getmail adds a Received header to the messages.") + (message-log + (string "") + "Getmail will record a log of its actions to the named file. A value of +@samp{\"\"} disables this feature.") + (message-log-syslog + (boolean #t) + "If true, getmail will record a log of its actions using the system +logger.") + (message-log-verbose + (boolean #t) + "If true, getmail will log information about messages not retrieved and the +reason for not retrieving them, as well as starting and ending information +lines.") + (extra-parameters + (parameter-alist '()) + "Extra options to include.")) + +(define (serialize-getmail-configuration-file field-name val) + (match val + (($ location + retriever destination options) + #~(string-append + "[retriever]\n" + #$(serialize-getmail-retriever-configuration #f retriever) + "\n[destination]\n" + #$(serialize-getmail-destination-configuration #f destination) + "\n[options]\n" + #$(serialize-getmail-options-configuration #f options))))) + +(define-configuration getmail-configuration-file + (retriever + (getmail-retriever-configuration (getmail-retriever-configuration)) + "What mail account to retrieve mail from, and how to access that account.") + (destination + (getmail-destination-configuration (getmail-destination-configuration)) + "What to do with retrieved messages.") + (options + (getmail-options-configuration (getmail-options-configuration)) + "Configure getmail.")) + +(define (serialize-symbol field-name val) "") +(define (serialize-getmail-configuration field-name val) "") + +(define-configuration getmail-configuration + (name + (symbol "unset") + "A symbol to identify the getmail service.") + (package + (package getmail) + "The getmail package to use.") + (user + (string "getmail") + "The user to run getmail as.") + (group + (string "getmail") + "The group to run getmail as.") + (directory + (string "/var/lib/getmail/default") + "The getmail directory to use.") + (rcfile + (getmail-configuration-file (getmail-configuration-file)) + "The getmail configuration file to use.") + (idle + (list '()) + "A list of mailboxes that getmail should wait on the server for new mail +notifications. This depends on the server supporting the IDLE extension.") + (environment-variables + (list '()) + "Environment variables to set for getmail.")) + +(define (generate-getmail-documentation) + (generate-documentation + `((getmail-configuration + ,getmail-configuration-fields + (rcfile getmail-configuration-file)) + (getmail-configuration-file + ,getmail-configuration-file-fields + (retriever getmail-retriever-configuration) + (destination getmail-destination-configuration) + (options getmail-options-configuration)) + (getmail-retriever-configuration ,getmail-retriever-configuration-fields) + (getmail-destination-configuration ,getmail-destination-configuration-fields) + (getmail-options-configuration ,getmail-options-configuration-fields)) + 'getmail-configuration)) + +(define-gexp-compiler (getmail-configuration-file-compiler + (rcfile ) system target) + (gexp->derivation + "getmailrc" + #~(call-with-output-file #$output + (lambda (port) + (display #$(serialize-getmail-configuration-file #f rcfile) + port))) + #:system system + #:target target)) + +(define (getmail-accounts configs) + (let ((users (delete-duplicates + (map getmail-configuration-user + configs))) + (groups (delete-duplicates + (map getmail-configuration-group + configs)))) + (append + (map (lambda (group) + (user-group + (name group) + (system? #t))) + groups) + (map (lambda (user) + (user-account + (name user) + (group (getmail-configuration-group + (find (lambda (config) + (and + (string=? user (getmail-configuration-user config)) + (getmail-configuration-group config))) + configs))) + (system? #t) + (comment "Getmail user") + (home-directory "/var/empty") + (shell (file-append shadow "/sbin/nologin")))) + users)))) + +(define (getmail-activation configs) + "Return the activation GEXP for CONFIGS." + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + #$@(map + (lambda (config) + #~(let* ((pw (getpw #$(getmail-configuration-user config))) + (uid (passwd:uid pw)) + (gid (passwd:gid pw)) + (getmaildir #$(getmail-configuration-directory config))) + (mkdir-p getmaildir) + (chown getmaildir uid gid))) + configs)))) + +(define (getmail-shepherd-services configs) + "Return a list of for CONFIGS." + (map (match-lambda + (($ location name package + user group directory rcfile idle + environment-variables) + (shepherd-service + (documentation "Run getmail.") + (provision (list (symbol-append 'getmail- name))) + (requirement '(networking)) + (start #~(make-forkexec-constructor + `(#$(file-append package "/bin/getmail") + ,(string-append "--getmaildir=" #$directory) + #$@(map (lambda (idle) + (string-append "--idle=" idle)) + idle) + ,(string-append "--rcfile=" #$rcfile)) + #:user #$user + #:group #$group + #:environment-variables + (list #$@environment-variables) + #:log-file + #$(string-append "/var/log/getmail-" + (symbol->string name))))))) + configs)) + +(define getmail-service-type + (service-type + (name 'getmail) + (extensions + (list (service-extension shepherd-root-service-type + getmail-shepherd-services) + (service-extension activation-service-type + getmail-activation) + (service-extension account-service-type + getmail-accounts))) + (description + "Run @command{getmail}, a mail retriever program.") + (default-value '()) + (compose concatenate) + (extend append))) diff --git a/gnu/tests/mail.scm b/gnu/tests/mail.scm index 33aa4d3437a..10e5be71d89 100644 --- a/gnu/tests/mail.scm +++ b/gnu/tests/mail.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2017 Ludovic Courtès ;;; Copyright © 2018 Oleg Pykhalov ;;; Copyright © 2018 Clément Lassieur +;;; Copyright © 2019 Christopher Baines ;;; ;;; This file is part of GNU Guix. ;;; @@ -25,6 +26,7 @@ #:use-module (gnu system) #:use-module (gnu system vm) #:use-module (gnu services) + #:use-module (gnu services getmail) #:use-module (gnu services mail) #:use-module (gnu services networking) #:use-module (guix gexp) @@ -32,7 +34,8 @@ #:use-module (ice-9 ftw) #:export (%test-opensmtpd %test-exim - %test-dovecot)) + %test-dovecot + %test-getmail)) (define %opensmtpd-os (simple-operating-system @@ -394,3 +397,176 @@ Subject: Hello Nice to meet you!") (name "dovecot") (description "Connect to a running Dovecot server.") (value (run-dovecot-test)))) + +(define %getmail-os + (simple-operating-system + (service dhcp-client-service-type) + (service dovecot-service-type + (dovecot-configuration + (disable-plaintext-auth? #f) + (ssl? "no") + (auth-mechanisms '("anonymous" "plain")) + (auth-anonymous-username "alice") + (mail-location + (string-append "maildir:~/Maildir" + ":INBOX=~/Maildir/INBOX" + ":LAYOUT=fs")))) + (service getmail-service-type + (list + (getmail-configuration + (name 'test) + (user "alice") + (directory "/var/lib/getmail/alice") + (idle '("TESTBOX")) + (rcfile + (getmail-configuration-file + (retriever + (getmail-retriever-configuration + (type "SimpleIMAPRetriever") + (server "localhost") + (username "alice") + (port 143) + (extra-parameters + '((password . "testpass") + (mailboxes . ("TESTBOX")))))) + (destination + (getmail-destination-configuration + (type "Maildir") + (path "/home/alice/TestMaildir/"))) + (options + (getmail-options-configuration + (read-all #f)))))))))) + +(define (run-getmail-test) + "Return a test of an OS running Getmail service." + (define vm + (virtual-machine + (operating-system (marionette-operating-system + %getmail-os + #:imported-modules '((gnu services herd)))) + (port-forwardings '((8143 . 143))))) + + (define test + (with-imported-modules '((gnu build marionette)) + #~(begin + (use-modules (gnu build marionette) + (ice-9 iconv) + (ice-9 rdelim) + (rnrs base) + (rnrs bytevectors) + (srfi srfi-64)) + + (define marionette + (make-marionette '(#$vm))) + + (define* (message-length message #:key (encoding "iso-8859-1")) + (bytevector-length (string->bytevector message encoding))) + + (define message "From: test@example.com\n\ +Subject: Hello Nice to meet you!") + + (mkdir #$output) + (chdir #$output) + + (test-begin "getmail") + + ;; Wait for dovecot to be up and running. + (test-assert "dovecot running" + (marionette-eval + '(begin + (use-modules (gnu services herd)) + (start-service 'dovecot)) + marionette)) + + (test-assert "set password for alice" + (marionette-eval + '(system "echo -e \"testpass\ntestpass\" | passwd alice") + marionette)) + + ;; Wait for getmail to be up and running. + (test-assert "getmail-test running" + (marionette-eval + '(let* ((pw (getpw "alice")) + (uid (passwd:uid pw)) + (gid (passwd:gid pw))) + (use-modules (gnu services herd)) + + (for-each + (lambda (dir) + (mkdir dir) + (chown dir uid gid)) + '("/home/alice/TestMaildir" + "/home/alice/TestMaildir/cur" + "/home/alice/TestMaildir/new" + "/home/alice/TestMaildir/tmp" + "/home/alice/TestMaildir/TESTBOX" + "/home/alice/TestMaildir/TESTBOX/cur" + "/home/alice/TestMaildir/TESTBOX/new" + "/home/alice/TestMaildir/TESTBOX/tmp")) + + (start-service 'getmail-test)) + marionette)) + + ;; Check Dovecot service's PID. + (test-assert "service process id" + (let ((pid + (number->string (wait-for-file "/var/run/dovecot/master.pid" + marionette)))) + (marionette-eval `(file-exists? (string-append "/proc/" ,pid)) + marionette))) + + (test-assert "accept an email" + (let ((imap (socket AF_INET SOCK_STREAM 0)) + (addr (make-socket-address AF_INET INADDR_LOOPBACK 8143))) + (connect imap addr) + ;; Be greeted. + (read-line imap) ;OK + ;; Authenticate + (write-line "a AUTHENTICATE ANONYMOUS" imap) + (read-line imap) ;+ + (write-line "c2lyaGM=" imap) + (read-line imap) ;OK + ;; Create a TESTBOX mailbox + (write-line "a CREATE TESTBOX" imap) + (read-line imap) ;OK + ;; Append a message to a TESTBOX mailbox + (write-line (format #f "a APPEND TESTBOX {~a}" + (number->string (message-length message))) + imap) + (read-line imap) ;+ + (write-line message imap) + (read-line imap) ;OK + ;; Logout + (write-line "a LOGOUT" imap) + (close imap) + #t)) + + (sleep 1) + + (test-assert "mail arrived" + (string-contains + (marionette-eval + '(begin + (use-modules (ice-9 ftw) + (ice-9 match)) + (let ((TESTBOX/new "/home/alice/TestMaildir/new/")) + (match (scandir TESTBOX/new) + (("." ".." message-file) + (call-with-input-file + (string-append TESTBOX/new message-file) + get-string-all))))) + marionette) + message)) + + (test-end) + (exit (= (test-runner-fail-count (test-runner-current)) 0))))) + + (gexp->derivation "getmail-test" test)) + +(define %test-getmail + (system-test + (name "getmail") + (description "Connect to a running Getmail server.") + (value (run-getmail-test)))) + +%getmail-os -- cgit v1.3 From d4cb92e707c5a8b727027f1593fd82db9acaaaf4 Mon Sep 17 00:00:00 2001 From: Vasile Dumitrascu Date: Thu, 30 May 2019 20:49:32 +0200 Subject: gnu: gnucash: Update to 3.5. * gnu/packages/gnucash.scm (gnucash): Update to 3.5. [source]: Remove unneeded patch. * gnu/packages/patches/gnucash-fix-test-transaction-failure.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Remove patch. Signed-off-by: Kei Kebreau --- gnu/local.mk | 1 - gnu/packages/gnucash.scm | 5 +- .../gnucash-fix-test-transaction-failure.patch | 54 ---------------------- 3 files changed, 2 insertions(+), 58 deletions(-) delete mode 100644 gnu/packages/patches/gnucash-fix-test-transaction-failure.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 9b9c6e00ecc..d0c1080496f 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -866,7 +866,6 @@ dist_patch_DATA = \ %D%/packages/patches/gmp-faulty-test.patch \ %D%/packages/patches/gnome-shell-theme.patch \ %D%/packages/patches/gnome-tweaks-search-paths.patch \ - %D%/packages/patches/gnucash-fix-test-transaction-failure.patch \ %D%/packages/patches/gnutls-skip-trust-store-test.patch \ %D%/packages/patches/gobject-introspection-absolute-shlib-path.patch \ %D%/packages/patches/gobject-introspection-cc.patch \ diff --git a/gnu/packages/gnucash.scm b/gnu/packages/gnucash.scm index 5b4da97e5df..e09a7cb0c02 100644 --- a/gnu/packages/gnucash.scm +++ b/gnu/packages/gnucash.scm @@ -54,7 +54,7 @@ ;; directory. (package (name "gnucash") - (version "3.4") + (version "3.5") (source (origin (method url-fetch) @@ -62,8 +62,7 @@ version "/gnucash-" version ".tar.bz2")) (sha256 (base32 - "1ms2wg4sh5gq3rpjmmnp85rh5nc9ahca1imxkvhz4d3yiwy8hm52")) - (patches (search-patches "gnucash-fix-test-transaction-failure.patch")))) + "0ibp7g6aknvnkwkin97kv04ipksy3l18dsz9qysjb7h2nr8hnvbp")))) (build-system cmake-build-system) (inputs `(("guile" ,guile-2.2) diff --git a/gnu/packages/patches/gnucash-fix-test-transaction-failure.patch b/gnu/packages/patches/gnucash-fix-test-transaction-failure.patch deleted file mode 100644 index 7b1b29f06cf..00000000000 --- a/gnu/packages/patches/gnucash-fix-test-transaction-failure.patch +++ /dev/null @@ -1,54 +0,0 @@ -# This patch was submitted upstream to: https://bugs.gnucash.org/show_bug.cgi?id=797008. -From c20d74bebca516d0e391724202aad511967fe109 Mon Sep 17 00:00:00 2001 -From: Maxim Cournoyer -Date: Wed, 2 Jan 2019 14:46:28 -0500 -Subject: [PATCH] tests: Fix a test failure in test-transaction.scm. - -With the New Year upon us, a test which was hard-coded to use 2018 now -failed. - -Fixes issue #797008 (see: -https://bugs.gnucash.org/show_bug.cgi?id=797008). - -* gnucash/report/standard-reports/test/test-transaction.scm: -(trep-tests): Use the current year in the test string instead of a -static one. ---- - gnucash/report/standard-reports/test/test-transaction.scm | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/gnucash/report/standard-reports/test/test-transaction.scm b/gnucash/report/standard-reports/test/test-transaction.scm -index 755aba298..ae3fbd5c1 100644 ---- a/gnucash/report/standard-reports/test/test-transaction.scm -+++ b/gnucash/report/standard-reports/test/test-transaction.scm -@@ -5,6 +5,7 @@ - (use-modules (gnucash report stylesheets)) - (use-modules (gnucash report report-system)) - (use-modules (gnucash report report-system test test-extras)) -+(use-modules (srfi srfi-19)) - (use-modules (srfi srfi-64)) - (use-modules (gnucash engine test srfi64-extras)) - (use-modules (sxml simple)) -@@ -643,7 +644,8 @@ - (set-option! options "General" "Show original currency amount" #t) - (set-option! options "Sorting" "Primary Key" 'date) - (set-option! options "Sorting" "Primary Subtotal for Date Key" 'none) -- (let* ((sxml (options->sxml options "dual columns"))) -+ (let* ((sxml (options->sxml options "dual columns")) -+ (current-year (date->string (current-date) "~y"))) - (test-equal "dual amount column, with original currency headers" - (list "Date" "Num" "Description" "Memo/Notes" "Account" - "Debit (USD)" "Credit (USD)" "Debit" "Credit") -@@ -652,7 +654,8 @@ - (list "Grand Total" "$2,280.00" "$2,280.00") - (get-row-col sxml -1 #f)) - (test-equal "dual amount column, first transaction correct" -- (list "01/03/18" "$103 income" "Root.Asset.Bank" "$103.00" "$103.00") -+ (list (string-append "01/03/" current-year) "$103 income" -+ "Root.Asset.Bank" "$103.00" "$103.00") - (get-row-col sxml 1 #f))) - ) - --- -2.19.0 - -- cgit v1.3 From a0c3a2e3a1a37884f795542d1cc8fb4b7bb227ac Mon Sep 17 00:00:00 2001 From: Guillaume LE VAILLANT Date: Tue, 28 May 2019 11:00:58 +0200 Subject: gnu: Add txr. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gnu/packages/lisp.scm (txr): New variable. * gnu/packages/patches/txr-shell.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. Signed-off-by: Ludovic Courtès --- gnu/local.mk | 1 + gnu/packages/lisp.scm | 48 +++++++++++++++++++++++++++++ gnu/packages/patches/txr-shell.patch | 59 ++++++++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 gnu/packages/patches/txr-shell.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index d0c1080496f..55a8fcd3613 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1318,6 +1318,7 @@ dist_patch_DATA = \ %D%/packages/patches/totem-meson-easy-codec.patch \ %D%/packages/patches/tuxpaint-stamps-path.patch \ %D%/packages/patches/twinkle-include-qregexpvalidator.patch \ + %D%/packages/patches/txr-shell.patch \ %D%/packages/patches/u-boot-fix-mkimage-header-verification.patch \ %D%/packages/patches/unzip-CVE-2014-8139.patch \ %D%/packages/patches/unzip-CVE-2014-8140.patch \ diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm index 167c4433b10..dfc58d469f9 100644 --- a/gnu/packages/lisp.scm +++ b/gnu/packages/lisp.scm @@ -14,6 +14,7 @@ ;;; Copyright © 2018 Pierre Langlois ;;; Copyright © 2019 Katherine Cox-Buday ;;; Copyright © 2019 Jesse Gildersleve +;;; Copyright © 2019 Guillaume Le Vaillant ;;; ;;; This file is part of GNU Guix. ;;; @@ -45,8 +46,10 @@ #:use-module (gnu packages admin) #:use-module (gnu packages base) #:use-module (gnu packages bdw-gc) + #:use-module (gnu packages bison) #:use-module (gnu packages compression) #:use-module (gnu packages ed) + #:use-module (gnu packages flex) #:use-module (gnu packages fontutils) #:use-module (gnu packages gcc) #:use-module (gnu packages gettext) @@ -5321,3 +5324,48 @@ port within a range.") (define-public ecl-find-port (sbcl-package->ecl-package sbcl-find-port)) + +(define-public txr + (package + (name "txr") + (version "216") + (source + (origin + (method url-fetch) + (uri (string-append "http://www.kylheku.com/cgit/txr/snapshot/txr-" + version + ".tar.bz2")) + (patches (search-patches "txr-shell.patch")) + (sha256 + (base32 + "07cxdpc9zsqd0c2668g00dqjpd6zc4mfdn74aarr6d2hpzdhh937")))) + (build-system gnu-build-system) + (arguments + '(#:configure-flags '("cc=gcc") + #:phases (modify-phases %standard-phases + (add-after 'configure 'fix-tests + (lambda _ + (substitute* "tests/017/realpath.tl" + (("/usr/bin") "/")) + (substitute* "tests/017/realpath.expected" + (("/usr/bin") "/")) + #t)) + (replace 'check + (lambda _ + (zero? (system* "make" "tests"))))))) + (native-inputs + `(("bison" ,bison) + ("flex" ,flex))) + (inputs + `(("libffi" ,libffi))) + (synopsis "General-purpose, multi-paradigm programming language") + (description + "TXR is a general-purpose, multi-paradigm programming language. It +comprises two languages integrated into a single tool: a text scanning and +extraction language referred to as the TXR Pattern Language (sometimes just +\"TXR\"), and a general-purpose dialect of Lisp called TXR Lisp. TXR can be +used for everything from \"one liner\" data transformation tasks at the +command line, to data scanning and extracting scripts, to full application +development in a wide-range of areas.") + (home-page "https://nongnu.org/txr/") + (license license:bsd-2))) diff --git a/gnu/packages/patches/txr-shell.patch b/gnu/packages/patches/txr-shell.patch new file mode 100644 index 00000000000..a4abb73eac9 --- /dev/null +++ b/gnu/packages/patches/txr-shell.patch @@ -0,0 +1,59 @@ +Use the current shell instead of trying to find another one and +failing to do so. + +diff --git a/configure b/configure +index f1adb919..7891b4dc 100755 +--- a/configure ++++ b/configure +@@ -26,28 +26,6 @@ + # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-# +-# The #!/bin/sh might be some legacy piece of crap, +-# not even up to 1990 POSIX.2 spec. So the first step +-# is to look for a better shell in some known places +-# and re-execute ourselves with that interpreter. +-# +- +-if test x$txr_shell = x ; then +- for shell in /bin/bash /usr/bin/bash /usr/xpg4/bin/sh ; do +- if test -x $shell ; then +- txr_shell=$shell +- break +- fi +- done +- if test x$txr_shell = x ; then +- echo "No known POSIX shell found: falling back on /bin/sh, which may not work" +- txr_shell=/bin/sh +- fi +- export txr_shell +- exec $txr_shell $0 ${@+"$@"} +-fi +- + set -u + + # +@@ -190,13 +168,6 @@ while [ $# -gt 0 ] ; do + exit 1 + fi + +- eval "var_exists=\${$var+y}" +- +- if [ "$var_exists" != y ] ; then +- printf "$0: nonexistent option: '%s'\n" "$1" +- exit 1 +- fi +- + eval "$var='$val'" + + eval "var_given_exists=\${${var}_given+y}" +@@ -208,6 +179,8 @@ while [ $# -gt 0 ] ; do + shift + done + ++txr_shell=$CONFIG_SHELL ++ + # + # If --help was given (or --help= or help=) then + # print help and exit. The termination status is failed, to indicate -- cgit v1.3 From d3e3a6adcd77abdf6c8253b5c13ac0d3a3d80fdd Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Thu, 30 May 2019 13:55:44 +0200 Subject: gnu: Remove libevent@2.0. * gnu/packages/patches/libevent-2.0-CVE-2016-10195.patch, gnu/packages/patches/libevent-2.0-CVE-2016-10196.patch, gnu/packages/patches/libevent-2.0-CVE-2016-10197.patch, gnu/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch, gnu/packages/patches/libevent-dns-tests.patch: Delete files. * gnu/local.mk (dist_patch_DATA): Adjust accordingly. * gnu/packages/libevent.scm (libevevent-2.0): Remove variable. --- gnu/local.mk | 5 --- gnu/packages/libevent.scm | 21 ----------- .../patches/libevent-2.0-CVE-2016-10195.patch | 41 ---------------------- .../patches/libevent-2.0-CVE-2016-10196.patch | 41 ---------------------- .../patches/libevent-2.0-CVE-2016-10197.patch | 39 -------------------- ...vent-2.0-evbuffer-add-use-last-with-datap.patch | 38 -------------------- gnu/packages/patches/libevent-dns-tests.patch | 16 --------- 7 files changed, 201 deletions(-) delete mode 100644 gnu/packages/patches/libevent-2.0-CVE-2016-10195.patch delete mode 100644 gnu/packages/patches/libevent-2.0-CVE-2016-10196.patch delete mode 100644 gnu/packages/patches/libevent-2.0-CVE-2016-10197.patch delete mode 100644 gnu/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch delete mode 100644 gnu/packages/patches/libevent-dns-tests.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 55a8fcd3613..b0992547b43 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -985,11 +985,6 @@ dist_patch_DATA = \ %D%/packages/patches/libcroco-CVE-2017-7960.patch \ %D%/packages/patches/libcroco-CVE-2017-7961.patch \ %D%/packages/patches/libdrm-symbol-check.patch \ - %D%/packages/patches/libevent-dns-tests.patch \ - %D%/packages/patches/libevent-2.0-CVE-2016-10195.patch \ - %D%/packages/patches/libevent-2.0-CVE-2016-10196.patch \ - %D%/packages/patches/libevent-2.0-CVE-2016-10197.patch \ - %D%/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch \ %D%/packages/patches/libexif-CVE-2016-6328.patch \ %D%/packages/patches/libexif-CVE-2017-7544.patch \ %D%/packages/patches/libgcrypt-make-yat2m-reproducible.patch \ diff --git a/gnu/packages/libevent.scm b/gnu/packages/libevent.scm index 466e474c298..7982a12dfdc 100644 --- a/gnu/packages/libevent.scm +++ b/gnu/packages/libevent.scm @@ -72,27 +72,6 @@ then add or remove events dynamically without having to change the event loop.") (license bsd-3))) -(define-public libevent-2.0 - (package - (inherit libevent) - (version "2.0.22") - (source (origin - (method url-fetch) - (uri (string-append - "https://github.com/libevent/libevent/releases/download/release-" - version "-stable/libevent-" version "-stable.tar.gz")) - (sha256 - (base32 - "18qz9qfwrkakmazdlwxvjmw8p76g70n3faikwvdwznns1agw9hki")) - (patches - (search-patches - "libevent-dns-tests.patch" - "libevent-2.0-CVE-2016-10195.patch" - "libevent-2.0-CVE-2016-10196.patch" - "libevent-2.0-CVE-2016-10197.patch" - "libevent-2.0-evbuffer-add-use-last-with-datap.patch")))) - (arguments '()))) - (define-public libev (package (name "libev") diff --git a/gnu/packages/patches/libevent-2.0-CVE-2016-10195.patch b/gnu/packages/patches/libevent-2.0-CVE-2016-10195.patch deleted file mode 100644 index bffe2c454ca..00000000000 --- a/gnu/packages/patches/libevent-2.0-CVE-2016-10195.patch +++ /dev/null @@ -1,41 +0,0 @@ -Fix CVE-2016-10195 (buffer overread in libevent's DNS code): - -https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10195 -https://github.com/libevent/libevent/issues/317 - -Patch copied from upstream source repository: - -https://github.com/libevent/libevent/commit/96f64a022014a208105ead6c8a7066018449d86d - -From 3c570970516f48da35f42fef98276531fcc0abaa Mon Sep 17 00:00:00 2001 -From: Azat Khuzhin -Date: Mon, 1 Feb 2016 17:32:09 +0300 -Subject: [PATCH] evdns: name_parse(): fix remote stack overread - ---- - evdns.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/evdns.c b/evdns.c -index 60b10485..137c24ea 100644 ---- a/evdns.c -+++ b/evdns.c -@@ -960,7 +960,6 @@ name_parse(u8 *packet, int length, int *idx, char *name_out, int name_out_len) { - - for (;;) { - u8 label_len; -- if (j >= length) return -1; - GET8(label_len); - if (!label_len) break; - if (label_len & 0xc0) { -@@ -981,6 +980,7 @@ name_parse(u8 *packet, int length, int *idx, char *name_out, int name_out_len) { - *cp++ = '.'; - } - if (cp + label_len >= end) return -1; -+ if (j + label_len > length) return -1; - memcpy(cp, packet + j, label_len); - cp += label_len; - j += label_len; --- -2.11.0 - diff --git a/gnu/packages/patches/libevent-2.0-CVE-2016-10196.patch b/gnu/packages/patches/libevent-2.0-CVE-2016-10196.patch deleted file mode 100644 index 03f96e938bb..00000000000 --- a/gnu/packages/patches/libevent-2.0-CVE-2016-10196.patch +++ /dev/null @@ -1,41 +0,0 @@ -Fix CVE-2016-10196 (buffer overflow in evutil): - -https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10196 -https://github.com/libevent/libevent/issues/318 - -Patch copied from upstream source repository: - -https://github.com/libevent/libevent/commit/329acc18a0768c21ba22522f01a5c7f46cacc4d5 - -From 28bdc2f3f62259d21ccaf7be2b60ef0a53e6f342 Mon Sep 17 00:00:00 2001 -From: Azat Khuzhin -Date: Sun, 31 Jan 2016 00:57:16 +0300 -Subject: [PATCH] evutil_parse_sockaddr_port(): fix buffer overflow - ---- - evutil.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/evutil.c b/evutil.c -index 33445170..e2dfe6e4 100644 ---- a/evutil.c -+++ b/evutil.c -@@ -1808,12 +1808,12 @@ evutil_parse_sockaddr_port(const char *ip_as_string, struct sockaddr *out, int * - - cp = strchr(ip_as_string, ':'); - if (*ip_as_string == '[') { -- int len; -+ size_t len; - if (!(cp = strchr(ip_as_string, ']'))) { - return -1; - } -- len = (int) ( cp-(ip_as_string + 1) ); -- if (len > (int)sizeof(buf)-1) { -+ len = ( cp-(ip_as_string + 1) ); -+ if (len > sizeof(buf)-1) { - return -1; - } - memcpy(buf, ip_as_string+1, len); --- -2.11.0 - diff --git a/gnu/packages/patches/libevent-2.0-CVE-2016-10197.patch b/gnu/packages/patches/libevent-2.0-CVE-2016-10197.patch deleted file mode 100644 index c62a3286273..00000000000 --- a/gnu/packages/patches/libevent-2.0-CVE-2016-10197.patch +++ /dev/null @@ -1,39 +0,0 @@ -Fix CVE-2016-10197 (out of bounds read on empty hostnames in evdns): - -https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10197 -https://github.com/libevent/libevent/issues/332 - -Patch copied from upstream source repository: - -https://github.com/libevent/libevent/commit/ec65c42052d95d2c23d1d837136d1cf1d9ecef9e - -From a0305cec166a5bc89f1eb362510cc4cd25ecc0bc Mon Sep 17 00:00:00 2001 -From: Azat Khuzhin -Date: Fri, 25 Mar 2016 00:33:47 +0300 -Subject: [PATCH] evdns: fix searching empty hostnames - ---- - evdns.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/evdns.c b/evdns.c -index 137c24ea..6191c677 100644 ---- a/evdns.c -+++ b/evdns.c -@@ -3122,9 +3122,12 @@ search_set_from_hostname(struct evdns_base *base) { - static char * - search_make_new(const struct search_state *const state, int n, const char *const base_name) { - const size_t base_len = strlen(base_name); -- const char need_to_append_dot = base_name[base_len - 1] == '.' ? 0 : 1; -+ char need_to_append_dot; - struct search_domain *dom; - -+ if (!base_len) return NULL; -+ need_to_append_dot = base_name[base_len - 1] == '.' ? 0 : 1; -+ - for (dom = state->head; dom; dom = dom->next) { - if (!n--) { - /* this is the postfix we want */ --- -2.11.0 - diff --git a/gnu/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch b/gnu/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch deleted file mode 100644 index 0253700bf63..00000000000 --- a/gnu/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch +++ /dev/null @@ -1,38 +0,0 @@ -From a8769ef12d7e223e33fc47bed03fba2bfa2f3536 Mon Sep 17 00:00:00 2001 -From: Marcus Sundberg -Date: Sat, 26 Mar 2016 20:11:43 +0100 -Subject: [PATCH] evbuffer_add: Use last_with_datap if set, not last. - -evbuffer_add() would always put data in the last chain, even if there -was available space in a previous chain, and in doing so it also -failed to update last_with_datap, causing subsequent calls to other -functions that do look at last_with_datap to add data in the middle -of the evbuffer instead of at the end. - -Fixes the evbuffer_add() part of issue #335, and the evbuffer/add2 and -evbuffer/add3 tests, and also prevents wasting space available in the -chain pointed to by last_with_datap. ---- - buffer.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/buffer.c b/buffer.c -index 7cca0e8a..f378b731 100644 ---- a/buffer.c -+++ b/buffer.c -@@ -1732,7 +1732,11 @@ evbuffer_add(struct evbuffer *buf, const void *data_in, size_t datlen) - goto done; - } - -- chain = buf->last; -+ if (*buf->last_with_datap == NULL) { -+ chain = buf->last; -+ } else { -+ chain = *buf->last_with_datap; -+ } - - /* If there are no chains allocated for this buffer, allocate one - * big enough to hold all the data. */ --- -2.12.0 - diff --git a/gnu/packages/patches/libevent-dns-tests.patch b/gnu/packages/patches/libevent-dns-tests.patch deleted file mode 100644 index 6ff8aaaa7bc..00000000000 --- a/gnu/packages/patches/libevent-dns-tests.patch +++ /dev/null @@ -1,16 +0,0 @@ -Disable tests that rely on usable DNS lookups, which aren't available -in build chroots. - ---- libevent-2.0.21-stable/test/regress_dns.c 2013-01-20 22:32:09.000000000 +0100 -+++ libevent-2.0.21-stable/test/regress_dns.c 2013-01-20 22:32:30.000000000 +0100 -@@ -1827,10 +1827,6 @@ end: - - struct testcase_t dns_testcases[] = { - DNS_LEGACY(server, TT_FORK|TT_NEED_BASE), -- DNS_LEGACY(gethostbyname, TT_FORK|TT_NEED_BASE|TT_NEED_DNS), -- DNS_LEGACY(gethostbyname6, TT_FORK|TT_NEED_BASE|TT_NEED_DNS), -- DNS_LEGACY(gethostbyaddr, TT_FORK|TT_NEED_BASE|TT_NEED_DNS), -- { "resolve_reverse", dns_resolve_reverse, TT_FORK, NULL, NULL }, - { "search", dns_search_test, TT_FORK|TT_NEED_BASE, &basic_setup, NULL }, - { "search_cancel", dns_search_cancel_test, - TT_FORK|TT_NEED_BASE, &basic_setup, NULL }, -- cgit v1.3 From d46fc636e6797a1601cc7a7a8eaf72759c495c89 Mon Sep 17 00:00:00 2001 From: Tobias Geerinckx-Rice Date: Tue, 4 Jun 2019 17:49:14 +0200 Subject: gnu: borg: Update to 1.1.10. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gnu/packages/backup.scm (borg): Update to 1.1.10. [source]: Remove upstreamed patch. Remove msgpack and broken references to it. [arguments]: Add ‘use-system-msgpack’ phase. * gnu/packages/patches/borg-fix-hard-link-preloading.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Remove it. --- gnu/local.mk | 1 - gnu/packages/backup.scm | 19 ++- .../patches/borg-fix-hard-link-preloading.patch | 157 --------------------- 3 files changed, 14 insertions(+), 163 deletions(-) delete mode 100644 gnu/packages/patches/borg-fix-hard-link-preloading.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index b0992547b43..9680212c066 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -690,7 +690,6 @@ dist_patch_DATA = \ %D%/packages/patches/blender-2.79-newer-ffmpeg.patch \ %D%/packages/patches/blender-2.79-python-3.7-fix.patch \ %D%/packages/patches/boost-fix-icu-build.patch \ - %D%/packages/patches/borg-fix-hard-link-preloading.patch \ %D%/packages/patches/byobu-writable-status.patch \ %D%/packages/patches/calibre-no-updates-dialog.patch \ %D%/packages/patches/calibre-remove-test-bs4.patch \ diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm index 70cc06c7368..0bd894f9580 100644 --- a/gnu/packages/backup.scm +++ b/gnu/packages/backup.scm @@ -511,15 +511,13 @@ detection, and lossless compression.") (define-public borg (package (name "borg") - (version "1.1.9") + (version "1.1.10") (source (origin (method url-fetch) (uri (pypi-uri "borgbackup" version)) (sha256 - (base32 - "0x95nhv4h34m8cxycbwc4xdz350saaxlgh727b23bgn4ci7gh3vx")) - (patches (search-patches "borg-fix-hard-link-preloading.patch")) + (base32 "1pp70p4n5kamvcbl4d8021ggrxhyykmg9isjg4yd3wags8b19d7g")) (modules '((guix build utils))) (snippet '(begin @@ -541,7 +539,12 @@ detection, and lossless compression.") ;; Remove bundled shared libraries. (with-directory-excursion "src/borg/algorithms" (for-each delete-file-recursively - (list "blake2" "lz4" "zstd"))) + (list "blake2" "lz4" "msgpack" "zstd"))) + ;; Purge some msgpack references from setup.py or the resulting + ;; sources will be unbuildable. + (substitute* "setup.py" + ((".*Extension\\('borg\\.algorithms\\.msgpack\\..*") "") + (("msgpack_packer_source, msgpack_unpacker_source") "")) #t)))) (build-system python-build-system) (arguments @@ -565,6 +568,12 @@ detection, and lossless compression.") ;; HOME=/homeless-shelter. (setenv "HOME" "/tmp") #t))) + (add-after 'unpack 'use-system-msgpack + (lambda _ + (substitute* "src/borg/helpers.py" + (("prefer_system_msgpack = False") + "prefer_system_msgpack = True")) + #t)) ;; The tests need to be run after Borg is installed. (delete 'check) (add-after 'install 'check diff --git a/gnu/packages/patches/borg-fix-hard-link-preloading.patch b/gnu/packages/patches/borg-fix-hard-link-preloading.patch deleted file mode 100644 index 92a4e226742..00000000000 --- a/gnu/packages/patches/borg-fix-hard-link-preloading.patch +++ /dev/null @@ -1,157 +0,0 @@ -Fix a bug that would cause the test suite to hang: - -https://github.com/borgbackup/borg/issues/4350 - -Patch copied from upstream source repository: - -https://github.com/borgbackup/borg/commit/18242ab9e2f26c450b8507aa1d5eceadab8ad027 - -From 18242ab9e2f26c450b8507aa1d5eceadab8ad027 Mon Sep 17 00:00:00 2001 -From: Thomas Waldmann -Date: Thu, 2 May 2019 21:02:26 +0200 -Subject: [PATCH] preload chunks for hardlink slaves w/o preloaded master, - fixes #4350 - -also split the hardlink extraction test into 2 tests. - -(cherry picked from commit f33f318d816505161d1449a02ddfdeb97d6fe80a) ---- - src/borg/archive.py | 42 +++++++++++++++++++++++++++++----- - src/borg/archiver.py | 5 ++-- - src/borg/testsuite/archiver.py | 20 +++++++++------- - 3 files changed, 51 insertions(+), 16 deletions(-) - -diff --git a/src/borg/archive.py b/src/borg/archive.py -index adc1f42c..0793672a 100644 ---- a/src/borg/archive.py -+++ b/src/borg/archive.py -@@ -192,7 +192,7 @@ def __init__(self, repository, key): - self.repository = repository - self.key = key - -- def unpack_many(self, ids, filter=None, preload=False): -+ def unpack_many(self, ids, filter=None, partial_extract=False, preload=False, hardlink_masters=None): - """ - Return iterator of items. - -@@ -209,12 +209,40 @@ def unpack_many(self, ids, filter=None, preload=False): - for item in items: - if 'chunks' in item: - item.chunks = [ChunkListEntry(*e) for e in item.chunks] -+ -+ def preload(chunks): -+ self.repository.preload([c.id for c in chunks]) -+ - if filter: - items = [item for item in items if filter(item)] -+ - if preload: -- for item in items: -- if 'chunks' in item: -- self.repository.preload([c.id for c in item.chunks]) -+ if filter and partial_extract: -+ # if we do only a partial extraction, it gets a bit -+ # complicated with computing the preload items: if a hardlink master item is not -+ # selected (== not extracted), we will still need to preload its chunks if a -+ # corresponding hardlink slave is selected (== is extracted). -+ # due to a side effect of the filter() call, we now have hardlink_masters dict populated. -+ masters_preloaded = set() -+ for item in items: -+ if 'chunks' in item: # regular file, maybe a hardlink master -+ preload(item.chunks) -+ # if this is a hardlink master, remember that we already preloaded it: -+ if 'source' not in item and hardlinkable(item.mode) and item.get('hardlink_master', True): -+ masters_preloaded.add(item.path) -+ elif 'source' in item and hardlinkable(item.mode): # hardlink slave -+ source = item.source -+ if source not in masters_preloaded: -+ # we only need to preload *once* (for the 1st selected slave) -+ chunks, _ = hardlink_masters[source] -+ preload(chunks) -+ masters_preloaded.add(source) -+ else: -+ # easy: we do not have a filter, thus all items are selected, thus we need to preload all chunks. -+ for item in items: -+ if 'chunks' in item: -+ preload(item.chunks) -+ - for item in items: - yield item - -@@ -433,8 +461,10 @@ def item_filter(self, item, filter=None): - return False - return filter(item) if filter else True - -- def iter_items(self, filter=None, preload=False): -- for item in self.pipeline.unpack_many(self.metadata.items, preload=preload, -+ def iter_items(self, filter=None, partial_extract=False, preload=False, hardlink_masters=None): -+ assert not (filter and partial_extract and preload) or hardlink_masters is not None -+ for item in self.pipeline.unpack_many(self.metadata.items, partial_extract=partial_extract, -+ preload=preload, hardlink_masters=hardlink_masters, - filter=lambda item: self.item_filter(item, filter)): - yield item - -diff --git a/src/borg/archiver.py b/src/borg/archiver.py -index 957959d6..dcc20455 100644 ---- a/src/borg/archiver.py -+++ b/src/borg/archiver.py -@@ -755,7 +755,8 @@ def peek_and_store_hardlink_masters(item, matched): - else: - pi = None - -- for item in archive.iter_items(filter, preload=True): -+ for item in archive.iter_items(filter, partial_extract=partial_extract, -+ preload=True, hardlink_masters=hardlink_masters): - orig_path = item.path - if strip_components: - item.path = os.sep.join(orig_path.split(os.sep)[strip_components:]) -@@ -997,7 +998,7 @@ def item_to_tarinfo(item, original_path): - return None, stream - return tarinfo, stream - -- for item in archive.iter_items(filter, preload=True): -+ for item in archive.iter_items(filter, preload=True, hardlink_masters=hardlink_masters): - orig_path = item.path - if strip_components: - item.path = os.sep.join(orig_path.split(os.sep)[strip_components:]) -diff --git a/src/borg/testsuite/archiver.py b/src/borg/testsuite/archiver.py -index c35ad800..935b3d79 100644 ---- a/src/borg/testsuite/archiver.py -+++ b/src/borg/testsuite/archiver.py -@@ -823,7 +823,18 @@ def test_mount_hardlinks(self): - assert open('input/dir1/subdir/hardlink', 'rb').read() == b'123456' - - @requires_hardlinks -- def test_extract_hardlinks(self): -+ def test_extract_hardlinks1(self): -+ self._extract_hardlinks_setup() -+ with changedir('output'): -+ self.cmd('extract', self.repository_location + '::test') -+ assert os.stat('input/source').st_nlink == 4 -+ assert os.stat('input/abba').st_nlink == 4 -+ assert os.stat('input/dir1/hardlink').st_nlink == 4 -+ assert os.stat('input/dir1/subdir/hardlink').st_nlink == 4 -+ assert open('input/dir1/subdir/hardlink', 'rb').read() == b'123456' -+ -+ @requires_hardlinks -+ def test_extract_hardlinks2(self): - self._extract_hardlinks_setup() - with changedir('output'): - self.cmd('extract', self.repository_location + '::test', '--strip-components', '2') -@@ -839,13 +850,6 @@ def test_extract_hardlinks(self): - assert open('input/dir1/subdir/hardlink', 'rb').read() == b'123456' - assert os.stat('input/dir1/aaaa').st_nlink == 2 - assert os.stat('input/dir1/source2').st_nlink == 2 -- with changedir('output'): -- self.cmd('extract', self.repository_location + '::test') -- assert os.stat('input/source').st_nlink == 4 -- assert os.stat('input/abba').st_nlink == 4 -- assert os.stat('input/dir1/hardlink').st_nlink == 4 -- assert os.stat('input/dir1/subdir/hardlink').st_nlink == 4 -- assert open('input/dir1/subdir/hardlink', 'rb').read() == b'123456' - - def test_extract_include_exclude(self): - self.cmd('init', '--encryption=repokey', self.repository_location) --- -2.21.0 - -- cgit v1.3 From 3588419553176daadcb59644037d169574542b42 Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Tue, 4 Jun 2019 18:25:58 +0200 Subject: gnu: polkit: Update to 0.116 [fixes CVE-2019-6133]. * gnu/packages/patches/polkit-CVE-2018-19788.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Adjust accordingly. * gnu/packages/polkit.scm (polkit): Update to 0.116. [source](patches): Remove. [inputs]: Change MOZJS-52 to MOZJS-60. [arguments]: Add CXXFLAGS=-std=gnu++11 to #:configure-flags. --- gnu/local.mk | 1 - gnu/packages/patches/polkit-CVE-2018-19788.patch | 197 ----------------------- gnu/packages/polkit.scm | 10 +- 3 files changed, 6 insertions(+), 202 deletions(-) delete mode 100644 gnu/packages/patches/polkit-CVE-2018-19788.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 9680212c066..6878aef44a9 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1163,7 +1163,6 @@ dist_patch_DATA = \ %D%/packages/patches/plink-endian-detection.patch \ %D%/packages/patches/plotutils-libpng-jmpbuf.patch \ %D%/packages/patches/podofo-cmake-3.12.patch \ - %D%/packages/patches/polkit-CVE-2018-19788.patch \ %D%/packages/patches/portaudio-audacity-compat.patch \ %D%/packages/patches/portmidi-modular-build.patch \ %D%/packages/patches/postgresql-disable-resolve_symlinks.patch \ diff --git a/gnu/packages/patches/polkit-CVE-2018-19788.patch b/gnu/packages/patches/polkit-CVE-2018-19788.patch deleted file mode 100644 index 58cde6c5dc6..00000000000 --- a/gnu/packages/patches/polkit-CVE-2018-19788.patch +++ /dev/null @@ -1,197 +0,0 @@ -Fix CVE-2018-19788: - -https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-19788 -https://gitlab.freedesktop.org/polkit/polkit/issues/74 - -Patch copied from upstream source repository: - -https://gitlab.freedesktop.org/polkit/polkit/commit/2cb40c4d5feeaa09325522bd7d97910f1b59e379 - -From 2cb40c4d5feeaa09325522bd7d97910f1b59e379 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Mon, 3 Dec 2018 10:28:58 +0100 -Subject: [PATCH] Allow negative uids/gids in PolkitUnixUser and Group objects - -(uid_t) -1 is still used as placeholder to mean "unset". This is OK, since -there should be no users with such number, see -https://systemd.io/UIDS-GIDS#special-linux-uids. - -(uid_t) -1 is used as the default value in class initialization. - -When a user or group above INT32_MAX is created, the numeric uid or -gid wraps around to negative when the value is assigned to gint, and -polkit gets confused. Let's accept such gids, except for -1. - -A nicer fix would be to change the underlying type to e.g. uint32 to -not have negative values. But this cannot be done without breaking the -API, so likely new functions will have to be added (a -polkit_unix_user_new variant that takes a unsigned, and the same for -_group_new, _set_uid, _get_uid, _set_gid, _get_gid, etc.). This will -require a bigger patch. - -Fixes https://gitlab.freedesktop.org/polkit/polkit/issues/74. ---- - src/polkit/polkitunixgroup.c | 15 +++++++++++---- - src/polkit/polkitunixprocess.c | 12 ++++++++---- - src/polkit/polkitunixuser.c | 13 ++++++++++--- - 3 files changed, 29 insertions(+), 11 deletions(-) - -diff --git a/src/polkit/polkitunixgroup.c b/src/polkit/polkitunixgroup.c -index c57a1aa..309f689 100644 ---- a/src/polkit/polkitunixgroup.c -+++ b/src/polkit/polkitunixgroup.c -@@ -71,6 +71,7 @@ G_DEFINE_TYPE_WITH_CODE (PolkitUnixGroup, polkit_unix_group, G_TYPE_OBJECT, - static void - polkit_unix_group_init (PolkitUnixGroup *unix_group) - { -+ unix_group->gid = -1; /* (git_t) -1 is not a valid GID under Linux */ - } - - static void -@@ -100,11 +101,14 @@ polkit_unix_group_set_property (GObject *object, - GParamSpec *pspec) - { - PolkitUnixGroup *unix_group = POLKIT_UNIX_GROUP (object); -+ gint val; - - switch (prop_id) - { - case PROP_GID: -- unix_group->gid = g_value_get_int (value); -+ val = g_value_get_int (value); -+ g_return_if_fail (val != -1); -+ unix_group->gid = val; - break; - - default: -@@ -131,9 +135,9 @@ polkit_unix_group_class_init (PolkitUnixGroupClass *klass) - g_param_spec_int ("gid", - "Group ID", - "The UNIX group ID", -- 0, -+ G_MININT, - G_MAXINT, -- 0, -+ -1, - G_PARAM_CONSTRUCT | - G_PARAM_READWRITE | - G_PARAM_STATIC_NAME | -@@ -166,9 +170,10 @@ polkit_unix_group_get_gid (PolkitUnixGroup *group) - */ - void - polkit_unix_group_set_gid (PolkitUnixGroup *group, -- gint gid) -+ gint gid) - { - g_return_if_fail (POLKIT_IS_UNIX_GROUP (group)); -+ g_return_if_fail (gid != -1); - group->gid = gid; - } - -@@ -183,6 +188,8 @@ polkit_unix_group_set_gid (PolkitUnixGroup *group, - PolkitIdentity * - polkit_unix_group_new (gint gid) - { -+ g_return_val_if_fail (gid != -1, NULL); -+ - return POLKIT_IDENTITY (g_object_new (POLKIT_TYPE_UNIX_GROUP, - "gid", gid, - NULL)); -diff --git a/src/polkit/polkitunixprocess.c b/src/polkit/polkitunixprocess.c -index 972b777..b02b258 100644 ---- a/src/polkit/polkitunixprocess.c -+++ b/src/polkit/polkitunixprocess.c -@@ -159,9 +159,14 @@ polkit_unix_process_set_property (GObject *object, - polkit_unix_process_set_pid (unix_process, g_value_get_int (value)); - break; - -- case PROP_UID: -- polkit_unix_process_set_uid (unix_process, g_value_get_int (value)); -+ case PROP_UID: { -+ gint val; -+ -+ val = g_value_get_int (value); -+ g_return_if_fail (val != -1); -+ polkit_unix_process_set_uid (unix_process, val); - break; -+ } - - case PROP_START_TIME: - polkit_unix_process_set_start_time (unix_process, g_value_get_uint64 (value)); -@@ -239,7 +244,7 @@ polkit_unix_process_class_init (PolkitUnixProcessClass *klass) - g_param_spec_int ("uid", - "User ID", - "The UNIX user ID", -- -1, -+ G_MININT, - G_MAXINT, - -1, - G_PARAM_CONSTRUCT | -@@ -303,7 +308,6 @@ polkit_unix_process_set_uid (PolkitUnixProcess *process, - gint uid) - { - g_return_if_fail (POLKIT_IS_UNIX_PROCESS (process)); -- g_return_if_fail (uid >= -1); - process->uid = uid; - } - -diff --git a/src/polkit/polkitunixuser.c b/src/polkit/polkitunixuser.c -index 8bfd3a1..234a697 100644 ---- a/src/polkit/polkitunixuser.c -+++ b/src/polkit/polkitunixuser.c -@@ -72,6 +72,7 @@ G_DEFINE_TYPE_WITH_CODE (PolkitUnixUser, polkit_unix_user, G_TYPE_OBJECT, - static void - polkit_unix_user_init (PolkitUnixUser *unix_user) - { -+ unix_user->uid = -1; /* (uid_t) -1 is not a valid UID under Linux */ - unix_user->name = NULL; - } - -@@ -112,11 +113,14 @@ polkit_unix_user_set_property (GObject *object, - GParamSpec *pspec) - { - PolkitUnixUser *unix_user = POLKIT_UNIX_USER (object); -+ gint val; - - switch (prop_id) - { - case PROP_UID: -- unix_user->uid = g_value_get_int (value); -+ val = g_value_get_int (value); -+ g_return_if_fail (val != -1); -+ unix_user->uid = val; - break; - - default: -@@ -144,9 +148,9 @@ polkit_unix_user_class_init (PolkitUnixUserClass *klass) - g_param_spec_int ("uid", - "User ID", - "The UNIX user ID", -- 0, -+ G_MININT, - G_MAXINT, -- 0, -+ -1, - G_PARAM_CONSTRUCT | - G_PARAM_READWRITE | - G_PARAM_STATIC_NAME | -@@ -182,6 +186,7 @@ polkit_unix_user_set_uid (PolkitUnixUser *user, - gint uid) - { - g_return_if_fail (POLKIT_IS_UNIX_USER (user)); -+ g_return_if_fail (uid != -1); - user->uid = uid; - } - -@@ -196,6 +201,8 @@ polkit_unix_user_set_uid (PolkitUnixUser *user, - PolkitIdentity * - polkit_unix_user_new (gint uid) - { -+ g_return_val_if_fail (uid != -1, NULL); -+ - return POLKIT_IDENTITY (g_object_new (POLKIT_TYPE_UNIX_USER, - "uid", uid, - NULL)); --- -2.18.1 - diff --git a/gnu/packages/polkit.scm b/gnu/packages/polkit.scm index ccb8ebf8f8e..ac24adef43e 100644 --- a/gnu/packages/polkit.scm +++ b/gnu/packages/polkit.scm @@ -43,16 +43,15 @@ (define-public polkit (package (name "polkit") - (version "0.115") + (version "0.116") (source (origin (method url-fetch) (uri (string-append "https://www.freedesktop.org/software/polkit/releases/" name "-" version ".tar.gz")) - (patches (search-patches "polkit-CVE-2018-19788.patch")) (sha256 (base32 - "0c91y61y4gy6p91cwbzg32dhavw4b7fflg370rimqhdxpzdfr1rg")) + "1c9lbpndh5zis22f154vjrhnqw65z8s85nrgl42v738yf6g0q5w8")) (modules '((guix build utils))) (snippet '(begin @@ -90,7 +89,7 @@ `(("expat" ,expat) ("linux-pam" ,linux-pam) ("elogind" ,elogind) - ("mozjs" ,mozjs-52) + ("mozjs" ,mozjs-60) ("nspr" ,nspr))) (propagated-inputs `(("glib" ,glib))) ; required by polkit-gobject-1.pc @@ -101,6 +100,9 @@ ("gobject-introspection" ,gobject-introspection))) (arguments `(#:configure-flags '("--sysconfdir=/etc" + ;; XXX: MozJS 60 requires the C++11 ABI or higher. + ;; Remove when the default compiler is >= GCC 6. + "CXXFLAGS=-std=gnu++11" "--enable-man-pages") #:phases (modify-phases %standard-phases -- cgit v1.3 From 07023ebc1892a559cad1f80235a4afb0955b29ab Mon Sep 17 00:00:00 2001 From: Danny Milosavljevic Date: Tue, 4 Jun 2019 09:27:43 +0200 Subject: services: Add auditd. * gnu/services/auditd.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add it. * doc/guix.texi (Miscellaneous Services): Document it. --- doc/guix.texi | 49 ++++++++++++++++++++++++++++++++++++++++++++ gnu/local.mk | 1 + gnu/services/auditd.scm | 54 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 gnu/services/auditd.scm (limited to 'gnu/local.mk') diff --git a/doc/guix.texi b/doc/guix.texi index 996255d9dc2..bdfe14c7240 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -24114,6 +24114,55 @@ The Containerd package to use. @end table @end deftp +@cindex Audit +@subsubheading Auditd Service + +The @code{(gnu services auditd)} module provides the following service. + +@defvr {Scheme Variable} auditd-service-type + +This is the type of the service that runs +@url{https://people.redhat.com/sgrubb/audit/,auditd}, +a daemon that tracks security-relevant information on your system. + +Examples of things that can be tracked: + +@enumerate +@item +File accesses +@item +System calls +@item +Invoked commands +@item +Failed login attempts +@item +Firewall filtering +@item +Network access +@end enumerate + +@command{auditctl} from the @code{audit} package can be used in order +to add or remove events to be tracked (until the next reboot). +In order to permanently track events, put the command line arguments +of auditctl into @file{/etc/audit/audit.rules}. +@command{aureport} from the @code{audit} package can be used in order +to view a report of all recorded events. +The audit daemon usually logs into the directory @file{/var/log/audit}. + +@end defvr + +@deftp {Data Type} auditd-configuration +This is the data type representing the configuration of auditd. + +@table @asis + +@item @code{audit} (default: @code{audit}) +The audit package to use. + +@end table +@end deftp + @node Setuid Programs @section Setuid Programs diff --git a/gnu/local.mk b/gnu/local.mk index 6878aef44a9..203445ef1b1 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -501,6 +501,7 @@ GNU_SYSTEM_MODULES = \ %D%/services.scm \ %D%/services/admin.scm \ %D%/services/audio.scm \ + %D%/services/auditd.scm \ %D%/services/avahi.scm \ %D%/services/base.scm \ %D%/services/certbot.scm \ diff --git a/gnu/services/auditd.scm b/gnu/services/auditd.scm new file mode 100644 index 00000000000..8a9292015fe --- /dev/null +++ b/gnu/services/auditd.scm @@ -0,0 +1,54 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2019 Danny Milosavljevic +;;; +;;; 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 (gnu services auditd) + #:use-module (gnu services) + #:use-module (gnu services configuration) + #:use-module (gnu services base) + #:use-module (gnu services shepherd) + #:use-module (gnu packages admin) + #:use-module (guix records) + #:use-module (guix gexp) + #:use-module (guix packages) + #:export (auditd-configuration + auditd-service-type)) + +; /etc/audit/audit.rules + +(define-configuration auditd-configuration + (audit + (package audit) + "Audit package.")) + +(define (auditd-shepherd-service config) + (let* ((audit (auditd-configuration-audit config))) + (list (shepherd-service + (documentation "Auditd allows you to audit file system accesses.") + (provision '(auditd)) + (start #~(make-forkexec-constructor + (list (string-append #$audit "/sbin/auditd")))) + (stop #~(make-kill-destructor)))))) + +(define auditd-service-type + (service-type (name 'auditd) + (description "Allows auditing file system accesses.") + (extensions + (list + (service-extension shepherd-root-service-type + auditd-shepherd-service))) + (default-value (auditd-configuration)))) -- cgit v1.3 From 08814aec6ae75adcd059c5235c90ad26e5d5607e Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Tue, 4 Jun 2019 22:29:40 +0200 Subject: services: Add Singularity. * gnu/packages/linux.scm (singularity)[source](snippet): Change file name of setuid helpers in libexec/cli/*.exec. [arguments]: Remove "--disable-suid". * gnu/services/docker.scm (%singularity-activation): New variable. (singularity-setuid-programs): New procedure. (singularity-service-type): New variable. * gnu/tests/singularity.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add it. * doc/guix.texi (Miscellaneous Services): Document it. --- doc/guix.texi | 13 ++++- gnu/local.mk | 1 + gnu/packages/linux.scm | 10 ++-- gnu/services/docker.scm | 61 +++++++++++++++++++++- gnu/tests/singularity.scm | 128 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 208 insertions(+), 5 deletions(-) create mode 100644 gnu/tests/singularity.scm (limited to 'gnu/local.mk') diff --git a/doc/guix.texi b/doc/guix.texi index bdfe14c7240..d37d63066fd 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -24090,7 +24090,7 @@ The following is an example @code{dicod-service} configuration. @cindex Docker @subsubheading Docker Service -The @code{(gnu services docker)} module provides the following service. +The @code{(gnu services docker)} module provides the following services. @defvr {Scheme Variable} docker-service-type @@ -24163,6 +24163,17 @@ The audit package to use. @end table @end deftp +@defvr {Scheme Variable} singularity-service-type +This is the type of the service that allows you to run +@url{https://www.sylabs.io/singularity/, Singularity}, a Docker-style tool to +create and run application bundles (aka. ``containers''). The value for this +service is the Singularity package to use. + +The service does not install a daemon; instead, it installs helper programs as +setuid-root (@pxref{Setuid Programs}) such that unprivileged users can invoke +@command{singularity run} and similar commands. +@end defvr + @node Setuid Programs @section Setuid Programs diff --git a/gnu/local.mk b/gnu/local.mk index 203445ef1b1..98f6ee9679c 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -587,6 +587,7 @@ GNU_SYSTEM_MODULES = \ %D%/tests/networking.scm \ %D%/tests/rsync.scm \ %D%/tests/security-token.scm \ + %D%/tests/singularity.scm \ %D%/tests/ssh.scm \ %D%/tests/version-control.scm \ %D%/tests/virtualization.scm \ diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index b2f43bb1f74..cf3b838ea8a 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -2899,12 +2899,16 @@ thanks to the use of namespaces.") (substitute* "bin/singularity.in" (("^PATH=.*" all) (string-append "#" all "\n"))) + + (substitute* (find-files "libexec/cli" "\\.exec$") + (("\\$SINGULARITY_libexecdir/singularity/bin/([a-z]+)-suid" + _ program) + (string-append "/run/setuid-programs/singularity-" + program "-helper"))) #t)))) (build-system gnu-build-system) (arguments - `(#:configure-flags - (list "--disable-suid" - "--localstatedir=/var") + `(#:configure-flags '("--localstatedir=/var") #:phases (modify-phases %standard-phases (add-after 'unpack 'patch-reference-to-squashfs-tools diff --git a/gnu/services/docker.scm b/gnu/services/docker.scm index 94a04c8996f..04f91273464 100644 --- a/gnu/services/docker.scm +++ b/gnu/services/docker.scm @@ -24,12 +24,14 @@ #:use-module (gnu services shepherd) #:use-module (gnu system shadow) #:use-module (gnu packages docker) + #:use-module (gnu packages linux) ;singularity #:use-module (guix records) #:use-module (guix gexp) #:use-module (guix packages) #:export (docker-configuration - docker-service-type)) + docker-service-type + singularity-service-type)) ;;; We're not using serialize-configuration, but we must define this because ;;; the define-configuration macro validates it exists. @@ -120,3 +122,60 @@ bundles in Docker containers.") (service-extension account-service-type (const %docker-accounts)))) (default-value (docker-configuration)))) + + +;;; +;;; Singularity. +;;; + +(define %singularity-activation + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + + (define %mount-directory + "/var/singularity/mnt/") + + ;; Create the directories that Singularity 2.6 expects to find. Make + ;; them #o755 like the 'install-data-hook' rule in 'Makefile.am' of + ;; Singularity 2.6.1. + (for-each (lambda (directory) + (let ((directory (string-append %mount-directory + directory))) + (mkdir-p directory) + (chmod directory #o755))) + '("container" "final" "overlay" "session")) + (chmod %mount-directory #o755)))) + +(define (singularity-setuid-programs singularity) + "Return the setuid-root programs that SINGULARITY needs." + (define helpers + ;; The helpers, under a meaningful name. + (computed-file "singularity-setuid-helpers" + #~(begin + (mkdir #$output) + (for-each (lambda (program) + (symlink (string-append #$singularity + "/libexec/singularity" + "/bin/" + program "-suid") + (string-append #$output + "/singularity-" + program + "-helper"))) + '("action" "mount" "start"))))) + + (list (file-append helpers "/singularity-action-helper") + (file-append helpers "/singularity-mount-helper") + (file-append helpers "/singularity-start-helper"))) + +(define singularity-service-type + (service-type (name 'singularity) + (description + "Install the Singularity application bundle tool.") + (extensions + (list (service-extension setuid-program-service-type + singularity-setuid-programs) + (service-extension activation-service-type + (const %singularity-activation)))) + (default-value singularity))) diff --git a/gnu/tests/singularity.scm b/gnu/tests/singularity.scm new file mode 100644 index 00000000000..55324ef9ea0 --- /dev/null +++ b/gnu/tests/singularity.scm @@ -0,0 +1,128 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2019 Ludovic Courtès +;;; +;;; 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 (gnu tests singularity) + #:use-module (gnu tests) + #:use-module (gnu system) + #:use-module (gnu system vm) + #:use-module (gnu system shadow) + #:use-module (gnu services) + #:use-module (gnu services docker) + #:use-module (gnu packages bash) + #:use-module (gnu packages guile) + #:use-module (gnu packages linux) ;singularity + #:use-module (guix gexp) + #:use-module (guix store) + #:use-module (guix grafts) + #:use-module (guix monads) + #:use-module (guix packages) + #:use-module (guix profiles) + #:use-module (guix scripts pack) + #:export (%test-singularity)) + +(define %singularity-os + (simple-operating-system + (service singularity-service-type) + (simple-service 'guest-account + account-service-type + (list (user-account (name "guest") (uid 1000) (group "guest")) + (user-group (name "guest") (id 1000)))))) + +(define (run-singularity-test image) + "Load IMAGE, a Squashfs image, as a Singularity image and run it inside +%SINGULARITY-OS." + (define os + (marionette-operating-system %singularity-os)) + + (define singularity-exec + #~(begin + (use-modules (ice-9 popen) (rnrs io ports)) + + (let* ((pipe (open-pipe* OPEN_READ + #$(file-append singularity + "/bin/singularity") + "exec" #$image "/bin/guile" + "-c" "(display \"hello, world\")")) + (str (get-string-all pipe)) + (status (close-pipe pipe))) + (and (zero? status) + (string=? str "hello, world"))))) + + (define test + (with-imported-modules '((gnu build marionette)) + #~(begin + (use-modules (srfi srfi-11) (srfi srfi-64) + (gnu build marionette)) + + (define marionette + (make-marionette (list #$(virtual-machine os)))) + + (mkdir #$output) + (chdir #$output) + + (test-begin "singularity") + + (test-assert "singularity exec /bin/guile (as root)" + (marionette-eval '#$singularity-exec + marionette)) + + (test-equal "singularity exec /bin/guile (unprivileged)" + 0 + (marionette-eval + `(begin + (use-modules (ice-9 match)) + + (match (primitive-fork) + (0 + (dynamic-wind + (const #f) + (lambda () + (setgid 1000) + (setuid 1000) + (execl #$(program-file "singularity-exec-test" + #~(exit #$singularity-exec)) + "test")) + (lambda () + (primitive-exit 127)))) + (pid + (cdr (waitpid pid))))) + marionette)) + + (test-end) + (exit (= (test-runner-fail-count (test-runner-current)) 0))))) + + (gexp->derivation "singularity-test" test)) + +(define (build-tarball&run-singularity-test) + (mlet* %store-monad + ((_ (set-grafting #f)) + (guile (set-guile-for-build (default-guile))) + ;; 'singularity exec' insists on having /bin/sh in the image. + (profile (profile-derivation (packages->manifest + (list bash-minimal guile-2.2)) + #:hooks '() + #:locales? #f)) + (tarball (squashfs-image "singularity-pack" profile + #:symlinks '(("/bin" -> "bin"))))) + (run-singularity-test tarball))) + +(define %test-singularity + (system-test + (name "singularity") + (description "Test Singularity container of Guix.") + (value (build-tarball&run-singularity-test)))) -- cgit v1.3 From 15ec93a7832ae7dde747ccd9bb2bb2776be9f199 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Thu, 6 Jun 2019 13:36:51 +0200 Subject: Add (gnu build locale). * gnu/build/locale.scm: New file. * gnu/local.mk (MODULES_NOT_COMPILED): Add it. * gnu/installer/locale.scm (normalize-codeset): Remove. * gnu/system/locale.scm (localedef-command): Remove. (single-locale-directory): Use (gnu build locale). (glibc-supported-locales)[build]: Likewise, and remove 'read-supported-locales'. --- gnu/build/locale.scm | 86 ++++++++++++++++++++++++++++++++++++++++++++++++ gnu/installer/locale.scm | 19 +---------- gnu/local.mk | 1 + gnu/system/locale.scm | 83 +++++++++++++++------------------------------- 4 files changed, 114 insertions(+), 75 deletions(-) create mode 100644 gnu/build/locale.scm (limited to 'gnu/local.mk') diff --git a/gnu/build/locale.scm b/gnu/build/locale.scm new file mode 100644 index 00000000000..c75a2e9dc57 --- /dev/null +++ b/gnu/build/locale.scm @@ -0,0 +1,86 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2019 Ludovic Courtès +;;; +;;; 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 (gnu build locale) + #:use-module (guix build utils) + #:use-module (srfi srfi-1) + #:use-module (ice-9 rdelim) + #:use-module (ice-9 match) + #:use-module (ice-9 regex) + #:export (build-locale + normalize-codeset + read-supported-locales)) + +(define locale-rx + ;; Regexp matching a locale line in 'localedata/SUPPORTED'. + (make-regexp + "^[[:space:]]*([[:graph:]]+)/([[:graph:]]+)[[:space:]]*\\\\$")) + +(define (read-supported-locales port) + "Read the 'localedata/SUPPORTED' file from PORT. That file is actually a +makefile snippet, with one locale per line, and a header that can be +discarded." + (let loop ((locales '())) + (define line + (read-line port)) + + (cond ((eof-object? line) + (reverse locales)) + ((string-prefix? "#" (string-trim line)) ;comment + (loop locales)) + ((string-contains line "=") ;makefile variable assignment + (loop locales)) + (else + (match (regexp-exec locale-rx line) + (#f + (loop locales)) + (m + (loop (alist-cons (match:substring m 1) + (match:substring m 2) + locales)))))))) + +(define (normalize-codeset codeset) + "Compute the \"normalized\" variant of CODESET." + ;; info "(libc) Using gettextized software", for the algorithm used to + ;; compute the normalized codeset. + (letrec-syntax ((-> (syntax-rules () + ((_ proc value) + (proc value)) + ((_ proc rest ...) + (proc (-> rest ...)))))) + (-> (lambda (str) + (if (string-every char-set:digit str) + (string-append "iso" str) + str)) + string-downcase + (lambda (str) + (string-filter char-set:letter+digit str)) + codeset))) + +(define* (build-locale locale + #:key + (localedef "localedef") + (directory ".") + (codeset "UTF-8") + (name (string-append locale "." codeset))) + "Compute locale data for LOCALE and CODESET--e.g., \"en_US\" and +\"UTF-8\"--with LOCALEDEF, and store it in DIRECTORY under NAME." + (format #t "building locale '~a'...~%" name) + (invoke localedef "--no-archive" "--prefix" directory + "-i" locale "-f" codeset + (string-append directory "/" name))) diff --git a/gnu/installer/locale.scm b/gnu/installer/locale.scm index 2ee5eecd96f..13f3a1e881c 100644 --- a/gnu/installer/locale.scm +++ b/gnu/installer/locale.scm @@ -19,6 +19,7 @@ (define-module (gnu installer locale) #:use-module (gnu installer utils) + #:use-module ((gnu build locale) #:select (normalize-codeset)) #:use-module (guix records) #:use-module (json) #:use-module (srfi srfi-1) @@ -71,24 +72,6 @@ optionally, CODESET." (codeset . ,(or codeset (match:substring matches 5))) (modifier . ,(match:substring matches 7))))) -(define (normalize-codeset codeset) - "Compute the \"normalized\" variant of CODESET." - ;; info "(libc) Using gettextized software", for the algorithm used to - ;; compute the normalized codeset. - (letrec-syntax ((-> (syntax-rules () - ((_ proc value) - (proc value)) - ((_ proc rest ...) - (proc (-> rest ...)))))) - (-> (lambda (str) - (if (string-every char-set:digit str) - (string-append "iso" str) - str)) - string-downcase - (lambda (str) - (string-filter char-set:letter+digit str)) - codeset))) - (define (locale->locale-string locale) "Reverse operation of locale-string->locale." (let ((language (locale-language locale)) diff --git a/gnu/local.mk b/gnu/local.mk index 98f6ee9679c..05221483851 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -639,6 +639,7 @@ dist_installer_DATA = \ # Modules that do not need to be compiled. MODULES_NOT_COMPILED += \ + %D%/build/locale.scm \ %D%/build/shepherd.scm \ %D%/build/svg.scm diff --git a/gnu/system/locale.scm b/gnu/system/locale.scm index 533a45e1496..8466d5b07d9 100644 --- a/gnu/system/locale.scm +++ b/gnu/system/locale.scm @@ -85,20 +85,6 @@ or #f on failure." (_ #f))) -(define* (localedef-command locale - #:key (libc (canonical-package glibc))) - "Return a gexp that runs 'localedef' from LIBC to build LOCALE." - #~(begin - (format #t "building locale '~a'...~%" - #$(locale-definition-name locale)) - (zero? (system* (string-append #+libc "/bin/localedef") - "--no-archive" "--prefix" #$output - "-i" #$(locale-definition-source locale) - "-f" #$(locale-definition-charset locale) - (string-append #$output "/" #$(version-major+minor - (package-version libc)) - "/" #$(locale-definition-name locale)))))) - (define* (single-locale-directory locales #:key (libc (canonical-package glibc))) "Return a directory containing all of LOCALES for LIBC compiled. @@ -110,17 +96,29 @@ of LIBC." (version-major+minor (package-version libc))) (define build - #~(begin - (mkdir #$output) - - (mkdir (string-append #$output "/" #$version)) - - ;; 'localedef' executes 'gzip' to access compressed locale sources. - (setenv "PATH" (string-append #$gzip "/bin")) - - (exit - (and #$@(map (cut localedef-command <> #:libc libc) - locales))))) + (with-imported-modules (source-module-closure + '((gnu build locale))) + #~(begin + (use-modules (gnu build locale)) + + (mkdir #$output) + (mkdir (string-append #$output "/" #$version)) + + ;; 'localedef' executes 'gzip' to access compressed locale sources. + (setenv "PATH" + (string-append #$gzip "/bin:" #$libc "/bin")) + + (setvbuf (current-output-port) 'line) + (setvbuf (current-error-port) 'line) + (for-each (lambda (locale codeset name) + (build-locale locale + #:codeset codeset + #:name name + #:directory + (string-append #$output "/" #$version))) + '#$(map locale-definition-source locales) + '#$(map locale-definition-charset locales) + '#$(map locale-definition-name locales))))) (computed-file (string-append "locale-" version) build)) @@ -216,45 +214,16 @@ pairs such as (\"oc_FR.UTF-8\" . \"UTF-8\"). Each pair corresponds to a locale supported by GLIBC." (define build (with-imported-modules (source-module-closure - '((guix build gnu-build-system))) + '((guix build gnu-build-system) + (gnu build locale))) #~(begin (use-modules (guix build gnu-build-system) - (srfi srfi-1) - (ice-9 rdelim) - (ice-9 match) - (ice-9 regex) + (gnu build locale) (ice-9 pretty-print)) (define unpack (assq-ref %standard-phases 'unpack)) - (define locale-rx - ;; Regexp matching a locale line in 'localedata/SUPPORTED'. - (make-regexp - "^[[:space:]]*([[:graph:]]+)/([[:graph:]]+)[[:space:]]*\\\\$")) - - (define (read-supported-locales port) - ;; Read the 'localedata/SUPPORTED' file from PORT. That file is - ;; actually a makefile snippet, with one locale per line, and a - ;; header that can be discarded. - (let loop ((locales '())) - (define line - (read-line port)) - - (cond ((eof-object? line) - (reverse locales)) - ((string-prefix? "#" (string-trim line)) ;comment - (loop locales)) - ((string-contains line "=") ;makefile variable assignment - (loop locales)) - (else - (match (regexp-exec locale-rx line) - (#f - (loop locales)) - (m - (loop (alist-cons (match:substring m 1) - (match:substring m 2) - locales)))))))) (setenv "PATH" (string-append #+(file-append tar "/bin") ":" -- cgit v1.3 From 49405aaf5c2c9cfc713c7efdccaf6d48d3c714a3 Mon Sep 17 00:00:00 2001 From: Tobias Geerinckx-Rice Date: Sat, 8 Jun 2019 01:25:16 +0200 Subject: gnu: allegro: Update to 5.2.5.0. * gnu/packages/game-development.scm (allegro): Update to 5.2.5.0. [source]: Remove patch. * gnu/packages/patches/allegro-mesa-18.2.5-and-later.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Remove it. --- gnu/local.mk | 1 - gnu/packages/game-development.scm | 8 ++--- .../patches/allegro-mesa-18.2.5-and-later.patch | 41 ---------------------- 3 files changed, 3 insertions(+), 47 deletions(-) delete mode 100644 gnu/packages/patches/allegro-mesa-18.2.5-and-later.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 05221483851..907641ff3ef 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -662,7 +662,6 @@ dist_patch_DATA = \ %D%/packages/patches/aegisub-icu59-include-unistr.patch \ %D%/packages/patches/aegisub-boost68.patch \ %D%/packages/patches/agg-am_c_prototype.patch \ - %D%/packages/patches/allegro-mesa-18.2.5-and-later.patch \ %D%/packages/patches/amule-crypto-6.patch \ %D%/packages/patches/antiword-CVE-2014-8123.patch \ %D%/packages/patches/antlr3-3_1-fix-java8-compilation.patch \ diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm index f6f23a116ef..63ccd204704 100644 --- a/gnu/packages/game-development.scm +++ b/gnu/packages/game-development.scm @@ -684,19 +684,17 @@ etc.") (define-public allegro (package (name "allegro") - (version "5.2.4.0") + (version "5.2.5.0") (source (origin (method url-fetch) (uri (string-append "https://github.com/liballeg/allegro5/releases" "/download/" version "/allegro-" version ".tar.gz")) - (patches (search-patches - "allegro-mesa-18.2.5-and-later.patch")) (sha256 (base32 - "1w9a5yqi5q03b2qvmx5ff90paz0xbr9cy7i7f0xiqa65ava66q9l")))) + "06dpkfnac8w3pq36834nn2iij3ajz6prladqd0w92lq39aiqv5jr")))) (build-system cmake-build-system) - (arguments `(#:tests? #f)) ; there are no tests + (arguments `(#:tests? #f)) ; there are no tests (inputs ;; FIXME: Add the following optional inputs: xinput2, opensl, dumb `(("flac" ,flac) diff --git a/gnu/packages/patches/allegro-mesa-18.2.5-and-later.patch b/gnu/packages/patches/allegro-mesa-18.2.5-and-later.patch deleted file mode 100644 index fa273a5dfae..00000000000 --- a/gnu/packages/patches/allegro-mesa-18.2.5-and-later.patch +++ /dev/null @@ -1,41 +0,0 @@ -Fixes compilation with Mesa >= 18.2.5. - -Taken from upstream: - -https://github.com/liballeg/allegro5/commit/a40d30e21802ecf5c9382cf34af9b01bd3781e47 - -diff --git a/include/allegro5/allegro_opengl.h b/include/allegro5/allegro_opengl.h -index 0f86a6768..652dd024e 100644 ---- a/include/allegro5/allegro_opengl.h -+++ b/include/allegro5/allegro_opengl.h -@@ -103,10 +103,14 @@ - - /* HACK: Prevent both Mesa and SGI's broken headers from screwing us */ - #define __glext_h_ -+#define __gl_glext_h_ - #define __glxext_h_ -+#define __glx_glxext_h_ - #include - #undef __glext_h_ -+#undef __gl_glext_h_ - #undef __glxext_h_ -+#undef __glx_glxext_h_ - - #endif /* ALLEGRO_MACOSX */ - -diff --git a/include/allegro5/opengl/GLext/glx_ext_defs.h b/include/allegro5/opengl/GLext/glx_ext_defs.h -index 49c502091..fba8aea5d 100644 ---- a/include/allegro5/opengl/GLext/glx_ext_defs.h -+++ b/include/allegro5/opengl/GLext/glx_ext_defs.h -@@ -1,7 +1,9 @@ - /* HACK: Prevent both Mesa and SGI's broken headers from screwing us */ - #define __glxext_h_ -+#define __glx_glxext_h_ - #include - #undef __glxext_h_ -+#undef __glx_glxext_h_ - - #ifndef GLX_VERSION_1_3 - #define _ALLEGRO_GLX_VERSION_1_3 --- -2.20.0 -- cgit v1.3 From c447eb4d1d7c222a68b1fd2397e01ff56a473e62 Mon Sep 17 00:00:00 2001 From: Tobias Geerinckx-Rice Date: Mon, 10 Jun 2019 01:25:17 +0200 Subject: gnu: Restore allegro-mesa-18.2.5-and-later.patch. Dropped in 49405aaf5c2c9cfc713c7efdccaf6d48d3c714a3, it's still in use by the (leaf) allegro-5.0 package. * gnu/packages/patches/allegro-mesa-18.2.5-and-later.patch: Newish file. * gnu/local.mk (dist_patch_DATA): Re-add it. --- gnu/local.mk | 1 + .../patches/allegro-mesa-18.2.5-and-later.patch | 41 ++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 gnu/packages/patches/allegro-mesa-18.2.5-and-later.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 907641ff3ef..05221483851 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -662,6 +662,7 @@ dist_patch_DATA = \ %D%/packages/patches/aegisub-icu59-include-unistr.patch \ %D%/packages/patches/aegisub-boost68.patch \ %D%/packages/patches/agg-am_c_prototype.patch \ + %D%/packages/patches/allegro-mesa-18.2.5-and-later.patch \ %D%/packages/patches/amule-crypto-6.patch \ %D%/packages/patches/antiword-CVE-2014-8123.patch \ %D%/packages/patches/antlr3-3_1-fix-java8-compilation.patch \ diff --git a/gnu/packages/patches/allegro-mesa-18.2.5-and-later.patch b/gnu/packages/patches/allegro-mesa-18.2.5-and-later.patch new file mode 100644 index 00000000000..fa273a5dfae --- /dev/null +++ b/gnu/packages/patches/allegro-mesa-18.2.5-and-later.patch @@ -0,0 +1,41 @@ +Fixes compilation with Mesa >= 18.2.5. + +Taken from upstream: + +https://github.com/liballeg/allegro5/commit/a40d30e21802ecf5c9382cf34af9b01bd3781e47 + +diff --git a/include/allegro5/allegro_opengl.h b/include/allegro5/allegro_opengl.h +index 0f86a6768..652dd024e 100644 +--- a/include/allegro5/allegro_opengl.h ++++ b/include/allegro5/allegro_opengl.h +@@ -103,10 +103,14 @@ + + /* HACK: Prevent both Mesa and SGI's broken headers from screwing us */ + #define __glext_h_ ++#define __gl_glext_h_ + #define __glxext_h_ ++#define __glx_glxext_h_ + #include + #undef __glext_h_ ++#undef __gl_glext_h_ + #undef __glxext_h_ ++#undef __glx_glxext_h_ + + #endif /* ALLEGRO_MACOSX */ + +diff --git a/include/allegro5/opengl/GLext/glx_ext_defs.h b/include/allegro5/opengl/GLext/glx_ext_defs.h +index 49c502091..fba8aea5d 100644 +--- a/include/allegro5/opengl/GLext/glx_ext_defs.h ++++ b/include/allegro5/opengl/GLext/glx_ext_defs.h +@@ -1,7 +1,9 @@ + /* HACK: Prevent both Mesa and SGI's broken headers from screwing us */ + #define __glxext_h_ ++#define __glx_glxext_h_ + #include + #undef __glxext_h_ ++#undef __glx_glxext_h_ + + #ifndef GLX_VERSION_1_3 + #define _ALLEGRO_GLX_VERSION_1_3 +-- +2.20.0 -- cgit v1.3 From 47b9614b3110307093382363c0ba70d31f32ef59 Mon Sep 17 00:00:00 2001 From: Oleg Pykhalov Date: Thu, 9 May 2019 15:13:26 +0300 Subject: services: Add 'nix-service-type'. * gnu/services/nix.scm: New file. * gnu/local.mk: Add this. * doc/guix.texi (Miscellaneous Services): Document this. --- doc/guix.texi | 41 +++++++++++++++++++ gnu/local.mk | 3 +- gnu/services/nix.scm | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 155 insertions(+), 1 deletion(-) create mode 100644 gnu/services/nix.scm (limited to 'gnu/local.mk') diff --git a/doc/guix.texi b/doc/guix.texi index a9cd66ce875..83981b50d2d 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -24197,6 +24197,47 @@ setuid-root (@pxref{Setuid Programs}) such that unprivileged users can invoke @command{singularity run} and similar commands. @end defvr +@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 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 + ;; @dots{} + (packages (append (list nix) + %base-packages)) + + (services (append (list (service nix-service-type)) + %base-services))) +@end example + +After @command{guix system reconfigure} configure Nix for your user: + +@itemize +@item Add a Nix channel and update it. See @url{https://nixos.org/nix/manual/, +Nix Package Manager Guide}. + +@item Create a symlink to your profile and activate Nix profile: +@end itemize + +@example +$ ln -s "/nix/var/nix/profiles/per-user/$USER/profile" ~/.nix-profile +$ source /run/current-system/profile/etc/profile.d/nix.sh +@end example + +@end defvr + @node Setuid Programs @section Setuid Programs diff --git a/gnu/local.mk b/gnu/local.mk index 05221483851..34f00f9591d 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -17,7 +17,7 @@ # Copyright © 2017 Mathieu Othacehe # Copyright © 2017, 2018 Gábor Boskovits # Copyright © 2018 Amirouche Boubekki -# Copyright © 2018 Oleg Pykhalov +# Copyright © 2018, 2019 Oleg Pykhalov # Copyright © 2018 Stefan Stefanović # Copyright © 2018 Maxim Cournoyer # @@ -526,6 +526,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 00000000000..72ecb7d0896 --- /dev/null +++ b/gnu/services/nix.scm @@ -0,0 +1,112 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2019 Oleg Pykhalov +;;; +;;; 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 (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 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 -- cgit v1.3 From cb2471f726981d3063093856231388b17bd9ae36 Mon Sep 17 00:00:00 2001 From: Ivan Petkov Date: Tue, 16 Apr 2019 03:40:14 -0700 Subject: gnu: crate: Add unicode-xid. * gnu/local.mk: (GNU_SYSTEM_MODULES): Add packages/crates-io.scm. * gnu/packages/crates-io.scm: New file, containing unicode-xid. Signed-off-by: Chris Marusich --- gnu/local.mk | 1 + gnu/packages/crates-io.scm | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 gnu/packages/crates-io.scm (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 34f00f9591d..c7b557ca61f 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -121,6 +121,7 @@ GNU_SYSTEM_MODULES = \ %D%/packages/cpp.scm \ %D%/packages/cppi.scm \ %D%/packages/cran.scm \ + %D%/packages/crates-io.scm \ %D%/packages/cross-base.scm \ %D%/packages/crypto.scm \ %D%/packages/cryptsetup.scm \ diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm new file mode 100644 index 00000000000..533fe0d21ea --- /dev/null +++ b/gnu/packages/crates-io.scm @@ -0,0 +1,45 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2019 Ivan Petkov +;;; +;;; 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 (gnu packages crates-io) + #:use-module (guix build-system cargo) + #:use-module (guix download) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix packages)) + +(define-public rust-unicode-xid + (package + (name "rust-unicode-xid") + (version "0.1.0") + (source + (origin + (method url-fetch) + (uri (crate-uri "unicode-xid" version)) + (file-name + (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1z57lqh4s18rr4x0j4fw4fmp9hf9346h0kmdgqsqx0fhjr3k0wpw")))) + (build-system cargo-build-system) + (home-page + "https://github.com/unicode-rs/unicode-xid") + (synopsis "Determine Unicode XID related properties") + (description "Determine whether characters have the XID_Start +or XID_Continue properties according to Unicode Standard Annex #31.") + ;; Dual licensed. + (license (list license:asl2.0 license:expat)))) -- cgit v1.3 From bd9b15fb31f36f0d592b777bc95205eb0b037035 Mon Sep 17 00:00:00 2001 From: Florian Pelz Date: Wed, 12 Jun 2019 14:05:44 +0200 Subject: gnu: Add USB_ModeSwitch. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gnu/packages/usb-modeswitch.scm: New file. * gnu/packages/patches/usb-modeswitch-accept-config-arg.patch: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add package. (dist_patch_DATA): Add patch. Signed-off-by: Ludovic Courtès --- gnu/local.mk | 2 + .../patches/usb-modeswitch-accept-config-arg.patch | 42 ++++++ gnu/packages/usb-modeswitch.scm | 166 +++++++++++++++++++++ 3 files changed, 210 insertions(+) create mode 100644 gnu/packages/patches/usb-modeswitch-accept-config-arg.patch create mode 100644 gnu/packages/usb-modeswitch.scm (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index c7b557ca61f..34a39588c00 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -469,6 +469,7 @@ GNU_SYSTEM_MODULES = \ %D%/packages/uml.scm \ %D%/packages/unrtf.scm \ %D%/packages/upnp.scm \ + %D%/packages/usb-modeswitch.scm \ %D%/packages/uucp.scm \ %D%/packages/valgrind.scm \ %D%/packages/version-control.scm \ @@ -1335,6 +1336,7 @@ dist_patch_DATA = \ %D%/packages/patches/util-linux-tests.patch \ %D%/packages/patches/upower-builddir.patch \ %D%/packages/patches/upx-fix-CVE-2017-15056.patch \ + %D%/packages/patches/usb-modeswitch-accept-config-arg.patch \ %D%/packages/patches/valgrind-enable-arm.patch \ %D%/packages/patches/vboot-utils-fix-format-load-address.patch \ %D%/packages/patches/vboot-utils-fix-tests-show-contents.patch \ diff --git a/gnu/packages/patches/usb-modeswitch-accept-config-arg.patch b/gnu/packages/patches/usb-modeswitch-accept-config-arg.patch new file mode 100644 index 00000000000..9c050f7ee67 --- /dev/null +++ b/gnu/packages/patches/usb-modeswitch-accept-config-arg.patch @@ -0,0 +1,42 @@ +--- old/usb_modeswitch.tcl 1970-01-01 01:00:00.000000000 +0100 ++++ usb_modeswitch.tcl 2019-06-12 08:39:42.140000000 +0200 +@@ -41,7 +41,7 @@ + global scsi usb config match device flags setup devdir loginit + + set flags(config) "" +-Log "[ParseGlobalConfig]" ++Log "[ParseGlobalConfig $argv]" + + if {$flags(stordelay) > 0} { + SetStorageDelay $flags(stordelay) +@@ -496,9 +496,21 @@ + # end of proc {MatchDevice} + + +-proc {ParseGlobalConfig} {} { ++proc {ParseGlobalConfig} {argv} { + + global flags ++ ++set configFileParam "" ++for {set i 0} {$i < [llength $argv]} {incr i} { ++ switch -glob -- [set v [lindex $argv $i]] { ++ --config-file=* { ++ set configFileParam $v ++ } ++ } ++} ++if {$configFileParam != ""} { ++ set configFile [string range $configFileParam [string length "--config-file="] end] ++} else { + set configFile "" + set places [list /etc/usb_modeswitch.conf /etc/sysconfig/usb_modeswitch /etc/default/usb_modeswitch] + foreach cfg $places { +@@ -507,6 +519,7 @@ + break + } + } ++} + if {$configFile == ""} {return} + + set rc [open $configFile r] diff --git a/gnu/packages/usb-modeswitch.scm b/gnu/packages/usb-modeswitch.scm new file mode 100644 index 00000000000..8f1cf9df608 --- /dev/null +++ b/gnu/packages/usb-modeswitch.scm @@ -0,0 +1,166 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2019 Florian Pelz +;;; +;;; 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 (gnu packages usb-modeswitch) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix build-system gnu) + #:use-module (guix build-system trivial) + #:use-module (gnu packages) + #:use-module (gnu packages base) + #:use-module (gnu packages compression) + #:use-module (gnu packages embedded) + #:use-module (gnu packages libusb) + #:use-module (gnu packages pkg-config)) + +(define-public usb-modeswitch-data + (package + (name "usb-modeswitch-data") + (version "20170806") + (source (origin + (method url-fetch) + (uri (string-append + "http://www.draisberghof.de/usb_modeswitch/" + "usb-modeswitch-data-" version ".tar.bz2")) + (sha256 + (base32 + "0b1wari3aza6qjggqd0hk2zsh93k1q8scgmwh6f8wr0flpr3whff")))) + (build-system trivial-build-system) + (native-inputs `(("tar" ,tar) + ("bzip2" ,bzip2))) + (arguments + `(#:modules ((guix build utils)) + #:builder + (begin + (use-modules (guix build utils)) + (let* ((source (assoc-ref %build-inputs "source")) + (tar (assoc-ref %build-inputs "tar")) + (bzip2 (assoc-ref %build-inputs "bzip2")) + (files (string-append "usb-modeswitch-data-" + ,(package-version this-package))) + (share-dir (string-append %output "/share")) + (doc-dir (string-append share-dir "/doc/")) + (license-dir (string-append doc-dir + (strip-store-file-name %output))) + (udev-dir (string-append %output "/udev"))) + (copy-file source "data.tar.bz2") + (invoke (string-append bzip2 "/bin/bzip2") "-d" "data.tar.bz2") + (invoke (string-append tar "/bin/tar") "xvf" "data.tar") + (copy-recursively (string-append files "/usb_modeswitch.d") + (string-append share-dir "/usb_modeswitch.d")) + (install-file (string-append files "/40-usb_modeswitch.rules") + udev-dir) + (install-file (string-append files "/COPYING") license-dir))))) + (home-page "http://www.draisberghof.de/usb_modeswitch/") + (synopsis "Data package for USB_ModeSwitch") + (description "This packages contains data about devices and a UDEV rules +file for use with USB_ModeSwitch.") + (license license:gpl2+))) + +(define-public usb-modeswitch + (package + (name "usb-modeswitch") + (version "2.5.2") + (source (origin + (method url-fetch) + (uri (string-append + "http://www.draisberghof.de/usb_modeswitch/" + "usb-modeswitch-" version ".tar.bz2")) + (sha256 + (base32 + "19ifi80g9ns5dmspchjvfj4ykxssq9yrci8m227dgb3yr04srzxb")) + (modules '((guix build utils))) + (snippet + ;; Remove bundled jimtcl. + '(begin + (delete-file-recursively "jim") + #t)) + (patches + (search-patches "usb-modeswitch-accept-config-arg.patch")))) + (native-inputs `(("pkg-config" ,pkg-config))) + (inputs `(("libusb" ,libusb) + ("jimtcl" ,jimtcl) + ("usb-modeswitch-data" ,usb-modeswitch-data))) + (outputs '("out" "dispatcher")) + (build-system gnu-build-system) + (arguments + `(#:tests? #f ; does not support `make check` + #:make-flags (list "CC=gcc") + #:phases + (modify-phases %standard-phases + (delete 'configure) ; no configure script + (replace 'install + (lambda* (#:key source outputs inputs #:allow-other-keys) + (let* ((source (assoc-ref inputs "source")) + (jimtcl (assoc-ref inputs "jimtcl")) + (data (assoc-ref inputs "usb-modeswitch-data")) + (out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + (man1 (string-append out "/share/man/man1")) + (dispatcher-out (assoc-ref outputs "dispatcher")) + (udev (string-append dispatcher-out "/lib/udev")) + (etc (string-append dispatcher-out "/etc")) + (dispatcher-bin (string-append dispatcher-out "/bin")) + (dispatcher-man1 (string-append dispatcher-out + "/share/man/man1"))) + (begin + ;; Users can install the default output and + ;; usb-modeswitch-data and then modeswitch their USB device + ;; by running e.g.: + ;; + ;; sudo usb_modeswitch -c \ + ;; ~/.guix-profile/share/usb_modeswitch.d/12d1\:14fe \ + ;; -v 0x12d1 -p 0x14fe + ;; + ;; But it is simpler to use the usb-modeswitch-service-type + ;; that installs a UDEV rules file which invokes a shell + ;; script in lib/udev (also called `usb_modeswitch' like the + ;; main binary) which, in turn, invokes the program + ;; `usb_modeswitch_dispatcher'. Normal users should not + ;; invoke this dispatcher directly, so it is a separate output. + (install-file "usb_modeswitch" bin) + (install-file "usb_modeswitch.conf" etc) + (install-file "usb_modeswitch.1" man1) + (install-file "usb_modeswitch_dispatcher.1" dispatcher-man1) + + (substitute* "usb_modeswitch.sh" + (("PATH=") "PATH=$PATH:") ; we do not want hardcoded FHS path + (("init_path=") "init_path=/does/not/exist")) ; no /sbin/init + (rename-file "usb_modeswitch.sh" "usb_modeswitch") + (install-file "usb_modeswitch" udev) + + (rename-file "usb_modeswitch.tcl" "usb_modeswitch_dispatcher") + (substitute* "usb_modeswitch_dispatcher" + (("/usr/bin/tclsh") + (string-append jimtcl "/bin/jimsh")) + (("/usr/sbin") bin) + (("/usr/share/usb_modeswitch") + (string-append data "/share/usb_modeswitch.d"))) + (install-file "usb_modeswitch_dispatcher" + dispatcher-bin) + #t))))))) + (home-page "http://www.draisberghof.de/usb_modeswitch/") + (synopsis "Mode switching tool for controlling `multi-mode' USB devices") + (description "USB_ModeSwitch is a mode switching tool for controlling USB +devices with multiple @dfn{modes}. When plugged in for the first time many +USB devices (primarily high-speed WAN modems) act like a flash storage +containing installers for Windows drivers. USB_ModeSwitch replays the +sequence the Windows drivers would send to switch their mode from storage to +modem (or whatever the thing is supposed to do).") + (license license:gpl2+))) -- cgit v1.3 From 0882c491f0b98c6febc4224d2fc8eb4310086fc1 Mon Sep 17 00:00:00 2001 From: Brian Leung Date: Fri, 7 Jun 2019 06:31:55 +0200 Subject: gnu: emacs-realgud: Update to 1.5.0. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gnu/packages/emacs-xyz.scm (emacs-realgud): Update to 1.5.0. [source]: Fetch from git. Remove upstreamed patch. * gnu/packages/patches/emacs-realgud-fix-configure-ac.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Remove it. Signed-off-by: Ludovic Courtès --- gnu/local.mk | 1 - gnu/packages/emacs-xyz.scm | 20 +++++----------- .../patches/emacs-realgud-fix-configure-ac.patch | 27 ---------------------- 3 files changed, 6 insertions(+), 42 deletions(-) delete mode 100644 gnu/packages/patches/emacs-realgud-fix-configure-ac.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 34a39588c00..24b5ee4c295 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -762,7 +762,6 @@ dist_patch_DATA = \ %D%/packages/patches/emacs-highlight-stages-add-gexp.patch \ %D%/packages/patches/emacs-scheme-complete-scheme-r5rs-info.patch \ %D%/packages/patches/emacs-source-date-epoch.patch \ - %D%/packages/patches/emacs-realgud-fix-configure-ac.patch \ %D%/packages/patches/emacs-undohist-ignored.patch \ %D%/packages/patches/emacs-wordnut-require-adaptive-wrap.patch \ %D%/packages/patches/emacs-zones-called-interactively.patch \ diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index b263e9229f9..cc9981494d7 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -4336,19 +4336,16 @@ after buffer changes.") (define-public emacs-realgud (package (name "emacs-realgud") - (version "1.4.5") + (version "1.5.0") (source (origin - (method url-fetch) - (uri (string-append "https://elpa.gnu.org/packages/realgud-" - version ".tar")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/realgud/realgud/") + (commit version))) (sha256 (base32 - "108wgxg7fb4byaiasgvbxv2hq7b00biq9f0mh9hy6vw4160y5w24")) - (patches - ;; Patch awaiting inclusion upstream (see: - ;; https://github.com/realgud/realgud/pull/226). - (search-patches "emacs-realgud-fix-configure-ac.patch")))) + "0xnick9016wxrgi8v0lycvxhyz8l2k4nfvdpjc5yq476vwrjfzbz")))) (build-system emacs-build-system) (arguments `(#:tests? #t @@ -4367,11 +4364,6 @@ after buffer changes.") (setenv "HOME" (getenv "TMPDIR")))) (add-before 'patch-el-files 'remove-realgud-pkg.el (lambda _ - ;; XXX: This file is auto-generated at some point and causes - ;; substitute* to crash during the `patch-el-files' phase with: - ;; ERROR: In procedure stat: No such file or directory: - ;; "./realgud-pkg.el" - (delete-file "./realgud-pkg.el") ;; FIXME: `patch-el-files' crashes on this file with error: ;; unable to locate "bashdb". (delete-file "./test/test-regexp-bashdb.el")))) diff --git a/gnu/packages/patches/emacs-realgud-fix-configure-ac.patch b/gnu/packages/patches/emacs-realgud-fix-configure-ac.patch deleted file mode 100644 index 8165857c870..00000000000 --- a/gnu/packages/patches/emacs-realgud-fix-configure-ac.patch +++ /dev/null @@ -1,27 +0,0 @@ -From a293690f29407ac54a218d6d20c2142e1a0319d1 Mon Sep 17 00:00:00 2001 -From: Maxim Cournoyer -Date: Wed, 31 Oct 2018 00:08:34 -0400 -Subject: [PATCH] configure.ac: Fix NO_CHECK_EMACS_PACKAGES elisp. - -Remove the extraneous trailing parenthesis. ---- - configure.ac | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/configure.ac b/configure.ac -index de0d932..69bcea7 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -25,8 +25,7 @@ AC_MSG_NOTICE("Checking prerequiste packages") - $EMACS -batch -q --no-site-file -eval \ - '(dolist (package - (quote (cl-lib loc-changes load-relative test-simple))) -- (require package)) -- )' -+ (require package))' - fi - if test $? -ne 0 ; then - AC_MSG_ERROR([Can't continue until above error is corrected.]) --- -2.19.0 - -- cgit v1.3 From 47f2168b6fabb105565526b2a1243eeeb13008fe Mon Sep 17 00:00:00 2001 From: Carlo Zancanaro Date: Thu, 13 Jun 2019 11:14:53 +0200 Subject: gnu: Add Kawa. * gnu/packages/kawa.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add it. --- gnu/local.mk | 1 + gnu/packages/kawa.scm | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 gnu/packages/kawa.scm (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 24b5ee4c295..7f3fcae07ee 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -262,6 +262,7 @@ GNU_SYSTEM_MODULES = \ %D%/packages/jrnl.scm \ %D%/packages/jose.scm \ %D%/packages/julia.scm \ + %D%/packages/kawa.scm \ %D%/packages/kde.scm \ %D%/packages/kde-frameworks.scm \ %D%/packages/kde-plasma.scm \ diff --git a/gnu/packages/kawa.scm b/gnu/packages/kawa.scm new file mode 100644 index 00000000000..5771eeda8ec --- /dev/null +++ b/gnu/packages/kawa.scm @@ -0,0 +1,53 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2019 Carlo Zancanaro +;;; Copyright © 2019 Ludovic Courtès +;;; +;;; 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 (gnu packages kawa) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix build-system gnu) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (gnu packages java)) + +(define-public kawa + (package + (name "kawa") + (version "3.0") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://gnu/kawa/kawa-" version ".tar.gz")) + (sha256 + (base32 + "1k9qpydc64ar4aqyg3q7jmmxy503ayj85227qfhc5n6ngchqavhy")))) + (build-system gnu-build-system) + (arguments + `(#:parallel-build? #f + #:parallel-tests? #f)) + (inputs + `(("icedtea" ,icedtea-8 "jdk"))) + (home-page "https://www.gnu.org/software/kawa/") + (synopsis "Java framework and implementation of Scheme, Elisp, and more") + (description + "GNU Kawa is an implementation of the Scheme programming language that +is built on top of the Java platform. It is thus conveniently integrated +with Java and benefits from this by having a compiler, optional static +typing, and so on. Kawa also serves as a framework for implementing other +programming languages on the Java platform. Included in Kawa is qexo, a +partial implementation of XQuery in Java.") + (license license:expat))) -- cgit v1.3