Hi,
Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis:
Toggle quote (14 lines)
> While attempting to deploy to overdrive1, using the 9971141 commit in
> the maintenance repo, I encountered the following error:
>
> maxim@hurd ~/src/guix-maintenance/hydra$ guix time-machine --commit=08d515233241ee0921b8b5ab706f98170c62437c -- deploy -L modules deploy-overdrive1.scm
> The following 1 machine will be deployed:
> overdrive1
>
> guix deploy: deploying to overdrive1...
> guix deploy: sending 0 store items (0 MiB) to 'overdrive1.guix.gnu.org'...
> guix deploy: sending 0 store items (0 MiB) to 'overdrive1.guix.gnu.org'...
> guix deploy: sending 0 store items (0 MiB) to 'overdrive1.guix.gnu.org'...
> guix deploy: error: failed to deploy overdrive1: failed to switch systems while deploying 'overdrive1':
> system-error "symlink" "~A" ("File exists") (17)
I can reproduce it.
The failing code is in /gnu/store/…-switch-to-system.scm:
Toggle snippet (21 lines)
(begin
(use-modules
(guix config)
(guix profiles)
(guix utils))
(define profile
(or #f
(string-append %state-directory "/profiles/system")))
(let*
((number
(#{1+}
#
(generation-number profile)))
(generation
(generation-file-name profile number)))
(switch-symlinks generation "/gnu/store/kifxq4hmp4ihn6nb06ia8wms33qrndxn-system")
(switch-symlinks profile generation)
(setenv "GUIX_NEW_SYSTEM" "/gnu/store/kifxq4hmp4ihn6nb06ia8wms33qrndxn-system")
(primitive-load "/gnu/store/1wdwlaqkmixb1d7by7fj23lxppw8x44r-activate.scm")))
We can run it manually to get debugging data:
Toggle snippet (23 lines)
ludo@overdrive1 ~$ sudo -E env -i COLUMNS=100 "/gnu/store/xv7j4im9ap92mv0mbsm1wa4px93zxrms-switch-to-system.scm"
making '/gnu/store/kifxq4hmp4ihn6nb06ia8wms33qrndxn-system' the current system...
WARNING: (guile-user): imported module (guix build utils) overrides core binding `delete'
setting up setuid programs in '/run/setuid-programs'...
populating /etc from /gnu/store/hf3qxlaiajvapwis0lq20avgl2whfa5w-etc...
Backtrace:
6 (primitive-load "/gnu/store/xv7j4im9ap92mv0mbsm1wa4px93zxrms-switch-to-system.scm")
5 (primitive-load "/gnu/store/1wdwlaqkmixb1d7by7fj23lxppw8x44r-activate.scm")
In ice-9/boot-9.scm:
260:13 4 (for-each #<procedure primitive-load (_)> _)
In unknown file:
3 (primitive-load "/gnu/store/v03vaksmkpj7wv4dhm0yrd3y65lzbixz-activate-service.scm")
In srfi/srfi-1.scm:
634:9 2 (for-each #<procedure ffffaaff10e0 at gnu/build/activation.scm:257:12 (file)> _)
In gnu/build/activation.scm:
267:20 1 (_ "modprobe.d")
In unknown file:
0 (symlink "/etc/static/modprobe.d" "/etc/modprobe.d")
ERROR: In procedure symlink:
In procedure symlink: File exists
This is because ‘zram-device-service-type’ contributes a file to
/etc/modprobe.d:
Toggle snippet (19 lines)
(define %zram-device-config
`("modprobe.d/zram.conf"
,(plain-file "zram.conf"
"options zram num_devices=1")))
(define zram-device-service-type
(service-type
(name 'zram)
(default-value (zram-device-configuration))
(extensions
(list (service-extension kernel-module-loader-service-type
(const (list "zram")))
(service-extension etc-service-type
(const (list %zram-device-config)))
(service-extension udev-service-type
(compose list zram-device-udev-rule))))
(description "Creates a zram swap device.")))
… which is fine, except that there was already a pre-existing
/etc/modprobe.d directory (coming from openSuSE, the distro that was
initially installed on this machine), which caused this activation code
to break:
Toggle snippet (14 lines)
ludo@overdrive1 ~$ ls -l /etc/modprobe.d
total 36
-rw-r--r-- 1 root root 3221 Nov 6 2016 00-system.conf
-rw-r--r-- 1 root root 532 Nov 14 2012 10-unsupported-modules.conf
-rw-r--r-- 1 root root 181 May 5 2017 50-alsa.conf
-rw-r--r-- 1 root root 5009 Sep 15 2016 50-blacklist.conf
-rw-r--r-- 1 root root 128 Oct 12 2017 50-bluetooth.conf
-rw-r--r-- 1 root root 33 Oct 20 2016 50-ipw2200.conf
-rw-r--r-- 1 root root 34 Oct 20 2016 50-iwl3945.conf
-rw-r--r-- 1 root root 47 Nov 22 2011 99-local.conf
ludo@overdrive1 ~$ ls -ld /etc/modprobe.d
drwxr-xr-x 1 root root 260 Jan 29 2018 /etc/modprobe.d/
Once moved out of the way, reconfiguration proceeds just fine and
happiness ensues:
Toggle snippet (7 lines)
ludo@overdrive1 ~$ ls -l /etc/modprobe.d
lrwxrwxrwx 1 root root 22 Sep 26 17:19 /etc/modprobe.d -> /etc/static/modprobe.d
ludo@overdrive1 ~$ ls -l /etc/modprobe.d/
total 4
lrwxrwxrwx 1 root root 53 Jan 1 1970 zram.conf -> /gnu/store/srl5xij6hf4x6iksx98grb1spcj3rch1-zram.conf