me
/
guix
Archived
1
0
Fork 0
Commit Graph

533 Commits (f7cb2b22a275cc1fa0fdae9023aa3b4788cd1952)

Author SHA1 Message Date
Ricardo Wurmus c585b4bc68
file-systems: Always do recursive bind mounts.
Fixes <https://issues.guix.gnu.org/59185>.

* guix/build/syscalls.scm (MS_REC): New variable.
* gnu/build/file-systems.scm (mount-flags->bit-mask): Set MS_REC bit when
bind-mounting.
2022-11-20 21:27:10 +01:00
Ludovic Courtès 00b9ab0a83
tests: root-unmount: Wait for the first QEMU process to finish.
There was a tiny possibility that the first QEMU process would still be
running by the time we launch the second one.

* gnu/build/marionette.scm (marionette-pid): Export.
* gnu/tests/base.scm (run-root-unmount-test)[test]: Add 'waitpid' call.
2022-11-17 11:10:09 +01:00
Maxim Cournoyer 0bb872b379
install: Validate symlink target in evaluate-populate-directive.
* gnu/build/install.scm (evaluate-populate-directive): By default, error when
the target of a symlink doesn't exist.  Always ensure TARGET ends with "/".
(populate-root-file-system): Call evaluate-populate-directive with
 #:error-on-dangling-symlink #t and add comment.
2022-11-15 14:15:11 -05:00
Ludovic Courtès afbd4d8470
linux-modules: Add 'load-pci-device-database'.
* gnu/build/linux-modules.scm (read-pci-device-database)
(load-pci-device-database): New procedures.
2022-11-15 12:16:43 +01:00
Ludovic Courtès 655fb8feac
linux-modules: Add support for listing PCI devices.
* gnu/build/linux-modules.scm (<pci-device>): New record type.
(pci-device-class-predicate, storage-pci-device?, network-pci-device?)
(display-pci-device?, pci-devices?): New procedures.
2022-11-15 12:16:42 +01:00
Marius Bakke c1261b3a5d
file-systems: Gracefully handle EMEDIUMTYPE in 'read-partitions'.
* gnu/build/file-systems.scm (ENOENT-safe): Catch EMEDIUMTYPE and warn.
2022-11-03 20:00:31 +01:00
Ludovic Courtès c077345539
file-systems: Support the 'no-diratime' mount flag.
* gnu/build/file-systems.scm (mount-flags->bit-mask): Handle 'no-diratime'.
* doc/guix.texi (File Systems): Document it.
2022-10-20 23:07:37 +02:00
Maxim Cournoyer 133901a396
marionette: Add a callback arguments to wait-for-screen-text.
* gnu/build/marionette.scm (wait-for-screen-text): New 'pre-action' and
'post-action' arguments.  Update doc.  Call the procedures before and after
the OCR occurs, respectively.
2022-10-07 10:11:12 -04:00
Maxim Cournoyer f24e0fc233
marionette: Define keystrokes for typing colons and exclamation marks.
* gnu/build/marionette.scm (%qwerty-us-keystrokes): Register keystrokes for
the ':' and '!' characters.
2022-10-07 10:11:12 -04:00
Maxim Cournoyer 4cce84b247
marionette: Preserve screen dumps on failures.
This is to make it easier to debug test failures involving
'wait-for-screen-text': the screendump image used for the OCR is now preserved
for inspection when 'wait-for-screen-text' fails.

* gnu/build/marionette.scm (marionette-screen-text): Return the screendump
image file as the second value.  Adjust doc.
(wait-for-screen-text): Add the preserved screendump image file name to the
error message.  Adjust doc.
2022-10-07 10:11:12 -04:00
Maxim Cournoyer 21f641e9fa
marionette: Make marionette-screen-text private.
It has only one user, which is better suited for wait-for-screen-text anyway.

* gnu/tests/base.scm (run-basic-test): Refactor to use wait-for-screen-text
instead of marionette-screen-text.
2022-10-07 10:11:11 -04:00
Ludovic Courtès 00d5bb5d7f
linux-container: Mark socket pair as SOCK_CLOEXEC.
* gnu/build/linux-container.scm (run-container): Pass SOCK_CLOEXEC to
'socketpair'.
2022-09-24 17:59:04 +02:00
Maxim Cournoyer 21afbf54cd
build: jami-service: account->username always return a fingerprint.
This change is motivated by the fact that Account.registeredName is a volatile
account data, not exported along the account and retrieved from the name
server.  Have it always return Account.username instead, so that the result is
reproducible independent of whether networking is available or not.

* gnu/build/jami-service.scm (account->username): Always return the account
fingerprint.  Adjust doc.
(id->username): Likewise.
2022-09-23 23:56:15 -04:00
Ludovic Courtès 6abdcef4a6
linux-container: 'container-excursion*' marks its FDs as FD_CLOEXEC.
Fixes <https://issues.guix.gnu.org/57827>.
Reported by Mathieu Othacehe <othacehe@gnu.org>.

Fixes a regression introduced with the Shepherd 0.9.2 upgrade in
1ba0e38267, whereby IN and OUT would no
longer be closed when 'fork+exec-command/container' would call
'exec-command*' as part of the THUNK passed to 'container-excursion*'.

This is because the Shepherd 0.9.2 assumes file descriptors are properly
marked as O_CLOEXEC and, consequently, 'exec-command' no longer run the
close(2) loop prior to 'exec'.

* gnu/build/linux-container.scm (container-excursion*): Add calls to
'fcntl'.
2022-09-20 19:24:31 +02:00
Christopher Baines ad5584bf25
marionette: Avoid read error when wait-for-file file is empty.
Since #<eof> can't be read.

* gnu/build/marionette.scm (wait-for-file): Return "" if file is empty.

Partially-Fixes: https://issues.guix.gnu.org/57827
2022-09-16 11:59:42 +02:00
Christopher Baines 0f46d4f147
marionette: Make it easier to debug REPL read failures.
Log the remaining contnet written to the REPL, so that there's more to go on
than:

  socket:5:14: Unknown # object: "#<"

* gnu/build/marionette.scm (marionette-eval): Catch exceptions from read and
log the remainder of the content from the REPL.
2022-09-16 11:59:39 +02:00
Ludovic Courtès 491dd62b38
secret-service: Mark sockets as SOCK_CLOEXEC.
* gnu/build/secret-service.scm (secret-service-send-secrets)
(secret-service-receive-secrets): Pass SOCK_CLOEXEC to 'socket'.
2022-09-13 00:31:04 +02:00
Ludovic Courtès e05f7c55d7
file-systems: Open files with O_CLOEXEC.
Since this code is run from PID 1, this ensures file descriptors to
sensitive files and devices are not accidentally leaked to
sub-processes.

* gnu/build/file-systems.scm (call-with-input-file): New procedure.
(mount-file-system): Use 'close-fdes' + 'open-fdes'.
2022-09-08 16:22:21 +02:00
Jack Hill ec16f88522
linux-boot: Resume from hibernation after pre-boot.
* gnu/build/linux-boot.scm (boot-system): Call resume-if-hibernated
after pre-mount.

Signed-off-by: Tobias Geerinckx-Rice <me@tobias.gr>
2022-09-04 02:00:00 +02:00
Arun Isaac 3e866e24f0
shepherd: Set #o640 permissions for log file of service in container.
* gnu/build/shepherd.scm (make-forkexec-constructor/container): Set #o640
permissions for log file.
2022-09-02 16:32:16 +05:30
Mathieu Othacehe 192b7d0c0b
build: image: Make partition uuid optional.
The uuid field of <partition> defaults to #false. This should be reflected
when creating the partition.

* gnu/build/image.scm (make-ext-image): Make it optional.
2022-08-30 19:29:58 +02:00
Mathieu Othacehe 61bbff9d50
build: image: Remove unused variable.
* gnu/build/image.scm (make-ext-image): Remove the unused flags variable.
2022-08-30 19:29:58 +02:00
Maxim Cournoyer 42fee6d0f1
build: marionette: Add support for Tesseract OCR.
* gnu/build/marionette.scm (invoke-ocrad-ocr): New procedure.
(invoke-tesseract-ocr): Likewise.
(marionette-screen-text): Rename the #:ocrad argument to #:ocr.  Dispatch the
matching OCR invocation procedure.
(wait-for-screen-text): Rename the #:ocrad argument to #:ocr.
* gnu/tests/base.scm (run-basic-test): Adjust accordingly.
* gnu/tests/install.scm (enter-luks-passphrase): Likewise.
(enter-luks-passphrase-for-home): Likewise.
2022-08-28 22:10:20 -04:00
Maxim Cournoyer 697b797160
marionette: Improve the error message of 'wait-for-screen-text'.
* gnu/build/marionette.scm (wait-for-screen-text): Return the last OCR'd text
when the predicate fails to match instead of the not useful predicate object.
2022-08-28 22:10:20 -04:00
Maxim Cournoyer ce53253d1f
build: marionette: Adjust QEMU Info manual reference.
* gnu/build/marionette.scm (marionette-control): Update doc to correct the
QEMU Info manual reference.
2022-08-11 11:52:51 -04:00
Oleg Pykhalov 4b49487838
gnu: system: file-systems: Add shared flag.
* gnu/build/file-systems.scm (mount-flags->bit-mask, mount-file-system):
Handle shared flag.
* gnu/system/file-systems.scm (invalid-file-system-flags): Add shared to known
flags.
* guix/build/syscalls.scm (MS_SHARED): New variable.
* doc/guix.texi (File Systems): Document shared flag.
2022-08-10 07:12:25 +03:00
Timotej Lazar fd74fe6325
tests: Add qemu-guest-agent system test.
Enable the QEMU guest agent interface in marionette VMs, run the
qemu-guest-agent service in one and try talking to it.

* gnu/build/marionette.scm (make-marionette): Enable the guest agent device.
* gnu/tests/virtualization.scm (run-qemu-guest-agent-test): New procedure.
(%test-qemu-guest-agent): New variable.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2022-08-09 17:15:45 +02:00
Nicolas Graves cda3de3b7d
gnu: modifying make-chromium-extension to rely on node-crx3.
* gnu/build/chromium-extension.scm (make-crx): Lift Xorg and Chromium
dependencies, rely on node-crx3 instead.

Signed-off-by: Marius Bakke <marius@gnu.org>
2022-07-20 16:50:08 +02:00
Ludovic Courtès 4636640de8
file-systems: Add 'cleanly-unmounted-ext2?'.
* gnu/build/file-systems.scm (ext2-superblock-cleanly-unmounted?)
(cleanly-unmounted-ext2?): New procedures.
2022-07-01 12:10:28 +02:00
Denis 'GNUtoo' Carikli 62c86c8391
image: Add support for 32bit UEFI.
* gnu/bootloader/grub.scm (grub-efi32-bootloader): New variable.
(install-grub-efi32): New variable.
* gnu/build/bootloader.scm (install-efi): Add a 'targets' keyword
argument.
(install-efi-loader): Likewise.
* gnu/build/image.scm (initialize-efi32-partition): New procedure.
* gnu/packages/bootloaders.scm (grub-efi32): New variable.
* gnu/system/image.scm (esp32-partition): New variable
(efi32-disk-image): New variable.
(efi32-raw-image-type): New variable.
(system-disk-image)[partition-image]: Set '#:grub-efi32' when
calling the partition initializer.

Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
2022-06-24 10:21:06 +02:00
Maxim Cournoyer 85b4dabd94
services: jami: Modernize to adjust to Shepherd 0.9+ changes.
This partially fixes <https://issues.guix.gnu.org/54786>, allowing the 'jami'
and 'jami-provisioning' system tests to pass again.

In version 0.9.0, Shepherd constructors are now run concurrently, via
cooperative scheduling (Guile Fibers).  The Jami service previously relied on
blocking sleeps while polling for D-Bus services to become ready after forking
a process; this wouldn't work anymore since while blocking the service process
wouldn't be given the chance to finish starting.  The new reliance on Fibers
in Shepherd's fork+exec-command in the helper 'send-dbus' procedure also meant
that it wouldn't work outside of Shepherd anymore.  Finally, the
'start-service' Shepherd procedure used in the test suite would cause the Jami
daemon to be spawned multiple times (a bug introduced in Shepherd 0.9.0).

To fix/simplify these problems, this change does the following:

1. Use the Guile AC/D-Bus library for D-Bus communication, which simplify
things, such as avoiding the need to fork 'dbus-send' processes.

2. The non-blocking 'sleep' version of Fiber is used for the 'with-retries'
waiting syntax.

3. A 'dbus' package variant is used to adjust the session bus configuration,
tailoring it for the use case at hand.

4. Avoid start-service in the tests, preferring 'jami-service-available?' for
now.

* gnu/build/jami-service.scm (parse-dbus-reply, strip-quotes)
(deserialize-item, serialize-boolean, dbus-dict->alist)
(dbus-array->list, parse-account-ids, parse-account-details)
(parse-contacts): Delete procedures.
(%send-dbus-binary, %send-dbus-bus, %send-dbus-user, %send-dbus-group)
(%send-dbus-debug): Delete parameters.
(jami-service-running?): New procedure.
(send-dbus/configuration-manager): Rename to...
(call-configuration-manager-method): ... this.  Turn METHOD into a positional
argument.  Turn ARGUMENTS into an optional argument.  Invoke
`call-dbus-method' instead of `send-dbus', adjusting callers accordingly.
(get-account-ids, id->account-details, id->account-details)
(id->volatile-account-details, username->id, add-account remove-account)
(username->contacts, remove-contact, add-contact, set-account-details)
(set-all-moderators, username->all-moderators?, username->moderators)
(set-moderator): Adjust accordingly.
(with-retries, send-dbus, dbus-available-services)
(dbus-service-available?): Move to ...
* gnu/build/dbus-service.scm: ... this new module.
(send-dbus): Rewrite to use the Guile AC/D-Bus library.
(%dbus-query-timeout, sleep*): New variables.
(%current-dbus-connection): New parameter.
(initialize-dbus-connection!, argument->signature-type)
(call-dbus-method): New procedures.
(dbus-available-services): Adjust accordingly.
* gnu/local.mk (GNU_SYSTEM_MODULES): Register new module.
* gnu/packages/glib.scm (dbus-for-jami): New variable.
* gnu/services/telephony.scm: (jami-configuration)[dbus]: Default to
dbus-for-jami.
(jami-dbus-session-activation): Write a D-Bus daemon configuration file at
'/var/run/jami/session-local.conf'.
(jami-shepherd-services): Add the closure of guile-ac-d-bus and guile-fibers
as extensions.  Adjust imported modules.  Remove no longer used parameters.
<jami-dbus-session>: Use a PID file, avoiding the need for the manual
synchronization.
<jami>:  Set DBUS_SESSION_BUS_ADDRESS environment variable.  Poll using
'jami-service-available?' instead of 'dbus-service-available?'.
* gnu/tests/telephony.scm (run-jami-test): Add needed Guile extensions.  Set
DBUS_SESSION_BUS_ADDRESS environment variable.  Adjust all tests to use
'jami-service-available?' to determine if the service is started rather than
the now problematic Shepherd's 'start-service'.
2022-06-10 23:52:33 -04:00
Pavel Shlyak 8b680b00d4
image: Add fat32 support.
* gnu/build/image.scm (make-vfat-image): Pass fs-bits as an argument and force
1kb logical sector size only if "ESP" flag is set.
(make-partition-image): Add "fat32" partition type, support explicit "fat16"
type with vfat alias.
* gnu/system/image.scm (partition->dos-type partition): Return file system IDs
for "fat16" and "fat32" partitions.
(partition->gpt-type partition): Ditto.

Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
2022-05-31 14:51:13 +02:00
Pavel Shlyak bb662d71e6
image: Add bootable flag support.
* gnu/build/image.scm (sexp->partition): Add flags support.
* gnu/system/image.scm (partition->gexp): Ditto.
(system-disk-image): Set the genimage bootable flag if it is part of the
partition flags.

Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
2022-05-23 09:17:12 +02:00
Ludovic Courtès 52aceda4fd
marionette: Add #:address parameter to 'wait-for-tcp-port'.
* gnu/build/marionette.scm (wait-for-tcp-port): Add #:address parameter.
Honor it, and improve error reporting in the 'failure case.
2022-05-22 21:56:40 +02:00
Ludovic Courtès 3682bd4003
Add (guix least-authority).
* guix/least-authority.scm: New file.
* Makefile.am (MODULES): Add it.
* gnu/build/shepherd.scm (default-mounts): Make public.
2022-05-01 21:30:35 +02:00
Ludovic Courtès 391bd14359
linux-container: Add #:child-is-pid1? parameter to 'call-with-container'.
* gnu/build/linux-container.scm (wait-child-process)
(status->exit-status): New procedures.
(call-with-container): Add #:child-is-pid1? parameter and honor it.
[thunk*]: New variable.  Pass it to 'run-container'.
2022-05-01 21:30:35 +02:00
Ludovic Courtès f6c9763984
linux-container: Ensure signal-handling asyncs get a chance to run.
Previously we could enter the blocking 'waitpid' call and miss an
opportunity to run the signal handler async.

* gnu/build/linux-container.scm (call-with-container)
[periodically-schedule-asyncs]: New procedure.
[install-signal-handlers]: Call it.
2022-05-01 21:30:35 +02:00
Ludovic Courtès a76fa226c8
linux-container: 'call-with-container' relays SIGTERM and SIGINT.
* gnu/build/linux-container.scm (call-with-container): Add #:relayed-signals.
[install-signal-handlers]: New procedure.
Call it.
2022-05-01 21:30:34 +02:00
Leo Nikkilä e1f0c88ea2
shepherd: Add #:supplementary-groups.
To support the argument introduced in Shepherd 0.9.0 when defining
container-bound services.

* gnu/build/shepherd.scm (exec-command*)
(make-forkexec-constructor/container): Add '#:supplementary-groups'.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2022-04-12 23:40:44 +02:00
Ludovic Courtès f429596627
shepherd: 'fork+exec-command/container' always returns a PID.
Fixes a regression introduced in
938448bf40 whereby
'fork+exec-command/container' would return #t, then used as the running
value of the 'guix-daemon' service in the installer.  Upon installation
completion, stopping the 'guix-daemon' service would fail with
wrong-type-arg because that #t would be passed to the 'stop' method in
lieu of a PID.

* gnu/build/shepherd.scm (fork+exec-command/container): Return a PID
rather than #t.
2022-04-11 00:25:33 +02:00
Ludovic Courtès ada530acb1
shepherd: 'exec-command*' has a valid default #:directory.
Fixes a regression introduced in
938448bf40 where 'exec-command*' could
get #:directory #f, in particular when called by
'fork+exec-command/container'.

* gnu/build/shepherd.scm (exec-command*): Add default value for #:directory.
2022-04-11 00:25:33 +02:00
Ludovic Courtès dcb0e54a4f
file-systems: Invoke fsck tools with 'system*/tty'.
This ensures those programs, if invoked by shepherd (where standard
input is /dev/null), can still interact with the user if needed.

* gnu/build/file-systems.scm (check-ext2-file-system)
(check-bcachefs-file-system, check-btrfs-file-system):
(check-fat-file-system, check-jfs-file-system):
(check-f2fs-file-system, check-ntfs-file-system):
(check-xfs-file-system): Use 'system*/tty' instead of 'system*'.
2022-04-08 18:14:35 +02:00
Ludovic Courtès 931f13840b
mapped-devices: Ensure 'cryptsetup open' gets a tty.
Fixes <https://issues.guix.gnu.org/54770>.
Regression introduced in 400c9ed3d7.

Previously, for an encrypted /home (say), "cryptsetup open" would be
invoked by shepherd, with /dev/null as its standard input.  It would
thus run in non-interactive mode and, instead of asking for a
passphrase, fail with:

  Nothing to read on input.

This change ensures it runs in interactive mode.

* gnu/build/file-systems.scm (system*/console, system*/tty): New
procedures.
* gnu/system/mapped-devices.scm (open-luks-device): Use 'system*/tty'
instead of 'system*'.
2022-04-08 18:14:35 +02:00
Ludovic Courtès 28b3763e33
secret-service: Allow cooperative scheduling when Fibers is used.
This lets the 'childhurd' service start in the background, letting
shepherd perform other tasks in the meantime, including serving
clients (such as the 'herd' command).

* gnu/build/secret-service.scm (with-modules): New macro.
(wait-for-readable-fd): Add cooperative implementation when Fibers is in
use.
(secret-service-send-secrets): Define 'sleep' so that it cooperates when
Fibers is in use.
2022-04-07 00:08:56 +02:00
Ludovic Courtès 83121aa85a
secret-service: Abstract 'wait-for-readable-fd'.
* gnu/build/secret-service.scm (wait-for-readable-fd): New procedure.
(secret-service-send-secrets): Use it instead of 'select'.
2022-04-07 00:08:56 +02:00
Ludovic Courtès 938448bf40
shepherd: Adjust 'fork+exec-command/container' for the Shepherd 0.9.
* gnu/build/shepherd.scm (exec-command*): New procedure, with code
formerly...
(make-forkexec-constructor/container): ... here.  Use it.
(fork+exec-command/container): Use 'fork+exec-command' only when
CONTAINER-SUPPORT? is false or PID is the current process.
2022-04-07 00:08:55 +02:00
Maxim Cournoyer 6d9d616113
initrd: Honor rootfstype and rootflags command-line parameters.
* gnu/build/linux-boot.scm (boot-system): Honor rootfstype and rootflags
arguments.  Update doc.  Error out in case there is insufficient information
with regard to the root file system.
Restore the behavior of inferring the root device from the root file system
from the operating system in case the root argument is not provided.
* doc/guix.texi (Initial RAM Disk): Document the new command-line parameters.
2022-03-01 10:30:18 -05:00
Maxim Cournoyer 0dc019e19a
initrd: Use non-hyphenated kernel command-line parameter names.
This is to make it less surprising, given the common convention sets forth by
the kernel Linux command-line parameters.

* gnu/build/linux-boot.scm (boot-system): Rename '--load', '--repl', '--root'
and '--system' to 'gnu.load', 'gnu.repl', 'root' and 'gnu.system',
respectively.  Adjust doc.
(find-long-option): Adjust doc.
* gnu/installer/parted.scm (installer-root-partition-path): Adjust accordingly.
* gnu/system.scm (bootable-kernel-arguments): Add a VERSION argument and
update doc.  Use VERSION to conditionally return old style vs new style initrd
arguments.
(%boot-parameters-version): Increment to 1.
(operating-system-boot-parameters): Adjust doc.
(operating-system-boot-parameters-file): Likewise.
* gnu/system/linux-initrd.scm (raw-initrd, base-initrd): Likewise.
* doc/guix.texi: Adjust doc.
* gnu/build/activation.scm (boot-time-system): Adjust accordingly.
* gnu/build/hurd-boot.scm (boot-hurd-system): Likewise.
* gnu/packages/commencement.scm (%final-inputs-riscv64): Adjust comment.
2022-03-01 10:30:17 -05:00
Maxim Cournoyer e9f9f291ed
build: linux-boot: Expound docstring of the 'boot-system' procedure.
* gnu/build/linux-boot.scm (boot-system): Document the Linux command-line
parameters it understands and split a long string over two lines.
2022-02-17 13:39:02 -05:00
Tobias Geerinckx-Rice 472680a28d
build: image: Account for fixed-size file system structures.
Workaround for <https://issues.guix.gnu.org/53194>.

* gnu/build/image.scm (estimate-partition-size): Enforce a 1-MiB minimum.

Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
2022-02-07 16:22:37 -05:00