[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
guix deploy: modinfo.sh doesn't exist error
From: |
Dmitry Matveyev |
Subject: |
guix deploy: modinfo.sh doesn't exist error |
Date: |
Sun, 22 Jan 2023 21:20:49 +0600 |
User-agent: |
mu4e 1.8.13; emacs 28.2.50 |
I'm trying to use guix deploy to install a Guix System at vultr.com
using a minimal iso image file of Guix System. So I do:
1. Create a minimal ISO image using guix system
2. Boot the ISO image on a remote server
3. Use guix deploy to install the system
I fail at step 3 with "modinfo.sh doesn't exist" error. Below is (1) the
end of the guix deploy command output and (2) my complete instruction of
what I do up to guix deploy command.
I use Guix version d6f1b9487da3e6f9c3ef49dea9c97c0408a25777 on Arch Linux.
The end of guix deploy command is:
================================================================================
building /gnu/store/m6vv3zqf792spnc9fmsnbbfah1cyjx35-grub.cfg.drv...
building
/gnu/store/sw9rqrsdqlz5mqxji9wk7i7v30q6mgl2-install-bootloader.scm.drv...
building /gnu/store/nyb01ypw9wbhvk1yqzgpd1brydc15llq-remote-exp.scm.drv...
guix deploy: sending 3 store items (0 MiB) to '10.10.255.50'...
guix deploy: error: failed to deploy vm: failed to install bootloader on
'70.34.254.49':
%exception #<inferior-object #<&message message:
"'/gnu/store/ch9q9w5zbvgq8srr6dscq6hdf03pfqb4-grub-efi-2.06/sbin/grub-install
--boot-directory //boot --bootloader-id=Guix --efi-directory/boot/efi'
exited with status 1; output follows:\n\n
/gnu/store/ch9q9w5zbvgq8srr6dscq6hdf03pfqb4-grub-efi-2.06/sbin/grub-install:
error:
/gnu/store/ch9q9w5zbvgq8srr6dscq6hdf03pfqb4-grub-efi-2.06/lib/grub/i386-pc/modinfo.sh
doesn't exist. Please specify --target or --directory.\n">>
================================================================================
The complete instruction of my current deployment process:
================================================================================
# How to set up Guix System on VPS
## Preparation
We need to have basic things for setting up.
1. Set up DNS record for future HTTPS support, for example, on
<https://porkbun.com>.
2. Register at the hosting provider site, for example, on <https://vultr.com>.
3. If not using the Guix System as your desktop operating system, install Guix
on your system as a package manager
<https://guix.gnu.org/manual/en/html_node/Installation.html>.
## Create and deploy the first image
1. Create a new directory for this deployment and `cd` there.
2. Generate ssh keys for authentication: run `ssh-keygen`, choose to store them
in the current directory `./`.
3. Copy this to `base_vm.scm`
``` scm
(use-modules (gnu))
(use-service-modules networking ssh)
(use-package-modules bootloaders ssh)
(operating-system
(host-name "vm")
(locale "en_US.utf8")
(timezone "Etc/UTC")
(bootloader (bootloader-configuration
(bootloader grub-bootloader)
(targets '("/dev/vda"))
(terminal-outputs '(console))))
(file-systems (cons (file-system
(mount-point "/")
(device "/dev/vda1")
(type "ext4"))
%base-file-systems))
(services
(append (list (service dhcp-client-service-type)
(service openssh-service-type
(openssh-configuration
(openssh openssh-sans-x)
(password-authentication? #f)
(permit-root-login #t)
(authorized-keys
;; Authorise our SSH key.
`(("root" ,(local-file "id_rsa.pub")))))))
%base-services)))
```
4. Use a minimal config in `base_vm.scm` to generate the base image of the
operating system, this will take a while on the very first run. Note that you
might need to change `--image-type` to something else like `qcow2` if the
hosting provider only supports limited options. See all available formats
with `guix system --list-image-types`.
```
guix system image --save-provenance --image-type=iso9660 base_vm.scm
```
At the very end there will be a path to the generated image such as
```
/gnu/store/6ab54m88rfbdankmacrgpcm9gzzbmi1v-image.iso
```
5. Upload this image to the hosting provider. In Vultr it is required to put it
online, for example, to <https://dropbox.com> as it allows 2 GB free
space. Only then it can be added as an iso image in a separate step.
6. Choose options for the virtual server, select the uploaded image and
instantiate the system.
7. Try logging in with ssh, for example:
```
ssh -i id_rsa root@10.10.142.48
```
8. If booted from iso on Vultr, it is necessary to partition the disk too:
``` shell
fdisk /dev/vda
# Create new GPT table
g
# Create partition for /boot, set size to 300 MB and change its type to UEFI
n
+300M
t
uefi
# Create partition for root partition for all the remaining space
n
# Press Enter many times
t
2
# This is "Linux root (x86-64)
4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709
# Check that everything is good
p
# Write partitions and quit
w
```
9. If everything is successful, quit with Ctrl+D.
10. Generate Guix signing keys with `sudo guix archive --generate-key`, now they
are available at `/etc/guix`.
11. Save this template to `first_deploy.scm`:
```scm
(use-modules (gnu) (guix))
(use-service-modules networking ssh admin)
(use-package-modules bootloaders ssh)
(define os
(operating-system
(host-name "vm")
(locale "en_US.utf8")
(timezone "Etc/UTC")
(bootloader (bootloader-configuration
(bootloader grub-efi-bootloader)
(targets '("/boot/efi"))))
(file-systems (append
(list (file-system
(device "/dev/vda2")
(mount-point "/")
(type "ext4"))
(file-system
(device "/dev/vda1")
(mount-point "/boot/efi")
(type "vfat")))
%base-file-systems))
(services
(append
(list (service openssh-service-type
(openssh-configuration
(openssh openssh-sans-x)
(password-authentication? #f)
(permit-root-login #t)
(authorized-keys
`(("root" ,(local-file "id_rsa.pub"))))))
(service dhcp-client-service-type)
(service unattended-upgrade-service-type))
(modify-services %base-services
;; The server must trust the Guix packages you build. If
you add the signing-key
;; manually it will be overridden on next `guix deploy`
giving
;; "error: unauthorized public key". This automatically
adds the signing-key.
(guix-service-type config =>
(guix-configuration
(inherit config)
(authorized-keys
(append (list (local-file
"/etc/guix/signing-key.pub"))
%default-authorized-guix-keys)))))))))
(list (machine
(operating-system os)
(environment managed-host-environment-type)
(configuration (machine-ssh-configuration
(host-name "71.41.243.84")
(system "x86_64-linux")
;; Update this after seeing an error running `guix
deploy`.
(host-key "ssh-ed25519
AAAAC3N123456789mZwG+Y8Xk+XN123456789GNJ1RU3BkuUU")
(user "root")
;; Use this key to communicate with the machine.
(identity "id_rsa")))))
```
12. Try deploying with `guix deploy first_deploy.scm`, you will see an error
that
host key doesn't match, it is expected, update it in the machine
configuration accordingly:
```
(host-key "ssh-ed25519 AAAAC3N123456789mZwG+Y8Xk+XN123456789GNJ1RU3BkuUU")
```
13. Re-run `guix deploy first_deploy.scm` to finally install the system. Note
that you may need to run it several times in case it fails because of errors
such as "Throw to key `guile-ssh-error' with args `("channel-open-session"
"Channel openingfailure: channel 67 error (2) open failed" #<input-output:
channel (closed) 7f96971b8760> #f)'" - this is probably a transient error,
see discussion at <https://issues.guix.gnu.org/56709>.
## References
- <https://guix.gnu.org/blog/2019/managing-servers-with-gnu-guix-a-tutorial/> -
blog post on Guix
- <https://othacehe.org/hosting-a-blog-using-only-scheme.html> - deploying a
blog
- <https://stumbles.id.au/getting-started-with-guix-deploy.html> - deploying on
Digital Ocean Guix->Guix
- <https://wiki.pantherx.org/Installation-digital-ocean/> - deploying on Digital
Debian->Guix
- <https://paste.sr.ht/~akagi/04c11305b19b1b25d0e61a88f6892057dee01b67> -
example config
================================================================================
Best,
Dmitry.
- guix deploy: modinfo.sh doesn't exist error,
Dmitry Matveyev <=