On 2020-10-23, Vagrant Cascadian wrote: > On 2020-10-23, Mathieu Othacehe wrote: >>>> ice-9/boot-9.scm:1669:16: In procedure raise-exception: >>>> ERROR: >>>> 1. &i/o-filename: "/dev/disk/by-id/mmc-SDU64_0xbaf3002e" >>> >>> Thanks for testing. This is probably a regression in >>> "write-file-on-device" that fails to open this kind of files. I'll try >>> to reproduce it locally. >> >> This is because the O_EXCL flag was passed, which causes open to fail if >> the block device is mounted. >> >> The revised patch attached should fix it. > > Yes, this patch fixes the issue for me. > > Thanks! Any reason not to apply this patch yet? Hope it can land in the next guix release, at least. live well, vagrant >> From 780327ebb0db74ca4cc43d26ba7cf945d64c7d30 Mon Sep 17 00:00:00 2001 >> From: Mathieu Othacehe >> Date: Wed, 21 Oct 2020 10:42:50 +0200 >> Subject: [PATCH] system: reconfigure: Use the disk-installer if provided. >> >> --- >> gnu/build/bootloader.scm | 4 ++-- >> gnu/tests/reconfigure.scm | 4 +++- >> guix/scripts/system/reconfigure.scm | 12 +++++++++--- >> 3 files changed, 14 insertions(+), 6 deletions(-) >> >> diff --git a/gnu/build/bootloader.scm b/gnu/build/bootloader.scm >> index 5ec839f902..06a2c3ab76 100644 >> --- a/gnu/build/bootloader.scm >> +++ b/gnu/build/bootloader.scm >> @@ -39,9 +39,9 @@ >> (let ((bv (get-bytevector-n input size))) >> (call-with-port >> (open-file-output-port device >> - (file-options no-truncate no-create) >> + (file-options no-truncate no-fail) >> (buffer-mode block) >> - (native-transcoder)) >> + (make-transcoder (latin-1-codec))) >> (lambda (output) >> (seek output offset SEEK_SET) >> (put-bytevector output bv))))))) >> diff --git a/gnu/tests/reconfigure.scm b/gnu/tests/reconfigure.scm >> index 928a210a94..52beeef447 100644 >> --- a/gnu/tests/reconfigure.scm >> +++ b/gnu/tests/reconfigure.scm >> @@ -260,7 +260,9 @@ bootloader's configuration file." >> ;; test suite, the bootloader installer script is omitted. 'grub-install' >> ;; would attempt to write directly to the virtual disk if the >> ;; installation script were run. >> - (test (install-bootloader-program #f #f bootcfg bootcfg-file #f "/"))))) >> + (test >> + (install-bootloader-program #f #f #f bootcfg bootcfg-file #f "/"))))) >> + >> >> (define %test-switch-to-system >> (system-test >> diff --git a/guix/scripts/system/reconfigure.scm b/guix/scripts/system/reconfigure.scm >> index d89caf80fc..b1982b20d2 100644 >> --- a/guix/scripts/system/reconfigure.scm >> +++ b/guix/scripts/system/reconfigure.scm >> @@ -204,7 +204,8 @@ services as defined by OS." >> ;;; Bootloader configuration. >> ;;; >> >> -(define (install-bootloader-program installer bootloader-package bootcfg >> +(define (install-bootloader-program installer disk-installer >> + bootloader-package bootcfg >> bootcfg-file device target) >> "Return an executable store item that, upon being evaluated, will install >> BOOTCFG to BOOTCFG-FILE, a target file name, on DEVICE, a file system device, >> @@ -246,10 +247,12 @@ BOOTLOADER-PACKAGE." >> ;; a broken installation. >> (switch-symlinks new-gc-root #$bootcfg) >> (install-boot-config #$bootcfg #$bootcfg-file #$target) >> - (when #$installer >> + (when (or #$installer #$disk-installer) >> (catch #t >> (lambda () >> - (#$installer #$bootloader-package #$device #$target)) >> + (if #$installer >> + (#$installer #$bootloader-package #$device #$target) >> + (#$disk-installer #$bootloader-package 0 #$device))) >> (lambda args >> (delete-file new-gc-root) >> (match args >> @@ -272,11 +275,14 @@ additional configurations specified by MENU-ENTRIES can be selected." >> (let* ((bootloader (bootloader-configuration-bootloader configuration)) >> (installer (and run-installer? >> (bootloader-installer bootloader))) >> + (disk-installer (and run-installer? >> + (bootloader-disk-image-installer bootloader))) >> (package (bootloader-package bootloader)) >> (device (bootloader-configuration-target configuration)) >> (bootcfg-file (bootloader-configuration-file bootloader))) >> (eval #~(parameterize ((current-warning-port (%make-void-port "w"))) >> (primitive-load #$(install-bootloader-program installer >> + disk-installer >> package >> bootcfg >> bootcfg-file >> -- >> 2.28.0