summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2020-11-12 10:47:25 +0100
committerLudovic Courtès <ludo@gnu.org>2020-11-12 10:47:25 +0100
commit07914def98ca0d148e3522466227304e45286786 (patch)
tree71f265728ced786cb70de2a5654c9beb45eb77c5 /gnu
parenta13063d6ac7434beed1c608ce3eb6fb39c740b33 (diff)
parentef1107e2cca9a5b6f7129d019aabac2f0e89a238 (diff)
downloadguix-07914def98ca0d148e3522466227304e45286786.tar.gz
Merge branch 'version-1.2.0'
Diffstat (limited to 'gnu')
-rw-r--r--gnu/local.mk15
-rw-r--r--gnu/machine/ssh.scm6
-rw-r--r--gnu/packages/audio.scm10
-rw-r--r--gnu/packages/cross-base.scm15
-rw-r--r--gnu/packages/glib.scm3
-rw-r--r--gnu/packages/libffi.scm24
-rw-r--r--gnu/packages/patches/audiofile-check-number-of-coefficients.patch (renamed from gnu/packages/patches/audiofile-Check-the-number-of-coefficients.patch)0
-rw-r--r--gnu/packages/patches/audiofile-division-by-zero.patch (renamed from gnu/packages/patches/audiofile-division-by-zero-BlockCodec-runPull.patch)0
-rw-r--r--gnu/packages/patches/audiofile-function-signature.patch (renamed from gnu/packages/patches/audiofile-signature-of-multiplyCheckOverflow.patch)0
-rw-r--r--gnu/packages/patches/audiofile-multiply-overflow.patch (renamed from gnu/packages/patches/audiofile-Fix-multiply-overflow-sfconvert.patch)0
-rw-r--r--gnu/packages/patches/audiofile-overflow-in-MSADPCM.patch (renamed from gnu/packages/patches/audiofile-Fix-overflow-in-MSADPCM-decodeSam.patch)0
-rw-r--r--gnu/packages/patches/libffi-3.3-powerpc-fixes.patch138
-rw-r--r--gnu/packages/patches/python2-pygobject-2-deprecation.patch (renamed from gnu/packages/patches/python2-pygobject-2-gi-info-type-error-domain.patch)0
-rw-r--r--gnu/services/audio.scm33
-rw-r--r--gnu/system/vm.scm15
-rw-r--r--gnu/tests/audio.scm13
-rw-r--r--gnu/tests/docker.scm11
-rw-r--r--gnu/tests/nfs.scm2
-rw-r--r--gnu/tests/version-control.scm6
19 files changed, 248 insertions, 43 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index c2b2143213..b5f9c56324 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -802,14 +802,14 @@ dist_patch_DATA =						\
   %D%/packages/patches/audiofile-CVE-2015-7747.patch		\
   %D%/packages/patches/audiofile-CVE-2018-13440.patch		\
   %D%/packages/patches/audiofile-CVE-2018-17095.patch		\
-  %D%/packages/patches/audiofile-Check-the-number-of-coefficients.patch \
+  %D%/packages/patches/audiofile-check-number-of-coefficients.patch \
   %D%/packages/patches/audiofile-Fail-on-error-in-parseFormat.patch \
   %D%/packages/patches/audiofile-Fix-index-overflow-in-IMA.cpp.patch \
-  %D%/packages/patches/audiofile-Fix-multiply-overflow-sfconvert.patch \
-  %D%/packages/patches/audiofile-Fix-overflow-in-MSADPCM-decodeSam.patch \
-  %D%/packages/patches/audiofile-division-by-zero-BlockCodec-runPull.patch \
-  %D%/packages/patches/audiofile-hurd.patch \
-  %D%/packages/patches/audiofile-signature-of-multiplyCheckOverflow.patch \
+  %D%/packages/patches/audiofile-multiply-overflow.patch	\
+  %D%/packages/patches/audiofile-overflow-in-MSADPCM.patch	\
+  %D%/packages/patches/audiofile-division-by-zero.patch 	\
+  %D%/packages/patches/audiofile-hurd.patch 			\
+  %D%/packages/patches/audiofile-function-signature.patch	\
   %D%/packages/patches/automake-skip-amhello-tests.patch	\
   %D%/packages/patches/avahi-localstatedir.patch		\
   %D%/packages/patches/avogadro-boost148.patch			\
@@ -1196,6 +1196,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/jsoncpp-fix-inverted-case.patch		\
   %D%/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch	\
   %D%/packages/patches/kdbusaddons-kinit-file-name.patch	\
+  %D%/packages/patches/libffi-3.3-powerpc-fixes.patch		\
   %D%/packages/patches/libvirt-create-machine-cgroup.patch	\
   %D%/packages/patches/libziparchive-add-includes.patch		\
   %D%/packages/patches/localed-xorg-keyboard.patch		\
@@ -1525,7 +1526,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/python-paste-remove-timing-test.patch	\
   %D%/packages/patches/python-pycrypto-CVE-2013-7459.patch	\
   %D%/packages/patches/python-pycrypto-time-clock.patch		\
-  %D%/packages/patches/python2-pygobject-2-gi-info-type-error-domain.patch \
+  %D%/packages/patches/python2-pygobject-2-deprecation.patch	\
   %D%/packages/patches/python-pygpgme-fix-pinentry-tests.patch	\
   %D%/packages/patches/python-robotframework-source-date-epoch.patch \
   %D%/packages/patches/python-shouldbe-0.1.2-cpy3.8.patch	\
diff --git a/gnu/machine/ssh.scm b/gnu/machine/ssh.scm
index a3a12fb54b..1b748c8da7 100644
--- a/gnu/machine/ssh.scm
+++ b/gnu/machine/ssh.scm
@@ -37,6 +37,7 @@
   #:use-module (guix ssh)
   #:use-module (guix store)
   #:use-module (guix utils)
+  #:use-module ((guix self) #:select (make-config.scm))
   #:use-module (gcrypt pk-crypto)
   #:use-module (ice-9 format)
   #:use-module (ice-9 match)
@@ -353,8 +354,9 @@ of MACHINE's system profile, ordered from most recent to oldest."
 
   (define remote-exp
     (with-extensions (list guile-gcrypt)
-      (with-imported-modules (source-module-closure '((guix config)
-                                                      (guix profiles)))
+      (with-imported-modules (source-module-closure
+                              `(((guix config) => ,(make-config.scm))
+                                (guix profiles)))
         #~(begin
             (use-modules (guix config)
                          (guix profiles)
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 9f00392ebc..466d17f29d 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -862,16 +862,16 @@ tools.")
          "audiofile-Fix-index-overflow-in-IMA.cpp.patch"
          ;; CVE-2017-6827, CVE-2017-6828, CVE-2017-6832, CVE-2017-6835,
          ;; CVE-2017-6837:
-         "audiofile-Check-the-number-of-coefficients.patch"
+         "audiofile-check-number-of-coefficients.patch"
          ;; CVE-2017-6839:
-         "audiofile-Fix-overflow-in-MSADPCM-decodeSam.patch"
+         "audiofile-overflow-in-MSADPCM.patch"
          ;; CVE-2017-6830, CVE-2017-6834, CVE-2017-6836, CVE-2017-6838:
-         "audiofile-Fix-multiply-overflow-sfconvert.patch"
-         "audiofile-signature-of-multiplyCheckOverflow.patch"
+         "audiofile-multiply-overflow.patch"
+         "audiofile-function-signature.patch"
          ;; CVE-2017-6831:
          "audiofile-Fail-on-error-in-parseFormat.patch"
          ;; CVE-2017-6833:
-         "audiofile-division-by-zero-BlockCodec-runPull.patch"
+         "audiofile-division-by-zero.patch"
          "audiofile-CVE-2018-13440.patch"
          "audiofile-CVE-2018-17095.patch"))))
     (properties `((lint-hidden-cve . ("CVE-2017-6829"
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index b35a3cb40b..c1e5f2eb79 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -539,19 +539,20 @@ and the cross tool chain."
 
         ;; FIXME: 'static-bash' should really be an input, not a native input, but
         ;; to do that will require building an intermediate cross libc.
-        (inputs '())
+        (inputs (if (hurd-triplet? target)
+                    `(;; TODO: move to glibc in the next rebuild cycle
+                      ("hurd-mach-print.patch"
+                       ,(search-patch "glibc-hurd-mach-print.patch"))
+                      ("hurd-gettyent.patch"
+                       ,(search-patch "glibc-hurd-gettyent.patch")))
+                    '()))
 
         (native-inputs `(("cross-gcc" ,xgcc)
                          ("cross-binutils" ,xbinutils)
                          ,@(if (hurd-triplet? target)
                                `(("cross-mig"
                                   ,@(assoc-ref (package-native-inputs xheaders)
-                                               "cross-mig"))
-                                 ;; TODO: move to glibc in the next rebuild cycle
-                                 ("hurd-mach-print.patch"
-                                  ,@(search-patches "glibc-hurd-mach-print.patch"))
-                                 ("hurd-gettyent.patch"
-                                  ,@(search-patches "glibc-hurd-gettyent.patch")))
+                                               "cross-mig")))
                                '())
                          ,@(package-inputs libc)  ;FIXME: static-bash
                          ,@(package-native-inputs libc))))))
diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index bba9461d44..901222476a 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -698,8 +698,7 @@ useful for C++.")
        (sha256
         (base32
          "0nkam61rsn7y3wik3vw46wk5q2cjfh2iph57hl9m39rc8jijb7dv"))
-       (patches (search-patches
-                 "python2-pygobject-2-gi-info-type-error-domain.patch"))))
+       (patches (search-patches "python2-pygobject-2-deprecation.patch"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("which" ,which)
diff --git a/gnu/packages/libffi.scm b/gnu/packages/libffi.scm
index ec8703ffdb..d324892330 100644
--- a/gnu/packages/libffi.scm
+++ b/gnu/packages/libffi.scm
@@ -1,8 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2015, 2019 Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de>
-;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2017, 2019, 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -55,7 +55,25 @@
     (arguments
      `(;; Prevent the build system from passing -march and -mtune to the
        ;; compiler.  See "ax_cc_maxopt.m4" and "ax_gcc_archflag.m4".
-       #:configure-flags '("--enable-portable-binary" "--without-gcc-arch")))
+       #:configure-flags '("--enable-portable-binary" "--without-gcc-arch")
+
+       ;; TODO: Inline patch on next rebuild cycle.
+       ,@(if (string-prefix? "powerpc-" (or (%current-target-system)
+                                            (%current-system)))
+             '(#:phases (modify-phases %standard-phases
+                          (add-after 'unpack 'apply-patch
+                            (lambda* (#:key inputs #:allow-other-keys)
+                              (let ((patch (assoc-ref inputs
+                                                      "powerpc-patch")))
+                                (invoke "patch" "--batch" "-p1"
+                                        "-i" patch))))))
+             '())))
+    (inputs
+     (if (string-prefix? "powerpc-" (or (%current-target-system)
+                                        (%current-system)))
+         `(("powerpc-patch" ,@(search-patches
+                               "libffi-3.3-powerpc-fixes.patch")))
+         '()))
     (outputs '("out" "debug"))
     (synopsis "Foreign function call interface library")
     (description
diff --git a/gnu/packages/patches/audiofile-Check-the-number-of-coefficients.patch b/gnu/packages/patches/audiofile-check-number-of-coefficients.patch
index f9427cbe61..f9427cbe61 100644
--- a/gnu/packages/patches/audiofile-Check-the-number-of-coefficients.patch
+++ b/gnu/packages/patches/audiofile-check-number-of-coefficients.patch
diff --git a/gnu/packages/patches/audiofile-division-by-zero-BlockCodec-runPull.patch b/gnu/packages/patches/audiofile-division-by-zero.patch
index e001133916..e001133916 100644
--- a/gnu/packages/patches/audiofile-division-by-zero-BlockCodec-runPull.patch
+++ b/gnu/packages/patches/audiofile-division-by-zero.patch
diff --git a/gnu/packages/patches/audiofile-signature-of-multiplyCheckOverflow.patch b/gnu/packages/patches/audiofile-function-signature.patch
index 35627d3869..35627d3869 100644
--- a/gnu/packages/patches/audiofile-signature-of-multiplyCheckOverflow.patch
+++ b/gnu/packages/patches/audiofile-function-signature.patch
diff --git a/gnu/packages/patches/audiofile-Fix-multiply-overflow-sfconvert.patch b/gnu/packages/patches/audiofile-multiply-overflow.patch
index 0f17140d6b..0f17140d6b 100644
--- a/gnu/packages/patches/audiofile-Fix-multiply-overflow-sfconvert.patch
+++ b/gnu/packages/patches/audiofile-multiply-overflow.patch
diff --git a/gnu/packages/patches/audiofile-Fix-overflow-in-MSADPCM-decodeSam.patch b/gnu/packages/patches/audiofile-overflow-in-MSADPCM.patch
index 2be930b924..2be930b924 100644
--- a/gnu/packages/patches/audiofile-Fix-overflow-in-MSADPCM-decodeSam.patch
+++ b/gnu/packages/patches/audiofile-overflow-in-MSADPCM.patch
diff --git a/gnu/packages/patches/libffi-3.3-powerpc-fixes.patch b/gnu/packages/patches/libffi-3.3-powerpc-fixes.patch
new file mode 100644
index 0000000000..971ed26180
--- /dev/null
+++ b/gnu/packages/patches/libffi-3.3-powerpc-fixes.patch
@@ -0,0 +1,138 @@
+This is a combination of the following 4 commits:
+https://github.com/libffi/libffi/commit/01a75ed76ea7e57f1b7a5c183e2b1e890e6aa0fd.patch
+https://github.com/libffi/libffi/commit/6663047f56c2932a6b10a790f4ac6666dd181326.patch
+https://github.com/libffi/libffi/commit/e50b9ef8b910fa642ef158f6642e60d54d7ad740.patch
+https://github.com/libffi/libffi/commit/4d6d2866ae43e55325e8ee96561221804602cd7a.patch
+
+From 2dbfa92a95e3bacabca431b89d2a5925e48a0e40 Mon Sep 17 00:00:00 2001
+From: Sergei Trofimovich <slyfox@gentoo.org>
+Date: Thu, 28 Nov 2019 12:42:41 +0000
+
+powerpc: fix build failure on power7 and older (#532)
+
+Build failure looks as:
+```
+libtool: compile:  powerpc-unknown-linux-gnu-gcc \
+    -O2 -mcpu=powerpc -mtune=powerpc -pipe ... -c src/powerpc/ffi.c ...
+In file included from src/powerpc/ffi.c:33:
+src/powerpc/ffi_powerpc.h:65:9: error: '__int128' is not supported on this target
+   65 | typedef __int128 float128;
+      |         ^~~~~~~~
+```
+
+The fix avoids using __int128 in favour of aligned char[16].
+
+Closes: https://github.com/libffi/libffi/issues/531
+Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
+
+Address platforms with no __int128.
+
+powerpc64: Use memcpy to help platforms with no __int128. (#534)
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Update powerpc sysv assembly for ffi_powerpc.h changes (#541)
+
+Some of the flag bits were moved when adding powerpc64 vector support.
+
+Fixes #536
+---
+ src/powerpc/ffi_linux64.c | 12 ++++++------
+ src/powerpc/ffi_powerpc.h |  2 +-
+ src/powerpc/sysv.S        | 12 +++++-------
+ 3 files changed, 12 insertions(+), 14 deletions(-)
+
+diff --git a/src/powerpc/ffi_linux64.c b/src/powerpc/ffi_linux64.c
+index de0d033..4d50878 100644
+--- a/src/powerpc/ffi_linux64.c
++++ b/src/powerpc/ffi_linux64.c
+@@ -547,9 +547,9 @@ ffi_prep_args64 (extended_cif *ecif, unsigned long *const stack)
+               if (next_arg.ul == gpr_end.ul)
+                 next_arg.ul = rest.ul;
+               if (vecarg_count < NUM_VEC_ARG_REGISTERS64 && i < nfixedargs)
+-                *vec_base.f128++ = **p_argv.f128;
++		memcpy (vec_base.f128++, *p_argv.f128, sizeof (float128));
+               else
+-                *next_arg.f128 = **p_argv.f128;
++		memcpy (next_arg.f128, *p_argv.f128, sizeof (float128));
+               if (++next_arg.f128 == gpr_end.f128)
+                 next_arg.f128 = rest.f128;
+               vecarg_count++;
+@@ -680,9 +680,9 @@ ffi_prep_args64 (extended_cif *ecif, unsigned long *const stack)
+                     {
+                       if (vecarg_count < NUM_VEC_ARG_REGISTERS64
+                           && i < nfixedargs)
+-                        *vec_base.f128++ = *arg.f128++;
++		        memcpy (vec_base.f128++, arg.f128, sizeof (float128));
+                       else
+-                        *next_arg.f128 = *arg.f128++;
++		        memcpy (next_arg.f128, arg.f128++, sizeof (float128));
+                       if (++next_arg.f128 == gpr_end.f128)
+                         next_arg.f128 = rest.f128;
+                       vecarg_count++;
+@@ -986,9 +986,9 @@ ffi_closure_helper_LINUX64 (ffi_cif *cif,
+                   do
+                     {
+                       if (pvec < end_pvec && i < nfixedargs)
+-                        *to.f128 = *pvec++;
++		        memcpy (to.f128, pvec++, sizeof (float128));
+                       else
+-                        *to.f128 = *from.f128;
++		        memcpy (to.f128, from.f128, sizeof (float128));
+                       to.f128++;
+                       from.f128++;
+                     }
+diff --git a/src/powerpc/ffi_powerpc.h b/src/powerpc/ffi_powerpc.h
+index 5ee2a70..8e2f2f0 100644
+--- a/src/powerpc/ffi_powerpc.h
++++ b/src/powerpc/ffi_powerpc.h
+@@ -62,7 +62,7 @@ typedef _Float128 float128;
+ #elif defined(__FLOAT128__)
+ typedef __float128 float128;
+ #else
+-typedef __int128 float128;
++typedef char float128[16] __attribute__((aligned(16)));
+ #endif
+ 
+ void FFI_HIDDEN ffi_closure_SYSV (void);
+diff --git a/src/powerpc/sysv.S b/src/powerpc/sysv.S
+index 1474ce7..df97734 100644
+--- a/src/powerpc/sysv.S
++++ b/src/powerpc/sysv.S
+@@ -104,17 +104,16 @@ ENTRY(ffi_call_SYSV)
+ 	bctrl
+ 
+ 	/* Now, deal with the return value.  */
+-	mtcrf	0x01,%r31 /* cr7  */
++	mtcrf	0x03,%r31 /* cr6-cr7  */
+ 	bt-	31,L(small_struct_return_value)
+ 	bt-	30,L(done_return_value)
+ #ifndef __NO_FPRS__
+ 	bt-	29,L(fp_return_value)
+ #endif
+ 	stw	%r3,0(%r30)
+-	bf+	28,L(done_return_value)
++	bf+	27,L(done_return_value)
+ 	stw	%r4,4(%r30)
+-	mtcrf	0x02,%r31 /* cr6  */
+-	bf	27,L(done_return_value)
++	bf	26,L(done_return_value)
+ 	stw     %r5,8(%r30)
+ 	stw	%r6,12(%r30)
+ 	/* Fall through...  */
+@@ -145,10 +144,9 @@ L(done_return_value):
+ #ifndef __NO_FPRS__
+ L(fp_return_value):
+ 	.cfi_restore_state
+-	bf	28,L(float_return_value)
++	bf	27,L(float_return_value)
+ 	stfd	%f1,0(%r30)
+-	mtcrf   0x02,%r31 /* cr6  */
+-	bf	27,L(done_return_value)
++	bf	26,L(done_return_value)
+ 	stfd	%f2,8(%r30)
+ 	b	L(done_return_value)
+ L(float_return_value):
+-- 
+2.26.0
+
diff --git a/gnu/packages/patches/python2-pygobject-2-gi-info-type-error-domain.patch b/gnu/packages/patches/python2-pygobject-2-deprecation.patch
index 6a08e56351..6a08e56351 100644
--- a/gnu/packages/patches/python2-pygobject-2-gi-info-type-error-domain.patch
+++ b/gnu/packages/patches/python2-pygobject-2-deprecation.patch
diff --git a/gnu/services/audio.scm b/gnu/services/audio.scm
index 37f2efa479..627b941871 100644
--- a/gnu/services/audio.scm
+++ b/gnu/services/audio.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Peter Mikkelsen <petermikkelsen10@gmail.com>
 ;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2020 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,6 +22,8 @@
   #:use-module (guix gexp)
   #:use-module (gnu services)
   #:use-module (gnu services shepherd)
+  #:use-module (gnu system shadow)
+  #:use-module (gnu packages admin)
   #:use-module (gnu packages mpd)
   #:use-module (guix records)
   #:use-module (ice-9 match)
@@ -135,19 +138,19 @@ audio_output {
 (define (mpd-shepherd-service config)
   (shepherd-service
    (documentation "Run the MPD (Music Player Daemon)")
+   (requirement '(user-processes))
    (provision '(mpd))
    (start #~(make-forkexec-constructor
              (list #$(file-append mpd "/bin/mpd")
                    "--no-daemon"
                    #$(mpd-config->file config))
-             #:pid-file #$(mpd-file-name config "pid")
              #:environment-variables
              ;; Required to detect PulseAudio when run under a user account.
-             '(#$(string-append
-                   "XDG_RUNTIME_DIR=/run/user/"
-                   (number->string
+             (list (string-append
+                    "XDG_RUNTIME_DIR=/run/user/"
+                    (number->string
                      (passwd:uid
-                       (getpwnam (mpd-configuration-user config))))))
+                      (getpwnam #$(mpd-configuration-user config))))))
              #:log-file #$(mpd-file-name config "log")))
    (stop  #~(make-kill-destructor))))
 
@@ -158,10 +161,26 @@ audio_output {
         (define %user
           (getpw #$(mpd-configuration-user config)))
 
-        (let ((directory #$(mpd-file-name config "")))
+        (let ((directory #$(mpd-file-name config ".mpd")))
           (mkdir-p directory)
           (chown directory (passwd:uid %user) (passwd:gid %user))))))
 
+
+(define %mpd-accounts
+  ;; Default account and group for MPD.
+  (list (user-group (name "mpd") (system? #t))
+        (user-account
+         (name "mpd")
+         (group "mpd")
+         (system? #t)
+         (comment "Music Player Daemon (MPD) user")
+
+         ;; Note: /var/run/mpd hosts one sub-directory per user, of which
+         ;; /var/run/mpd/mpd corresponds to the "mpd" user.
+         (home-directory "/var/run/mpd/mpd")
+
+         (shell (file-append shadow "/sbin/nologin")))))
+
 (define mpd-service-type
   (service-type
    (name 'mpd)
@@ -169,6 +188,8 @@ audio_output {
    (extensions
     (list (service-extension shepherd-root-service-type
                              (compose list mpd-shepherd-service))
+          (service-extension account-service-type
+                             (const %mpd-accounts))
           (service-extension activation-service-type
                              mpd-service-activation)))
    (default-value (mpd-configuration))))
diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
index 21d777a3fe..07a59a3cd2 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -224,6 +224,12 @@ substitutable."
               (use-modules (guix build utils)
                            (gnu build vm))
 
+              ;; Allow non-ASCII file names--e.g., 'nss-certs'--to be decoded
+              ;; by 'estimated-partition-size' below.
+              (setenv "GUIX_LOCPATH"
+                      #+(file-append glibc-utf8-locales "/lib/locale"))
+              (setlocale LC_ALL "en_US.utf8")
+
               (let* ((native-inputs
                       '#+(list qemu (canonical-package coreutils)))
                      (linux   (string-append
@@ -655,7 +661,14 @@ of the GNU system as described by OS."
                                'dce)))
 
 
-  (let* ((os (operating-system (inherit os)
+  (let* ((os (operating-system
+               (inherit os)
+
+               ;; As in 'virtualized-operating-system', use BIOS-style GRUB.
+               (bootloader (bootloader-configuration
+                            (bootloader grub-bootloader)
+                            (target "/dev/vda")))
+
                ;; Assume we have an initrd with the whole QEMU shebang.
 
                ;; Force our own root file system.  Refer to it by UUID so that
diff --git a/gnu/tests/audio.scm b/gnu/tests/audio.scm
index 8eadaf02e1..7bf7d4ef14 100644
--- a/gnu/tests/audio.scm
+++ b/gnu/tests/audio.scm
@@ -28,9 +28,7 @@
 
 (define %mpd-os
   (simple-operating-system
-   (service mpd-service-type
-            (mpd-configuration
-             (user "root")))))
+   (service mpd-service-type)))
 
 (define (run-mpd-test)
   "Run tests in %mpd-os, which has mpd running."
@@ -62,9 +60,14 @@
                 (start-service 'mpd))
              marionette))
 
-          (test-assert "mpc connect"
+          (test-assert "mpd listening"
+            ;; Wait until mpd is actually listening before spawning 'mpc'.
+            (wait-for-tcp-port 6600 marionette))
+
+          (test-equal "mpc connect"
+            0
             (marionette-eval
-             '(zero? (system #$(file-append mpd-mpc "/bin/mpc")))
+             '(system* #$(file-append mpd-mpc "/bin/mpc"))
              marionette))
 
           (test-end)
diff --git a/gnu/tests/docker.scm b/gnu/tests/docker.scm
index ea6c9a33fe..c70c3ddb9e 100644
--- a/gnu/tests/docker.scm
+++ b/gnu/tests/docker.scm
@@ -27,8 +27,9 @@
   #:use-module (gnu services networking)
   #:use-module (gnu services docker)
   #:use-module (gnu services desktop)
-  #:use-module (gnu packages docker)
+  #:use-module ((gnu packages base) #:select (glibc))
   #:use-module (gnu packages guile)
+  #:use-module (gnu packages docker)
   #:use-module (guix gexp)
   #:use-module (guix grafts)
   #:use-module (guix monads)
@@ -206,7 +207,7 @@ inside %DOCKER-OS."
      ;; load' must be able to store the whole image into memory, hence the
      ;; huge memory requirements.  We should avoid the volatile-root setup
      ;; instead.
-     (memory-size 3500)
+     (memory-size 4000)
      (port-forwardings '())))
 
   (define test
@@ -298,5 +299,9 @@ inside %DOCKER-OS."
    (description "Run a system image as produced by @command{guix system
 docker-image} inside Docker.")
    (value (with-monad %store-monad
-            (>>= (system-docker-image (simple-operating-system))
+            (>>= (system-docker-image (operating-system
+                                        (inherit (simple-operating-system))
+                                        ;; Use locales for a single libc to
+                                        ;; reduce space requirements.
+                                        (locale-libcs (list glibc))))
                  run-docker-system-test)))))
diff --git a/gnu/tests/nfs.scm b/gnu/tests/nfs.scm
index da729ddcc9..5d04af38fb 100644
--- a/gnu/tests/nfs.scm
+++ b/gnu/tests/nfs.scm
@@ -404,7 +404,7 @@ directories can be mounted.")
           (test-end)
           (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
 
-  (gexp->derivation "nfs-server-test" test))
+  (gexp->derivation "nfs-root-fs-test" test))
 
 (define %test-nfs-root-fs
   (system-test
diff --git a/gnu/tests/version-control.scm b/gnu/tests/version-control.scm
index 230aa9edf9..d3cf19c913 100644
--- a/gnu/tests/version-control.scm
+++ b/gnu/tests/version-control.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017, 2018 Oleg Pykhalov <go.wigust@gmail.com>
-;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2018 Christopher Baines <mail@cbaines.net>
 ;;;
@@ -285,6 +285,10 @@ HTTP-PORT."
              '(file-exists? "/srv/git/test")
              marionette))
 
+          (test-assert "fcgiwrap listens"
+            ;; Wait for fcgiwrap to be ready before cloning.
+            (wait-for-tcp-port 9000 marionette))
+
           ;; Make sure we can clone the repo from the host.
           (test-equal "clone"
             '#$README-contents