# GNU Guix --- Functional package management for GNU # Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès # Copyright © 2017 Tobias Geerinckx-Rice # Copyright © 2018 Chris Marusich # # 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 . # # Test 'guix system', mostly error reporting. # set -e guix system --version tmpfile="t-guix-system-$$" errorfile="t-guix-system-error-$$" # Note: This directory is chosen outside $builddir so that relative file name # canonicalization doesn't mess up with 'current-source-directory', used by # 'local-file' ('load' forces 'relative' for # %FILE-PORT-NAME-CANONICALIZATION.) tmpdir="${TMPDIR:-/tmp}/t-guix-system-$$" mkdir "$tmpdir" trap 'rm -f "$tmpfile" "$errorfile" "$tmpdir"/*; rmdir "$tmpdir"' EXIT # Reporting of syntax errors. cat > "$tmpfile"< "$errorfile" then # This must not succeed. exit 1 else cat "$errorfile" grep "$tmpfile:2:3:.*missing.* initializers" "$errorfile" fi cat > "$tmpfile"< "$errorfile" then # This must not succeed. exit 1 else cat "$errorfile" # Guile 3.0.6 gets line/column numbers for 'read-error' wrong # (zero-indexed): . grep "$tmpfile:4:1: missing closing paren" "$errorfile" || \ grep "$tmpfile:3:0: missing closing paren" "$errorfile" fi # Reporting of module not found errors. cat > "$tmpfile" < "$errorfile" then false else grep "$tmpfile:3:2: .*module .*openssh.*not found" "$errorfile" grep "Try.*use-service-modules ssh" "$errorfile" fi cat > "$tmpfile" <2019-06-12services: Import (srfi srfi-26) from the build side....See <https://lists.gnu.org/archive/html/guix-devel/2019-06/msg00119.html>. * gnu/services/nix.scm (nix-activation): Remove (srfi srfi-26) from (host-) imported modules. Tobias Geerinckx-Rice 2019-06-11services: Add SRFI-26 to Nix activation gexp....Fix the following fatal error on ‘guix system reconfigure’: Backtrace: 18 (primitive-load "/home/nckx/.config/guix/current/bin/guix") In guix/ui.scm: 1620:12 17 (run-guix-command _ . _) In ice-9/boot-9.scm: 829:9 16 (catch _ _ #<procedure 7a7caa2d4c80 at guix/ui.scm:587:2 (key c)> _) 829:9 15 (catch _ _ #<procedure 7a7caa2d4c98 at guix/ui.scm:710:6 (key proc format-string format-args . …> …) In guix/scripts/system.scm: 1325:8 14 (_) In guix/status.scm: 768:4 13 (call-with-status-report _ _) In guix/scripts/system.scm: 1181:4 12 (process-action _ _ _) In guix/store.scm: 623:10 11 (call-with-store _) 1800:24 10 (run-with-store _ _ #:guile-for-build _ #:system _ #:target _) In guix/scripts/system.scm: 920:13 9 (_ _) 409:8 8 (_ _) In unknown file: 7 (primitive-load "/gnu/store/dha7j9gcz3vgb8cy7vfvvaswwsywrrzj-activate") In ice-9/boot-9.scm: 260:13 6 (for-each #<procedure primitive-load (_)> _) In unknown file: 5 (primitive-load "/gnu/store/ql1xjxrssxm51z2bn2v6l3mlrncij84h-activate-service") In ice-9/eval.scm: 619:8 4 (_ #f) 196:35 3 (_ #f) 196:27 2 (_ #f) 223:20 1 (proc #<directory (guile-user) 1fa4140>) In unknown file: 0 (%resolve-variable (7 . cut) #<directory (guile-user) 1fa4140>) ERROR: In procedure %resolve-variable: error: cut: unbound variable Reported-by: Alex McGrath on #guix. * gnu/services/nix.scm (nix-activation): Import and use (srfi srfi-26). Tobias Geerinckx-Rice 2019-06-10services: Add 'nix-service-type'....* gnu/services/nix.scm: New file. * gnu/local.mk: Add this. * doc/guix.texi (Miscellaneous Services): Document this. Oleg Pykhalov duplicate service identifiers. cat > "$tmpfile" < "$errorfile" then # This must not succeed. exit 1 else grep "service 'networking'.*more than once" "$errorfile" fi # Reporting unmet shepherd requirements. cat > "$tmpfile" < "$errorfile" then exit 1 else grep "service 'buggy!'.*'does-not-exist'.*not provided" "$errorfile" fi # Reporting inconsistent user accounts. make_user_config () { cat > "$tmpfile" <). drv1="`guix system vm "$tmpfile" -d`" drv2="`guix system vm "$tmpfile" -d`" test "$drv1" = "$drv2" drv1="`guix system image -t iso9660 "$tmpfile" -d`" drv2="`guix system image -t iso9660 "$tmpfile" -d`" test "$drv1" = "$drv2" # Check whether the graph commands work as expected. guix system extension-graph "$tmpfile" | grep 'label = "file-systems"' guix system shepherd-graph "$tmpfile" | grep 'label = "guix-daemon"' make_user_config "group-that-does-not-exist" "users" if guix system build "$tmpfile" -n 2> "$errorfile" then false else grep "primary group.*group-that-does-not-exist.*undeclared" "$errorfile"; fi make_user_config "users" "group-that-does-not-exist" if guix system build "$tmpfile" -n 2> "$errorfile" then false else grep "supplementary group.*group-that-does-not-exist.*undeclared" "$errorfile"; fi # Try 'local-file' and relative file name resolution. cat > "$tmpdir/config.scm"< "$tmpdir/my-torrc"< "$tmpdir/config.scm" <&1 | \ grep "config\.scm:4:2: warning:.*whatever.*relative to current directory" # Searching. guix system search tor | grep "^name: tor" guix system search tor | grep "^shepherdnames: tor" guix system search anonym network | grep "^name: tor" guix system search . > "$tmpdir/search" test $(wc -l < "$tmpdir/search") -gt 500 rm "$tmpdir/search" # Below, use -n (--dry-run) for the tests because if we actually tried to # build these images, the commands would take hours to run in the worst case. # Verify that the examples can be built. for example in gnu/system/examples/*.tmpl; do if echo "$example" | grep hurd; then target="--target=i586-pc-gnu" else target= fi guix system -n disk-image $target "$example" done # Verify that the images can be built. guix system -n vm gnu/system/examples/vm-image.tmpl guix system -n image gnu/system/images/pinebook-pro.scm guix system -n image -t qcow2 gnu/system/examples/vm-image.tmpl guix system -n image -t iso9660 gnu/system/examples/bare-bones.tmpl guix system -n docker-image gnu/system/examples/docker-image.tmpl # Verify that at least the raw image type is available. guix system --list-image-types | grep "raw"