summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2014-06-06 17:23:14 +0200
committerLudovic Courtès <ludo@gnu.org>2014-06-06 17:23:14 +0200
commit872c69d00e861f86fa4caaadbaa136f46c9db358 (patch)
treed50176869e67baf821b151d6bcc879ef0bd554fe /gnu
parenta4d48cc24d0f6bc3c45adf92925d7d901f0763d3 (diff)
parentb15d79dfe65353f4101b0ad653c97e3ef0d4a8b7 (diff)
downloadguix-872c69d00e861f86fa4caaadbaa136f46c9db358.tar.gz
Merge branch 'master' into core-updates
Diffstat (limited to 'gnu')
-rw-r--r--gnu/packages/admin.scm38
-rw-r--r--gnu/packages/backup.scm214
-rw-r--r--gnu/packages/base.scm1
-rw-r--r--gnu/packages/bdb.scm10
-rw-r--r--gnu/packages/compression.scm1
-rw-r--r--gnu/packages/ddrescue.scm47
-rw-r--r--gnu/packages/disk.scm (renamed from gnu/packages/parted.scm)58
-rw-r--r--gnu/packages/elf.scm9
-rw-r--r--gnu/packages/fdisk.scm53
-rw-r--r--gnu/packages/gnome.scm5
-rw-r--r--gnu/packages/gnutls.scm4
-rw-r--r--gnu/packages/linux.scm62
-rw-r--r--gnu/packages/maths.scm3
-rw-r--r--gnu/packages/openssl.scm7
-rw-r--r--gnu/packages/package-management.scm1
-rw-r--r--gnu/packages/patches/cssc-gets-undeclared.patch17
-rw-r--r--gnu/packages/patches/cssc-missing-include.patch12
-rw-r--r--gnu/packages/patches/gtkglext-remove-pangox-dependency.patch132
-rw-r--r--gnu/packages/patches/module-init-tools-moduledir.patch168
-rw-r--r--gnu/packages/patches/openssl-CVE-2010-5298.patch27
-rw-r--r--gnu/packages/patches/openssl-extension-checking-fixes.patch40
-rw-r--r--gnu/packages/patches/util-linux-perl.patch15
-rw-r--r--gnu/packages/version-control.scm46
-rw-r--r--gnu/services/base.scm110
-rw-r--r--gnu/services/dmd.scm2
-rw-r--r--gnu/system.scm77
-rw-r--r--gnu/system/file-systems.scm3
-rw-r--r--gnu/system/install.scm147
-rw-r--r--gnu/system/linux-initrd.scm4
-rw-r--r--gnu/system/vm.scm29
30 files changed, 957 insertions, 385 deletions
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index fded33c60b..a3d600d7be 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -722,3 +722,41 @@ This package provides the 'wpa_supplicant' daemon and the 'wpa_cli' command.")
 
     ;; In practice, this is linked against Readline, which makes it GPLv3+.
     (license bsd-3)))
+
+(define-public wakelan
+  (package
+    (name "wakelan")
+    (version "1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "ftp://ftp.gwdg.de/pub/linux/metalab/system/network/misc/wakelan-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "0vydqpf44146ir6k87gmqaq6xy66xhc1gkr3nsd7jj3nhy7ypx9x"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:phases (alist-replace
+                 'configure
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let ((out (assoc-ref outputs "out")))
+                     (mkdir-p (string-append out "/bin"))
+                     (mkdir-p (string-append out "/share/man/man1"))
+
+                     ;; It's an old configure script that doesn't understand
+                     ;; the extra options we pass.
+                     (setenv "CONFIG_SHELL" (which "bash"))
+                     (zero?
+                      (system* "./configure"
+                               (string-append "--prefix=" out)
+                               (string-append "--mandir=" out
+                                              "/share/man")))))
+                 %standard-phases)
+       #:tests? #f))
+    (home-page "http://kernel.org")               ; really, no home page
+    (synopsis "Send a wake-on-LAN packet")
+    (description
+     "WakeLan broadcasts a properly formatted UDP packet across the local area
+network, which causes enabled computers to power on.")
+    (license gpl2+)))
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index 574bb11816..069baa88da 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -18,13 +18,25 @@
 
 (define-module (gnu packages backup)
   #:use-module (guix packages)
-  #:use-module (guix licenses)
+  #:use-module ((guix licenses)
+                #:renamer (symbol-prefix-proc 'license:))
   #:use-module (guix download)
+  #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
   #:use-module (gnu packages)
-  #:use-module (gnu packages python)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages dejagnu)
+  #:use-module (gnu packages glib)
   #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages mcrypt)
+  #:use-module (gnu packages nettle)
+  #:use-module (gnu packages pcre)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages rsync)
+  #:use-module (gnu packages ssh)
+  #:use-module (gnu packages xml)
   #:use-module (srfi srfi-1))
 
 (define-public duplicity
@@ -68,4 +80,200 @@ librsync, the incremental archives are space efficient and only record the
 parts of files that have changed since the last backup.  Because duplicity
 uses GnuPG to encrypt and/or sign these archives, they will be safe from
 spying and/or modification by the server.")
-    (license gpl2+)))
+    (license license:gpl2+)))
+
+(define-public hdup
+  (package
+    (name "hdup")
+    (version "2.0.14")
+    (source
+     (origin
+      (method url-fetch)
+      ;; Source tarballs are not versioned
+      (uri "http://archive.miek.nl/projects/hdup2/hdup.tar.bz2")
+      (sha256
+       (base32
+        "02bnczg01cyhajmm4rhbnc0ja0dd9ikv9fwv28asxh1rlx9yr0b7"))))
+    (build-system gnu-build-system)
+    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("glib" ,glib)
+       ("tar" ,tar)
+       ("lzop" ,lzop)
+       ("mcrypt" ,mcrypt)
+       ("openssh" ,openssh)
+       ("gnupg" ,gnupg-1)))
+    (arguments
+     `(#:configure-flags
+       `(,(string-append "--sbindir=" (assoc-ref %outputs "out") "/bin"))
+       #:tests? #f))
+    (home-page "http://archive.miek.nl/projects/hdup/index.html")
+    (synopsis "Simple incremental backup tool")
+    (description
+     "Hdup2 is a backup utilty, its aim is to make backup really simple.  The
+backup scheduling is done by means of a cron job.  It supports an
+include/exclude mechanism, remote backups, encrypted backups and split
+backups (called chunks) to allow easy burning to CD/DVD.")
+    (license license:gpl2)))
+
+(define-public libarchive
+  (package
+    (name "libarchive")
+    (version "3.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://libarchive.org/downloads/libarchive-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "0pixqnrcf35dnqgv0lp7qlcw7k13620qkhgxr288v7p4iz6ym1zb"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("zlib" ,zlib)
+       ("nettle" ,nettle)
+       ("lzo" ,lzo)
+       ("bzip2" ,bzip2)
+       ("libxml2" ,libxml2)
+       ("xz" ,xz)))
+    (arguments
+     `(#:phases
+       (alist-cons-before
+        'build 'patch-pwd
+        (lambda _
+          (substitute* "Makefile"
+            (("/bin/pwd") (which "pwd"))))
+        (alist-replace
+         'check
+         (lambda _
+           ;; XXX: The test_owner_parse, test_read_disk, and
+           ;; test_write_disk_lookup tests expect user 'root' to exist, but
+           ;; the chroot's /etc/passwd doesn't have it.  Turn off those tests.
+           ;;
+           ;; The tests allow one to disable tests matching a globbing pattern.
+           (and (zero? (system* "make"
+                                "libarchive_test" "bsdcpio_test" "bsdtar_test"))
+                ;; XXX: This glob disables too much.
+                (zero? (system* "./libarchive_test" "^test_*_disk*"))
+                (zero? (system* "./bsdcpio_test" "^test_owner_parse"))
+                (zero? (system* "./bsdtar_test"))))
+         %standard-phases))))
+    (home-page "http://libarchive.org/")
+    (synopsis "Multi-format archive and compression library")
+    (description
+     "Libarchive provides a flexible interface for reading and writing
+archives in various formats such as tar and cpio.  Libarchive also supports
+reading and writing archives compressed using various compression filters such
+as gzip and bzip2.  The library is inherently stream-oriented; readers
+serially iterate through the archive, writers serially add things to the
+archive. In particular, note that there is currently no built-in support for
+random access nor for in-place modification.")
+    (license license:bsd-2)))
+
+(define-public rdup
+  (package
+    (name "rdup")
+    (version "1.1.14")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://archive.miek.nl/projects/rdup/rdup-"
+                           version ".tar.bz2"))
+       (sha256
+        (base32
+         "0aklwd9v7ix0m4ayl762sil685f42cwljzx3jz5skrnjaq32npmj"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("dejagnu" ,dejagnu)))
+    (inputs
+     `(("glib" ,glib)
+       ("pcre" ,pcre)
+       ("libarchive" ,libarchive)
+       ("nettle" ,nettle)))
+    (arguments
+     `(#:parallel-build? #f             ;race conditions
+       #:phases (alist-cons-before
+                 'build 'remove-Werror
+                 ;; rdup uses a deprecated function from libarchive
+                 (lambda _
+                   (substitute* "GNUmakefile"
+                     (("^(CFLAGS=.*)-Werror" _ front) front)))
+                 %standard-phases)))
+    (home-page "http://archive.miek.nl/projects/rdup/index.html")
+    (synopsis "Provide a list of files to backup")
+    (description
+     "Rdup is a utility inspired by rsync and the plan9 way of doing backups.
+Rdup itself does not backup anything, it only print a list of absolute
+filenames to standard output.  Auxiliary scripts are needed that act on this
+list and implement the backup strategy.")
+    (license license:gpl3+)))
+
+(define-public btar
+  (package
+    (name "btar")
+    (version "1.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://vicerveza.homeunix.net/~viric/soft/btar/"
+                           "btar-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0miklk4bqblpyzh1bni4x6lqn88fa8fjn15x1k1n8bxkx60nlymd"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("librsync" ,librsync)))
+    (arguments
+     `(#:make-flags `(,(string-append "PREFIX=" (assoc-ref %outputs "out"))
+                      "CC=gcc")
+       #:tests? #f                      ;test input not distributed
+       #:phases
+       (alist-delete
+        'configure                      ;no configure phase
+        %standard-phases)))
+    (home-page "http://viric.name/cgi-bin/btar/doc/trunk/doc/home.wiki")
+    (synopsis "Tar-compatible archiver")
+    (description
+     "Btar is a tar-compatible archiver which allows arbitrary compression and
+ciphering, redundancy, differential backup, indexed extraction, multicore
+compression, input and output serialisation, and tolerance to partial archive
+errors.")
+    (license license:gpl3+)))
+
+(define-public rdiff-backup
+  (package
+    (name "rdiff-backup")
+    (version "1.2.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://savannah/rdiff-backup/rdiff-backup-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "1nwmmh816f96h0ff1jxk95ad38ilbhbdl5dgibx1d4cl81dsi48d"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python2-setuptools" ,python2-setuptools)))
+    (inputs
+     `(("python" ,python-2)
+       ("librsync" ,librsync)))
+    (arguments
+     `(#:python ,python-2
+       #:tests? #f))
+    (home-page "http://www.nongnu.org/rdiff-backup/")
+    (synopsis "Local/remote mirroring+incremental backup")
+    (description
+     "Rdiff-backup backs up one directory to another, possibly over a network.
+The target directory ends up a copy of the source directory, but extra reverse
+diffs are stored in a special subdirectory of that target directory, so you
+can still recover files lost some time ago.  The idea is to combine the best
+features of a mirror and an incremental backup.  Rdiff-backup also preserves
+subdirectories, hard links, dev files, permissions, uid/gid ownership,
+modification times, extended attributes, acls, and resource forks.  Also,
+rdiff-backup can operate in a bandwidth efficient manner over a pipe, like
+rsync.  Thus you can use rdiff-backup and ssh to securely back a hard drive up
+to a remote location, and only the differences will be transmitted.  Finally,
+rdiff-backup is easy to use and settings have sensical defaults.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 3f83ed8d49..ce95559ba5 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -976,6 +976,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
   ;; The final GCC.
   (package (inherit gcc-boot0)
     (name "gcc")
+    (location (source-properties->location (current-source-location)))
     (arguments
      `(#:guile ,%bootstrap-guile
        #:implicit-inputs? #f
diff --git a/gnu/packages/bdb.scm b/gnu/packages/bdb.scm
index 75a2b72b44..e82a683332 100644
--- a/gnu/packages/bdb.scm
+++ b/gnu/packages/bdb.scm
@@ -34,13 +34,21 @@
             (sha256 (base32
                      "1f2g2612lf8djbwbwhxsvmffmf9d7693kh2l20195pqp0f9jmnfx"))))
    (build-system gnu-build-system)
+   (outputs '("out"                             ; programs, libraries, headers
+              "doc"))                           ; 94 MiB of HTML docs
    (arguments
     '(#:tests? #f                            ; no check target available
       #:phases
       (alist-replace
        'configure
        (lambda* (#:key outputs #:allow-other-keys)
-         (let ((out (assoc-ref outputs "out")))
+         (let ((out (assoc-ref outputs "out"))
+               (doc (assoc-ref outputs "doc")))
+           ;; '--docdir' is not honored, so we need to patch.
+           (substitute* "dist/Makefile.in"
+             (("docdir[[:blank:]]*=.*")
+              (string-append "docdir = " doc "/share/doc/bdb")))
+
            (zero?
             (system* "./dist/configure"
                      (string-append "--prefix=" out)
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index c8328076cf..6887ba6167 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -315,3 +315,4 @@ archives that can be readily emailed.  A shell archive is a file that can be
 processed by a Bourne-type shell to unpack the original collection of files. 
 This package is mostly for compatibility and historical interest.")
     (license license:gpl3+)))
+
diff --git a/gnu/packages/ddrescue.scm b/gnu/packages/ddrescue.scm
deleted file mode 100644
index dd5bf0e552..0000000000
--- a/gnu/packages/ddrescue.scm
+++ /dev/null
@@ -1,47 +0,0 @@
-;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013 Nikita Karetnikov <nikita@karetnikov.org>
-;;;
-;;; This file is part of GNU Guix.
-;;;
-;;; GNU Guix is free software; you can redistribute it and/or modify it
-;;; under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 3 of the License, or (at
-;;; your option) any later version.
-;;;
-;;; GNU Guix is distributed in the hope that it will be useful, but
-;;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
-
-(define-module (gnu packages ddrescue)
-  #:use-module (guix licenses)
-  #:use-module (guix packages)
-  #:use-module (guix download)
-  #:use-module (guix build-system gnu)
-  #:use-module ((gnu packages compression) #:select (lzip)))
-
-(define-public ddrescue
-  (package
-    (name "ddrescue")
-    (version "1.17")
-    (source
-     (origin
-      (method url-fetch)
-      (uri (string-append "mirror://gnu/ddrescue/ddrescue-"
-                          version ".tar.lz"))
-      (sha256
-       (base32
-        "0bvmsbzli2j4czwkabzs978n1y6vx31axh02kpgcf7033cc6rydy"))))
-    (build-system gnu-build-system)
-    (home-page "http://www.gnu.org/software/ddrescue/ddrescue.html")
-    (synopsis "Data recovery utility")
-    (native-inputs `(("lzip" ,lzip)))
-    (description
-     "GNU ddrescue is a fully automated data recovery tool.  It copies data
-from one file to another, working to rescue data in case of read errors.  The
-program also includes a tool for manipulating its log files, which are used
-to recover data more efficiently by only reading the necessary blocks.")
-    (license gpl3+)))
diff --git a/gnu/packages/parted.scm b/gnu/packages/disk.scm
index 5d5d38a515..a5404b2749 100644
--- a/gnu/packages/parted.scm
+++ b/gnu/packages/disk.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
+;;; Copyright © 2012, 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -16,7 +16,7 @@
 ;;; You should have received a copy of the GNU General Public License
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
-(define-module (gnu packages parted)
+(define-module (gnu packages disk)
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -24,7 +24,10 @@
   #:use-module (gnu packages check)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages linux)
-  #:use-module (gnu packages readline))
+  #:use-module (gnu packages readline)
+  #:use-module (gnu packages guile)
+  #:use-module ((gnu packages compression)
+                #:select (lzip)))
 
 (define-public parted
   (package
@@ -67,3 +70,52 @@
      "GNU Parted is a package for creating and manipulating disk partition
 tables.  It includes a library and command-line utility.")
     (license gpl3+)))
+
+(define-public fdisk
+  (package
+    (name "fdisk")
+    (version "2.0.0a")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/fdisk/gnufdisk-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "04nd7civ561x2lwcmxhsqbprml3178jfc58fy1v7hzqg5k4nbhy3"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("gettext" ,gnu-gettext)
+       ("guile" ,guile-1.8)
+       ("util-linux" ,util-linux)
+       ("parted" ,parted)))
+    (home-page "https://www.gnu.org/software/fdisk/")
+    (synopsis "Low-level disk partitioning and formatting")
+    (description
+     "GNU fdisk provides a GNU version of the common disk partitioning tool
+fdisk.  fdisk is used for the creation and manipulation of disk partition
+tables, and it understands a variety of different formats.")
+    (license gpl3+)))
+
+(define-public ddrescue
+  (package
+    (name "ddrescue")
+    (version "1.17")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/ddrescue/ddrescue-"
+                          version ".tar.lz"))
+      (sha256
+       (base32
+        "0bvmsbzli2j4czwkabzs978n1y6vx31axh02kpgcf7033cc6rydy"))))
+    (build-system gnu-build-system)
+    (home-page "http://www.gnu.org/software/ddrescue/ddrescue.html")
+    (synopsis "Data recovery utility")
+    (native-inputs `(("lzip" ,lzip)))
+    (description
+     "GNU ddrescue is a fully automated data recovery tool.  It copies data
+from one file to another, working to rescue data in case of read errors.  The
+program also includes a tool for manipulating its log files, which are used
+to recover data more efficiently by only reading the necessary blocks.")
+    (license gpl3+)))
diff --git a/gnu/packages/elf.scm b/gnu/packages/elf.scm
index 45714be70e..a9f2ab5351 100644
--- a/gnu/packages/elf.scm
+++ b/gnu/packages/elf.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -47,8 +47,11 @@
     (native-inputs `(("m4" ,m4)))
     (inputs `(("zlib" ,zlib)))
     (home-page "https://fedorahosted.org/elfutils/")
-    (synopsis #f)
-    (description #f)
+    (synopsis "Linker and ELF manipulation tools")
+    (description
+     "This package provides command-line tools to manipulate binaries in the
+Executable and Linkable Format (ELF).  This includes ld, ar, objdump,
+addr2line, and more.")
 
     ;; Libraries are dual-licensed LGPLv3.0+ | GPLv2, and programs are GPLv3+.
     (license lgpl3+)))
diff --git a/gnu/packages/fdisk.scm b/gnu/packages/fdisk.scm
deleted file mode 100644
index 8272c45aab..0000000000
--- a/gnu/packages/fdisk.scm
+++ /dev/null
@@ -1,53 +0,0 @@
-;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
-;;;
-;;; This file is part of GNU Guix.
-;;;
-;;; GNU Guix is free software; you can redistribute it and/or modify it
-;;; under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 3 of the License, or (at
-;;; your option) any later version.
-;;;
-;;; GNU Guix is distributed in the hope that it will be useful, but
-;;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
-
-(define-module (gnu packages fdisk)
-  #:use-module ((guix licenses) #:select (gpl3+))
-  #:use-module (gnu packages gettext)
-  #:use-module (gnu packages guile)
-  #:use-module (gnu packages linux)
-  #:use-module (gnu packages parted)
-  #:use-module (guix packages)
-  #:use-module (guix download)
-  #:use-module (guix build-system gnu))
-
-(define-public fdisk
-  (package
-    (name "fdisk")
-    (version "2.0.0a")
-    (source
-     (origin
-      (method url-fetch)
-      (uri (string-append "mirror://gnu/fdisk/gnufdisk-"
-                          version ".tar.gz"))
-      (sha256
-       (base32
-        "04nd7civ561x2lwcmxhsqbprml3178jfc58fy1v7hzqg5k4nbhy3"))))
-    (build-system gnu-build-system)
-    (inputs
-     `(("gettext" ,gnu-gettext)
-       ("guile" ,guile-1.8)
-       ("util-linux" ,util-linux)
-       ("parted" ,parted)))
-    (home-page "https://www.gnu.org/software/fdisk/")
-    (synopsis "Low-level disk partitioning and formatting")
-    (description
-     "GNU fdisk provides a GNU version of the common disk partitioning tool
-fdisk.  fdisk is used for the creation and manipulation of disk partition
-tables, and it understands a variety of different formats.")
-    (license gpl3+)))
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 232afc6e44..b10f2a6646 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -460,7 +460,6 @@ the API")
               (sha256
                (base32 "1ya4d2j2aacr9ii5zj4ac95fjpdvlm2rg79mgnk7yvl1dcy3y1z5"))
               (patches (list
-                        (search-patch "gtkglext-remove-pangox-dependency.patch")
                         (search-patch "gtkglext-disable-disable-deprecated.patch")))))
     (build-system gnu-build-system)
     (inputs `(("gtk+" ,gtk+-2)
@@ -468,6 +467,7 @@ the API")
               ("libx11" ,libx11)
               ("libxt" ,libxt)))
     (native-inputs `(("pkg-config" ,pkg-config)))
+    (propagated-inputs `(("pangox-compat" ,pangox-compat)))
     (home-page "https://projects.gnome.org/gtkglext")
     (synopsis "OpenGL extension to GTK+.")
     (description "GtkGLExt is an OpenGL extension to GTK+. It provides
@@ -837,7 +837,8 @@ allows applications to access local and remote files with a single consistent AP
     (source (origin
               (method url-fetch)
               (uri (string-append
-                    "mirror://gnome/sources/" name "/" (string-take version 3)  "/" name "-"
+                    "mirror://gnome/sources/" name "/"
+                    (string-take version 4)  "/" name "-"
                     version
                     ".tar.bz2"))
               (sha256
diff --git a/gnu/packages/gnutls.scm b/gnu/packages/gnutls.scm
index 0391f54126..e136ed8b26 100644
--- a/gnu/packages/gnutls.scm
+++ b/gnu/packages/gnutls.scm
@@ -63,7 +63,7 @@ specifications.")
 (define-public gnutls
   (package
     (name "gnutls")
-    (version "3.2.12")
+    (version "3.2.15")
     (source (origin
              (method url-fetch)
              (uri
@@ -75,7 +75,7 @@ specifications.")
                              "/gnutls-" version ".tar.xz"))
              (sha256
               (base32
-               "0195nliarszq5mginli6d2f5z7ljnd7mwa46iy9z8pkcgy56khbl"))))
+               "1fbpr9r1r2y803s3avwjpy1higqsz85dyb302kvmh0i29frwgg9h"))))
     (build-system gnu-build-system)
     (arguments
      ;; Work around build issue reported at
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 130a0f2a9a..518b0e41b9 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -34,6 +34,7 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages gettext)
+  #:use-module (gnu packages glib)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages attr)
   #:use-module (gnu packages xml)
@@ -132,7 +133,9 @@
                    version ".tar.bz2"))
              (sha256
               (base32
-               "0jxnz9ahfic79rp93l5wxcbgh4pkv85mwnjlbv1gz3jawv5cvwp1"))))
+               "0jxnz9ahfic79rp93l5wxcbgh4pkv85mwnjlbv1gz3jawv5cvwp1"))
+             (patches
+              (list (search-patch "module-init-tools-moduledir.patch")))))
     (build-system gnu-build-system)
     (arguments
      ;; FIXME: The upstream tarball lacks man pages, and building them would
@@ -181,7 +184,8 @@
                                                 "CONFIG_VIRTIO_MMIO=m\n"
                                                 "CONFIG_FUSE_FS=m\n"
                                                 "CONFIG_CIFS=m\n"
-                                                "CONFIG_9P_FS=m\n")
+                                                "CONFIG_9P_FS=m\n"
+                                                "CONFIG_E1000E=m\n")
                                  port)
                         (close-port port))
 
@@ -316,15 +320,15 @@ providing the system administrator with some help in common tasks.")
   (package
     (name "util-linux")
     (version "2.21")
-    (source
-     (origin
-      (method url-fetch)
-      (uri (string-append "mirror://kernel.org/linux/utils/"
-                          name "/v" version "/"
-                          name "-" version ".2" ".tar.xz"))
-      (sha256
-       (base32
-        "1rpgghf7n0zx0cdy8hibr41wvkm2qp1yvd8ab1rxr193l1jmgcir"))))
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://kernel.org/linux/utils/"
+                                  name "/v" version "/"
+                                  name "-" version ".2" ".tar.xz"))
+              (sha256
+               (base32
+                "1rpgghf7n0zx0cdy8hibr41wvkm2qp1yvd8ab1rxr193l1jmgcir"))
+              (patches (list (search-patch "util-linux-perl.patch")))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--disable-use-tty-group"
@@ -961,7 +965,15 @@ processes currently causing I/O.")
                                     "/bin/" maybe-u "mount")))
                   (substitute* '("util/mount.fuse.c")
                     (("/bin/sh")
-                     (which "sh"))))
+                     (which "sh")))
+
+                  ;; This hack leads libfuse to search for 'fusermount' in
+                  ;; $PATH, where it may find a setuid-root binary, instead of
+                  ;; trying solely $out/sbin/fusermount and failing because
+                  ;; it's not setuid.
+                  (substitute* "lib/Makefile"
+                    (("-DFUSERMOUNT_DIR=[[:graph:]]+")
+                     "-DFUSERMOUNT_DIR=\\\"/var/empty\\\"")))
                 %standard-phases)))
     (home-page "http://fuse.sourceforge.net/")
     (synopsis "Support file systems implemented in user space")
@@ -1033,6 +1045,32 @@ UnionFS-FUSE additionally supports copy-on-write.")
        #:configure-flags '("-DCMAKE_EXE_LINKER_FLAGS=-static")))
     (inputs `(("fuse" ,fuse-static)))))
 
+(define-public sshfs-fuse
+  (package
+    (name "sshfs-fuse")
+    (version "2.5")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/fuse/sshfs-fuse-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0gp6qr33l2p0964j0kds0dfmvyyf5lpgsn11daf0n5fhwm9185z9"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("fuse" ,fuse)
+       ("glib" ,glib)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (home-page "http://fuse.sourceforge.net/sshfs.html")
+    (synopsis "Mount remote file systems over SSH")
+    (description
+     "This is a file system client based on the SSH File Transfer Protocol.
+Since most SSH servers already support this protocol it is very easy to set
+up: on the server side there's nothing to do; on the client side mounting the
+file system is as easy as logging into the server with an SSH client.")
+    (license gpl2+)))
+
 (define-public numactl
   (package
     (name "numactl")
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 8ef4f44f5a..d1860dfa97 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -253,7 +253,8 @@ plotting engine by third-party applications like Octave.")
     (source
      (origin
       (method url-fetch)
-      (uri (string-append "http://www.hdfgroup.org/ftp/HDF5/current/src/hdf5-"
+      (uri (string-append "http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-"
+                          version "/src/hdf5-"
                           version ".tar.bz2"))
       (sha256
        (base32 "0f9n0v3p3lwc7564791a39c6cn1d3dbrn7d1j3ikqsi27a8hy23d"))))
diff --git a/gnu/packages/openssl.scm b/gnu/packages/openssl.scm
index eb03bb99c3..51caa00e68 100644
--- a/gnu/packages/openssl.scm
+++ b/gnu/packages/openssl.scm
@@ -28,17 +28,14 @@
 (define-public openssl
   (package
    (name "openssl")
-   (version "1.0.1g")
+   (version "1.0.1h")
    (source (origin
             (method url-fetch)
             (uri (string-append "ftp://ftp.openssl.org/source/openssl-" version
                                 ".tar.gz"))
             (sha256
              (base32
-              "0a70qdqccg16nw4bbawa6pjvzn05vfp5wkwg6jl0grch7f683jsk"))
-            (patches
-             (list (search-patch "openssl-CVE-2010-5298.patch")
-                   (search-patch "openssl-extension-checking-fixes.patch")))))
+              "14yhsgag5as7nhxnw7f0vklwjwa3pmn1i15nmp3f4qxa6sc8l74x"))))
    (build-system gnu-build-system)
    (native-inputs `(("perl" ,perl)))
    (arguments
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index e74491a827..672ae9ad6b 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -43,6 +43,7 @@
     (arguments
      `(#:configure-flags (list
                           "--localstatedir=/var"
+                          "--sysconfdir=/etc"
                           (string-append "--with-libgcrypt-prefix="
                                          (assoc-ref %build-inputs
                                                     "libgcrypt")))
diff --git a/gnu/packages/patches/cssc-gets-undeclared.patch b/gnu/packages/patches/cssc-gets-undeclared.patch
new file mode 100644
index 0000000000..68c607cf58
--- /dev/null
+++ b/gnu/packages/patches/cssc-gets-undeclared.patch
@@ -0,0 +1,17 @@
+CSSC uses a gets in a couple of places.  For security reasons, modern gnulib
+does not allow this.  This patch allows it again.
+--- CSSC-1.3.0/gl/lib/stdio.in.h	2010-05-15 00:15:35.000000000 +0200
++++ CSSC-1.3.0/gl/lib/stdio.in.h	2014-02-03 21:27:10.000000000 +0100
+@@ -135,12 +135,6 @@
+                  "use gnulib module fflush for portable POSIX compliance");
+ #endif
+ 
+-/* It is very rare that the developer ever has full control of stdin,
+-   so any use of gets warrants an unconditional warning.  Assume it is
+-   always declared, since it is required by C89.  */
+-#undef gets
+-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+-
+ #if @GNULIB_FOPEN@
+ # if @REPLACE_FOPEN@
+ #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
diff --git a/gnu/packages/patches/cssc-missing-include.patch b/gnu/packages/patches/cssc-missing-include.patch
new file mode 100644
index 0000000000..3cef9c15f1
--- /dev/null
+++ b/gnu/packages/patches/cssc-missing-include.patch
@@ -0,0 +1,12 @@
+Added a missing include file (necessary for gid_t and others).
+So far as I am aware, this has not been added upstream yet.
+--- CSSC-1.3.0/src/file.h	2010-05-16 19:31:33.000000000 +0200
++++ CSSC-1.3.0/src/file.h	2014-02-03 21:48:30.000000000 +0100
+@@ -30,6 +30,7 @@
+ #ifndef CSSC__FILE_H__
+ #define CSSC__FILE_H__
+ 
++#include <sys/types.h>
+ #include "filelock.h"
+ 
+ enum create_mode {
diff --git a/gnu/packages/patches/gtkglext-remove-pangox-dependency.patch b/gnu/packages/patches/gtkglext-remove-pangox-dependency.patch
deleted file mode 100644
index 4f03785322..0000000000
--- a/gnu/packages/patches/gtkglext-remove-pangox-dependency.patch
+++ /dev/null
@@ -1,132 +0,0 @@
-This patch removes the dependency on pangox which has been deprecated.  It
-achieves the same result as the upstream patch at 
-https://git.gnome.org/browse/gtkglext/commit/?id=df7a7b35b80b395d7ba411c7f727970a46fb0588
-Like the upstream patch, it removes the functions gdk_gl_font_use_pango_font,
-and gdk_gl_font_use_pango_font_for_display from the API.
-
-diff -r -U 3 a/configure b/configure
---- a/configure	2006-02-05 04:17:47.000000000 +0100
-+++ b/configure	2013-12-26 12:55:21.000000000 +0100
-@@ -19880,14 +19880,12 @@
- gtk+-2.0 >= 2.0.0 \\
- gdk-2.0 >= 2.0.0 \\
- pango >= 1.0.0 \\
--pangox >= 1.0.0 \\
- gmodule-2.0 >= 2.0.0 \\
- \"") >&5
-   ($PKG_CONFIG --exists --print-errors "\
- gtk+-2.0 >= 2.0.0 \
- gdk-2.0 >= 2.0.0 \
- pango >= 1.0.0 \
--pangox >= 1.0.0 \
- gmodule-2.0 >= 2.0.0 \
- ") 2>&5
-   ac_status=$?
-@@ -19897,7 +19895,6 @@
- gtk+-2.0 >= 2.0.0 \
- gdk-2.0 >= 2.0.0 \
- pango >= 1.0.0 \
--pangox >= 1.0.0 \
- gmodule-2.0 >= 2.0.0 \
- " 2>/dev/null`
- else
-@@ -19916,14 +19913,12 @@
- gtk+-2.0 >= 2.0.0 \\
- gdk-2.0 >= 2.0.0 \\
- pango >= 1.0.0 \\
--pangox >= 1.0.0 \\
- gmodule-2.0 >= 2.0.0 \\
- \"") >&5
-   ($PKG_CONFIG --exists --print-errors "\
- gtk+-2.0 >= 2.0.0 \
- gdk-2.0 >= 2.0.0 \
- pango >= 1.0.0 \
--pangox >= 1.0.0 \
- gmodule-2.0 >= 2.0.0 \
- ") 2>&5
-   ac_status=$?
-@@ -19933,7 +19928,6 @@
- gtk+-2.0 >= 2.0.0 \
- gdk-2.0 >= 2.0.0 \
- pango >= 1.0.0 \
--pangox >= 1.0.0 \
- gmodule-2.0 >= 2.0.0 \
- " 2>/dev/null`
- else
-@@ -19958,7 +19952,6 @@
- gtk+-2.0 >= 2.0.0 \
- gdk-2.0 >= 2.0.0 \
- pango >= 1.0.0 \
--pangox >= 1.0.0 \
- gmodule-2.0 >= 2.0.0 \
- "`
-         else
-@@ -19966,7 +19959,6 @@
- gtk+-2.0 >= 2.0.0 \
- gdk-2.0 >= 2.0.0 \
- pango >= 1.0.0 \
--pangox >= 1.0.0 \
- gmodule-2.0 >= 2.0.0 \
- "`
-         fi
-@@ -19977,7 +19969,6 @@
- gtk+-2.0 >= 2.0.0 \
- gdk-2.0 >= 2.0.0 \
- pango >= 1.0.0 \
--pangox >= 1.0.0 \
- gmodule-2.0 >= 2.0.0 \
- ) were not met:
- 
-@@ -19994,7 +19985,6 @@
- gtk+-2.0 >= 2.0.0 \
- gdk-2.0 >= 2.0.0 \
- pango >= 1.0.0 \
--pangox >= 1.0.0 \
- gmodule-2.0 >= 2.0.0 \
- ) were not met:
- 
-@@ -25420,7 +25410,7 @@
- # CFLAGS and LIBS
- ##################################################
- 
--GDKGLEXT_PACKAGES="gdk-2.0 pango pangox gmodule-2.0"
-+GDKGLEXT_PACKAGES="gdk-2.0 pango gmodule-2.0"
- GDKGLEXT_EXTRA_CFLAGS="$GL_CFLAGS $GDKGLEXT_WIN_CFLAGS"
- GDKGLEXT_EXTRA_LIBS="$GL_LIBS $GDKGLEXT_WIN_LIBS"
- GDKGLEXT_DEP_CFLAGS="$GDKGLEXT_EXTRA_CFLAGS `$PKG_CONFIG --cflags $GDKGLEXT_PACKAGES`"
-diff -r -U 3 a/gdk/x11/Makefile.in b/gdk/x11/Makefile.in
---- a/gdk/x11/Makefile.in	2006-02-05 04:17:42.000000000 +0100
-+++ b/gdk/x11/Makefile.in	2013-12-26 13:12:04.000000000 +0100
-@@ -257,7 +257,6 @@
- 	gdkgldrawable-x11.c	\
- 	gdkglpixmap-x11.c	\
- 	gdkglwindow-x11.c	\
--	gdkglfont-x11.c		\
- 	gdkglglxext.c
- 
- 
-@@ -288,7 +287,7 @@
- am__objects_1 =
- am__objects_2 = gdkglquery-x11.lo gdkglconfig-x11.lo gdkgloverlay-x11.lo \
- 	gdkglcontext-x11.lo gdkgldrawable-x11.lo gdkglpixmap-x11.lo \
--	gdkglwindow-x11.lo gdkglfont-x11.lo gdkglglxext.lo
-+	gdkglwindow-x11.lo gdkglglxext.lo
- am__objects_3 = $(am__objects_1) $(am__objects_2)
- am_libgdkglext_x11_la_OBJECTS = $(am__objects_3)
- libgdkglext_x11_la_OBJECTS = $(am_libgdkglext_x11_la_OBJECTS)
-@@ -299,7 +298,6 @@
- @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/gdkglconfig-x11.Plo \
- @AMDEP_TRUE@	./$(DEPDIR)/gdkglcontext-x11.Plo \
- @AMDEP_TRUE@	./$(DEPDIR)/gdkgldrawable-x11.Plo \
--@AMDEP_TRUE@	./$(DEPDIR)/gdkglfont-x11.Plo \
- @AMDEP_TRUE@	./$(DEPDIR)/gdkglglxext.Plo \
- @AMDEP_TRUE@	./$(DEPDIR)/gdkgloverlay-x11.Plo \
- @AMDEP_TRUE@	./$(DEPDIR)/gdkglpixmap-x11.Plo \
-@@ -349,7 +347,6 @@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdkglconfig-x11.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdkglcontext-x11.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdkgldrawable-x11.Plo@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdkglfont-x11.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdkglglxext.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdkgloverlay-x11.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdkglpixmap-x11.Plo@am__quote@
diff --git a/gnu/packages/patches/module-init-tools-moduledir.patch b/gnu/packages/patches/module-init-tools-moduledir.patch
new file mode 100644
index 0000000000..68d7988f53
--- /dev/null
+++ b/gnu/packages/patches/module-init-tools-moduledir.patch
@@ -0,0 +1,168 @@
+This patch changes 'modprobe' & co. so they honor the 'LINUX_MODULE_DIRECTORY'
+environment variable, rather than looking for modules exclusively in
+/lib/modules.
+
+Patch by David Guibert, from Nixpkgs; adjusted to use 'LINUX_MODULE_DIRECTORY'
+rather than 'MODULE_DIR' as the variable name.
+
+commit cf2c95edb7918bc658f6cae93793c1949fc9cb6e
+Author: David Guibert <david.guibert@gmail.com>
+Date:   Fri Aug 5 14:20:12 2011 +0200
+
+    introduce module-dir
+
+diff --git a/depmod.c b/depmod.c
+index a1d2f8c..9362a35 100644
+--- a/depmod.c
++++ b/depmod.c
+@@ -48,9 +48,6 @@
+ 
+ #include "testing.h"
+ 
+-#ifndef MODULE_DIR
+-#define MODULE_DIR "/lib/modules/"
+-#endif
+ 
+ #ifndef MODULE_BUILTIN_KEY
+ #define MODULE_BUILTIN_KEY "built-in"
+@@ -1516,6 +1513,7 @@ static int parse_config_file(const char *filename,
+ 	char *line;
+ 	unsigned int linenum = 0;
+ 	FILE *cfile;
++ 	char *module_dir;
+ 
+ 	cfile = fopen(filename, "r");
+ 	if (!cfile) {
+@@ -1525,6 +1523,10 @@ static int parse_config_file(const char *filename,
+ 		return 0;
+ 	}
+ 
++        if((module_dir = getenv("LINUX_MODULE_DIRECTORY")) == NULL) {
++                module_dir = "/lib/modules/";
++        }
++
+ 	while ((line = getline_wrapped(cfile, &linenum)) != NULL) {
+ 		char *ptr = line;
+ 		char *cmd, *modname;
+@@ -1550,7 +1552,7 @@ static int parse_config_file(const char *filename,
+ 					continue;
+ 				}
+ 				nofail_asprintf(&dirname, "%s%s%s/%s", basedir,
+-					MODULE_DIR, kernelversion, search_path);
++					module_dir, kernelversion, search_path);
+ 				len = strlen(dirname);
+ 				*search = add_search(dirname, len, *search);
+ 				free(dirname);
+@@ -1565,7 +1567,7 @@ static int parse_config_file(const char *filename,
+ 				continue;
+ 
+ 			nofail_asprintf(&pathname, "%s%s%s/%s/%s.ko", basedir,
+-				MODULE_DIR, kernelversion, subdir, modname);
++				module_dir, kernelversion, subdir, modname);
+ 
+ 			*overrides = add_override(pathname, *overrides);
+ 			free(pathname);
+@@ -1737,6 +1739,7 @@ int main(int argc, char *argv[])
+ 	char *basedir = "", *dirname, *version;
+ 	char *system_map = NULL, *module_symvers = NULL;
+ 	int i;
++ 	char *module_dir;
+ 	const char *config = NULL;
+ 
+ 	if (native_endianness() == 0)
+@@ -1832,7 +1835,11 @@ int main(int argc, char *argv[])
+ 	if (optind == argc)
+ 		all = 1;
+ 
+-	nofail_asprintf(&dirname, "%s%s%s", basedir, MODULE_DIR, version);
++        if((module_dir = getenv("LINUX_MODULE_DIRECTORY")) == NULL) {
++                module_dir = "/lib/modules/";
++        }
++
++	nofail_asprintf(&dirname, "%s%s%s", basedir, module_dir, version);
+ 
+ 	if (maybe_all) {
+ 		if (!doing_stdout && !depfile_out_of_date(dirname))
+@@ -1850,7 +1857,7 @@ int main(int argc, char *argv[])
+ 		size_t len;
+ 
+ 		nofail_asprintf(&dirname, "%s%s%s/updates", basedir,
+-				MODULE_DIR, version);
++				module_dir, version);
+ 		len = strlen(dirname);
+ 		search = add_search(dirname, len, search);
+ 	}
+diff --git a/modinfo.c b/modinfo.c
+index 1dd8469..67b1041 100644
+--- a/modinfo.c
++++ b/modinfo.c
+@@ -19,9 +19,6 @@
+ #include "zlibsupport.h"
+ #include "testing.h"
+ 
+-#ifndef MODULE_DIR
+-#define MODULE_DIR "/lib/modules"
+-#endif
+ 
+ struct param
+ {
+@@ -193,6 +190,11 @@ static struct elf_file *grab_module(const char *name,
+ 	struct utsname buf;
+ 	char *depname, *p, *moddir;
+ 	struct elf_file *module;
++ 	char *module_dir;
++
++        if((module_dir = getenv("LINUX_MODULE_DIRECTORY")) == NULL) {
++                module_dir = "/lib/modules/";
++        }
+ 
+ 	if (strchr(name, '.') || strchr(name, '/')) {
+ 		module = grab_elf_file(name);
+@@ -207,9 +209,9 @@ static struct elf_file *grab_module(const char *name,
+ 		kernel = buf.release;
+ 	}
+ 	if (strlen(basedir))
+-		nofail_asprintf(&moddir, "%s/%s/%s", basedir, MODULE_DIR, kernel);
++		nofail_asprintf(&moddir, "%s/%s/%s", basedir, module_dir, kernel);
+ 	else
+-		nofail_asprintf(&moddir, "%s/%s", MODULE_DIR, kernel);
++		nofail_asprintf(&moddir, "%s/%s", module_dir, kernel);
+ 
+ 	/* Search for it in modules.dep. */
+ 	nofail_asprintf(&depname, "%s/%s", moddir, "modules.dep");
+diff --git a/modprobe.c b/modprobe.c
+index 5464f45..d9fbf9d 100644
+--- a/modprobe.c
++++ b/modprobe.c
+@@ -86,10 +86,6 @@ typedef enum
+ 
+ } modprobe_flags_t;
+ 
+-#ifndef MODULE_DIR
+-#define MODULE_DIR "/lib/modules"
+-#endif
+-
+ /**
+  * print_usage - output the prefered program usage
+  *
+@@ -2136,6 +2132,7 @@ int main(int argc, char *argv[])
+ 	struct modprobe_conf conf = {};
+ 
+ 	recursion_depth = 0;
++ 	char *module_dir = NULL;
+ 
+ 	/* Prepend options from environment. */
+ 	argv = merge_args(getenv("MODPROBE_OPTIONS"), argv, &argc);
+@@ -2233,7 +2230,11 @@ int main(int argc, char *argv[])
+ 	if (argc < optind + 1 && !dump_config && !list_only)
+ 		print_usage(argv[0]);
+ 
+-	nofail_asprintf(&dirname, "%s%s/%s", basedir, MODULE_DIR, buf.release);
++	if((module_dir = getenv("LINUX_MODULE_DIRECTORY")) == NULL) {
++		module_dir = "/lib/modules";
++	}
++
++	nofail_asprintf(&dirname, "%s%s/%s", basedir, module_dir, buf.release);
+ 
+ 	/* Old-style -t xxx wildcard?  Only with -l. */
+ 	if (list_only) {
diff --git a/gnu/packages/patches/openssl-CVE-2010-5298.patch b/gnu/packages/patches/openssl-CVE-2010-5298.patch
deleted file mode 100644
index 707a24dff0..0000000000
--- a/gnu/packages/patches/openssl-CVE-2010-5298.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From db978be7388852059cf54e42539a363d549c5bfd Mon Sep 17 00:00:00 2001
-From: Kurt Roeckx <kurt@roeckx.be>
-Date: Sun, 13 Apr 2014 15:05:30 +0200
-Subject: [PATCH] Don't release the buffer when there still is data in it
-
-RT: 2167, 3265
----
- ssl/s3_pkt.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/ssl/s3_pkt.c b/ssl/s3_pkt.c
-index b9e45c7..32e9207 100644
---- a/ssl/s3_pkt.c
-+++ b/ssl/s3_pkt.c
-@@ -1055,7 +1055,8 @@ int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek)
- 				{
- 				s->rstate=SSL_ST_READ_HEADER;
- 				rr->off=0;
--				if (s->mode & SSL_MODE_RELEASE_BUFFERS)
-+				if (s->mode & SSL_MODE_RELEASE_BUFFERS &&
-+					s->s3->rbuf.left == 0)
- 					ssl3_release_read_buffer(s);
- 				}
- 			}
--- 
-1.9.1
-
diff --git a/gnu/packages/patches/openssl-extension-checking-fixes.patch b/gnu/packages/patches/openssl-extension-checking-fixes.patch
deleted file mode 100644
index 3fdd893563..0000000000
--- a/gnu/packages/patches/openssl-extension-checking-fixes.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 300b9f0b704048f60776881f1d378c74d9c32fbd Mon Sep 17 00:00:00 2001
-From: "Dr. Stephen Henson" <steve@openssl.org>
-Date: Tue, 15 Apr 2014 18:48:54 +0100
-Subject: [PATCH] Extension checking fixes.
-
-When looking for an extension we need to set the last found
-position to -1 to properly search all extensions.
-
-PR#3309.
----
- crypto/x509v3/v3_purp.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/crypto/x509v3/v3_purp.c b/crypto/x509v3/v3_purp.c
-index 6c40c7d..5f931db 100644
---- a/crypto/x509v3/v3_purp.c
-+++ b/crypto/x509v3/v3_purp.c
-@@ -389,8 +389,8 @@ static void x509v3_cache_extensions(X509 *x)
- 	/* Handle proxy certificates */
- 	if((pci=X509_get_ext_d2i(x, NID_proxyCertInfo, NULL, NULL))) {
- 		if (x->ex_flags & EXFLAG_CA
--		    || X509_get_ext_by_NID(x, NID_subject_alt_name, 0) >= 0
--		    || X509_get_ext_by_NID(x, NID_issuer_alt_name, 0) >= 0) {
-+		    || X509_get_ext_by_NID(x, NID_subject_alt_name, -1) >= 0
-+		    || X509_get_ext_by_NID(x, NID_issuer_alt_name, -1) >= 0) {
- 			x->ex_flags |= EXFLAG_INVALID;
- 		}
- 		if (pci->pcPathLengthConstraint) {
-@@ -670,7 +670,7 @@ static int check_purpose_timestamp_sign(const X509_PURPOSE *xp, const X509 *x,
- 		return 0;
- 
- 	/* Extended Key Usage MUST be critical */
--	i_ext = X509_get_ext_by_NID((X509 *) x, NID_ext_key_usage, 0);
-+	i_ext = X509_get_ext_by_NID((X509 *) x, NID_ext_key_usage, -1);
- 	if (i_ext >= 0)
- 		{
- 		X509_EXTENSION *ext = X509_get_ext((X509 *) x, i_ext);
--- 
-1.9.1
-
diff --git a/gnu/packages/patches/util-linux-perl.patch b/gnu/packages/patches/util-linux-perl.patch
new file mode 100644
index 0000000000..c657a1b5ae
--- /dev/null
+++ b/gnu/packages/patches/util-linux-perl.patch
@@ -0,0 +1,15 @@
+Use this common trick that exploits similarities between sh and Perl syntax
+to avoid a hard dependency on Perl.  Instead, this script will work only
+when 'perl' is available in $PATH.
+
+--- util-linux-2.21.2/misc-utils/chkdupexe.pl	2012-05-15 13:51:45.000000000 +0200
++++ util-linux-2.21.2/misc-utils/chkdupexe.pl	2014-06-01 22:46:06.000000000 +0200
+@@ -1,5 +1,6 @@
+-#!@PERL@ -w
+-#
++eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
++  & eval 'exec perl -wS "$0" $argv:q'
++    if 0;
+ # chkdupexe version 2.1.1
+ #
+ # Simple script to look for and list duplicate executables and dangling
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index ed7d6f61ad..3903b971ad 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -44,7 +44,8 @@
   #:use-module (gnu packages emacs)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages swig)
-  #:use-module (gnu packages tcl))
+  #:use-module (gnu packages tcl)
+  #:use-module (gnu packages))
 
 (define-public bazaar
   (package
@@ -435,3 +436,46 @@ standards-compliant ChangeLog entries based on the changes that it detects.")
 insertions, deletions, and modifications per-file.  It is useful for reviewing
 large, complex patch files.")
     (license (x11-style "file://COPYING"))))
+
+
+(define-public cssc
+  (package
+    (name "cssc")
+    (version "1.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/" name "/CSSC-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0bkw6fjh20ppvn54smv05461lm1vcwvn02avx941c4acafmkl1cm"))
+              (patches (list (search-patch "cssc-gets-undeclared.patch")
+                             (search-patch "cssc-missing-include.patch")))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases (alist-cons-before
+                 'check 'precheck
+                 (lambda _
+                   (begin
+                     (substitute* "tests/common/test-common"
+                       (("/bin/pwd") (which "pwd")))
+
+                     (substitute* "tests/prt/all-512.sh"
+                       (("/bin/sh") (which "sh")))
+
+                     ;; XXX: This test has no hope of passing until there is a "nogroup"
+                     ;; entry (or at least some group to which the guix builder does
+                     ;; not belong) in the /etc/group file of the build environment.
+                     ;; Currently we do not have such a group.  Disable this test for now.
+                     (substitute* "tests/Makefile"
+                       (("test-delta ") ""))))
+                 %standard-phases)))
+    ;; These are needed for the tests
+    (native-inputs `(("git" ,git)
+                     ("cvs" ,cvs)))
+    (home-page "http://www.gnu.org/software/cssc/")
+    (synopsis "File-based version control like SCCS")
+    (description  "GNU CSSC provides a replacement for the legacy Unix source
+code control system SCCS.  This allows old code still under that system to be
+accessed and migrated on modern systems.")
+    (license gpl3+)))
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index dc0161408b..65a8ceefc4 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -17,6 +17,8 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu services base)
+  #:use-module ((guix store)
+                #:select (%store-prefix))
   #:use-module (gnu services)
   #:use-module (gnu system shadow)                ; 'user-account', etc.
   #:use-module (gnu system linux)                 ; 'pam-service', etc.
@@ -89,9 +91,11 @@ This service must be the root of the service dependency graph so that its
       (respawn? #f)))))
 
 (define* (file-system-service device target type
-                              #:key (check? #t) options)
+                              #:key (check? #t) options (title 'any))
   "Return a service that mounts DEVICE on TARGET as a file system TYPE with
-OPTIONS.  When CHECK? is true, check the file system before mounting it."
+OPTIONS.  TITLE is a symbol specifying what kind of name DEVICE is: 'label for
+a partition label, 'device for a device file name, or 'any.  When CHECK? is
+true, check the file system before mounting it."
   (with-monad %store-monad
     (return
      (service
@@ -99,10 +103,11 @@ OPTIONS.  When CHECK? is true, check the file system before mounting it."
       (requirement '(root-file-system))
       (documentation "Check, mount, and unmount the given file system.")
       (start #~(lambda args
-                 #$(if check?
-                       #~(check-file-system #$device #$type)
-                       #~#t)
-                 (mount #$device #$target #$type 0 #$options)
+                 (let ((device (canonicalize-device-spec #$device '#$title)))
+                   #$(if check?
+                         #~(check-file-system device #$type)
+                         #~#t)
+                   (mount device #$target #$type 0 #$options))
                  #t))
       (stop #~(lambda args
                 ;; Normally there are no processes left at this point, so
@@ -193,9 +198,31 @@ stopped before 'kill' is called."
 (define* (mingetty-service tty
                            #:key
                            (motd (text-file "motd" "Welcome.\n"))
+                           auto-login
+                           login-program
+                           login-pause?
                            (allow-empty-passwords? #t))
-  "Return a service to run mingetty on TTY."
-  (mlet %store-monad ((motd motd))
+  "Return a service to run mingetty on @var{tty}.
+
+When @var{allow-empty-passwords?} is true, allow empty log-in password.  When
+@var{auto-login} is true, it must be a user name under which to log-in
+automatically.  @var{login-pause?} can be set to @code{#t} in conjunction with
+@var{auto-login}, in which case the user will have to press a key before the
+login shell is launched.
+
+When true, @var{login-program} is a gexp or a monadic gexp denoting the name
+of the log-in program (the default is the @code{login} program from the Shadow
+tool suite.)
+
+@var{motd} is a monadic value containing a text file to use as
+the \"message of the day\"."
+  (mlet %store-monad ((motd motd)
+                      (login-program (cond ((gexp? login-program)
+                                            (return login-program))
+                                           ((not login-program)
+                                            (return #f))
+                                           (else
+                                            login-program))))
     (return
      (service
       (documentation (string-append "Run mingetty on " tty "."))
@@ -207,7 +234,16 @@ stopped before 'kill' is called."
 
       (start  #~(make-forkexec-constructor
                  (string-append #$mingetty "/sbin/mingetty")
-                 "--noclear" #$tty))
+                 "--noclear" #$tty
+                 #$@(if auto-login
+                        #~("--autologin" #$auto-login)
+                        #~())
+                 #$@(if login-program
+                        #~("--loginprog" #$login-program)
+                        #~())
+                 #$@(if login-pause?
+                        #~("--loginpause")
+                        #~())))
       (stop   #~(make-kill-destructor))
 
       (pam-services
@@ -243,11 +279,11 @@ stopped before 'kill' is called."
 
   ;; Snippet adapted from the GNU inetutils manual.
   (define contents "
-     # Log all kernel messages, authentication messages of
+     # Log all error messages, authentication messages of
      # level notice or higher and anything of level err or
      # higher to the console.
      # Don't log private authentication messages!
-     *.err;kern.*;auth.notice;authpriv.none  /dev/console
+     *.err;auth.notice;authpriv.none         /dev/console
 
      # Log anything (except mail) of level info or higher.
      # Don't log private authentication messages!
@@ -290,16 +326,57 @@ starting at FIRST-UID, and under GID."
                        (name (format #f "guixbuilder~2,'0d" n))
                        (uid (+ first-uid n -1))
                        (group group)
+
+                       ;; guix-daemon expects GROUP to be listed as a
+                       ;; supplementary group too:
+                       ;; <http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html>.
+                       (supplementary-groups (list group))
+
                        (comment (format #f "Guix Build User ~2d" n))
                        (home-directory "/var/empty")
                        (shell #~(string-append #$shadow "/sbin/nologin"))))
                     1+
                     1))))
 
+(define (hydra-key-authorization guix)
+  "Return a gexp with code to register the hydra.gnu.org public key with
+GUIX."
+  #~(unless (file-exists? "/etc/guix/acl")
+      (let ((pid (primitive-fork)))
+        (case pid
+          ((0)
+           (let* ((key  (string-append #$guix
+                                       "/share/guix/hydra.gnu.org.pub"))
+                  (port (open-file key "r0b")))
+             (format #t "registering public key '~a'...~%" key)
+             (close-port (current-input-port))
+             (dup port 0)
+             (execl (string-append #$guix "/bin/guix")
+                    "guix" "archive" "--authorize")
+             (exit 1)))
+          (else
+           (let ((status (cdr (waitpid pid))))
+             (unless (zero? status)
+               (format (current-error-port) "warning: \
+failed to register hydra.gnu.org public key: ~a~%" status))))))))
+
 (define* (guix-service #:key (guix guix) (builder-group "guixbuild")
-                       (build-accounts 10))
+                       (build-accounts 10) authorize-hydra-key?)
   "Return a service that runs the build daemon from GUIX, and has
-BUILD-ACCOUNTS user accounts available under BUILD-USER-GID."
+BUILD-ACCOUNTS user accounts available under BUILD-USER-GID.
+
+When AUTHORIZE-HYDRA-KEY? is true, the hydra.gnu.org public key provided by
+GUIX is authorized upon activation, meaning that substitutes from
+hydra.gnu.org are used by default."
+  (define activate
+    ;; Assume that the store has BUILDER-GROUP as its group.  We could
+    ;; otherwise call 'chown' here, but the problem is that on a COW unionfs,
+    ;; chown leads to an entire copy of the tree, which is a bad idea.
+
+    ;; Optionally authorize hydra.gnu.org's key.
+    (and authorize-hydra-key?
+         (hydra-key-authorization guix)))
+
   (mlet %store-monad ((accounts (guix-build-accounts build-accounts
                                                      #:group builder-group)))
     (return (service
@@ -315,7 +392,12 @@ BUILD-ACCOUNTS user accounts available under BUILD-USER-GID."
              (user-groups (list (user-group
                                  (name builder-group)
                                  (members (map user-account-name
-                                               user-accounts)))))))))
+                                               user-accounts))
+
+                                 ;; Use a fixed GID so that we can create the
+                                 ;; store with the right owner.
+                                 (id 30000))))
+             (activate activate)))))
 
 (define %base-services
   ;; Convenience variable holding the basic services.
diff --git a/gnu/services/dmd.scm b/gnu/services/dmd.scm
index 982c196fe4..74adb27885 100644
--- a/gnu/services/dmd.scm
+++ b/gnu/services/dmd.scm
@@ -50,7 +50,7 @@
           (use-modules (ice-9 ftw)
                        (guix build syscalls)
                        ((guix build linux-initrd)
-                        #:select (check-file-system)))
+                        #:select (check-file-system canonicalize-device-spec)))
 
           (register-services
            #$@(map (lambda (service)
diff --git a/gnu/system.scm b/gnu/system.scm
index 06bec40cef..4dc6ebd5a7 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -26,7 +26,11 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages admin)
+  #:use-module (gnu packages linux)
   #:use-module (gnu packages package-management)
+  #:use-module (gnu packages which)
+  #:use-module (gnu packages less)
+  #:use-module (gnu packages zile)
   #:use-module (gnu services)
   #:use-module (gnu services dmd)
   #:use-module (gnu services base)
@@ -50,6 +54,7 @@
             operating-system-initrd
             operating-system-users
             operating-system-groups
+            operating-system-issue
             operating-system-packages
             operating-system-timezone
             operating-system-locale
@@ -57,7 +62,9 @@
 
             operating-system-derivation
             operating-system-profile
-            operating-system-grub.cfg))
+            operating-system-grub.cfg
+
+            %base-packages))
 
 ;;; Commentary:
 ;;;
@@ -91,17 +98,11 @@
 
   (skeletons operating-system-skeletons           ; list of name/monadic value
              (default (default-skeletons)))
+  (issue operating-system-issue                   ; string
+         (default %default-issue))
 
   (packages operating-system-packages             ; list of (PACKAGE OUTPUT...)
-            (default (list coreutils              ; or just PACKAGE
-                           grep
-                           sed
-                           findutils
-                           guile
-                           bash
-                           (@ (gnu packages dmd) dmd)
-                           guix
-                           tzdata)))
+            (default %base-packages))             ; or just PACKAGE
 
   (timezone operating-system-timezone)            ; string
   (locale   operating-system-locale)              ; string
@@ -178,8 +179,10 @@ as 'needed-for-boot'."
 
   (sequence %store-monad
             (map (match-lambda
-                  (($ <file-system> device target type flags opts #f check?)
+                  (($ <file-system> device title target type flags opts
+                                    #f check?)
                    (file-system-service device target type
+                                        #:title title
                                         #:check? check?
                                         #:options opts)))
                  file-systems)))
@@ -210,8 +213,25 @@ explicitly appear in OS."
 ;;; /etc.
 ;;;
 
+(define %base-packages
+  ;; Default set of packages globally visible.  It should include anything
+  ;; required for basic administrator tasks.
+  (list bash coreutils findutils grep sed
+        procps psmisc less zile
+        guile-final (@ (gnu packages admin) dmd) guix
+        util-linux inetutils isc-dhcp
+        net-tools                        ; XXX: remove when Inetutils suffices
+        module-init-tools kbd))
+
+(define %default-issue
+  ;; Default contents for /etc/issue.
+  "
+This is the GNU system.  Welcome.\n")
+
 (define* (etc-directory #:key
+                        kernel
                         (locale "C") (timezone "Europe/Paris")
+                        (issue "Hello!\n")
                         (skeletons '())
                         (pam-services '())
                         (profile "/run/current-system/profile")
@@ -226,15 +246,7 @@ explicitly appear in OS."
 /bin/sh
 /run/current-system/profile/bin/sh
 /run/current-system/profile/bin/bash\n"))
-       (issue      (text-file "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 'guest' or 'root' with no password.
-"))
+       (issue      (text-file "issue" issue))
 
        ;; TODO: Generate bashrc from packages' search-paths.
        (bashrc    (text-file* "bashrc"  "
@@ -244,8 +256,13 @@ export LC_ALL=\"" locale "\"
 export TZ=\"" timezone "\"
 export TZDIR=\"" tzdata "/share/zoneinfo\"
 
-export PATH=/run/setuid-programs:/run/current-system/profile/sbin
-export PATH=$HOME/.guix-profile/bin:/run/current-system/profile/bin:$PATH
+# Tell 'modprobe' & co. where to look for modules.
+# XXX: The downside of doing it here is that when switching to a new config
+# without rebooting, this variable possibly becomes invalid.
+export LINUX_MODULE_DIRECTORY=" kernel "/lib/modules
+
+export PATH=$HOME/.guix-profile/bin:/run/current-system/profile/bin
+export PATH=/run/setuid-programs:/run/current-system/profile/sbin:$PATH
 export CPATH=$HOME/.guix-profile/include:" profile "/include
 export LIBRARY_PATH=$HOME/.guix-profile/lib:" profile "/lib
 alias ls='ls -p --color'
@@ -306,8 +323,10 @@ alias ll='ls -l'
                               (append-map service-pam-services services))))
        (profile-drv (operating-system-profile os))
        (skeletons   (operating-system-skeletons os)))
-   (etc-directory #:pam-services pam-services
+   (etc-directory #:kernel (operating-system-kernel os)
+                  #:pam-services pam-services
                   #:skeletons skeletons
+                  #:issue (operating-system-issue os)
                   #:locale (operating-system-locale os)
                   #:timezone (operating-system-timezone os)
                   #:sudoers (operating-system-sudoers os)
@@ -319,7 +338,8 @@ alias ll='ls -l'
     (list #~(string-append #$shadow "/bin/passwd")
           #~(string-append #$shadow "/bin/su")
           #~(string-append #$inetutils "/bin/ping")
-          #~(string-append #$sudo "/bin/sudo"))))
+          #~(string-append #$sudo "/bin/sudo")
+          #~(string-append #$fuse "/bin/fusermount"))))
 
 (define %sudoers-specification
   ;; Default /etc/sudoers contents: 'root' and all members of the 'wheel'
@@ -382,7 +402,7 @@ etc."
     (define group-specs
       (map user-group->gexp groups))
 
-    (gexp->file "boot"
+    (gexp->file "activate"
                 #~(begin
                     (eval-when (expand load eval)
                       ;; Make sure 'use-modules' below succeeds.
@@ -445,7 +465,7 @@ we're running in the final root."
 (define (operating-system-root-file-system os)
   "Return the root file system of OS."
   (find (match-lambda
-         (($ <file-system> _ "/") #t)
+         (($ <file-system> _ _ "/") #t)
          (_ #f))
         (operating-system-file-systems os)))
 
@@ -453,9 +473,10 @@ we're running in the final root."
   "Return a gexp denoting the initrd file of OS."
   (define boot-file-systems
     (filter (match-lambda
-             (($ <file-system> device "/")
+             (($ <file-system> device title "/")
               #t)
-             (($ <file-system> device mount-point type flags options boot?)
+             (($ <file-system> device title mount-point type flags
+                               options boot?)
               boot?))
             (operating-system-file-systems os)))
 
diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm
index 485150ea51..7852a6ab26 100644
--- a/gnu/system/file-systems.scm
+++ b/gnu/system/file-systems.scm
@@ -22,6 +22,7 @@
             file-system
             file-system?
             file-system-device
+            file-system-title
             file-system-mount-point
             file-system-type
             file-system-needed-for-boot?
@@ -42,6 +43,8 @@
   make-file-system
   file-system?
   (device           file-system-device)           ; string
+  (title            file-system-title             ; 'device | 'label | 'uuid
+                    (default 'device))
   (mount-point      file-system-mount-point)      ; string
   (type             file-system-type)             ; string
   (flags            file-system-flags             ; list of symbols
diff --git a/gnu/system/install.scm b/gnu/system/install.scm
new file mode 100644
index 0000000000..06f8a3f058
--- /dev/null
+++ b/gnu/system/install.scm
@@ -0,0 +1,147 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu system install)
+  #:use-module (gnu)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages package-management)
+  #:use-module (gnu packages disk)
+  #:use-module (gnu packages texinfo)
+  #:export (installation-os))
+
+;;; Commentary:
+;;;
+;;; This module provides an 'operating-system' definition for use on images
+;;; for USB sticks etc., for the installation of the GNU system.
+;;;
+;;; Code:
+
+(define (log-to-info)
+  "Return a script that spawns the Info reader on the right section of the
+manual."
+  (gexp->script "log-to-info"
+                #~(execl (string-append #$texinfo-4 "/bin/info") "info"
+                         "-d" "/run/current-system/profile/share/info"
+                         "-f" (string-append #$guix "/share/info/guix.info")
+                         "-n" "System Configuration")))
+
+(define (installation-services)
+  "Return the list services for the installation image."
+  (let ((motd (text-file "motd" "
+Welcome to the installation of the GNU operating system!
+
+There is NO WARRANTY, to the extent permitted by law.  In particular, you may
+LOSE ALL YOUR DATA as a side effect of the installation process.  Furthermore,
+it is alpha software, so it may BREAK IN UNEXPECTED WAYS.
+
+You have been warned.  Thanks for being so brave.
+")))
+    (define (normal-tty tty)
+      (mingetty-service tty
+                        #:motd motd
+                        #:auto-login "root"
+                        #:login-pause? #t))
+
+    (list (mingetty-service "tty1"
+                            #:motd motd
+                            #:auto-login "root")
+
+          ;; Documentation.
+          (mingetty-service "tty2"
+                            #:motd motd
+                            #:auto-login "guest"
+                            #:login-program (log-to-info))
+
+          ;; A bunch of 'root' ttys.
+          (normal-tty "tty3")
+          (normal-tty "tty4")
+          (normal-tty "tty5")
+          (normal-tty "tty6")
+
+          ;; The usual services.
+          (syslog-service)
+
+          ;; The build daemon.  Register the hydra.gnu.org key as trusted.
+          ;; This allows the installation process to use substitutes by
+          ;; default.
+          (guix-service #:authorize-hydra-key? #t)
+
+          (nscd-service))))
+
+(define %issue
+  ;; Greeting.
+  "
+This is an installation image of the GNU system.  Welcome.
+
+Use Alt-F2 for documentation.
+")
+
+(define installation-os
+  ;; The operating system used on installation images for USB sticks etc.
+  (operating-system
+    (host-name "gnu")
+    (timezone "Europe/Paris")
+    (locale "en_US.UTF-8")
+    (bootloader (grub-configuration
+                 (device "/dev/sda")))
+    (file-systems
+     ;; Note: the disk image build code overrides this root file system with
+     ;; the appropriate one.
+     (list (file-system
+             (mount-point "/")
+             (device "gnu-disk-image")
+             (type "ext4"))))
+
+    (users (list (user-account
+                  (name "guest")
+                  (group "wheel")
+                  (password "")
+                  (comment "Guest of GNU")
+                  (home-directory "/home/guest"))))
+    (groups (list (user-group (name "root") (id 0))
+                  (user-group
+                   (name "wheel")
+                   (id 1)
+                   (members '("guest")))          ; allow 'guest' to use sudo
+                  (user-group
+                   (name "users")
+                   (id 100)
+                   (members '("guest")))))
+
+    (issue %issue)
+
+    (services (installation-services))
+
+    ;; We don't need setuid programs so pass the empty list so we don't pull
+    ;; additional programs here.
+    (setuid-programs '())
+
+    (pam-services
+     ;; Explicitly allow for empty passwords.
+     (base-pam-services #:allow-empty-passwords? #t))
+
+    (packages (cons* texinfo-4                ; for the standalone Info reader
+                     parted fdisk ddrescue
+                     %base-packages))))
+
+;; Return it here so 'guix system' can consume it directly.
+installation-os
+
+;;; install.scm ends here
diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm
index b80ff10f1e..17fec4f7f4 100644
--- a/gnu/system/linux-initrd.scm
+++ b/gnu/system/linux-initrd.scm
@@ -198,8 +198,8 @@ a list of Guile module names to be embedded in the initrd."
   "Return a list corresponding to file-system FS that can be passed to the
 initrd code."
   (match fs
-    (($ <file-system> device mount-point type flags options _ check?)
-     (list device mount-point type flags options check?))))
+    (($ <file-system> device title mount-point type flags options _ check?)
+     (list device title mount-point type flags options check?))))
 
 (define* (qemu-initrd file-systems
                       #:key
diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
index a15c4c358b..4e7c439894 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -29,7 +29,7 @@
   #:use-module (gnu packages bash)
   #:use-module (gnu packages less)
   #:use-module (gnu packages qemu)
-  #:use-module (gnu packages parted)
+  #:use-module (gnu packages disk)
   #:use-module (gnu packages zile)
   #:use-module (gnu packages grub)
   #:use-module (gnu packages linux)
@@ -196,15 +196,17 @@ made available under the /xchg CIFS share."
                      (disk-image-size (* 100 (expt 2 20)))
                      (disk-image-format "qcow2")
                      (file-system-type "ext4")
+                     file-system-label
                      grub-configuration
                      (register-closures? #t)
                      (inputs '())
                      copy-inputs?)
   "Return a bootable, stand-alone QEMU image of type DISK-IMAGE-FORMAT (e.g.,
-'qcow2' or 'raw'), with a root partition of type FILE-SYSTEM-TYPE.  The
-returned image is a full disk image, with a GRUB installation that uses
-GRUB-CONFIGURATION as its configuration file (GRUB-CONFIGURATION must be the
-name of a file in the VM.)
+'qcow2' or 'raw'), with a root partition of type FILE-SYSTEM-TYPE.
+Optionally, FILE-SYSTEM-LABEL can be specified as the volume name for the root
+partition.  The returned image is a full disk image, with a GRUB installation
+that uses GRUB-CONFIGURATION as its configuration file (GRUB-CONFIGURATION
+must be the name of a file in the VM.)
 
 INPUTS is a list of inputs (as for packages).  When COPY-INPUTS? is true, copy
 all of INPUTS into the image being built.  When REGISTER-CLOSURES? is true,
@@ -243,7 +245,8 @@ the image."
                                   #:copy-closures? #$copy-inputs?
                                   #:register-closures? #$register-closures?
                                   #:disk-image-size #$disk-image-size
-                                  #:file-system-type #$file-system-type)
+                                  #:file-system-type #$file-system-type
+                                  #:file-system-label #$file-system-label)
             (reboot))))
     #:system system
     #:make-disk-image? #t
@@ -258,6 +261,7 @@ the image."
 
 (define* (system-disk-image os
                             #:key
+                            (name "disk-image")
                             (file-system-type "ext4")
                             (disk-image-size (* 900 (expt 2 20)))
                             (volatile? #t))
@@ -265,6 +269,12 @@ the image."
 system described by OS.  Said image can be copied on a USB stick as is.  When
 VOLATILE? is true, the root file system is made volatile; this is useful
 to USB sticks meant to be read-only."
+  (define root-label
+    ;; Volume name of the root file system.  Since we don't know which device
+    ;; will hold it, we use the volume name to find it (using the UUID would
+    ;; be even better, but somewhat less convenient.)
+    "gnu-disk-image")
+
   (define file-systems-to-keep
     (remove (lambda (fs)
               (string=? (file-system-mount-point fs) "/"))
@@ -280,16 +290,19 @@ to USB sticks meant to be read-only."
               ;; Force our own root file system.
               (file-systems (cons (file-system
                                     (mount-point "/")
-                                    (device "/dev/sda1")
+                                    (device root-label)
+                                    (title 'label)
                                     (type file-system-type))
                                   file-systems-to-keep)))))
 
     (mlet* %store-monad ((os-drv   (operating-system-derivation os))
                          (grub.cfg (operating-system-grub.cfg os)))
-      (qemu-image #:grub-configuration grub.cfg
+      (qemu-image #:name name
+                  #:grub-configuration grub.cfg
                   #:disk-image-size disk-image-size
                   #:disk-image-format "raw"
                   #:file-system-type file-system-type
+                  #:file-system-label root-label
                   #:copy-inputs? #t
                   #:register-closures? #t
                   #:inputs `(("system" ,os-drv)