LINUX.ORG.RU

Guix System, LVM на LUKS

 , , , ,


0

3

Доброго времени!

Пробую Guix System. Планирую на лаптоп, но пока на виртуалке.

Установка завершилась успешно. При загрузке GRUB не видит корень: 0, 1, 2. Исправил руками 3, ядро загрузилось.

Далее паника ядра — не находит vg0: 4, 5. Пароль после загрузчика я не вводил => LUKS, вероятно, не открыт.

В Guile я пока не силён, помогите разобраться...

1. Таблица разделов:

Dev           GiB    Struct    Mount point
sda
   1            .25  fat32     /boot/efi
   2            .5   ext4      /boot
   3          15+    luks/lvm
    vg0-swap   1     swap
    vg0-root  10     ext4      /
    vg0-home   4+    ext4      /home

2. LUKS и LVM созданы так:

# cryptsetup luksFormat /dev/sda3
# cryptsetup luksOpen /dev/sda3 pv0
# pvcreate /dev/mapper/pv0
# vgcreate vg0 /dev/mapper/pv0
# lvcreate -L 1g -n swap vg0
# lvcreate -L 10g -n root vg0
# lvcreate -l 100%FREE -n home vg0

3. config.scm на основе lightweight-desktop.scm: https://pastebin.pl/view/60140ed3


вместо pastebin

; /etc/config.scm

(use-modules (gnu) (gnu system nss))
(use-service-modules desktop)
(use-package-modules bootloaders certs emacs emacs-xyz ratpoison suckless wm
                     xorg)

(operating-system
  (host-name "antelope")
  (timezone "Europe/Moscow")
  (locale "en_US.utf8")

  (bootloader (bootloader-configuration
                (bootloader grub-efi-bootloader)
                (target "/boot/efi")))

  (mapped-devices
   (list (mapped-device
          (source "/dev/sda3")
          (target "pv0")
          (type luks-device-mapping))
         (mapped-device
          (source "vg0")
          (targets (list "vg0-swap" "vg0-root" "vg0-home"))
          (type lvm-device-mapping))))

  (file-systems (append
                 (list (file-system
                         (device "/dev/mapper/vg0-root")
                         (mount-point "/")
                         (type "ext4"))
                       (file-system
                         (device "/dev/mapper/vg0-home")
                         (mount-point "/home")
                         (type "ext4"))
                       (file-system
                         (device "/dev/sda2")
                         (mount-point "/boot")
                         (type "ext4"))
                       (file-system
                         (device "/dev/sda1")
                         (mount-point "/boot/efi")
                         (type "vfat")))
                 %base-file-systems))

  (users (cons (user-account
                (name "niko")
                (comment "Nikolay")
                (group "users")
                (supplementary-groups '("wheel" "netdev"
                                        "audio" "video")))
               %base-user-accounts))

  (packages (append (list
                     ratpoison i3-wm i3status dmenu
                     emacs emacs-exwm emacs-desktop-environment
                     xterm
                     nss-certs)
                    %base-packages))

  (services %desktop-services)

  (name-service-switch %mdns-host-lookup-nss))
Evenik ()
Ответ на: комментарий от boowai

Еще может быть проблема, что у тебя grub старый, который luks2 не понимает

После ручной загрузки модулей, grub находит и запускает ядро, но дальше что-то идёт не так (не находится vg0, kernel panic).

Вопрос: что именно происходит и как починить?

Evenik ()

Ещё раз перечитал конфиг

Кажется, что нет зависимости LVM от LUKS. Обращение к vg0 происходит раньше, чем расшифровка /dev/sda3...

Достаточно ли, что запись о LUKS следует раньше записи об LVM?

Evenik ()
Последнее исправление: Evenik (всего исправлений: 3)
Ответ на: комментарий от shleemypants

Меня всегда интересовало, как ты Guix OS планируешь завести на реальном железе, если там очень маленький список поддерживаемого железа?

В моём MBA6,1 блобов требует только wifi (решается usb-адаптером) и камера (не пользуюсь). В крайнем случае есть nonguix...

Evenik ()
Последнее исправление: Evenik (всего исправлений: 1)
Ответ на: комментарий от shleemypants

Большой список железа

Меня всегда интересовало, как ты Guix OS планируешь завести на реальном железе, если там очень маленький список поддерживаемого железа?

Тривиально же. Я вместо linux-libre использую ванильный Linux (разве что патчу для поддержки Reiser4) и блобовые фирмвари. Полёт на реальном ноутбуке нормальный.

Camel ★★★★★ ()
Ответ на: Ещё раз перечитал конфиг от Evenik

Моя компетенция всё

Я тоже хотел поставить Guix на LVM на LUKS’е, но я ещё Reiser4 хотел. Экспериментировал на виртуалке, отказывался по чуть-чуть от хотелок. Сейчас Guix стоит на LVM’е без LUKS’а, и Reiser4 в ядре есть, но не используется (потому что GRUB2 не умеет в Reiser4, а для grub-efi нужен именно такой GRUB, а использовать grub-legacy не хочу). LVM на LUKS’е я так и не использовал.

Camel ★★★★★ ()
Ответ на: комментарий от shleemypants

Грубо

В nonguix’е есть пакеты разных фирмварей, у меня есть firmware-nonfree со всеми фирмварями разом. Решение грубое, но рабочее. gitlab.com/backtick

Camel ★★★★★ ()
Последнее исправление: Camel (всего исправлений: 1)
Ответ на: Дастацно от Camel

ИМХО, ты подразумеваешь, что неплохо бы самому это прикрутить (как сделал ты)? Сделать свой channel, где следить за версией ядра и всего барахла, которое ты считаешь нужным? Если так, тогда как пример твой channel прекрасно подойдёт.

И тебе не кажется, что gitlab тормоз? Или это моё предвзятое мнение?

shleemypants ()
Ответ на: dependencies от Camel

Хорошая идея, попробую позже

Наверное, ссылаться нужно на target:

...
  (mapped-devices
   (list (mapped-device
          (source "/dev/sda3")
          (target "pv0")
          (type luks-device-mapping))
         (mapped-device
          (source "vg0")
          (targets (list "vg0-swap" "vg0-root" "vg0-home"))
          (type lvm-device-mapping))))

  (file-systems (append
                 (list (file-system
                         (device "/dev/mapper/vg0-root")
                         (mount-point "/")
                         (type "ext4")
                         (dependencies (list "pv0")))
                       (file-system
                         (device "/dev/mapper/vg0-home")
                         (mount-point "/home")
                         (type "ext4"))
                       (file-system
                         (device "/dev/sda2")
                         (mount-point "/boot")
                         (type "ext4"))
                       (file-system
                         (device "/dev/sda1")
                         (mount-point "/boot/efi")
                         (type "vfat")))
                 %base-file-systems))
...
Evenik ()
Ответ на: Хорошая идея, попробую позже от Evenik

mapped-device:

Я сам не пробовал, но может что-то такое сработает:

(file-systems (append
                 (list (file-system
                         (device "/dev/mapper/vg0-root")
                         (mount-point "/")
                         (type "ext4")
                         (dependencies (mapped-device
          (source "vg0")
          (targets (list "vg0-swap" "vg0-root" "vg0-home"))
          (type lvm-device-mapping))))

В руководстве же сказано, что в депенц нужно mapped-device совать.

Camel ★★★★★ ()
Ответ на: Как оно? от Camel

Нечем хвастаться

Ещё и не получается написать в список рассылки...

MIME-Version: 1.0
Date: Fri, 21 May 2021 08:58:07 +0300
Message-ID: <CABZUii5KiobriuZMi_whCRYZm3Eab7CrTGLpvdFV4NxsQpL0zA@mail.gmail.com>
Subject: How to install Guix System on LVM on LUKS?
From: Nikolay *** <***@gmail.com>
To: help-guix@gnu.org
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Hi geeks,

I try to install Guix System on LVM on LUKS. Installation succeeded,
but the system can't boot.

When powered on, GRUB stops with:

> Booting `GNU with Linux-Libre 5.11.15'
> error: no such device: /gnu/store/5axms2d6yqx1zqbcjn3cl015cbcaf7i1-linux-=
libre-5.11.15/bzImage.
> error: file `/gnu/store/5axms2d6yqx1zqbcjn3cl015cbcaf7i1-linux-libre-5.11=
.15/bzImage' not found.
> error: you need to load the kernel first.
> Press any key to continue...

Ok, I fixed that problem by doing:

> grub> ls
> (proc) (hd0) (hd0,gpt3) (hd0,gpt2) (hd0,gpt1)
> grub> insmod cryptodisk
> grub> insmod luks
> grub> insmod lvm
> grub> cryptomount (hd0,gpt3)
> Attempting to decrypt master key...
> Enter passphrase for hd0,gpt3 (7bf9bff8229847978d253d7a0ea31ae8):
> Slot 0 opened
> grub> ls
> (crypto0) (proc) (hd0) (hd0,gpt3) (hd0,gpt2) (hd0,gpt1) (lvm/vg0-home) (l=
vm/vg0-root) (lvm/vg0-swap)

However, now I get the following error:

> Welcome, this is GNU's early boot Guile.
> Use '--repl' for an initrd REPL.
>
> loading kernel modules...
>   Volume group "vg0" not found
>   Cannot process volume group vg0
> ice-9/boot-9.scm:1669:16: In procedure raise-exception:
> pre-mount actions failed

Do I need file-system-dependencies? Is there an example? Help me please...

*** Appx.1 Block devices list
> Dev              GiB    Struct  Mount point
> sda1               .25  fat32   /boot/efi
> sda2               .5   ext4    /boot
> sda3             15+    luks
> mapper/pv0              luks opened =3D lvm physical volume
> mapper/vg0-swap   1     swap
> mapper/vg0-root  10     ext4    /
> mapper/vg0-home   4+    ext4    /home

*** Appx.2 config.scm: bootloader, mapped-devices and file-systems
> (bootloader (bootloader-configuration
>               (bootloader grub-efi-bootloader)
>               (target "/boot/efi")))
>
> (mapped-devices
>  (list (mapped-device
>         (source "/dev/sda3")
>         (target "pv0")
>         (type luks-device-mapping))
>        (mapped-device
>         (source "vg0")
>         (targets (list "vg0-swap" "vg0-root" "vg0-home"))
>         (type lvm-device-mapping))))
>
> (file-systems (append
>                (list (file-system
>                        (device "/dev/mapper/vg0-root")
>                        (mount-point "/")
>                        (type "ext4"))
>                      (file-system
>                        (device "/dev/mapper/vg0-home")
>                        (mount-point "/home")
>                        (type "ext4"))
>                      (file-system
>                        (device "/dev/sda2")
>                        (mount-point "/boot")
>                        (type "ext4"))
>                      (file-system
>                        (device "/dev/sda1")
>                        (mount-point "/boot/efi")
>                        (type "vfat")))
>                %base-file-systems))

*** Appx.3 grub.cfg: menuentry
> menuentry "GNU with Linux-Libre 5.11.15" {
>   search --file --set /gnu/store/5axms2d6yqx1zqbcjn3cl015cbcaf7i1-linux-l=
ibre-5.11.15/bzImage
>   linux /gnu/store/5axms2d6yqx1zqbcjn3cl015cbcaf7i1-linux-libre-5.11.15/b=
zImage --root=3D/dev/mapper/vg0-root --system=3D/gnu/store/my6gn1kqajhi720s=
3x5h1gjj9n2y2hs7-system --load=3D/gnu/store/my6gn1kqajhi720s3x5h1gjj9n2y2hs=
7-system/boot modprobe.blacklist=3Dusbmouse,usbkbd quiet
>   initrd /gnu/store/vwyf16g511h8ls44fabrqldq3nfhxljw-raw-initrd/initrd.cp=
io.gz
> }

Best regards,
Nikolay
Evenik ()
Последнее исправление: Evenik (всего исправлений: 1)

RTFM

Я — слоупок. Написано же английским по белому:

(dependencies mapped-devices)

Всё. Сам список mapped-devices определяется выше.

И voilà — теперь Guix готов к моему лаптопу!

...а с загрузчиком это бага, да.

Evenik ()
Последнее исправление: Evenik (всего исправлений: 2)
Ответ на: config.scm от Camel

Конечно, спасибо за помощь:

(bootloader (bootloader-configuration
              (bootloader grub-efi-bootloader)
              (target "/boot/efi")))

(mapped-devices
  (list (mapped-device
          (source "/dev/sda3")
          (target "pv0")
          (type luks-device-mapping))
        (mapped-device
          (source "vg0")
          (targets (list "vg0-swap" "vg0-root" "vg0-home"))
          (type lvm-device-mapping))))

(file-systems (append
                (list (file-system
                       (device "/dev/mapper/vg0-root")
                       (mount-point "/")
                       (type "ext4")
                       (needed-for-boot? #t)
                       (dependencies mapped-devices))
                     (file-system
                       (device "/dev/mapper/vg0-home")
                       (mount-point "/home")
                       (type "ext4"))
                     (file-system
                       (device "/dev/sda2")
                       (mount-point "/boot")
                       (type "ext4")
                       (needed-for-boot? #t))
                     (file-system
                       (device "/dev/sda1")
                       (mount-point "/boot/efi")
                       (type "vfat")))
                %base-file-systems))

Вероятно, needed-for-boot? — лишнее.

P.S.: А для guix pull не много использовать ~2GiB RAM?

Evenik ()
Последнее исправление: Evenik (всего исправлений: 2)