From e3900a4d64e4bf6f426809d6bff058e5a2ae9bc8 Mon Sep 17 00:00:00 2001 From: Leo Famulari Date: Sat, 6 Jan 2018 15:47:47 -0500 Subject: build-system/go: Build with a filesystem union of Go dependencies. This basically changes (guix build-system go) so that instead of looking up its dependencies in a list of directories in $GOPATH, all the Go dependencies are symlinked into a single directory. Fixes . * guix/build/go-build-system.scm (setup-go-environment): New variable. (setup-environment, install-source): Remove variables. (unpack): Unpack the source relative to $GOPATH. (install): Do not install the compiled objects in the 'pkg' directory. Install the source code in this phase, and only install the source of the package named by IMPORT-PATH. * doc/guix.texi (Build Systems): Adjust accordingly. * gnu/packages/docker.scm (docker): Import (guix build union) on the build side and adjust to build phase name changes in (guix build-system go). * gnu/packages/shellutils.scm (direnv): Likewise. * gnu/packages/databases.scm (mongo-tools)[arguments]: Set '#:install-source #f'. * gnu/packages/music.scm (demlo)[arguments]: Move the 'install-scripts' phase after the 'install' phase. --- doc/guix.texi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'doc') diff --git a/doc/guix.texi b/doc/guix.texi index 043aad1b65..a720f3f3bb 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -5791,8 +5791,8 @@ some cases, you will need to unpack the package's source code to a different directory structure than the one indicated by the import path, and @code{#:unpack-path} should be used in such cases. -Packages that provide Go libraries should be installed along with their -source code. The key @code{#:install-source?}, which defaults to +Packages that provide Go libraries should install their source code into +the built output. The key @code{#:install-source?}, which defaults to @code{#t}, controls whether or not the source code is installed. It can be set to @code{#f} for packages that only provide executable files. @end defvr -- cgit v1.2.3 From 99aec37a78e7be6a591d0e5b7439896d669a75d1 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Thu, 14 Mar 2019 17:02:53 +0100 Subject: pack: "-RR" produces PRoot-enabled relocatable binaries. * gnu/packages/aux-files/run-in-namespace.c (exec_with_proot): New function. (main): When 'clone' fails, call 'rm_rf'. [PROOT_PROGRAM]: When 'clone' fails, call 'exec_with_proot'. * guix/scripts/pack.scm (wrapped-package): Add #:proot?. [proot]: New procedure. [build]: Compile with -DPROOT_PROGRAM when PROOT? is true. * guix/scripts/pack.scm (%options): Set the 'relocatable?' value to 'proot when "-R" is passed several times. (guix-pack): Pass #:proot? to 'wrapped-package'. * tests/guix-pack-relocatable.sh: Use "-RR" on Intel systems that lack user namespace support. * doc/guix.texi (Invoking guix pack): Document -RR. --- doc/guix.texi | 39 +++++++++++++++++++------ gnu/packages/aux-files/run-in-namespace.c | 47 ++++++++++++++++++++++++++++++- guix/scripts/pack.scm | 33 ++++++++++++++++++---- tests/guix-pack-relocatable.sh | 21 ++++++++++---- 4 files changed, 119 insertions(+), 21 deletions(-) (limited to 'doc') diff --git a/doc/guix.texi b/doc/guix.texi index a720f3f3bb..8d51bdf7f4 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -4760,14 +4760,24 @@ symlinks, as well as empty mount points for virtual file systems like procfs. @end table +@cindex relocatable binaries @item --relocatable @itemx -R Produce @dfn{relocatable binaries}---i.e., binaries that can be placed -anywhere in the file system hierarchy and run from there. For example, -if you create a pack containing Bash with: +anywhere in the file system hierarchy and run from there. + +When this option is passed once, the resulting binaries require support for +@dfn{user namespaces} in the kernel Linux; when passed +@emph{twice}@footnote{Here's a trick to memorize it: @code{-RR}, which adds +PRoot support, can be thought of as the abbreviation of ``Really +Relocatable''. Neat, isn't it?}, relocatable binaries fall to back to PRoot +if user namespaces are unavailable, and essentially work anywhere---see below +for the implications. + +For example, if you create a pack containing Bash with: @example -guix pack -R -S /mybin=bin bash +guix pack -RR -S /mybin=bin bash @end example @noindent @@ -4786,12 +4796,23 @@ In that shell, if you type @code{ls /gnu/store}, you'll notice that altogether! That is probably the simplest way to deploy Guix-built software on a non-Guix machine. -There's a gotcha though: this technique relies on the @dfn{user -namespace} feature of the kernel Linux, which allows unprivileged users -to mount or change root. Old versions of Linux did not support it, and -some GNU/Linux distributions turn it off; on these systems, programs -from the pack @emph{will fail to run}, unless they are unpacked in the -root file system. +@quotation Note +By default, relocatable binaries rely on the @dfn{user namespace} feature of +the kernel Linux, which allows unprivileged users to mount or change root. +Old versions of Linux did not support it, and some GNU/Linux distributions +turn it off. + +To produce relocatable binaries that work even in the absence of user +namespaces, pass @option{--relocatable} or @option{-R} @emph{twice}. In that +case, binaries will try user namespace support and fall back to PRoot if user +namespaces are not supported. + +The @uref{https://proot-me.github.io/, PRoot} program provides the necessary +support for file system virtualization. It achieves that by using the +@code{ptrace} system call on the running program. This approach has the +advantage to work without requiring special kernel support, but it incurs +run-time overhead every time a system call is made. +@end quotation @item --expression=@var{expr} @itemx -e @var{expr} diff --git a/gnu/packages/aux-files/run-in-namespace.c b/gnu/packages/aux-files/run-in-namespace.c index f0cff88552..551f4db88a 100644 --- a/gnu/packages/aux-files/run-in-namespace.c +++ b/gnu/packages/aux-files/run-in-namespace.c @@ -1,5 +1,5 @@ /* GNU Guix --- Functional package management for GNU - Copyright (C) 2018 Ludovic Courtès + Copyright (C) 2018, 2019 Ludovic Courtès This file is part of GNU Guix. @@ -211,6 +211,46 @@ disallow_setgroups (pid_t pid) close (fd); } + +#ifdef PROOT_PROGRAM + +/* Execute the wrapped program with PRoot, passing it ARGC and ARGV, and + "bind-mounting" STORE in the right place. */ +static void +exec_with_proot (const char *store, int argc, char *argv[]) +{ + int proot_specific_argc = 4; + int proot_argc = argc + proot_specific_argc; + char *proot_argv[proot_argc], *proot; + char bind_spec[strlen (store) + 1 + sizeof "@STORE_DIRECTORY@"]; + + strcpy (bind_spec, store); + strcat (bind_spec, ":"); + strcat (bind_spec, "@STORE_DIRECTORY@"); + + proot = concat (store, PROOT_PROGRAM); + + proot_argv[0] = proot; + proot_argv[1] = "-b"; + proot_argv[2] = bind_spec; + proot_argv[3] = "@WRAPPED_PROGRAM@"; + + for (int i = 0; i < argc; i++) + proot_argv[i + proot_specific_argc] = argv[i + 1]; + + proot_argv[proot_argc] = NULL; + + /* Seccomp support seems to invariably lead to segfaults; disable it by + default. */ + setenv ("PROOT_NO_SECCOMP", "1", 0); + + int err = execv (proot, proot_argv); + if (err < 0) + assert_perror (errno); +} + +#endif + int main (int argc, char *argv[]) @@ -274,6 +314,10 @@ main (int argc, char *argv[]) break; case -1: + rm_rf (new_root); +#ifdef PROOT_PROGRAM + exec_with_proot (store, argc, argv); +#else fprintf (stderr, "%s: error: 'clone' failed: %m\n", argv[0]); fprintf (stderr, "\ This may be because \"user namespaces\" are not supported on this system.\n\ @@ -281,6 +325,7 @@ Consequently, we cannot run '@WRAPPED_PROGRAM@',\n\ unless you move it to the '@STORE_DIRECTORY@' directory.\n\ \n\ Please refer to the 'guix pack' documentation for more information.\n"); +#endif return EXIT_FAILURE; default: diff --git a/guix/scripts/pack.scm b/guix/scripts/pack.scm index e2ecddfbfc..bfb8b85356 100644 --- a/guix/scripts/pack.scm +++ b/guix/scripts/pack.scm @@ -517,10 +517,14 @@ please email '~a'~%") ;;; (define* (wrapped-package package - #:optional (compiler (c-compiler))) + #:optional (compiler (c-compiler)) + #:key proot?) (define runner (local-file (search-auxiliary-file "run-in-namespace.c"))) + (define (proot) + (specification->package "proot-static")) + (define build (with-imported-modules (source-module-closure '((guix build utils) @@ -550,10 +554,19 @@ please email '~a'~%") (("@STORE_DIRECTORY@") (%store-directory))) (let* ((base (strip-store-prefix program)) - (result (string-append #$output "/" base))) + (result (string-append #$output "/" base)) + (proot #$(and proot? + #~(string-drop + #$(file-append (proot) "/bin/proot") + (+ (string-length (%store-directory)) + 1))))) (mkdir-p (dirname result)) - (invoke #$compiler "-std=gnu99" "-static" "-Os" "-g0" "-Wall" - "run.c" "-o" result) + (apply invoke #$compiler "-std=gnu99" "-static" "-Os" "-g0" "-Wall" + "run.c" "-o" result + (if proot + (list (string-append "-DPROOT_PROGRAM=\"" + proot "\"")) + '())) (delete-file "run.c"))) (setvbuf (current-output-port) 'line) @@ -646,7 +659,12 @@ please email '~a'~%") (exit 0))) (option '(#\R "relocatable") #f #f (lambda (opt name arg result) - (alist-cons 'relocatable? #t result))) + (match (assq-ref result 'relocatable?) + (#f + (alist-cons 'relocatable? #t result)) + (_ + (alist-cons 'relocatable? 'proot + (alist-delete 'relocatable? result)))))) (option '(#\e "expression") #t #f (lambda (opt name arg result) (alist-cons 'expression arg result))) @@ -821,11 +839,14 @@ Create a bundle of PACKAGE.\n")) #:graft? (assoc-ref opts 'graft?)))) (let* ((dry-run? (assoc-ref opts 'dry-run?)) (relocatable? (assoc-ref opts 'relocatable?)) + (proot? (eq? relocatable? 'proot)) (manifest (let ((manifest (manifest-from-args store opts))) ;; Note: We cannot honor '--bootstrap' here because ;; 'glibc-bootstrap' lacks 'libc.a'. (if relocatable? - (map-manifest-entries wrapped-package manifest) + (map-manifest-entries + (cut wrapped-package <> #:proot? proot?) + manifest) manifest))) (pack-format (assoc-ref opts 'format)) (name (string-append (symbol->string pack-format) diff --git a/tests/guix-pack-relocatable.sh b/tests/guix-pack-relocatable.sh index 554416627b..38dcf1e485 100644 --- a/tests/guix-pack-relocatable.sh +++ b/tests/guix-pack-relocatable.sh @@ -1,5 +1,5 @@ # GNU Guix --- Functional package management for GNU -# Copyright © 2018 Ludovic Courtès +# Copyright © 2018, 2019 Ludovic Courtès # # This file is part of GNU Guix. # @@ -41,17 +41,28 @@ STORE_PARENT="`dirname $NIX_STORE_DIR`" export STORE_PARENT if test "$STORE_PARENT" = "/"; then exit 77; fi -# This test requires user namespaces and associated command-line tools. -if ! unshare -mrf sh -c 'mount -t tmpfs none "$STORE_PARENT"' +if unshare -mrf sh -c 'mount -t tmpfs none "$STORE_PARENT"' then - exit 77 + # Test the wrapper that relies on user namespaces. + relocatable_option="-R" +else + case "`uname -m`" in + x86_64|i?86) + # Test the wrapper that falls back to PRoot. + relocatable_option="-RR";; + *) + # XXX: Our 'proot' package currently fails tests on non-Intel + # architectures, so skip this by default. + exit 77;; + esac fi test_directory="`mktemp -d`" export test_directory trap 'chmod -Rf +w "$test_directory"; rm -rf "$test_directory"' EXIT -tarball="`guix pack -R -S /Bin=bin sed`" +export relocatable_option +tarball="`guix pack $relocatable_option -S /Bin=bin sed`" (cd "$test_directory"; tar xvf "$tarball") # Run that relocatable 'sed' in a user namespace where we "erase" the store by -- cgit v1.2.3 From c71b7b5b3740177f0df6d3565dcc356ceda1acba Mon Sep 17 00:00:00 2001 From: nixo Date: Fri, 8 Mar 2019 14:29:17 +0100 Subject: services: mpd: add more configuration options MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gnu/services/audio.scm (): Add 'db-file', 'state-file' and 'sticker-file' fields. * doc/guix.texi (Music Player Daemon): Document it. Signed-off-by: Ludovic Courtès --- doc/guix.texi | 9 +++++++++ gnu/services/audio.scm | 9 +++++++++ 2 files changed, 18 insertions(+) (limited to 'doc') diff --git a/doc/guix.texi b/doc/guix.texi index 8d51bdf7f4..5bbd0ee7f0 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -20324,6 +20324,15 @@ The directory to scan for music files. @item @code{playlist-dir} (default: @code{"~/.mpd/playlists"}) The directory to store playlists. +@item @code{db-file} (default: @code{"~/.mpd/tag_cache"}) +The location of the music database. + +@item @code{state-file} (default: @code{"~/.mpd/state"}) +The location of the file that stores current MPD's state. + +@item @code{sticker-file} (default: @code{"~/.mpd/sticker.sql"}) +The location of the sticker database. + @item @code{port} (default: @code{"6600"}) The port to run mpd on. diff --git a/gnu/services/audio.scm b/gnu/services/audio.scm index 6629433780..ebfe05abd0 100644 --- a/gnu/services/audio.scm +++ b/gnu/services/audio.scm @@ -42,6 +42,12 @@ (default "~/Music")) (playlist-dir mpd-configuration-playlist-dir (default "~/.mpd/playlists")) + (db-file mpd-configuration-db-file + (default "~/.mpd/tag_cache")) + (state-file mpd-configuration-state-file + (default "~/.mpd/state")) + (sticker-file mpd-configuration-sticker-file + (default "~/.mpd/sticker.sql")) (port mpd-configuration-port (default "6600")) (address mpd-configuration-address @@ -61,6 +67,9 @@ `(("user" ,mpd-configuration-user) ("music_directory" ,mpd-configuration-music-dir) ("playlist_directory" ,mpd-configuration-playlist-dir) + ("db_file" ,mpd-configuration-db-file) + ("state_file" ,mpd-configuration-state-file) + ("sticker_file" ,mpd-configuration-sticker-file) ("port" ,mpd-configuration-port) ("bind_to_address" ,mpd-configuration-address))))) -- cgit v1.2.3 From 880916ac5228b9cfd6e65ac243d17f6bd12edaf9 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Tue, 12 Mar 2019 15:50:13 +0100 Subject: guix build: Add '--with-git-url'. * guix/scripts/build.scm (%not-equal): New variable. (evaluate-git-replacement-specs): Use it instead of local variable 'not-equal'. (transform-package-source-git-url): New procedure. (%transformations): Add 'with-git-url'. (%transformation-options, show-transformation-options-help): Add '--with-git-url'. * tests/scripts-build.scm ("options->transformation, with-git-url"): New test. --- doc/guix.texi | 34 +++++++++++++++++++++++----------- guix/scripts/build.scm | 47 ++++++++++++++++++++++++++++++++++++++++------- tests/scripts-build.scm | 24 +++++++++++++++++++++++- 3 files changed, 86 insertions(+), 19 deletions(-) (limited to 'doc') diff --git a/doc/guix.texi b/doc/guix.texi index 5bbd0ee7f0..139a09d1bc 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -7780,22 +7780,18 @@ must be compatible. If @var{replacement} is somehow incompatible with @var{package}, then the resulting package may be unusable. Use with care! -@item --with-branch=@var{package}=@var{branch} +@item --with-git-url=@var{package}=@var{url} @cindex Git, using the latest commit @cindex latest commit, building -Build @var{package} from the latest commit of @var{branch}. The @code{source} -field of @var{package} must be an origin with the @code{git-fetch} method -(@pxref{origin Reference}) or a @code{git-checkout} object; the repository URL -is taken from that @code{source}. Git sub-modules of the repository are -fetched, recursively. +Build @var{package} from the latest commit of the @code{master} branch of the +Git repository at @var{url}. -For instance, the following command builds @code{guile-sqlite3} from the -latest commit of its @code{master} branch, and then builds @code{guix} (which -depends on it) and @code{cuirass} (which depends on @code{guix}) against this -specific @code{guile-sqlite3} build: +For example, the following commands builds the GNU C Library (glibc) straight +from its Git repository instead of building the currently-packaged release: @example -guix build --with-branch=guile-sqlite3=master cuirass +guix build glibc \ + --with-git-url=glibc=git://sourceware.org/git/glibc.git @end example @cindex continuous integration @@ -7809,6 +7805,22 @@ Checkouts are kept in a cache under @file{~/.cache/guix/checkouts} to speed up consecutive accesses to the same repository. You may want to clean it up once in a while to save disk space. +@item --with-branch=@var{package}=@var{branch} +Build @var{package} from the latest commit of @var{branch}. The @code{source} +field of @var{package} must be an origin with the @code{git-fetch} method +(@pxref{origin Reference}) or a @code{git-checkout} object; the repository URL +is taken from that @code{source}. Git sub-modules of the repository are +fetched, recursively. + +For instance, the following command builds @code{guile-sqlite3} from the +latest commit of its @code{master} branch, and then builds @code{guix} (which +depends on it) and @code{cuirass} (which depends on @code{guix}) against this +specific @code{guile-sqlite3} build: + +@example +guix build --with-branch=guile-sqlite3=master cuirass +@end example + @item --with-commit=@var{package}=@var{commit} This is similar to @code{--with-branch}, except that it builds from @var{commit} rather than the tip of a branch. @var{commit} must be a valid diff --git a/guix/scripts/build.scm b/guix/scripts/build.scm index 6b29c470fb..5883dbfb44 100644 --- a/guix/scripts/build.scm +++ b/guix/scripts/build.scm @@ -272,16 +272,16 @@ current 'gnutls' package, after which version 3.5.4 is grafted onto them." (rewrite obj) obj)))) +(define %not-equal + (char-set-complement (char-set #\=))) + (define (evaluate-git-replacement-specs specs proc) "Parse SPECS, a list of strings like \"guile=stable-2.2\", and return a list of package pairs, where (PROC PACKAGE URL BRANCH-OR-COMMIT) returns the replacement package. Raise an error if an element of SPECS uses invalid syntax, or if a package it refers to could not be found." - (define not-equal - (char-set-complement (char-set #\=))) - (map (lambda (spec) - (match (string-tokenize spec not-equal) + (match (string-tokenize spec %not-equal) ((name branch-or-commit) (let* ((old (specification->package name)) (source (package-source old)) @@ -341,6 +341,33 @@ strings like \"guile-next=cabba9e\" meaning that packages are built using (rewrite obj) obj)))) +(define (transform-package-source-git-url replacement-specs) + "Return a procedure that, when passed a package, replaces its dependencies +according to REPLACEMENT-SPECS. REPLACEMENT-SPECS is a list of strings like +\"guile-json=https://gitthing.com/…\" meaning that packages are built using +a checkout of the Git repository at the given URL." + ;; FIXME: Currently this cannot be combined with '--with-branch' or + ;; '--with-commit' because they all transform "from scratch". + (define replacements + (map (lambda (spec) + (match (string-tokenize spec %not-equal) + ((name url) + (let* ((old (specification->package name)) + (new (package + (inherit old) + (source (git-checkout (url url) + (recursive? #t)))))) + (cons old new))))) + replacement-specs)) + + (define rewrite + (package-input-rewriting replacements)) + + (lambda (store obj) + (if (package? obj) + (rewrite obj) + obj))) + (define %transformations ;; Transformations that can be applied to things to build. The car is the ;; key used in the option alist, and the cdr is the transformation @@ -350,7 +377,8 @@ strings like \"guile-next=cabba9e\" meaning that packages are built using (with-input . ,transform-package-inputs) (with-graft . ,transform-package-inputs/graft) (with-branch . ,transform-package-source-branch) - (with-commit . ,transform-package-source-commit))) + (with-commit . ,transform-package-source-commit) + (with-git-url . ,transform-package-source-git-url))) (define %transformation-options ;; The command-line interface to the above transformations. @@ -368,7 +396,9 @@ strings like \"guile-next=cabba9e\" meaning that packages are built using (option '("with-branch") #t #f (parser 'with-branch)) (option '("with-commit") #t #f - (parser 'with-commit))))) + (parser 'with-commit)) + (option '("with-git-url") #t #f + (parser 'with-git-url))))) (define (show-transformation-options-help) (display (G_ " @@ -385,7 +415,10 @@ strings like \"guile-next=cabba9e\" meaning that packages are built using build PACKAGE from the latest commit of BRANCH")) (display (G_ " --with-commit=PACKAGE=COMMIT - build PACKAGE from COMMIT"))) + build PACKAGE from COMMIT")) + (display (G_ " + --with-git-url=PACKAGE=URL + build PACKAGE from the repository at URL"))) (define (options->transformation opts) diff --git a/tests/scripts-build.scm b/tests/scripts-build.scm index 190426ed06..54681274b9 100644 --- a/tests/scripts-build.scm +++ b/tests/scripts-build.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2016, 2017 Ludovic Courtès +;;; Copyright © 2016, 2017, 2019 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; @@ -23,6 +23,7 @@ #:use-module (guix scripts build) #:use-module (guix ui) #:use-module (guix utils) + #:use-module (guix git) #:use-module (gnu packages) #:use-module (gnu packages base) #:use-module (gnu packages busybox) @@ -164,4 +165,25 @@ ((("x" dep)) (eq? (package-replacement dep) findutils))))))))))) +(test-equal "options->transformation, with-git-url" + (let ((source (git-checkout (url "https://example.org") + (recursive? #t)))) + (list source source)) + (let* ((p (dummy-package "guix.scm" + (inputs `(("foo" ,grep) + ("bar" ,(dummy-package "chbouib" + (native-inputs `(("x" ,grep))))))))) + (t (options->transformation '((with-git-url . "grep=https://example.org"))))) + (with-store store + (let ((new (t store p))) + (and (not (eq? new p)) + (match (package-inputs new) + ((("foo" dep1) ("bar" dep2)) + (and (string=? (package-full-name dep1) + (package-full-name grep)) + (string=? (package-name dep2) "chbouib") + (match (package-native-inputs dep2) + ((("x" dep3)) + (map package-source (list dep1 dep3)))))))))))) + (test-end) -- cgit v1.2.3 From f258d8862852db9779945658b3a3f2b8a2a4c217 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Tue, 12 Mar 2019 21:39:48 +0100 Subject: packages: Add 'package-input-rewriting/spec'. * guix/packages.scm (package-input-rewriting/spec): New procedure. * tests/packages.scm ("package-input-rewriting/spec") ("package-input-rewriting/spec, partial match"): New tests. * doc/guix.texi (Defining Packages): Document it. --- doc/guix.texi | 23 +++++++++++++++++++++++ guix/packages.scm | 38 ++++++++++++++++++++++++++++++++++++++ tests/packages.scm | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 112 insertions(+) (limited to 'doc') diff --git a/doc/guix.texi b/doc/guix.texi index 139a09d1bc..6124c9c24c 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -5241,6 +5241,29 @@ with @var{libressl}. Then we use it to define a @dfn{variant} of the This is exactly what the @option{--with-input} command-line option does (@pxref{Package Transformation Options, @option{--with-input}}). +The following variant of @code{package-input-rewriting} can match packages to +be replaced by name rather than by identity. + +@deffn {Scheme Procedure} package-input-rewriting/spec @var{replacements} +Return a procedure that, given a package, applies the given @var{replacements} to +all the package graph (excluding implicit inputs). @var{replacements} is a list of +spec/procedures pair; each spec is a package specification such as @code{"gcc"} or +@code{"guile@@2"}, and each procedure takes a matching package and returns a +replacement for that package. +@end deffn + +The example above could be rewritten this way: + +@example +(define libressl-instead-of-openssl + ;; Replace all the packages called "openssl" with LibreSSL. + (package-input-rewriting/spec `(("openssl" . ,(const libressl))))) +@end example + +The key difference here is that, this time, packages are matched by spec and +not by identity. In other words, any package in the graph that is called +@code{openssl} will be replaced. + A more generic procedure to rewrite a package dependency graph is @code{package-mapping}: it supports arbitrary changes to nodes in the graph. diff --git a/guix/packages.scm b/guix/packages.scm index f191327718..d20a2562c3 100644 --- a/guix/packages.scm +++ b/guix/packages.scm @@ -102,6 +102,7 @@ package-transitive-supported-systems package-mapping package-input-rewriting + package-input-rewriting/spec package-source-derivation package-derivation package-cross-derivation @@ -869,6 +870,43 @@ package and returns its new name after rewrite." (package-mapping rewrite (cut assq <> replacements))) +(define (package-input-rewriting/spec replacements) + "Return a procedure that, given a package, applies the given REPLACEMENTS to +all the package graph (excluding implicit inputs). REPLACEMENTS is a list of +spec/procedures pair; each spec is a package specification such as \"gcc\" or +\"guile@2\", and each procedure takes a matching package and returns a +replacement for that package." + (define table + (fold (lambda (replacement table) + (match replacement + ((spec . proc) + (let-values (((name version) + (package-name->name+version spec))) + (vhash-cons name (list version proc) table))))) + vlist-null + replacements)) + + (define (find-replacement package) + (vhash-fold* (lambda (item proc) + (or proc + (match item + ((#f proc) + proc) + ((version proc) + (and (version-prefix? version + (package-version package)) + proc))))) + #f + (package-name package) + table)) + + (define (rewrite package) + (match (find-replacement package) + (#f package) + (proc (proc package)))) + + (package-mapping rewrite find-replacement)) + (define-syntax-rule (package/inherit p overrides ...) "Like (package (inherit P) OVERRIDES ...), except that the same transformation is done to the package replacement, if any. P must be a bare diff --git a/tests/packages.scm b/tests/packages.scm index 4e4bffc48c..613b2f1221 100644 --- a/tests/packages.scm +++ b/tests/packages.scm @@ -981,6 +981,57 @@ ((("x" dep)) (eq? dep findutils))))))))) +(test-assert "package-input-rewriting/spec" + (let* ((dep (dummy-package "chbouib" + (native-inputs `(("x" ,grep))))) + (p0 (dummy-package "example" + (inputs `(("foo" ,coreutils) + ("bar" ,grep) + ("baz" ,dep))))) + (rewrite (package-input-rewriting/spec + `(("coreutils" . ,(const sed)) + ("grep" . ,(const findutils))))) + (p1 (rewrite p0)) + (p2 (rewrite p0))) + (and (not (eq? p1 p0)) + (eq? p1 p2) ;memoization + (string=? "example" (package-name p1)) + (match (package-inputs p1) + ((("foo" dep1) ("bar" dep2) ("baz" dep3)) + (and (string=? (package-full-name dep1) + (package-full-name sed)) + (string=? (package-full-name dep2) + (package-full-name findutils)) + (string=? (package-name dep3) "chbouib") + (eq? dep3 (rewrite dep)) ;memoization + (match (package-native-inputs dep3) + ((("x" dep)) + (string=? (package-full-name dep) + (package-full-name findutils)))))))))) + +(test-assert "package-input-rewriting/spec, partial match" + (let* ((dep (dummy-package "chbouib" + (version "1") + (native-inputs `(("x" ,grep))))) + (p0 (dummy-package "example" + (inputs `(("foo" ,coreutils) + ("bar" ,dep))))) + (rewrite (package-input-rewriting/spec + `(("chbouib@123" . ,(const sed)) ;not matched + ("grep" . ,(const findutils))))) + (p1 (rewrite p0))) + (and (not (eq? p1 p0)) + (string=? "example" (package-name p1)) + (match (package-inputs p1) + ((("foo" dep1) ("bar" dep2)) + (and (string=? (package-full-name dep1) + (package-full-name coreutils)) + (eq? dep2 (rewrite dep)) ;memoization + (match (package-native-inputs dep2) + ((("x" dep)) + (string=? (package-full-name dep) + (package-full-name findutils)))))))))) + (test-equal "package-patched-vulnerabilities" '(("CVE-2015-1234") ("CVE-2016-1234" "CVE-2018-4567") -- cgit v1.2.3 From 14328b81a224b726f39dd030886ba8d332027427 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Wed, 13 Mar 2019 10:11:54 +0100 Subject: guix build: Transformation options match packages by spec. This allows us to combine several transformations on a given package, in particular '--with-git-url' and '--with-branch'. Previously transformations would ignore each other since they would all take (specification->package SOURCE) as their replacement source, compare it by identity, which doesn't work if a previous transformation has already changed SOURCE. * guix/scripts/build.scm (evaluate-replacement-specs): Adjust to produce an alist as expected by 'package-input-rewriting/spec', with a package spec as the first element of each pair. (evaluate-git-replacement-specs): Likewise. (transform-package-inputs): Adjust accordingly and use 'package-input-rewriting/spec'. (transform-package-inputs/graft): Likewise. (transform-package-source-branch, transform-package-source-commit): Use 'package-input-rewriting/spec'. (transform-package-source-git-url): Likewise, and adjust the REPLACEMENTS alist accordingly. (options->transformation): Iterate over OPTS instead of over %TRANSFORMATIONS. Invoke transformations one by one. * tests/scripts-build.scm ("options->transformation, with-input"): Adjust test to compare packages by name rather than by identity. ("options->transformation, with-git-url + with-branch"): New test. --- doc/guix.texi | 24 +++++++------ guix/scripts/build.scm | 90 +++++++++++++++++++++++++++---------------------- tests/scripts-build.scm | 36 ++++++++++++++++++-- 3 files changed, 97 insertions(+), 53 deletions(-) (limited to 'doc') diff --git a/doc/guix.texi b/doc/guix.texi index 6124c9c24c..a3dd344a70 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -7807,16 +7807,20 @@ care! @cindex Git, using the latest commit @cindex latest commit, building Build @var{package} from the latest commit of the @code{master} branch of the -Git repository at @var{url}. +Git repository at @var{url}. Git sub-modules of the repository are fetched, +recursively. -For example, the following commands builds the GNU C Library (glibc) straight -from its Git repository instead of building the currently-packaged release: +For example, the following command builds the NumPy Python library against the +latest commit of the master branch of Python itself: @example -guix build glibc \ - --with-git-url=glibc=git://sourceware.org/git/glibc.git +guix build python-numpy \ + --with-git-url=python=https://github.com/python/cpython @end example +This option can also be combined with @code{--with-branch} or +@code{--with-commit} (see below). + @cindex continuous integration Obviously, since it uses the latest commit of the given branch, the result of such a command varies over time. Nevertheless it is a convenient way to @@ -7829,11 +7833,11 @@ consecutive accesses to the same repository. You may want to clean it up once in a while to save disk space. @item --with-branch=@var{package}=@var{branch} -Build @var{package} from the latest commit of @var{branch}. The @code{source} -field of @var{package} must be an origin with the @code{git-fetch} method -(@pxref{origin Reference}) or a @code{git-checkout} object; the repository URL -is taken from that @code{source}. Git sub-modules of the repository are -fetched, recursively. +Build @var{package} from the latest commit of @var{branch}. If the +@code{source} field of @var{package} is an origin with the @code{git-fetch} +method (@pxref{origin Reference}) or a @code{git-checkout} object, the +repository URL is taken from that @code{source}. Otherwise you have to use +@code{--with-git-url} to specify the URL of the Git repository. For instance, the following command builds @code{guile-sqlite3} from the latest commit of its @code{master} branch, and then builds @code{guix} (which diff --git a/guix/scripts/build.scm b/guix/scripts/build.scm index 7b24cc8eb1..8ebcf79243 100644 --- a/guix/scripts/build.scm +++ b/guix/scripts/build.scm @@ -226,18 +226,21 @@ matching URIs given in SOURCES." obj))))) (define (evaluate-replacement-specs specs proc) - "Parse SPECS, a list of strings like \"guile=guile@2.1\", and invoke PROC on -each package pair specified by SPECS. Return the resulting list. Raise an -error if an element of SPECS uses invalid syntax, or if a package it refers to -could not be found." + "Parse SPECS, a list of strings like \"guile=guile@2.1\" and return a list +of package spec/procedure pairs as expected by 'package-input-rewriting/spec'. +PROC is called with the package to be replaced and its replacement according +to SPECS. Raise an error if an element of SPECS uses invalid syntax, or if a +package it refers to could not be found." (define not-equal (char-set-complement (char-set #\=))) (map (lambda (spec) (match (string-tokenize spec not-equal) - ((old new) - (proc (specification->package old) - (specification->package new))) + ((spec new) + (cons spec + (let ((new (specification->package new))) + (lambda (old) + (proc old new))))) (x (leave (G_ "invalid replacement specification: ~s~%") spec)))) specs)) @@ -248,8 +251,10 @@ dependencies according to REPLACEMENT-SPECS. REPLACEMENT-SPECS is a list of strings like \"guile=guile@2.1\" meaning that, any dependency on a package called \"guile\" must be replaced with a dependency on a version 2.1 of \"guile\"." - (let* ((replacements (evaluate-replacement-specs replacement-specs cons)) - (rewrite (package-input-rewriting replacements))) + (let* ((replacements (evaluate-replacement-specs replacement-specs + (lambda (old new) + new))) + (rewrite (package-input-rewriting/spec replacements))) (lambda (store obj) (if (package? obj) (rewrite obj) @@ -260,13 +265,12 @@ called \"guile\" must be replaced with a dependency on a version 2.1 of dependencies according to REPLACEMENT-SPECS. REPLACEMENT-SPECS is a list of strings like \"gnutls=gnutls@3.5.4\" meaning that packages are built using the current 'gnutls' package, after which version 3.5.4 is grafted onto them." - (define (replacement-pair old new) - (cons old - (package (inherit old) (replacement new)))) + (define (set-replacement old new) + (package (inherit old) (replacement new))) (let* ((replacements (evaluate-replacement-specs replacement-specs - replacement-pair)) - (rewrite (package-input-rewriting replacements))) + set-replacement)) + (rewrite (package-input-rewriting/spec replacements))) (lambda (store obj) (if (package? obj) (rewrite obj) @@ -295,11 +299,13 @@ replacement package. Raise an error if an element of SPECS uses invalid syntax, or if a package it refers to could not be found." (map (lambda (spec) (match (string-tokenize spec %not-equal) - ((name branch-or-commit) - (let* ((old (specification->package name)) - (source (package-source old)) - (url (package-git-url old))) - (cons old (proc old url branch-or-commit)))) + ((spec branch-or-commit) + (define (replace old) + (let* ((source (package-source old)) + (url (package-git-url old))) + (proc old url branch-or-commit))) + + (cons spec replace)) (x (leave (G_ "invalid replacement specification: ~s~%") spec)))) specs)) @@ -318,7 +324,7 @@ strings like \"guile-next=stable-3.0\" meaning that packages are built using (let* ((replacements (evaluate-git-replacement-specs replacement-specs replace)) - (rewrite (package-input-rewriting replacements))) + (rewrite (package-input-rewriting/spec replacements))) (lambda (store obj) (if (package? obj) (rewrite obj) @@ -340,7 +346,7 @@ strings like \"guile-next=cabba9e\" meaning that packages are built using (let* ((replacements (evaluate-git-replacement-specs replacement-specs replace)) - (rewrite (package-input-rewriting replacements))) + (rewrite (package-input-rewriting/spec replacements))) (lambda (store obj) (if (package? obj) (rewrite obj) @@ -351,22 +357,20 @@ strings like \"guile-next=cabba9e\" meaning that packages are built using according to REPLACEMENT-SPECS. REPLACEMENT-SPECS is a list of strings like \"guile-json=https://gitthing.com/…\" meaning that packages are built using a checkout of the Git repository at the given URL." - ;; FIXME: Currently this cannot be combined with '--with-branch' or - ;; '--with-commit' because they all transform "from scratch". (define replacements (map (lambda (spec) (match (string-tokenize spec %not-equal) - ((name url) - (let* ((old (specification->package name)) - (new (package - (inherit old) - (source (git-checkout (url url) - (recursive? #t)))))) - (cons old new))))) + ((spec url) + (cons spec + (lambda (old) + (package + (inherit old) + (source (git-checkout (url url) + (recursive? #t))))))))) replacement-specs)) (define rewrite - (package-input-rewriting replacements)) + (package-input-rewriting/spec replacements)) (lambda (store obj) (if (package? obj) @@ -430,16 +434,22 @@ a checkout of the Git repository at the given URL." "Return a procedure that, when passed an object to build (package, derivation, etc.), applies the transformations specified by OPTS." (define applicable - ;; List of applicable transformations as symbol/procedure pairs. + ;; List of applicable transformations as symbol/procedure pairs in the + ;; order in which they appear on the command line. (filter-map (match-lambda - ((key . transform) - (match (filter-map (match-lambda - ((k . arg) - (and (eq? k key) arg))) - opts) - (() #f) - (args (cons key (transform args)))))) - %transformations)) + ((key . value) + (match (any (match-lambda + ((k . proc) + (and (eq? k key) proc))) + %transformations) + (#f + #f) + (transform + ;; XXX: We used to pass TRANSFORM a list of several + ;; arguments, but we now pass only one, assuming that + ;; transform composes well. + (cons key (transform (list value))))))) + (reverse opts))) (lambda (store obj) (fold (match-lambda* diff --git a/tests/scripts-build.scm b/tests/scripts-build.scm index 54681274b9..4bf1e1a719 100644 --- a/tests/scripts-build.scm +++ b/tests/scripts-build.scm @@ -139,12 +139,15 @@ (and (not (eq? new p)) (match (package-inputs new) ((("foo" dep1) ("bar" dep2) ("baz" dep3)) - (and (eq? dep1 busybox) - (eq? dep2 findutils) + (and (string=? (package-full-name dep1) + (package-full-name busybox)) + (string=? (package-full-name dep2) + (package-full-name findutils)) (string=? (package-name dep3) "chbouib") (match (package-native-inputs dep3) ((("x" dep)) - (eq? dep findutils))))))))))) + (string=? (package-full-name dep) + (package-full-name findutils)))))))))))) (test-assert "options->transformation, with-graft" (let* ((p (dummy-package "guix.scm" @@ -186,4 +189,31 @@ ((("x" dep3)) (map package-source (list dep1 dep3)))))))))))) +(test-equal "options->transformation, with-git-url + with-branch" + ;; Combine the two options and make sure the 'with-branch' transformation + ;; comes after the 'with-git-url' transformation. + (let ((source (git-checkout (url "https://example.org") + (branch "BRANCH") + (recursive? #t)))) + (list source source)) + (let* ((p (dummy-package "guix.scm" + (inputs `(("foo" ,grep) + ("bar" ,(dummy-package "chbouib" + (native-inputs `(("x" ,grep))))))))) + (t (options->transformation + (reverse '((with-git-url + . "grep=https://example.org") + (with-branch . "grep=BRANCH")))))) + (with-store store + (let ((new (t store p))) + (and (not (eq? new p)) + (match (package-inputs new) + ((("foo" dep1) ("bar" dep2)) + (and (string=? (package-name dep1) "grep") + (string=? (package-name dep2) "chbouib") + (match (package-native-inputs dep2) + ((("x" dep3)) + (map package-source (list dep1 dep3)))))))))))) + + (test-end) -- cgit v1.2.3 From 97ab799afeff032b422642d945c2bcc764f6d8ed Mon Sep 17 00:00:00 2001 From: Tim Gesthuizen Date: Sat, 5 Jan 2019 23:28:18 +0100 Subject: gnu: Add inputattach service. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a service that runs inputattach as a daemon to translate events from serial ports. * gnu/services/desktop.scm (): New record type. * gnu/services/desktop.scm (inputattach-service-type): New service type. * doc/guix.texi (Miscellaneous Services): Add inputattach Service subsubheading. Signed-off-by: Ludovic Courtès --- doc/guix.texi | 16 ++++++++++++++++ gnu/services/desktop.scm | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) (limited to 'doc') diff --git a/doc/guix.texi b/doc/guix.texi index a3dd344a70..601afeda06 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -22503,6 +22503,22 @@ that enables sharing the clipboard with a vm and setting the guest display resolution when the graphical console window resizes. @end deffn +@cindex inputattach +@subsubheading inputattach Service + +@deftp {Data Type} inputattach-configuration +@table @asis +@item @code{device-type} The type of device to connect to. +@item @code{device} The device file to connect to the device. +@item @code{log-file} The file to log messages to. +@end table +@end deftp + +@deffn {Scheme Procedure} inputattach-service-type +Return a service that runs inputattach on a device and +dispatches events from it. +@end deffn + @subsection Dictionary Services @cindex dictionary The @code{(gnu services dict)} module provides the following service: diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm index 0dee57e3bc..8f8e177ca9 100644 --- a/gnu/services/desktop.scm +++ b/gnu/services/desktop.scm @@ -8,6 +8,7 @@ ;;; Copyright © 2018 Efraim Flashner ;;; Copyright © 2018 Ricardo Wurmus ;;; Copyright © 2017, 2019 Christopher Baines +;;; Copyright © 2019 Tim Gesthuizen ;;; ;;; This file is part of GNU Guix. ;;; @@ -123,6 +124,10 @@ enlightenment-desktop-configuration? enlightenment-desktop-service-type + inputattach-configuration + inputattach-configuration? + inputattach-service-type + %desktop-services)) ;;; Commentary: @@ -1019,6 +1024,47 @@ profile, and extends dbus with the ability for @code{efl} to generate thumbnails and makes setuid the programs which enlightenment needs to function as expected."))) + +;;; +;;; inputattach-service-type +;;; + +(define-record-type* + inputattach-configuration + make-inputattach-configuration + inputattach-configuration? + (device-type inputattach-configuration-device-type + (default "wacom")) + (device inputattach-configuration-device + (default "/dev/ttyS0")) + (log-file inputattach-configuration-log-file + (default #f))) + +(define inputattach-shepherd-service + (match-lambda + (($ type device log-file) + (list (shepherd-service + (provision '(inputattach)) + (requirement '(udev)) + (documentation "inputattach daemon") + (start #~(make-forkexec-constructor + (list (string-append #$inputattach + "/bin/inputattach") + (string-append "--" #$type) + #$device) + #:log-file #$log-file)) + (stop #~(make-kill-destructor))))))) + +(define inputattach-service-type + (service-type + (name 'inputattach) + (extensions + (list (service-extension shepherd-root-service-type + inputattach-shepherd-service))) + (default-value (inputattach-configuration)) + (description "Return a service that runs inputattach on a device and +dispatches events from it."))) + ;;; ;;; The default set of desktop services. -- cgit v1.2.3 From 62b86d66fdfd045956a8fd15ba6733ebef054ebc Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Mon, 18 Mar 2019 10:22:57 +0100 Subject: doc: Expound on inputattach service. * doc/guix.texi (Miscellaneous Services): Expound documentation of inputattach service. --- doc/guix.texi | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) (limited to 'doc') diff --git a/doc/guix.texi b/doc/guix.texi index 601afeda06..63581bbe41 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -22506,19 +22506,31 @@ resolution when the graphical console window resizes. @cindex inputattach @subsubheading inputattach Service +@cindex tablet input, for Xorg +@cindex touchscreen input, for Xorg +The @uref{https://linuxwacom.github.io/, inputattach} service allows you to +use input devices such as Wacom tablets, touchscreens, or joysticks with the +Xorg display server. + +@deffn {Scheme Variable} inputattach-service-type +Type of a service that runs @command{inputattach} on a device and +dispatches events from it. +@end deffn + @deftp {Data Type} inputattach-configuration @table @asis -@item @code{device-type} The type of device to connect to. -@item @code{device} The device file to connect to the device. -@item @code{log-file} The file to log messages to. +@item @code{device-type} (default: @code{"wacom"}) +The type of device to connect to. Run @command{inputattach --help}, from the +@code{inputattach} package, to see the list of supported device types. + +@item @code{device} (default: @code{"/dev/ttyS0"}) +The device file to connect to the device. + +@item @code{log-file} (default: @code{#f}) +If true, this must be the name of a file to log messages to. @end table @end deftp -@deffn {Scheme Procedure} inputattach-service-type -Return a service that runs inputattach on a device and -dispatches events from it. -@end deffn - @subsection Dictionary Services @cindex dictionary The @code{(gnu services dict)} module provides the following service: -- cgit v1.2.3 From 47956fa0c24efcdcba3493f0231c30e9a39ec7df Mon Sep 17 00:00:00 2001 From: ng0 Date: Thu, 14 Mar 2019 09:33:38 +0000 Subject: Correct name and email address for ng0. * .mailmap, Makefile.am, doc/guix.de.texi, doc/guix.fr.texi, doc/guix.texi, etc/completion/fish/guix.fish, gnu/packages/accessibility.scm, gnu/packages/admin.scm, gnu/packages/audio.scm, gnu/packages/autotools.scm, gnu/packages/cdrom.scm, gnu/packages/check.scm, gnu/packages/cinnamon.scm, gnu/packages/compression.scm, gnu/packages/crypto.scm, gnu/packages/databases.scm, gnu/packages/django.scm, gnu/packages/dns.scm, gnu/packages/elixir.scm, gnu/packages/emacs-xyz.scm, gnu/packages/emacs.scm, gnu/packages/enlightenment.scm, gnu/packages/erlang.scm, gnu/packages/fonts.scm, gnu/packages/fontutils.scm, gnu/packages/forth.scm, gnu/packages/fvwm.scm, gnu/packages/games.scm, gnu/packages/gl.scm, gnu/packages/gnome.scm, gnu/packages/gnunet.scm, gnu/packages/gnupg.scm, gnu/packages/gnuzilla.scm, gnu/packages/gtk.scm, gnu/packages/guile-wm.scm,gnu/packages/guile-xyz.scm, gnu/packages/haskell-check.scm, gnu/packages/haskell-crypto.scm, gnu/packages/haskell.scm, gnu/packages/image-viewers.scm, gnu/packages/image.scm, gnu/packages/irc.scm, gnu/packages/language.scm, gnu/packages/libcanberra.scm, gnu/packages/linux.scm, gnu/packages/lisp.scm, gnu/packages/lolcode.scm, gnu/packages/lxde.scm, gnu/packages/lxqt.scm, gnu/packages/mail.scm, gnu/packages/markup.scm, gnu/packages/mate.scm, gnu/packages/maths.scm, gnu/packages/mc.scm, gnu/packages/messaging.scm, gnu/packages/music.scm, gnu/packages/ncurses.scm, gnu/packages/networking.scm, gnu/packages/nickle.scm, gnu/packages/openbox.scm, gnu/packages/pdf.scm, gnu/packages/perl-check.scm, gnu/packages/perl.scm, gnu/packages/python-compression.scm, gnu/packages/python-crypto.scm, gnu/packages/python-web.scm, gnu/packages/python-xyz.scm, gnu/packages/python.scm, gnu/packages/qt.scm, gnu/packages/ruby.scm, gnu/packages/rust.scm, gnu/packages/scheme.scm, gnu/packages/serialization.scm, gnu/packages/shells.scm, gnu/packages/ssh.scm, gnu/packages/suckless.scm, gnu/packages/tbb.scm, gnu/packages/telephony.scm, gnu/packages/text-editors.scm, gnu/packages/textutils.scm, gnu/packages/time.scm, gnu/packages/tls.scm, gnu/packages/tor.scm, gnu/packages/version-control.scm, gnu/packages/video.scm, gnu/packages/vim.scm, gnu/packages/web.scm, gnu/packages/wm.scm, gnu/packages/xdisorg.scm, gnu/packages/xfce.scm, gnu/packages/xml.scm, gnu/packages/xorg.scm, gnu/services/certbot.scm, gnu/services/desktop.scm, gnu/services/version-control.scm, gnu/services/web.scm, guix/import/hackage.scm, guix/licenses.scm: Correct name and email address for ng0. Signed-off-by: Tobias Geerinckx-Rice --- .mailmap | 28 ++++++++++++++-------------- Makefile.am | 2 +- doc/guix.de.texi | 2 +- doc/guix.fr.texi | 2 +- doc/guix.texi | 2 +- etc/completion/fish/guix.fish | 2 +- gnu/packages/accessibility.scm | 2 +- gnu/packages/admin.scm | 2 +- gnu/packages/audio.scm | 2 +- gnu/packages/autotools.scm | 2 +- gnu/packages/cdrom.scm | 2 +- gnu/packages/check.scm | 2 +- gnu/packages/cinnamon.scm | 2 +- gnu/packages/compression.scm | 2 +- gnu/packages/crypto.scm | 2 +- gnu/packages/databases.scm | 2 +- gnu/packages/django.scm | 2 +- gnu/packages/dns.scm | 2 +- gnu/packages/elixir.scm | 2 +- gnu/packages/emacs-xyz.scm | 2 +- gnu/packages/emacs.scm | 2 +- gnu/packages/enlightenment.scm | 2 +- gnu/packages/erlang.scm | 2 +- gnu/packages/fonts.scm | 2 +- gnu/packages/fontutils.scm | 2 +- gnu/packages/forth.scm | 2 +- gnu/packages/fvwm.scm | 2 +- gnu/packages/games.scm | 2 +- gnu/packages/gl.scm | 2 +- gnu/packages/gnome.scm | 2 +- gnu/packages/gnunet.scm | 2 +- gnu/packages/gnupg.scm | 2 +- gnu/packages/gnuzilla.scm | 2 +- gnu/packages/gtk.scm | 2 +- gnu/packages/guile-wm.scm | 2 +- gnu/packages/guile-xyz.scm | 2 +- gnu/packages/haskell-check.scm | 2 +- gnu/packages/haskell-crypto.scm | 2 +- gnu/packages/haskell.scm | 2 +- gnu/packages/image-viewers.scm | 2 +- gnu/packages/image.scm | 2 +- gnu/packages/irc.scm | 2 +- gnu/packages/language.scm | 2 +- gnu/packages/libcanberra.scm | 2 +- gnu/packages/linux.scm | 2 +- gnu/packages/lisp.scm | 2 +- gnu/packages/lolcode.scm | 2 +- gnu/packages/lxde.scm | 2 +- gnu/packages/lxqt.scm | 2 +- gnu/packages/mail.scm | 2 +- gnu/packages/markup.scm | 2 +- gnu/packages/mate.scm | 2 +- gnu/packages/maths.scm | 2 +- gnu/packages/mc.scm | 2 +- gnu/packages/messaging.scm | 2 +- gnu/packages/music.scm | 2 +- gnu/packages/ncurses.scm | 2 +- gnu/packages/networking.scm | 2 +- gnu/packages/nickle.scm | 2 +- gnu/packages/openbox.scm | 2 +- gnu/packages/pdf.scm | 2 +- gnu/packages/perl-check.scm | 2 +- gnu/packages/perl.scm | 2 +- gnu/packages/python-compression.scm | 2 +- gnu/packages/python-crypto.scm | 2 +- gnu/packages/python-web.scm | 2 +- gnu/packages/python-xyz.scm | 2 +- gnu/packages/python.scm | 2 +- gnu/packages/qt.scm | 2 +- gnu/packages/ruby.scm | 2 +- gnu/packages/rust.scm | 2 +- gnu/packages/scheme.scm | 2 +- gnu/packages/serialization.scm | 2 +- gnu/packages/shells.scm | 2 +- gnu/packages/ssh.scm | 2 +- gnu/packages/suckless.scm | 2 +- gnu/packages/tbb.scm | 2 +- gnu/packages/telephony.scm | 2 +- gnu/packages/text-editors.scm | 2 +- gnu/packages/textutils.scm | 2 +- gnu/packages/time.scm | 2 +- gnu/packages/tls.scm | 2 +- gnu/packages/tor.scm | 2 +- gnu/packages/version-control.scm | 2 +- gnu/packages/video.scm | 2 +- gnu/packages/vim.scm | 2 +- gnu/packages/web.scm | 2 +- gnu/packages/wm.scm | 2 +- gnu/packages/xdisorg.scm | 2 +- gnu/packages/xfce.scm | 2 +- gnu/packages/xml.scm | 2 +- gnu/packages/xorg.scm | 2 +- gnu/services/certbot.scm | 2 +- gnu/services/desktop.scm | 2 +- gnu/services/version-control.scm | 2 +- gnu/services/web.scm | 2 +- guix/import/hackage.scm | 2 +- guix/licenses.scm | 2 +- 98 files changed, 111 insertions(+), 111 deletions(-) (limited to 'doc') diff --git a/.mailmap b/.mailmap index 981decdeef..7de5313923 100644 --- a/.mailmap +++ b/.mailmap @@ -43,20 +43,20 @@ Mathieu Lirzin Mathieu Othacehe Mathieu Othacehe Nikita Karetnikov -Nils Gillmann ng0 -Nils Gillmann Nils Gillmann -Nils Gillmann ng0 -Nils Gillmann ng0 -Nils Gillmann -Nils Gillmann -Nils Gillmann -Nils Gillmann -Nils Gillmann -Nils Gillmann -Nils Gillmann -Nils Gillmann -Nils Gillmann -Nils Gillmann +ng0 Nils Gillmann +ng0 Nils Gillmann +ng0 ng0 +ng0 ng0 +ng0 +ng0 +ng0 +ng0 +ng0 +ng0 +ng0 +ng0 +ng0 +ng0 Pierre Neidhardt Pierre-Antoine Rouby Pjotr Prins diff --git a/Makefile.am b/Makefile.am index e7109ec69c..50839fcb27 100644 --- a/Makefile.am +++ b/Makefile.am @@ -9,7 +9,7 @@ # Copyright © 2017 Ricardo Wurmus # Copyright © 2017 Jan Nieuwenhuizen # Copyright © 2017 Arun Isaac -# Copyright © 2018 Nils Gillmann +# Copyright © 2018 ng0 # Copyright © 2018 Julien Lepiller # Copyright © 2018 Oleg Pykhalov # Copyright © 2018 Alex Vong diff --git a/doc/guix.de.texi b/doc/guix.de.texi index 3f02c850e7..83dae0d3ec 100644 --- a/doc/guix.de.texi +++ b/doc/guix.de.texi @@ -34,7 +34,7 @@ Leo Famulari@* Copyright @copyright{} 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus@* Copyright @copyright{} 2016 Ben Woodcroft@* Copyright @copyright{} 2016, 2017, 2018 Chris Marusich@* Copyright @copyright{} 2016, 2017, 2018 Efraim Flashner@* Copyright @copyright{} 2016 John Darrington@* Copyright -@copyright{} 2016, 2017 Nils Gillmann@* Copyright @copyright{} 2016, 2017, +@copyright{} 2016, 2017 ng0@* Copyright @copyright{} 2016, 2017, 2018, 2019 Jan Nieuwenhuizen@* Copyright @copyright{} 2016 Julien Lepiller@* Copyright @copyright{} 2016 Alex ter Weele@* Copyright @copyright{} 2016, 2017, 2018, 2019 Christopher Baines@* Copyright @copyright{} 2017, 2018 diff --git a/doc/guix.fr.texi b/doc/guix.fr.texi index 4ef3c1a0ff..541fd6f0d0 100644 --- a/doc/guix.fr.texi +++ b/doc/guix.fr.texi @@ -34,7 +34,7 @@ Leo Famulari@* Copyright @copyright{} 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus@* Copyright @copyright{} 2016 Ben Woodcroft@* Copyright @copyright{} 2016, 2017, 2018 Chris Marusich@* Copyright @copyright{} 2016, 2017, 2018 Efraim Flashner@* Copyright @copyright{} 2016 John Darrington@* Copyright -@copyright{} 2016, 2017 Nils Gillmann@* Copyright @copyright{} 2016, 2017, +@copyright{} 2016, 2017 ng0@* Copyright @copyright{} 2016, 2017, 2018, 2019 Jan Nieuwenhuizen@* Copyright @copyright{} 2016 Julien Lepiller@* Copyright @copyright{} 2016 Alex ter Weele@* Copyright @copyright{} 2016, 2017, 2018, 2019 Christopher Baines@* Copyright @copyright{} 2017, 2018 diff --git a/doc/guix.texi b/doc/guix.texi index 63581bbe41..326607e7e9 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -30,7 +30,7 @@ Copyright @copyright{} 2016 Ben Woodcroft@* Copyright @copyright{} 2016, 2017, 2018 Chris Marusich@* Copyright @copyright{} 2016, 2017, 2018 Efraim Flashner@* Copyright @copyright{} 2016 John Darrington@* -Copyright @copyright{} 2016, 2017 Nils Gillmann@* +Copyright @copyright{} 2016, 2017 ng0@* Copyright @copyright{} 2016, 2017, 2018, 2019 Jan Nieuwenhuizen@* Copyright @copyright{} 2016 Julien Lepiller@* Copyright @copyright{} 2016 Alex ter Weele@* diff --git a/etc/completion/fish/guix.fish b/etc/completion/fish/guix.fish index d5b28cdc2b..525d39679d 100644 --- a/etc/completion/fish/guix.fish +++ b/etc/completion/fish/guix.fish @@ -1,6 +1,6 @@ # # GNU Guix --- Functional package management for GNU -# Copyright © 2017, 2018 Nils Gillmann +# Copyright © 2017, 2018 ng0 # # This file is part of GNU Guix. # diff --git a/gnu/packages/accessibility.scm b/gnu/packages/accessibility.scm index 35c8c8f19b..431e5924c9 100644 --- a/gnu/packages/accessibility.scm +++ b/gnu/packages/accessibility.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2017 Stefan Reichör ;;; Copyright © 2018 Tobias Geerinckx-Rice ;;; Copyright © 2019 Andrew Miloradovsky diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm index f433d3f40d..9ed2e32324 100644 --- a/gnu/packages/admin.scm +++ b/gnu/packages/admin.scm @@ -12,7 +12,7 @@ ;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner ;;; Copyright © 2016 Peter Feigl ;;; Copyright © 2016 John J. Foerch -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2016, 2017, 2018, 2019 Tobias Geerinckx-Rice ;;; Copyright © 2016 John Darrington ;;; Copyright © 2017 Ben Sturmfels diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm index 03d41770c2..a38e77c996 100644 --- a/gnu/packages/audio.scm +++ b/gnu/packages/audio.scm @@ -6,7 +6,7 @@ ;;; Copyright © 2015, 2016 Mark H Weaver ;;; Copyright © 2016, 2017, 2018 Efraim Flashner ;;; Copyright © 2016, 2017 Alex Griffin -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2016 Lukas Gradl ;;; Copyright © 2016, 2017, 2018, 2019 Tobias Geerinckx-Rice ;;; Copyright © 2018 Oleg Pykhalov diff --git a/gnu/packages/autotools.scm b/gnu/packages/autotools.scm index 4edfb5725e..ceb70dfee7 100644 --- a/gnu/packages/autotools.scm +++ b/gnu/packages/autotools.scm @@ -5,7 +5,7 @@ ;;; Copyright © 2014 Manolis Fragkiskos Ragkousis ;;; Copyright © 2015, 2017, 2018 Mark H Weaver ;;; Copyright © 2016 David Thompson -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2017, 2019 Efraim Flashner ;;; Copyright © 2018 Tobias Geerinckx-Rice ;;; Copyright © 2018 Ricardo Wurmus diff --git a/gnu/packages/cdrom.scm b/gnu/packages/cdrom.scm index cdbe25fe44..50bf3abcb9 100644 --- a/gnu/packages/cdrom.scm +++ b/gnu/packages/cdrom.scm @@ -9,7 +9,7 @@ ;;; Copyright © 2017 John Darrington ;;; Copyright © 2017 Thomas Danckaert ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2018 Oleg Pykhalov ;;; Copyright © 2018, 2019 Ricardo Wurmus ;;; Copyright © 2019 Eric Bavier diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm index 649d6d2f13..4229578f86 100644 --- a/gnu/packages/check.scm +++ b/gnu/packages/check.scm @@ -23,7 +23,7 @@ ;;; Copyright © 2017 Frederick M. Muriithi ;;; Copyright © 2017 Mathieu Othacehe ;;; Copyright © 2017, 2019 Kei Kebreau -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2015, 2017, 2018 Ricardo Wurmus ;;; Copyright © 2016, 2017, 2018 Marius Bakke ;;; Copyright © 2017, 2018 Ludovic Courtès diff --git a/gnu/packages/cinnamon.scm b/gnu/packages/cinnamon.scm index 7cac863f92..72403e1b11 100644 --- a/gnu/packages/cinnamon.scm +++ b/gnu/packages/cinnamon.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2018 Tobias Geerinckx-Rice ;;; ;;; This file is part of GNU Guix. diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm index 23a8f997f0..e3c23126b0 100644 --- a/gnu/packages/compression.scm +++ b/gnu/packages/compression.scm @@ -14,7 +14,7 @@ ;;; Copyright © 2016 David Craven ;;; Copyright © 2016, 2019 Kei Kebreau ;;; Copyright © 2016, 2018 Marius Bakke -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2017 Manolis Fragkiskos Ragkousis ;;; Copyright © 2017 Theodoros Foradis ;;; Copyright © 2017 Stefan Reichör diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm index e0d4f27874..d6f8e22eab 100644 --- a/gnu/packages/crypto.scm +++ b/gnu/packages/crypto.scm @@ -4,7 +4,7 @@ ;;; Copyright © 2016, 2017, 2018, 2019 Leo Famulari ;;; Copyright © 2016 Lukas Gradl ;;; Copyright © 2016, 2017, 2018 Tobias Geerinckx-Rice -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2016, 2017, 2019 Eric Bavier ;;; Copyright © 2017 Pierre Langlois ;;; Copyright © 2018 Efraim Flashner diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm index 921304ef2a..912b8d77c5 100644 --- a/gnu/packages/databases.scm +++ b/gnu/packages/databases.scm @@ -11,7 +11,7 @@ ;;; Copyright © 2016 Hartmut Goebel ;;; Copyright © 2016 Christopher Allan Webber ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Efraim Flashner -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2016, 2017, 2018 Roel Janssen ;;; Copyright © 2016 David Craven ;;; Copyright © 2016 Jan Nieuwenhuizen diff --git a/gnu/packages/django.scm b/gnu/packages/django.scm index 734755c609..8fd29d533a 100644 --- a/gnu/packages/django.scm +++ b/gnu/packages/django.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2016 Hartmut Goebel ;;; Copyright © 2016 Efraim Flashner -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice ;;; Copyright © 2017 Ricardo Wurmus ;;; Copyright © 2018 Vijayalakshmi Vedantham diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm index f1bcbc1b4d..f8b60e34c5 100644 --- a/gnu/packages/dns.scm +++ b/gnu/packages/dns.scm @@ -4,7 +4,7 @@ ;;; Copyright © 2016 Ricardo Wurmus ;;; Copyright © 2016, 2017 Efraim Flashner ;;; Copyright © 2016 John Darrington -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2016, 2017, 2018, 2019 Tobias Geerinckx-Rice ;;; Copyright © 2016 Marius Bakke ;;; Copyright © 2017 Vasile Dumitrascu diff --git a/gnu/packages/elixir.scm b/gnu/packages/elixir.scm index e154a2b2c1..29c7ee966f 100644 --- a/gnu/packages/elixir.scm +++ b/gnu/packages/elixir.scm @@ -4,7 +4,7 @@ ;;; Copyright © 2016 Ricardo Wurmus ;;; Copyright © 2017 nee ;;; Copyright © 2018 Tobias Geerinckx-Rice -;;; Copyright © 2018 Nils Gillmann +;;; Copyright © 2018 ng0 ;;; ;;; This file is part of GNU Guix. ;;; diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 8d5ee6c5fb..28b24d467d 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -12,7 +12,7 @@ ;;; Copyright © 2016 David Thompson ;;; Copyright © 2016 Matthew Jordan ;;; Copyright © 2016, 2017 Roel Janssen -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2016 Alex Griffin ;;; Copyright © 2016, 2017, 2018, 2019 Nicolas Goaziou ;;; Copyright © 2016, 2017, 2018 Alex Vong diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm index 74005972db..e00931c504 100644 --- a/gnu/packages/emacs.scm +++ b/gnu/packages/emacs.scm @@ -7,7 +7,7 @@ ;;; Copyright © 2016, 2018 Arun Isaac ;;; Copyright © 2016 Federico Beffa ;;; Copyright © 2016 David Thompson -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2017 Marius Bakke ;;; Copyright © 2017 Maxim Cournoyer ;;; Copyright © 2017 Alex Vong diff --git a/gnu/packages/enlightenment.scm b/gnu/packages/enlightenment.scm index c3aa469776..d2853e62d6 100644 --- a/gnu/packages/enlightenment.scm +++ b/gnu/packages/enlightenment.scm @@ -2,7 +2,7 @@ ;;; Copyright © 2015 Tomáš Čech ;;; Copyright © 2015 Daniel Pimentel ;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2018 Tobias Geerinckx-Rice ;;; Copyright © 2018 Timo Eisenmann ;;; diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 45206f71a0..9c38b53581 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -3,7 +3,7 @@ ;;; Copyright © 2016, 2017 Leo Famulari ;;; Copyright © 2016, 2017 Pjotr Prins ;;; Copyright © 2018 Tobias Geerinckx-Rice -;;; Copyright © 2018 Nils Gillmann +;;; Copyright © 2018 ng0 ;;; ;;; This file is part of GNU Guix. ;;; diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm index 62f076a772..6988443e94 100644 --- a/gnu/packages/fonts.scm +++ b/gnu/packages/fonts.scm @@ -7,7 +7,7 @@ ;;; Copyright © 2015 Eric Dvorsak ;;; Copyright © 2015, 2017 Ricardo Wurmus ;;; Copyright © 2015, 2016 Leo Famulari -;;; Copyright © 2016, 2017, 2018 Nils Gillmann +;;; Copyright © 2016, 2017, 2018 ng0 ;;; Copyright © 2016 Jookia <166291@gmail.com> ;;; Copyright © 2016 Eric Bavier ;;; Copyright © 2016 Dmitry Nikolaev diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm index 274efe5fd8..8f8a300644 100644 --- a/gnu/packages/fontutils.scm +++ b/gnu/packages/fontutils.scm @@ -5,7 +5,7 @@ ;;; Copyright © 2016, 2017 Efraim Flashner ;;; Copyright © 2017 Rene Saavedra ;;; Copyright © 2017 Leo Famulari -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice ;;; Copyright © 2018 Ricardo Wurmus ;;; Copyright © 2018 Ludovic Courtès diff --git a/gnu/packages/forth.scm b/gnu/packages/forth.scm index 5efc668b78..6902a4a4a3 100644 --- a/gnu/packages/forth.scm +++ b/gnu/packages/forth.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2016 Sou Bunnbu ;;; ;;; This file is part of GNU Guix. diff --git a/gnu/packages/fvwm.scm b/gnu/packages/fvwm.scm index 386edba591..ad0720a60c 100644 --- a/gnu/packages/fvwm.scm +++ b/gnu/packages/fvwm.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 Sou Bunnbu ;;; Copyright © 2016 Efraim Flashner -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; ;;; This file is part of GNU Guix. ;;; diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index 74fc452e32..b9deda7bf9 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -15,7 +15,7 @@ ;;; Copyright © 2015, 2016, 2017 Alex Kost ;;; Copyright © 2015 Paul van der Walt ;;; Copyright © 2016, 2017 Rodger Fox -;;; Copyright © 2016, 2017, 2018 Nils Gillmann +;;; Copyright © 2016, 2017, 2018 ng0 ;;; Copyright © 2016 Albin Söderqvist ;;; Copyright © 2016, 2017, 2018 Kei Kebreau ;;; Copyright © 2016 Alex Griffin diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm index 08ba3c8b8c..743932fd07 100644 --- a/gnu/packages/gl.scm +++ b/gnu/packages/gl.scm @@ -3,7 +3,7 @@ ;;; Copyright © 2013 Joshua Grant ;;; Copyright © 2014, 2016 David Thompson ;;; Copyright © 2014, 2015, 2016, 2017 Mark H Weaver -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2016, 2017, 2018 Ricardo Wurmus ;;; Copyright © 2016 David Thompson ;;; Copyright © 2017, 2018 Efraim Flashner diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm index f407f567b9..060379aba9 100644 --- a/gnu/packages/gnome.scm +++ b/gnu/packages/gnome.scm @@ -19,7 +19,7 @@ ;;; Copyright © 2016 Roel Janssen ;;; Copyright © 2016, 2018 Leo Famulari ;;; Copyright © 2016 Alex Griffin -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2016 David Craven ;;; Copyright © 2016, 2017, 2018, 2019 Tobias Geerinckx-Rice ;;; Copyright © 2017 Thomas Danckaert diff --git a/gnu/packages/gnunet.scm b/gnu/packages/gnunet.scm index 461180161e..93c905406f 100644 --- a/gnu/packages/gnunet.scm +++ b/gnu/packages/gnunet.scm @@ -5,7 +5,7 @@ ;;; Copyright © 2015, 2017, 2019 Efraim Flashner ;;; Copyright © 2016 Ricardo Wurmus ;;; Copyright © 2016 Mark H Weaver -;;; Copyright © 2016, 2017, 2018 Nils Gillmann +;;; Copyright © 2016, 2017, 2018 ng0 ;;; Copyright © 2016, 2017, 2018 Tobias Geerinckx-Rice ;;; Copyright © 2018 Alex Vong ;;; diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm index c5c99bfeb6..fcec2f065d 100644 --- a/gnu/packages/gnupg.scm +++ b/gnu/packages/gnupg.scm @@ -7,7 +7,7 @@ ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Efraim Flashner ;;; Copyright © 2015, 2016, 2017, 2019 Ricardo Wurmus ;;; Copyright © 2016 Christopher Allan Webber -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2016 Christopher Baines ;;; Copyright © 2016 Mike Gerwitz ;;; Copyright © 2016 Troy Sankey diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm index e11c0eb576..785d5c1342 100644 --- a/gnu/packages/gnuzilla.scm +++ b/gnu/packages/gnuzilla.scm @@ -6,7 +6,7 @@ ;;; Copyright © 2016, 2017, 2018 Efraim Flashner ;;; Copyright © 2016 Alex Griffin ;;; Copyright © 2017 Clément Lassieur -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice ;;; Copyright © 2018 Ricardo Wurmus ;;; Copyright © 2019 Ivan Petkov diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm index fb5c178d53..1ac90216ef 100644 --- a/gnu/packages/gtk.scm +++ b/gnu/packages/gtk.scm @@ -13,7 +13,7 @@ ;;; Copyright © 2016 Fabian Harfert ;;; Copyright © 2016 Kei Kebreau ;;; Copyright © 2016 Patrick Hetu -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2017 Roel Janssen ;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice ;;; Copyright © 2017 Marius Bakke diff --git a/gnu/packages/guile-wm.scm b/gnu/packages/guile-wm.scm index 3755282403..7b1731171a 100644 --- a/gnu/packages/guile-wm.scm +++ b/gnu/packages/guile-wm.scm @@ -2,7 +2,7 @@ ;;; Copyright © 2013, 2014 Ludovic Courtès ;;; Copyright © 2016 Alex ter Weele ;;; Copyright © 2017 Ricardo Wurmus -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; ;;; This file is part of GNU Guix. ;;; diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm index a64a54323a..d4f019c814 100644 --- a/gnu/packages/guile-xyz.scm +++ b/gnu/packages/guile-xyz.scm @@ -14,7 +14,7 @@ ;;; Copyright © 2017 David Thompson ;;; Copyright © 2017, 2018 Mathieu Othacehe ;;; Copyright © 2017 Theodoros Foradis -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice ;;; Copyright © 2018 Maxim Cournoyer ;;; Copyright © 2018 Arun Isaac diff --git a/gnu/packages/haskell-check.scm b/gnu/packages/haskell-check.scm index 0d4501df86..19eb40eaa4 100644 --- a/gnu/packages/haskell-check.scm +++ b/gnu/packages/haskell-check.scm @@ -3,7 +3,7 @@ ;;; Copyright © 2015 Eric Bavier ;;; Copyright © 2015 Federico Beffa ;;; Copyright © 2015, 2016, 2017, 2018 Ricardo Wurmus -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2016 David Craven ;;; Copyright © 2017 Danny Milosavljevic ;;; Copyright © 2017 rsiddharth diff --git a/gnu/packages/haskell-crypto.scm b/gnu/packages/haskell-crypto.scm index b5bbd147cf..8f216a379d 100644 --- a/gnu/packages/haskell-crypto.scm +++ b/gnu/packages/haskell-crypto.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 Paul van der Walt ;;; Copyright © 2015, 2017, 2018, 2019 Ricardo Wurmus -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2017 rsiddharth ;;; Copyright © 2017, 2019 Tobias Geerinckx-Rice ;;; diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm index 2b8525d923..2a5ba2a706 100644 --- a/gnu/packages/haskell.scm +++ b/gnu/packages/haskell.scm @@ -4,7 +4,7 @@ ;;; Copyright © 2015 Paul van der Walt ;;; Copyright © 2015 Eric Bavier ;;; Copyright © 2016, 2018, 2019 Ludovic Courtès -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2016 Efraim Flashner ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus ;;; Copyright © 2016, 2017 David Craven diff --git a/gnu/packages/image-viewers.scm b/gnu/packages/image-viewers.scm index d388562924..82b44a4900 100644 --- a/gnu/packages/image-viewers.scm +++ b/gnu/packages/image-viewers.scm @@ -4,7 +4,7 @@ ;;; Copyright © 2015, 2016 Alex Kost ;;; Copyright © 2016, 2017, 2018 Efraim Flashner ;;; Copyright © 2017 Alex Griffin -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2017 Mathieu Othacehe ;;; Copyright © 2017 nee ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm index 941b991695..b52b6025ae 100644 --- a/gnu/packages/image.scm +++ b/gnu/packages/image.scm @@ -13,7 +13,7 @@ ;;; Copyright © 2016 Eric Bavier ;;; Copyright © 2016, 2017 Arun Isaac ;;; Copyright © 2016, 2017 Kei Kebreau -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2017 Hartmut Goebel ;;; Copyright © 2017 Julien Lepiller ;;; Copyright © 2018 Joshua Sierles, Nextjournal diff --git a/gnu/packages/irc.scm b/gnu/packages/irc.scm index e6f23d14d7..d3b3a51294 100644 --- a/gnu/packages/irc.scm +++ b/gnu/packages/irc.scm @@ -3,7 +3,7 @@ ;;; Copyright © 2014 Kevin Lemonnier ;;; Copyright © 2015, 2017 Ludovic Courtès ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Efraim Flashner -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2017 Marius Bakke ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice ;;; diff --git a/gnu/packages/language.scm b/gnu/packages/language.scm index 110f07a476..46b60b7055 100644 --- a/gnu/packages/language.scm +++ b/gnu/packages/language.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015, 2016 Eric Bavier ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice -;;; Copyright © 2018 Nils Gillmann +;;; Copyright © 2018 ng0 ;;; ;;; This file is part of GNU Guix. ;;; diff --git a/gnu/packages/libcanberra.scm b/gnu/packages/libcanberra.scm index 0032d9a85f..121ba11f89 100644 --- a/gnu/packages/libcanberra.scm +++ b/gnu/packages/libcanberra.scm @@ -2,7 +2,7 @@ ;;; Copyright © 2013 Andreas Enge ;;; Copyright © 2014, 2015, 2019 Ludovic Courtès ;;; Copyright © 2016 Fabian Harfert -;;; Copyright © 2017, 2018 Nils Gillmann +;;; Copyright © 2017, 2018 ng0 ;;; ;;; This file is part of GNU Guix. ;;; diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index e9d8ea45c1..34af81b469 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -18,7 +18,7 @@ ;;; Copyright © 2016, 2017, 2018 Marius Bakke ;;; Copyright © 2016, 2018 Rene Saavedra ;;; Copyright © 2016 Carlos Sánchez de La Lama -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2017, 2018 Leo Famulari ;;; Copyright © 2017 José Miguel Sánchez García ;;; Copyright © 2017 Gábor Boskovits diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm index 3d43b7c509..87dcf36372 100644 --- a/gnu/packages/lisp.scm +++ b/gnu/packages/lisp.scm @@ -3,7 +3,7 @@ ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer ;;; Copyright © 2015 Mark H Weaver ;;; Copyright © 2016 Federico Beffa -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2016, 2017 Andy Patterson ;;; Copyright © 2017, 2019 Ricardo Wurmus ;;; Copyright © 2017, 2018 Efraim Flashner diff --git a/gnu/packages/lolcode.scm b/gnu/packages/lolcode.scm index f7e2da380c..e55a36c509 100644 --- a/gnu/packages/lolcode.scm +++ b/gnu/packages/lolcode.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; ;;; This file is part of GNU Guix. ;;; diff --git a/gnu/packages/lxde.scm b/gnu/packages/lxde.scm index ea099b0f3b..d91e62359b 100644 --- a/gnu/packages/lxde.scm +++ b/gnu/packages/lxde.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 Mathieu Lirzin ;;; Copyright © 2016 Efraim Flashner -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2017 Mathieu Othacehe ;;; Copyright © 2017 Brendan Tildesley ;;; Copyright © 2018 Tobias Geerinckx-Rice diff --git a/gnu/packages/lxqt.scm b/gnu/packages/lxqt.scm index 4c00b2a611..d91efe715d 100644 --- a/gnu/packages/lxqt.scm +++ b/gnu/packages/lxqt.scm @@ -3,7 +3,7 @@ ;;; Copyright © 2015 Sou Bunnbu ;;; Copyright © 2016 Mark H Weaver ;;; Copyright © 2016 Efraim Flashner -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice ;;; Copyright © 2018, 2019 Meiyo Peng ;;; Copyright © 2018 Ricardo Wurmus diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index 89c183dbd7..bb44ea1a53 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -15,7 +15,7 @@ ;;; Copyright © 2016 Lukas Gradl ;;; Copyright © 2016 Alex Kost ;;; Copyright © 2016, 2017 Troy Sankey -;;; Copyright © 2016, 2017, 2018 Nils Gillmann +;;; Copyright © 2016, 2017, 2018 ng0 ;;; Copyright © 2016 Clément Lassieur ;;; Copyright © 2016, 2017, 2018, 2019 Arun Isaac ;;; Copyright © 2016 John Darrington diff --git a/gnu/packages/markup.scm b/gnu/packages/markup.scm index 67f2bf2881..2b1e2ef63c 100644 --- a/gnu/packages/markup.scm +++ b/gnu/packages/markup.scm @@ -2,7 +2,7 @@ ;;; Copyright © 2015 Mathieu Lirzin ;;; Copyright © 2015 David Thompson ;;; Copyright © 2016 Efraim Flashner -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice ;;; ;;; This file is part of GNU Guix. diff --git a/gnu/packages/mate.scm b/gnu/packages/mate.scm index ef94491622..16e9148506 100644 --- a/gnu/packages/mate.scm +++ b/gnu/packages/mate.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2016 Fabian Harfert ;;; Copyright © 2016, 2017 Efraim Flashner -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2018 Tobias Geerinckx-Rice ;;; ;;; This file is part of GNU Guix. diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm index 33c1416c75..af2c141ee5 100644 --- a/gnu/packages/maths.scm +++ b/gnu/packages/maths.scm @@ -16,7 +16,7 @@ ;;; Copyright © 2016 Leo Famulari ;;; Copyright © 2016, 2017 Thomas Danckaert ;;; Copyright © 2017, 2018 Paul Garlick -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2017 Ben Woodcroft ;;; Copyright © 2017 Theodoros Foradis ;;; Copyright © 2017, 2019 Arun Isaac diff --git a/gnu/packages/mc.scm b/gnu/packages/mc.scm index ecac5412e4..3d6185ca78 100644 --- a/gnu/packages/mc.scm +++ b/gnu/packages/mc.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 Eric Bavier ;;; Copyright © 2016 Efraim Flashner -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice ;;; ;;; This file is part of GNU Guix. diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm index 73519d7702..c27c465957 100644 --- a/gnu/packages/messaging.scm +++ b/gnu/packages/messaging.scm @@ -5,7 +5,7 @@ ;;; Copyright © 2015 Andreas Enge ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus ;;; Copyright © 2015, 2018 Efraim Flashner -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2016 Andy Patterson ;;; Copyright © 2016, 2017, 2018, 2019 Clément Lassieur ;;; Copyright © 2017 Mekeor Melire diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm index 54c7798472..c98f050caf 100644 --- a/gnu/packages/music.scm +++ b/gnu/packages/music.scm @@ -8,7 +8,7 @@ ;;; Copyright © 2016, 2017 Kei Kebreau ;;; Copyright © 2016 John J. Foerch ;;; Copyright © 2016 Alex Griffin -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2017 Rodger Fox ;;; Copyright © 2017, 2018, 2019 Nicolas Goaziou ;;; Copyright © 2017, 2018 Pierre Langlois diff --git a/gnu/packages/ncurses.scm b/gnu/packages/ncurses.scm index ae3fb887e8..9b5498688b 100644 --- a/gnu/packages/ncurses.scm +++ b/gnu/packages/ncurses.scm @@ -2,7 +2,7 @@ ;;; Copyright © 2012, 2013, 2014, 2015, 2017, 2018 Ludovic Courtès ;;; Copyright © 2014, 2016 Mark H Weaver ;;; Copyright © 2015, 2017 Leo Famulari -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2016 Efraim Flashner ;;; Copyright © 2016 Jan Nieuwenhuizen ;;; Copyright © 2017 Marius Bakke diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm index eeabc3d93d..ecfd373365 100644 --- a/gnu/packages/networking.scm +++ b/gnu/packages/networking.scm @@ -8,7 +8,7 @@ ;;; Copyright © 2016 John Darrington ;;; Copyright © 2016, 2017, 2018, 2019 Nicolas Goaziou ;;; Copyright © 2016 Eric Bavier -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2016, 2017, 2018 Arun Isaac ;;; Copyright © 2016 Benz Schenk ;;; Copyright © 2016, 2017 Pjotr Prins diff --git a/gnu/packages/nickle.scm b/gnu/packages/nickle.scm index c8179419bb..9cc38867b6 100644 --- a/gnu/packages/nickle.scm +++ b/gnu/packages/nickle.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2018 Tobias Geerinckx-Rice ;;; ;;; This file is part of GNU Guix. diff --git a/gnu/packages/openbox.scm b/gnu/packages/openbox.scm index 1643b7502b..ceca6e53e0 100644 --- a/gnu/packages/openbox.scm +++ b/gnu/packages/openbox.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 Julien Lepiller ;;; Copyright © 2016 Efraim Flashner -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; ;;; This file is part of GNU Guix. ;;; diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm index 29f2381e6d..ff26bed64f 100644 --- a/gnu/packages/pdf.scm +++ b/gnu/packages/pdf.scm @@ -4,7 +4,7 @@ ;;; Copyright © 2014, 2015, 2016, 2018, 2019 Ricardo Wurmus ;;; Copyright © 2015 Paul van der Walt ;;; Copyright © 2016 Roel Janssen -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2016, 2017, 2018 Efraim Flashner ;;; Copyright © 2016, 2017 Marius Bakke ;;; Copyright © 2016, 2017 Ludovic Courtès diff --git a/gnu/packages/perl-check.scm b/gnu/packages/perl-check.scm index 3b9640583a..aae83e5771 100644 --- a/gnu/packages/perl-check.scm +++ b/gnu/packages/perl-check.scm @@ -3,7 +3,7 @@ ;;; Copyright © 2016 Danny Milosavljevic ;;; Copyright © 2016 Ben Woodcroft ;;; Copyright © 2016 Ricardo Wurmus -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2016, 2017, 2019 Efraim Flashner ;;; Copyright © 2016, 2017 Alex Sassmannshausen ;;; Copyright © 2016, 2017 Marius Bakke diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm index 5b05b772dc..0075bbdf2e 100644 --- a/gnu/packages/perl.scm +++ b/gnu/packages/perl.scm @@ -7,7 +7,7 @@ ;;; Copyright © 2016, 2018 Mark H Weaver ;;; Copyright © 2016 Jochem Raat ;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2016 Alex Sassmannshausen ;;; Copyright © 2016, 2018 Roel Janssen ;;; Copyright © 2016 Ben Woodcroft diff --git a/gnu/packages/python-compression.scm b/gnu/packages/python-compression.scm index e13227b616..88f62d1934 100644 --- a/gnu/packages/python-compression.scm +++ b/gnu/packages/python-compression.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice ;;; Copyright © 2017 Ricardo Wurmus -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2017 Julien Lepiller ;;; Copyright © 2018, 2019 Efraim Flashner ;;; diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm index 688c8c4378..08f1e4d399 100644 --- a/gnu/packages/python-crypto.scm +++ b/gnu/packages/python-crypto.scm @@ -9,7 +9,7 @@ ;;; Copyright © 2014, 2017 Eric Bavier ;;; Copyright © 2015, 2016 David Thompson ;;; Copyright © 2016, 2017, 2018, 2019 Tobias Geerinckx-Rice -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2014, 2015 Mark H Weaver ;;; Copyright © 2015, 2016, 2017, 2019 Ricardo Wurmus ;;; Copyright © 2016 Danny Milosavljevic diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm index 32d769c3ed..ec068bdf0b 100644 --- a/gnu/packages/python-web.scm +++ b/gnu/packages/python-web.scm @@ -8,7 +8,7 @@ ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus ;;; Copyright © 2017 Roel Janssen ;;; Copyright © 2016, 2017 Julien Lepiller -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2014, 2017 Eric Bavier ;;; Copyright © 2014, 2015 Mark H Weaver ;;; Copyright © 2015 Cyril Roelandt diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm index ed54f54593..f9e87fb9c7 100644 --- a/gnu/packages/python-xyz.scm +++ b/gnu/packages/python-xyz.scm @@ -23,7 +23,7 @@ ;;; Copyright © 2016 Daniel Pimentel ;;; Copyright © 2016 Sou Bunnbu ;;; Copyright © 2016, 2017 Troy Sankey -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2016 Dylan Jeffers ;;; Copyright © 2016 David Craven ;;; Copyright © 2016, 2017, 2018 Marius Bakke diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index 25f2ffa73c..57ced499cb 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -23,7 +23,7 @@ ;;; Copyright © 2016 Daniel Pimentel ;;; Copyright © 2016 Sou Bunnbu ;;; Copyright © 2016, 2017 Troy Sankey -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2016 Dylan Jeffers ;;; Copyright © 2016 David Craven ;;; Copyright © 2016, 2017, 2018 Marius Bakke diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm index 8179911539..6e567792f8 100644 --- a/gnu/packages/qt.scm +++ b/gnu/packages/qt.scm @@ -3,7 +3,7 @@ ;;; Copyright © 2015 Sou Bunnbu ;;; Copyright © 2015, 2018, 2019 Ludovic Courtès ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Efraim Flashner -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2016 Thomas Danckaert ;;; Copyright © 2017, 2018, 2019 Ricardo Wurmus ;;; Copyright © 2017 Quiliro diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm index 818553848d..7a2b191063 100644 --- a/gnu/packages/ruby.scm +++ b/gnu/packages/ruby.scm @@ -5,7 +5,7 @@ ;;; Copyright © 2014, 2015 David Thompson ;;; Copyright © 2015, 2019 Ricardo Wurmus ;;; Copyright © 2015, 2016, 2017 Ben Woodcroft -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2017 Marius Bakke ;;; Copyright © 2017, 2018 Efraim Flashner ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm index 048a91052d..074d9b0655 100644 --- a/gnu/packages/rust.scm +++ b/gnu/packages/rust.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2016 David Craven ;;; Copyright © 2016 Eric Le Bihan -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2017 Ben Woodcroft ;;; Copyright © 2017, 2018 Nikolai Merinov ;;; Copyright © 2017 Efraim Flashner diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm index 93a1a3e152..9dbb3713ee 100644 --- a/gnu/packages/scheme.scm +++ b/gnu/packages/scheme.scm @@ -5,7 +5,7 @@ ;;; Copyright © 2016 Ricardo Wurmus ;;; Copyright © 2016, 2017 Efraim Flashner ;;; Copyright © 2016 Jan Nieuwenhuizen -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2017 John Darrington ;;; Copyright © 2017 Clément Lassieur ;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice diff --git a/gnu/packages/serialization.scm b/gnu/packages/serialization.scm index 876318869c..05e0d1d833 100644 --- a/gnu/packages/serialization.scm +++ b/gnu/packages/serialization.scm @@ -7,7 +7,7 @@ ;;; Copyright © 2017 Corentin Bocquillon ;;; Copyright © 2017 Gregor Giesen ;;; Copyright © 2017 Frederick M. Muriithi -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice ;;; Copyright © 2018 Joshua Sierles, Nextjournal ;;; diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm index 4c832c0702..2c6642f727 100644 --- a/gnu/packages/shells.scm +++ b/gnu/packages/shells.scm @@ -6,7 +6,7 @@ ;;; Copyright © 2016, 2017, 2018 Tobias Geerinckx-Rice ;;; Copyright © 2016 Stefan Reichör ;;; Copyright © 2017, 2018 Ricardo Wurmus -;;; Copyright © 2017, 2018 Nils Gillmann +;;; Copyright © 2017, 2018 ng0 ;;; Copyright © 2017, 2018 Leo Famulari ;;; Copyright © 2017 Arun Isaac ;;; Copyright © 2019 Meiyo Peng diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm index 91b89242f8..dc81736f06 100644 --- a/gnu/packages/ssh.scm +++ b/gnu/packages/ssh.scm @@ -9,7 +9,7 @@ ;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice ;;; Copyright © 2017 Stefan Reichör ;;; Copyright © 2017 Ricardo Wurmus -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2018 Manuel Graf ;;; Copyright © 2019 Gábor Boskovits ;;; diff --git a/gnu/packages/suckless.scm b/gnu/packages/suckless.scm index d15fdbaddd..c1357bd282 100644 --- a/gnu/packages/suckless.scm +++ b/gnu/packages/suckless.scm @@ -2,7 +2,7 @@ ;;; Copyright © 2013 Cyril Roelandt ;;; Copyright © 2015 Amirouche Boubekki ;;; Copyright © 2016 Al McElrath -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2015 Dmitry Bogatov ;;; Copyright © 2015 Leo Famulari ;;; Copyright © 2016 Eric Bavier diff --git a/gnu/packages/tbb.scm b/gnu/packages/tbb.scm index ee21a61895..788eabfdfa 100644 --- a/gnu/packages/tbb.scm +++ b/gnu/packages/tbb.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015, 2016 Ricardo Wurmus -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; ;;; This file is part of GNU Guix. ;;; diff --git a/gnu/packages/telephony.scm b/gnu/packages/telephony.scm index 63709935c3..559fb3d63f 100644 --- a/gnu/packages/telephony.scm +++ b/gnu/packages/telephony.scm @@ -5,7 +5,7 @@ ;;; Copyright © 2015, 2016 Efraim Flashner ;;; Copyright © 2016 Lukas Gradl ;;; Copyright © 2016 Francesco Frassinelli -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2017, 2018 Ricardo Wurmus ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice ;;; Copyright © 2018 Jovany Leandro G.C diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm index b1afd63b32..b96f8235d4 100644 --- a/gnu/packages/text-editors.scm +++ b/gnu/packages/text-editors.scm @@ -3,7 +3,7 @@ ;;; Copyright © 2016 Carlo Zancanaro ;;; Copyright © 2017, 2018 Eric Bavier ;;; Copyright © 2017 Feng Shu -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2014 Taylan Ulrich Bayırlı/Kammer ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice ;;; Copyright © 2019 Efraim Flashner diff --git a/gnu/packages/textutils.scm b/gnu/packages/textutils.scm index 78050f3925..7436fdeb97 100644 --- a/gnu/packages/textutils.scm +++ b/gnu/packages/textutils.scm @@ -6,7 +6,7 @@ ;;; Copyright © 2016 Jelle Licht ;;; Copyright © 2016 Alex Griffin ;;; Copyright © 2016, 2018 Efraim Flashner -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2016 Marius Bakke ;;; Copyright © 2017 Eric Bavier ;;; Copyright © 2017 Rene Saavedra diff --git a/gnu/packages/time.scm b/gnu/packages/time.scm index 948d2b995c..747e4cf080 100644 --- a/gnu/packages/time.scm +++ b/gnu/packages/time.scm @@ -11,7 +11,7 @@ ;;; Copyright © 2016 Marius Bakke ;;; Copyright © 2016, 2017, 2018 Tobias Geerinckx-Rice ;;; Copyright © 2017 Ben Woodcroft -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2017 Julien Lepiller ;;; Copyright © 2018 Alex Vong ;;; Copyright © 2019 Kyle Meyer diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm index bdfbc003d3..6ecb5673e6 100644 --- a/gnu/packages/tls.scm +++ b/gnu/packages/tls.scm @@ -6,7 +6,7 @@ ;;; Copyright © 2015 David Thompson ;;; Copyright © 2015, 2016, 2017, 2018 Leo Famulari ;;; Copyright © 2016, 2017, 2019 Efraim Flashner -;;; Copyright © 2016, 2017, 2018 Nils Gillmann +;;; Copyright © 2016, 2017, 2018 ng0 ;;; Copyright © 2016 Hartmut Goebel ;;; Copyright © 2017 Ricardo Wurmus ;;; Copyright © 2017, 2018 Marius Bakke diff --git a/gnu/packages/tor.scm b/gnu/packages/tor.scm index a0b16db3a7..a24923c045 100644 --- a/gnu/packages/tor.scm +++ b/gnu/packages/tor.scm @@ -2,7 +2,7 @@ ;;; Copyright © 2013, 2014, 2015 Ludovic Courtès ;;; Copyright © 2014, 2015 Mark H Weaver ;;; Copyright © 2016, 2017, 2018 Efraim Flashner -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice ;;; Copyright © 2017, 2018 Eric Bavier ;;; Copyright © 2017 Rutger Helling diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm index 674850e0ac..d750863f30 100644 --- a/gnu/packages/version-control.scm +++ b/gnu/packages/version-control.scm @@ -10,7 +10,7 @@ ;;; Copyright © 2015, 2018 Kyle Meyer ;;; Copyright © 2015, 2017, 2018 Ricardo Wurmus ;;; Copyright © 2016, 2017 Leo Famulari -;;; Copyright © 2016, 2017, 2018 Nils Gillmann +;;; Copyright © 2016, 2017, 2018 ng0 ;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice ;;; Copyright © 2017 Vasile Dumitrascu ;;; Copyright © 2017 Clément Lassieur diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm index c661c4ce87..f00be7092b 100644 --- a/gnu/packages/video.scm +++ b/gnu/packages/video.scm @@ -11,7 +11,7 @@ ;;; Copyright © 2016 Kei Kebreau ;;; Copyright © 2016 Dmitry Nikolaev ;;; Copyright © 2016 Andy Patterson -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2016, 2018, 2019 Eric Bavier ;;; Copyright © 2016 Jan Nieuwenhuizen ;;; Copyright © 2017 Feng Shu diff --git a/gnu/packages/vim.scm b/gnu/packages/vim.scm index 70e358656d..56deb12c3d 100644 --- a/gnu/packages/vim.scm +++ b/gnu/packages/vim.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013 Cyril Roelandt ;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2017 Ricardo Wurmus ;;; Copyright © 2017 Marius Bakke ;;; Copyright © 2018 Tobias Geerinckx-Rice diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm index 577be916bf..dfabb3aa65 100644 --- a/gnu/packages/web.scm +++ b/gnu/packages/web.scm @@ -14,7 +14,7 @@ ;;; Copyright © 2016 Rene Saavedra ;;; Copyright © 2016 Ben Woodcroft ;;; Copyright © 2016 Clément Lassieur -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2016, 2017, 2018, 2019 Arun Isaac ;;; Copyright © 2016, 2017, 2018, 2019 Tobias Geerinckx-Rice ;;; Copyright © 2016 Bake Timmons diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm index 539d6564c7..0a05ff4ae4 100644 --- a/gnu/packages/wm.scm +++ b/gnu/packages/wm.scm @@ -9,7 +9,7 @@ ;;; Copyright © 2016 Al McElrath ;;; Copyright © 2016 Carlo Zancanaro ;;; Copyright © 2016, 2017, 2018 Ludovic Courtès -;;; Copyright © 2016, 2017, 2018 Nils Gillmann +;;; Copyright © 2016, 2017, 2018 ng0 ;;; Copyright © 2016 doncatnip ;;; Copyright © 2016 Ivan Vilata i Balaguer ;;; Copyright © 2017 Mekeor Melire diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm index 6bfae74f18..cd3428a1fb 100644 --- a/gnu/packages/xdisorg.scm +++ b/gnu/packages/xdisorg.scm @@ -17,7 +17,7 @@ ;;; Copyright © 2016, 2017, 2019 Marius Bakke ;;; Copyright © 2016 Petter ;;; Copyright © 2017 Mekeor Melire -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice ;;; Copyright © 2017 Marek Benc ;;; Copyright © 2017 Mike Gerwitz diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm index b47fe5d301..f5618932ca 100644 --- a/gnu/packages/xfce.scm +++ b/gnu/packages/xfce.scm @@ -6,7 +6,7 @@ ;;; Copyright © 2016 Kei Kebreau ;;; Copyright © 2017, 2019 Ricardo Wurmus ;;; Copyright © 2017 Petter -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2018 Tobias Geerinckx-Rice ;;; ;;; This file is part of GNU Guix. diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm index d4ff1643e5..9f0959d78f 100644 --- a/gnu/packages/xml.scm +++ b/gnu/packages/xml.scm @@ -11,7 +11,7 @@ ;;; Copyright © 2016, 2017 Leo Famulari ;;; Copyright © 2016 Ben Woodcroft ;;; Copyright © 2016 Jan Nieuwenhuizen -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2016, 2017, 2018, 2019 Tobias Geerinckx-Rice ;;; Copyright © 2016, 2017, 2018 Marius Bakke ;;; Copyright © 2017 Adriano Peluso diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm index 3463ac85a7..f168b51f4c 100644 --- a/gnu/packages/xorg.scm +++ b/gnu/packages/xorg.scm @@ -7,7 +7,7 @@ ;;; Copyright © 2016 Mathieu Lirzin ;;; Copyright © 2015 Cyrill Schenkel ;;; Copyright © 2016, 2017 Efraim Flashner -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2016 Alex Kost ;;; Copyright © 2016 David Craven ;;; Copyright © 2016, 2017 John Darrington diff --git a/gnu/services/certbot.scm b/gnu/services/certbot.scm index 7548145c98..7565bc97ca 100644 --- a/gnu/services/certbot.scm +++ b/gnu/services/certbot.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2016 Sou Bunnbu ;;; Copyright © 2017, 2018 Clément Lassieur ;;; diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm index 8f8e177ca9..b912c208cc 100644 --- a/gnu/services/desktop.scm +++ b/gnu/services/desktop.scm @@ -4,7 +4,7 @@ ;;; Copyright © 2015 Mark H Weaver ;;; Copyright © 2016 Sou Bunnbu ;;; Copyright © 2017 Maxim Cournoyer -;;; Copyright © 2017 Nils Gillmann +;;; Copyright © 2017 ng0 ;;; Copyright © 2018 Efraim Flashner ;;; Copyright © 2018 Ricardo Wurmus ;;; Copyright © 2017, 2019 Christopher Baines diff --git a/gnu/services/version-control.scm b/gnu/services/version-control.scm index 13669925ab..e332b93096 100644 --- a/gnu/services/version-control.scm +++ b/gnu/services/version-control.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2016 Sou Bunnbu ;;; Copyright © 2017 Oleg Pykhalov ;;; Copyright © 2017 Clément Lassieur diff --git a/gnu/services/web.scm b/gnu/services/web.scm index d71fed20ed..b6ebe90774 100644 --- a/gnu/services/web.scm +++ b/gnu/services/web.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 David Thompson ;;; Copyright © 2015, 2016, 2017, 2018 Ludovic Courtès -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2016, 2017, 2018 Julien Lepiller ;;; Copyright © 2017 Christopher Baines ;;; Copyright © 2017 nee diff --git a/guix/import/hackage.scm b/guix/import/hackage.scm index 48db764b3c..2a51420d14 100644 --- a/guix/import/hackage.scm +++ b/guix/import/hackage.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 Federico Beffa ;;; Copyright © 2016 Eric Bavier -;;; Copyright © 2016 Nils Gillmann +;;; Copyright © 2016 ng0 ;;; Copyright © 2018 Ricardo Wurmus ;;; ;;; This file is part of GNU Guix. diff --git a/guix/licenses.scm b/guix/licenses.scm index d22c3fa36e..676e71acdb 100644 --- a/guix/licenses.scm +++ b/guix/licenses.scm @@ -8,7 +8,7 @@ ;;; Copyright © 2016 Leo Famulari ;;; Copyright © 2016 Fabian Harfert ;;; Copyright © 2016 Rene Saavedra -;;; Copyright © 2016, 2017 Nils Gillmann +;;; Copyright © 2016, 2017 ng0 ;;; Copyright © 2017 Clément Lassieur ;;; Copyright © 2017 Petter ;;; Copyright © 2017 Marius Bakke -- cgit v1.2.3 From ae031d453cc43f87481dcfb06051cb6a928f4c5c Mon Sep 17 00:00:00 2001 From: Arun Isaac Date: Wed, 13 Mar 2019 16:18:02 +0530 Subject: import: Add Launchpad updater. * guix/import/launchpad.scm: New file. * Makefile.am (MODULES): Register it. * doc/guix.texi (Invoking guix refresh): Mention the Launchpad updater. --- Makefile.am | 1 + doc/guix.texi | 4 +- guix/import/launchpad.scm | 124 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 guix/import/launchpad.scm (limited to 'doc') diff --git a/Makefile.am b/Makefile.am index 50839fcb27..9e49b079bf 100644 --- a/Makefile.am +++ b/Makefile.am @@ -202,6 +202,7 @@ MODULES = \ guix/import/gnu.scm \ guix/import/hackage.scm \ guix/import/json.scm \ + guix/import/launchpad.scm \ guix/import/opam.scm \ guix/import/print.scm \ guix/import/pypi.scm \ diff --git a/doc/guix.texi b/doc/guix.texi index 326607e7e9..bb344e1625 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -48,7 +48,7 @@ Copyright @copyright{} 2017 Maxim Cournoyer@* Copyright @copyright{} 2017, 2018 Tobias Geerinckx-Rice@* Copyright @copyright{} 2017 George Clemmer@* Copyright @copyright{} 2017 Andy Wingo@* -Copyright @copyright{} 2017, 2018 Arun Isaac@* +Copyright @copyright{} 2017, 2018, 2019 Arun Isaac@* Copyright @copyright{} 2017 nee@* Copyright @copyright{} 2018 Rutger Helling@* Copyright @copyright{} 2018 Oleg Pykhalov@* @@ -8841,6 +8841,8 @@ the updater for @uref{https://hackage.haskell.org, Hackage} packages. the updater for @uref{https://www.stackage.org, Stackage} packages. @item crate the updater for @uref{https://crates.io, Crates} packages. +@item launchpad +the updater for @uref{https://launchpad.net, Launchpad} packages. @end table For instance, the following command only checks for updates of Emacs diff --git a/guix/import/launchpad.scm b/guix/import/launchpad.scm new file mode 100644 index 0000000000..ffd5e9221e --- /dev/null +++ b/guix/import/launchpad.scm @@ -0,0 +1,124 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2019 Arun Isaac +;;; +;;; 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 (guix import launchpad) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:use-module (web uri) + #:use-module ((guix download) #:prefix download:) + #:use-module (guix import json) + #:use-module (guix packages) + #:use-module (guix upstream) + #:use-module (guix utils) + #:export (%launchpad-updater)) + +(define (find-extension url) + "Return the extension of the archive e.g. '.tar.gz' given a URL, or +false if none is recognized" + (find (lambda (x) (string-suffix? x url)) + (list ".tar.gz" ".tar.bz2" ".tar.xz" + ".zip" ".tar" ".tgz" ".tbz" ".love"))) + +(define (updated-launchpad-url old-package new-version) + ;; Return a url for the OLD-PACKAGE with NEW-VERSION. If no source url in + ;; the OLD-PACKAGE is a Launchpad url, then return false. + + (define (updated-url url) + (and (string-prefix? "https://launchpad.net/" url) + (let ((ext (or (find-extension url) "")) + (name (package-name old-package)) + (version (package-version old-package)) + (repo (launchpad-repository url))) + (cond + ((and + (>= (length (string-split version #\.)) 2) + (string=? (string-append "https://launchpad.net/" + repo "/" (version-major+minor version) + "/" version "/+download/" repo "-" version ext) + url)) + (string-append "https://launchpad.net/" + repo "/" (version-major+minor new-version) + "/" new-version "/+download/" repo "-" new-version ext)) + (#t #f))))) ; Some URLs are not recognised. + + (let ((source-uri (and=> (package-source old-package) origin-uri)) + (fetch-method (and=> (package-source old-package) origin-method))) + (cond + ((eq? fetch-method download:url-fetch) + (match source-uri + ((? string?) + (updated-url source-uri)) + ((source-uri ...) + (find updated-url source-uri)))) + (else #f)))) + +(define (launchpad-package? package) + "Return true if PACKAGE is a package from Launchpad, else false." + (->bool (updated-launchpad-url package "1.0.0"))) + +(define (launchpad-repository url) + "Return a string e.g. linuxdcpp of the name of the repository, from a string +URL of the form +'https://launchpad.net/linuxdcpp/1.1/1.1.0/+download/linuxdcpp-1.1.0.tar.bz2'" + (match (string-split (uri-path (string->uri url)) #\/) + ((_ repo . rest) repo))) + +(define (latest-released-version package-name) + "Return a string of the newest released version name given the PACKAGE-NAME, +for example, 'linuxdcpp'. Return #f if there is no releases." + (define (pre-release? x) + ;; Versions containing anything other than digit characters and "." (for + ;; example, "5.1.0-rc1") are assumed to be pre-releases. + (not (string-every (char-set-union (char-set #\.) + char-set:digit) + (hash-ref x "version")))) + + (hash-ref + (last (remove + pre-release? + (hash-ref (json-fetch + (string-append "https://api.launchpad.net/1.0/" + package-name "/releases")) + "entries"))) + "version")) + +(define (latest-release pkg) + "Return an for the latest release of PKG." + (define (origin-github-uri origin) + (match (origin-uri origin) + ((? string? url) url) ; surely a Launchpad URL + ((urls ...) + (find (cut string-contains <> "launchpad.net") urls)))) + + (let* ((source-uri (origin-github-uri (package-source pkg))) + (name (package-name pkg)) + (newest-version (latest-released-version name))) + (if newest-version + (upstream-source + (package name) + (version newest-version) + (urls (list (updated-launchpad-url pkg newest-version)))) + #f))) ; On Launchpad but no proper releases + +(define %launchpad-updater + (upstream-updater + (name 'launchpad) + (description "Updater for Launchpad packages") + (pred launchpad-package?) + (latest latest-release))) -- cgit v1.2.3 From c16423f143919916a5273761d7ed29bd49f14519 Mon Sep 17 00:00:00 2001 From: Ricardo Wurmus Date: Wed, 20 Mar 2019 19:43:07 +0100 Subject: services: Add nslcd-service-type. * gnu/services/authentication.scm (nslcd-service-type, nslcd-configuration, %nslcd-accounts): New variables. (uglify-field-name, value->string, serialize-field, serialize-list, ssl-option?, tls-reqcert-option?, deref-option?, comma-separated-list-of-strings?, serialize-ignore-users-option, log-option?, serialize-log-option, valid-map?, scope-option?, serialize-scope-option, map-entry?, list-of-map-entries?, filter-entry?, list-of-filter-entries?, serialize-filter-entry, serialize-list-of-filter-entries, serialize-map-entry, serialize-list-of-map-entries, nslcd-config-file, nslcd-etc-service, nslcd-shepherd-service, pam-ldap-pam-services, pam-ldap-pam-service, generate-nslcd-documentation): New procedures. * gnu/tests/ldap.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add it. * doc/guix.texi (LDAP Services): Document it. --- doc/guix.texi | 479 +++++++++++++++++++++++++++++++++++++ gnu/local.mk | 1 + gnu/services/authentication.scm | 511 +++++++++++++++++++++++++++++++++++++++- gnu/tests/ldap.scm | 160 +++++++++++++ 4 files changed, 1150 insertions(+), 1 deletion(-) create mode 100644 gnu/tests/ldap.scm (limited to 'doc') diff --git a/doc/guix.texi b/doc/guix.texi index bb344e1625..94d7a29bdf 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -11139,6 +11139,7 @@ declaration. * Telephony Services:: Telephony services. * Monitoring Services:: Monitoring services. * Kerberos Services:: Kerberos services. +* LDAP Services:: LDAP services. * Web Services:: Web servers. * Certificate Services:: TLS certificates via Let's Encrypt. * DNS Services:: DNS daemons. @@ -17685,6 +17686,484 @@ Local accounts with lower values will silently fail to authenticate. @end deftp +@node LDAP Services +@subsection LDAP Services +@cindex LDAP +@cindex nslcd, LDAP service + +The @code{(gnu services authentication)} module provides the +@code{nslcd-service-type}, which can be used to authenticate against an LDAP +server. In addition to configuring the service itself, you may want to add +@code{ldap} as a name service to the Name Service Switch. @xref{Name Service +Switch} for detailed information. + +Here is a simple operating system declaration with a default configuration of +the @code{nslcd-service-type} and a Name Service Switch configuration that +consults the @code{ldap} name service last: + +@example +(use-service-modules authentication) +(use-modules (gnu system nss)) +... +(operating-system + ... + (services + (cons* + (service nslcd-service-type) + (service dhcp-client-service-type) + %base-services)) + (name-service-switch + (let ((services (list (name-service (name "db")) + (name-service (name "files")) + (name-service (name "ldap"))))) + (name-service-switch + (inherit %mdns-host-lookup-nss) + (password services) + (shadow services) + (group services) + (netgroup services) + (gshadow services))))) +@end example + +@c %start of generated documentation for nslcd-configuration + +Available @code{nslcd-configuration} fields are: + +@deftypevr {@code{nslcd-configuration} parameter} package nss-pam-ldapd +The @code{nss-pam-ldapd} package to use. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-number threads +The number of threads to start that can handle requests and perform LDAP +queries. Each thread opens a separate connection to the LDAP server. +The default is to start 5 threads. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} string uid +This specifies the user id with which the daemon should be run. + +Defaults to @samp{"nslcd"}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} string gid +This specifies the group id with which the daemon should be run. + +Defaults to @samp{"nslcd"}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} log-option log +This option controls the way logging is done via a list containing +SCHEME and LEVEL. The SCHEME argument may either be the symbols "none" +or "syslog", or an absolute file name. The LEVEL argument is optional +and specifies the log level. The log level may be one of the following +symbols: "crit", "error", "warning", "notice", "info" or "debug". All +messages with the specified log level or higher are logged. + +Defaults to @samp{("/var/log/nslcd" info)}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} list uri +The list of LDAP server URIs. Normally, only the first server will be +used with the following servers as fall-back. + +Defaults to @samp{("ldap://localhost:389/")}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-string ldap-version +The version of the LDAP protocol to use. The default is to use the +maximum version supported by the LDAP library. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-string binddn +Specifies the distinguished name with which to bind to the directory +server for lookups. The default is to bind anonymously. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-string bindpw +Specifies the credentials with which to bind. This option is only +applicable when used with binddn. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-string rootpwmoddn +Specifies the distinguished name to use when the root user tries to +modify a user's password using the PAM module. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-string rootpwmodpw +Specifies the credentials with which to bind if the root user tries to +change a user's password. This option is only applicable when used with +rootpwmoddn + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-mech +Specifies the SASL mechanism to be used when performing SASL +authentication. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-realm +Specifies the SASL realm to be used when performing SASL authentication. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-authcid +Specifies the authentication identity to be used when performing SASL +authentication. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-authzid +Specifies the authorization identity to be used when performing SASL +authentication. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-boolean sasl-canonicalize? +Determines whether the LDAP server host name should be canonicalised. If +this is enabled the LDAP library will do a reverse host name lookup. By +default, it is left up to the LDAP library whether this check is +performed or not. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-string krb5-ccname +Set the name for the GSS-API Kerberos credentials cache. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} string base +The directory search base. + +Defaults to @samp{"dc=example,dc=com"}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} scope-option scope +Specifies the search scope (subtree, onelevel, base or children). The +default scope is subtree; base scope is almost never useful for name +service lookups; children scope is not supported on all servers. + +Defaults to @samp{(subtree)}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-deref-option deref +Specifies the policy for dereferencing aliases. The default policy is +to never dereference aliases. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-boolean referrals +Specifies whether automatic referral chasing should be enabled. The +default behaviour is to chase referrals. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} list-of-map-entries maps +This option allows for custom attributes to be looked up instead of the +default RFC 2307 attributes. It is a list of maps, each consisting of +the name of a map, the RFC 2307 attribute to match and the query +expression for the attribute as it is available in the directory. + +Defaults to @samp{()}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} list-of-filter-entries filters +A list of filters consisting of the name of a map to which the filter +applies and an LDAP search filter expression. + +Defaults to @samp{()}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-number bind-timelimit +Specifies the time limit in seconds to use when connecting to the +directory server. The default value is 10 seconds. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-number timelimit +Specifies the time limit (in seconds) to wait for a response from the +LDAP server. A value of zero, which is the default, is to wait +indefinitely for searches to be completed. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-number idle-timelimit +Specifies the period if inactivity (in seconds) after which the con‐ +nection to the LDAP server will be closed. The default is not to time +out connections. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-number reconnect-sleeptime +Specifies the number of seconds to sleep when connecting to all LDAP +servers fails. By default one second is waited between the first +failure and the first retry. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-number reconnect-retrytime +Specifies the time after which the LDAP server is considered to be +permanently unavailable. Once this time is reached retries will be done +only once per this time period. The default value is 10 seconds. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-ssl-option ssl +Specifies whether to use SSL/TLS or not (the default is not to). If +'start-tls is specified then StartTLS is used rather than raw LDAP over +SSL. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-tls-reqcert-option tls-reqcert +Specifies what checks to perform on a server-supplied certificate. The +meaning of the values is described in the ldap.conf(5) manual page. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cacertdir +Specifies the directory containing X.509 certificates for peer authen‐ +tication. This parameter is ignored when using GnuTLS. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cacertfile +Specifies the path to the X.509 certificate for peer authentication. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-randfile +Specifies the path to an entropy source. This parameter is ignored when +using GnuTLS. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-ciphers +Specifies the ciphers to use for TLS as a string. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cert +Specifies the path to the file containing the local certificate for +client TLS authentication. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-key +Specifies the path to the file containing the private key for client TLS +authentication. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-number pagesize +Set this to a number greater than 0 to request paged results from the +LDAP server in accordance with RFC2696. The default (0) is to not +request paged results. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-ignore-users-option nss-initgroups-ignoreusers +This option prevents group membership lookups through LDAP for the +specified users. Alternatively, the value 'all-local may be used. With +that value nslcd builds a full list of non-LDAP users on startup. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-min-uid +This option ensures that LDAP users with a numeric user id lower than +the specified value are ignored. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-uid-offset +This option specifies an offset that is added to all LDAP numeric user +ids. This can be used to avoid user id collisions with local users. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-gid-offset +This option specifies an offset that is added to all LDAP numeric group +ids. This can be used to avoid user id collisions with local groups. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-nested-groups +If this option is set, the member attribute of a group may point to +another group. Members of nested groups are also returned in the higher +level group and parent groups are returned when finding groups for a +specific user. The default is not to perform extra searches for nested +groups. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-getgrent-skipmembers +If this option is set, the group member list is not retrieved when +looking up groups. Lookups for finding which groups a user belongs to +will remain functional so the user will likely still get the correct +groups assigned on login. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-disable-enumeration +If this option is set, functions which cause all user/group entries to +be loaded from the directory will not succeed in doing so. This can +dramatically reduce LDAP server load in situations where there are a +great number of users and/or groups. This option is not recommended for +most configurations. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-string validnames +This option can be used to specify how user and group names are verified +within the system. This pattern is used to check all user and group +names that are requested and returned from LDAP. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-boolean ignorecase +This specifies whether or not to perform searches using case-insensitive +matching. Enabling this could open up the system to authorization +bypass vulnerabilities and introduce nscd cache poisoning +vulnerabilities which allow denial of service. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-boolean pam-authc-ppolicy +This option specifies whether password policy controls are requested and +handled from the LDAP server when performing user authentication. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-authc-search +By default nslcd performs an LDAP search with the user's credentials +after BIND (authentication) to ensure that the BIND operation was +successful. The default search is a simple check to see if the user's +DN exists. A search filter can be specified that will be used instead. +It should return at least one entry. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-authz-search +This option allows flexible fine tuning of the authorisation check that +should be performed. The search filter specified is executed and if any +entries match, access is granted, otherwise access is denied. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-password-prohibit-message +If this option is set password modification using pam_ldap will be +denied and the specified message will be presented to the user instead. +The message can be used to direct the user to an alternative means of +changing their password. + +Defaults to @samp{disabled}. + +@end deftypevr + +@deftypevr {@code{nslcd-configuration} parameter} list pam-services +List of pam service names for which LDAP authentication should suffice. + +Defaults to @samp{()}. + +@end deftypevr + +@c %end of generated documentation for nslcd-configuration + + @node Web Services @subsection Web Services diff --git a/gnu/local.mk b/gnu/local.mk index c32876cdcf..a5a2f11538 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -569,6 +569,7 @@ GNU_SYSTEM_MODULES = \ %D%/tests/monitoring.scm \ %D%/tests/nfs.scm \ %D%/tests/install.scm \ + %D%/tests/ldap.scm \ %D%/tests/mail.scm \ %D%/tests/messaging.scm \ %D%/tests/networking.scm \ diff --git a/gnu/services/authentication.scm b/gnu/services/authentication.scm index 1a2629d475..ab54aaf698 100644 --- a/gnu/services/authentication.scm +++ b/gnu/services/authentication.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018 Danny Milosavljevic +;;; Copyright © 2018, 2019 Ricardo Wurmus ;;; ;;; This file is part of GNU Guix. ;;; @@ -18,13 +19,28 @@ (define-module (gnu services authentication) #:use-module (gnu services) + #:use-module (gnu services base) + #:use-module (gnu services configuration) #:use-module (gnu services dbus) + #:use-module (gnu services shepherd) + #:use-module (gnu system pam) + #:use-module (gnu system shadow) + #:use-module (gnu packages admin) #:use-module (gnu packages freedesktop) + #:use-module (gnu packages openldap) #:use-module (guix gexp) #:use-module (guix records) + #:use-module (guix packages) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) #:export (fprintd-configuration fprintd-configuration? - fprintd-service-type)) + fprintd-service-type + + nslcd-configuration + nslcd-configuration? + nslcd-service-type)) (define-record-type* fprintd-configuration make-fprintd-configuration @@ -39,3 +55,496 @@ list))) (description "Run fprintd, a fingerprint management daemon."))) + + +;;; +;;; NSS Pam LDAP service (nslcd) +;;; + +(define (uglify-field-name name) + (match name + ('filters "filter") + ('maps "map") + (_ (string-map (match-lambda + (#\- #\_) + (chr chr)) + (symbol->string name))))) + +(define (value->string val) + (cond + ((boolean? val) + (if val "on" "off")) + ((number? val) + (number->string val)) + ((symbol? val) + (string-map (match-lambda + (#\- #\_) + (chr chr)) + (symbol->string val))) + (else val))) + +(define (serialize-field field-name val) + (if (eq? field-name 'pam-services) + #t + (format #t "~a ~a\n" + (uglify-field-name field-name) + (value->string val)))) + +(define serialize-string serialize-field) +(define serialize-boolean serialize-field) +(define serialize-number serialize-field) +(define (serialize-list field-name val) + (map (cut serialize-field field-name <>) val)) +(define-maybe string) +(define-maybe boolean) +(define-maybe number) + +(define (ssl-option? val) + (or (boolean? val) + (eq? val 'start-tls))) +(define serialize-ssl-option serialize-field) +(define-maybe ssl-option) + +(define (tls-reqcert-option? val) + (member val '(never allow try demand hard))) +(define serialize-tls-reqcert-option serialize-field) +(define-maybe tls-reqcert-option) + +(define (deref-option? val) + (member val '(never searching finding always))) +(define serialize-deref-option serialize-field) +(define-maybe deref-option) + +(define (comma-separated-list-of-strings? val) + (and (list? val) + (every string? val))) +(define (ignore-users-option? val) + (or (comma-separated-list-of-strings? val) + (eq? 'all-local val))) +(define (serialize-ignore-users-option field-name val) + (serialize-field field-name (if (eq? 'all-local val) + val + (string-join val ",")))) +(define-maybe ignore-users-option) + +(define (log-option? val) + (let ((valid-scheme? (lambda (scheme) + (or (string? scheme) + (member scheme '(none syslog)))))) + (match val + ((scheme level) + (and (valid-scheme? scheme) + (member level '(crit error warning notice info debug)))) + ((scheme) + (valid-scheme? scheme))))) +(define (serialize-log-option field-name val) + (serialize-field field-name + (string-join (map (cut format #f "~a" <>) val)))) + +(define (valid-map? val) + "Is VAL a supported map name?" + (member val + '(alias aliases ether ethers group host hosts netgroup network networks + passwd protocol protocols rpc service services shadow))) + +(define (scope-option? val) + (let ((valid-scopes '(subtree onelevel base children))) + (match val + ((map-name scope) + (and (valid-map? map-name) + (member scope valid-scopes))) + ((scope) + (member scope valid-scopes))))) +(define (serialize-scope-option field-name val) + (serialize-field field-name + (string-join (map (cut format #f "~a" <>) val)))) + +(define (map-entry? val) + (match val + (((? valid-map? map-name) + (? string? attribute) + (? string? new-attribute)) #t) + (_ #f))) + +(define (list-of-map-entries? val) + (and (list? val) + (every map-entry? val))) + +(define (filter-entry? val) + (match val + (((? valid-map? map-name) + (? string? filter-expression)) #t) + (_ #f))) + +(define (list-of-filter-entries? val) + (and (list? val) + (every filter-entry? val))) + +(define (serialize-filter-entry field-name val) + (serialize-field 'filter + (match val + (((? valid-map? map-name) + (? string? filter-expression)) + (string-append (symbol->string map-name) + " " filter-expression))))) + +(define (serialize-list-of-filter-entries field-name val) + (for-each (cut serialize-filter-entry field-name <>) val)) + +(define (serialize-map-entry field-name val) + (serialize-field 'map + (match val + (((? valid-map? map-name) + (? string? attribute) + (? string? new-attribute)) + (string-append (symbol->string map-name) + " " attribute + " " new-attribute))))) + +(define (serialize-list-of-map-entries field-name val) + (for-each (cut serialize-map-entry field-name <>) val)) + + +(define-configuration nslcd-configuration + (nss-pam-ldapd + (package nss-pam-ldapd) + "The NSS-PAM-LDAPD package to use.") + + ;; Runtime options + (threads + (maybe-number 'disabled) + "The number of threads to start that can handle requests and perform LDAP +queries. Each thread opens a separate connection to the LDAP server. The +default is to start 5 threads.") + (uid + (string "nslcd") + "This specifies the user id with which the daemon should be run.") + (gid + (string "nslcd") + "This specifies the group id with which the daemon should be run.") + (log + (log-option '("/var/log/nslcd" info)) + "This option controls the way logging is done via a list containing SCHEME +and LEVEL. The SCHEME argument may either be the symbols \"none\" or +\"syslog\", or an absolute file name. The LEVEL argument is optional and +specifies the log level. The log level may be one of the following symbols: +\"crit\", \"error\", \"warning\", \"notice\", \"info\" or \"debug\". All +messages with the specified log level or higher are logged.") + + ;; LDAP connection settings + (uri + (list '("ldap://localhost:389/")) + "The list of LDAP server URIs. Normally, only the first server will be +used with the following servers as fall-back.") + (ldap-version + (maybe-string 'disabled) + "The version of the LDAP protocol to use. The default is to use the +maximum version supported by the LDAP library.") + (binddn + (maybe-string 'disabled) + "Specifies the distinguished name with which to bind to the directory +server for lookups. The default is to bind anonymously.") + (bindpw + (maybe-string 'disabled) + "Specifies the credentials with which to bind. This option is only +applicable when used with binddn.") + (rootpwmoddn + (maybe-string 'disabled) + "Specifies the distinguished name to use when the root user tries to modify +a user's password using the PAM module.") + (rootpwmodpw + (maybe-string 'disabled) + "Specifies the credentials with which to bind if the root user tries to +change a user's password. This option is only applicable when used with +rootpwmoddn") + + ;; SASL authentication options + (sasl-mech + (maybe-string 'disabled) + "Specifies the SASL mechanism to be used when performing SASL +authentication.") + (sasl-realm + (maybe-string 'disabled) + "Specifies the SASL realm to be used when performing SASL authentication.") + (sasl-authcid + (maybe-string 'disabled) + "Specifies the authentication identity to be used when performing SASL +authentication.") + (sasl-authzid + (maybe-string 'disabled) + "Specifies the authorization identity to be used when performing SASL +authentication.") + (sasl-canonicalize? + (maybe-boolean 'disabled) + "Determines whether the LDAP server host name should be canonicalised. If +this is enabled the LDAP library will do a reverse host name lookup. By +default, it is left up to the LDAP library whether this check is performed or +not.") + + ;; Kerberos authentication options + (krb5-ccname + (maybe-string 'disabled) + "Set the name for the GSS-API Kerberos credentials cache.") + + ;; Search / mapping options + (base + (string "dc=example,dc=com") + "The directory search base.") + (scope + (scope-option '(subtree)) + "Specifies the search scope (subtree, onelevel, base or children). The +default scope is subtree; base scope is almost never useful for name service +lookups; children scope is not supported on all servers.") + (deref + (maybe-deref-option 'disabled) + "Specifies the policy for dereferencing aliases. The default policy is to +never dereference aliases.") + (referrals + (maybe-boolean 'disabled) + "Specifies whether automatic referral chasing should be enabled. The +default behaviour is to chase referrals.") + (maps + (list-of-map-entries '()) + "This option allows for custom attributes to be looked up instead of the +default RFC 2307 attributes. It is a list of maps, each consisting of the +name of a map, the RFC 2307 attribute to match and the query expression for +the attribute as it is available in the directory.") + (filters + (list-of-filter-entries '()) + "A list of filters consisting of the name of a map to which the filter +applies and an LDAP search filter expression.") + + ;; Timing / reconnect options + (bind-timelimit + (maybe-number 'disabled) + "Specifies the time limit in seconds to use when connecting to the +directory server. The default value is 10 seconds.") + (timelimit + (maybe-number 'disabled) + "Specifies the time limit (in seconds) to wait for a response from the LDAP +server. A value of zero, which is the default, is to wait indefinitely for +searches to be completed.") + (idle-timelimit + (maybe-number 'disabled) + "Specifies the period if inactivity (in seconds) after which the con‐ +nection to the LDAP server will be closed. The default is not to time out +connections.") + (reconnect-sleeptime + (maybe-number 'disabled) + "Specifies the number of seconds to sleep when connecting to all LDAP +servers fails. By default one second is waited between the first failure and +the first retry.") + (reconnect-retrytime + (maybe-number 'disabled) + "Specifies the time after which the LDAP server is considered to be +permanently unavailable. Once this time is reached retries will be done only +once per this time period. The default value is 10 seconds.") + + ;; TLS options + (ssl + (maybe-ssl-option 'disabled) + "Specifies whether to use SSL/TLS or not (the default is not to). If +'start-tls is specified then StartTLS is used rather than raw LDAP over SSL.") + (tls-reqcert + (maybe-tls-reqcert-option 'disabled) + "Specifies what checks to perform on a server-supplied certificate. +The meaning of the values is described in the ldap.conf(5) manual page.") + (tls-cacertdir + (maybe-string 'disabled) + "Specifies the directory containing X.509 certificates for peer authen‐ +tication. This parameter is ignored when using GnuTLS.") + (tls-cacertfile + (maybe-string 'disabled) + "Specifies the path to the X.509 certificate for peer authentication.") + (tls-randfile + (maybe-string 'disabled) + "Specifies the path to an entropy source. This parameter is ignored when +using GnuTLS.") + (tls-ciphers + (maybe-string 'disabled) + "Specifies the ciphers to use for TLS as a string.") + (tls-cert + (maybe-string 'disabled) + "Specifies the path to the file containing the local certificate for client +TLS authentication.") + (tls-key + (maybe-string 'disabled) + "Specifies the path to the file containing the private key for client TLS +authentication.") + + ;; Other options + (pagesize + (maybe-number 'disabled) + "Set this to a number greater than 0 to request paged results from the LDAP +server in accordance with RFC2696. The default (0) is to not request paged +results.") + (nss-initgroups-ignoreusers + (maybe-ignore-users-option 'disabled) + "This option prevents group membership lookups through LDAP for the +specified users. Alternatively, the value 'all-local may be used. With that +value nslcd builds a full list of non-LDAP users on startup.") + (nss-min-uid + (maybe-number 'disabled) + "This option ensures that LDAP users with a numeric user id lower than the +specified value are ignored.") + (nss-uid-offset + (maybe-number 'disabled) + "This option specifies an offset that is added to all LDAP numeric user +ids. This can be used to avoid user id collisions with local users.") + (nss-gid-offset + (maybe-number 'disabled) + "This option specifies an offset that is added to all LDAP numeric group +ids. This can be used to avoid user id collisions with local groups.") + (nss-nested-groups + (maybe-boolean 'disabled) + "If this option is set, the member attribute of a group may point to +another group. Members of nested groups are also returned in the higher level +group and parent groups are returned when finding groups for a specific user. +The default is not to perform extra searches for nested groups.") + (nss-getgrent-skipmembers + (maybe-boolean 'disabled) + "If this option is set, the group member list is not retrieved when looking +up groups. Lookups for finding which groups a user belongs to will remain +functional so the user will likely still get the correct groups assigned on +login.") + (nss-disable-enumeration + (maybe-boolean 'disabled) + "If this option is set, functions which cause all user/group entries to be +loaded from the directory will not succeed in doing so. This can dramatically +reduce LDAP server load in situations where there are a great number of users +and/or groups. This option is not recommended for most configurations.") + (validnames + (maybe-string 'disabled) + "This option can be used to specify how user and group names are verified +within the system. This pattern is used to check all user and group names +that are requested and returned from LDAP.") + (ignorecase + (maybe-boolean 'disabled) + "This specifies whether or not to perform searches using case-insensitive +matching. Enabling this could open up the system to authorization bypass +vulnerabilities and introduce nscd cache poisoning vulnerabilities which allow +denial of service.") + (pam-authc-ppolicy + (maybe-boolean 'disabled) + "This option specifies whether password policy controls are requested and +handled from the LDAP server when performing user authentication.") + (pam-authc-search + (maybe-string 'disabled) + "By default nslcd performs an LDAP search with the user's credentials after +BIND (authentication) to ensure that the BIND operation was successful. The +default search is a simple check to see if the user's DN exists. A search +filter can be specified that will be used instead. It should return at least +one entry.") + (pam-authz-search + (maybe-string 'disabled) + "This option allows flexible fine tuning of the authorisation check that +should be performed. The search filter specified is executed and if any +entries match, access is granted, otherwise access is denied.") + (pam-password-prohibit-message + (maybe-string 'disabled) + "If this option is set password modification using pam_ldap will be denied +and the specified message will be presented to the user instead. The message +can be used to direct the user to an alternative means of changing their +password.") + + ;; Options for extension of pam-root-service-type. + (pam-services + (list '()) + "List of pam service names for which LDAP authentication should suffice.")) + +(define %nslcd-accounts + (list (user-group + (name "nslcd") + (system? #t)) + (user-account + (name "nslcd") + (group "nslcd") + (comment "NSLCD service account") + (home-directory "/var/empty") + (shell (file-append shadow "/sbin/nologin")) + (system? #t)))) + +(define (nslcd-config-file config) + "Return an NSLCD configuration file." + (plain-file "nslcd.conf" + (with-output-to-string + (lambda () + (serialize-configuration config nslcd-configuration-fields) + ;; The file must end with a newline character. + (format #t "\n"))))) + +;; XXX: The file should only be readable by root if it contains a "bindpw" +;; declaration. Unfortunately, this etc-service-type extension does not +;; support setting file modes, so we do this in the activation service. +(define (nslcd-etc-service config) + `(("nslcd.conf" ,(nslcd-config-file config)))) + +(define (nslcd-shepherd-service config) + (list (shepherd-service + (documentation "Run the nslcd service for resolving names from LDAP.") + (provision '(nslcd)) + (requirement '(networking user-processes)) + (start #~(make-forkexec-constructor + (list (string-append #$(nslcd-configuration-nss-pam-ldapd config) + "/sbin/nslcd") + "--nofork") + #:pid-file "/var/run/nslcd/nslcd.pid" + #:environment-variables + (list (string-append "LD_LIBRARY_PATH=" + #$(nslcd-configuration-nss-pam-ldapd config) + "/lib")))) + (stop #~(make-kill-destructor))))) + +(define (pam-ldap-pam-service config) + "Return a PAM service for LDAP authentication." + (define pam-ldap-module + #~(string-append #$(nslcd-configuration-nss-pam-ldapd config) + "/lib/security/pam_ldap.so")) + (lambda (pam) + (if (member (pam-service-name pam) + (nslcd-configuration-pam-services config)) + (let ((sufficient + (pam-entry + (control "sufficient") + (module pam-ldap-module)))) + (pam-service + (inherit pam) + (auth (cons sufficient (pam-service-auth pam))) + (session (cons sufficient (pam-service-session pam))) + (account (cons sufficient (pam-service-account pam))))) + pam))) + +(define (pam-ldap-pam-services config) + (list (pam-ldap-pam-service config))) + +(define nslcd-service-type + (service-type + (name 'nslcd) + (description "Run the NSLCD service for looking up names from LDAP.") + (extensions + (list (service-extension account-service-type + (const %nslcd-accounts)) + (service-extension etc-service-type + nslcd-etc-service) + (service-extension activation-service-type + (const #~(begin + (use-modules (guix build utils)) + (let ((rundir "/var/run/nslcd") + (user (getpwnam "nslcd"))) + (mkdir-p rundir) + (chown rundir (passwd:uid user) (passwd:gid user)) + (chmod rundir #o755) + (when (file-exists? "/etc/nslcd.conf") + (chmod "/etc/nslcd.conf" #o400)))))) + (service-extension pam-root-service-type + pam-ldap-pam-services) + (service-extension nscd-service-type + (const (list nss-pam-ldapd))) + (service-extension shepherd-root-service-type + nslcd-shepherd-service))) + (default-value (nslcd-configuration)))) + +(define (generate-nslcd-documentation) + (generate-documentation + `((nslcd-configuration ,nslcd-configuration-fields)) + 'nslcd-configuration)) diff --git a/gnu/tests/ldap.scm b/gnu/tests/ldap.scm new file mode 100644 index 0000000000..2d4f15fb3c --- /dev/null +++ b/gnu/tests/ldap.scm @@ -0,0 +1,160 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2019 Ricardo Wurmus +;;; +;;; 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 ldap) + #:use-module (gnu tests) + #:use-module (gnu system) + #:use-module (gnu system nss) + #:use-module (gnu system vm) + #:use-module (gnu services) + #:use-module (gnu services authentication) + #:use-module (gnu services networking) + #:use-module (gnu packages base) + #:use-module (gnu packages openldap) + #:use-module (guix gexp) + #:use-module (guix store) + #:export (%test-ldap)) + +(define %ldap-os + (let ((simple + (simple-operating-system + (service dhcp-client-service-type) + (service nslcd-service-type)))) + (operating-system + (inherit simple) + (name-service-switch + (let ((services (list (name-service (name "db")) + (name-service (name "files")) + (name-service (name "ldap"))))) + (name-service-switch + (inherit %mdns-host-lookup-nss) + (password services) + (shadow services) + (group services) + (netgroup services) + (gshadow services))))))) + +(define (run-ldap-test) + "Run tests in %LDAP-OS." + (define os + (marionette-operating-system + %ldap-os + #:imported-modules '((gnu services herd) + (guix combinators)))) + + (define vm + (virtual-machine os)) + + (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 #$vm))) + + (mkdir #$output) + (chdir #$output) + + (test-begin "ldap") + + ;; Set up LDAP directory server + (test-assert "LDAP server instance running" + (marionette-eval + '(begin + (with-output-to-file "instance.inf" + (lambda () + (display "[general] +config_version = 2 + +\n[slapd] +root_password = SECRET +user = root +group = root + +\n[backend-userroot] +sample_entries = yes +suffix = dc=example,dc=com"))) + (and + ;; Create instance + (zero? (system* #$(file-append 389-ds-base "/sbin/dscreate") + "-v" "from-file" "instance.inf")) + ;; Start instance + (zero? (system* #$(file-append 389-ds-base "/sbin/dsctl") + "localhost" "start")) + ;; Create user account + (zero? (system* #$(file-append 389-ds-base "/sbin/dsidm") + "-b" "dc=example,dc=com" + "localhost" "user" "create" + "--uid" "eva" "--cn" "Eva Lu Ator" + "--displayName" "Eva Lu Ator" + "--uidNumber" "1234" "--gidNumber" "2345" + "--homeDirectory" "/home/eva")))) + marionette)) + + (test-assert "Manager can bind to LDAP server instance" + (marionette-eval + '(zero? (system* #$(file-append openldap "/bin/ldapwhoami") + "-H" "ldap://localhost" "-D" + "cn=Directory Manager" "-w" "SECRET")) + marionette)) + + ;; Wait for nslcd to be up and running. + (test-assert "nslcd service running" + (marionette-eval + '(begin + (use-modules (gnu services herd)) + (match (start-service 'nslcd) + (#f #f) + (('service response-parts ...) + (match (assq-ref response-parts 'running) + ((pid) (number? pid)))))) + marionette)) + + (test-assert "nslcd produces a log file" + (marionette-eval + '(file-exists? "/var/log/nslcd") + marionette)) + + (test-assert "Can query LDAP user accounts" + (marionette-eval + '(begin + ;; TODO: This shouldn't be necessary, but unfortunately it + ;; really is needed to discover LDAP accounts with "id". + (setenv "LD_LIBRARY_PATH" + #$(file-append nss-pam-ldapd "/lib")) + (zero? (system* #$(file-append coreutils "/bin/id") "eva"))) + marionette)) + + (test-assert "Can become LDAP user" + (marionette-eval + '(zero? (system* "/run/setuid-programs/su" "eva" "-c" + #$(file-append coreutils "/bin/true"))) + marionette)) + + (test-end) + (exit (= (test-runner-fail-count (test-runner-current)) 0))))) + + (gexp->derivation "ldap-test" test)) + +(define %test-ldap + (system-test + (name "ldap") + (description "Run an LDAP directory server and authenticate against it.") + (value (run-ldap-test)))) -- cgit v1.2.3 From 2b81eac01e5828c6fce61b3cafc0f78e7a0ab891 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Sat, 23 Mar 2019 15:04:44 +0100 Subject: graph: Add the 'reverse-bag' graph. Suggested by Julien Lepiller. * guix/scripts/graph.scm (%reverse-bag-node-type): New variable. (%node-types): Add it. * tests/graph.scm ("reverse bag DAG"): New test. * doc/guix.texi (Invoking guix graph): Document it. --- doc/guix.texi | 18 +++++++++++++++++- guix/scripts/graph.scm | 19 ++++++++++++++++++- tests/graph.scm | 28 +++++++++++++++++++++++++++- 3 files changed, 62 insertions(+), 3 deletions(-) (limited to 'doc') diff --git a/doc/guix.texi b/doc/guix.texi index 94d7a29bdf..8fa714ee54 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -9290,7 +9290,9 @@ This shows the @emph{reverse} DAG of packages. For example: guix graph --type=reverse-package ocaml @end example -...@: yields the graph of packages that depend on OCaml. +...@: yields the graph of packages that @emph{explicitly} depend on OCaml (if +you are also interested in cases where OCaml is an implicit dependency, see +@code{reverse-bag} below.) Note that for core packages this can yield huge graphs. If all you want is to know the number of packages that depend on a given package, use @@ -9324,6 +9326,20 @@ dependencies. @item bag-with-origins Similar to @code{bag}, but also showing origins and their dependencies. +@item reverse-bag +This shows the @emph{reverse} DAG of packages. Unlike @code{reverse-package}, +it also takes implicit dependencies into account. For example: + +@example +guix graph -t reverse-bag dune +@end example + +@noindent +...@: yields the graph of all packages that depend on Dune, directly or +indirectly. Since Dune is an @emph{implicit} dependency of many packages +@i{via} @code{dune-build-system}, this shows a large number of packages, +whereas @code{reverse-package} would show very few if any. + @item derivation This is the most detailed representation: It shows the DAG of derivations (@pxref{Derivations}) and plain store items. Compared to diff --git a/guix/scripts/graph.scm b/guix/scripts/graph.scm index 8efeef3274..d0d353ff9e 100644 --- a/guix/scripts/graph.scm +++ b/guix/scripts/graph.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2015, 2016, 2017, 2018 Ludovic Courtès +;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; @@ -43,6 +43,7 @@ %bag-node-type %bag-with-origins-node-type %bag-emerged-node-type + %reverse-bag-node-type %derivation-node-type %reference-node-type %referrer-node-type @@ -219,6 +220,21 @@ GNU-BUILD-SYSTEM have zero dependencies." bag-node-edges-sans-bootstrap) %store-monad)))) +(define %reverse-bag-node-type + ;; Type for the reverse traversal of package nodes via the "bag" + ;; representation, which includes implicit inputs. + (let* ((packages (delay (package-closure (fold-packages cons '())))) + (back-edges (delay (run-with-store #f ;store not actually needed + (node-back-edges %bag-node-type + (force packages)))))) + (node-type + (name "reverse-bag") + (description "the reverse DAG of packages, including implicit inputs") + (convert nodes-from-package) + (identifier bag-node-identifier) + (label node-full-name) + (edges (lift1 (force back-edges) %store-monad))))) + ;;; ;;; Derivation DAG. @@ -375,6 +391,7 @@ package modules, while attempting to retain user package modules." %bag-node-type %bag-with-origins-node-type %bag-emerged-node-type + %reverse-bag-node-type %derivation-node-type %reference-node-type %referrer-node-type diff --git a/tests/graph.scm b/tests/graph.scm index 4799d3bd0c..c4c5096226 100644 --- a/tests/graph.scm +++ b/tests/graph.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2015, 2016, 2017, 2018 Ludovic Courtès +;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; @@ -191,6 +191,32 @@ edges." (string=? target (derivation-file-name g))))) edges))))))))) +(test-assert "reverse bag DAG" + (let-values (((dune bap ocaml-base) + (values (specification->package "dune") + (specification->package "bap") + (specification->package "ocaml-base"))) + ((backend nodes+edges) (make-recording-backend))) + (run-with-store %store + (export-graph (list dune) 'port + #:node-type %reverse-bag-node-type + #:backend backend)) + + (run-with-store %store + (mlet %store-monad ((dune-drv (package->derivation dune)) + (bap-drv (package->derivation bap)) + (ocaml-base-drv (package->derivation ocaml-base))) + ;; OCAML-BASE uses 'dune-build-system' so DUNE is a direct dependency. + ;; BAP is much higher in the stack but it should be there. + (let-values (((nodes edges) (nodes+edges))) + (return + (and (member `(,(derivation-file-name bap-drv) + ,(package-full-name bap)) + nodes) + (->bool (member (map derivation-file-name + (list dune-drv ocaml-base-drv)) + edges))))))))) + (test-assert "derivation DAG" (let-values (((backend nodes+edges) (make-recording-backend))) (run-with-store %store -- cgit v1.2.3 From 4e4c3114653d23926aea7b658f6a2ba04bc0e2f3 Mon Sep 17 00:00:00 2001 From: Efraim Flashner Date: Tue, 26 Feb 2019 14:27:49 +0200 Subject: build: Add rakudo-build-system. * guix/build-system/rakudo.scm, guix/build/rakudo-build-system.scm: New files. * Makefile.am (MODULES): Add them. * doc/guix.texi (Build System): Document it. --- Makefile.am | 3 + doc/guix.texi | 20 ++++- guix/build-system/rakudo.scm | 155 +++++++++++++++++++++++++++++++++++++ guix/build/rakudo-build-system.scm | 145 ++++++++++++++++++++++++++++++++++ 4 files changed, 322 insertions(+), 1 deletion(-) create mode 100644 guix/build-system/rakudo.scm create mode 100644 guix/build/rakudo-build-system.scm (limited to 'doc') diff --git a/Makefile.am b/Makefile.am index 9e49b079bf..4902f3afe7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -13,6 +13,7 @@ # Copyright © 2018 Julien Lepiller # Copyright © 2018 Oleg Pykhalov # Copyright © 2018 Alex Vong +# Copyright © 2019 Efraim Flashner # # This file is part of GNU Guix. # @@ -124,6 +125,7 @@ MODULES = \ guix/build-system/ocaml.scm \ guix/build-system/waf.scm \ guix/build-system/r.scm \ + guix/build-system/rakudo.scm \ guix/build-system/ruby.scm \ guix/build-system/scons.scm \ guix/build-system/texlive.scm \ @@ -164,6 +166,7 @@ MODULES = \ guix/build/python-build-system.scm \ guix/build/ocaml-build-system.scm \ guix/build/r-build-system.scm \ + guix/build/rakudo-build-system.scm \ guix/build/ruby-build-system.scm \ guix/build/scons-build-system.scm \ guix/build/texlive-build-system.scm \ diff --git a/doc/guix.texi b/doc/guix.texi index 8fa714ee54..d10fbce3a4 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -28,7 +28,7 @@ Copyright @copyright{} 2015, 2016, 2017 Leo Famulari@* Copyright @copyright{} 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus@* Copyright @copyright{} 2016 Ben Woodcroft@* Copyright @copyright{} 2016, 2017, 2018 Chris Marusich@* -Copyright @copyright{} 2016, 2017, 2018 Efraim Flashner@* +Copyright @copyright{} 2016, 2017, 2018, 2019 Efraim Flashner@* Copyright @copyright{} 2016 John Darrington@* Copyright @copyright{} 2016, 2017 ng0@* Copyright @copyright{} 2016, 2017, 2018, 2019 Jan Nieuwenhuizen@* @@ -6002,6 +6002,24 @@ are run after installation using the R function @code{tools::testInstalledPackage}. @end defvr +@defvr {Scheme Variable} rakudo-build-system +This variable is exported by @code{(guix build-system rakudo)} It +implements the build procedure used by @uref{https://rakudo.org/, +Rakudo} for @uref{https://perl6.org/, Perl6} packages. It installs the +package to @code{/gnu/store/@dots{}/NAME-VERSION/share/perl6} and +installs the binaries, library files and the resources, as well as wrap +the files under the @code{bin/} directory. Tests can be skipped by +passing @code{#f} to the @code{tests?} parameter. + +Which rakudo package is used can be specified with @code{rakudo}. +Which perl6-tap-harness package used for the tests can be specified with +@code{#:prove6} or removed by passing @code{#f} to the +@code{with-prove6?} parameter. +Which perl6-zef package used for tests and installing can be specified +with @code{#:zef} or removed by passing @code{#f} to the +@code{with-zef?} parameter. +@end defvr + @defvr {Scheme Variable} texlive-build-system This variable is exported by @code{(guix build-system texlive)}. It is used to build TeX packages in batch mode with a specified engine. The diff --git a/guix/build-system/rakudo.scm b/guix/build-system/rakudo.scm new file mode 100644 index 0000000000..a02e2bad3a --- /dev/null +++ b/guix/build-system/rakudo.scm @@ -0,0 +1,155 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2019 Efraim Flashner +;;; +;;; 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 (guix build-system rakudo) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (guix derivations) + #:use-module (guix search-paths) + #:use-module (guix build-system) + #:use-module (guix build-system gnu) + #:use-module (guix packages) + #:use-module (ice-9 match) + #:export (%rakudo-build-system-modules + rakudo-build + rakudo-build-system)) + +;; Commentary: +;; +;; Standard build and install procedure for packages using the Rakudo +;; build system to be installed as system libraries. This is +;; implemented as an extension of `gnu-build-system'. +;; +;; Code: + +(define %rakudo-build-system-modules + ;; Build-side modules imported by default. + `((guix build rakudo-build-system) + ,@%gnu-build-system-modules)) + +(define (default-rakudo) + "Return the default Rakudo package." + + ;; Do not use `@' to avoid introducing circular dependencies. + (let ((module (resolve-interface '(gnu packages perl6)))) + (module-ref module 'rakudo))) + +(define (default-prove6) + "Return the default perl6-tap-harness package for tests." + (let ((module (resolve-interface '(gnu packages perl6)))) + (module-ref module 'perl6-tap-harness))) + +(define (default-zef) + "Return the default perl6-zef package." + (let ((module (resolve-interface '(gnu packages perl6)))) + (module-ref module 'perl6-zef))) + +(define* (lower name + #:key source inputs native-inputs outputs + system target + (rakudo (default-rakudo)) + (prove6 (default-prove6)) + (zef (default-zef)) + (with-prove6? #t) + (with-zef? #t) + #:allow-other-keys + #:rest arguments) + "Return a bag for NAME." + (define private-keywords + '(#:source #:target #:rakudo #:prove6 #:zef #:inputs #:native-inputs)) + + (and (not target) ;XXX: no cross-compilation + (bag + (name name) + (system system) + (host-inputs `(,@(if source + `(("source" ,source)) + '()) + ,@inputs + + ;; Keep the standard inputs of 'gnu-build-system'. + ,@(standard-packages))) + (build-inputs `(("rakudo" ,rakudo) + ,@(if with-prove6? + `(("perl6-tap-harness" ,prove6) + ,@(if with-zef? + `(("perl6-zef" ,zef)) + '())) + '()) + ,@native-inputs)) + (outputs outputs) + (build rakudo-build) + (arguments (strip-keyword-arguments private-keywords arguments))))) + +(define* (rakudo-build store name inputs + #:key + (search-paths '()) + (tests? #t) + (phases '(@ (guix build rakudo-build-system) + %standard-phases)) + (outputs '("out")) + (system (%current-system)) + (guile #f) + (with-zef? #t) + (with-prove6? #t) + (imported-modules %rakudo-build-system-modules) + (modules '((guix build rakudo-build-system) + (guix build utils)))) + "Build SOURCE using PERL6, and with INPUTS." + (define builder + `(begin + (use-modules ,@modules) + (rakudo-build #:name ,name + #:source ,(match (assoc-ref inputs "source") + (((? derivation? source)) + (derivation->output-path source)) + ((source) + source) + (source + source)) + #:search-paths ',(map search-path-specification->sexp + search-paths) + #:phases ,phases + #:system ,system + #:tests? ,tests? + #:outputs %outputs + #:inputs %build-inputs))) + + (define guile-for-build + (match guile + ((? package?) + (package-derivation store guile system #:graft? #f)) + (#f ; the default + (let* ((distro (resolve-interface '(gnu packages commencement))) + (guile (module-ref distro 'guile-final))) + (package-derivation store guile system #:graft? #f))))) + + (build-expression->derivation store name builder + #:system system + #:inputs inputs + #:modules imported-modules + #:outputs outputs + #:guile-for-build guile-for-build)) + +(define rakudo-build-system + (build-system + (name 'rakudo) + (description "The standard Rakudo build system") + (lower lower))) + +;;; rakudo.scm ends here diff --git a/guix/build/rakudo-build-system.scm b/guix/build/rakudo-build-system.scm new file mode 100644 index 0000000000..dbdeb1ccd2 --- /dev/null +++ b/guix/build/rakudo-build-system.scm @@ -0,0 +1,145 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2019 Efraim Flashner +;;; +;;; 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 (guix build rakudo-build-system) + #:use-module ((guix build gnu-build-system) #:prefix gnu:) + #:use-module (guix build utils) + #:use-module (ice-9 ftw) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:export (%standard-phases + rakudo-build)) + +;; Commentary: +;; +;; Builder-side code of the standard Rakudo package build procedure. +;; +;; Code: + +(define* (check #:key tests? inputs with-prove6? #:allow-other-keys) + (if (and tests? (assoc-ref inputs "perl6-tap-harness")) + ;(if (and tests? with-prove6?) + (invoke "prove6" "-I=lib" "t/") + (format #t "test suite not run~%")) + #t) + +(define* (install #:key inputs outputs with-zef? #:allow-other-keys) + "Install a given Perl6 package." + (let* ((out (assoc-ref outputs "out")) + (perl6 (string-append out "/share/perl6"))) + (if (assoc-ref inputs "perl6-zef") + ;(if with-zef? + (begin + (let ((zef (string-append (assoc-ref inputs "perl6-zef") + "/bin/zef"))) + (setenv "HOME" (getcwd)) + (mkdir-p perl6) + (invoke zef "install" "--verbose" "." + ;; Don't install any of the following: + "--/depends" "--/build-depends" "--/test-depends" + (string-append "--install-to=" perl6)) + (delete-file (string-append perl6 "/repo.lock"))) + #t) + (begin + (let ((inst (string-append (assoc-ref inputs "rakudo") + "/share/perl6/tools/install-dist.p6"))) + (setenv "RAKUDO_RERESOLVE_DEPENDENCIES" "0") + (setenv "RAKUDO_MODULE_DEBUG" "1") ; be verbose while building + (invoke inst (string-append "--to=" perl6) "--for=site")))))) + +(define* (install-libs #:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (lock "lib/.precomp/.lock")) + (when (file-exists? lock) + (delete-file "lib/.precomp/.lock")) + (copy-recursively "lib" (string-append out "/share/perl6/lib")) + #t)) + +(define* (install-bins #:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (when (file-exists? "bin") + (for-each (lambda (file) + (install-file file (string-append out "/bin")) + (chmod (string-append out "/" file) #o555)) + (find-files "bin" ".*"))) + (when (file-exists? "sbin") + (for-each (lambda (file) + (install-file file (string-append out "/sbin")) + (chmod (string-append out "/" file) #o555)) + (find-files "sbin" ".*"))) + #t)) + +(define* (install-resources #:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (when (file-exists? "resources") + (copy-recursively "resources" + (string-append out "/share/perl6/resources"))) + #t)) + +(define* (wrap #:key inputs outputs #:allow-other-keys) + (define (list-of-files dir) + (map (cut string-append dir "/" <>) + (or (scandir dir (lambda (f) + (let ((s (stat (string-append dir "/" f)))) + (eq? 'regular (stat:type s))))) + '()))) + + (define bindirs + (append-map (match-lambda + ((_ . dir) + (list (string-append dir "/bin") + (string-append dir "/sbin")))) + outputs)) + + (let* ((out (assoc-ref outputs "out")) + (var `("PERL6LIB" "," prefix + ,(cons (string-append out "/share/perl6/lib," + out "/share/perl6/site/lib," + out "/share/perl6/vendor/lib") + (search-path-as-string->list + (or (getenv "PERL6LIB") "") #\,))))) + (for-each (lambda (dir) + (let ((files (list-of-files dir))) + (for-each (cut wrap-program <> var) + files))) + bindirs) + #t)) + +(define %standard-phases + ;; No need for 'bootstrap, 'configure or 'build. + (modify-phases gnu:%standard-phases + (delete 'bootstrap) + (delete 'configure) + (delete 'build) + (replace 'check check) + (replace 'install install) + (add-before 'install 'install-lib-dir install-libs) + (add-after 'install-lib-dir 'install-resources install-resources) + (add-after 'install-resources 'install-binaries install-bins) + ;; needs to be after 'install-binaries and all 'install phases + (add-after 'install 'wrap wrap))) + +(define* (rakudo-build #:key inputs (phases %standard-phases) + #:allow-other-keys #:rest args) + "Build the given Perl6 package, applying all of PHASES in order." + (apply gnu:gnu-build + #:inputs inputs #:phases phases + args)) + +;;; rakudo-build-system.scm ends here -- cgit v1.2.3