gnu: freefall: Return #t from all phases.
[jackhill/guix/guix.git] / gnu / packages / linux.scm
index c035663..7efe7fa 100644 (file)
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2014, 2015, 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018 Mark H Weaver <mhw@netris.org>
@@ -158,13 +158,13 @@ defconfig.  Return the appropriate make target if applicable, otherwise return
 (define-public linux-libre-headers
   (package
     (name "linux-libre-headers")
-    (version "4.9.59")
+    (version "4.14.26")
     (source (origin
              (method url-fetch)
              (uri (linux-libre-urls version))
              (sha256
               (base32
-               "0z8hq8a6ic38xh33idzl0k0yi4isgd7ncl2g1d6mzf9ixw5krhvc"))))
+               "1m2zr17wpasg5riysbaa4g5i492jzr93py2jm088ki818s4a9cm3"))))
     (build-system gnu-build-system)
     (native-inputs `(("perl" ,perl)))
     (arguments
@@ -184,29 +184,29 @@ defconfig.  Return the appropriate make target if applicable, otherwise return
                                     (%current-system)))))
                (setenv "ARCH" arch)
                (format #t "`ARCH' set to `~a'~%" (getenv "ARCH"))
-               (and (zero? (system* "make" defconfig))
-                    (zero? (system* "make" "mrproper" "headers_check"))))))
+               (invoke "make" defconfig)
+               (invoke "make" "mrproper" "headers_check"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
-               (and (zero? (system* "make"
-                                    (string-append "INSTALL_HDR_PATH=" out)
-                                    "headers_install"))
-                    (begin
-                      (mkdir (string-append out "/include/config"))
-                      (call-with-output-file
-                          (string-append out
-                                         "/include/config/kernel.release")
-                        (lambda (p)
-                          (format p "~a-default~%" ,version)))
-
-                      ;; Remove the '.install' and '..install.cmd' files; the
-                      ;; latter contains store paths, which pulls in bootstrap
-                      ;; binaries in the build environment, and prevents bit
-                      ;; reproducibility for the bootstrap binaries.
-                      (for-each delete-file (find-files out "\\.install"))
-
-                      #t))))))
+               (invoke "make"
+                       (string-append "INSTALL_HDR_PATH=" out)
+                       "headers_install")
+
+               (mkdir (string-append out "/include/config"))
+               (call-with-output-file
+                   (string-append out
+                                  "/include/config/kernel.release")
+                 (lambda (p)
+                   (format p "~a-default~%" ,version)))
+
+               ;; Remove the '.install' and '..install.cmd' files; the
+               ;; latter contains store paths, which pulls in bootstrap
+               ;; binaries in the build environment, and prevents bit
+               ;; reproducibility for the bootstrap binaries.
+               (for-each delete-file (find-files out "\\.install"))
+
+               #t))))
        #:allowed-references ()
        #:tests? #f))
     (home-page "https://www.gnu.org/software/linux-libre/")
@@ -284,6 +284,9 @@ for ARCH and optionally VARIANT, or #f if there is no such configuration."
        ("bc" ,bc)
        ("openssl" ,openssl)
        ("kmod" ,kmod)
+       ("elfutils" ,elfutils)  ; Needed to enable CONFIG_STACK_VALIDATION
+       ("flex" ,flex)
+       ("bison" ,bison)
        ;; On x86, build with GCC-7 for full retpoline support.
        ;; FIXME: Remove this when our default compiler has retpoline support.
        ,@(match (system->linux-architecture
@@ -308,6 +311,11 @@ for ARCH and optionally VARIANT, or #f if there is no such configuration."
                   (ice-9 match))
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-/bin/pwd
+           (lambda _
+             (substitute* (find-files "." "^Makefile(\\.include)?$")
+               (("/bin/pwd") "pwd"))
+             #t))
          (replace 'configure
            (lambda* (#:key inputs native-inputs target #:allow-other-keys)
              ;; Avoid introducing timestamps
@@ -383,8 +391,8 @@ It has been modified to remove all non-free binary blobs.")
 ;; supports qemu "virt" machine and possibly a large number of ARM boards.
 ;; See : https://wiki.debian.org/DebianKernel/ARMMP.
 
-(define %linux-libre-version "4.15.12")
-(define %linux-libre-hash "01wpxlw70nzdl8nk3xb8z3m93ads55q56ky56wpsci304jlnrd3v")
+(define %linux-libre-version "4.16.1")
+(define %linux-libre-hash "1zqbg7ivf79nzw0lw18bbld2wq16880k83526bwqh1nsydayp6k0")
 
 (define-public linux-libre
   (make-linux-libre %linux-libre-version
@@ -392,8 +400,8 @@ It has been modified to remove all non-free binary blobs.")
                     %linux-compatible-systems
                     #:configuration-file kernel-config))
 
-(define %linux-libre-4.14-version "4.14.29")
-(define %linux-libre-4.14-hash "0y8p9pn40jgk96c10i9px2n6pqim788q7zssngp46glmpwfz4gra")
+(define %linux-libre-4.14-version "4.14.33")
+(define %linux-libre-4.14-hash "0ps9whsxc20gw5ags18rgkwgy6fzg66by70g8xjds7nijpzgl69m")
 
 (define-public linux-libre-4.14
   (make-linux-libre %linux-libre-4.14-version
@@ -402,20 +410,20 @@ 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.88"
-                    "0qlhd8xw3g00i7krpfndkwxzjszk067h26qsxxsszvxyx2s6gp4x"
+  (make-linux-libre "4.9.93"
+                    "0flmsh4xy7ymyzwm8y4x4id798mx6vy3d6ala7x1bq41hf00075p"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.4
-  (make-linux-libre "4.4.123"
-                    "1ldc7pz4irngk204xsca2cy0ihlqinimn0hg20aqnbh48cw72iyg"
+  (make-linux-libre "4.4.127"
+                    "1av536sp6ancx0fy71wpmqv4r66pksrcjbnrcjggard6im4c8pjy"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.1
-  (make-linux-libre "4.1.50"
-                    "1hl1pk724v2waa55bhxfmxyz9nl6pkcj4dc3l80jfvqdfgr55mm2"
+  (make-linux-libre "4.1.51"
+                    "0l8lpwjpckp44hjyx5qrxqdwwi97gyyc1n6pmk66cr3fpdhnk540"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
@@ -547,7 +555,7 @@ providing the system administrator with some help in common tasks.")
 (define-public util-linux
   (package
     (name "util-linux")
-    (version "2.31")
+    (version "2.32")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://kernel.org/linux/utils/"
@@ -555,14 +563,15 @@ providing the system administrator with some help in common tasks.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "12nw108xjhm63sh2n5a0qs33vpvbvb6rln96l9j50p7wykf7rgpr"))
+                "0d2758kjll5xqm5fpp3sww1h66aahx161sf2b60jxqv4qymrfwvc"))
               (patches (search-patches "util-linux-tests.patch"))
               (modules '((guix build utils)))
               (snippet
-               ;; We take the 'logger' program from GNU Inetutils and 'kill'
-               ;; from GNU Coreutils.
+               ;; We take 'nologin' from Shadow, the 'logger' program from
+               ;; GNU Inetutils and 'kill' from GNU Coreutils.
                '(begin
                   (substitute* "configure"
+                    (("build_nologin=yes") "build_nologin=no")
                     (("build_logger=yes") "build_logger=no")
                     (("build_kill=yes") "build_kill=no"))
                   #t))))
@@ -634,32 +643,6 @@ block devices, UUIDs, TTYs, and many other tools.")
     (license (list license:gpl3+ license:gpl2+ license:gpl2 license:lgpl2.0+
                    license:bsd-4 license:public-domain))))
 
-;; The patch 'util-linux-CVE-2018-7738.patch' fixes a security bug in
-;; the Bash completions for `mount`. Since this bug doesn't affect
-;; other programs that link against libraries from util-linux, we don't
-;; need to use a graft to make the fix available. Instead, users
-;; installing util-linux will get the fix in this newer version, and
-;; (@ (gnu system) %base-packages) takes care to use this package.
-;; This solution was suggested here:
-;; <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=30827#13>
-(define-public util-linux-2.31.1
-  (package
-    (inherit util-linux)
-    (name "util-linux")
-    ;; XXX Don't update this without also updating %base-packages!
-    (version "2.31.1")
-    (source (origin
-              (inherit (package-source util-linux))
-              (uri (string-append "mirror://kernel.org/linux/utils/"
-                                  name "/v" (version-major+minor version) "/"
-                                  name "-" version ".tar.xz"))
-              (sha256
-               (base32
-                "04fzrnrr3pvqskvjn9f81y0knh0jvvqx4lmbz5pd4lfdm5pv2l8s"))
-              (patches
-                (append (origin-patches (package-source util-linux))
-                        (search-patches "util-linux-CVE-2018-7738.patch")))))))
-
 (define-public ddate
   (package
     (name "ddate")
@@ -814,18 +797,18 @@ slabtop, and skill.")
              (lambda* (#:key outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
                       (lib (string-append out "/lib")))
-                 (and (zero? (system* "make" "install-libs"))
-
-                      ;; Make the .a writable so that 'strip' works.
-                      ;; Failing to do that, due to debug symbols, we
-                      ;; retain a reference to the final
-                      ;; linux-libre-headers, which refer to the
-                      ;; bootstrap binaries.
-                      (let ((archives (find-files lib "\\.a$")))
-                        (for-each (lambda (file)
-                                    (chmod file #o666))
-                                  archives)
-                        #t))))))))
+                 (invoke "make" "install-libs")
+
+                 ;; Make the .a writable so that 'strip' works.
+                 ;; Failing to do that, due to debug symbols, we
+                 ;; retain a reference to the final
+                 ;; linux-libre-headers, which refer to the
+                 ;; bootstrap binaries.
+                 (let ((archives (find-files lib "\\.a$")))
+                   (for-each (lambda (file)
+                               (chmod file #o666))
+                             archives))
+                 #t))))))
     (home-page "http://e2fsprogs.sourceforge.net/")
     (synopsis "Creating and checking ext2/ext3/ext4 file systems")
     (description
@@ -868,7 +851,8 @@ slabtop, and skill.")
            (with-directory-excursion bin
              (copy-file e2fsck "e2fsck")
              (remove-store-references "e2fsck")
-             (chmod "e2fsck" #o555))))))
+             (chmod "e2fsck" #o555))
+           #t))))
     (home-page (package-home-page e2fsprogs))
     (synopsis "Statically-linked e2fsck command from e2fsprogs")
     (description "This package provides statically-linked e2fsck command taken
@@ -934,14 +918,15 @@ Zerofree requires the file system to be unmounted or mounted read-only.")
 (define-public strace
   (package
     (name "strace")
-    (version "4.21")
+    (version "4.22")
+    (home-page "https://strace.io")
     (source (origin
              (method url-fetch)
-             (uri (string-append "https://github.com/strace/strace/releases/"
-                                 "download/v" version "/strace-" version ".tar.xz"))
+             (uri (string-append home-page "/files/" version
+                                 "/strace-" version ".tar.xz"))
              (sha256
               (base32
-               "0dsw6xcfrmygidp1dj2ch8cl8icrar7789snkb2r8gh78kdqhxjw"))))
+               "17dkpnsjxmys1ydidm9wcvc3wscsz44fmlxw3dclspn9cj9d1306"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -952,7 +937,6 @@ Zerofree requires the file system to be unmounted or mounted read-only.")
                (("/bin/sh") (which "sh")))
              #t)))))
     (native-inputs `(("perl" ,perl)))
-    (home-page "https://strace.io/")
     (synopsis "System call tracer for Linux")
     (description
      "strace is a system call tracer, i.e. a debugging tool which prints out a
@@ -1146,8 +1130,7 @@ configure the Linux 2.4.x and later IPv4 packet filtering ruleset
 This package also includes @command{ip6tables}, which is used to configure the
 IPv6 packet filter.
 
-Both commands are targeted at system administrators.
-")
+Both commands are targeted at system administrators.")
     (license license:gpl2+)))
 
 (define-public ebtables
@@ -1208,7 +1191,7 @@ that the Ethernet protocol is much simpler than the IP protocol.")
 (define-public iproute
   (package
     (name "iproute2")
-    (version "4.15.0")
+    (version "4.16.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1216,7 +1199,7 @@ that the Ethernet protocol is much simpler than the IP protocol.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "0mc3g4kj7h3jhwz2b2gdf41gp6bhqn7axh4mnyvhkdnpk5m63m28"))))
+                "02pfalg319jpbjz273ph725br8dnkzpfvi98azi9yd6p1w128p0c"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                                ; no test suite
@@ -1303,7 +1286,8 @@ inadequately in modern network environments, and both should be deprecated.")
                  ;; think about adding them later.
                  (substitute* '("config.make" "config.h")
                    (("^.*HAVE_(AFDECnet|HWSTRIP|HWTR|SELINUX|AFBLUETOOTH)[ =]1.*$")
-                    "")))))
+                    ""))
+                 #t)))
            (add-after 'install 'remove-redundant-commands
              (lambda* (#:key outputs #:allow-other-keys)
                ;; Remove commands and man pages redundant with Inetutils.
@@ -1355,7 +1339,8 @@ configuration (iptunnel, ipmaddr).")
                               (substitute* "Make.Rules"
                                 (("LDFLAGS := #-g")
                                  (string-append "LDFLAGS := -Wl,-rpath="
-                                                %output "/lib"))))))
+                                                %output "/lib")))
+                              #t)))
                  #:tests? #f                      ; no 'check' target
                  #:make-flags (list "lib=lib"
                                     (string-append "prefix="
@@ -1391,7 +1376,7 @@ Linux-based operating systems.")
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
+         (add-before 'bootstrap 'patch-stuff
            (lambda _
              ;; Fix "field ‘ip6’ has incomplete type" errors.
              (substitute* "libbridge/libbridge.h"
@@ -1404,7 +1389,7 @@ Linux-based operating systems.")
                (("\\$\\(MAKE\\) \\$\\(MFLAGS\\) -C \\$\\$x ;")
                 "$(MAKE) $(MFLAGS) -C $$x || exit 1;"))
 
-             (zero? (system* "autoreconf" "-vf")))))
+             #t)))
        #:tests? #f))                              ; no 'check' target
 
     (home-page
@@ -1712,16 +1697,19 @@ UnionFS-FUSE additionally supports copy-on-write.")
     (source (origin (inherit (package-source fuse))
               (modules '((guix build utils)))
               (snippet
-               ;; Normally libfuse invokes mount(8) so that /etc/mtab is
-               ;; updated.  Change calls to 'mtab_needs_update' to 0 so that
-               ;; it doesn't do that, allowing us to remove the dependency on
-               ;; util-linux (something that is useful in initrds.)
-               '(substitute* '("lib/mount_util.c"
-                               "util/mount_util.c")
-                  (("mtab_needs_update[[:blank:]]*\\([a-z_]+\\)")
-                   "0")
-                  (("/bin/")
-                   "")))))))
+               '(begin
+                  ;; Normally libfuse invokes mount(8) so that /etc/mtab is
+                  ;; updated.  Change calls to 'mtab_needs_update' to 0 so
+                  ;; that it doesn't do that, allowing us to remove the
+                  ;; dependency on util-linux (something that is useful in
+                  ;; initrds.)
+                  (substitute* '("lib/mount_util.c"
+                                 "util/mount_util.c")
+                    (("mtab_needs_update[[:blank:]]*\\([a-z_]+\\)")
+                     "0")
+                    (("/bin/")
+                     ""))
+                  #t))))))
 
 (define-public unionfs-fuse/static
   (package (inherit unionfs-fuse)
@@ -1730,11 +1718,13 @@ UnionFS-FUSE additionally supports copy-on-write.")
     (source (origin (inherit (package-source unionfs-fuse))
               (modules '((guix build utils)))
               (snippet
-               ;; Add -ldl to the libraries, because libfuse.a needs that.
-               '(substitute* "src/CMakeLists.txt"
-                  (("target_link_libraries(.*)\\)" _ libs)
-                   (string-append "target_link_libraries"
-                                  libs " dl)"))))))
+               '(begin
+                  ;; Add -ldl to the libraries, because libfuse.a needs that.
+                  (substitute* "src/CMakeLists.txt"
+                    (("target_link_libraries(.*)\\)" _ libs)
+                     (string-append "target_link_libraries"
+                                    libs " dl)")))
+                  #t))))
     (arguments
      '(#:tests? #f
        #:configure-flags '("-DCMAKE_EXE_LINKER_FLAGS=-static")
@@ -1896,7 +1886,8 @@ system.")
                   (substitute* '("src/unicode_start" "src/unicode_stop")
                     ;; Assume the Coreutils are in $PATH.
                     (("/usr/bin/tty")
-                     "tty"))))))
+                     "tty"))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -1962,7 +1953,7 @@ to use Linux' inotify mechanism, which allows file accesses to be monitored.")
 (define-public kmod
   (package
     (name "kmod")
-    (version "24")
+    (version "25")
     (source (origin
               (method url-fetch)
               (uri
@@ -1970,7 +1961,7 @@ to use Linux' inotify mechanism, which allows file accesses to be monitored.")
                               "kmod-" version ".tar.xz"))
               (sha256
                (base32
-                "15xkkkzvca9flvkm48gkh8y8f13vlm3sl7nz9ydc7b3jy4fqs2v1"))
+                "1kgixs4m3jvwk7fb3d18n6j77qhgi9qfv4csj35rs5ancr4ycrbi"))
               (patches (search-patches "kmod-module-directory.patch"))))
     (build-system gnu-build-system)
     (native-inputs
@@ -1979,19 +1970,20 @@ to use Linux' inotify mechanism, which allows file accesses to be monitored.")
      `(("xz" ,xz)
        ("zlib" ,zlib)))
     (arguments
-     `(#:tests? #f ; FIXME: Investigate test failures
+     `(#:tests? #f                      ; FIXME: Investigate test failures
        #:configure-flags '("--with-xz" "--with-zlib")
-       #:phases (alist-cons-after
-                 'install 'install-modprobe&co
-                 (lambda* (#:key outputs #:allow-other-keys)
-                   (let* ((out (assoc-ref outputs "out"))
-                          (bin (string-append out "/bin")))
-                     (for-each (lambda (tool)
-                                 (symlink "kmod"
-                                          (string-append bin "/" tool)))
-                               '("insmod" "rmmod" "lsmod" "modprobe"
-                                 "modinfo" "depmod"))))
-                 %standard-phases)))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-modprobe&co
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (for-each (lambda (tool)
+                           (symlink "kmod"
+                                    (string-append bin "/" tool)))
+                         '("insmod" "rmmod" "lsmod" "modprobe"
+                           "modinfo" "depmod"))
+               #t))))))
     (home-page "https://www.kernel.org/")
     (synopsis "Kernel module tools")
     (description "Kmod is a set of tools to handle common tasks with Linux
@@ -2007,7 +1999,7 @@ from the module-init-tools project.")
   ;; The post-systemd fork, maintained by Gentoo.
   (package
     (name "eudev")
-    (version "3.2.4")
+    (version "3.2.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/gentoo/eudev/archive/v"
@@ -2015,27 +2007,26 @@ from the module-init-tools project.")
               (file-name (string-append name "-" version ".zip"))
               (sha256
                (base32
-                "1r1ag0snarygrj5qqxi2xdq9w6g3sfjd5jx1b0fl7zmqlsz3vvxx"))
+                "0c9l3m3mr1nvrvlcnzh5gjdg9p9k7hh0jk04wh596cbmbass2nhd"))
               (patches (search-patches "eudev-rules-directory.patch"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-before 'configure 'bootstrap
+         (add-before 'bootstrap 'patch-file-names
            (lambda* (#:key inputs #:allow-other-keys)
             (substitute* "man/make.sh"
               (("/usr/bin/xsltproc")
                 (string-append (assoc-ref inputs "xsltproc")
                                "/bin/xsltproc")))
-            ;; Manual pages are regenerated here.
-            (zero? (system* "./autogen.sh"))))
+            #t))
          (add-after 'install 'build-hwdb
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Build OUT/etc/udev/hwdb.bin.  This allows 'lsusb' and
              ;; similar tools to display product names.
              (let ((out (assoc-ref outputs "out")))
-               (zero? (system* (string-append out "/bin/udevadm")
-                               "hwdb" "--update"))))))
+               (invoke (string-append out "/bin/udevadm")
+                       "hwdb" "--update")))))
        #:configure-flags (list "--enable-manpages")))
     (native-inputs
      `(("autoconf" ,autoconf)
@@ -2088,7 +2079,8 @@ time.")
                     (("confdir = .*$")
                      "confdir = @sysconfdir@\n")
                     (("DEFAULT_SYS_DIR = @DEFAULT_SYS_DIR@")
-                     "DEFAULT_SYS_DIR = @sysconfdir@"))))
+                     "DEFAULT_SYS_DIR = @sysconfdir@"))
+                  #t))
               (patches (search-patches "lvm2-static-link.patch"))))
     (build-system gnu-build-system)
     (native-inputs
@@ -2205,6 +2197,11 @@ interface.")
     (arguments
      '(#:phases (modify-phases %standard-phases
                   (delete 'configure)
+                  (add-after 'unpack 'gzip-determinism
+                    (lambda _
+                      (substitute* "Makefile"
+                        (("gzip") "gzip --no-name"))
+                      #t))
                   (add-before
                    'build 'no-werror-no-ldconfig
                    (lambda _
@@ -2272,10 +2269,17 @@ compliance.")
                 "1f9mcp78sdd4sci6v32vxfcl1rfjpv205jisz1p93kkfnaisy7ip"))
 
               ;; We're building 'regulatory.bin' by ourselves.
-              (snippet '(delete-file "regulatory.bin"))))
+              (snippet '(begin
+                          (delete-file "regulatory.bin")
+                          #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'gzip-determinism
+                    (lambda _
+                      (substitute* "Makefile"
+                        (("gzip") "gzip --no-name"))
+                      #t))
                   (delete 'configure))
 
        ;; The 'all' target of the makefile depends on $(REGDB_CHANGED), which
@@ -2705,7 +2709,8 @@ also contains the libsysfs library.")
               "includedir = @includedir@"))
            (substitute* "configure"
              (("includedir='(\\$\\{prefix\\}/include)'" all orig)
-              (string-append "includedir='" orig "/sysfs'")))))))
+              (string-append "includedir='" orig "/sysfs'")))
+           #t))))
     (synopsis "System utilities based on Linux sysfs (version 1.x)")))
 
 (define-public cpufrequtils
@@ -3122,16 +3127,15 @@ write access to exFAT devices.")
     (build-system gnu-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'bootstrap
+                  (replace 'bootstrap
                     (lambda _
                       ;; The tarball was not generated with 'make dist' so we
                       ;; need to bootstrap things ourselves.
                       (substitute* "autogen.sh"
                         (("/bin/sh") (which "sh")))
-                      (and (zero? (system* "./autogen.sh"))
-                           (begin
-                             (patch-makefile-SHELL "Makefile.include.in")
-                             #t)))))
+                      (invoke "./autogen.sh")
+                      (patch-makefile-SHELL "Makefile.include.in")
+                      #t)))
 
        ;; Make sure programs find libgpm.so.
        #:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath="
@@ -3155,7 +3159,7 @@ and copy/paste text in the console and in xterm.")
 (define-public btrfs-progs
   (package
     (name "btrfs-progs")
-    (version "4.14.1")
+    (version "4.15.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://kernel.org/linux/kernel/"
@@ -3163,14 +3167,15 @@ and copy/paste text in the console and in xterm.")
                                   "btrfs-progs-v" version ".tar.xz"))
               (sha256
                (base32
-                "1palnddw3d50kyflwk1j4xapbc6jniid6j5i9dsr8l8a7nkv7ich"))))
+                "15izak6jg6pqr6ha9447cdrdj9k6kfiarvwlrj53cpvrsv02l437"))
+              (patches (search-patches "btrfs-progs-e-value-block.patch"))))
     (build-system gnu-build-system)
     (outputs '("out"
                "static"))      ; static versions of the binaries in "out"
     (arguments
      '(#:phases (modify-phases %standard-phases
                  (add-after 'build 'build-static
-                   (lambda _ (zero? (system* "make" "static"))))
+                   (lambda _ (invoke "make" "static")))
                  (add-after 'install 'install-bash-completion
                    (lambda* (#:key outputs #:allow-other-keys)
                      (let* ((out (assoc-ref outputs "out"))
@@ -3183,9 +3188,9 @@ and copy/paste text in the console and in xterm.")
                    (let ((staticbin (string-append (assoc-ref %outputs "static")
                                                   "/bin")))
                      (lambda _
-                       (zero? (system* "make"
-                                       (string-append "bindir=" staticbin)
-                                       "install-static"))))))
+                       (invoke "make"
+                               (string-append "bindir=" staticbin)
+                               "install-static")))))
        #:test-target "test"
        #:parallel-tests? #f)) ; tests fail when run in parallel
     (inputs `(("e2fsprogs" ,e2fsprogs)
@@ -3204,7 +3209,9 @@ and copy/paste text in the console and in xterm.")
                      ("docbook-xsl" ,docbook-xsl)
                      ;; For tests.
                      ("acl" ,acl)
-                     ("which" ,which)))
+                     ("which" ,which)
+                     ;; The tests need 'grep' with perl regexp support.
+                     ("grep" ,grep)))
     (home-page "https://btrfs.wiki.kernel.org/")
     (synopsis "Create and manage btrfs copy-on-write file systems")
     (description "Btrfs is a @dfn{copy-on-write} (CoW) file system for Linux
@@ -3237,7 +3244,8 @@ repair and easy administration.")
            (mkdir-p (dirname target))
            (copy-file source target)
            (remove-store-references target)
-           (chmod target #o555)))))
+           (chmod target #o555)
+           #t))))
     (home-page (package-home-page btrfs-progs))
     (synopsis "Statically-linked btrfs command from btrfs-progs")
     (description "This package provides the statically-linked @command{btrfs}
@@ -3257,12 +3265,6 @@ from the btrfs-progs package.  It is meant to be used in initrds.")
                (base32
                 "1bir9ladb58ijlcvrjrq1fb1xv5ys50zdjaq0yzliib0apsyrnyl"))))
     (build-system gnu-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-           (lambda _
-             (zero? (system* "autoreconf" "-vif")))))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -3290,14 +3292,16 @@ disks and SD cards.  This package provides the userland utilities.")
      '(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'enter-subdirectory
                     (lambda _
-                      (chdir "tools/laptop/freefall")))
+                      (chdir "tools/laptop/freefall")
+                      #t))
                   (delete 'configure)
                   (add-before 'build 'increase-timeout
                     (lambda _
                       ;; The default of 2 seconds is too low: it assumes an
                       ;; open lid and AC power without actually checking.
                       (substitute* "freefall.c"
-                        (("alarm\\(2\\)") "alarm(5)")))))
+                        (("alarm\\(2\\)") "alarm(5)"))
+                      #t)))
        #:make-flags (list (string-append "PREFIX="
                                          (assoc-ref %outputs "out")))
        #:tests? #f)) ;no tests
@@ -3326,9 +3330,10 @@ feature, and a laptop with an accelerometer.  It has no effect on SSDs.")
               (modules '((guix build utils)))
               ;; Fix erroneous man page location in Makefile leading to
               ;; a compilation failure.
-              (snippet
-               '(substitute* "CMakeLists.txt"
-                  (("thinkfan\\.1") "src/thinkfan.1")))))
+              (snippet '(begin
+                          (substitute* "CMakeLists.txt"
+                            (("thinkfan\\.1") "src/thinkfan.1"))
+                          #t))))
     (build-system cmake-build-system)
     (arguments
      `(#:modules ((guix build cmake-build-system)
@@ -3379,11 +3384,12 @@ from userspace.")
                (base32
                 "1mb228p80hv97pgk3myyvgp975r9mxq56c6bdn1n24kngcfh4niy"))
               (modules '((guix build utils)))
-              (snippet
-               ;; Install under $prefix.
-               '(substitute* '("src/Makefile.in" "ntfsprogs/Makefile.in")
-                  (("/sbin")
-                   "@sbindir@")))))
+              (snippet '(begin
+                          ;; Install under $prefix.
+                          (substitute* '("src/Makefile.in" "ntfsprogs/Makefile.in")
+                            (("/sbin")
+                             "@sbindir@"))
+                          #t))))
     (build-system gnu-build-system)
     (inputs `(("util-linux" ,util-linux)
               ("fuse" ,fuse)))                    ;libuuid
@@ -3482,12 +3488,7 @@ The following service daemons are also provided:
     (build-system gnu-build-system)
     (arguments
      `(;; Avoid using OpenSSL, curl, and libxml2, reducing the closure by 166 MiB.
-       #:configure-flags '("--without-nistbeacon")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-           (lambda _
-             (zero? (system* "sh" "autogen.sh")))))))
+       #:configure-flags '("--without-nistbeacon")))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -3684,9 +3685,12 @@ the default @code{nsswitch} and the experimental @code{umich_ldap}.")
               (file-name (string-append name "-" version ".tar.gz"))
               (modules '((guix build utils)))
               (snippet
-               ;; The snapshots lack a .git directory, breaking ‘git describe’.
-               `(substitute* "Makefile"
-                  (("\"unknown\"") (string-append "\"v" ,version "\""))))))
+               `(begin
+                  ;; The snapshots lack a .git directory,
+                  ;; breaking ‘git describe’.
+                  (substitute* "Makefile"
+                    (("\"unknown\"") (string-append "\"v" ,version "\"")))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -3768,7 +3772,7 @@ developers.")
 (define-public radeontop
   (package
     (name "radeontop")
-    (version "1.0")
+    (version "1.1")
     (home-page "https://github.com/clbr/radeontop/")
     (source (origin
               (method url-fetch)
@@ -3776,7 +3780,7 @@ developers.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1z38nibirqxrbsfyhfcrnzlcw16cqjp4ds6qnjfxalwayf9fm5x9"))))
+                "1fv06j5c99imvzkac3j40lgjhr5b2i77fnyffhlvj92bli1fm1c6"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -4562,3 +4566,30 @@ text-mode or graphical applications that don't use a display server.
 Also included is @command{fbgrab}, a wrapper around @command{fbcat} that
 emulates the behaviour of Gunnar Monell's older fbgrab utility.")
     (license license:gpl2)))
+
+(define-public libcgroup
+  (package
+    (name "libcgroup")
+    (version "0.41")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://sourceforge/libcg/" name "/"
+             version "/" name "-" version ".tar.bz2"))
+       (sha256
+        (base32 "0lgvyq37gq84sk30sg18admxaj0j0p5dq3bl6g74a1ppgvf8pqz4"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f))
+    (native-inputs
+     `(("bison" ,bison)
+       ("flex" ,flex)))
+    (inputs
+     `(("linux-pam" ,linux-pam)))
+    (home-page "https://sourceforge.net/projects/libcg/")
+    (synopsis "Control groups management tools")
+    (description "Control groups is Linux kernel method for process resource
+restriction, permission handling and more.  This package provides userspace
+interface to this kernel feature.")
+    (license license:lgpl2.1)))