From 4fd6bf533743deadc50f65a565520173cb4f1e61 Mon Sep 17 00:00:00 2001 From: Andreas Enge Date: Mon, 23 Sep 2013 12:50:59 +0200 Subject: [PATCH 01/33] gnu: mutt: Add SASL for authenticated SMTP. * gnu/packages/mail.scm (mutt): Add input cyrus-sasl. --- gnu/packages/mail.scm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index b8ddcd71e16..a6236e76989 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -19,6 +19,7 @@ (define-module (gnu packages mail) #:use-module (gnu packages) #:use-module (gnu packages autotools) + #:use-module (gnu packages cyrus-sasl) #:use-module (gnu packages dejagnu) #:use-module (gnu packages gdbm) #:use-module (gnu packages gnutls) @@ -154,7 +155,8 @@ aliasing facilities to work just as they would on normal mail.") "1864cwz240gh0zy56fb47qqzwyf6ghg01037rb4p2kqgimpg6h91")))) (build-system gnu-build-system) (inputs - `(("ncurses" ,ncurses) + `(("cyrus-sasl" ,cyrus-sasl) + ("ncurses" ,ncurses) ("openssl" ,openssl) ("perl" ,perl))) (arguments @@ -162,6 +164,7 @@ aliasing facilities to work just as they would on normal mail.") "--enable-imap" "--enable-pop" "--with-ssl" + "--with-sasl" ;; so that mutt does not check whether the path ;; exists, which it does not in the chroot "--with-mailpath=/var/mail"))) From a4141d6d5326925174ef10a7d84ec72f03d6a6cb Mon Sep 17 00:00:00 2001 From: Alex Sassmannshausen Date: Sun, 22 Sep 2013 15:43:23 +0200 Subject: [PATCH 02/33] list-packages: Progressive Enhancement approach to JS. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * build-aux/list-packages.scm (package->sxml): Add parameters previous, description-ids and remaining, update docstring accordingly. Introduce logic for fold-values process. (insert-tr): Moved sxml package table-row generation to new function; remove elements and JS function calls. These are created through JS (prep_pkg_descs). Add insert-js-call for every 15th package, and the last. (insert-js-call): New function. (packages->sxml): Change map to fold values; add init params. (insert-js): show_hide: add compatibility check, introduce, use thingLink prep: new JS function. bulk_show_hide: new JS function. Signed-off-by: Ludovic Courtès --- build-aux/list-packages.scm | 130 +++++++++++++++++++++++++++--------- 1 file changed, 98 insertions(+), 32 deletions(-) diff --git a/build-aux/list-packages.scm b/build-aux/list-packages.scm index 3e798fc6d1b..60c9bc39da9 100755 --- a/build-aux/list-packages.scm +++ b/build-aux/list-packages.scm @@ -29,6 +29,7 @@ exec guile -l "$0" \ #:use-module (guix gnu-maintenance) #:use-module (gnu packages) #:use-module (sxml simple) + #:use-module (sxml fold) #:use-module (web uri) #:use-module (ice-9 match) #:use-module (srfi srfi-1) @@ -48,8 +49,13 @@ exec guile -l "$0" \ (equal? (gnu-package-name package) name)) gnu)))) -(define (package->sxml package) - "Return HTML-as-SXML representing PACKAGE." +(define (package->sxml package previous description-ids remaining) + "Return 3 values: the HTML-as-SXML for PACKAGE added to all previously +collected package output in PREVIOUS, a list of DESCRIPTION-IDS and the number +of packages still to be processed in REMAINING. Also Introduces a call to the +JavaScript prep_pkg_descs function as part of the output of PACKAGE, every +time the length of DESCRIPTION-IDS, increasing, is 15 or when REMAINING, +decreasing, is 1." (define (source-url package) (let ((loc (package-location package))) (and loc @@ -92,37 +98,66 @@ exec guile -l "$0" \ (and=> (lookup-gnu-package name) gnu-package-logo)) + (define (insert-tr description-id js?) + (define (insert-js-call description-ids) + "Return an sxml call to prep_pkg_descs, with up to 15 elements of +description-ids as formal parameters." + `(script (@ (type "text/javascript")) + ,(format #f "prep_pkg_descs(~a)" + (string-append "'" + (string-join description-ids "', '") + "'")))) + + (let ((description-ids (cons description-id description-ids))) + `(tr (td ,(if (gnu-package? package) + `(img (@ (src "/graphics/gnu-head-mini.png") + (alt "Part of GNU") + (title "Part of GNU"))) + "")) + (td (a (@ (href ,(source-url package)) + (title "Link to the Guix package source code")) + ,(package-name package) " " + ,(package-version package))) + (td (span ,(package-synopsis package)) + (div (@ (id ,description-id)) + ,(match (package-logo (package-name package)) + ((? string? url) + `(img (@ (src ,url) + (height "35") + (class "package-logo") + (alt ("Logo of " ,(package-name package)))))) + (_ #f)) + (p ,(package-description package)) + ,(license package) + (a (@ (href ,(package-home-page package)) + (title "Link to the package's website")) + ,(package-home-page package)) + ,(status package) + ,(if js? + (insert-js-call description-ids) + "")))))) + (let ((description-id (symbol->string (gensym (package-name package))))) - `(tr (td ,(if (gnu-package? package) - `(img (@ (src "/graphics/gnu-head-mini.png") - (alt "Part of GNU") - (title "Part of GNU"))) - "")) - (td (a (@ (href ,(source-url package)) - (title "Link to the Guix package source code")) - ,(package-name package) " " - ,(package-version package))) - (td (a (@ (href "javascript:void(0)") - (title "show/hide package description") - (onClick ,(format #f "javascript:show_hide('~a')" - description-id))) - ,(package-synopsis package)) - (div (@ (id ,description-id) - (style "display: none;")) - ,(match (package-logo (package-name package)) - ((? string? url) - `(img (@ (src ,url) - (height "35") - (class "package-logo") - (alt ("Logo of " ,(package-name package)))))) - (_ #f)) - (p ,(package-description package)) - ,(license package) - (a (@ (href ,(package-home-page package)) - (title "Link to the package's website")) - ,(package-home-page package)) - ,(status package)))))) + (cond ((= remaining 1) ; Last package in packages + (values + (reverse ; Fold has reversed packages + (cons (insert-tr description-id 'js) ; Prefix final sxml + previous)) + '() ; No more work to do + 0)) ; End of the line + ((= (length description-ids) 15) ; Time for a JS call + (values + (cons (insert-tr description-id 'js) + previous) ; Prefix new sxml + '() ; Reset description-ids + (1- remaining))) ; Reduce remaining + (else ; Insert another row, and build description-ids + (values + (cons (insert-tr description-id #f) + previous) ; Prefix new sxml + (cons description-id description-ids) ; Update description-ids + (1- remaining)))))) ; Reduce remaining (define (packages->sxml packages) "Return an HTML page as SXML describing PACKAGES." @@ -145,7 +180,7 @@ exec guile -l "$0" \ (tr (th "GNU?") (th "Package version") (th "Package details")) - ,@(map package->sxml packages)) + ,@(fold-values package->sxml packages '() '() (length packages))) (a (@ (href "#intro") (title "Back to top.") (id "top")) @@ -239,14 +274,45 @@ a#top:hover, a#top:focus { // license: CC0 function show_hide(idThing) { + if(document.getElementById && document.createTextNode) { var thing = document.getElementById(idThing); + /* Used to change the link text, depending on whether description is + collapsed or expanded */ + var thingLink = thing.previousSibling.lastChild.firstChild; if (thing) { if (thing.style.display == \"none\") { thing.style.display = \"\"; + thingLink.data = 'Collapse'; } else { thing.style.display = \"none\"; + thingLink.data = 'Expand'; } } + } +} +/* Add controllers used for collapse/expansion of package descriptions */ +function prep(idThing) +{ + var tdThing = document.getElementById(idThing).parentNode; + if (tdThing) { + var aThing = tdThing.firstChild.appendChild(document.createElement('a')); + aThing.setAttribute('href', 'javascript:void(0)'); + aThing.setAttribute('title', 'show/hide package description'); + aThing.appendChild(document.createTextNode('Expand')); + aThing.onclick=function(){show_hide(idThing);}; + /* aThing.onkeypress=function(){show_hide(idThing);}; */ + } +} +/* Take n element IDs, prepare them for javascript enhanced + display and hide the IDs by default. */ +function prep_pkg_descs() +{ + if(document.getElementById && document.createTextNode) { + for(var i=0; i")) From caf96debc257dee9ad8b0ea74cc6a8241c30dad4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Mon, 23 Sep 2013 21:24:18 +0200 Subject: [PATCH 03/33] guix-register: Expect closures to refer to the original store. * nix/guix-register/guix-register.cc (prefix): New variable. (parse_opt): Use it. (register_validity): Change 'info.path' to the final store name. Hash the final under its real path. * tests/guix-register.sh: Adjust the contents of $closure accordingly. Rename 'NIX_LOCALSTATE_DIR' to 'NIX_STATE_DIR'. Don't try to call 'valid-path?'. Add test using 'sqlite3'. --- nix/guix-register/guix-register.cc | 22 ++++++++++++++++++---- tests/guix-register.sh | 26 +++++++++++++++++++------- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/nix/guix-register/guix-register.cc b/nix/guix-register/guix-register.cc index 0a028f0cfed..8f9c3c86abd 100644 --- a/nix/guix-register/guix-register.cc +++ b/nix/guix-register/guix-register.cc @@ -62,6 +62,10 @@ static const struct argp_option options[] = { 0, 0, 0, 0, 0 } }; + +/* Prefix of the store being populated. */ +static std::string prefix; + /* Parse a single option. */ static error_t parse_opt (int key, char *arg, struct argp_state *state) @@ -70,8 +74,8 @@ parse_opt (int key, char *arg, struct argp_state *state) { case 'p': { - string prefix = canonPath (arg); - settings.nixStore = prefix + NIX_STORE_DIR; + prefix = canonPath (arg); + settings.nixStore = NIX_STORE_DIR; settings.nixDataDir = prefix + NIX_DATA_DIR; settings.nixLogDir = prefix + NIX_LOG_DIR; settings.nixStateDir = prefix + NIX_STATE_DIR; @@ -128,15 +132,25 @@ register_validity (LocalStore *store, std::istream &input, ValidPathInfo info = decodeValidPathInfo (input, hashGiven); if (info.path == "") break; + + /* Rewrite the input to refer final name, as if we were in a chroot + under PREFIX. */ + std::string final_prefix (NIX_STORE_DIR "/"); + info.path = final_prefix + baseNameOf (info.path); + + /* Keep its real path to canonicalize it and compute its hash. */ + std::string real_path; + real_path = prefix + "/" + settings.nixStore + "/" + baseNameOf (info.path); + if (!store->isValidPath (info.path) || reregister) { /* !!! races */ if (canonicalise) - canonicalisePathMetaData (info.path, -1); + canonicalisePathMetaData (real_path, -1); if (!hashGiven) { - HashResult hash = hashPath (htSHA256, info.path); + HashResult hash = hashPath (htSHA256, real_path); info.hash = hash.first; info.narSize = hash.second; } diff --git a/tests/guix-register.sh b/tests/guix-register.sh index b76a1af54f3..ca28fb0d95f 100644 --- a/tests/guix-register.sh +++ b/tests/guix-register.sh @@ -38,9 +38,10 @@ cp -r "$to_copy" "$new_store_dir" copied="$new_store_dir/`basename $to_copy`" # Create a file representing a closure with zero references, and with an empty -# "deriver" field. +# "deriver" field. Note that we give the file name as it appears in the +# original store, and 'guix-register' translates it to match the prefix. cat >> "$closure" < Date: Tue, 24 Sep 2013 21:56:33 +0200 Subject: [PATCH 04/33] gnu: xorg: Fix xorg-server. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gnu/packages/xorg.scm (xkbcomp-intermediate): New variable, serves as input to xkeyboard-config. * gnu/packages/xorg.scm (xkeyboard-config): Add input xkbcomp-intermediate. * gnu/packages/xorg.scm (xkbcomp): Add input xkeyboard-config. * gnu/packages/xorg.scm (xorg-server): Adapt xkb paths and replace references to /bin/sh (with Ludovic Courtès ). --- gnu/packages/xorg.scm | 46 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm index 0659c8d10c0..613e2c5f0e4 100644 --- a/gnu/packages/xorg.scm +++ b/gnu/packages/xorg.scm @@ -29,11 +29,11 @@ #:use-module ((gnu packages gettext) #:renamer (symbol-prefix-proc 'gnu:)) #:use-module (gnu packages glib) + #:use-module (gnu packages gnupg) #:use-module (gnu packages gperf) #:use-module (gnu packages libpng) #:use-module (gnu packages linux) #:use-module (gnu packages m4) - #:use-module (gnu packages openssl) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) @@ -3114,9 +3114,9 @@ tracking.") (license license:x11))) -(define-public xkbcomp +(define xkbcomp-intermediate ; used as input for xkeyboard-config (package - (name "xkbcomp") + (name "xkbcomp-intermediate") (version "1.2.4") (source (origin @@ -3139,6 +3139,18 @@ tracking.") (description "X.org provides an implementation of the X Window System") (license license:x11))) +(define-public xkbcomp ; using xkeyboard-config as input + (package (inherit xkbcomp-intermediate) + (name "xkbcomp") + (inputs + `(,@(package-inputs xkbcomp-intermediate) + ("xkeyboard-config" ,xkeyboard-config))) + (arguments + `(#:configure-flags + (list (string-append "--with-xkb-config-root=" + (assoc-ref %build-inputs "xkeyboard-config") + "/share/X11/xkb")))))) + (define-public xkbevd (package @@ -3212,7 +3224,7 @@ tracking.") ("intltool" ,intltool) ("libx11" ,libx11) ("pkg-config" ,pkg-config) - ("xkbcomp" ,xkbcomp))) + ("xkbcomp-intermediate" ,xkbcomp-intermediate))) (home-page "http://www.x.org/wiki/") (synopsis "xorg implementation of the X Window System") (description "X.org provides an implementation of the X Window System") @@ -4262,6 +4274,7 @@ emulation to complete hardware acceleration for modern GPUs.") ("dbus" ,dbus) ("dmxproto" ,dmxproto) ("libdmx" ,libdmx) + ("libgcrypt" ,libgcrypt) ("libxau" ,libxau) ("libxaw" ,libxaw) ("libxdmcp" ,libxdmcp) @@ -4273,7 +4286,6 @@ emulation to complete hardware acceleration for modern GPUs.") ("libxt" ,libxt) ("libxv" ,libxv) ("mesa" ,mesa) - ("openssl" ,openssl) ("pkg-config" ,pkg-config) ("python" ,python-wrapper) ("recordproto" ,recordproto) @@ -4284,10 +4296,30 @@ emulation to complete hardware acceleration for modern GPUs.") ("xf86dgaproto" ,xf86dgaproto) ("xf86driproto" ,xf86driproto) ("xf86vidmodeproto" ,xf86vidmodeproto) -;; ("xkbutils" ,xkbutils) -;; ("xkeyboard-config" ,xkeyboard-config) + ("xkbcomp" ,xkbcomp) + ("xkeyboard-config" ,xkeyboard-config) ("xtrans" ,xtrans) ("zlib" ,zlib))) + (arguments + `(#:configure-flags + (list (string-append "--with-xkb-path=" + (assoc-ref %build-inputs "xkeyboard-config") + "/share/X11/xkb") + (string-append "--with-xkb-output=" + "/tmp") ; FIXME: This is a bit doubtful; where should + ; the compiled keyboard maps go? + (string-append "--with-xkb-bin-directory=" + (assoc-ref %build-inputs "xkbcomp") + "/bin")) + #:phases + (alist-replace + 'configure + (lambda* (#:key outputs #:allow-other-keys #:rest args) + (let ((configure (assoc-ref %standard-phases 'configure))) + (substitute* (find-files "." "\\.c$") + (("/bin/sh") (which "sh"))) + (apply configure args))) + %standard-phases))) (home-page "http://www.x.org/wiki/") (synopsis "xorg implementation of the X Window System") (description "X.org provides an implementation of the X Window System") From 9d3c4daed35b3393ea06e168ab669813a3278b60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 24 Sep 2013 18:06:08 +0200 Subject: [PATCH 05/33] gnu: racket: Add dependency on GTK+. * gnu/packages/scheme.scm (racket): Add dependency on GTK+ and gdk-pixbuf. --- gnu/packages/scheme.scm | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm index 43853fa08ca..b7df902136a 100644 --- a/gnu/packages/scheme.scm +++ b/gnu/packages/scheme.scm @@ -32,6 +32,7 @@ #:use-module (gnu packages avahi) #:use-module (gnu packages libphidget) #:use-module (gnu packages glib) + #:use-module (gnu packages gtk) #:use-module (gnu packages libffi) #:use-module (gnu packages libjpeg) #:use-module ((gnu packages gtk) #:select (cairo pango)) @@ -358,12 +359,15 @@ implementation techniques and as an expository tool.") '(#:phases (let* ((gui-libs (lambda (inputs) - ;; FIXME: Add GTK+ and GDK for DrRacket. - (let ((glib (string-append (assoc-ref inputs "glib") "/lib")) - (cairo (string-append (assoc-ref inputs "cairo") "/lib")) - (pango (string-append (assoc-ref inputs "pango") "/lib")) - (libjpeg (string-append (assoc-ref inputs "libjpeg") "/lib"))) - (list glib cairo pango libjpeg))))) + (define (lib input) + (string-append (assoc-ref inputs input) "/lib")) + + (list (lib "glib") + (lib "cairo") + (lib "pango") + (lib "libjpeg") + (lib "gtk") + (lib "gdk-pixbuf"))))) (alist-cons-before 'configure 'pre-configure (lambda* (#:key inputs #:allow-other-keys) @@ -397,7 +401,9 @@ implementation techniques and as an expository tool.") ("glib" ,glib) ; for DrRacket ("cairo" ,cairo) ("pango" ,pango) - ("libjpeg" ,libjpeg-8))) + ("libjpeg" ,libjpeg-8) + ("gdk-pixbuf" ,gdk-pixbuf) + ("gtk" ,gtk+))) (home-page "http://racket-lang.org") (synopsis "Implementation of Scheme and related languages") (description From 923206f79b2e3e1b7c4afbf03aae9c6b4f715d3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 24 Sep 2013 22:33:02 +0200 Subject: [PATCH 06/33] guix-register: Allow the initial directory creation to proceed. This fixes a bug whereby 'guix-register' would bail out when trying to create NIX_STORE_DIR/.links when NIX_STORE_DIR is read-only. * nix/guix-register/guix-register.cc (parse_opt): Initialize 'settings.nixStore' to PREFIX + NIX_STORE_DIR. (main): Change 'settings.nixStore' once the 'LocalStore' has been instantiated. --- nix/guix-register/guix-register.cc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/nix/guix-register/guix-register.cc b/nix/guix-register/guix-register.cc index 8f9c3c86abd..14478f6a130 100644 --- a/nix/guix-register/guix-register.cc +++ b/nix/guix-register/guix-register.cc @@ -75,7 +75,7 @@ parse_opt (int key, char *arg, struct argp_state *state) case 'p': { prefix = canonPath (arg); - settings.nixStore = NIX_STORE_DIR; + settings.nixStore = prefix + NIX_STORE_DIR; settings.nixDataDir = prefix + NIX_DATA_DIR; settings.nixLogDir = prefix + NIX_LOG_DIR; settings.nixStateDir = prefix + NIX_STATE_DIR; @@ -169,7 +169,15 @@ main (int argc, char *argv[]) { argp_parse (&argp, argc, argv, 0, 0, 0); + /* Instantiate the store. This creates any missing directories among + 'settings.nixStore', 'settings.nixDBPath', etc. */ LocalStore store; + + /* Under the --prefix tree, the final name of the store will be + NIX_STORE_DIR. Set it here so that the database uses file names + prefixed by NIX_STORE_DIR and not PREFIX + NIX_STORE_DIR. */ + settings.nixStore = NIX_STORE_DIR; + register_validity (&store, *input); } catch (std::exception &e) From 2d195e677562f34e00137561911a5b84796059f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 24 Sep 2013 22:37:51 +0200 Subject: [PATCH 07/33] gnu: guix: Set $localstatedir; add gzip as input. * gnu/packages/package-management.scm (guix): Add "--localstatedir=/var". Add GZIP as an explicit input, to avoid referring to the final gzip. --- gnu/packages/package-management.scm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm index e4eb0822307..87fa008002f 100644 --- a/gnu/packages/package-management.scm +++ b/gnu/packages/package-management.scm @@ -22,7 +22,7 @@ #:use-module (guix build-system gnu) #:use-module ((guix licenses) #:select (gpl3+)) #:use-module (gnu packages guile) - #:use-module ((gnu packages compression) #:select (bzip2)) + #:use-module ((gnu packages compression) #:select (bzip2 gzip)) #:use-module (gnu packages gnupg) #:use-module (gnu packages sqlite) #:use-module (gnu packages pkg-config)) @@ -41,6 +41,7 @@ (build-system gnu-build-system) (arguments `(#:configure-flags (list + "--localstatedir=/var" (string-append "--with-libgcrypt-prefix=" (assoc-ref %build-inputs "libgcrypt"))) @@ -70,6 +71,8 @@ "/20130105/guile-2.0.7.tar.xz")) (sha256 hash))))) `(("bzip2" ,bzip2) + ("gzip" ,gzip) + ("sqlite" ,sqlite) ("libgcrypt" ,libgcrypt) ("guile" ,guile-2.0) From 30f25b033c7fbcdcc7050b1655fc832252255c7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 24 Sep 2013 22:40:33 +0200 Subject: [PATCH 08/33] gnu: vm: Initialize the image's store. * gnu/system/vm.scm (qemu-image): Add 'initialize-store?' keyword parameter. Use 'guix-register' when INITIALIZE-STORE? is true. (system-qemu-image): Pass #:initialize-store? #t. --- gnu/packages/package-management.scm | 11 +++++++++++ gnu/system/vm.scm | 23 +++++++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm index 87fa008002f..e19ce04716c 100644 --- a/gnu/packages/package-management.scm +++ b/gnu/packages/package-management.scm @@ -103,3 +103,14 @@ A user-land free software distribution for GNU/Linux comes as part of Guix. Guix is based on the Nix package manager.") (license gpl3+))) + +(define-public guix-0.4 + ;; XXX: Hack to allow the use of a 0.4ish tarball. This assumes that you + ;; have run 'make dist' in your build tree. Remove when 0.4 is out. + (package (inherit guix) + (version "0.4rc") + (source (let ((builddir (dirname + (canonicalize-path + (dirname (search-path %load-path + "guix/config.scm")))))) + (string-append builddir "/guix-0.4.tar.gz"))))) diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index df55f7c94e8..a864ab3de3c 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -31,6 +31,7 @@ #:use-module (gnu packages grub) #:use-module (gnu packages linux) #:use-module (gnu packages linux-initrd) + #:use-module (gnu packages package-management) #:use-module ((gnu packages make-bootstrap) #:select (%guile-static-stripped)) #:use-module (gnu packages system) @@ -191,6 +192,7 @@ made available under the /xchg CIFS share." (system (%current-system)) (disk-image-size (* 100 (expt 2 20))) grub-configuration + (initialize-store? #f) (populate #f) (inputs '()) (inputs-to-copy '())) @@ -199,7 +201,8 @@ disk image, with a GRUB installation that uses GRUB-CONFIGURATION as its configuration file. INPUTS-TO-COPY is a list of inputs (as for packages) whose closure is copied -into the image being built. +into the image being built. When INITIALIZE-STORE? is true, initialize the +store database in the image so that Guix can be used in the image. When POPULATE is true, it must be the store file name of a Guile script to run in the disk image partition once it has been populated with INPUTS-TO-COPY. @@ -298,6 +301,20 @@ It can be used to provide additional files, such as /etc files." ;; Populate /dev. (make-essential-device-nodes #:root "/fs") + ;; Optionally, register the inputs in the image's store. + (let* ((guix (assoc-ref %build-inputs "guix")) + (register (string-append guix + "/sbin/guix-register"))) + ,@(if initialize-store? + (match inputs-to-copy + (((graph-files . _) ...) + (map (lambda (closure) + `(system* register "--prefix" "/fs" + ,(string-append "/xchg/" + closure))) + graph-files))) + '(#f))) + (and=> (assoc-ref %build-inputs "populate") (lambda (populate) (chdir "/fs") @@ -415,7 +432,8 @@ It can be used to provide additional files, such as /etc files." (qemu-image store #:grub-configuration grub.cfg #:populate populate - #:disk-image-size (* 400 (expt 2 20)) + #:disk-image-size (* 500 (expt 2 20)) + #:initialize-store? #t #:inputs-to-copy `(("boot" ,boot) ("linux" ,linux-libre) ("initrd" ,gnu-system-initrd) @@ -424,6 +442,7 @@ It can be used to provide additional files, such as /etc files." ("guile" ,guile-2.0) ("mingetty" ,mingetty) ("dmd" ,dmd) + ("guix" ,guix-0.4) ;; Configuration. ("dmd.conf" ,dmd-conf) From 9fcc355529838f86f963dbdd7e47c0308df95a29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 24 Sep 2013 23:15:09 +0200 Subject: [PATCH 09/33] gnu: vm: Add a service for the Guix daemon. * gnu/system/dmd.scm (guix-service): New procedure. * gnu/system/vm.scm (system-qemu-image): Use it. --- gnu/system/dmd.scm | 14 ++++++++++++++ gnu/system/vm.scm | 3 ++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/gnu/system/dmd.scm b/gnu/system/dmd.scm index 1e8767e3572..a502c42e038 100644 --- a/gnu/system/dmd.scm +++ b/gnu/system/dmd.scm @@ -23,6 +23,8 @@ #:use-module (guix records) #:use-module ((gnu packages system) #:select (mingetty inetutils)) + #:use-module ((gnu packages package-management) + #:select (guix)) #:use-module (ice-9 match) #:use-module (srfi srfi-1) #:export (service? @@ -36,6 +38,7 @@ syslog-service mingetty-service + guix-service dmd-configuration-file)) ;;; Commentary: @@ -104,6 +107,17 @@ (inputs `(("inetutils" ,inetutils) ("syslog.conf" ,syslog.conf)))))) +(define* (guix-service store #:key (guix guix)) + "Return a service that runs the build daemon from GUIX." + (let* ((drv (package-derivation store guix)) + (daemon (string-append (derivation->output-path drv) + "/bin/guix-daemon"))) + (service + (provision '(guix-daemon)) + (start `(make-forkexec-constructor ,daemon)) + (inputs `(("guix" ,guix)))))) + + (define (dmd-configuration-file store services) "Return the dmd configuration file for SERVICES." (define config diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index a864ab3de3c..64d778b6022 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -382,7 +382,8 @@ It can be used to provide additional files, such as /etc files." (list (mingetty-service store "tty1") (mingetty-service store "tty2") (mingetty-service store "tty3") - (syslog-service store))) + (syslog-service store) + (guix-service store #:guix guix-0.4))) (parameterize ((%guile-for-build (package-derivation store guile-final))) (let* ((bash-drv (package-derivation store bash)) From f1dfb7c47c2cb7ca972d0379640838719af9a118 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 25 Sep 2013 00:13:06 +0200 Subject: [PATCH 10/33] gnu: guix: Rework 0.4 hack to gracefully handle lack of tarball. * gnu/packages/package-management.scm (guix-0.4): Fall back to the source of GIUX when the tarball doesn't exist. --- gnu/packages/package-management.scm | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm index e19ce04716c..ccd15cef6f7 100644 --- a/gnu/packages/package-management.scm +++ b/gnu/packages/package-management.scm @@ -107,10 +107,16 @@ Guix is based on the Nix package manager.") (define-public guix-0.4 ;; XXX: Hack to allow the use of a 0.4ish tarball. This assumes that you ;; have run 'make dist' in your build tree. Remove when 0.4 is out. - (package (inherit guix) - (version "0.4rc") - (source (let ((builddir (dirname - (canonicalize-path - (dirname (search-path %load-path - "guix/config.scm")))))) - (string-append builddir "/guix-0.4.tar.gz"))))) + (let* ((builddir (dirname + (canonicalize-path + (dirname (search-path %load-path + "guix/config.scm"))))) + (tarball (string-append builddir "/guix-0.4.tar.gz"))) + (package (inherit guix) + (version "0.4rc") + (source (if (file-exists? tarball) + tarball + (begin + (format (current-error-port) + "warning: 'guix-0.4.tar.gz' not found~%") + (package-source guix))))))) From b972db72751c508c4830aad38bb51ddc67ceab69 Mon Sep 17 00:00:00 2001 From: Andreas Enge Date: Wed, 25 Sep 2013 09:48:13 +0200 Subject: [PATCH 11/33] gnu: fontconfig: Add and register gs-fonts. * gnu/packages/fontutils.scm (fontconfig): Add gs-fonts as an input and register it in the configuration file; so any porgram using fontconfig should at least have the gs-fonts at its disposal. --- gnu/packages/fontutils.scm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm index 8b5e9c582a8..ac0dbdf9d53 100644 --- a/gnu/packages/fontutils.scm +++ b/gnu/packages/fontutils.scm @@ -19,6 +19,7 @@ (define-module (gnu packages fontutils) #:use-module (gnu packages) #:use-module (gnu packages compression) + #:use-module (gnu packages ghostscript) #:use-module (gnu packages pkg-config) #:use-module (gnu packages xml) #:use-module ((guix licenses) #:renamer (symbol-prefix-proc 'license:)) @@ -75,11 +76,16 @@ anti-aliased glyph bitmap generation with 256 gray levels.") (build-system gnu-build-system) (inputs `(("expat" ,expat) ("freetype" ,freetype) + ("gs-fonts" ,gs-fonts) ("pkg-config" ,pkg-config))) (arguments `(#:configure-flags - ;; point to user profile instead of /usr/share/fonts in /etc/fonts.conf - `("--with-default-fonts=~/.guix-profile/share/fonts"))) + ;; point to user profile instead of /usr/share/fonts in /etc/fonts.conf + (list "--with-default-fonts=~/.guix-profile/share/fonts" + ;; register gs-fonts + (string-append "--with-add-fonts=" + (assoc-ref %build-inputs "gs-fonts") + "/share/fonts")))) (synopsis "Fontconfig, a library for configuring and customising font access.") (description "Fontconfig can discover new fonts when installed automatically; From 78c7e3449fcb53b7bd7f534481cb51fab13b4746 Mon Sep 17 00:00:00 2001 From: Andreas Enge Date: Wed, 25 Sep 2013 11:08:16 +0200 Subject: [PATCH 12/33] gnu: pspp: Update to 0.8.1. * gnu/packages/maths.scm (pspp): Update to 0.8.1. --- gnu/packages/maths.scm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm index 75354122b5c..c72d6074ab8 100644 --- a/gnu/packages/maths.scm +++ b/gnu/packages/maths.scm @@ -108,7 +108,7 @@ extensive test suite.") (define-public pspp (package (name "pspp") - (version "0.8.0a") + (version "0.8.1") (source (origin (method url-fetch) @@ -116,7 +116,7 @@ extensive test suite.") version ".tar.gz")) (sha256 (base32 - "1pgkb3z8b4wk4gymnafclhkrqq7n05wq83mra3v53jdl6bnllmyq")))) + "0qhxsdbwxd3cn1shc13wxvx2lg32lp4z6sz24kv3jz7p5xfi8j7x")))) (build-system gnu-build-system) (inputs `(("gettext" ,gnu:gettext) From f1be8061834fdc03b23269b9b3d3209f9c921d40 Mon Sep 17 00:00:00 2001 From: Andreas Enge Date: Wed, 25 Sep 2013 11:41:52 +0200 Subject: [PATCH 13/33] gnu: gnupg: Update to 2.0.21. * gnu/packages/gnupg.scm (gnupg): Update to 2.0.21. --- gnu/packages/gnupg.scm | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm index 7c0f50900ab..3061b9fac69 100644 --- a/gnu/packages/gnupg.scm +++ b/gnu/packages/gnupg.scm @@ -131,7 +131,7 @@ specifications are building blocks of S/MIME and TLS.") (define-public gnupg (package (name "gnupg") - (version "2.0.20") + (version "2.0.21") (source (origin (method url-fetch) @@ -139,12 +139,10 @@ specifications are building blocks of S/MIME and TLS.") ".tar.bz2")) (sha256 (base32 - "16mp0j5inrcqcb3fxbn0b3aamascy3n923wiy0y8marc0rzrp53f")))) + "1xgf1q1phdawk6y66haaqcvfnlsqk12jmjin1m2d5x6fqw18kpq0")))) (build-system gnu-build-system) (inputs - `(;; TODO: Add missing optional dep libusb. -;; ("libusb" ,libusb) - ("bzip2" ,guix:bzip2) + `(("bzip2" ,guix:bzip2) ("curl" ,curl) ("libassuan" ,libassuan) ("libgcrypt" ,libgcrypt) From 24f3e788d0c5072c33d4e79fe2f4b47c931f8544 Mon Sep 17 00:00:00 2001 From: Andreas Enge Date: Wed, 25 Sep 2013 13:43:20 +0200 Subject: [PATCH 14/33] gnu: libgcrypt: Update to 1.5.3 * gnu/packages/gnupg.scm (libgcrypt): Update to 1.5.3. --- gnu/packages/gnupg.scm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm index 3061b9fac69..7aea180b2d2 100644 --- a/gnu/packages/gnupg.scm +++ b/gnu/packages/gnupg.scm @@ -57,14 +57,14 @@ Daemon and possibly more in the future.") (define-public libgcrypt (package (name "libgcrypt") - (version "1.5.2") + (version "1.5.3") (source (origin (method url-fetch) (uri (string-append "mirror://gnupg/libgcrypt/libgcrypt-" version ".tar.bz2")) (sha256 (base32 - "0gwnzqd64cpwdmk93nll54nidsr74jpimxzj4p4z7502ylwl66p4")))) + "1lar8y3lh61zl5flljpz540d78g99h4d5idfwrfw8lm3gm737xdw")))) (build-system gnu-build-system) (propagated-inputs `(("libgpg-error" ,libgpg-error))) From 98fbd7ceebd7930f23a8985b9080d3a7cac7818a Mon Sep 17 00:00:00 2001 From: Andreas Enge Date: Wed, 25 Sep 2013 13:46:34 +0200 Subject: [PATCH 15/33] gnu: libksba: Update to 1.3.0. * gnu/packages/gnupg.scm (libksba): Update to 1.3.0. --- gnu/packages/gnupg.scm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm index 7aea180b2d2..c098db3315b 100644 --- a/gnu/packages/gnupg.scm +++ b/gnu/packages/gnupg.scm @@ -106,7 +106,7 @@ provided.") (define-public libksba (package (name "libksba") - (version "1.2.0") + (version "1.3.0") (source (origin (method url-fetch) @@ -115,7 +115,7 @@ provided.") version ".tar.bz2")) (sha256 (base32 - "0jwk7hm3x3g4hd7l12z3d79dy7359x7lc88dq6z7q0ixn1jwxbq9")))) + "0w8rfb6yhcwkwzvjafrashcygy4hd9xwwmvlnkfd1m2h0paywqas")))) (build-system gnu-build-system) (propagated-inputs `(("libgpg-error" ,libgpg-error))) From 0ab212b9466d5aa3fe801c9137248703245d8513 Mon Sep 17 00:00:00 2001 From: Nikita Karetnikov Date: Tue, 24 Sep 2013 22:11:16 +0000 Subject: [PATCH 16/33] guix package: Exit with 1 when a generation cannot be listed. * guix/scripts/package.scm (guix-package)[process-query]: Exit with 1 when a generation does not exist or the profile points to the zeroth generation. * tests/guix-package.sh: Test the former case. --- guix/scripts/package.scm | 11 ++++++++--- tests/guix-package.sh | 4 ++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index 1d00e395404..1f21890fcd1 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -977,11 +977,16 @@ more information.~%")) (leave (_ "profile '~a' does not exist~%") profile)) ((string-null? pattern) - (for-each list-generation - (generation-numbers profile))) + (let ((numbers (generation-numbers profile))) + (if (equal? numbers '(0)) + (exit 1) + (for-each list-generation numbers)))) ((matching-generations pattern profile) => - (cut for-each list-generation <>)) + (lambda (numbers) + (if (null-list? numbers) + (exit 1) + (for-each list-generation numbers)))) (else (leave (_ "invalid syntax: ~a~%") pattern))) diff --git a/tests/guix-package.sh b/tests/guix-package.sh index b09a9c0173d..f1f7ee6c7d5 100644 --- a/tests/guix-package.sh +++ b/tests/guix-package.sh @@ -85,6 +85,10 @@ then test "`guix package -p "$profile" -l | cut -f1 | grep guile | head -n1`" \ = " guile-bootstrap" + # Exit with 1 when a generation does not exist. + if guix package -p "$profile" --list-generations=42; + then false; else true; fi + # Remove a package. guix package --bootstrap -p "$profile" -r "guile-bootstrap" test -L "$profile-3-link" From 4b2bc804d861ff5ba550dac0b56f1fe44f079847 Mon Sep 17 00:00:00 2001 From: Nikita Karetnikov Date: Tue, 24 Sep 2013 22:18:09 +0000 Subject: [PATCH 17/33] guix package: Do not list the zeroth generation. * guix/scripts/package.scm (guix-package)[process-query]: Change 'list-generation' to not list the zeroth generation. * tests/guix-package.sh: Test it. * doc/guix.texi (Invoking guix package): Document it, and use the right term when talking about generations. --- doc/guix.texi | 8 ++++---- guix/scripts/package.scm | 2 +- tests/guix-package.sh | 3 +++ 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 90016a44963..442cef26da1 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -583,9 +583,8 @@ When combined with options such as @code{--install}, roll back occurs before any other actions. When rolling back from the first generation that actually contains -installed packages, the profile is made to point to the @dfn{empty -profile}, also known as @dfn{profile zero}---i.e., it contains no files -apart from its own meta-data. +installed packages, the profile is made to point to the @dfn{zeroth +generation}, which contains no files apart from its own meta-data. Installing, removing, or upgrading packages from a generation that has been rolled back to overwrites previous future generations. Thus, the @@ -683,7 +682,8 @@ Multiple Outputs}), and the source location of its definition. @itemx -l [@var{pattern}] Return a list of generations along with their creation dates; for each generation, show the installed packages, with the most recently -installed packages shown last. +installed packages shown last. Note that the zeroth generation is never +shown. For each installed package, print the following items, separated by tabs: the name of a package, its version string, the part of the package diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index 1f21890fcd1..dab3d5bb0c9 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -955,7 +955,7 @@ more information.~%")) (match (assoc-ref opts 'query) (('list-generations pattern) (define (list-generation number) - (begin + (unless (zero? number) (format #t (_ "Generation ~a\t~a~%") number (date->string (time-utc->date diff --git a/tests/guix-package.sh b/tests/guix-package.sh index f1f7ee6c7d5..7130926404f 100644 --- a/tests/guix-package.sh +++ b/tests/guix-package.sh @@ -111,6 +111,9 @@ then test "`readlink_base "$profile"`" = "$profile-0-link" done + # Test that '--list-generations' does not output the zeroth generation. + test -z "`guix package -p "$profile" -l 0`" + # Reinstall after roll-back to the empty profile. guix package --bootstrap -p "$profile" -e "$boot_make" test "`readlink_base "$profile"`" = "$profile-1-link" From aad5af9f40951bac7c8822b754aa20946b2cb8a4 Mon Sep 17 00:00:00 2001 From: Nikita Karetnikov Date: Tue, 24 Sep 2013 00:36:51 +0000 Subject: [PATCH 18/33] tests: Use 'test -z' to check that a string equals zero. --- tests/guix-package.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/guix-package.sh b/tests/guix-package.sh index 7130926404f..524ff32f170 100644 --- a/tests/guix-package.sh +++ b/tests/guix-package.sh @@ -79,7 +79,7 @@ then # Search. test "`guix package -s "An example GNU package" | grep ^name:`" = \ "name: hello" - test "`guix package -s "n0t4r341p4ck4g3"`" = "" + test -z "`guix package -s "n0t4r341p4ck4g3"`" # List generations. test "`guix package -p "$profile" -l | cut -f1 | grep guile | head -n1`" \ From 9ac9360d6e86e7d16756d8e28ce61e288551c2db Mon Sep 17 00:00:00 2001 From: Nikita Karetnikov Date: Wed, 25 Sep 2013 01:55:27 +0000 Subject: [PATCH 19/33] guix package: Show which generation is the current one. * guix/scripts/package.scm (guix-package)[process-query]: Show that a generation is the current one if the profile points to it. * tests/guix-package.sh: Test it. --- guix/scripts/package.scm | 14 +++++++++----- tests/guix-package.sh | 3 +++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index dab3d5bb0c9..66505f172f4 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -956,11 +956,15 @@ more information.~%")) (('list-generations pattern) (define (list-generation number) (unless (zero? number) - (format #t (_ "Generation ~a\t~a~%") number - (date->string - (time-utc->date - (generation-time profile number)) - "~b ~d ~Y ~T")) + (let ((header (format #f (_ "Generation ~a\t~a") number + (date->string + (time-utc->date + (generation-time profile number)) + "~b ~d ~Y ~T"))) + (current (generation-number profile))) + (if (= number current) + (format #t (_ "~a\t(current)~%") header) + (format #t "~a~%" header))) (for-each (match-lambda ((name version output location _) (format #t " ~a\t~a\t~a\t~a~%" diff --git a/tests/guix-package.sh b/tests/guix-package.sh index 524ff32f170..5f97aff0260 100644 --- a/tests/guix-package.sh +++ b/tests/guix-package.sh @@ -119,6 +119,9 @@ then test "`readlink_base "$profile"`" = "$profile-1-link" test -x "$profile/bin/guile" && ! test -x "$profile/bin/make" + # Check that the first generation is the current one. + test "`guix package -p "$profile" -l 1 | cut -f3 | head -n1`" = "(current)" + # Roll-back to generation 0, and install---all at once. guix package --bootstrap -p "$profile" --roll-back -i guile-bootstrap test "`readlink_base "$profile"`" = "$profile-1-link" From 8f37bf620054f6a331464d1ac69d97c2288524e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 25 Sep 2013 17:27:10 +0200 Subject: [PATCH 20/33] Update 'NEWS'. --- NEWS | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/NEWS b/NEWS index e7cb112bec9..1e816d98f5f 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,94 @@ Copyright © 2013 Ludovic Courtès Please send Guix bug reports to bug-guix@gnu.org. +* Changes in 0.4 (since 0.3) + +** Package management + +*** New ‘--list-generations’ and ‘--delete-generations’ options + +The ‘guix package’ command has these two new options, which make it easier to +deal with a profile’s generation. See “Invoking guix package” in the manual. + +*** New ‘guix-register’ program + +This program allows the meta-data of a new store to be initialized, by +copying info from an existing store. It is mostly an internal tool. + +** Programming interfaces + +*** New API to bootstrap Autotools-based packages + +The (guix build-system gnu) has a new ‘dist-package’ procedure that takes a +package object and source directory, and returns a new package object that +runs ‘./bootstrap && make dist’ or anything similar. + +*** ‘derivation’ and related procedures have a #:references-graphs parameter + +This parameter instructs the build daemon to populate the derivation’s build +tree with files containing the list of references of the given store files. +This is useful to write code that copies a packages and all its dependencies +to another storage device, such as a QEMU disk image. + +*** Extended API to build a GNU system virtual machine image + +The (gnu system vm) module has been augmented in many ways: the ‘qemu-image’ +procedure can now populate and initialize the image’s store; the new +‘system-qemu-image’ procedure returns a QEMU image that runs dmd as its init +system, has ‘login’ running on several consoles, has a set of installed +packages, and where Guix can be used. + +New (gnu system …) modules have been added to handle the configuration of the +various parts of a GNU/Linux system. For instance, (gnu system dmd) provides +support for instantiating dmd services; (gnu system linux) helps with Linux +PAM configuration; and so on. + +*** objects supersede .drv file names in the API + +‘derivation’ and similar procedures no longer return two values (a + and a .drv file name); they now return a single value, which is +a object. The object embeds the corresponding .drv +file name. See “Derivations” in the manual for details. + +** GNU distribution + +*** XXX new packages + +*** XXX package updates + +*** Fontconfig font search path made more convenient + +Fontconfig, the library used by many graphical applications, such as those +based on GTK+, now knows where to find the default set of fonts. Additional +fonts installed in the user profile are automatically picked up. + +*** More GUI applications + +The ‘emacs’ and ‘racket’ packages are now linked against GTK+. New GTK+ +applications have been added (see above.) + +*** Packaging guidelines + +The documentation of packaging guidelines has been augmented. See the manual +under “GNU Distribution”. + +*** Support for Python 3 along with Python 2 + +Python 3 has been added to the distribution, and Python packages that support +it are now built for both Python 2 and Python 3. See the “Python Modules” +section of the manual for details. + +** Internationalization + +Updated translations: eo. + +** Bugs fixed + +*** The dependency graph image has correct size in PDF output +*** Hop 2.4 builds with newer Bigloo (http://bugs.gnu.org/15194) +*** Xorg server test suite no longer fails (http://bugs.gnu.org/15392) +*** Workarounds for Guile 2.0.5 now work on Debian derivatives + * Changes in 0.3 (since 0.2) From 37c58656ebb499d32275829aacfa2a99e22d654a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 25 Sep 2013 17:27:02 +0200 Subject: [PATCH 21/33] gnu: vm: Support derivation objects as inputs. * gnu/system/vm.scm (expression->derivation-in-linux-vm)[input-alist]: Add case for derivation? objects. Same for #:inputs values. (qemu-image)[input->name+derivation]: Likewise. --- gnu/system/vm.scm | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index 64d778b6022..88f12ea33a1 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -92,6 +92,10 @@ made available under the /xchg CIFS share." `(,input . ,(package-output store package "out" system))) ((input (? package? package) sub-drv) `(,input . ,(package-output store package sub-drv system))) + ((input (? derivation? drv)) + `(,input . ,(derivation->output-path drv))) + ((input (? derivation? drv) sub-drv) + `(,input . ,(derivation->output-path drv sub-drv))) ((input (and (? string?) (? store-path?) file)) `(,input . ,file))) inputs)) @@ -178,7 +182,8 @@ made available under the /xchg CIFS share." `(,name ,(->drv package) ,@sub-drv)) ((name (? string? file)) - `(,name ,file))) + `(,name ,file)) + (tuple tuple)) inputs)) #:env-vars env-vars #:modules (delete-duplicates @@ -216,6 +221,10 @@ It can be used to provide additional files, such as /etc files." `(,name . ,(derivation->output-path (package-derivation store package system) sub-drv))) + ((name (? derivation? drv)) + `(,name . ,(derivation->output-path drv))) + ((name (? derivation? drv) sub-drv) + `(,name . ,(derivation->output-path drv sub-drv))) ((input (and (? string?) (? store-path?) file)) `(,input . ,file)))) From 0b86a82dc7e649e4ae551edefba445690a315b83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 25 Sep 2013 17:30:29 +0200 Subject: [PATCH 22/33] gnu: vm: Make a union of the visible packages; add /etc/profile. * gnu/system/vm.scm (qemu-image): Add Guix as an input when INITIALIZE-STORE?. (union): New procedure. (system-qemu-image): Use it. Build /etc/profile. Pass PROFILE among #:inputs-to-copy instead of listing all the individual profiles. Remove explicit 'build-derivations' call. --- gnu/system/vm.scm | 71 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 64 insertions(+), 7 deletions(-) diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index 88f12ea33a1..95155548d04 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -23,6 +23,8 @@ #:use-module (guix packages) #:use-module ((gnu packages base) #:select (%final-inputs guile-final + gcc-final + glibc-final coreutils)) #:use-module (gnu packages guile) #:use-module (gnu packages bash) @@ -366,6 +368,9 @@ It can be used to provide additional files, such as /etc files." ,@(if populate `(("populate" ,populate)) '()) + ,@(if initialize-store? + `(("guix" ,guix-0.4)) + '()) ,@inputs-to-copy) #:make-disk-image? #t @@ -379,6 +384,38 @@ It can be used to provide additional files, such as /etc files." ;;; Stand-alone VM image. ;;; +(define* (union store inputs + #:key (guile (%guile-for-build)) (system (%current-system)) + (name "union")) + "Return a derivation that builds the union of INPUTS. INPUTS is a list of +input tuples." + (define builder + `(begin + (use-modules (guix build union)) + + (setvbuf (current-output-port) _IOLBF) + (setvbuf (current-error-port) _IOLBF) + + (let ((output (assoc-ref %outputs "out")) + (inputs (map cdr %build-inputs))) + (format #t "building union `~a' with ~a packages...~%" + output (length inputs)) + (union-build output inputs)))) + + (build-expression->derivation store name system builder + (map (match-lambda + ((name (? package? p)) + `(,name ,(package-derivation store p + system))) + ((name (? package? p) output) + `(,name ,(package-derivation store p + system) + ,output)) + (x x)) + inputs) + #:modules '((guix build union)) + #:guile-for-build guile)) + (define (system-qemu-image store) "Return the derivation of a QEMU image of the GNU system." (define %pam-services @@ -410,6 +447,29 @@ It can be used to provide additional files, such as /etc files." "root:x:0:\n")) (pam.d-drv (pam-services->directory store %pam-services)) (pam.d (derivation->output-path pam.d-drv)) + + (packages `(("coreutils" ,coreutils) + ("bash" ,bash) + ("guile" ,guile-2.0) + ("dmd" ,dmd) + ("gcc" ,gcc-final) + ("libc" ,glibc-final) + ("guix" ,guix-0.4))) + + ;; TODO: Replace with a real profile with a manifest. + ;; TODO: Generate bashrc from packages' search-paths. + (profile-drv (union store packages + #:name "default-profile")) + (profile (derivation->output-path profile-drv)) + (bashrc (add-text-to-store store "bashrc" + (string-append " +export PATH=$HOME/.guix-profile/bin:" profile "/bin:" profile "/sbin +export CPATH=$HOME/.guix-profile/include:" profile "/include +export LIBRARY_PATH=$HOME/.guix-profile/lib:" profile "/lib +alias ls='ls -p --color' +alias ll='ls -l' +"))) + (populate (add-text-to-store store "populate-qemu-image" (object->string @@ -422,6 +482,7 @@ It can be used to provide additional files, such as /etc files." (symlink "/dev/null" "etc/login.defs") (symlink ,pam.d "etc/pam.d") + (symlink ,bashrc "etc/profile") (mkdir-p "var/run"))) (list passwd))) (out (derivation->output-path @@ -438,7 +499,6 @@ It can be used to provide additional files, such as /etc files." ,(string-append "--load=" boot))) (initrd gnu-system-initrd)))) (grub.cfg (grub-configuration-file store entries))) - (build-derivations store (list pam.d-drv)) (qemu-image store #:grub-configuration grub.cfg #:populate populate @@ -447,12 +507,8 @@ It can be used to provide additional files, such as /etc files." #:inputs-to-copy `(("boot" ,boot) ("linux" ,linux-libre) ("initrd" ,gnu-system-initrd) - ("coreutils" ,coreutils) - ("bash" ,bash) - ("guile" ,guile-2.0) - ("mingetty" ,mingetty) - ("dmd" ,dmd) - ("guix" ,guix-0.4) + ("pam.d" ,pam.d-drv) + ("profile" ,profile-drv) ;; Configuration. ("dmd.conf" ,dmd-conf) @@ -460,6 +516,7 @@ It can be used to provide additional files, such as /etc files." ("etc-passwd" ,passwd) ("etc-shadow" ,shadow) ("etc-group" ,group) + ("etc-bashrc" ,bashrc) ,@(append-map service-inputs %dmd-services)))))) From 65d195e140e18715f7f7fb4c5d219040ce773482 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 25 Sep 2013 17:33:02 +0200 Subject: [PATCH 23/33] gnu: vm: Change GRUB label. * gnu/system/vm.scm (system-qemu-image): Change GRUB label. --- gnu/system/vm.scm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index 95155548d04..11c76c67f32 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -493,7 +493,10 @@ alias ll='ls -l' "--config" ,dmd-conf)) (list out))) (entries (list (menu-entry - (label "Boot-to-Guile! (GNU System technology preview)") + (label (string-append + "GNU System with Linux-Libre " + (package-version linux-libre) + " (technology preview)")) (linux linux-libre) (linux-arguments `("--root=/dev/vda1" ,(string-append "--load=" boot))) From 25eb16bf3b471525fbf18889f1654ab04db959ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 25 Sep 2013 17:33:27 +0200 Subject: [PATCH 24/33] gnu: vm: Add more ttys. * gnu/system/vm.scm (system-qemu-image): Add more ttys. --- gnu/system/vm.scm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index 11c76c67f32..d8c2b95d753 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -428,6 +428,9 @@ input tuples." (list (mingetty-service store "tty1") (mingetty-service store "tty2") (mingetty-service store "tty3") + (mingetty-service store "tty4") + (mingetty-service store "tty5") + (mingetty-service store "tty6") (syslog-service store) (guix-service store #:guix guix-0.4))) From d5d0f286a27506bc4545d4531d606ba9ac4f1944 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 25 Sep 2013 18:01:44 +0200 Subject: [PATCH 25/33] gnu: vm: Change #:populate to a list of directives. * gnu/system/vm.scm (qemu-image): Change 'populate' parameter to be a list of directives. (system-qemu-image): Adjust accordingly. --- gnu/system/vm.scm | 49 +++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index d8c2b95d753..a0669ae8650 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -211,9 +211,10 @@ INPUTS-TO-COPY is a list of inputs (as for packages) whose closure is copied into the image being built. When INITIALIZE-STORE? is true, initialize the store database in the image so that Guix can be used in the image. -When POPULATE is true, it must be the store file name of a Guile script to run -in the disk image partition once it has been populated with INPUTS-TO-COPY. -It can be used to provide additional files, such as /etc files." +POPULATE is a list of directives stating directories or symlinks to be created +in the disk image partition. It is evaluated once the image has been +populated with INPUTS-TO-COPY. It can be used to provide additional files, +such as /etc files." (define input->name+derivation (match-lambda ((name (? package? package)) @@ -326,6 +327,22 @@ It can be used to provide additional files, such as /etc files." graph-files))) '(#f))) + ;; Evaluate the POPULATE directives. + ,@(let loop ((directives populate) + (statements '())) + (match directives + (() + (reverse statements)) + ((('directory name) rest ...) + (loop rest + (cons `(mkdir-p ,(string-append "/fs" name)) + statements))) + (((new '-> old) rest ...) + (loop rest + (cons `(symlink ,old + ,(string-append "/fs" new)) + statements))))) + (and=> (assoc-ref %build-inputs "populate") (lambda (populate) (chdir "/fs") @@ -365,9 +382,6 @@ It can be used to provide additional files, such as /etc files." ("gawk" ,(car (assoc-ref %final-inputs "gawk"))) ("util-linux" ,util-linux) - ,@(if populate - `(("populate" ,populate)) - '()) ,@(if initialize-store? `(("guix" ,guix-0.4)) '()) @@ -473,21 +487,14 @@ alias ls='ls -p --color' alias ll='ls -l' "))) - (populate - (add-text-to-store store "populate-qemu-image" - (object->string - `(begin - (mkdir-p "etc") - (mkdir-p "var/log") ; for dmd - (symlink ,shadow "etc/shadow") - (symlink ,passwd "etc/passwd") - (symlink ,group "etc/group") - (symlink "/dev/null" - "etc/login.defs") - (symlink ,pam.d "etc/pam.d") - (symlink ,bashrc "etc/profile") - (mkdir-p "var/run"))) - (list passwd))) + (populate `((directory "/etc") + (directory "/var/log") + (directory "/var/run") + ("/etc/shadow" -> ,shadow) + ("/etc/passwd" -> ,passwd) + ("/etc/login.defs" -> "/dev/null") + ("/etc/pam.d" -> ,pam.d) + ("/etc/profile" -> ,bashrc))) (out (derivation->output-path (package-derivation store mingetty))) (boot (add-text-to-store store "boot" From d09cb44967e6ee6266ea1a0e566c78a39dc26830 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 25 Sep 2013 21:25:47 +0200 Subject: [PATCH 26/33] Update 'eo.po'. --- po/eo.po | 346 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 201 insertions(+), 145 deletions(-) diff --git a/po/eo.po b/po/eo.po index b5f56f2cd42..ab1d82ff15b 100644 --- a/po/eo.po +++ b/po/eo.po @@ -5,16 +5,17 @@ # msgid "" msgstr "" -"Project-Id-Version: guix 0.3-pre3\n" +"Project-Id-Version: guix 0.4-pre2\n" "Report-Msgid-Bugs-To: ludo@gnu.org\n" -"POT-Creation-Date: 2013-08-15 11:44+0200\n" -"PO-Revision-Date: 2013-07-25 09:25-0300\n" +"POT-Creation-Date: 2013-09-25 16:04+0200\n" +"PO-Revision-Date: 2013-09-25 15:53-0300\n" "Last-Translator: Felipe Castro \n" "Language-Team: Esperanto \n" -"Language: eo\n" +"Language: Esperanto\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.5.4\n" #: gnu/packages.scm:94 #, scheme-format @@ -52,15 +53,13 @@ msgid "" "Sed (stream editor) isn't really a true text editor or text processor.\n" "Instead, it is used to filter text, i.e., it takes text input and performs\n" "some operation (or set of operations) on it and outputs the modified text.\n" -"Sed is typically used for extracting part of a file using pattern matching " -"or\n" +"Sed is typically used for extracting part of a file using pattern matching or\n" "substituting multiple occurrences of a string within a file." msgstr "" "Sed (flu-redaktilo) ne estas fakte vera tekst-redaktilo aŭ tekst-procezilo.\n" "Anstataŭe, ĝi estas uzata por filtri tekston, t.e., ĝi prenas tekston kaj\n" "aplikas iun operacion (aŭ aron) al ĝi kaj eligas la modifitan tekston.\n" -"Sed ordinare estas uzata por eltiri parton de dosiero per ŝablon-kongruon " -"aŭ\n" +"Sed ordinare estas uzata por eltiri parton de dosiero per ŝablon-kongruon aŭ\n" "por anstataŭigi multoblajn aperojn de ĉeno interne de dosiero." #: gnu/packages/base.scm:140 @@ -77,8 +76,7 @@ msgid "" "Initially, tar archives were used to store files conveniently on magnetic\n" "tape. The name \"Tar\" comes from this use; it stands for tape archiver.\n" "Despite the utility's name, Tar can direct its output to available devices,\n" -"files, or other programs (using pipes), it can even access remote devices " -"or\n" +"files, or other programs (using pipes), it can even access remote devices or\n" "files (as archives)." msgstr "" @@ -89,8 +87,7 @@ msgstr "Apliki malsamojn al originaloj, kun nedevigaj savkopioj" #: gnu/packages/base.scm:175 msgid "" "GNU Patch takes a patch file containing a difference listing produced by\n" -"the diff program and applies those differences to one or more original " -"files,\n" +"the diff program and applies those differences to one or more original files,\n" "producing patched versions." msgstr "" @@ -104,25 +101,21 @@ msgid "" "differences between files.\n" "\n" "Computer users often find occasion to ask how two files differ. Perhaps one\n" -"file is a newer version of the other file. Or maybe the two files started " -"out\n" +"file is a newer version of the other file. Or maybe the two files started out\n" "as identical copies but were changed by different people.\n" "\n" "You can use the diff command to show differences between two files, or each\n" -"corresponding file in two directories. diff outputs differences between " -"files\n" +"corresponding file in two directories. diff outputs differences between files\n" "line by line in any of several formats, selectable by command line\n" "options. This set of differences is often called a ‘diff’ or ‘patch’. For\n" "files that are identical, diff normally produces no output; for\n" -"binary (non-text) files, diff normally reports only that they are " -"different.\n" +"binary (non-text) files, diff normally reports only that they are different.\n" "\n" "You can use the cmp command to show the offsets and line numbers where two\n" "files differ. cmp can also show all the characters that differ between the\n" "two files, side by side.\n" "\n" -"You can use the diff3 command to show differences among three files. When " -"two\n" +"You can use the diff3 command to show differences among three files. When two\n" "people have made independent changes to a common original, diff3 can report\n" "the differences between the original and the two changed versions, and can\n" "produce a merged file that contains both persons' changes together with\n" @@ -139,8 +132,7 @@ msgstr "Operacio sur dosieroj kongruantaj al indikia kriterio" msgid "" "The GNU Find Utilities are the basic directory searching utilities of\n" "the GNU operating system. These programs are typically used in conjunction\n" -"with other programs to provide modular and powerful directory search and " -"file\n" +"with other programs to provide modular and powerful directory search and file\n" "locating capabilities to other commands.\n" "\n" "The tools supplied with this package are:\n" @@ -172,10 +164,8 @@ msgid "" "non-source files of a program from the program's source files.\n" "\n" "Make gets its knowledge of how to build your program from a file called the\n" -"makefile, which lists each of the non-source files and how to compute it " -"from\n" -"other files. When you write a program, you should write a makefile for it, " -"so\n" +"makefile, which lists each of the non-source files and how to compute it from\n" +"other files. When you write a program, you should write a makefile for it, so\n" "that it is possible to use Make to build and install the program." msgstr "" @@ -197,12 +187,10 @@ msgstr "La Biblioteko GNU C" #: gnu/packages/base.scm:502 msgid "" "Any Unix-like operating system needs a C library: the library which\n" -"defines the \"system calls\" and other basic facilities such as open, " -"malloc,\n" +"defines the \"system calls\" and other basic facilities such as open, malloc,\n" "printf, exit...\n" "\n" -"The GNU C library is used as the C library in the GNU system and most " -"systems\n" +"The GNU C library is used as the C library in the GNU system and most systems\n" "with the Linux kernel." msgstr "" @@ -215,8 +203,7 @@ msgid "" "The Time Zone Database (often called tz or zoneinfo)\n" "contains code and data that represent the history of local time for many\n" "representative locations around the globe. It is updated periodically to\n" -"reflect changes made by political bodies to time zone boundaries, UTC " -"offsets,\n" +"reflect changes made by political bodies to time zone boundaries, UTC offsets,\n" "and daylight-saving rules." msgstr "" @@ -227,8 +214,7 @@ msgstr "La ligila ĉirkaŭanto" #: gnu/packages/base.scm:992 msgid "" "The linker wrapper (or `ld-wrapper') wraps the linker to add any\n" -"missing `-rpath' flags, and to detect any misuse of libraries outside of " -"the\n" +"missing `-rpath' flags, and to detect any misuse of libraries outside of the\n" "store." msgstr "" @@ -262,8 +248,7 @@ msgid "" "Guile-Reader is a simple framework for building readers for GNU Guile.\n" "\n" "The idea is to make it easy to build procedures that extend Guile’s read\n" -"procedure. Readers supporting various syntax variants can easily be " -"written,\n" +"procedure. Readers supporting various syntax variants can easily be written,\n" "possibly by re-using existing “token readers” of a standard Scheme\n" "readers. For example, it is used to implement Skribilo’s R5RS-derived\n" "document syntax.\n" @@ -280,8 +265,7 @@ msgstr "Bindoj de Guile por ncurses" #: gnu/packages/guile.scm:268 msgid "" "GNU Guile-Ncurses is a library for the Guile Scheme interpreter that\n" -"provides functions for creating text user interfaces. The text user " -"interface\n" +"provides functions for creating text user interfaces. The text user interface\n" "functionality is built on the ncurses libraries: curses, form, panel, and\n" "menu." msgstr "" @@ -293,33 +277,39 @@ msgstr "Lanĉi taskoj je antaŭplanitaj horoj" #: gnu/packages/guile.scm:294 msgid "" "The GNU package mcron (Mellor's cron) is a 100% compatible replacement\n" -"for Vixie cron. It is written in pure Guile, and allows configuration " -"files\n" +"for Vixie cron. It is written in pure Guile, and allows configuration files\n" "to be written in scheme (as well as Vixie's original format) for infinite\n" -"flexibility in specifying when jobs should be run. Mcron was written by " -"Dale\n" +"flexibility in specifying when jobs should be run. Mcron was written by Dale\n" "Mellor." msgstr "" +#: gnu/packages/guile.scm:323 +msgid "Collection of useful Guile Scheme modules" +msgstr "Aro da utilaj moduloj de Guile Scheme" + +#: gnu/packages/guile.scm:325 +msgid "" +"guile-lib is intended as an accumulation place for pure-scheme Guile\n" +"modules, allowing for people to cooperate integrating their generic Guile\n" +"modules into a coherent library. Think \"a down-scaled, limited-scope CPAN\n" +"for Guile\"." +msgstr "" + #: gnu/packages/lout.scm:109 msgid "Lout, a document layout system similar in style to LaTeX" msgstr "Lout, dokument-aranĝa sistemo simila al LaTeX, laŭ stilo" #: gnu/packages/lout.scm:111 msgid "" -"The Lout document formatting system is now reads a high-level description " -"of\n" -"a document similar in style to LaTeX and produces a PostScript or plain " -"text\n" +"The Lout document formatting system is now reads a high-level description of\n" +"a document similar in style to LaTeX and produces a PostScript or plain text\n" "output file.\n" "\n" "Lout offers an unprecedented range of advanced features, including optimal\n" "paragraph and page breaking, automatic hyphenation, PostScript EPS file\n" -"inclusion and generation, equation formatting, tables, diagrams, rotation " -"and\n" +"inclusion and generation, equation formatting, tables, diagrams, rotation and\n" "scaling, sorted indexes, bibliographic databases, running headers and\n" -"odd-even pages, automatic cross referencing, multilingual documents " -"including\n" +"odd-even pages, automatic cross referencing, multilingual documents including\n" "hyphenation (most European languages are supported), formatting of computer\n" "programs, and much more, all ready to use. Furthermore, Lout is easily\n" "extended with definitions which are very much easier to write than troff of\n" @@ -408,25 +398,23 @@ msgstr "" "\n" " -n, --dry-run ne konstrui derivaĵojn" -#: guix/scripts/build.scm:84 guix/scripts/package.scm:449 +#: guix/scripts/build.scm:84 guix/scripts/package.scm:519 msgid "" "\n" " --fallback fall back to building when the substituter fails" msgstr "" "\n" -" --fallback retropaŝi al konstruado kiam la anstataŭiganto " -"fiaskas" +" --fallback retropaŝi al konstruado kiam la anstataŭiganto fiaskas" -#: guix/scripts/build.scm:86 guix/scripts/package.scm:451 +#: guix/scripts/build.scm:86 guix/scripts/package.scm:521 msgid "" "\n" " --no-substitutes build instead of resorting to pre-built substitutes" msgstr "" "\n" -" --no-substitutes konstrui anstataŭ provi jam-konstruitajn " -"anstataŭigantojn" +" --no-substitutes konstrui anstataŭ provi jam-konstruitajn anstataŭigantojn" -#: guix/scripts/build.scm:88 guix/scripts/package.scm:453 +#: guix/scripts/build.scm:88 guix/scripts/package.scm:523 msgid "" "\n" " --max-silent-time=SECONDS\n" @@ -434,8 +422,7 @@ msgid "" msgstr "" "\n" " --max-silent-time=SEKUNDOJ\n" -" marki la konstruo kiel fiaskinta post SEKUNDOJ da " -"silento" +" marki la konstruo kiel fiaskinta post SEKUNDOJ da silento" #: guix/scripts/build.scm:91 msgid "" @@ -452,8 +439,7 @@ msgid "" " as a garbage collector root" msgstr "" "\n" -" -r, --root=DOSIERO igi DOSIEROn simbola ligo al la rezulto, kaj " -"registri\n" +" -r, --root=DOSIERO igi DOSIEROn simbola ligo al la rezulto, kaj registri\n" " ĝin kiel radikon de rubaĵ-kolektanto" #: guix/scripts/build.scm:96 @@ -465,8 +451,9 @@ msgstr "" " --verbosity=NIVELO uzi la indikitan detaligan NIVELOn" #: guix/scripts/build.scm:99 guix/scripts/download.scm:53 -#: guix/scripts/package.scm:470 guix/scripts/gc.scm:58 -#: guix/scripts/hash.scm:51 guix/scripts/pull.scm:149 +#: guix/scripts/package.scm:540 guix/scripts/gc.scm:58 +#: guix/scripts/hash.scm:51 guix/scripts/pull.scm:152 +#: guix/scripts/substitute-binary.scm:463 msgid "" "\n" " -h, --help display this help and exit" @@ -475,8 +462,9 @@ msgstr "" " -h, --help montri ĉi tiun helpon kaj eliri" #: guix/scripts/build.scm:101 guix/scripts/download.scm:55 -#: guix/scripts/package.scm:472 guix/scripts/gc.scm:60 -#: guix/scripts/hash.scm:53 guix/scripts/pull.scm:151 +#: guix/scripts/package.scm:542 guix/scripts/gc.scm:60 +#: guix/scripts/hash.scm:53 guix/scripts/pull.scm:154 +#: guix/scripts/substitute-binary.scm:465 msgid "" "\n" " -V, --version display version information and exit" @@ -490,8 +478,8 @@ msgid "~a: not a number~%" msgstr "~a: ne estas numero~%" #: guix/scripts/build.scm:176 guix/scripts/download.scm:96 -#: guix/scripts/package.scm:554 guix/scripts/gc.scm:152 -#: guix/scripts/pull.scm:178 +#: guix/scripts/package.scm:628 guix/scripts/gc.scm:152 +#: guix/scripts/pull.scm:181 #, scheme-format msgid "~A: unrecognized option~%" msgstr "~A: nerekonata modifilo~%" @@ -501,12 +489,12 @@ msgstr "~A: nerekonata modifilo~%" msgid "failed to create GC root `~a': ~a~%" msgstr "fiasko dum kreo de radiko GC '~a': ~a~%" -#: guix/scripts/build.scm:226 guix/scripts/package.scm:600 +#: guix/scripts/build.scm:226 guix/scripts/package.scm:674 #, scheme-format msgid "ambiguous package specification `~a'~%" msgstr "plursenca pak-specifigo '~a'~%" -#: guix/scripts/build.scm:227 guix/scripts/package.scm:602 +#: guix/scripts/build.scm:227 guix/scripts/package.scm:676 #, scheme-format msgid "choosing ~a from ~a~%" msgstr "ni elektas ~a el ~a~%" @@ -560,42 +548,42 @@ msgstr "~a: analizo de URI fiaskis~%" msgid "~a: download failed~%" msgstr "~a: elŝuto fiaskis~%" -#: guix/scripts/package.scm:225 +#: guix/scripts/package.scm:227 #, scheme-format msgid "switching from generation ~a to ~a~%" msgstr "alterno el generacio ~a al ~a~%" -#: guix/scripts/package.scm:230 +#: guix/scripts/package.scm:232 #, scheme-format msgid "profile `~a' does not exist~%" msgstr "profilo '~a' ne ekzistas~%" -#: guix/scripts/package.scm:234 +#: guix/scripts/package.scm:236 #, scheme-format msgid "nothing to do: already at the empty profile~%" msgstr "nenio por fari: jam estas ĉe la malplena profilo~%" -#: guix/scripts/package.scm:243 +#: guix/scripts/package.scm:242 #, scheme-format msgid "failed to build the empty profile~%" msgstr "fiasko dum konstruo de malplena profilo~%" -#: guix/scripts/package.scm:346 +#: guix/scripts/package.scm:413 #, scheme-format msgid "looking for the latest release of GNU ~a..." msgstr "ni serĉas la lastan eldonon de GNU ~a..." -#: guix/scripts/package.scm:350 +#: guix/scripts/package.scm:417 #, scheme-format msgid "~a: note: using ~a but ~a is available upstream~%" msgstr "~a: rimarko: ni uzas ~a sed ~a disponeblas unuanivele~%" -#: guix/scripts/package.scm:414 +#: guix/scripts/package.scm:481 #, scheme-format msgid "The following environment variable definitions may be needed:~%" msgstr "La jenaj medi-variablaj difinoj povos esti necesaj:~%" -#: guix/scripts/package.scm:429 +#: guix/scripts/package.scm:496 msgid "" "Usage: guix package [OPTION]... PACKAGES...\n" "Install, remove, or upgrade PACKAGES in a single transaction.\n" @@ -603,7 +591,7 @@ msgstr "" "Uzmaniero: guix package [MODIFILO]... PAKOJ...\n" "Instalas, forigas, aŭ ĝisdatigas PAKOJn en ununura ago.\n" -#: guix/scripts/package.scm:431 +#: guix/scripts/package.scm:498 msgid "" "\n" " -i, --install=PACKAGE install PACKAGE" @@ -611,7 +599,7 @@ msgstr "" "\n" " -i, --install=PAKO instali PAKOn" -#: guix/scripts/package.scm:433 +#: guix/scripts/package.scm:500 msgid "" "\n" " -e, --install-from-expression=EXP\n" @@ -621,7 +609,7 @@ msgstr "" " -e, --install-from-expression=ESP\n" " instali la pakon ESP rezultas al" -#: guix/scripts/package.scm:436 +#: guix/scripts/package.scm:503 msgid "" "\n" " -r, --remove=PACKAGE remove PACKAGE" @@ -629,16 +617,15 @@ msgstr "" "\n" " -r, --remove=PAKO forigi PAKOn" -#: guix/scripts/package.scm:438 +#: guix/scripts/package.scm:505 msgid "" "\n" " -u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP" msgstr "" "\n" -" -u, --upgrade[=REGESP] ĝisdatigi ĉiujn instalitajn pakojn kongruantajn al " -"REGESP" +" -u, --upgrade[=REGESP] ĝisdatigi ĉiujn instalitajn pakojn kongruantajn al REGESP" -#: guix/scripts/package.scm:440 +#: guix/scripts/package.scm:507 msgid "" "\n" " --roll-back roll back to the previous generation" @@ -646,7 +633,7 @@ msgstr "" "\n" " --roll-back retropaŝi al la antaŭa generacio" -#: guix/scripts/package.scm:442 +#: guix/scripts/package.scm:509 msgid "" "\n" " --search-paths display needed environment variable definitions" @@ -654,16 +641,25 @@ msgstr "" "\n" " --search-paths montri necesajn medi-variablajn difinojn" -#: guix/scripts/package.scm:445 +#: guix/scripts/package.scm:511 +msgid "" +"\n" +" -l, --list-generations[=PATTERN]\n" +" list generations matching PATTERN" +msgstr "" +"\n" +" -I, --list-generations[=ŜABLONO]\n" +" listigi generaciojn kongruantajn al ŜABLONO" + +#: guix/scripts/package.scm:515 msgid "" "\n" " -p, --profile=PROFILE use PROFILE instead of the user's default profile" msgstr "" "\n" -" -p, --profile=PROFILO uzi PROFILOn anstataŭ la apriora profilo de la " -"uzanto" +" -p, --profile=PROFILO uzi PROFILOn anstataŭ la apriora profilo de la uzanto" -#: guix/scripts/package.scm:447 +#: guix/scripts/package.scm:517 msgid "" "\n" " -n, --dry-run show what would be done without actually doing it" @@ -671,7 +667,7 @@ msgstr "" "\n" " -n, --dry-run montri kion estus farita sen fakte fari ĝin" -#: guix/scripts/package.scm:456 +#: guix/scripts/package.scm:526 msgid "" "\n" " --bootstrap use the bootstrap Guile to build the profile" @@ -679,7 +675,7 @@ msgstr "" "\n" " --bootstrap uzi la praŝargilon Guile por konstrui la profilon" -#: guix/scripts/package.scm:458 guix/scripts/pull.scm:144 +#: guix/scripts/package.scm:528 guix/scripts/pull.scm:147 msgid "" "\n" " --verbose produce verbose output" @@ -687,7 +683,7 @@ msgstr "" "\n" " --verbose produkti detalplenan eligon" -#: guix/scripts/package.scm:461 +#: guix/scripts/package.scm:531 msgid "" "\n" " -s, --search=REGEXP search in synopsis and description using REGEXP" @@ -695,7 +691,7 @@ msgstr "" "\n" " -s, --search=REGESP serĉi en resumo kaj priskribo uzante REGESP" -#: guix/scripts/package.scm:463 +#: guix/scripts/package.scm:533 msgid "" "\n" " -I, --list-installed[=REGEXP]\n" @@ -705,7 +701,7 @@ msgstr "" " -I, --list-installed[=REGESP]\n" " listigi instalitajn pakojn kongruantajn al REGESP" -#: guix/scripts/package.scm:466 +#: guix/scripts/package.scm:536 msgid "" "\n" " -A, --list-available[=REGEXP]\n" @@ -715,76 +711,91 @@ msgstr "" " -A, --list-available[=REGESP]\n" " listigi disponeblajn pakojn kongruantajn al REGESP" -#: guix/scripts/package.scm:556 +#: guix/scripts/package.scm:630 #, scheme-format msgid "~A: extraneous argument~%" msgstr "~A: fremda argumento~%" -#: guix/scripts/package.scm:584 +#: guix/scripts/package.scm:658 #, scheme-format msgid "package `~a' lacks output `~a'~%" msgstr "pako '~a' malhavas eligon '~a'~%" -#: guix/scripts/package.scm:608 +#: guix/scripts/package.scm:682 #, scheme-format msgid "~a: package not found~%" msgstr "~a: pako ne trovita~%" -#: guix/scripts/package.scm:631 +#: guix/scripts/package.scm:705 #, scheme-format msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%" msgstr "Provu \"info '(guix) Invoking guix package'\" por pli da informo.'%" -#: guix/scripts/package.scm:653 +#: guix/scripts/package.scm:727 #, scheme-format msgid "error: while creating directory `~a': ~a~%" msgstr "eraro: dum kreo de dosierujo '~a': ~a~%" -#: guix/scripts/package.scm:657 +#: guix/scripts/package.scm:731 #, scheme-format msgid "Please create the `~a' directory, with you as the owner.~%" msgstr "Bonvolu krei la dosierujon '~a', kun vi kiel posedanto.~%" -#: guix/scripts/package.scm:664 +#: guix/scripts/package.scm:738 #, scheme-format msgid "error: directory `~a' is not owned by you~%" msgstr "eraro: dosierujo '~a' ne estas posedata de vi~%" -#: guix/scripts/package.scm:667 +#: guix/scripts/package.scm:741 #, scheme-format msgid "Please change the owner of `~a' to user ~s.~%" msgstr "Bonvole ŝanĝu la posedanton de '~a' al la uzanto ~s.~%" -#: guix/scripts/package.scm:725 +#: guix/scripts/package.scm:799 #, scheme-format msgid "The following package would be removed:~% ~{~a~%~}~%" msgstr "La jena pako devos esti forigata:~% ~{~a~%~}~%" -#: guix/scripts/package.scm:730 +#: guix/scripts/package.scm:804 #, scheme-format msgid "The following package will be removed:~% ~{~a~%~}~%" msgstr "La jena pako estos forigata:~% ~{~a~%~}~%" -#: guix/scripts/package.scm:742 +#: guix/scripts/package.scm:816 #, scheme-format msgid "The following package would be installed:~%~{~a~%~}~%" msgstr "La jena pako estus instalata:~% ~{~a~%~}~%" -#: guix/scripts/package.scm:747 +#: guix/scripts/package.scm:821 #, scheme-format msgid "The following package will be installed:~%~{~a~%~}~%" msgstr "La jena pako estos instalata:~% ~{~a~%~}~%" -#: guix/scripts/package.scm:859 +#: guix/scripts/package.scm:933 #, scheme-format msgid "nothing to be done~%" msgstr "nenio por fari~%" -#: guix/scripts/package.scm:870 +#: guix/scripts/package.scm:944 #, scheme-format msgid "~a package in profile~%" msgstr "pako ~a en profilo~%" +#: guix/scripts/package.scm:959 +#, scheme-format +msgid "Generation ~a\t~a~%" +msgstr "Generacio ~a\t~a~%" + +#: guix/scripts/package.scm:977 +#, scheme-format +msgid "profile '~a' does not exist~%" +msgstr "profilo '~a' ne ekzistas~%" + +#: guix/scripts/package.scm:986 +#, scheme-format +msgid "invalid syntax: ~a~%" +msgstr "malvalida sintakso: ~a~%" + #: guix/scripts/gc.scm:39 msgid "" "Usage: guix gc [OPTION]... PATHS...\n" @@ -885,7 +896,7 @@ msgstr "" msgid "unrecognized option: ~a~%" msgstr "nerekonata modifilo: ~a~%" -#: guix/scripts/hash.scm:123 guix/ui.scm:183 +#: guix/scripts/hash.scm:123 guix/ui.scm:187 #, scheme-format msgid "~a~%" msgstr "~a~%" @@ -895,7 +906,7 @@ msgstr "~a~%" msgid "wrong number of arguments~%" msgstr "malĝusta nombro da argumentoj~%" -#: guix/scripts/pull.scm:142 +#: guix/scripts/pull.scm:145 msgid "" "Usage: guix pull [OPTION]...\n" "Download and deploy the latest version of Guix.\n" @@ -903,7 +914,7 @@ msgstr "" "Uzmaniero: guix pull [MODIFILO]...\n" "Elŝuti kaj liveri la lastan version de Guix.\n" -#: guix/scripts/pull.scm:146 +#: guix/scripts/pull.scm:149 msgid "" "\n" " --bootstrap use the bootstrap Guile to build the new Guix" @@ -911,44 +922,89 @@ msgstr "" "\n" " --bootstrap uzi la 'bootstrap' Guile por konstrui novan Guix" -#: guix/scripts/pull.scm:180 +#: guix/scripts/pull.scm:183 #, scheme-format msgid "~A: unexpected argument~%" msgstr "~A: neatendita argumento~%" -#: guix/scripts/pull.scm:189 +#: guix/scripts/pull.scm:192 msgid "failed to download up-to-date source, exiting\n" msgstr "fiasko dum elŝuto de aktuala fonto, ni ĉesas\n" -#: guix/scripts/pull.scm:212 +#: guix/scripts/pull.scm:211 #, scheme-format msgid "updated ~a successfully deployed under `~a'~%" msgstr "ni ĝisdatigis ~a sukcese, liverita sur '~a'~%" -#: guix/scripts/pull.scm:215 +#: guix/scripts/pull.scm:214 #, scheme-format msgid "failed to update Guix, check the build log~%" msgstr "fiasko dum ĝisdatigo de Guix, kontrolu la konstru-protokolon~%" -#: guix/scripts/pull.scm:217 +#: guix/scripts/pull.scm:216 msgid "Guix already up to date\n" msgstr "Guix jam estas ĝisdata\n" -#: guix/scripts/substitute-binary.scm:163 +#: guix/scripts/substitute-binary.scm:162 #, scheme-format msgid "while fetching ~a: server is unresponsive~%" msgstr "dum havigo de ~a: servilo ne respondas~%" -#: guix/scripts/substitute-binary.scm:165 +#: guix/scripts/substitute-binary.scm:164 #, scheme-format msgid "try `--no-substitutes' if the problem persists~%" msgstr "provu '--no-substituse' se la problemo persistos~%" -#: guix/scripts/substitute-binary.scm:437 +#: guix/scripts/substitute-binary.scm:425 +#, scheme-format +msgid "Downloading, please wait...~%" +msgstr "Ni elŝutas, bonvolu atendi...~%" + +#: guix/scripts/substitute-binary.scm:427 +#, scheme-format +msgid "(Please consider upgrading Guile to get proper progress report.)~%" +msgstr "(Bonvolu konsideri pri ĝisdatigo de Guile por havigi ĝustan progres-raporton.)~%" + +#: guix/scripts/substitute-binary.scm:444 #, scheme-format msgid "host name lookup error: ~a~%" msgstr "eraro en serĉado de gastigant-nomo: ~a~%" +#: guix/scripts/substitute-binary.scm:453 +msgid "" +"Usage: guix substitute-binary [OPTION]...\n" +"Internal tool to substitute a pre-built binary to a local build.\n" +msgstr "" +"Uzmaniero: guix substitute-binary [MODIFILO]...\n" +"Interna ilo por anstataŭigi antaŭ-konstruitan duumaĵon al loka kompilaĵo.\n" + +#: guix/scripts/substitute-binary.scm:455 +msgid "" +"\n" +" --query report on the availability of substitutes for the\n" +" store file names passed on the standard input" +msgstr "" +"\n" +" --query raporti pri la disponebleco de anstataŭigoj por la\n" +" konservaj dosier-nomoj indikitaj per la ĉefenigujo" + +#: guix/scripts/substitute-binary.scm:458 +msgid "" +"\n" +" --substitute STORE-FILE DESTINATION\n" +" download STORE-FILE and store it as a Nar in file\n" +" DESTINATION" +msgstr "" +"\n" +" --substitute KONSERV-DOSIERO CELO\n" +" elŝuti KONSERV-DOSIEROn kaj konservi ĝin kiel Nar en la\n" +" dosiero CELO" + +#: guix/scripts/substitute-binary.scm:567 +#, scheme-format +msgid "~a: unrecognized options~%" +msgstr "~a: nerekonata modifiloj~%" + #: guix/gnu-maintenance.scm:344 #, scheme-format msgid "signature verification failed for `~a'~%" @@ -969,12 +1025,12 @@ msgstr "~a: ne eblis trovi fontan dosieron" msgid "~a: ~a: no `version' field in source; skipping~%" msgstr "~a: ~a: neniu kampo 'version' en la fonto; ni saltas~%" -#: guix/ui.scm:116 +#: guix/ui.scm:120 #, scheme-format msgid "failed to install locale: ~a~%" msgstr "fiasko dum instalo de lokaĵaro: ~a~%" -#: guix/ui.scm:138 +#: guix/ui.scm:142 #, scheme-format msgid "" "\n" @@ -983,7 +1039,7 @@ msgstr "" "\n" "Raportu program-misojn al: ~a." -#: guix/ui.scm:140 +#: guix/ui.scm:144 #, scheme-format msgid "" "\n" @@ -992,7 +1048,7 @@ msgstr "" "\n" "hejm-paĝo de ~a: <~a>" -#: guix/ui.scm:142 +#: guix/ui.scm:146 msgid "" "\n" "General help using GNU software: " @@ -1000,90 +1056,90 @@ msgstr "" "\n" "Ĝenerala helpo por uzi programaron de GNU: " -#: guix/ui.scm:149 +#: guix/ui.scm:153 #, scheme-format msgid "~a: invalid number~%" msgstr "~a: nevalida numero~%" -#: guix/ui.scm:160 +#: guix/ui.scm:164 #, scheme-format msgid "~a:~a:~a: package `~a' has an invalid input: ~s~%" msgstr "~a:~a:~a: pako '~a' havas malvalidan enigon: ~s~%" -#: guix/ui.scm:167 +#: guix/ui.scm:171 #, scheme-format msgid "~a: ~a: build system `~a' does not support cross builds~%" msgstr "~a: ~a: konstrui sistemon '~a' ne subtenas crucajn konstruojn~%" -#: guix/ui.scm:172 +#: guix/ui.scm:176 #, scheme-format msgid "failed to connect to `~a': ~a~%" msgstr "fiasko dum konekto al '~a': ~a~%" -#: guix/ui.scm:177 +#: guix/ui.scm:181 #, scheme-format msgid "build failed: ~a~%" msgstr "konstruo fiakis: ~a~%" -#: guix/ui.scm:193 +#: guix/ui.scm:197 #, scheme-format msgid "failed to read expression ~s: ~s~%" msgstr "fiasko dum lego de esprimo ~s: ~s~%" -#: guix/ui.scm:199 +#: guix/ui.scm:203 #, scheme-format msgid "failed to evaluate expression `~a': ~s~%" msgstr "fiasko dum analizo de esprimo '~a': ~a~%" -#: guix/ui.scm:203 +#: guix/ui.scm:207 #, scheme-format msgid "expression `~s' does not evaluate to a package~%" msgstr "la esprimo '~s' ne rezultas pakon~%" -#: guix/ui.scm:248 +#: guix/ui.scm:253 #, scheme-format msgid "~:[The following derivation would be built:~%~{ ~a~%~}~;~]" msgstr "~:[La jena derivo povus esti konstruata:~%~{ ~a~%~}~;~]" -#: guix/ui.scm:253 +#: guix/ui.scm:258 #, scheme-format msgid "~:[The following file would be downloaded:~%~{ ~a~%~}~;~]" msgstr "~:[La jena derivo povus esti elŝutata:~%~{ ~a~%~}~;~]" -#: guix/ui.scm:259 +#: guix/ui.scm:264 #, scheme-format msgid "~:[The following derivation will be built:~%~{ ~a~%~}~;~]" msgstr "~:[La jena derivo estos esti konstruata:~%~{ ~a~%~}~;~]" -#: guix/ui.scm:264 +#: guix/ui.scm:269 #, scheme-format msgid "~:[The following file will be downloaded:~%~{ ~a~%~}~;~]" msgstr "~:[La jena derivo estos esti elŝutata:~%~{ ~a~%~}~;~]" -#: guix/ui.scm:281 +#: guix/ui.scm:286 msgid "" msgstr "" -#: guix/ui.scm:309 +#: guix/ui.scm:314 #, scheme-format msgid "failed to create configuration directory `~a': ~a~%" msgstr "fiasko dum kreo de agorda dosierujo '~a': ~a~%" -#: guix/ui.scm:385 guix/ui.scm:395 +#: guix/ui.scm:390 guix/ui.scm:400 msgid "unknown" msgstr "nekonata" -#: guix/ui.scm:415 +#: guix/ui.scm:484 #, scheme-format msgid "invalid argument: ~a~%" msgstr "malvalida argumento: ~a~%" -#: guix/ui.scm:420 +#: guix/ui.scm:489 #, scheme-format msgid "Try `guix --help' for more information.~%" msgstr "Provu 'guix --help' por pli da informo.~%" -#: guix/ui.scm:447 +#: guix/ui.scm:516 msgid "" "Usage: guix COMMAND ARGS...\n" "Run COMMAND with ARGS.\n" @@ -1091,21 +1147,21 @@ msgstr "" "Uzmaniero: guix KOMANDO ARGj...\n" "Lanĉas KOMANDOn kun ARGj.\n" -#: guix/ui.scm:450 +#: guix/ui.scm:519 msgid "COMMAND must be one of the sub-commands listed below:\n" msgstr "KOMANDO devas esti unu el la sub-komandoj sube listataj:\n" -#: guix/ui.scm:469 +#: guix/ui.scm:538 #, scheme-format msgid "guix: ~a: command not found~%" msgstr "guix: ~a: komando ne trovita~%" -#: guix/ui.scm:487 +#: guix/ui.scm:556 #, scheme-format msgid "guix: missing command name~%" msgstr "guix: mankas komanda nomo~%" -#: guix/ui.scm:495 +#: guix/ui.scm:564 #, scheme-format msgid "guix: unrecognized option '~a'~%" msgstr "guix: nerekonata modifilo: '~a'~%" From 43a2779876c5ae170f3c6edc7f3d605997c4ec05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 25 Sep 2013 21:47:10 +0200 Subject: [PATCH 27/33] gnu: vm: Add /etc/issue and a motd. * gnu/system/vm.scm (system-qemu-image): Build a 'motd' and an 'issue' file. Pass 'unix-pam-service' that motd. Have /etc/issue point to the 'issue' file. --- gnu/system/linux.scm | 13 ++++++++++--- gnu/system/vm.scm | 27 ++++++++++++++++++++++++--- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/gnu/system/linux.scm b/gnu/system/linux.scm index b2daa13e066..6aebe159ba8 100644 --- a/gnu/system/linux.scm +++ b/gnu/system/linux.scm @@ -125,9 +125,10 @@ (let ((unix (pam-entry (control "required") (module "pam_unix.so")))) - (lambda* (name #:key allow-empty-passwords?) + (lambda* (name #:key allow-empty-passwords? motd) "Return a standard Unix-style PAM service for NAME. When -ALLOW-EMPTY-PASSWORDS? is true, allow empty passwords." +ALLOW-EMPTY-PASSWORDS? is true, allow empty passwords. When MOTD is true, it +should be the name of a file used as the message-of-the-day." ;; See . (let ((name* name)) (pam-service @@ -140,6 +141,12 @@ ALLOW-EMPTY-PASSWORDS? is true, allow empty passwords." (arguments '("nullok"))) unix))) (password (list unix)) - (session (list unix))))))) + (session (if motd + (list unix + (pam-entry + (control "optional") + (module "pam_motd.so") + (arguments (list (string-append "motd=" motd))))) + (list unix)))))))) ;;; linux.scm ends here diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index a0669ae8650..e79a4257deb 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -432,10 +432,18 @@ input tuples." (define (system-qemu-image store) "Return the derivation of a QEMU image of the GNU system." + (define motd + (add-text-to-store store "motd" " +Happy birthday, GNU! http://www.gnu.org/gnu30 + +")) + (define %pam-services ;; Services known to PAM. (list %pam-other-services - (unix-pam-service "login" #:allow-empty-passwords? #t))) + (unix-pam-service "login" + #:allow-empty-passwords? #t + #:motd motd))) (define %dmd-services ;; Services run by dmd. @@ -487,6 +495,16 @@ alias ls='ls -p --color' alias ll='ls -l' "))) + (issue (add-text-to-store store "issue" " +This is an alpha preview of the GNU system. Welcome. + +This image features the GNU Guix package manager, which was used to +build it (http://www.gnu.org/software/guix/). The init system is +GNU dmd (http://www.gnu.org/software/dmd/). + +You can log in as 'root' with no password. +")) + (populate `((directory "/etc") (directory "/var/log") (directory "/var/run") @@ -494,7 +512,8 @@ alias ll='ls -l' ("/etc/passwd" -> ,passwd) ("/etc/login.defs" -> "/dev/null") ("/etc/pam.d" -> ,pam.d) - ("/etc/profile" -> ,bashrc))) + ("/etc/profile" -> ,bashrc) + ("/etc/issue" -> ,issue))) (out (derivation->output-path (package-derivation store mingetty))) (boot (add-text-to-store store "boot" @@ -525,11 +544,13 @@ alias ll='ls -l' ;; Configuration. ("dmd.conf" ,dmd-conf) - ("etc-pam.d" ,pam.d) + ("etc-pam.d" ,pam.d-drv) ("etc-passwd" ,passwd) ("etc-shadow" ,shadow) ("etc-group" ,group) ("etc-bashrc" ,bashrc) + ("etc-issue" ,issue) + ("etc-motd" ,motd) ,@(append-map service-inputs %dmd-services)))))) From ba47851fac503f005d2bc496161638c46cc29ffc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 25 Sep 2013 21:49:22 +0200 Subject: [PATCH 28/33] gnu: vm: Add 'host-name' service. * gnu/system/dmd.scm (host-name-service): New procedure. (mingetty-service): Require the 'host-name' service. * gnu/system/vm.scm (system-qemu-image): Add the 'host-name' service. Set PS1 in /etc/bashrc to something sensible. --- gnu/system/dmd.scm | 14 ++++++++++++++ gnu/system/vm.scm | 4 +++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/gnu/system/dmd.scm b/gnu/system/dmd.scm index a502c42e038..5bdf7b7a058 100644 --- a/gnu/system/dmd.scm +++ b/gnu/system/dmd.scm @@ -36,6 +36,7 @@ service-stop service-inputs + host-name-service syslog-service mingetty-service guix-service @@ -61,6 +62,14 @@ (inputs service-inputs ; list of inputs (default '()))) +(define (host-name-service store name) + "Return a service that sets the host name to NAME." + (service + (provision '(host-name)) + (start `(lambda _ + (sethostname ,name))) + (respawn? #f))) + (define (mingetty-service store tty) "Return a service to run mingetty on TTY." (let* ((mingetty-drv (package-derivation store mingetty)) @@ -68,6 +77,11 @@ "/sbin/mingetty"))) (service (provision (list (symbol-append 'term- (string->symbol tty)))) + + ;; Since the login prompt shows the host name, wait for the 'host-name' + ;; service to be done. + (requirement '(host-name)) + (start `(make-forkexec-constructor ,mingetty-bin "--noclear" ,tty)) (inputs `(("mingetty" ,mingetty)))))) diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index e79a4257deb..0cab3ced174 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -447,7 +447,8 @@ Happy birthday, GNU! http://www.gnu.org/gnu30 (define %dmd-services ;; Services run by dmd. - (list (mingetty-service store "tty1") + (list (host-name-service store "gnu") + (mingetty-service store "tty1") (mingetty-service store "tty2") (mingetty-service store "tty3") (mingetty-service store "tty4") @@ -488,6 +489,7 @@ Happy birthday, GNU! http://www.gnu.org/gnu30 (profile (derivation->output-path profile-drv)) (bashrc (add-text-to-store store "bashrc" (string-append " +export PS1='\\u@\\h\\$ ' export PATH=$HOME/.guix-profile/bin:" profile "/bin:" profile "/sbin export CPATH=$HOME/.guix-profile/include:" profile "/include export LIBRARY_PATH=$HOME/.guix-profile/lib:" profile "/lib From 27cab84c6d598d5bb53bf136d78e7a2b0e8e0269 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 25 Sep 2013 23:05:33 +0200 Subject: [PATCH 29/33] gnu: vm: Register the profile as a GC root. * gnu/system/vm.scm (system-qemu-image): Register PROFILE as a GC root. --- gnu/system/vm.scm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index 0cab3ced174..dd97e5ee0de 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -515,7 +515,9 @@ You can log in as 'root' with no password. ("/etc/login.defs" -> "/dev/null") ("/etc/pam.d" -> ,pam.d) ("/etc/profile" -> ,bashrc) - ("/etc/issue" -> ,issue))) + ("/etc/issue" -> ,issue) + (directory "/var/nix/gcroots") + ("/var/nix/gcroots/default-profile" -> ,profile))) (out (derivation->output-path (package-derivation store mingetty))) (boot (add-text-to-store store "boot" From f83e943fe7b7a4db93a6c603b9fdde57a35e918d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 25 Sep 2013 23:26:08 +0200 Subject: [PATCH 30/33] gnu: vm: Add 'networking' service. * gnu/system/vm.scm (system-qemu-image): Use 'static-networking-service'. Add /etc/resolv.conf. Add Inetutils to the profile. * gnu/system/dmd.scm (static-networking-service): New procedure. --- gnu/system/dmd.scm | 18 ++++++++++++++++++ gnu/system/vm.scm | 13 ++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/gnu/system/dmd.scm b/gnu/system/dmd.scm index 5bdf7b7a058..7fc4650c256 100644 --- a/gnu/system/dmd.scm +++ b/gnu/system/dmd.scm @@ -40,6 +40,8 @@ syslog-service mingetty-service guix-service + static-networking-service + dmd-configuration-file)) ;;; Commentary: @@ -131,6 +133,22 @@ (start `(make-forkexec-constructor ,daemon)) (inputs `(("guix" ,guix)))))) +(define* (static-networking-service store interface ip + #:key (inetutils inetutils)) + "Return a service that starts INTERFACE with address IP." + + ;; TODO: Eventually we should do this using Guile's networking procedures, + ;; like 'configure-qemu-networking' does, but the patch that does this is + ;; not yet in stock Guile. + (let ((ifconfig (string-append (package-output store inetutils) + "/bin/ifconfig"))) + (service + (provision '(networking)) + (start `(make-forkexec-constructor ,ifconfig ,interface ,ip "up")) + (stop `(make-forkexec-constructor ,ifconfig ,interface "down")) + (respawn? #f) + (inputs `(("inetutils" ,inetutils)))))) + (define (dmd-configuration-file store services) "Return the dmd configuration file for SERVICES." diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index dd97e5ee0de..b873386606e 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -455,7 +455,15 @@ Happy birthday, GNU! http://www.gnu.org/gnu30 (mingetty-service store "tty5") (mingetty-service store "tty6") (syslog-service store) - (guix-service store #:guix guix-0.4))) + (guix-service store #:guix guix-0.4) + + ;; QEMU networking settings. + (static-networking-service store "eth0" "10.0.2.10"))) + + (define resolv.conf + ;; Name resolution for default QEMU settings. + (add-text-to-store store "resolv.conf" + "nameserver 10.0.2.3\n")) (parameterize ((%guile-for-build (package-derivation store guile-final))) (let* ((bash-drv (package-derivation store bash)) @@ -480,6 +488,7 @@ Happy birthday, GNU! http://www.gnu.org/gnu30 ("dmd" ,dmd) ("gcc" ,gcc-final) ("libc" ,glibc-final) + ("inetutils" ,inetutils) ("guix" ,guix-0.4))) ;; TODO: Replace with a real profile with a manifest. @@ -514,6 +523,7 @@ You can log in as 'root' with no password. ("/etc/passwd" -> ,passwd) ("/etc/login.defs" -> "/dev/null") ("/etc/pam.d" -> ,pam.d) + ("/etc/resolv.conf" -> ,resolv.conf) ("/etc/profile" -> ,bashrc) ("/etc/issue" -> ,issue) (directory "/var/nix/gcroots") @@ -552,6 +562,7 @@ You can log in as 'root' with no password. ("etc-passwd" ,passwd) ("etc-shadow" ,shadow) ("etc-group" ,group) + ("etc-resolv.conf" ,resolv.conf) ("etc-bashrc" ,bashrc) ("etc-issue" ,issue) ("etc-motd" ,motd) From de8bcdaeb5a828d8cee85f8700e23e15b49f4e24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 25 Sep 2013 23:26:42 +0200 Subject: [PATCH 31/33] packages: Make the 'output' parameter of 'package-output' optional. * guix/packages.scm (package-output): Make the 'output' parameter optional. --- guix/packages.scm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/guix/packages.scm b/guix/packages.scm index efec4146753..9433fe9586a 100644 --- a/guix/packages.scm +++ b/guix/packages.scm @@ -462,8 +462,8 @@ system identifying string)." #:outputs outputs #:system system (args)))))))) -(define* (package-output store package output - #:optional (system (%current-system))) +(define* (package-output store package + #:optional (output "out") (system (%current-system))) "Return the output path of PACKAGE's OUTPUT for SYSTEM---where OUTPUT is the symbolic output name, such as \"out\". Note that this procedure calls `package-derivation', which is costly." From 349746dfcd9a07e3b5908d459d0800fd5d44c3b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Thu, 26 Sep 2013 00:07:42 +0200 Subject: [PATCH 32/33] gnu: vm: Add nscd service. * gnu/system/dmd.scm (nscd-service): New procedure. * gnu/system/vm.scm (system-qemu-image): Use it. Make /var/run/nscd. --- gnu/system/dmd.scm | 21 +++++++++++++++++++++ gnu/system/vm.scm | 5 +++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/gnu/system/dmd.scm b/gnu/system/dmd.scm index 7fc4650c256..b248d9f0c5e 100644 --- a/gnu/system/dmd.scm +++ b/gnu/system/dmd.scm @@ -21,6 +21,8 @@ #:use-module (guix packages) #:use-module (guix derivations) #:use-module (guix records) + #:use-module ((gnu packages base) + #:select (glibc-final)) #:use-module ((gnu packages system) #:select (mingetty inetutils)) #:use-module ((gnu packages package-management) @@ -39,6 +41,7 @@ host-name-service syslog-service mingetty-service + nscd-service guix-service static-networking-service @@ -87,6 +90,24 @@ (start `(make-forkexec-constructor ,mingetty-bin "--noclear" ,tty)) (inputs `(("mingetty" ,mingetty)))))) +(define* (nscd-service store + #:key (glibc glibc-final)) + "Return a service that runs libc's name service cache daemon (nscd)." + (let ((nscd (string-append (package-output store glibc) "/sbin/nscd"))) + (service + (provision '(nscd)) + (start `(make-forkexec-constructor ,nscd "-f" "/dev/null")) + + ;; XXX: Local copy of 'make-kill-destructor' because the one upstream + ;; uses the broken 'opt-lambda' macro. + (stop `(lambda* (#:optional (signal SIGTERM)) + (lambda (pid . args) + (kill pid signal) + #f))) + + (respawn? #f) + (inputs `(("glibc" ,glibc)))))) + (define (syslog-service store) "Return a service that runs 'syslogd' with reasonable default settings." diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index b873386606e..0ed805510a4 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -456,6 +456,7 @@ Happy birthday, GNU! http://www.gnu.org/gnu30 (mingetty-service store "tty6") (syslog-service store) (guix-service store #:guix guix-0.4) + (nscd-service store) ;; QEMU networking settings. (static-networking-service store "eth0" "10.0.2.10"))) @@ -517,8 +518,8 @@ You can log in as 'root' with no password. ")) (populate `((directory "/etc") - (directory "/var/log") - (directory "/var/run") + (directory "/var/log") ; for dmd + (directory "/var/run/nscd") ("/etc/shadow" -> ,shadow) ("/etc/passwd" -> ,passwd) ("/etc/login.defs" -> "/dev/null") From 834b5c80763eba42018606a674bcc53bfeca10eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Thu, 26 Sep 2013 00:15:51 +0200 Subject: [PATCH 33/33] gnu: zile: Fix references to /bin/sh. * gnu/packages/zile.scm (zile): Add 'patch-/bin/sh' phase. Move Perl and help2man to 'native-inputs'. --- gnu/packages/zile.scm | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/gnu/packages/zile.scm b/gnu/packages/zile.scm index 6e540ccfab8..4907031c897 100644 --- a/gnu/packages/zile.scm +++ b/gnu/packages/zile.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012 Ludovic Courtès +;;; Copyright © 2012, 2013 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; @@ -24,25 +24,37 @@ #:use-module (gnu packages bdw-gc) #:use-module (gnu packages perl) #:use-module (gnu packages help2man) - #:use-module (gnu packages ncurses)) + #:use-module (gnu packages ncurses) + #:use-module (gnu packages bash)) (define-public zile (package (name "zile") (version "2.4.9") - (source - (origin - (method url-fetch) - (uri (string-append "mirror://gnu/zile/zile-" - version ".tar.gz")) - (sha256 - (base32 - "0j801c28ypm924rw3lqyb6khxyslg6ycrv16wmmwcam0mk3mj6f7")))) + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnu/zile/zile-" + version ".tar.gz")) + (sha256 + (base32 + "0j801c28ypm924rw3lqyb6khxyslg6ycrv16wmmwcam0mk3mj6f7")))) (build-system gnu-build-system) + (arguments + '(#:phases (alist-cons-before + 'configure 'patch-/bin/sh + (lambda* (#:key inputs #:allow-other-keys) + (let ((bash (assoc-ref inputs "bash"))) + ;; Refer to the actual shell. + (substitute* '("lib/spawni.c" "src/funcs.c") + (("/bin/sh") + (string-append bash "/bin/sh"))))) + %standard-phases))) (inputs `(("boehm-gc" ,libgc) ("ncurses" ,ncurses) - ("perl" ,perl) + ("bash" ,bash))) + (native-inputs + `(("perl" ,perl) ("help2man" ,help2man))) (home-page "http://www.gnu.org/software/zile/") (synopsis "Zile is lossy Emacs, a lightweight Emacs clone")