summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am9
-rw-r--r--build-aux/hydra/gnu-system.scm9
-rw-r--r--build-aux/make-binary-tarball.scm47
-rw-r--r--configure.ac9
-rw-r--r--doc/guix.texi207
-rw-r--r--gnu/local.mk1
-rw-r--r--gnu/packages/admin.scm5
-rw-r--r--gnu/packages/backup.scm33
-rw-r--r--gnu/packages/bioinformatics.scm143
-rw-r--r--gnu/packages/certs.scm62
-rw-r--r--gnu/packages/ci.scm6
-rw-r--r--gnu/packages/compression.scm27
-rw-r--r--gnu/packages/emacs.scm39
-rw-r--r--gnu/packages/fonts.scm64
-rw-r--r--gnu/packages/fpga.scm5
-rw-r--r--gnu/packages/games.scm8
-rw-r--r--gnu/packages/gnupg.scm4
-rw-r--r--gnu/packages/gnuzilla.scm95
-rw-r--r--gnu/packages/guile.scm5
-rw-r--r--gnu/packages/haskell.scm18
-rw-r--r--gnu/packages/ibus.scm8
-rw-r--r--gnu/packages/imagemagick.scm6
-rw-r--r--gnu/packages/irc.scm4
-rw-r--r--gnu/packages/kde-frameworks.scm50
-rw-r--r--gnu/packages/ldc.scm4
-rw-r--r--gnu/packages/linux.scm22
-rw-r--r--gnu/packages/lisp.scm14
-rw-r--r--gnu/packages/mail.scm21
-rw-r--r--gnu/packages/maths.scm5
-rw-r--r--gnu/packages/messaging.scm4
-rw-r--r--gnu/packages/package-management.scm4
-rw-r--r--gnu/packages/patches/hmmer-remove-cpu-specificity.patch22
-rw-r--r--gnu/packages/patches/python-pandas-skip-failing-tests.patch44
-rw-r--r--gnu/packages/patches/wget-CVE-2017-6508.patch45
-rw-r--r--gnu/packages/python.scm194
-rw-r--r--gnu/packages/regex.scm14
-rw-r--r--gnu/packages/statistics.scm677
-rw-r--r--gnu/packages/video.scm4
-rw-r--r--gnu/packages/web.scm7
-rw-r--r--gnu/packages/wget.scm2
-rw-r--r--gnu/packages/wine.scm9
-rw-r--r--gnu/packages/xorg.scm14
-rw-r--r--gnu/services.scm7
-rw-r--r--gnu/services/configuration.scm40
-rw-r--r--gnu/services/cups.scm32
-rw-r--r--gnu/services/kerberos.scm15
-rw-r--r--gnu/services/mail.scm142
-rw-r--r--gnu/services/ssh.scm42
-rw-r--r--gnu/system.scm4
-rw-r--r--gnu/system/install.scm63
-rw-r--r--gnu/system/linux-initrd.scm129
-rw-r--r--guix/build/syscalls.scm8
-rw-r--r--guix/scripts/pack.scm229
-rw-r--r--guix/scripts/pull.scm22
54 files changed, 2261 insertions, 442 deletions
diff --git a/Makefile.am b/Makefile.am
index cda49bd9ec..2443f6891f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -139,6 +139,7 @@ MODULES =					\
   guix/scripts/package.scm			\
   guix/scripts/gc.scm				\
   guix/scripts/hash.scm				\
+  guix/scripts/pack.scm				\
   guix/scripts/pull.scm				\
   guix/scripts/substitute.scm			\
   guix/scripts/authenticate.scm			\
@@ -398,7 +399,6 @@ EXTRA_DIST =						\
   build-aux/check-available-binaries.scm		\
   build-aux/check-final-inputs-self-contained.scm	\
   build-aux/download.scm				\
-  build-aux/make-binary-tarball.scm			\
   build-aux/generate-authors.scm			\
   build-aux/test-driver.scm				\
   build-aux/run-system-tests.scm			\
@@ -487,9 +487,10 @@ AM_DISTCHECK_CONFIGURE_FLAGS =			\
 
 # The self-contained tarball.
 guix-binary.%.tar.xz:
-	$(AM_V_GEN)GUIX_PACKAGE_PATH= \
-	$(top_builddir)/pre-inst-env "$(GUILE)"			\
-	  "$(top_srcdir)/build-aux/make-binary-tarball.scm" "$*" "$@"
+	$(AM_V_GEN)GUIX_PACKAGE_PATH=				\
+	tarball=`$(top_builddir)/pre-inst-env guix pack -C xz	\
+	  -s "$*" guix` ;					\
+	cp "$$tarball" "$@.tmp" ; mv "$@.tmp" "$@"
 
 
 dist-hook: sync-descriptions gen-ChangeLog gen-AUTHORS
diff --git a/build-aux/hydra/gnu-system.scm b/build-aux/hydra/gnu-system.scm
index a4893f198c..775c0eb5d6 100644
--- a/build-aux/hydra/gnu-system.scm
+++ b/build-aux/hydra/gnu-system.scm
@@ -39,12 +39,15 @@
 (use-modules (guix config)
              (guix store)
              (guix grafts)
+             (guix profiles)
              (guix packages)
              (guix derivations)
              (guix monads)
              ((guix licenses) #:select (gpl3+))
              ((guix utils) #:select (%current-system))
              ((guix scripts system) #:select (read-operating-system))
+             ((guix scripts pack)
+              #:select (lookup-compressor self-contained-tarball))
              (gnu packages)
              (gnu packages gcc)
              (gnu packages base)
@@ -215,7 +218,11 @@ all its dependencies, and ready to be installed on non-GuixSD distributions.")
                (run-with-store store
                  (mbegin %store-monad
                    (set-guile-for-build (default-guile))
-                   (self-contained-tarball))
+                   (>>= (profile-derivation (packages->manifest (list guix)))
+                        (lambda (profile)
+                          (self-contained-tarball "guix-binary" profile
+                                                  #:compressor
+                                                  (lookup-compressor "xz")))))
                  #:system system))))
 
 (define job-name
diff --git a/build-aux/make-binary-tarball.scm b/build-aux/make-binary-tarball.scm
deleted file mode 100644
index e12bec476c..0000000000
--- a/build-aux/make-binary-tarball.scm
+++ /dev/null
@@ -1,47 +0,0 @@
-;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015 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/>.
-
-
-;;;
-;;; Build a self-contained tarball containing binaries for Guix and its
-;;; dependencies.
-;;;
-
-(use-modules (guix)
-             (guix ui)
-             (gnu system install)
-             (ice-9 match))
-
-(define copy-file*
-  (lift2 copy-file %store-monad))
-
-(define rename-file*
-  (lift2 rename-file %store-monad))
-
-(match (command-line)
-  ((_ system file)
-   (with-store store
-     (run-with-store store
-       (mlet %store-monad ((tarball (self-contained-tarball)))
-         (mbegin %store-monad
-           (show-what-to-build* (list tarball))
-           (built-derivations (list tarball))
-           (copy-file* (derivation->output-path tarball)
-                       (string-append file ".part"))
-           (rename-file* (string-append file ".part") file)))
-       #:system system))))
diff --git a/configure.ac b/configure.ac
index 06b0618b43..e5daadb121 100644
--- a/configure.ac
+++ b/configure.ac
@@ -91,7 +91,14 @@ dnl Installation directory for .scm and .go files.
 guilemoduledir="${datarootdir}/guile/site/$GUILE_EFFECTIVE_VERSION"
 AC_SUBST([guilemoduledir])
 
-dnl guile-json is used for the PyPI package importer
+dnl The GnuTLS bindings are necessary for substitutes over HTTPS and for 'guix
+dnl pull', among other things.
+GUILE_MODULE_AVAILABLE([have_gnutls], [(gnutls)])
+if test "x$have_gnutls" != "xyes"; then
+  AC_MSG_ERROR([The Guile bindings of GnuTLS are missing; please install them.])
+fi
+
+dnl Guile-JSON is used in various places.
 GUILE_MODULE_AVAILABLE([have_guile_json], [(json)])
 AM_CONDITIONAL([HAVE_GUILE_JSON], [test "x$have_guile_json" = "xyes"])
 
diff --git a/doc/guix.texi b/doc/guix.texi
index a537433bf6..aba207c856 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -32,7 +32,8 @@ Copyright @copyright{} 2016 Julien Lepiller@*
 Copyright @copyright{} 2016 Alex ter Weele@*
 Copyright @copyright{} 2017 Clément Lassieur@*
 Copyright @copyright{} 2017 Mathieu Othacehe@*
-Copyright @copyright{} 2017 Federico Beffa
+Copyright @copyright{} 2017 Federico Beffa@*
+Copyright @copyright{} 2017 Carlo Zancanaro
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -118,6 +119,7 @@ Package Management
 * Packages with Multiple Outputs::  Single source package, multiple outputs.
 * Invoking guix gc::            Running the garbage collector.
 * Invoking guix pull::          Fetching the latest Guix and distribution.
+* Invoking guix pack::          Creating software bundles.
 * Invoking guix archive::       Exporting and importing store files.
 
 Programming Interface
@@ -529,6 +531,14 @@ by running the following command in the Guix source tree:
 make guix-binary.@var{system}.tar.xz
 @end example
 
+@noindent
+... which, in turn, runs:
+
+@example
+guix pack -s @var{system} guix
+@end example
+
+@xref{Invoking guix pack}, for more info on this handy tool.
 
 @node Requirements
 @section Requirements
@@ -543,6 +553,10 @@ GNU Guix depends on the following packages:
 @itemize
 @item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.7 or later;
 @item @url{http://gnupg.org/, GNU libgcrypt};
+@item
+@uref{http://gnutls.org/, GnuTLS}, specifically its Guile bindings
+(@pxref{Guile Preparations, how to install the GnuTLS bindings for
+Guile,, gnutls-guile, GnuTLS-Guile});
 @item @url{http://www.gnu.org/software/make/, GNU Make}.
 @end itemize
 
@@ -550,15 +564,6 @@ The following dependencies are optional:
 
 @itemize
 @item
-Installing @uref{http://gnutls.org/, GnuTLS-Guile} will allow you to
-access @code{https} URLs for substitutes, which is highly recommended
-(@pxref{Substitutes}).  It also allows you to access HTTPS URLs with the
-@command{guix download} command (@pxref{Invoking guix download}), the
-@command{guix import pypi} command, and the @command{guix import cpan}
-command.  @xref{Guile Preparations, how to install the GnuTLS bindings
-for Guile,, gnutls-guile, GnuTLS-Guile}.
-
-@item
 Installing
 @url{http://savannah.nongnu.org/projects/guile-json/, Guile-JSON} will
 allow you to use the @command{guix import pypi} command (@pxref{Invoking
@@ -1426,6 +1431,7 @@ guix package -i emacs-guix
 * Packages with Multiple Outputs::  Single source package, multiple outputs.
 * Invoking guix gc::            Running the garbage collector.
 * Invoking guix pull::          Fetching the latest Guix and distribution.
+* Invoking guix pack::          Creating software bundles.
 * Invoking guix archive::       Exporting and importing store files.
 @end menu
 
@@ -2002,8 +2008,7 @@ or to client tools such as @command{guix package}
 (@pxref{client-substitute-urls,, client @option{--substitute-urls}
 option}).
 
-Substitute URLs can be either HTTP or HTTPS@footnote{For HTTPS access,
-the Guile bindings of GnuTLS must be installed.  @xref{Requirements}.}
+Substitute URLs can be either HTTP or HTTPS.
 HTTPS is recommended because communications are encrypted; conversely,
 using HTTP makes all communications visible to an eavesdropper, who
 could use the information gathered to determine, for instance, whether
@@ -2382,6 +2387,60 @@ useful to Guix developers.
 @end table
 
 
+@node Invoking guix pack
+@section Invoking @command{guix pack}
+
+Occasionally you want to pass software to people who are not (yet!)
+lucky enough to be using Guix.  You'd tell them to run @command{guix
+package -i @var{something}}, but that's not possible in this case.  This
+is where @command{guix pack} comes in.
+
+@cindex pack
+@cindex bundle
+@cindex application bundle
+@cindex software bundle
+The @command{guix pack} command creates a shrink-wrapped @dfn{pack} or
+@dfn{software bundle}: it creates a tarball or some other archive
+containing the binaries of the software you're interested in, and all
+its dependencies.  The resulting archive can be used on any machine that
+does not have Guix, and people can run the exact same binaries as those
+you have with Guix.
+
+For example, to create a bundle containing Guile, Emacs, Geiser, and all
+their dependencies, you can run:
+
+@example
+$ guix pack guile emacs geiser
+@dots{}
+/gnu/store/@dots{}-pack.tar.gz
+@end example
+
+The result here is a tarball containing a @file{/gnu/store} directory
+with all the relevant packages.  The resulting tarball contains a
+@dfn{profile} with the three packages of interest; the profile is the
+same as would be created by @command{guix package -i}.  It is this
+mechanism that is used to create Guix's own standalone binary tarball
+(@pxref{Binary Installation}).
+
+Several command-line options allow you to customize your pack:
+
+@table @code
+@item --system=@var{system}
+@itemx -s @var{system}
+Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of
+the system type of the build host.
+
+@item --compression=@var{tool}
+@itemx -C @var{tool}
+Compress the resulting tarball using @var{tool}---one of @code{gzip},
+@code{bzip2}, @code{xz}, or @code{lzip}.
+@end table
+
+In addition, @command{guix pack} supports all the common build options
+(@pxref{Common Build Options}) and all the package transformation
+options (@pxref{Package Transformation Options}).
+
+
 @node Invoking guix archive
 @section Invoking @command{guix archive}
 
@@ -6812,7 +6871,7 @@ Few system services are currently supported out-of-the-box
 (@pxref{Services}).
 
 @item
-More than 4,000 packages are available, but you may
+More than 5,000 packages are available, but you may
 occasionally find that a useful package is missing.
 
 @item
@@ -9336,18 +9395,30 @@ false, users have to use other authentication method.
 Authorized public keys are stored in @file{~/.ssh/authorized_keys}.
 This is used only by protocol version 2.
 
-@item @code{rsa-authentication?} (default: @code{#t})
-When true, users may log in using pure RSA authentication.  When false,
-users have to use other means of authentication.  This is used only by
-protocol 1.
-
 @item @code{x11-forwarding?} (default: @code{#f})
 When true, forwarding of X11 graphical client connections is
 enabled---in other words, @command{ssh} options @option{-X} and
 @option{-Y} will work.
 
-@item @code{protocol-number} (default: @code{2})
-The SSH protocol number to use.
+@item @code{challenge-response-authentication?} (default: @code{#f})
+Specifies whether challenge response authentication is allowed (e.g. via
+PAM).
+
+@item @code{use-pam?} (default: @code{#t})
+Enables the Pluggable Authentication Module interface.  If set to
+@code{#t}, this will enable PAM authentication using
+@code{challenge-response-authentication?} and
+@code{password-authentication?}, in addition to PAM account and session
+module processing for all authentication types.
+
+Because PAM challenge response authentication usually serves an
+equivalent role to password authentication, you should disable either
+@code{challenge-response-authentication?} or
+@code{password-authentication?}.
+
+@item @code{print-last-log?} (default: @code{#t})
+Specifies whether @command{sshd} should print the date and time of the
+last user login when a user logs in interactively.
 @end table
 @end deftp
 
@@ -10928,8 +10999,9 @@ Defaults to @samp{()}.
 
 Available @code{unix-listener-configuration} fields are:
 
-@deftypevr {@code{unix-listener-configuration} parameter} file-name path
-The file name on which to listen.
+@deftypevr {@code{unix-listener-configuration} parameter} string path
+Path to the file, relative to @code{base-dir} field.  This is also used as
+the section name.
 @end deftypevr
 
 @deftypevr {@code{unix-listener-configuration} parameter} string mode
@@ -10950,8 +11022,9 @@ Defaults to @samp{""}.
 
 Available @code{fifo-listener-configuration} fields are:
 
-@deftypevr {@code{fifo-listener-configuration} parameter} file-name path
-The file name on which to listen.
+@deftypevr {@code{fifo-listener-configuration} parameter} string path
+Path to the file, relative to @code{base-dir} field.  This is also used as
+the section name.
 @end deftypevr
 
 @deftypevr {@code{fifo-listener-configuration} parameter} string mode
@@ -12211,6 +12284,45 @@ remote servers.  Run @command{man smtpd.conf} for more information.
 @end table
 @end deftp
 
+@subsubheading Exim Service
+
+@deffn {Scheme Variable} exim-service-type
+This is the type of the @uref{https://exim.org, Exim} service, whose value
+should be an @code{exim-configuration} object as in this example:
+
+@example
+(service exim-service-type
+         (exim-configuration
+           (config-file (local-file "./my-exim.conf"))
+           (aliases '(("postmaster" "bob")
+                      ("bob" "bob@@example.com" "bob@@example2.com")))))
+@end example
+@end deffn
+
+@deftp {Data Type} exim-configuration
+Data type representing the configuration of exim.
+
+@table @asis
+@item @code{package} (default: @var{exim})
+Package object of the Exim server.
+
+@item @code{config-file} (default: @code{#f})
+File-like object of the Exim configuration file to use. If its value is
+@code{#f} then use the default configuration file from the package
+provided in @code{package}. The resulting configuration file is loaded
+after setting the @code{exim_user} and @code{exim_group} configuration
+variables.
+
+@item @code{aliases} (default: @code{'()})
+List of aliases to use when delivering mail on this system. The
+@code{car} of each list is used to match incoming mail, with the
+@code{cdr} of each list designating how to deliver it. There may be many
+delivery methods provided, in which case the mail is delivered to them
+all.
+
+@end table
+@end deftp
+
 @node Messaging Services
 @subsubsection Messaging Services
 
@@ -13840,9 +13952,9 @@ kernel modules that may be needed to achieve that.
 
 The @code{initrd} field of an @code{operating-system} declaration allows
 you to specify which initrd you would like to use.  The @code{(gnu
-system linux-initrd)} module provides two ways to build an initrd: the
-high-level @code{base-initrd} procedure, and the low-level
-@code{expression->initrd} procedure.
+system linux-initrd)} module provides three ways to build an initrd: the
+high-level @code{base-initrd} procedure and the low-level
+@code{raw-initrd} and @code{expression->initrd} procedures.
 
 The @code{base-initrd} procedure is intended to cover most common uses.
 For example, if you want to add a bunch of kernel modules to be loaded
@@ -13863,9 +13975,16 @@ The @code{base-initrd} procedure also handles common use cases that
 involves using the system as a QEMU guest, or as a ``live'' system with
 volatile root file system.
 
-The initial RAM disk produced by @code{base-initrd} honors several
-options passed on the Linux kernel command line (that is, arguments
-passed @i{via} the @code{linux} command of GRUB, or the
+The @code{base-initrd} procedure is built from @code{raw-initrd} procedure.
+Unlike @code{base-initrd}, @code{raw-initrd} doesn't do anything high-level,
+such as trying to guess which kernel modules and packages should be included
+to the initrd. An example use of @code{raw-initrd} is when a user has
+a custom Linux kernel configuration and default kernel modules included by
+@code{base-initrd} are not available.
+
+The initial RAM disk produced by @code{base-initrd} or @code{raw-initrd}
+honors several options passed on the Linux kernel command line
+(that is, arguments passed @i{via} the @code{linux} command of GRUB, or the
 @code{-append} option of QEMU), notably:
 
 @table @code
@@ -13904,19 +14023,23 @@ Manual}, for more information on Guile's REPL.
 @end table
 
 Now that you know all the features that initial RAM disks produced by
-@code{base-initrd} provide, here is how to use it and customize it
-further.
+@code{base-initrd} and @code{raw-initrd} provide,
+here is how to use it and customize it further.
 
 @cindex initrd
 @cindex initial RAM disk
-@deffn {Monadic Procedure} base-initrd @var{file-systems} @
-       [#:qemu-networking? #f] [#:virtio? #t] [#:volatile-root? #f] @
-       [#:extra-modules '()] [#:mapped-devices '()]
-Return a monadic derivation that builds a generic initrd.  @var{file-systems} is
+@deffn {Monadic Procedure} raw-initrd @var{file-systems} @
+       [#:linux-modules '()] [#:mapped-devices '()] @
+       [#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f]
+Return a monadic derivation that builds a raw initrd.  @var{file-systems} is
 a list of file systems to be mounted by the initrd, possibly in addition to
 the root file system specified on the kernel command line via @code{--root}.
+@var{linux-modules} is a list of kernel modules to be loaded at boot time.
 @var{mapped-devices} is a list of device mappings to realize before
 @var{file-systems} are mounted (@pxref{Mapped Devices}).
+@var{helper-packages} is a list of packages to be copied in the initrd. It may
+include @code{e2fsck/static} or other packages needed by the initrd to check
+root partition.
 
 When @var{qemu-networking?} is true, set up networking with the standard QEMU
 parameters.  When @var{virtio?} is true, load additional modules so that the
@@ -13924,6 +14047,18 @@ initrd can be used as a QEMU guest with para-virtualized I/O drivers.
 
 When @var{volatile-root?} is true, the root file system is writable but any changes
 to it are lost.
+@end deffn
+
+@deffn {Monadic Procedure} base-initrd @var{file-systems} @
+       [#:mapped-devices '()] [#:qemu-networking? #f] [#:volatile-root? #f]@
+       [#:virtio? #t] [#:extra-modules '()]
+Return a monadic derivation that builds a generic initrd.  @var{file-systems} is
+a list of file systems to be mounted by the initrd like for @code{raw-initrd}.
+@var{mapped-devices}, @var{qemu-networking?} and @var{volatile-root?}
+also behaves as in @code{raw-initrd}.
+
+When @var{virtio?} is true, load additional modules so that the
+initrd can be used as a QEMU guest with para-virtualized I/O drivers.
 
 The initrd is automatically populated with all the kernel modules necessary
 for @var{file-systems} and for the given options.  However, additional kernel
diff --git a/gnu/local.mk b/gnu/local.mk
index c74418d0dc..f4d3ec1529 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -969,6 +969,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/vte-CVE-2012-2738-pt1.patch			\
   %D%/packages/patches/vte-CVE-2012-2738-pt2.patch			\
   %D%/packages/patches/weechat-python.patch			\
+  %D%/packages/patches/wget-CVE-2017-6508.patch			\
   %D%/packages/patches/wicd-bitrate-none-fix.patch		\
   %D%/packages/patches/wicd-get-selected-profile-fix.patch	\
   %D%/packages/patches/wicd-urwid-1.3.patch			\
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 3d9226299b..34f6c222ce 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -257,7 +257,10 @@ re-executing them as necessary.")
                "05n65k4ixl85dc6rxc51b1b732gnmm8xnqi424dy9f1nz7ppb3xy"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--localstatedir=/var")))
+     '(#:configure-flags '("--localstatedir=/var")
+       ;; On some systems, 'libls.sh' may fail with an error such as:
+       ;; "Failed to tell switch -a apart from -A".
+       #:parallel-tests? #f))
     (inputs `(("ncurses" ,ncurses)
               ("readline" ,readline)))        ;for 'ftp'
     (native-inputs `(("netstat" ,net-tools))) ;for tests
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index 923b0ba9ed..9e20b9f033 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2015, 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
+;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -622,3 +623,35 @@ NTFS volumes using @code{ntfs-3g}, preserving NTFS-specific attributes.")
     (license (list license:gpl3+
                    license:lgpl3+
                    license:cc0))))
+
+(define-public obnam
+  (package
+    (name "obnam")
+    (version "1.21")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "http://code.liw.fi/debian/pool/main/o/obnam/obnam_"
+             version ".orig.tar.xz"))
+       (sha256
+        (base32
+         "0qlipsq50hca71zc0dp1mg9zs12qm0sbblw7qfzl0hj6mk2rv1by"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:python ,python-2))
+    (inputs
+     `(("python2-cliapp" ,python2-cliapp)
+       ("python2-larch" ,python2-larch)
+       ("python2-paramiko" ,python2-paramiko)
+       ("python2-pyaml" ,python2-pyaml)
+       ("python2-tracing" ,python2-tracing)
+       ("python2-ttystatus" ,python2-ttystatus)))
+    (home-page "https://obnam.org/")
+    (synopsis "Easy and secure backup program")
+    (description "Obnam is an easy, secure backup program.  Features
+include snapshot backups, data de-duplication and encrypted backups
+using GnuPG.  Backups can be stored on local hard disks, or online via
+the SSH SFTP protocol.  The backup server, if used, does not require
+any special software, on top of SSH.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 7bf39c6b03..770bea7e32 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -63,6 +63,7 @@
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages java)
+  #:use-module (gnu packages ldc)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages logging)
   #:use-module (gnu packages machine-learning)
@@ -95,6 +96,28 @@
   #:use-module (gnu packages zip)
   #:use-module (srfi srfi-1))
 
+(define-public r-ape
+  (package
+    (name "r-ape")
+    (version "4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "ape" version))
+       (sha256
+        (base32
+         "0959fiiy11rzfzrzaknmgrx64bhszj02l0ycz79k5a6bmpfzanlk"))))
+    (build-system r-build-system)
+    (home-page "http://ape-package.ird.fr/")
+    (synopsis "Analyses of phylogenetics and evolution")
+    (description
+     "This package provides functions for reading, writing, plotting, and
+manipulating phylogenetic trees, analyses of comparative data in a
+phylogenetic framework, ancestral character analyses, analyses of
+diversification and macroevolution, computing distances from DNA sequences,
+and several other tools.")
+    (license license:gpl2+)))
+
 (define-public aragorn
   (package
     (name "aragorn")
@@ -2838,15 +2861,17 @@ indexing scheme is called a @dfn{Hierarchical Graph FM index} (HGFM).")
   (package
     (name "hmmer")
     (version "3.1b2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "http://eddylab.org/software/hmmer"
-                    (version-prefix version 1) "/"
-                    version "/hmmer-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0djmgc0pfli0jilfx8hql1axhwhqxqb8rxg2r5rg07aw73sfs5nx"))))
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "http://eddylab.org/software/hmmer"
+             (version-prefix version 1) "/"
+             version "/hmmer-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0djmgc0pfli0jilfx8hql1axhwhqxqb8rxg2r5rg07aw73sfs5nx"))
+       (patches (search-patches "hmmer-remove-cpu-specificity.patch"))))
     (build-system gnu-build-system)
     (native-inputs `(("perl" ,perl)))
     (home-page "http://hmmer.org/")
@@ -5741,7 +5766,7 @@ track.  The database is exposed as a @code{TxDb} object.")
 (define-public vsearch
   (package
     (name "vsearch")
-    (version "2.4.0")
+    (version "2.4.2")
     (source
      (origin
        (method url-fetch)
@@ -5751,7 +5776,7 @@ track.  The database is exposed as a @code{TxDb} object.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "007q9a50hdw4vs2iajabvbw7qccml4r8cbqzyi5ipkkf42jk3vnr"))
+         "15zy2d9xvgbgdjlxvrhj8s5ga42p13k7a3xv015ingn0bi1p3n6w"))
        (patches (search-patches "vsearch-unbundle-cityhash.patch"))
        (snippet
         '(begin
@@ -8574,3 +8599,99 @@ identifications while not exceeding a specified false discovery rate.  It also
 contains a number of utilities to explore the MS/MS results and assess missed
 and irregular enzymatic cleavages, mass measurement accuracy, etc.")
     (license license:artistic2.0)))
+
+(define htslib-for-sambamba
+  (let ((commit "2f3c3ea7b301f9b45737a793c0b2dcf0240e5ee5"))
+    (package
+      (inherit htslib)
+      (name "htslib-for-sambamba")
+      (version (string-append "1.3.1-1." (string-take commit 9)))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/lomereiter/htslib.git")
+               (commit commit)))
+         (file-name (string-append "htslib-" version "-checkout"))
+         (sha256
+          (base32
+           "0g38g8s3npr0gjm9fahlbhiskyfws9l5i0x1ml3rakzj7az5l9c9"))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments htslib)
+         ((#:phases phases)
+          `(modify-phases  ,phases
+             (add-before 'configure 'bootstrap
+               (lambda _
+                 (zero? (system* "autoreconf" "-vif"))))))))
+      (native-inputs
+       `(("autoconf" ,autoconf)
+         ("automake" ,automake)
+         ,@(package-native-inputs htslib))))))
+
+(define-public sambamba
+  (package
+    (name "sambamba")
+    (version "0.6.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/lomereiter/sambamba/"
+                           "archive/v" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "17076gijd65a3f07zns2gvbgahiz5lriwsa6dq353ss3jl85d8vy"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; there is no test target
+       #:make-flags
+       '("D_COMPILER=ldc2"
+         ;; Override "--compiler" flag only.
+         "D_FLAGS=--compiler=ldc2 -IBioD -g -d"
+         "sambamba-ldmd2-64")
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-after 'unpack 'place-biod
+           (lambda* (#:key inputs #:allow-other-keys)
+             (copy-recursively (assoc-ref inputs "biod") "BioD")
+             #t))
+         (add-after 'unpack 'unbundle-prerequisites
+           (lambda _
+             (substitute* "Makefile"
+               ((" htslib-static lz4-static") ""))
+             #t))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out   (assoc-ref outputs "out"))
+                    (bin   (string-append out "/bin")))
+               (mkdir-p bin)
+               (install-file "build/sambamba" bin)
+               #t))))))
+    (native-inputs
+     `(("ldc" ,ldc)
+       ("rdmd" ,rdmd)
+       ("biod"
+        ,(let ((commit "1248586b54af4bd4dfb28ebfebfc6bf012e7a587"))
+           (origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/biod/BioD.git")
+                   (commit commit)))
+             (file-name (string-append "biod-"
+                                       (string-take commit 9)
+                                       "-checkout"))
+             (sha256
+              (base32
+               "1m8hi1n7x0ri4l6s9i0x6jg4z4v94xrfdzp7mbizdipfag0m17g3")))))))
+    (inputs
+     `(("lz4" ,lz4)
+       ("htslib" ,htslib-for-sambamba)))
+    (home-page "http://lomereiter.github.io/sambamba")
+    (synopsis "Tools for working with SAM/BAM data")
+    (description "Sambamba is a high performance modern robust and
+fast tool (and library), written in the D programming language, for
+working with SAM and BAM files.  Current parallelised functionality is
+an important subset of samtools functionality, including view, index,
+sort, markdup, and depth.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/certs.scm b/gnu/packages/certs.scm
index 246e5ca14a..7f5c5b793f 100644
--- a/gnu/packages/certs.scm
+++ b/gnu/packages/certs.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -73,7 +74,7 @@
 (define-public nss-certs
   (package
     (name "nss-certs")
-    (version "3.29.2")
+    (version "3.29.3")
     (source (origin
               (method url-fetch)
               (uri (let ((version-with-underscores
@@ -84,7 +85,7 @@
                       "nss-" version ".tar.gz")))
               (sha256
                (base32
-                "149807rmzb76hnh48rw4m9jw83iw0168njzchz0hmbsgc8mk0i5w"))))
+                "1sz1r2iml9bhd4iqiqz75gii855a25895vpy9scjky0y4lqwrp9m"))))
     (build-system gnu-build-system)
     (outputs '("out"))
     (native-inputs
@@ -139,3 +140,60 @@
 taken from the NSS package and thus ultimately from the Mozilla project.")
     (home-page "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS")
     (license license:mpl2.0)))
+
+(define-public le-certs
+  (package
+    (name "le-certs")
+    (version "0")
+    (source #f)
+    (build-system trivial-build-system)
+    (arguments
+     '(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let ((root (assoc-ref %build-inputs "isrgrootx1.pem"))
+               (intermediate (assoc-ref %build-inputs "letsencryptauthorityx3.pem"))
+               (backup (assoc-ref %build-inputs "letsencryptauthorityx4.pem"))
+               (out (string-append (assoc-ref %outputs "out") "/etc/ssl/certs")))
+           (mkdir-p out)
+           (for-each
+             (lambda (cert)
+               (copy-file cert (string-append out "/"
+                                              (strip-store-file-name cert))))
+             (list root intermediate backup))))))
+    (inputs
+     `(; The Let's Encrypt root certificate, "ISRG Root X1".
+       ("isrgrootx1.pem"
+        ,(origin
+           (method url-fetch)
+           (uri "https://letsencrypt.org/certs/isrgrootx1.pem")
+           (sha256
+            (base32
+             "0zhd1ps7sz4w1x52xk3v7ng6d0rcyi7y7rcrplwkmilnq5hzjv1y"))))
+       ;; "Let’s Encrypt Authority X3", the active Let's Encrypt intermediate
+       ;; certificate.
+       ("letsencryptauthorityx3.pem"
+        ,(origin
+           (method url-fetch)
+           (uri "https://letsencrypt.org/certs/letsencryptauthorityx3.pem")
+           (sha256
+            (base32
+             "0zbamj6c7zqw1j9mbqygc8k1ykgj6xiisp9svmlif5lkbnyjhnkk"))))
+       ;; "Let’s Encrypt Authority X4", the backup Let's Encrypt intermediate
+       ;; certificate.  This will be used for disaster recovery and will only be
+       ;; used should Let's Encrypt lose the ability to issue with "Let’s
+       ;; Encrypt Authority X3".
+       ("letsencryptauthorityx4.pem"
+        ,(origin
+           (method url-fetch)
+           (uri "https://letsencrypt.org/certs/letsencryptauthorityx4.pem")
+           (sha256
+            (base32
+             "003dc94c8qwj634h0dq743x7hqv9rdcfaisdksprkmi2jd107xq4"))))))
+    (home-page "https://letsencrypt.org/certificates/")
+    (synopsis "Let's Encrypt root and intermediate certificates")
+    (description "This package provides a certificate store containing only the
+Let's Encrypt root and intermediate certificates.  It is intended to be used
+within Guix.")
+    (license license:public-domain)))
diff --git a/gnu/packages/ci.scm b/gnu/packages/ci.scm
index c25bc389c0..ae91464a18 100644
--- a/gnu/packages/ci.scm
+++ b/gnu/packages/ci.scm
@@ -187,8 +187,8 @@ their dependencies.")
       (license l:gpl3+))))
 
 (define-public cuirass
-  (let ((commit "f695c79eb3b93a0432901844c8ede16de39b8d07")
-        (revision "4"))
+  (let ((commit "8c811abb3174b44601b8996a1fe1718f37d7bd14")
+        (revision "5"))
     (package
       (name "cuirass")
       (version (string-append "0.0.1-" revision "." (string-take commit 7)))
@@ -200,7 +200,7 @@ their dependencies.")
                 (file-name (string-append name "-" version))
                 (sha256
                  (base32
-                  "1zsj3l85d8jq7h9a0zfb2w5pyvlwkirgvis4bv60syhbpblfvmri"))))
+                  "0kz2ys01xlmxagsfr9qf3p212vm31wfl76rvxa7ii5804aidlz5n"))))
       (build-system gnu-build-system)
       (arguments
        '(#:phases
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index 4e6a248e8e..dbc4795d02 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -97,6 +97,33 @@ independent of the input data and can be reduced, if necessary, at some cost
 in compression.")
     (license license:zlib)))
 
+(define-public minizip
+  (package
+    (name "minizip")
+    (version (package-version zlib))
+    (source (package-source zlib))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'enter-source
+           (lambda _ (chdir "contrib/minizip") #t))
+         (add-before 'configure 'autoreconf
+           (lambda _
+             (zero? (system* "autoreconf" "-vif")))))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)))
+    (propagated-inputs `(("zlib" ,zlib)))
+    (home-page (package-home-page zlib))
+    (synopsis "Zip Compression library")
+    (description
+     "Minizip is a minimalistic library that supports compressing,
+extracting and viewing ZIP archives.  This version is extracted from
+the @code{zlib} source.")
+    (license (package-license zlib))))
+
 (define-public fastjar
   (package
    (name "fastjar")
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 1daf8e4e68..3db5527e60 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -16,7 +16,7 @@
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2016, 2017 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2016 Alex Vong <alexvong1995@gmail.com>
-;;; Copyright © 2016 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2016, 2017 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
@@ -366,7 +366,7 @@ when typing parentheses directly or commenting out code line by line.")
 (define-public git-modes
   (package
     (name "git-modes")
-    (version "1.2.2")
+    (version "1.2.4")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -375,7 +375,7 @@ when typing parentheses directly or commenting out code line by line.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0gb9c18jib8rpm14vig9774104lwmd8353ps0259m861syf6664d"))))
+                "0xxrmf0jnyljxvllc22qa0v8lgi4k1ldnayjm5hf68m25jsr378l"))))
     (build-system gnu-build-system)
     (arguments
      `(#:modules ((guix build gnu-build-system)
@@ -436,7 +436,7 @@ on stdout instead of using a socket as the Emacsclient does.")
 (define-public magit
   (package
     (name "magit")
-    (version "2.10.2")
+    (version "2.10.3")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -444,7 +444,7 @@ on stdout instead of using a socket as the Emacsclient does.")
                    version "/" name "-" version ".tar.gz"))
              (sha256
               (base32
-               "09qcc3a61irxi89x7q82hdy8dk0liiwyz66632wzcd881mhrhx18"))))
+               "03ln65ss420gc3h4pi56dayd1p163xfxrxrd9fkb9xnkl8mjglqk"))))
     (build-system gnu-build-system)
     (native-inputs `(("texinfo" ,texinfo)
                      ("emacs" ,emacs-minimal)))
@@ -3852,3 +3852,32 @@ mode-line.")
      "YASnippet is a template system for Emacs.  It allows you to type an
 abbreviation and automatically expand it into function templates.")
     (license license:gpl3+)))
+
+(define-public emacs-memoize
+  (package
+   (name "emacs-memoize")
+   (version "20130421.b55eab0")
+   (source
+    (origin
+     (method git-fetch)
+     (uri (git-reference
+           (url "https://github.com/skeeto/emacs-memoize")
+           (commit "b55eab0cb6ab05d941e07b8c01f1655c0cf1dd75")))
+     (file-name (string-append name "-" version ".tar.gz"))
+     (sha256
+      (base32
+       "0fjwlrdm270qcrqffvarw5yhijk656q4lam79ybhaznzj0dq3xpw"))))
+   (build-system emacs-build-system)
+   (arguments
+    `(#:phases
+      (modify-phases %standard-phases
+        (add-before 'install 'check
+                    (lambda _
+                      (zero? (system* "emacs" "-batch" "-l" "memoize.el"
+                                      "-l" "memoize-test.el"
+                                      "-f" "ert-run-tests-batch-and-exit")))))))
+   (home-page "https://github.com/skeeto/emacs-memoize")
+   (synopsis "Emacs lisp memoization library")
+   (description "@code{emacs-memoize} is an Emacs library for
+memoizing functions.")
+   (license license:unlicense)))
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index ce07accbf2..1f01ad6ad0 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -1035,6 +1035,70 @@ designed to work well in user interface environments.")
 vector graphics.")
    (license license:silofl1.1)))
 
+(define-public font-tamzen
+  (package
+    (name "font-tamzen")
+    (version "1.11.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/sunaku/tamzen-font/archive/"
+                           "Tamzen-" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1ryd7gp6qiwaqw73jqbmh4kwlriyd8xykh4j7z90z8xp9fm7lrys"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+
+         (let ((tar      (string-append (assoc-ref %build-inputs "tar")
+                                        "/bin/tar"))
+               (PATH     (string-append (assoc-ref %build-inputs "gzip")
+                                        "/bin"))
+               (font-dir (string-append %output "/share/fonts/misc"))
+               (psf-dir (string-append %output "/share/kbd/consolefonts"))
+               (src-pcf-dir (string-append "tamzen-font-Tamzen-"
+                                            ,version "/pcf")))
+           (setenv "PATH" PATH)
+           (system* tar "xvf" (assoc-ref %build-inputs "source"))
+           (mkdir-p font-dir)
+           (mkdir-p psf-dir)
+           (chdir src-pcf-dir)
+           (for-each (lambda (pcf)
+                       (install-file pcf font-dir))
+                     (find-files "." "\\.pcf$"))
+           (chdir "../psf")
+           (for-each (lambda (psf)
+                       (install-file psf psf-dir))
+                     (find-files "." "\\.psf$"))
+           #t))))
+    (native-inputs
+     `(("tar" ,tar)
+       ("gzip" ,gzip)))
+    (home-page "https://github.com/sunaku/tamzen-font")
+    (synopsis "Monospaced bitmap font for console and X11")
+    (description
+     "Tamzen is a fork of the @code{Tamsyn} font.  It is programatically forked
+from @code{Tamsyn} version 1.11, backporting glyphs from older versions while
+deleting deliberately empty glyphs (which are marked as unimplemented) to
+allow secondary/fallback fonts to provide real glyphs at those codepoints.
+
+The @code{TamzenForPowerline} fonts provide additional @code{Powerline} symbols,
+which are programatically injected with @code{bitmap-font-patcher} and
+later hand-tweaked with the gbdfed(1) editor:
+
+@enumerate
+@item all icons are expanded to occupy the maximum available space
+@item the branch of the fork icon ( U+E0A0) was made larger than the trunk
+@item for the newline icon ( U+E0A1), the @emph{N} was made larger at the bottom
+@item the keyhole in the padlock icon ( U+E0A2) was replaced with @emph{//} lines.
+@end enumerate\n")
+    (license (license:non-copyleft "file://LICENSE"))))
+
 (define-public font-comic-neue
   (package
    (name "font-comic-neue")
diff --git a/gnu/packages/fpga.scm b/gnu/packages/fpga.scm
index f65eae8673..0b98e2db0d 100644
--- a/gnu/packages/fpga.scm
+++ b/gnu/packages/fpga.scm
@@ -231,6 +231,11 @@ For synthesis, the compiler generates netlists in the desired format.")
                 (("-I/usr/local/include") "")
                 (("-L/usr/local/lib") ""))
               #t))
+          (add-after 'remove-usr-local 'fix-usr-local
+            (lambda* (#:key outputs #:allow-other-keys)
+              (substitute* "icebox/icebox_vlog.py"
+                (("/usr/local/share") (string-append (assoc-ref outputs "out") "/share")))
+              #t))
           (delete 'configure))))
     (inputs
      `(("libftdi" ,libftdi)))
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 550652eefd..1ce18658d0 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -1349,7 +1349,7 @@ is programmed in Haskell.")
 (define-public manaplus
   (package
     (name "manaplus")
-    (version "1.7.1.21")
+    (version "1.7.3.4")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1357,7 +1357,7 @@ is programmed in Haskell.")
                     version "/manaplus-" version ".tar.xz"))
               (sha256
                (base32
-                "0q9hk9jgz5jja1mmba5iafxwavk6991kjpmdxdkgbam0hk15pqmz"))))
+                "0mbxzsgjg16pqa3jnxkd7wwvw1lrx455r7fvwjfhzp0yv7acrn10"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
@@ -2880,8 +2880,8 @@ the GNU GPL.")
     (version "2.01.2")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://sourceforge.net/projects/tintin"
-                                  "/files/TinTin++ Source Code/" version
+              (uri (string-append "mirror://sourceforge/tintin"
+                                  "/TinTin++ Source Code/" version
                                   "/tintin" "-" version ".tar.gz"))
               (sha256
                (base32
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm
index 1b59cf7ecf..532dbf88f7 100644
--- a/gnu/packages/gnupg.scm
+++ b/gnu/packages/gnupg.scm
@@ -519,7 +519,7 @@ and signature functionality from Python programs.")
 (define-public pius
   (package
    (name "pius")
-   (version "2.2.3")
+   (version "2.2.4")
    (source (origin
             (method url-fetch)
             (uri (string-append
@@ -527,7 +527,7 @@ and signature functionality from Python programs.")
                   version "/pius-" version ".tar.bz2"))
             (sha256
              (base32
-              "0iy0gnms6lv9hpvk29313kc495a2f7pq2mg6ljxhy233vxsmjsk6"))))
+              "0lgc0ipwdfqbq16zax8kn17wbv8xyw4ygc09fawl2yp459z0ql4n"))))
    (build-system python-build-system)
    (inputs `(("perl" ,perl)                ;for 'pius-party-worksheet'
              ("gpg" ,gnupg)))
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index e6e24f6650..55dfda4948 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -186,7 +186,7 @@ in the Mozilla clients.")
 (define-public nss
   (package
     (name "nss")
-    (version "3.29.2")
+    (version "3.29.3")
     (source (origin
               (method url-fetch)
               (uri (let ((version-with-underscores
@@ -197,7 +197,7 @@ in the Mozilla clients.")
                       "nss-" version ".tar.gz")))
               (sha256
                (base32
-                "149807rmzb76hnh48rw4m9jw83iw0168njzchz0hmbsgc8mk0i5w"))
+                "1sz1r2iml9bhd4iqiqz75gii855a25895vpy9scjky0y4lqwrp9m"))
               ;; Create nss.pc and nss-config.
               (patches (search-patches "nss-pkgconfig.patch"))))
     (build-system gnu-build-system)
@@ -221,55 +221,52 @@ in the Mozilla clients.")
                   (ice-9 match)
                   (srfi srfi-26))
        #:phases
-       (alist-replace
-        'configure
-        (lambda* (#:key system inputs #:allow-other-keys)
-          (setenv "CC" "gcc")
-          ;; Tells NSS to build for the 64-bit ABI if we are 64-bit system.
-          (when (string-prefix? "x86_64" system)
-            (setenv "USE_64" "1"))
-          #t)
-        (alist-replace
-         'check
-         (lambda _
-           ;; Use 127.0.0.1 instead of $HOST.$DOMSUF as HOSTADDR for testing.
-           ;; The later requires a working DNS or /etc/hosts.
-           (setenv "DOMSUF" "(none)")
-           (setenv "USE_IP" "TRUE")
-           (setenv "IP_ADDRESS" "127.0.0.1")
-           (zero? (system* "./nss/tests/all.sh")))
-         (alist-replace
-          'install
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let* ((out (assoc-ref outputs "out"))
-                   (bin (string-append (assoc-ref outputs "bin") "/bin"))
-                   (inc (string-append out "/include/nss"))
-                   (lib (string-append out "/lib/nss"))
-                   (obj (match (scandir "dist" (cut string-suffix? "OBJ" <>))
-                          ((obj) (string-append "dist/" obj)))))
-              ;; Install nss-config to $out/bin.
-              (install-file (string-append obj "/bin/nss-config")
-                            (string-append out "/bin"))
-              (delete-file (string-append obj "/bin/nss-config"))
-              ;; Install nss.pc to $out/lib/pkgconfig.
-              (install-file (string-append obj "/lib/pkgconfig/nss.pc")
-                            (string-append out "/lib/pkgconfig"))
-              (delete-file (string-append obj "/lib/pkgconfig/nss.pc"))
-              (rmdir (string-append obj "/lib/pkgconfig"))
-              ;; Install other files.
-              (copy-recursively "dist/public/nss" inc)
-              (copy-recursively (string-append obj "/bin") bin)
-              (copy-recursively (string-append obj "/lib") lib)
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key system inputs #:allow-other-keys)
+             (setenv "CC" "gcc")
+             ;; Tells NSS to build for the 64-bit ABI if we are 64-bit system.
+             (when (string-prefix? "x86_64" system)
+               (setenv "USE_64" "1"))
+             #t))
+         (replace 'check
+           (lambda _
+             ;; Use 127.0.0.1 instead of $HOST.$DOMSUF as HOSTADDR for testing.
+             ;; The later requires a working DNS or /etc/hosts.
+             (setenv "DOMSUF" "(none)")
+             (setenv "USE_IP" "TRUE")
+             (setenv "IP_ADDRESS" "127.0.0.1")
+             (zero? (system* "./nss/tests/all.sh"))))
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (bin (string-append (assoc-ref outputs "bin") "/bin"))
+                      (inc (string-append out "/include/nss"))
+                      (lib (string-append out "/lib/nss"))
+                      (obj (match (scandir "dist" (cut string-suffix? "OBJ" <>))
+                             ((obj) (string-append "dist/" obj)))))
+                 ;; Install nss-config to $out/bin.
+                 (install-file (string-append obj "/bin/nss-config")
+                               (string-append out "/bin"))
+                 (delete-file (string-append obj "/bin/nss-config"))
+                 ;; Install nss.pc to $out/lib/pkgconfig.
+                 (install-file (string-append obj "/lib/pkgconfig/nss.pc")
+                               (string-append out "/lib/pkgconfig"))
+                 (delete-file (string-append obj "/lib/pkgconfig/nss.pc"))
+                 (rmdir (string-append obj "/lib/pkgconfig"))
+                 ;; Install other files.
+                 (copy-recursively "dist/public/nss" inc)
+                 (copy-recursively (string-append obj "/bin") bin)
+                 (copy-recursively (string-append obj "/lib") lib)
 
-              ;; FIXME: libgtest1.so is installed in the above step, and it's
-              ;; (unnecessarily) linked with several NSS libraries, but
-              ;; without the needed rpaths, causing the 'validate-runpath'
-              ;; phase to fail.  Here we simply delete libgtest1.so, since it
-              ;; seems to be used only during the tests.
-              (delete-file (string-append lib "/libgtest1.so"))
+                 ;; FIXME: libgtest1.so is installed in the above step, and it's
+                 ;; (unnecessarily) linked with several NSS libraries, but
+                 ;; without the needed rpaths, causing the 'validate-runpath'
+                 ;; phase to fail.  Here we simply delete libgtest1.so, since it
+                 ;; seems to be used only during the tests.
+                 (delete-file (string-append lib "/libgtest1.so"))
 
-              #t))
-          %standard-phases)))))
+                 #t))))))
     (inputs
      `(("sqlite" ,sqlite)
        ("zlib" ,zlib)))
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index 8fdd85add9..13ff0e069a 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -220,7 +220,7 @@ without requiring the source code to be rewritten.")
 (define-public guile-next
   (package (inherit guile-2.0)
     (name "guile-next")
-    (version "2.1.7")
+    (version "2.1.8")
     (replacement #f)
     (source (origin
               (method url-fetch)
@@ -228,7 +228,7 @@ without requiring the source code to be rewritten.")
                                   version ".tar.xz"))
               (sha256
                (base32
-                "0qf2664bglv5rrj4c99cc7gry7v9x0sqdyzgfg8zi8gm5wbcmqda"))
+                "0rh9vahqqwbyj79p1lc9pljkgxg8rczczf074dr8wl13j5h0y27m"))
               (modules '((guix build utils)))
 
               ;; Remove the pre-built object files.  Instead, build everything
@@ -238,6 +238,7 @@ without requiring the source code to be rewritten.")
                                   (find-files "prebuilt" "\\.go$")))))
     (synopsis "Snapshot of what will become version 2.2 of GNU Guile")
     (properties '((timeout . 72000)               ;20 hours
+                  (max-silent-time . 10800)       ;3 hours (needed on ARM)
                   (upstream-name . "guile")
                   (ftp-server . "alpha.gnu.org")
                   (ftp-directory . "/gnu/guile")))
diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index d0f659f6e3..2415881e8e 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -8194,4 +8194,22 @@ or filter messages based on the priority and source.  It also has a syslog
 handler built in.")
     (license license:bsd-3)))
 
+(define-public ghc-unexceptionalio
+  (package
+    (name "ghc-unexceptionalio")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/"
+                           "unexceptionalio-" version "/" "unexceptionalio-"
+                           version ".tar.gz"))
+       (sha256 (base32 "1f7h7zwky4scdcyjspg4ksfh7x6yra0wjybxq70p7vcwpgk2nzlj"))))
+    (build-system haskell-build-system)
+    (home-page "https://github.com/singpolyma/unexceptionalio")
+    (synopsis "IO without any non-error, synchronous exceptions")
+    (description "When you've caught all the exceptions that can be
+handled safely, this is what you're left with.")
+    (license license:isc)))
+
 ;;; haskell.scm ends here
diff --git a/gnu/packages/ibus.scm b/gnu/packages/ibus.scm
index d441485296..6c5537579e 100644
--- a/gnu/packages/ibus.scm
+++ b/gnu/packages/ibus.scm
@@ -42,7 +42,7 @@
 (define-public ibus
   (package
    (name "ibus")
-   (version "1.5.14")
+   (version "1.5.15")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://github.com/ibus/ibus/"
@@ -50,7 +50,7 @@
                                  version "/ibus-" version ".tar.gz"))
              (sha256
               (base32
-               "0g4x02d7j5w1lfn4zvmzsq93h17lajgn9d7hlvr6pws28vz40ax4"))))
+               "11g3jf6dgvmszvpgpva0y587kr0sffl79xmymvghrb1sdynvmxs1"))))
    (build-system glib-or-gtk-build-system)
    (arguments
     `(#:tests? #f  ; tests fail because there's no connection to dbus
@@ -237,7 +237,7 @@ Chinese pinyin input methods.")
 (define-public ibus-anthy
   (package
     (name "ibus-anthy")
-    (version "1.5.8")
+    (version "1.5.9")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -245,7 +245,7 @@ Chinese pinyin input methods.")
                     version "/ibus-anthy-" version ".tar.gz"))
               (sha256
                (base32
-                "1aj7vnfky7izl23xyjky78z3qas3q72l3kr8dnql2lnivsrb8q1y"))))
+                "1y8sf837rmp662bv6zakny0xcm7c9c5qda7f9kq9riv9ywpcbw6x"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
diff --git a/gnu/packages/imagemagick.scm b/gnu/packages/imagemagick.scm
index 74483965dd..73496ccfc0 100644
--- a/gnu/packages/imagemagick.scm
+++ b/gnu/packages/imagemagick.scm
@@ -46,14 +46,14 @@
     ;; The 7 release series has an incompatible API, while the 6 series is still
     ;; maintained. Don't update to 7 until we've made sure that the ImageMagick
     ;; users are ready for the 7-series API.
-    (version "6.9.7-9")
+    (version "6.9.7-10")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://imagemagick/ImageMagick-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1fqvi6h96mfbyw292awiwsqs449sjmw6i9ib53c66nnq1zchw7l3"))))
+               "02gvxz1xap5nm1vrgjxhkx13q6ja06vf23n28nc6cfdpb4s2xyqb"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--with-frozenpaths" "--without-gcc-arch")
@@ -187,6 +187,8 @@ script.")
          (list "--with-frozenpaths"
                "--enable-shared=yes"
                "--with-x=yes"
+               "--with-quantum-depth=16" ; required by Octave
+               "--enable-quantum-library-names"
                (string-append "--with-gs-font-dir="
                               (assoc-ref %build-inputs "gs-fonts")
                               "/share/fonts/type1/ghostscript"))))
diff --git a/gnu/packages/irc.scm b/gnu/packages/irc.scm
index 6ba950763b..3d06df9ed8 100644
--- a/gnu/packages/irc.scm
+++ b/gnu/packages/irc.scm
@@ -101,7 +101,7 @@ irssi, but graphical.")
 (define-public irssi
   (package
     (name "irssi")
-    (version "1.0.1")
+    (version "1.0.2")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://github.com/irssi/irssi/"
@@ -109,7 +109,7 @@ irssi, but graphical.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1krw71n24mj4p3f5nhzj6kdi1kq9ssl53hrqyjpgz61m7wdcaa4l"))))
+               "1sgvfprgrncbxcyg99rkd10kpjzqw00b1ppsfg8al0zirb13q72w"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/kde-frameworks.scm b/gnu/packages/kde-frameworks.scm
index 8bb05453da..7b90c1436b 100644
--- a/gnu/packages/kde-frameworks.scm
+++ b/gnu/packages/kde-frameworks.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
+;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -42,6 +43,7 @@
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
@@ -119,12 +121,58 @@ common build settings used in software produced by the KDE community.")
     (arguments
      `(#:configure-flags
        '("-DCMAKE_CXX_FLAGS=-fPIC"
-         "-DPHONON_BUILD_PHONON4QT5=ON")))
+         "-DPHONON_BUILD_PHONON4QT5=ON"
+         "-DPHONON_INSTALL_QT_EXTENSIONS_INTO_SYSTEM_QT=ON")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'patch-installdir
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((regex (string-append "(INSTALL DESTINATION \")"
+                                         (assoc-ref inputs "qtbase"))))
+               (substitute* "cmake_install.cmake"
+                 ((regex all dest)
+                  (string-append dest (assoc-ref outputs "out")))))
+           #t)))))
     (home-page "https://phonon.kde.org")
     (synopsis "KDE's multimedia library")
     (description "KDE's multimedia library.")
     (license license:lgpl2.1+)))
 
+(define-public phonon-backend-gstreamer
+  (package
+    (name "phonon-backend-gstreamer")
+    (version "4.9.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://kde/stable/phonon/"
+                    name "/" version "/"
+                    name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1wc5p1rqglf0n1avp55s50k7fjdzdrhg0gind15k8796w7nfbhyf"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     `(("extra-cmake-modules" ,extra-cmake-modules)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("qtbase" ,qtbase)
+       ("phonon" ,phonon)
+       ("qtbase" ,qtbase)
+       ("qtx11extras" ,qtx11extras)
+       ("gstreamer" ,gstreamer)
+       ("gst-plugins-base" ,gst-plugins-base)
+       ("libxml2" ,libxml2)))
+    (arguments
+     `(#:configure-flags
+       '( "-DPHONON_BUILD_PHONON4QT5=ON")))
+    (home-page "https://phonon.kde.org")
+    (synopsis "Phonon backend which uses GStreamer")
+    (description "Phonon makes use of backend libraries to provide sound.
+Phonon-GStreamer is a backend based on the GStreamer multimedia library.")
+    ;; license: source files mention "either version 2.1 or 3"
+    (license (list license:lgpl2.1 license:lgpl3))))
+
 (define-public gpgmepp
   (package
     (name "gpgmepp")
diff --git a/gnu/packages/ldc.scm b/gnu/packages/ldc.scm
index 614e2d6d0c..fd4d60e8b8 100644
--- a/gnu/packages/ldc.scm
+++ b/gnu/packages/ldc.scm
@@ -276,7 +276,7 @@ latest DMD frontend and uses LLVM as backend.")
 (define-public dub
   (package
     (name "dub")
-    (version "1.2.0")
+    (version "1.2.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/dlang/dub/archive/"
@@ -284,7 +284,7 @@ latest DMD frontend and uses LLVM as backend.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1sd8i1rvxc7y7kk0y6km5zyvaladc5zh56r6afj74ndd63dssv43"))))
+                "02k11x34nck0lbv13ww103niiswnwnslbnswj3b5faszzadbi1v4"))))
    (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; it would have tested itself by installing some packages (vibe etc)
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 53b0f2a678..cd6d32f0fd 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -348,8 +348,8 @@ It has been modified to remove all non-free binary blobs.")
 
 (define %intel-compatible-systems '("x86_64-linux" "i686-linux"))
 
-(define %linux-libre-version "4.10.1")
-(define %linux-libre-hash "0mvwrjny1bjqyjqjxff9m97j48ybfdw8qpdazr5rwk12234v4k3d")
+(define %linux-libre-version "4.10.2")
+(define %linux-libre-hash "01kinnv40lqsk6fyz1k7hkx2diyg4mgp28bwraar5sii1gqmcw7k")
 
 (define-public linux-libre
   (make-linux-libre %linux-libre-version
@@ -358,14 +358,14 @@ It has been modified to remove all non-free binary blobs.")
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.9
-  (make-linux-libre "4.9.13"
-                    "16miggwcwfpm7kx0yz256x887rky9wgmp1grg850lf8sdkiz0a1p"
+  (make-linux-libre "4.9.14"
+                    "104715z772if18qi61jbyhvidfh6qnwkiy0m9aa8irxgzs1pk9mn"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.4
-  (make-linux-libre "4.4.52"
-                    "1fzcq9bbsxiij2fh6kgwrp417sy2j5gnbzs0wwlmznj7mvysl7qg"
+  (make-linux-libre "4.4.53"
+                    "07sfg4i506f3hmd9k4iimnq1w3x0980qxnh649d1sldqxbmhdgjs"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
@@ -2764,7 +2764,7 @@ and copy/paste text in the console and in xterm.")
 (define-public btrfs-progs
   (package
     (name "btrfs-progs")
-    (version "4.9.1")
+    (version "4.10")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://kernel.org/linux/kernel/"
@@ -2772,7 +2772,7 @@ and copy/paste text in the console and in xterm.")
                                   "btrfs-progs-v" version ".tar.xz"))
               (sha256
                (base32
-                "1ppy2y9vypxw9awchari21yd3s2d7w2a9q3f4jq7dnjy5gyrnjj6"))))
+                "1njw2nrm51380d8arvqfmspa3app9353yd7hiddas3gpkaiwrjs4"))))
     (build-system gnu-build-system)
     (outputs '("out"
                "static"))      ; static versions of binaries in "out" (~16MiB!)
@@ -2839,9 +2839,9 @@ easy administration.")
            (remove-store-references target)
            (chmod target #o555)))))
     (home-page (package-home-page btrfs-progs))
-    (synopsis "Statically-linked btrfs command from btrfsprogs")
-    (description "This package provides statically-linked command of btrfs taken
-from the btrfsprogs package.  It is meant to be used in initrds.")
+    (synopsis "Statically-linked btrfs command from btrfs-progs")
+    (description "This package provides the statically-linked @command{btrfs}
+from the btrfs-progs package.  It is meant to be used in initrds.")
     (license (package-license btrfs-progs))))
 
 (define-public freefall
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index 647c64dcc7..425c273e0d 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -129,7 +129,7 @@ interface to the Tk widget system.")
 (define-public ecl
   (package
     (name "ecl")
-    (version "16.1.2")
+    (version "16.1.3")
     (source
      (origin
        (method url-fetch)
@@ -137,7 +137,7 @@ interface to the Tk widget system.")
              "https://common-lisp.net/project/ecl/static/files/release/"
              name "-" version ".tgz"))
        (sha256
-        (base32 "16ab8qs3awvdxy8xs8jy82v8r04x4wr70l9l2j45vgag18d2nj1d"))
+        (base32 "0m0j24w5d5a9dwwqyrg0d35c0nys16ijb4r0nyk87yp82v38b9bn"))
        (modules '((guix build utils)))
        (snippet
         ;; Add ecl-bundle-systems to 'default-system-source-registry'.
@@ -152,9 +152,6 @@ interface to the Tk widget system.")
               ("libffi" ,libffi)))
     (arguments
      '(#:tests? #t
-       #:make-flags `(,(string-append "ECL="
-                                      (assoc-ref %outputs "out")
-                                      "/bin/ecl"))
        #:parallel-tests? #f
        #:phases
        (modify-phases %standard-phases
@@ -182,7 +179,12 @@ interface to the Tk widget system.")
                          `("kernel-headers" ,@libraries)))
                  `("LIBRARY_PATH" suffix ,library-directories)
                  `("LD_LIBRARY_PATH" suffix ,library-directories)))))
-         (add-after 'wrap 'check (assoc-ref %standard-phases 'check)))))
+         (add-after 'wrap 'check (assoc-ref %standard-phases 'check))
+         (add-before 'check 'fix-path-to-ecl
+           (lambda _
+             (substitute* "build/tests/Makefile"
+               (("\\$\\{exec_prefix\\}/") ""))
+             #t)))))
     (native-search-paths
      (list (search-path-specification
             (variable "XDG_DATA_DIRS")
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index b70597b84d..070d9ba093 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -254,7 +254,7 @@ operating systems.")
   (package
     (inherit mutt)
     (name "neomutt")
-    (version "20170225")
+    (version "20170306")
     (source
      (origin
        (method url-fetch)
@@ -263,20 +263,20 @@ operating systems.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "00ll35g9pcanzrxsjp09vrmq6flml249dipcznrq2z4jy2zd386p"))))
+         "0qwcbjm9j1hgzmybw15w53pvfbqcdf47d4sw21s6r2yaj8kx1hag"))))
     (inputs
      `(("cyrus-sasl" ,cyrus-sasl)
        ("gdbm" ,gdbm)
-       ("lmdb" ,lmdb)
-       ("tokyocabinet" ,tokyocabinet)
        ("gpgme" ,gpgme)
        ("ncurses" ,ncurses)
        ("gnutls" ,gnutls)
        ("openssl" ,openssl) ;For smime
        ("perl" ,perl)
+       ("kyotocabinet" ,kyotocabinet)
        ("libxslt" ,libxslt)
        ("libidn" ,libidn)
        ("libxml2" ,libxml2)
+       ("lmdb" ,lmdb)
        ("docbook-xsl" ,docbook-xsl)
        ("notmuch" ,notmuch)))
     (native-inputs
@@ -291,11 +291,12 @@ operating systems.")
              "--enable-gpgme"
 
              ;; database, implies header caching
-             ;; neomutt supports building multiple backends
-             "--with-tokyocabinet"
+             "--without-tokyocabinet"
              "--without-qdbm"
              "--without-bdb"
              "--with-lmdb"
+             (string-append "--with-kyotocabinet="
+                            (assoc-ref %build-inputs "kyotocabinet"))
              "--with-gdbm"
 
              "--with-gnutls"
@@ -410,7 +411,7 @@ and corrections.  It is based on a Bayesian filter.")
 (define-public offlineimap
   (package
     (name "offlineimap")
-    (version "7.0.13")
+    (version "7.0.14")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/OfflineIMAP/offlineimap/"
@@ -418,7 +419,7 @@ and corrections.  It is based on a Bayesian filter.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1kl72wcxnxb4y5lm2f7ymwjsisnnpwb4w971ajkxlsiwjhzq8i7p"))))
+                "0i5dvygps1ai2qwgamab8kngrp0c5m3bgaw0jk34l8ypsk54wj8r"))))
     (build-system python-build-system)
     (native-inputs
      `(("asciidoc" ,asciidoc)
@@ -662,14 +663,14 @@ invoking @command{notifymuch} from the post-new hook.")
 (define-public notmuch
   (package
     (name "notmuch")
-    (version "0.23.7")
+    (version "0.24")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://notmuchmail.org/releases/notmuch-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "04w90c43zk23pys6prkqb14al408qypifcfj2qznqpwlf46v26zi"))))
+                "1z3m9knsdmchvfjzjhjf2cmdc9yahmvbvzn46wsrsrihfvv4rr7p"))))
     (build-system gnu-build-system)
     (arguments
      '(#:make-flags (list "V=1") ; Verbose test output.
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 9533f5f0a8..d274d50bbc 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -72,6 +72,7 @@
   #:use-module (gnu packages guile)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages gl)
+  #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages m4)
   #:use-module (gnu packages mpi)
   #:use-module (gnu packages multiprecision)
@@ -949,7 +950,9 @@ can solve two kinds of problems:
        ("libxft" ,libxft)
        ("mesa" ,mesa)
        ("glu" ,glu)
-       ("zlib" ,zlib)))
+       ("zlib" ,zlib)
+       ("curl" ,curl)
+       ("graphicsmagick" ,graphicsmagick)))
     (native-inputs
      `(("lzip" ,lzip)
        ("gfortran" ,gfortran)
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index 0ffc031c85..f2f36ad876 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -265,7 +265,7 @@ supports IPv6, SSL-protected connections as well as PAM for authentication.")
 (define-public pidgin
   (package
     (name "pidgin")
-    (version "2.11.0")
+    (version "2.12.0")
     (source
      (origin
        (method url-fetch)
@@ -273,7 +273,7 @@ supports IPv6, SSL-protected connections as well as PAM for authentication.")
                            version "/" name "-" version ".tar.bz2"))
        (sha256
         (base32
-         "0crkggjj6y07v1kdwil9vw532b0vrs6p33nmlvdkpnl60m2169pp"))
+         "1y5p2mq3bfw35b66jsafmbva0w5gg1k99y9z8fyp3jfksqv3agcc"))
        (patches (search-patches "pidgin-add-search-path.patch"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index c608f397dc..685636e8ba 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -445,13 +445,13 @@ transactions from C or Python.")
 (define-public diffoscope
   (package
     (name "diffoscope")
-    (version "77")
+    (version "78")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri name version))
               (sha256
                (base32
-                "0wrb6pl88611frxj19kq3vikhbld40fy1ncrskb1iayxsmbfcbn9"))))
+                "1bx8i6sx2mcvm166nhw0i5442ld6wigkwav8dsnv22y7gnsl9d7n"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
diff --git a/gnu/packages/patches/hmmer-remove-cpu-specificity.patch b/gnu/packages/patches/hmmer-remove-cpu-specificity.patch
new file mode 100644
index 0000000000..ba98db4d0e
--- /dev/null
+++ b/gnu/packages/patches/hmmer-remove-cpu-specificity.patch
@@ -0,0 +1,22 @@
+This patch removes compilation flags which make the build for the machine
+where compilation takes place, rendering the build not reproducible.
+
+diff --git a/configure b/configure
+index 8b6aaef..49a6afc 100755
+--- a/configure
++++ b/configure
+@@ -6125,14 +6125,6 @@ fi # guess arch
+ 
+ if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then
+ for arch in $ax_gcc_arch; do
+-  if test "x$acx_maxopt_portable" = xyes; then # if we require portable code
+-    flags="-mtune=$arch"
+-    # -mcpu=$arch and m$arch generate nonportable code on every arch except
+-    # x86.  And some other arches (e.g. Alpha) don't accept -mtune.  Grrr.
+-    case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac
+-  else
+-    flags="-march=$arch -mcpu=$arch -m$arch"
+-  fi
+   for flag in $flags; do
+     as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
diff --git a/gnu/packages/patches/python-pandas-skip-failing-tests.patch b/gnu/packages/patches/python-pandas-skip-failing-tests.patch
index 31fc912d00..8ac330c18f 100644
--- a/gnu/packages/patches/python-pandas-skip-failing-tests.patch
+++ b/gnu/packages/patches/python-pandas-skip-failing-tests.patch
@@ -2,39 +2,29 @@ These tests fail on 32bit architectures.
 
 Upstream bug URL: https://github.com/pandas-dev/pandas/issues/14866
 
---- a/pandas/tests/test_base.py	2017-03-08 17:49:44.422282717 +0100
-+++ b/pandas/tests/test_base.py	2017-03-08 17:50:59.476701799 +0100
-@@ -363,30 +363,6 @@
-                 self.assertFalse(result.iat[0])
-                 self.assertFalse(result.iat[1])
+--- a/pandas/tests/indexes/common.py	2017-03-09 00:10:26.063996176 +0100
++++ b/pandas/tests/indexes/common.py	2017-03-09 00:10:53.152844191 +0100
+@@ -119,20 +119,6 @@
+         with tm.assertRaisesRegexp(ValueError, 'Invalid fill method'):
+             idx.get_indexer(idx, method='invalid')
  
 -    def test_ndarray_compat_properties(self):
 -
--        for o in self.objs:
+-        idx = self.create_index()
+-        self.assertTrue(idx.T.equals(idx))
+-        self.assertTrue(idx.transpose().equals(idx))
 -
--            # check that we work
--            for p in ['shape', 'dtype', 'flags', 'T', 'strides', 'itemsize',
--                      'nbytes']:
--                self.assertIsNotNone(getattr(o, p, None))
--            self.assertTrue(hasattr(o, 'base'))
+-        values = idx.values
+-        for prop in self._compat_props:
+-            self.assertEqual(getattr(idx, prop), getattr(values, prop))
 -
--            # if we have a datetimelike dtype then needs a view to work
--            # but the user is responsible for that
--            try:
--                self.assertIsNotNone(o.data)
--            except ValueError:
--                pass
+-        # test for validity
+-        idx.nbytes
+-        idx.values.nbytes
 -
--            self.assertRaises(ValueError, o.item)  # len > 1
--            self.assertEqual(o.ndim, 1)
--            self.assertEqual(o.size, len(o))
--
--        self.assertEqual(Index([1]).item(), 1)
--        self.assertEqual(Series([1]).item(), 1)
--
-     def test_ops(self):
-         for op in ['max', 'min']:
-             for o in self.objs:
+     def test_repr_roundtrip(self):
+ 
+         idx = self.create_index()
 --- a/pandas/tools/tests/test_tile.py	2017-03-08 17:47:39.762261841 +0100
 +++ b/pandas/tools/tests/test_tile.py	2017-03-08 17:48:26.831780495 +0100
 @@ -271,19 +271,6 @@
diff --git a/gnu/packages/patches/wget-CVE-2017-6508.patch b/gnu/packages/patches/wget-CVE-2017-6508.patch
new file mode 100644
index 0000000000..0218fceaad
--- /dev/null
+++ b/gnu/packages/patches/wget-CVE-2017-6508.patch
@@ -0,0 +1,45 @@
+Fix CVE-2017-6508:
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-6508
+
+Patch copied from upstream source repository:
+
+https://git.savannah.gnu.org/cgit/wget.git/commit/?id=4d729e322fae359a1aefaafec1144764a54e8ad4
+
+From 4d729e322fae359a1aefaafec1144764a54e8ad4 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Tim=20R=C3=BChsen?= <tim.ruehsen@gmx.de>
+Date: Mon, 6 Mar 2017 10:04:22 +0100
+Subject: [PATCH] Fix CRLF injection in Wget host part
+
+* src/url.c (url_parse): Reject control characters in host part of URL
+
+Reported-by: Orange Tsai
+---
+ src/url.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/src/url.c b/src/url.c
+index 8f8ff0b8..7d36b27d 100644
+--- a/src/url.c
++++ b/src/url.c
+@@ -925,6 +925,17 @@ url_parse (const char *url, int *error, struct iri *iri, bool percent_encode)
+       url_unescape (u->host);
+       host_modified = true;
+ 
++      /* check for invalid control characters in host name */
++      for (p = u->host; *p; p++)
++        {
++          if (c_iscntrl(*p))
++            {
++              url_free(u);
++              error_code = PE_INVALID_HOST_NAME;
++              goto error;
++            }
++        }
++
+       /* Apply IDNA regardless of iri->utf8_encode status */
+       if (opt.enable_iri && iri)
+         {
+-- 
+2.12.0
+
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 60f0594453..5baf329995 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -30,12 +30,13 @@
 ;;; Copyright © 2016 Stefan Reichoer <stefan@xsteve.at>
 ;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
 ;;; Copyright © 2016 Alex Vong <alexvong1995@gmail.com>
-;;; Copyright © 2016 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2016, 2017 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2016, 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2016, 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016, 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
+;;; Copyright © 2017 humanitiesNerd <catonano@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -3433,8 +3434,6 @@ producing implementations of dynamic languages, emphasizing a clean separation
 between language specification and implementation aspects.")
     (license license:expat)))
 
-;; This version of numpy is missing the documentation and is only used to
-;; build matplotlib which is required to build numpy's documentation.
 (define-public python-numpy
   (package
     (name "python-numpy")
@@ -3581,10 +3580,10 @@ association studies (GWAS) on extremely large data sets.")
            (method git-fetch)
            (uri (git-reference
                  (url "https://github.com/scipy/scipy-sphinx-theme.git")
-                 (commit "c466764e22")))
+                 (commit "c466764e2231ba132c09826b5b138fffa1cfcec3")))
            (sha256
             (base32
-                "0q2y87clwlsgc7wvlsn9pzyssybcq10plwhq2w1ydykfsyyqbmkl"))))
+             "0q2y87clwlsgc7wvlsn9pzyssybcq10plwhq2w1ydykfsyyqbmkl"))))
        ,@(package-native-inputs python-numpy)))
     (arguments
      `(#:tests? #f ; we're only generating the documentation
@@ -13479,3 +13478,188 @@ specified to apply on the key before comparison (e.g. @code{string.lower})).")
 Python.  It is based on Parsing Expression Grammars, PEG.  With pyPEG you can
 parse many formal languages.")
     (license license:gpl2)))
+
+(define-public python2-cliapp
+  (package
+    (name "python2-cliapp")
+    (version "1.20160724")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "025cyi75vxyghbm4hav8dz4fzwksshddavy9g9fwr440awcvw74f"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:python ,python-2))
+    (propagated-inputs
+     `(("python2-pyaml" ,python2-pyaml)))
+    (home-page "https://liw.fi/cliapp/")
+    (synopsis "Python framework for command line programs")
+    (description "@code{python2-cliapp} is a python framework for
+command line programs.  It contains the typical stuff such programs
+need to do, such as parsing the command line for options, and
+iterating over input files.")
+    (license license:gpl2+)))
+
+(define-public python2-ttystatus
+  (package
+    (name "python2-ttystatus")
+    (version "0.32")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/ttystatus/snapshot/ttystatus-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "0b5g889jj23r2w1hi300cdldx6jvspanp0ybf5n1qvdvl150aamf"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:python ,python-2))
+    (home-page "https://liw.fi/ttystatus/")
+    (synopsis "Python library for showing progress reporting and
+status updates on terminals")
+    (description "@code{python2-ttystatus} is a python library for
+showing progress reporting and status updates on terminals, for
+command line programs.  Output is automatically adapted to the width
+of the terminal: truncated if it does not fit, and resized if the
+terminal size changes.")
+    (license license:gpl3+)))
+
+(define-public python2-tracing
+  (package
+    (name "python2-tracing")
+    (version "0.10")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/python-tracing/snapshot/tracing-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "06cw4zg42fsvqy372vi2whj26w56vzg5axhzwdjc2bgwf03garbw"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:python ,python-2))
+    (home-page "https://liw.fi/tracing/")
+    (synopsis "Python debug logging helper")
+    (description "@code{python2-tracing} is a python library for
+logging debug messages.  It provides a way to turn debugging messages
+on and off, based on the filename they occur in.  It is much faster
+than using @code{logging.Filter} to accomplish the same thing, which
+matters when code is run in production mode.  The actual logging still
+happens using the @code{logging} library.")
+    (license license:gpl3+)))
+
+(define-public python2-larch
+  (package
+    (name "python2-larch")
+    (version "1.20151025")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/larch/snapshot/larch-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1p4knkkavlqymgciz2wbcnfrdgdbafhg14maplnk4vbw0q8xs663"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:python ,python-2))
+    (propagated-inputs
+     `(("python2-tracing" ,python2-tracing)))
+    (home-page "https://liw.fi/larch/")
+    (synopsis "Python copy-on-write B-tree library")
+    (description "@code{python2-larch} is an implementation of
+particular kind of B-tree, based on research by Ohad Rodeh.  See
+@url{http://liw.fi/larch/ohad-btrees-shadowing-clones.pdf} for details
+on the data structure.
+
+The distinctive feature of this B-tree is that a node is never
+(conceptually) modified.  Instead, all updates are done by
+copy-on-write.  This makes it easy to clone a tree, and modify only the
+clone, while other processes access the original tree.")
+    (license license:gpl3+)))
+
+(define-public python-htmlmin
+  (package
+    (name "python-htmlmin")
+    (version "0.1.10")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "htmlmin" version))
+       (sha256
+        (base32
+         "0qxa93j3p1ak32qh8d9kshqv8v3z0hkc13dwbhp5cn7sn3xmsp6a"))))
+    (arguments
+     `(#:tests? #f)) ;htmlmin has no tests
+    (build-system python-build-system)
+    (home-page "https://htmlmin.readthedocs.org/en/latest/")
+    (synopsis "HTML minifier")
+    (description "@code{htmlmin} is an HTML minifier that just works.
+It comes with safe defaults and easily configurable options.")
+    (license license:bsd-3)))
+
+(define-public python2-htmlmin
+  (package-with-python2 python-htmlmin))
+
+(define-public python-flask-htmlmin
+  (package
+    (name "python-flask-htmlmin")
+    (version "1.2")
+    (source
+    (origin
+      (method url-fetch)
+      (uri (pypi-uri "Flask-HTMLmin" version))
+      (sha256
+       (base32
+        "1n6zlq72kakkw0z2jpq6nh74lfsmxybm4g053pwhc14fbr809348"))))
+    (propagated-inputs
+     `(("python-flask" ,python-flask)
+       ("python-htmlmin" ,python-htmlmin)))
+    (build-system python-build-system)
+    (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
+    (synopsis "HTML response minifier for Flask")
+    (description
+     "Minify @code{text/html} MIME type responses when using @code{Flask}.")
+    (license license:bsd-3)))
+
+(define-public python2-flask-htmlmin
+  (package-with-python2 python-flask-htmlmin))
+
+(define-public python-flask-login
+  (package
+    (name "python-flask-login")
+    (version "0.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/maxcountryman/flask-login/archive/"
+                           version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1pdqp7a2gyb7k06xda004x0fi2w66s6kn2i0ndkqndmg12d83f9w"))))
+    (arguments
+     ;; Tests fail PEP8 compliance. See:
+     ;; https://github.com/maxcountryman/flask-login/issues/340
+     `(#:tests? #f))
+    (build-system python-build-system)
+    (home-page "https://github.com/maxcountryman/flask-login")
+    (synopsis "User session management for Flask")
+    (description
+     "@code{Flask-Login} provides user session management for Flask.  It
+handles the common tasks of logging in, logging out, and remembering your
+users' sessions over extended periods of time.")
+    (license license:expat)))
+
+(define-public python2-flask-login
+  (package-with-python2 python-flask-login))
diff --git a/gnu/packages/regex.scm b/gnu/packages/regex.scm
index 11f4716033..f55faaf042 100644
--- a/gnu/packages/regex.scm
+++ b/gnu/packages/regex.scm
@@ -22,7 +22,8 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
-  #:use-module (guix build-system gnu))
+  #:use-module (guix build-system gnu)
+  #:use-module (guix utils))
 
 (define-public re2
    (package
@@ -42,7 +43,16 @@
      (arguments
       `(#:test-target "test"
         ;; There is no configure step, but the Makefile respects a prefix.
-        #:make-flags (list (string-append "prefix=" %output))
+        ;; As ./configure does not know anything about the target CXX
+        ;; we need to specify TARGET-g++ explicitly.
+        #:make-flags (list (string-append "prefix=" %output)
+                           (string-append
+                             "CXX=" ,(string-append
+                                       (if (%current-target-system)
+                                           (string-append
+                                             (%current-target-system) "-")
+                                           "")
+                                       "g++")))
         #:phases
         (modify-phases %standard-phases
           (delete 'configure)
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index 64b0b0e940..49bb24e594 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -3227,14 +3227,17 @@ and tidyr provides no margins or aggregation.")
 (define-public r-hexbin
   (package
     (name "r-hexbin")
-    (version "1.27.1")
+    ;; The package tarball was updated in place, resulting in a change in the
+    ;; hash value.  We decided to bump the version to 1.27.1-1 instead of
+    ;; keeping the version at upstream's 1.27.1.
+    (version "1.27.1-1")
     (source
      (origin
        (method url-fetch)
-       (uri (cran-uri "hexbin" version))
+       (uri (cran-uri "hexbin" "1.27.1"))
        (sha256
         (base32
-         "0xi6fbf1fvyn2gffr052n3viibqzpr3603sgi4xaminbzja4syjh"))))
+         "025d609z1nyy684hwvp34b9mjzkgvild7fvfr95f941dmsikan87"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-lattice" ,r-lattice)))
@@ -4170,3 +4173,671 @@ perform @dfn{independent component analysis} (ICA) and projection pursuit.")
 "This package provides the Breiman and Cutler's random forests algorithm, based on a
 forest of trees using random inputs, for classification and regression.")
     (license license:gpl2+)))
+
+(define-public r-diptest
+  (package
+    (name "r-diptest")
+    (version "0.75-7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "diptest" version))
+       (sha256
+        (base32
+         "06xnc5gv1284ll0addxnxb6ljz6fn8dbyrp5vchyz6551h800aa6"))))
+    (build-system r-build-system)
+    (home-page "http://cran.r-project.org/web/packages/diptest")
+    (synopsis "Hartigan's dip test statistic for unimodality")
+    (description
+     "This package computes Hartigan's dip test statistic for unimodality,
+multimodality and provides a test with simulation based p-values, where the
+original public code has been corrected.")
+    (license license:gpl2+)))
+
+(define-public r-modeltools
+  (package
+    (name "r-modeltools")
+    (version "0.2-21")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "modeltools" version))
+       (sha256
+        (base32
+         "0ynds453xprxv0jqqzi3blnv5w6vrdww9pvd1sq4lrr5ar3k3cq7"))))
+    (build-system r-build-system)
+    (home-page "http://cran.r-project.org/web/packages/modeltools")
+    (synopsis "Tools and classes for statistical models")
+    (description
+     "This package provides a collection of tools to deal with statistical
+models.  The functionality is experimental and the user interface is likely
+to change in the future.")
+    (license license:gpl2)))
+
+(define-public r-flexmix
+  (package
+    (name "r-flexmix")
+    (version "2.3-13")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "flexmix" version))
+       (sha256
+        (base32
+         "1i205yw3kkxs27gqcs6zx0c2mh16p332a2p06wq6fdzb20bazg3z"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-modeltools" ,r-modeltools)))
+    (home-page "http://cran.r-project.org/web/packages/flexmix")
+    (synopsis "Flexible mixture modeling")
+    (description
+     "This package implements a general framework for finite mixtures of
+regression models using the EM algorithm.  FlexMix provides the E-step and
+all data handling, while the M-step can be supplied by the user to easily
+define new models.  Existing drivers implement mixtures of standard linear
+models, generalized linear models and model-based clustering.")
+    (license license:gpl2+)))
+
+(define-public r-mclust
+  (package
+    (name "r-mclust")
+    (version "5.2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "mclust" version))
+       (sha256
+        (base32
+         "19cbg7p5h2b6h9mvcx9rjppyd3awma18ymaljakbnclpvhwbqpwd"))))
+    (build-system r-build-system)
+    (native-inputs
+     `(("gfortran" ,gfortran)))
+    (home-page "http://www.stat.washington.edu/mclust/")
+    (synopsis "Gaussian mixture modelling for model-based clustering etc.")
+    (description
+     "This package provides Gaussian finite mixture models fitted via EM
+algorithm for model-based clustering, classification, and density estimation,
+including Bayesian regularization, dimension reduction for visualisation,
+and resampling-based inference.")
+    (license license:gpl2+)))
+
+(define-public r-prabclus
+  (package
+    (name "r-prabclus")
+    (version "2.2-6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "prabclus" version))
+       (sha256
+        (base32
+         "0qjsxrx6yv338bxm4ki0w9h8hind1l98abdrz828588bwj02jya1"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-mclust" ,r-mclust)))
+    (home-page "https://cran.r-project.org/web/packages/prabclus")
+    (synopsis "Parametric bootstrap tests for spatial neighborhood clustering")
+    (description
+     "This package provides a distance-based parametric bootstrap tests
+for clustering with spatial neighborhood information.  Some distance measures,
+clustering of presence-absence, abundance and multilocus genetical data for
+species delimitation, nearest neighbor based noise detection.")
+    (license license:gpl2+)))
+
+(define-public r-deoptimr
+  (package
+    (name "r-deoptimr")
+    (version "1.0-8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "DEoptimR" version))
+       (sha256
+        (base32
+         "1vz546hyjyhly70z62h5n3mn62b8llhhmim8ffp9y6jnnb0i2sc4"))))
+    (properties `((upstream-name . "DEoptimR")))
+    (build-system r-build-system)
+    (home-page "http://cran.r-project.org/web/packages/DEoptimR")
+    (synopsis "Differential evolution optimization in pure R")
+    (description
+     "This package provides a differential evolution (DE) stochastic
+algorithms for global optimization of problems with and without constraints.
+The aim is to curate a collection of its state-of-the-art variants that (1) do
+not sacrifice simplicity of design, (2) are essentially tuning-free, and (3)
+can be efficiently implemented directly in the R language.")
+    (license license:gpl2+)))
+
+(define-public r-robustbase
+  (package
+    (name "r-robustbase")
+    (version "0.92-7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "robustbase" version))
+       (sha256
+        (base32
+         "13xz4am7y0s0kl5bmbcw3dlhl7ji8h9sjx56wsgmj6r9n35nrggw"))))
+    (build-system r-build-system)
+    (inputs
+     `(("gfortran" ,gfortran)))
+    (propagated-inputs
+     `(("r-deoptimr" ,r-deoptimr)))
+    (home-page "http://robustbase.r-forge.r-project.org/")
+    (synopsis "Basic robust statistics")
+    (description
+     "This packages allows to analyze data with robust methods such as
+regression methodology including model selections and multivariate statistics.")
+    (license license:gpl2+)))
+
+(define-public r-trimcluster
+  (package
+    (name "r-trimcluster")
+    (version "0.1-2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "trimcluster" version))
+       (sha256
+        (base32
+         "0lsgbg93hm0w1rdb813ry0ks2l0jfpyqzqkf3h3bj6fch0avcbv2"))))
+    (build-system r-build-system)
+    (home-page "http://cran.r-project.org/web/packages/trimcluster")
+    (synopsis "Cluster analysis with trimming")
+    (description
+     "The trimmed k-means clustering method by Cuesta-Albertos, Gordaliza and
+Matran (1997).  This optimizes the k-means criterion under trimming a portion
+of the points.")
+    (license license:gpl2+)))
+
+(define-public r-fpc
+  (package
+    (name "r-fpc")
+    (version "2.1-10")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "fpc" version))
+       (sha256
+        (base32
+         "15m0p9l9w2v7sl0cnzyg81i2fmx3hrhvr3371544mwn3fpsca5sx"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-diptest" ,r-diptest)
+       ("r-flexmix" ,r-flexmix)
+       ("r-kernlab" ,r-kernlab)
+       ("r-mclust" ,r-mclust)
+       ("r-mvtnorm" ,r-mvtnorm)
+       ("r-prabclus" ,r-prabclus)
+       ("r-robustbase" ,r-robustbase)
+       ("r-trimcluster" ,r-trimcluster)))
+    (home-page "http://cran.r-project.org/web/packages/fpc")
+    (synopsis "Flexible procedures for clustering")
+    (description
+     "This package provides various methods for clustering and cluster validation.
+For example, it provides fixed point clustering, linear regression clustering,
+clustering by merging Gaussian mixture components, as well as symmetric and
+asymmetric discriminant projections for visualisation of the separation of
+groupings.")
+  (license license:gpl2+)))
+
+(define-public r-vgam
+  (package
+    (name "r-vgam")
+    (version "1.0-3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "VGAM" version))
+       (sha256
+        (base32
+         "0wr6szcpj8r4a1rlzgd6iym7khin69fmvxcf37iyvs8mms86dfr3"))))
+    (properties `((upstream-name . "VGAM")))
+    (build-system r-build-system)
+    (inputs
+     `(("gfortran" ,gfortran)))
+    (home-page "https://www.stat.auckland.ac.nz/~yee/VGAM")
+    (synopsis "Vector generalized linear and additive models")
+    (description
+    "This package is an implementation of about 6 major classes of statistical
+regression models.  Currently only fixed-effects models are implemented, i.e.,
+no random-effects models.  Many (150+) models and distributions are estimated
+by maximum likelihood estimation (MLE) or penalized MLE, using Fisher scoring.
+VGLMs can be loosely thought of as multivariate generalised linear models.")
+    (license license:gpl2+)))
+
+(define-public r-pbapply
+  (package
+    (name "r-pbapply")
+    (version "1.3-2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "pbapply" version))
+       (sha256
+        (base32
+         "1sdmjlnwxb99f95g5v8k8mirrkzw99yig377v0qi9lzwjgd6fqqr"))))
+    (build-system r-build-system)
+    (home-page "https://github.com/psolymos/pbapply")
+    (synopsis "Adding progress bar to apply functions")
+    (description
+     "This lightweight package that adds progress bar to vectorized R
+functions apply.  The implementation can easily be added to functions where
+showing the progress is useful e.g. bootstrap.")
+    (license license:gpl2)))
+
+(define-public r-fnn
+  (package
+    (name "r-fnn")
+    (version "1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "FNN" version))
+       (sha256
+        (base32
+         "1kncmiaraq1mrykb9fj3fsxswabk3l71fnp1vks0x9aay5xfk8mj"))))
+    (properties `((upstream-name . "FNN")))
+    (build-system r-build-system)
+    (home-page "http://cran.r-project.org/web/packages/FNN")
+    (synopsis "Fast nearest neighbor search algorithms and applications")
+    (description
+     "This package provides cover-tree and kd-tree fast k-nearest neighbor
+search algorithms and related applications including KNN classification,
+regression and information measures.")
+    (license license:gpl2+)))
+
+(define-public r-minqa
+  (package
+    (name "r-minqa")
+    (version "1.2.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "minqa" version))
+       (sha256
+        (base32
+         "036drja6xz7awja9iwb76x91415p26fb0jmg7y7v0p65m6j978fg"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-rcpp" ,r-rcpp)))
+    (inputs
+     `(("gfortran" ,gfortran)))
+    (home-page "http://optimizer.r-forge.r-project.org")
+    (synopsis "Derivative-free optimization algorithms by quadratic approximation")
+    (description
+      "This package provides a derivative-free optimization by quadratic approximation
+based on an interface to Fortran implementations by M. J. D. Powell.")
+    (license license:gpl2)))
+
+(define-public r-rcppeigen
+  (package
+    (name "r-rcppeigen")
+    (version "0.3.2.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "RcppEigen" version))
+       (sha256
+        (base32
+         "0fy9kr03160f1ywzff3p380s8a59jz7d2d0rggb14g2y0slzpbr5"))))
+    (properties `((upstream-name . "RcppEigen")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-rcpp" ,r-rcpp)))
+    (home-page "http://eigen.tuxfamily.org")
+    (synopsis "Rcpp integration for the Eigen templated linear algebra library")
+    (description
+      "This package provides an integration of Eigen in R using a C++ template
+library for linear algebra: matrices, vectors, numerical solvers and related algorithms.
+It supports dense and sparse matrices on integer, floating point and complex numbers,
+decompositions of such matrices, and solutions of linear systems.")
+    (license license:gpl2+)))
+
+(define-public r-modelmetrics
+  (package
+    (name "r-modelmetrics")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+        (uri (cran-uri "ModelMetrics" version))
+        (sha256
+         (base32
+          "119xxmzb5biq7k1yxqsf0jmmarmfn6lds9x9hfgv593xlpym6za8"))))
+    (properties `((upstream-name . "ModelMetrics")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-rcpp" ,r-rcpp)))
+    (home-page "http://cran.r-project.org/web/packages/ModelMetrics")
+    (synopsis "Rapid calculation of model metrics")
+    (description
+     "Written in C++ using @code{Rcpp}, this package provides a collection of
+metrics for evaluating models.")
+    (license license:gpl2+)))
+
+(define-public r-matrixmodels
+  (package
+    (name "r-matrixmodels")
+    (version "0.4-1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "MatrixModels" version))
+       (sha256
+        (base32
+         "0cyfvhci2p1vr2x52ymkyqqs63x1qchn856dh2j94yb93r08x1zy"))))
+    (properties `((upstream-name . "MatrixModels")))
+    (build-system r-build-system)
+    (home-page "https://cran.r-project.org/web/packages/MatrixModels")
+    (synopsis "Modelling with sparse and dense matrices")
+    (description
+     "This package models with sparse and dense matrix matrices,
+using modular prediction and response module classes.")
+    (license license:gpl2+)))
+
+(define-public r-quantreg
+  (package
+    (name "r-quantreg")
+    (version "5.29")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "quantreg" version))
+       (sha256
+        (base32
+         "098gy8xv9kcl5y0cm93b8chr5sm6crrdxi20bkx9lmwmybl3himv"))))
+    (build-system r-build-system)
+    (native-inputs
+     `(("gfortran" ,gfortran)))
+    (propagated-inputs
+     `(("r-matrixmodels" ,r-matrixmodels)
+       ("r-sparsem" ,r-sparsem)))
+    (home-page "http://www.r-project.org")
+    (synopsis "Quantile regression")
+    (description
+     "This package provides an estimation and inference methods for models
+of conditional quantiles: linear and nonlinear parametric and non-parametric
+models for conditional quantiles of a univariate response and several methods
+for handling censored survival data.  Portfolio selection methods based on
+expected shortfall risk are also included.")
+    (license license:gpl2+)))
+
+(define-public r-nloptr
+  (package
+    (name "r-nloptr")
+    (version "1.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "nloptr" version))
+       (sha256
+        (base32
+         "1cypz91z28vhvwq2rzqjrbdc6a2lvfr2g16vid2sax618q6ai089"))))
+    (build-system r-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("nlopt" ,nlopt)))
+    (home-page "http://cran.r-project.org/web/packages/nloptr")
+    (synopsis "R interface to NLopt")
+    (description
+     "This package is interface to NLopt, a library for nonlinear
+optimization.  NLopt is a library for nonlinear optimization, providing a
+common interface for a number of different free optimization routines
+available online as well as original implementations of various other
+algorithms.")
+    (license license:lgpl3)))
+
+(define-public r-lme4
+  (package
+    (name "r-lme4")
+    (version "1.1-12")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "lme4" version))
+       (sha256
+        (base32
+         "0j60l5kgx1wvw2wm3jwfqwi63hammaq8gfcxzwa4h552likvaxi9"))))
+    (build-system r-build-system)
+    (native-inputs
+     `(("r-rcpp" ,r-rcpp)
+       ("r-rcppeigen" ,r-rcppeigen)))
+    (propagated-inputs
+     `(("r-minqa" ,r-minqa)
+       ("r-nloptr" ,r-nloptr)))
+    (home-page "http://cran.r-project.org/web/packages/lme4")
+    (synopsis "Linear mixed-effects models using eigen and S4")
+    (description
+      "This package provides fit linear and generalized linear mixed-effects
+models.  The models and their components are represented using S4 classes and
+methods.  The core computational algorithms are implemented using the Eigen
+C++ library for numerical linear algebra and RcppEigen glue.")
+    (license license:gpl2+)))
+
+(define-public r-pbkrtest
+  (package
+    (name "r-pbkrtest")
+    (version "0.4-6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "pbkrtest" version))
+       (sha256
+        (base32
+         "00cw18q7wvddzjrbxz917wkix6r7672vi2wmsp4gwgzady8vha4x"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-lme4" ,r-lme4)))
+    (home-page "http://people.math.aau.dk/~sorenh/software/pbkrtest/")
+    (synopsis "Methods for linear mixed model comparison")
+    (description
+     "This package implements a parametric bootstrap test and a Kenward Roger
+modification of F-tests for linear mixed effects models and a parametric
+bootstrap test for generalized linear mixed models.")
+    (license license:gpl2+)))
+
+(define-public r-car
+  (package
+    (name "r-car")
+    (version "2.1-4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "car" version))
+       (sha256
+        (base32
+         "0a6v7rsd1xsdyapnfqy37m7c4kx9wslkzsizc9k0lmnba0bwyfgx"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-pbkrtest" ,r-pbkrtest)
+       ("r-quantreg" ,r-quantreg)))
+    (home-page "https://r-forge.r-project.org/projects/car/")
+    (synopsis "Companion to applied regression")
+    (description
+      "This package provides functions and datasets from book Companion
+to Applied regression, Second Edition, Sage, 2011.")
+    (license license:gpl2+)))
+
+(define-public r-caret
+  (package
+    (name "r-caret")
+    (version "6.0-73")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "caret" version))
+       (sha256
+        (base32
+         "1jzaqwv4glyqqnfbpalgajd0ag866247vvdh5i83ffqs1yhs984h"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-car" ,r-car)
+       ("r-foreach" ,r-foreach)
+       ("r-ggplot2" ,r-ggplot2)
+       ("r-modelmetrics" ,r-modelmetrics)
+       ("r-plyr" ,r-plyr)
+       ("r-reshape2" ,r-reshape2)))
+    (home-page "https://github.com/topepo/caret")
+    (synopsis "Classification and regression training")
+    (description
+     "This package provides misc functions for training and plotting
+classification and regression models.")
+    (license license:gpl2+)))
+
+(define-public r-rcppprogress
+  (package
+    (name "r-rcppprogress")
+    (version "0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "RcppProgress" version))
+       (sha256
+        (base32
+         "0796g11w7iv3ix1wfm3fh09qq7jki4r4cp1mjagq77igri3xrr9x"))))
+    (properties `((upstream-name . "RcppProgress")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-rcpp" ,r-rcpp)))
+    (home-page "https://github.com/kforner/rcpp_progress")
+    (synopsis "Interruptible progress bar for C++ in R packages")
+    (description
+     "This package allows to display a progress bar in the R console for long running
+computations taking place in C++ code, and support for interrupting those computations
+even in multithreaded code, typically using OpenMP.")
+    (license license:gpl3+)))
+
+(define-public r-mnormt
+  (package
+    (name "r-mnormt")
+    (version "1.5-5")
+    (source
+     (origin
+       (method url-fetch)
+        (uri (cran-uri "mnormt" version))
+        (sha256
+          (base32
+           "1b34xxrnf35khsx82mhvmk96sgfr2flyasaah7qkb2976pwxay7z"))))
+    (build-system r-build-system)
+    (native-inputs
+     `(("gfortran" ,gfortran)))
+    (home-page "http://azzalini.stat.unipd.it/SW/Pkg-mnormt")
+    (synopsis "Multivariate normal and \"t\" distributions")
+    (description
+     "This package provides functions for computing the density and the
+distribution function of multivariate normal and \"t\" random variables, and
+for generating random vectors sampled from these distributions.  Probabilities
+are computed via non-Monte Carlo methods.")
+    (license license:gpl2+)))
+
+(define-public r-numderiv
+  (package
+    (name "r-numderiv")
+    (version "2016.8-1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "numDeriv" version))
+       (sha256
+        (base32
+         "07ni52rwiap4wilfz94w5mrqaxr59axxmgn57857ip4p6qkiss0v"))))
+    (properties `((upstream-name . "numDeriv")))
+    (build-system r-build-system)
+    (home-page "https://cran.r-project.org/web/packages/numDeriv")
+    (synopsis "Accurate numerical derivatives")
+    (description
+     "This package provides methods for calculating accurate numerical
+first and second order derivatives.")
+    (license license:gpl2)))
+
+(define-public r-sn
+  (package
+    (name "r-sn")
+    (version "1.5-0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "sn" version))
+       (sha256
+        (base32
+         "0fh7xjsfd2x8d9lbnss7raldh24b72b3pvcv7zqa1qprzg7zfr01"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-mnormt" ,r-mnormt)
+       ("r-numderiv" ,r-numderiv)))
+    (home-page "http://azzalini.stat.unipd.it/SN")
+    (synopsis "The skew-normal and skew-t distributions")
+    (description
+     "This packages provides functionalities to build and manipulate
+probability distributions of the skew-normal family and some related
+ones, notably the skew-t family, and provides related statistical
+methods for data fitting and diagnostics, in the univariate and the
+multivariate case.")
+    (license license:gpl2+)))
+
+(define-public r-tclust
+  (package
+    (name "r-tclust")
+    (version "1.2-3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "tclust" version))
+       (sha256
+        (base32
+         "0a1b7yp4l9wf6ic5czizyl2cnxrc1virj0icr8i6m1vv23jd8jfp"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-mclust" ,r-mclust)
+       ("r-mvtnorm" ,r-mvtnorm)
+       ("r-sn" ,r-sn)))
+    (home-page "http://cran.r-project.org/web/packages/tclust")
+    (synopsis "Robust trimmed clustering")
+    (description
+     "This package implements different robust clustering
+algorithms (@code{tclust}) based on trimming and including some graphical
+diagnostic tools (@code{ctlcurves} and @code{DiscrFact}).")
+    (license license:gpl3)))
+
+(define-public r-ranger
+  (package
+    (name "r-ranger")
+    (version "0.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "ranger" version))
+       (sha256
+        (base32
+         "1fwqwbi0dnla16x6zj14rf95qr5gmilfmlrwnv7s960h4yiw4n97"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-rcpp" ,r-rcpp)))
+    (home-page "https://github.com/imbs-hl/ranger")
+    (synopsis "Fast implementation of random forests")
+    (description
+     "This package provides a fast implementation of Random Forests,
+particularly suited for high dimensional data.  Ensembles of classification,
+regression, survival and probability prediction trees are supported.  Data from
+genome-wide association studies can be analyzed efficiently.")
+    (license license:gpl3)))
+
+(define-public r-tsne
+  (package
+    (name "r-tsne")
+    (version "0.1-3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "tsne" version))
+       (sha256
+        (base32
+         "0s8cv2pndkddq62rzlgzgfdjp1vjv5hz5i5957sllnb97vbzbzb6"))))
+    (build-system r-build-system)
+    (home-page "https://github.com/jdonaldson/rtsne/")
+    (synopsis "t-Distributed Stochastic Neighbor Embedding for R")
+    (description
+     "This package provides a pure R implementation of the t-SNE algorithm.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 9f73a7ad59..34ffabb483 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -980,7 +980,7 @@ access to mpv's powerful playback capabilities.")
 (define-public youtube-dl
   (package
     (name "youtube-dl")
-    (version "2017.03.02")
+    (version "2017.03.07")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://yt-dl.org/downloads/"
@@ -988,7 +988,7 @@ access to mpv's powerful playback capabilities.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0f86qnppxnbh2c8bmpf0c1xhwk5vqjdzz7pqh9sydhscv8r0209g"))))
+                "19acz9m3gazd1ims4l9a9ni1p7jw8z4y0ncqn99xlx9kna8ryjnv"))))
     (build-system python-build-system)
     (arguments
      ;; The problem here is that the directory for the man page and completion
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index dab30df13d..a0e76d52c4 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -4459,10 +4459,9 @@ functions of Tidy.")
     (home-page "https://www.hiawatha-webserver.org")
     (synopsis "Webserver with focus on security")
     (description
-     "Hiawatha has been written with security in mind.  This resulted in a
-highly secure webserver in both code and features.  Hiawatha can stop SQL
-injections, XSS and CSRF attacks and exploit attempts.  Via a specially
-crafted monitoring tool, you can keep track of all your webservers.")
+     "Hiawatha has been written with security in mind.
+Features include the ability to stop SQL injections, XSS and CSRF attacks and
+exploit attempts.")
     (license l:gpl2)))
 
 (define-public qutebrowser
diff --git a/gnu/packages/wget.scm b/gnu/packages/wget.scm
index 9ac21b4db1..1c56e14a66 100644
--- a/gnu/packages/wget.scm
+++ b/gnu/packages/wget.scm
@@ -20,6 +20,7 @@
 
 (define-module (gnu packages wget)
   #:use-module (guix licenses)
+  #:use-module (gnu packages)
   #:use-module (gnu packages libidn)
   #:use-module (gnu packages python)
   #:use-module (gnu packages perl)
@@ -39,6 +40,7 @@
       (method url-fetch)
       (uri (string-append "mirror://gnu/wget/wget-"
                           version ".tar.xz"))
+      (patches (search-patches "wget-CVE-2017-6508.patch"))
       (sha256
        (base32
         "1ljcfhbkdsd0zjfm520rbl1ai62fc34i7c45sfj244l8f6b0p58c"))))
diff --git a/gnu/packages/wine.scm b/gnu/packages/wine.scm
index d28e2dd4e4..40e1dd5cfc 100644
--- a/gnu/packages/wine.scm
+++ b/gnu/packages/wine.scm
@@ -54,15 +54,14 @@
 (define-public wine
   (package
     (name "wine")
-    (version "2.0")
+    (version "2.3")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://dl.winehq.org/wine/source/"
-                                  (version-major+minor version)
-                                  "/wine-" version ".tar.bz2"))
+              (uri (string-append "https://dl.winehq.org/wine/source/2.x"
+                                  "/wine-" version ".tar.xz"))
               (sha256
                (base32
-                "1ik6q0h3ph3jizmp7bxhf6kcm1pzrdrn2m0yf2x86slv2aigamlp"))))
+                "0zh6kvs4d6d99x5qgxbb5jq2wilwzifhmib2nhq0g3ychxx5rjdg"))))
     (build-system gnu-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)
                      ("gettext" ,gettext-minimal)
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index 18354271ee..191dc7dd19 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -2392,7 +2392,7 @@ including most mice, keyboards, tablets and touchscreens.")
 (define-public xf86-input-libinput
   (package
     (name "xf86-input-libinput")
-    (version "0.24.0")
+    (version "0.25.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2400,7 +2400,7 @@ including most mice, keyboards, tablets and touchscreens.")
                     name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "0a1nn65qq71bbfhxq39zdb4b1h6ickzv98cjdacv4ngd18shgjyx"))))
+                "0vsmijamfzf6vcljrr0am2qcz33zl2l0lj2mzmbwgrm7ixjx2zxv"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
@@ -2811,10 +2811,10 @@ X server.")
 
 
 (define-public xf86-video-intel
-  (let ((commit "e4fe79cf0d9a05ee3f3a027148ef0aeb2b1b34e1"))
+  (let ((commit "7e9e92c86b0fc4c848d164fe571798add5e1e36e"))
     (package
       (name "xf86-video-intel")
-      (version (string-append "2.99.917-3-" (string-take commit 7)))
+      (version (string-append "2.99.917-4-" (string-take commit 7)))
       (source
        (origin
          ;; there's no current tarball
@@ -2824,7 +2824,7 @@ X server.")
                (commit commit)))
          (sha256
           (base32
-           "0hf3fxv5jchyh820h449c1ld9x19gc8081w1yk98mab6zr89zswp"))
+           "0igfw8vpz1q0a2526j81fl65z6avfh6lzzrijcs72gwihqqhb1sv"))
          (file-name (string-append name "-" version))))
       (build-system gnu-build-system)
       (inputs `(("mesa" ,mesa)
@@ -2994,7 +2994,7 @@ supported, and the RENDER extension is not accelerated by this driver.")
 (define-public xf86-video-nouveau
   (package
     (name "xf86-video-nouveau")
-    (version "1.0.13")
+    (version "1.0.14")
     (source
      (origin
        (method url-fetch)
@@ -3004,7 +3004,7 @@ supported, and the RENDER extension is not accelerated by this driver.")
              ".tar.bz2"))
        (sha256
         (base32
-         "1js7vak68g2800f1cy5r41wl5x2j7dbmbd7zxypzfgcw2fx454kd"))))
+         "1h9izq510m2pvg77d0y9krc0cvvbhp2y3xlrrz6id7y47jdzkpsd"))))
     (build-system gnu-build-system)
     (inputs `(("xorg-server" ,xorg-server)))
     (native-inputs `(("pkg-config" ,pkg-config)))
diff --git a/gnu/services.scm b/gnu/services.scm
index 6ac4f1322d..6c88f2621b 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -334,9 +334,11 @@ ACTIVATION-SCRIPT-TYPE."
   (mlet* %store-monad ((actions (service-activations)))
     (gexp->file "activate"
                 (with-imported-modules (source-module-closure
-                                        '((gnu build activation)))
+                                        '((gnu build activation)
+                                          (guix build utils)))
                   #~(begin
-                      (use-modules (gnu build activation))
+                      (use-modules (gnu build activation)
+                                   (guix build utils))
 
                       ;; Make sure the user accounting database exists.  If it
                       ;; does not exist, 'setutxent' does not create it and
@@ -345,6 +347,7 @@ ACTIVATION-SCRIPT-TYPE."
 
                       ;; Same for 'wtmp', which is populated by mingetty et
                       ;; al.
+                      (mkdir-p "/var/log")
                       (close-port (open-file "/var/log/wtmp" "a0"))
 
                       ;; Set up /run/current-system.  Among other things this
diff --git a/gnu/services/configuration.scm b/gnu/services/configuration.scm
index a98db64fa5..2ad3a637a4 100644
--- a/gnu/services/configuration.scm
+++ b/gnu/services/configuration.scm
@@ -39,14 +39,6 @@
             define-configuration
             validate-configuration
             generate-documentation
-            serialize-field
-            serialize-string
-            serialize-name
-            serialize-space-separated-string-list
-            space-separated-string-list?
-            serialize-file-name
-            file-name?
-            serialize-boolean
             serialize-package))
 
 ;;; Commentary:
@@ -140,41 +132,9 @@
                                            #,(id #'stem #'stem #'-fields))
                    conf))))))))
 
-(define (uglify-field-name field-name)
-  (let ((str (symbol->string field-name)))
-    (string-concatenate
-     (map string-titlecase
-          (string-split (if (string-suffix? "?" str)
-                            (substring str 0 (1- (string-length str)))
-                            str)
-                        #\-)))))
-
-(define (serialize-field field-name val)
-  (format #t "~a ~a\n" (uglify-field-name field-name) val))
-
 (define (serialize-package field-name val)
   #f)
 
-(define (serialize-string field-name val)
-  (serialize-field field-name val))
-
-(define (space-separated-string-list? val)
-  (and (list? val)
-       (and-map (lambda (x)
-                  (and (string? x) (not (string-index x #\space))))
-                val)))
-(define (serialize-space-separated-string-list field-name val)
-  (serialize-field field-name (string-join val " ")))
-
-(define (file-name? val)
-  (and (string? val)
-       (string-prefix? "/" val)))
-(define (serialize-file-name field-name val)
-  (serialize-string field-name val))
-
-(define (serialize-boolean field-name val)
-  (serialize-string field-name (if val "yes" "no")))
-
 ;; A little helper to make it easier to document all those fields.
 (define (generate-documentation documentation documentation-name)
   (define (str x) (object->string x))
diff --git a/gnu/services/cups.scm b/gnu/services/cups.scm
index 70b858479a..70a71eff0a 100644
--- a/gnu/services/cups.scm
+++ b/gnu/services/cups.scm
@@ -57,6 +57,21 @@
          (home-directory "/var/empty")
          (shell (file-append shadow "/sbin/nologin")))))
 
+(define (uglify-field-name field-name)
+  (let ((str (symbol->string field-name)))
+    (string-concatenate
+     (map string-titlecase
+          (string-split (if (string-suffix? "?" str)
+                            (substring str 0 (1- (string-length str)))
+                            str)
+                        #\-)))))
+
+(define (serialize-field field-name val)
+  (format #t "~a ~a\n" (uglify-field-name field-name) val))
+
+(define (serialize-string field-name val)
+  (serialize-field field-name val))
+
 (define (multiline-string-list? val)
   (and (list? val)
        (and-map (lambda (x)
@@ -65,11 +80,28 @@
 (define (serialize-multiline-string-list field-name val)
   (for-each (lambda (str) (serialize-field field-name str)) val))
 
+(define (space-separated-string-list? val)
+  (and (list? val)
+       (and-map (lambda (x)
+                  (and (string? x) (not (string-index x #\space))))
+                val)))
+(define (serialize-space-separated-string-list field-name val)
+  (serialize-field field-name (string-join val " ")))
+
 (define (space-separated-symbol-list? val)
   (and (list? val) (and-map symbol? val)))
 (define (serialize-space-separated-symbol-list field-name val)
   (serialize-field field-name (string-join (map symbol->string val) " ")))
 
+(define (file-name? val)
+  (and (string? val)
+       (string-prefix? "/" val)))
+(define (serialize-file-name field-name val)
+  (serialize-string field-name val))
+
+(define (serialize-boolean field-name val)
+  (serialize-string field-name (if val "yes" "no")))
+
 (define (non-negative-integer? val)
   (and (exact-integer? val) (not (negative? val))))
 (define (serialize-non-negative-integer field-name val)
diff --git a/gnu/services/kerberos.scm b/gnu/services/kerberos.scm
index cb33a7c53d..f09f47893c 100644
--- a/gnu/services/kerberos.scm
+++ b/gnu/services/kerberos.scm
@@ -96,6 +96,12 @@ trailing '?' removed."
   (unless (eq? val unset-field)
       (serialize-field* field-name (string-join val " "))))
 
+(define (space-separated-string-list? val)
+  (and (list? val)
+       (and-map (lambda (x)
+                  (and (string? x) (not (string-index x #\space))))
+                val)))
+
 (define space-separated-string-list/unset?
   (predicate/unset space-separated-string-list?))
 
@@ -118,10 +124,19 @@ trailing '?' removed."
                     (lambda (val)
                       (string-prefix? "/" val))))
 
+(define (serialize-field field-name val)
+  (format #t "~a ~a\n" (uglify-field-name field-name) val))
+
+(define (serialize-string field-name val)
+  (serialize-field field-name val))
+
 (define (serialize-file-name field-name val)
   (unless (eq? val unset-field)
     (serialize-string field-name val)))
 
+(define (serialize-space-separated-string-list field-name val)
+  (serialize-field field-name (string-join val " ")))
+
 (define (non-negative-integer? val)
   (and (exact-integer? val) (not (negative? val))))
 
diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm
index 30b1672d33..05978e0068 100644
--- a/gnu/services/mail.scm
+++ b/gnu/services/mail.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -33,6 +34,7 @@
   #:use-module (guix packages)
   #:use-module (guix gexp)
   #:use-module (ice-9 match)
+  #:use-module (ice-9 format)
   #:export (dovecot-service
             dovecot-service-type
             dovecot-configuration
@@ -53,7 +55,12 @@
             opensmtpd-configuration
             opensmtpd-configuration?
             opensmtpd-service-type
-            %default-opensmtpd-config-file))
+            %default-opensmtpd-config-file
+
+            exim-configuration
+            exim-configuration?
+            exim-service-type
+            %default-exim-config-file))
 
 ;;; Commentary:
 ;;;
@@ -62,6 +69,27 @@
 ;;;
 ;;; Code:
 
+(define (uglify-field-name field-name)
+  (let ((str (symbol->string field-name)))
+    (string-join (string-split (if (string-suffix? "?" str)
+                                   (substring str 0 (1- (string-length str)))
+                                   str)
+                               #\-)
+                 "_")))
+
+(define (serialize-field field-name val)
+  (format #t "~a=~a\n" (uglify-field-name field-name) val))
+
+(define (serialize-string field-name val)
+  (serialize-field field-name val))
+
+(define (space-separated-string-list? val)
+  (and (list? val)
+       (and-map (lambda (x)
+                  (and (string? x) (not (string-index x #\space))))
+                val)))
+(define (serialize-space-separated-string-list field-name val)
+  (serialize-field field-name (string-join val " ")))
 
 (define (comma-separated-string-list? val)
   (and (list? val)
@@ -71,6 +99,12 @@
 (define (serialize-comma-separated-string-list field-name val)
   (serialize-field field-name (string-join val ",")))
 
+(define (file-name? val)
+  (and (string? val)
+       (string-prefix? "/" val)))
+(define (serialize-file-name field-name val)
+  (serialize-string field-name val))
+
 (define (colon-separated-file-name-list? val)
   (and (list? val)
        ;; Trailing slashes not needed and not
@@ -78,6 +112,9 @@
 (define (serialize-colon-separated-file-name-list field-name val)
   (serialize-field field-name (string-join val ":")))
 
+(define (serialize-boolean field-name val)
+  (serialize-string field-name (if val "yes" "no")))
+
 (define (non-negative-integer? val)
   (and (exact-integer? val) (not (negative? val))))
 (define (serialize-non-negative-integer field-name val)
@@ -158,8 +195,9 @@
 
 (define-configuration unix-listener-configuration
   (path
-   (file-name (configuration-missing-field 'unix-listener 'path))
-   "The file name on which to listen.")
+   (string (configuration-missing-field 'unix-listener 'path))
+   "Path to the file, relative to @code{base-dir} field.  This is also used as
+the section name.")
   (mode
    (string "0600")
    "The access mode for the socket.")
@@ -177,8 +215,9 @@
 
 (define-configuration fifo-listener-configuration
   (path
-   (file-name (configuration-missing-field 'fifo-listener 'path))
-   "The file name on which to listen.")
+   (string (configuration-missing-field 'fifo-listener 'path))
+   "Path to the file, relative to @code{base-dir} field.  This is also used as
+the section name.")
   (mode
    (string "0600")
    "The access mode for the socket.")
@@ -1620,3 +1659,96 @@ accept from local for any relay
                              (compose list opensmtpd-configuration-package))
           (service-extension shepherd-root-service-type
                              opensmtpd-shepherd-service)))))
+
+
+;;;
+;;; Exim.
+;;;
+
+(define-record-type* <exim-configuration> exim-configuration
+  make-exim-configuration
+  exim-configuration?
+  (package       exim-configuration-package ;<package>
+                 (default exim))
+  (config-file   exim-configuration-config-file ;file-like
+                 (default #f))
+  (aliases       exim-configuration-aliases ;; list of lists
+                 (default '())))
+
+(define %exim-accounts
+  (list (user-group
+         (name "exim")
+         (system? #t))
+        (user-account
+         (name "exim")
+         (group "exim")
+         (system? #t)
+         (comment "Exim Daemon")
+         (home-directory "/var/empty")
+         (shell (file-append shadow "/sbin/nologin")))))
+
+(define (exim-computed-config-file package config-file)
+  (computed-file "exim.conf"
+                 #~(call-with-output-file #$output
+                     (lambda (port)
+                       (format port "
+exim_user = exim
+exim_group = exim
+.include ~a"
+                               #$(or config-file
+                                     (file-append package "/etc/exim.conf")))))))
+
+(define exim-shepherd-service
+  (match-lambda
+    (($ <exim-configuration> package config-file aliases)
+     (list (shepherd-service
+            (provision '(exim mta))
+            (documentation "Run the exim daemon.")
+            (requirement '(networking))
+            (start #~(make-forkexec-constructor
+                      '(#$(file-append package "/bin/exim")
+                        "-bd" "-v" "-C"
+                        #$(exim-computed-config-file package config-file))))
+            (stop #~(make-kill-destructor)))))))
+
+(define exim-activation
+  (match-lambda
+    (($ <exim-configuration> package config-file aliases)
+     (with-imported-modules '((guix build utils))
+       #~(begin
+           (use-modules (guix build utils))
+
+           (let ((uid (passwd:uid (getpw "exim")))
+                 (gid (group:gid (getgr "exim"))))
+             (mkdir-p "/var/spool/exim")
+             (chown "/var/spool/exim" uid gid))
+
+           (zero? (system* #$(file-append package "/bin/exim")
+                           "-bV" "-C" #$(exim-computed-config-file package config-file))))))))
+
+(define exim-etc
+  (match-lambda
+    (($ <exim-configuration> package config-file aliases)
+     `(("aliases" ,(plain-file "aliases"
+                               ;; Ideally we'd use a format string like
+                               ;; "~:{~a: ~{~a~^,~}\n~}", but it gives a
+                               ;; warning that I can't figure out how to fix,
+                               ;; so we'll just use string-join below instead.
+                               (format #f "~:{~a: ~a\n~}"
+                                       (map (lambda (entry)
+                                              (list (car entry)
+                                                    (string-join (cdr entry) ",")))
+                                            aliases))))))))
+
+(define exim-profile
+  (compose list exim-configuration-package))
+
+(define exim-service-type
+  (service-type
+   (name 'exim)
+   (extensions
+    (list (service-extension shepherd-root-service-type exim-shepherd-service)
+          (service-extension account-service-type (const %exim-accounts))
+          (service-extension activation-service-type exim-activation)
+          (service-extension profile-service-type exim-profile)
+          (service-extension etc-service-type exim-etc)))))
diff --git a/gnu/services/ssh.scm b/gnu/services/ssh.scm
index c1d42e70ce..d8a3ad35ad 100644
--- a/gnu/services/ssh.scm
+++ b/gnu/services/ssh.scm
@@ -274,12 +274,14 @@ The other options should be self-descriptive."
                             (default #t))
   (public-key-authentication? openssh-configuration-public-key-authentication?
                               (default #t))                         ;Boolean
-  (rsa-authentication?   openssh-configuration-rsa-authentication?  ;Boolean
-                         (default #t))
   (x11-forwarding?       openssh-configuration-x11-forwarding? ;Boolean
                          (default #f))
-  (protocol-number       openssh-configuration-protocol-number ;integer
-                         (default 2)))
+  (challenge-response-authentication? openssh-challenge-response-authentication?
+                                      (default #f)) ;Boolean
+  (use-pam?              openssh-configuration-use-pam?
+                         (default #t)) ;Boolean
+  (print-last-log?       openssh-configuration-print-last-log?
+                         (default #t))) ;Boolean
 
 (define %openssh-accounts
   (list (user-group (name "sshd") (system? #t))
@@ -298,6 +300,14 @@ The other options should be self-descriptive."
       (mkdir-p "/etc/ssh")
       (mkdir-p (dirname #$(openssh-configuration-pid-file config)))
 
+      (define (touch file-name)
+        (call-with-output-file file-name (const #t)))
+
+      (let ((lastlog "/var/log/lastlog"))
+        (when #$(openssh-configuration-print-last-log? config)
+          (unless (file-exists? lastlog)
+            (touch lastlog))))
+
       ;; Generate missing host keys.
       (system* (string-append #$(openssh-configuration-openssh config)
                               "/bin/ssh-keygen") "-A")))
@@ -309,9 +319,6 @@ The other options should be self-descriptive."
    #~(call-with-output-file #$output
        (lambda (port)
          (display "# Generated by 'openssh-service'.\n" port)
-         (format port "Protocol ~a\n"
-                 #$(if (eq? (openssh-configuration-protocol-number config) 1)
-                       "1" "2"))
          (format port "Port ~a\n"
                  #$(number->string (openssh-configuration-port-number config)))
          (format port "PermitRootLogin ~a\n"
@@ -328,14 +335,20 @@ The other options should be self-descriptive."
          (format port "PubkeyAuthentication ~a\n"
                  #$(if (openssh-configuration-public-key-authentication? config)
                        "yes" "no"))
-         (format port "RSAAuthentication ~a\n"
-                 #$(if (openssh-configuration-rsa-authentication? config)
-                       "yes" "no"))
          (format port "X11Forwarding ~a\n"
                  #$(if (openssh-configuration-x11-forwarding? config)
                        "yes" "no"))
          (format port "PidFile ~a\n"
                  #$(openssh-configuration-pid-file config))
+         (format port "ChallengeResponseAuthentication ~a\n"
+                 #$(if (openssh-challenge-response-authentication? config)
+                       "yes" "no"))
+         (format port "UsePAM ~a\n"
+                 #$(if (openssh-configuration-use-pam? config)
+                       "yes" "no"))
+         (format port "PrintLastLog ~a\n"
+                 #$(if (openssh-configuration-print-last-log? config)
+                       "yes" "no"))
          #t))))
 
 (define (openssh-shepherd-service config)
@@ -356,11 +369,20 @@ The other options should be self-descriptive."
                                              #:pid-file #$pid-file))
          (stop #~(make-kill-destructor)))))
 
+(define (openssh-pam-services config)
+  "Return a list of <pam-services> for sshd with CONFIG."
+  (list (unix-pam-service
+         "sshd"
+         #:allow-empty-passwords?
+         (openssh-configuration-allow-empty-passwords? config))))
+
 (define openssh-service-type
   (service-type (name 'openssh)
                 (extensions
                  (list (service-extension shepherd-root-service-type
                                           openssh-shepherd-service)
+                       (service-extension pam-root-service-type
+                                          openssh-pam-services)
                        (service-extension activation-service-type
                                           openssh-activation)
                        (service-extension account-service-type
diff --git a/gnu/system.scm b/gnu/system.scm
index c8d4d014ed..0f52351cf0 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -652,8 +652,8 @@ hardware-related operations as necessary when booting a Linux container."
 (define (operating-system-root-file-system os)
   "Return the root file system of OS."
   (find (match-lambda
-         (($ <file-system> _ _ "/") #t)
-         (_ #f))
+         (($ <file-system> device title "/") #t)
+         (x #f))
         (operating-system-file-systems os)))
 
 (define (operating-system-initrd-file os)
diff --git a/gnu/system/install.scm b/gnu/system/install.scm
index 3ec343570a..191ccf1680 100644
--- a/gnu/system/install.scm
+++ b/gnu/system/install.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Andreas Enge <andreas@enge.fr>
 ;;;
@@ -24,7 +24,6 @@
   #:use-module (guix store)
   #:use-module (guix monads)
   #:use-module ((guix store) #:select (%store-prefix))
-  #:use-module (guix profiles)
   #:use-module (gnu services shepherd)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages bash)
@@ -38,8 +37,7 @@
   #:use-module (gnu packages nvi)
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-26)
-  #:export (self-contained-tarball
-            installation-os))
+  #:export (installation-os))
 
 ;;; Commentary:
 ;;;
@@ -49,63 +47,6 @@
 ;;; Code:
 
 
-(define* (self-contained-tarball #:key (guix guix))
-  "Return a self-contained tarball containing a store initialized with the
-closure of GUIX.  The tarball contains /gnu/store, /var/guix, and a profile
-under /root/.guix-profile where GUIX is installed."
-  (mlet %store-monad ((profile (profile-derivation
-                                (manifest
-                                 (list (package->manifest-entry guix))))))
-    (define build
-      (with-imported-modules '((guix build utils)
-                               (guix build store-copy)
-                               (gnu build install))
-        #~(begin
-            (use-modules (guix build utils)
-                         (gnu build install))
-
-            (define %root "root")
-
-            (setenv "PATH"
-                    (string-append #$guix "/sbin:" #$tar "/bin:" #$xz "/bin"))
-
-            ;; Note: there is not much to gain here with deduplication and
-            ;; there is the overhead of the '.links' directory, so turn it
-            ;; off.
-            (populate-single-profile-directory %root
-                                               #:profile #$profile
-                                               #:closure "profile"
-                                               #:deduplicate? #f)
-
-            ;; Create the tarball.  Use GNU format so there's no file name
-            ;; length limitation.
-            (with-directory-excursion %root
-              (zero? (system* "tar" "--xz" "--format=gnu"
-
-                              ;; Avoid non-determinism in the archive.  Use
-                              ;; mtime = 1, not zero, because that is what the
-                              ;; daemon does for files in the store (see the
-                              ;; 'mtimeStore' constant in local-store.cc.)
-                              "--sort=name"
-                              "--mtime=@1"        ;for files in /var/guix
-                              "--owner=root:0"
-                              "--group=root:0"
-
-                              "--check-links"
-                              "-cvf" #$output
-                              ;; Avoid adding / and /var to the tarball, so
-                              ;; that the ownership and permissions of those
-                              ;; directories will not be overwritten when
-                              ;; extracting the archive.  Do not include /root
-                              ;; because the root account might have a
-                              ;; different home directory.
-                              "./var/guix"
-                              (string-append "." (%store-directory))))))))
-
-    (gexp->derivation "guix-tarball.tar.xz" build
-                      #:references-graphs `(("profile" ,profile)))))
-
-
 (define (log-to-info)
   "Return a script that spawns the Info reader on the right section of the
 manual."
diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm
index 4a753cdadb..81c1278c0c 100644
--- a/gnu/system/linux-initrd.scm
+++ b/gnu/system/linux-initrd.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -41,6 +42,7 @@
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
   #:export (expression->initrd
+            raw-initrd
             base-initrd))
 
 
@@ -131,13 +133,79 @@ MODULES and taken from LINUX."
 
   (gexp->derivation "linux-modules" build-exp))
 
+(define* (raw-initrd file-systems
+                      #:key
+                      (linux linux-libre)
+                      (linux-modules '())
+                      (mapped-devices '())
+                      (helper-packages '())
+                      qemu-networking?
+                      volatile-root?)
+  "Return a monadic derivation that builds a raw initrd, with kernel
+modules taken from LINUX.  FILE-SYSTEMS is a list of file-systems to be
+mounted by the initrd, possibly in addition to the root file system specified
+on the kernel command line via '--root'. LINUX-MODULES is a list of kernel
+modules to be loaded at boot time. MAPPED-DEVICES is a list of device
+mappings to realize before FILE-SYSTEMS are mounted.
+HELPER-PACKAGES is a list of packages to be copied in the initrd. It may include
+e2fsck/static or other packages needed by the initrd to check root partition.
+
+When QEMU-NETWORKING? is true, set up networking with the standard QEMU
+parameters.
+When VOLATILE-ROOT? is true, the root file system is writable but any changes
+to it are lost."
+  (define device-mapping-commands
+    ;; List of gexps to open the mapped devices.
+    (map (lambda (md)
+           (let* ((source (mapped-device-source md))
+                  (target (mapped-device-target md))
+                  (type   (mapped-device-type md))
+                  (open   (mapped-device-kind-open type)))
+             (open source target)))
+         mapped-devices))
+
+  (mlet %store-monad ((kodir (flat-linux-module-directory linux
+                                                          linux-modules)))
+    (expression->initrd
+     (with-imported-modules (source-module-closure
+                             '((gnu build linux-boot)
+                               (guix build utils)
+                               (guix build bournish)
+                               (gnu build file-systems)))
+       #~(begin
+           (use-modules (gnu build linux-boot)
+                        (guix build utils)
+                        (guix build bournish) ;add the 'bournish' meta-command
+                        (srfi srfi-26)
+
+                        ;; FIXME: The following modules are for
+                        ;; LUKS-DEVICE-MAPPING.  We should instead propagate
+                        ;; this info via gexps.
+                        ((gnu build file-systems)
+                         #:select (find-partition-by-luks-uuid))
+                        (rnrs bytevectors))
+
+           (with-output-to-port (%make-void-port "w")
+             (lambda ()
+               (set-path-environment-variable "PATH" '("bin" "sbin")
+                                              '#$helper-packages)))
+
+           (boot-system #:mounts '#$(map file-system->spec file-systems)
+                        #:pre-mount (lambda ()
+                                      (and #$@device-mapping-commands))
+                        #:linux-modules '#$linux-modules
+                        #:linux-module-directory '#$kodir
+                        #:qemu-guest-networking? #$qemu-networking?
+                        #:volatile-root? '#$volatile-root?)))
+     #:name "raw-initrd")))
+
 (define* (base-initrd file-systems
                       #:key
                       (linux linux-libre)
                       (mapped-devices '())
                       qemu-networking?
-                      (virtio? #t)
                       volatile-root?
+                      (virtio? #t)
                       (extra-modules '()))
   "Return a monadic derivation that builds a generic initrd, with kernel
 modules taken from LINUX.  FILE-SYSTEMS is a list of file-systems to be
@@ -145,14 +213,12 @@ mounted by the initrd, possibly in addition to the root file system specified
 on the kernel command line via '--root'.  MAPPED-DEVICES is a list of device
 mappings to realize before FILE-SYSTEMS are mounted.
 
-When QEMU-NETWORKING? is true, set up networking with the standard QEMU
-parameters.  When VIRTIO? is true, load additional modules so the initrd can
+QEMU-NETWORKING? and VOLATILE-ROOT? behaves as in raw-initrd.
+
+When VIRTIO? is true, load additional modules so the initrd can
 be used as a QEMU guest with the root file system on a para-virtualized block
 device.
 
-When VOLATILE-ROOT? is true, the root file system is writable but any changes
-to it are lost.
-
 The initrd is automatically populated with all the kernel modules necessary
 for FILE-SYSTEMS and for the given options.  However, additional kernel
 modules can be listed in EXTRA-MODULES.  They will be added to the initrd, and
@@ -224,49 +290,12 @@ loaded at boot time in the order in which they appear."
             (list unionfs-fuse/static)
             '())))
 
-  (define device-mapping-commands
-    ;; List of gexps to open the mapped devices.
-    (map (lambda (md)
-           (let* ((source (mapped-device-source md))
-                  (target (mapped-device-target md))
-                  (type   (mapped-device-type md))
-                  (open   (mapped-device-kind-open type)))
-             (open source target)))
-         mapped-devices))
-
-  (mlet %store-monad ((kodir (flat-linux-module-directory linux
-                                                          linux-modules)))
-    (expression->initrd
-     (with-imported-modules (source-module-closure
-                             '((gnu build linux-boot)
-                               (guix build utils)
-                               (guix build bournish)
-                               (gnu build file-systems)))
-       #~(begin
-           (use-modules (gnu build linux-boot)
-                        (guix build utils)
-                        (guix build bournish) ;add the 'bournish' meta-command
-                        (srfi srfi-26)
-
-                        ;; FIXME: The following modules are for
-                        ;; LUKS-DEVICE-MAPPING.  We should instead propagate
-                        ;; this info via gexps.
-                        ((gnu build file-systems)
-                         #:select (find-partition-by-luks-uuid))
-                        (rnrs bytevectors))
-
-           (with-output-to-port (%make-void-port "w")
-             (lambda ()
-               (set-path-environment-variable "PATH" '("bin" "sbin")
-                                              '#$helper-packages)))
-
-           (boot-system #:mounts '#$(map file-system->spec file-systems)
-                        #:pre-mount (lambda ()
-                                      (and #$@device-mapping-commands))
-                        #:linux-modules '#$linux-modules
-                        #:linux-module-directory '#$kodir
-                        #:qemu-guest-networking? #$qemu-networking?
-                        #:volatile-root? '#$volatile-root?)))
-     #:name "base-initrd")))
+  (raw-initrd file-systems
+              #:linux linux
+              #:linux-modules linux-modules
+              #:mapped-devices mapped-devices
+              #:helper-packages helper-packages
+              #:qemu-networking? qemu-networking?
+              #:volatile-root? volatile-root?))
 
 ;;; linux-initrd.scm ends here
diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm
index b68c48a05a..58c23f2844 100644
--- a/guix/build/syscalls.scm
+++ b/guix/build/syscalls.scm
@@ -1346,12 +1346,12 @@ given an integer, returns the list of names of the constants that are or'd."
      (begin
        (define-syntax constructor
          (syntax-rules (names ...)
+           ((_) 0)
            ((_ names) values) ...
-           ((_ several (... ...))
-            (logior (constructor several) (... ...)))))
+           ((_ first rest (... ...))
+            (logior (constructor first) rest (... ...)))))
        (define (bits->symbols bits)
-         (bits->symbols-body bits (names ...) (values ...)))
-       (define names values) ...))))
+         (bits->symbols-body bits (names ...) (values ...)))))))
 
 ;; 'local-flags' bits from <bits/termios.h>
 (define-bits local-flags
diff --git a/guix/scripts/pack.scm b/guix/scripts/pack.scm
new file mode 100644
index 0000000000..e8f3d800a8
--- /dev/null
+++ b/guix/scripts/pack.scm
@@ -0,0 +1,229 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015, 2017 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 (guix scripts pack)
+  #:use-module (guix scripts)
+  #:use-module (guix ui)
+  #:use-module (guix gexp)
+  #:use-module (guix utils)
+  #:use-module (guix store)
+  #:use-module (guix grafts)
+  #:use-module (guix monads)
+  #:use-module (guix packages)
+  #:use-module (guix profiles)
+  #:use-module (guix derivations)
+  #:use-module (guix scripts build)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages compression)
+  #:autoload   (gnu packages base) (tar)
+  #:autoload   (gnu packages package-management) (guix)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-9)
+  #:use-module (srfi srfi-37)
+  #:use-module (ice-9 match)
+  #:export (compressor?
+            lookup-compressor
+            self-contained-tarball
+            guix-pack))
+
+;; Type of a compression tool.
+(define-record-type <compressor>
+  (compressor name package extension tar-option)
+  compressor?
+  (name       compressor-name)                    ;string (e.g., "gzip")
+  (package    compressor-package)                 ;package
+  (extension  compressor-extension)               ;string (e.g., "lz")
+  (tar-option compressor-tar-option))             ;string (e.g., "--lzip")
+
+(define %compressors
+  ;; Available compression tools.
+  ;; FIXME: Use '--no-name' for gzip.
+  (list (compressor "gzip"  gzip  "gz"  "--gzip")
+        (compressor "lzip"  lzip  "lz"  "--lzip")
+        (compressor "xz"    xz    "xz"  "--xz")
+        (compressor "bzip2" bzip2 "bz2" "--bzip2")))
+
+(define (lookup-compressor name)
+  "Return the compressor object called NAME.  Error out if it could not be
+found."
+  (or (find (match-lambda
+              (($ <compressor> name*)
+               (string=? name* name)))
+            %compressors)
+      (leave (_ "~a: compressor not found~%") name)))
+
+(define* (self-contained-tarball name profile
+                                 #:key deduplicate?
+                                 (compressor (first %compressors)))
+  "Return a self-contained tarball containing a store initialized with the
+closure of PROFILE, a derivation.  The tarball contains /gnu/store, /var/guix,
+and PROFILE is available as /root/.guix-profile."
+  (define build
+    (with-imported-modules '((guix build utils)
+                             (guix build store-copy)
+                             (gnu build install))
+      #~(begin
+          (use-modules (guix build utils)
+                       (gnu build install))
+
+          (define %root "root")
+
+          ;; We need Guix here for 'guix-register'.
+          (setenv "PATH"
+                  (string-append #$guix "/sbin:" #$tar "/bin:"
+                                 #$(compressor-package compressor) "/bin"))
+
+          ;; Note: there is not much to gain here with deduplication and
+          ;; there is the overhead of the '.links' directory, so turn it
+          ;; off.
+          (populate-single-profile-directory %root
+                                             #:profile #$profile
+                                             #:closure "profile"
+                                             #:deduplicate? #f)
+
+          ;; Create the tarball.  Use GNU format so there's no file name
+          ;; length limitation.
+          (with-directory-excursion %root
+            (zero? (system* "tar" #$(compressor-tar-option compressor)
+                            "--format=gnu"
+
+                            ;; Avoid non-determinism in the archive.  Use
+                            ;; mtime = 1, not zero, because that is what the
+                            ;; daemon does for files in the store (see the
+                            ;; 'mtimeStore' constant in local-store.cc.)
+                            "--sort=name"
+                            "--mtime=@1"          ;for files in /var/guix
+                            "--owner=root:0"
+                            "--group=root:0"
+
+                            "--check-links"
+                            "-cvf" #$output
+                            ;; Avoid adding / and /var to the tarball, so
+                            ;; that the ownership and permissions of those
+                            ;; directories will not be overwritten when
+                            ;; extracting the archive.  Do not include /root
+                            ;; because the root account might have a
+                            ;; different home directory.
+                            "./var/guix"
+                            (string-append "." (%store-directory))))))))
+
+  (gexp->derivation (string-append name ".tar."
+                                   (compressor-extension compressor))
+                    build
+                    #:references-graphs `(("profile" ,profile))))
+
+
+
+;;;
+;;; Command-line options.
+;;;
+
+(define %default-options
+  ;; Alist of default option values.
+  `((system . ,(%current-system))
+    (substitutes? . #t)
+    (graft? . #t)
+    (max-silent-time . 3600)
+    (verbosity . 0)
+    (compressor . ,(first %compressors))))
+
+(define %options
+  ;; Specifications of the command-line options.
+  (cons* (option '(#\h "help") #f #f
+                 (lambda args
+                   (show-help)
+                   (exit 0)))
+         (option '(#\V "version") #f #f
+                 (lambda args
+                   (show-version-and-exit "guix pack")))
+
+         (option '(#\n "dry-run") #f #f
+                 (lambda (opt name arg result)
+                   (alist-cons 'dry-run? #t (alist-cons 'graft? #f result))))
+         (option '(#\s "system") #t #f
+                 (lambda (opt name arg result)
+                   (alist-cons 'system arg
+                               (alist-delete 'system result eq?))))
+         (option '(#\C "compression") #t #f
+                 (lambda (opt name arg result)
+                   (alist-cons 'compressor (lookup-compressor arg)
+                               result)))
+
+         (append %transformation-options
+                 %standard-build-options)))
+
+(define (show-help)
+  (display (_ "Usage: guix pack [OPTION]... PACKAGE...
+Create a bundle of PACKAGE.\n"))
+  (show-build-options-help)
+  (newline)
+  (show-transformation-options-help)
+  (newline)
+  (display (_ "
+  -s, --system=SYSTEM    attempt to build for SYSTEM--e.g., \"i686-linux\""))
+  (display (_ "
+  -C, --compression=TOOL compress using TOOL--e.g., \"lzip\""))
+  (newline)
+  (display (_ "
+  -h, --help             display this help and exit"))
+  (display (_ "
+  -V, --version          display version information and exit"))
+  (newline)
+  (show-bug-report-information))
+
+
+;;;
+;;; Entry point.
+;;;
+
+(define (guix-pack . args)
+  (define opts
+    (parse-command-line args %options (list %default-options)))
+
+  (with-error-handling
+    (parameterize ((%graft? (assoc-ref opts 'graft?)))
+      (let* ((dry-run? (assoc-ref opts 'dry-run?))
+             (specs    (filter-map (match-lambda
+                                     (('argument . name)
+                                      name)
+                                     (x #f))
+                                   opts))
+             (packages (map (lambda (spec)
+                              (call-with-values
+                                  (lambda ()
+                                    (specification->package+output spec))
+                                list))
+                            specs))
+             (compressor (assoc-ref opts 'compressor)))
+        (with-store store
+          (run-with-store store
+            (mlet* %store-monad ((profile (profile-derivation
+                                           (packages->manifest packages)))
+                                 (drv (self-contained-tarball "pack" profile
+                                                              #:compressor
+                                                              compressor)))
+              (mbegin %store-monad
+                (show-what-to-build* (list drv)
+                                     #:use-substitutes?
+                                     (assoc-ref opts 'substitutes?)
+                                     #:dry-run? dry-run?)
+                (munless dry-run?
+                  (built-derivations (list drv))
+                  (return (format #t "~a~%"
+                                  (derivation->output-path drv))))))
+            #:system (assoc-ref opts 'system)))))))
diff --git a/guix/scripts/pull.scm b/guix/scripts/pull.scm
index a4824e4fd7..8e31ad620c 100644
--- a/guix/scripts/pull.scm
+++ b/guix/scripts/pull.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,10 +30,13 @@
   #:use-module (guix monads)
   #:use-module ((guix build utils)
                 #:select (with-directory-excursion delete-file-recursively))
+  #:use-module ((guix build download)
+                #:select (%x509-certificate-directory))
   #:use-module (gnu packages base)
   #:use-module (gnu packages guile)
   #:use-module ((gnu packages bootstrap)
                 #:select (%bootstrap-guile))
+  #:use-module ((gnu packages certs) #:select (le-certs))
   #:use-module (gnu packages compression)
   #:use-module (gnu packages gnupg)
   #:use-module (srfi srfi-1)
@@ -45,7 +49,7 @@
 
 (define %snapshot-url
   ;; "http://hydra.gnu.org/job/guix/master/tarball/latest/download"
-  "http://git.savannah.gnu.org/cgit/guix.git/snapshot/master.tar.gz"
+  "https://git.savannah.gnu.org/cgit/guix.git/snapshot/master.tar.gz"
   )
 
 (define-syntax-rule (with-environment-variable variable value body ...)
@@ -221,11 +225,25 @@ contained therein."
                   (leave (_ "~A: unexpected argument~%") arg))
                 %default-options))
 
+  (define (use-le-certs? url)
+    (string-prefix? "https://git.savannah.gnu.org/" url))
+
+  (define (fetch-tarball store url)
+    (download-to-store store url "guix-latest.tar.gz"))
+
   (with-error-handling
     (let* ((opts  (parse-options))
            (store (open-connection))
            (url   (assoc-ref opts 'tarball-url)))
-      (let ((tarball (download-to-store store url "guix-latest.tar.gz")))
+      (let ((tarball
+             (if (use-le-certs? url)
+                 (let* ((drv (package-derivation store le-certs))
+                        (certs (string-append (derivation->output-path drv)
+                                              "/etc/ssl/certs")))
+                   (build-derivations store (list drv))
+                   (parameterize ((%x509-certificate-directory certs))
+                     (fetch-tarball store url)))
+                 (fetch-tarball store url))))
         (unless tarball
           (leave (_ "failed to download up-to-date source, exiting\n")))
         (parameterize ((%guile-for-build