Bug 39581 - Не монтируется /home после загрузки ядра
Summary: Не монтируется /home после загрузки ядра
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: installer-common-stage2 (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Anton V. Boyarshinov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-01-21 15:55 MSK by Олег Соловьев
Modified: 2021-01-29 11:25 MSK (History)
9 users (show)

See Also:


Attachments
blkid+lsblk (28.40 KB, image/png)
2021-01-21 17:49 MSK, Олег Соловьев
no flags Details
экран загрузки (105.76 KB, image/jpeg)
2021-01-25 14:51 MSK, Alexey Gladkov
no flags Details
patch (1.06 KB, patch)
2021-01-26 17:28 MSK, Олег Соловьев
no flags Details | Diff
patch (1.41 KB, patch)
2021-01-27 14:03 MSK, Олег Соловьев
no flags Details | Diff
patch (1.41 KB, patch)
2021-01-28 09:45 MSK, Олег Соловьев
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Олег Соловьев 2021-01-21 15:55:22 MSK
Разбивка:
LVM, внутри него хомяк и корень. Хомяк шифруемый, корень - нет.
После установки система не грузится и вываливается в emergency mode после таймаута на монтирование хомяка.

revert 7407158c71cbb645545b1c4ca4219542b4106a06 возвращает возможность загрузить систему.
Comment 1 Alexey Gladkov 2021-01-21 16:02:18 MSK
Упомянутый коммит исправлял другую конфигурацию.
Comment 2 Олег Соловьев 2021-01-21 16:08:50 MSK
(Ответ для Alexey Gladkov на комментарий #1)
> Упомянутый коммит исправлял другую конфигурацию.

Какую конфигурацию?
В commit message не упоминается причина такого изменения, а в changelog упоминаний каких-либо багов напротив этого изменения нет.
Comment 3 Alexey Gladkov 2021-01-21 16:14:04 MSK
У меня есть тест подобную конфигурацию:

/dev/sdb1: LABEL="SWAP" UUID="10ee040d-d05a-4f3a-9ba1-ce75dd8b695a" TYPE="swap" PARTUUID="f2371555-01"
/dev/sdb2: UUID="134f8f75-84d4-4035-bdd7-fcb83fec6843" TYPE="crypto_LUKS" PARTUUID="f2371555-02"
/dev/sdb3: LABEL="ROOT" UUID="771dc223-dc94-4cf0-a141-0d785d9e5b1e" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="f2371555-03"

он успешно проходит. возможно дело в присутствии lvm.
Comment 4 Alexey Gladkov 2021-01-21 16:33:55 MSK
(Ответ для Олег Соловьев на комментарий #2)
> (Ответ для Alexey Gladkov на комментарий #1)
> > Упомянутый коммит исправлял другую конфигурацию.
> 
> Какую конфигурацию?

Как раз ту, которую я описал в комментарии 3. Если сделать, то что вы предлагаете, то тест test-luks-home сломается.
Comment 5 Олег Соловьев 2021-01-21 16:36:23 MSK
(Ответ для Alexey Gladkov на комментарий #4)
> Как раз ту, которую я описал в комментарии 3. Если сделать, то что вы
> предлагаете, то тест test-luks-home сломается.

Попробуй с ней установить регулярку
Comment 6 Олег Соловьев 2021-01-21 16:38:59 MSK
(Ответ для Олег Соловьев на комментарий #5)
> (Ответ для Alexey Gladkov на комментарий #4)
> > Как раз ту, которую я описал в комментарии 3. Если сделать, то что вы
> > предлагаете, то тест test-luks-home сломается.
> 
> Попробуй с ней установить регулярку

попробую *
Comment 7 Олег Соловьев 2021-01-21 17:49:02 MSK
Created attachment 9142 [details]
blkid+lsblk

У меня система загрузилась после установки и отката 7407158
Comment 8 Alexey Gladkov 2021-01-21 18:04:36 MSK
Я только что проверил этот тест с этим коммитом и без. Без этого коммита тест не проходит.
Comment 9 Alexey Gladkov 2021-01-21 18:58:42 MSK
(Ответ для Олег Соловьев на комментарий #0)
> Разбивка:
> LVM, внутри него хомяк и корень. Хомяк шифруемый, корень - нет.

Расскажите поподробнее об этой конфигурации, чтобы её можно было в rescue-mode создать на пустом диске или дисках.
Comment 10 Олег Соловьев 2021-01-22 09:55:36 MSK
(Ответ для Alexey Gladkov на комментарий #9)
> (Ответ для Олег Соловьев на комментарий #0)
> > Разбивка:
> > LVM, внутри него хомяк и корень. Хомяк шифруемый, корень - нет.
> 
> Расскажите поподробнее об этой конфигурации, чтобы её можно было в
> rescue-mode создать на пустом диске или дисках.

Какая информация от меня требуется?
Comment 11 Alexey Gladkov 2021-01-22 13:12:47 MSK
(Ответ для Олег Соловьев на комментарий #10)
> > Расскажите поподробнее об этой конфигурации, чтобы её можно было в
> > rescue-mode создать на пустом диске или дисках.
> 
> Какая информация от меня требуется?

Как конкретно разбит диск, что в lvm, где luks ?
Какая версия ядра и утилит ?
Comment 12 Олег Соловьев 2021-01-22 14:33:09 MSK
(Ответ для Alexey Gladkov на комментарий #11)
> (Ответ для Олег Соловьев на комментарий #10)
> > > Расскажите поподробнее об этой конфигурации, чтобы её можно было в
> > > rescue-mode создать на пустом диске или дисках.
> > 
> > Какая информация от меня требуется?
> 
> Как конкретно разбит диск, что в lvm, где luks?
/dev/sda1: UUID="bqJ4mJ-CiSf-yJPD-g3O8-ASaL-Veh4-McWsoS" TYPE="LVM2_member"
/dev/mapper/vg-root: UUID="7c4cfbe7-7446-4724-840b-5b0be0799a61" BLOCK_SIZE="4096" TYPE="ext4"
/dev/mapper/vg-home: UUID="8e43974d-ddbc-1b4e-9c24-87fffcd7d0ba" TYPE="crypto_LUKS"

NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0   32G  0 disk
└─sda1        8:1    0   32G  0 part
  ├─vg-root 253:0    0   16G  0 lvm  /
  └─vg-home 253:1    0   16G  0 lvm
sr0          11:0    1 1024M  0 rom

> Какая версия ядра и утилит ?
Linux comp-celeron-cpu-ade534 5.4.88-std-def-alt1 #1 SMP Sat Jan 9 19:44:54 UTC 2021 x86_64 GNU/Linux

lvm2-2.03.10-alt1.x86_64
cryptsetup-2.3.4-alt1.x86_64
Comment 13 Олег Соловьев 2021-01-22 14:41:12 MSK
PS как запустить тесты в пакете? Там нет никакой документации
Comment 14 Олег Соловьев 2021-01-22 14:54:42 MSK
На ядре 5.4.91-std-def та же история.

# uname -a

Linux comp-celeron-cpu-ade534 5.4.91-std-def-alt1 #1 SMP Wed Jan 20 08:58:11 UTC 2021 x86_64 GNU/Linux
Comment 15 Олег Соловьев 2021-01-22 15:02:43 MSK
На работающей системе:
# blkid
/dev/sda1: UUID="bqJ4mJ-CiSf-yJPD-g3O8-ASaL-Veh4-McWsoS" TYPE="LVM2_member"
/dev/mapper/vg-root: UUID="7c4cfbe7-7446-4724-840b-5b0be0799a61" BLOCK_SIZE="4096" TYPE="ext4"
/dev/mapper/vg-home: UUID="8e43974d-ddbc-1b4e-9c24-87fffcd7d0ba" TYPE="crypto_LUKS"
/dev/mapper/dm-1-luks: UUID="8afe3af1-4d64-495d-9c8e-826003cc7008" BLOCK_SIZE="4096" TYPE="ext4"

# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda               8:0    0   32G  0 disk
└─sda1            8:1    0   32G  0 part
  ├─vg-root     253:0    0   16G  0 lvm   /
  └─vg-home     253:1    0   16G  0 lvm
    └─dm-1-luks 253:2    0   16G  0 crypt /home
sr0              11:0    1 1024M  0 rom

# cat /etc/fstab
proc            /proc                   proc    nosuid,noexec,gid=proc          0 0
devpts          /dev/pts                devpts  nosuid,noexec,gid=tty,mode=620  0 0
tmpfs           /tmp                    tmpfs   nosuid                          0 0
UUID=7c4cfbe7-7446-4724-840b-5b0be0799a61       /       ext4    relatime        1       1
UUID=8afe3af1-4d64-495d-9c8e-826003cc7008       /home   ext4    nosuid,relatime 1       2
Comment 16 Alexey Gladkov 2021-01-22 15:28:01 MSK
(Ответ для Олег Соловьев на комментарий #13)
> PS как запустить тесты в пакете? Там нет никакой документации

$ ./configure --enable-local-build
$ cd tests
$ make build
$ make test-luks-home

или

$ ./configure --enable-local-build
$ make -C tests check
Comment 17 Alexey Gladkov 2021-01-22 15:28:38 MSK
(Ответ для Олег Соловьев на комментарий #15)
> На работающей системе:
> # blkid
> /dev/sda1: UUID="bqJ4mJ-CiSf-yJPD-g3O8-ASaL-Veh4-McWsoS" TYPE="LVM2_member"
> /dev/mapper/vg-root: UUID="7c4cfbe7-7446-4724-840b-5b0be0799a61"
> BLOCK_SIZE="4096" TYPE="ext4"
> /dev/mapper/vg-home: UUID="8e43974d-ddbc-1b4e-9c24-87fffcd7d0ba"
> TYPE="crypto_LUKS"
> /dev/mapper/dm-1-luks: UUID="8afe3af1-4d64-495d-9c8e-826003cc7008"
> BLOCK_SIZE="4096" TYPE="ext4"
> 
> # lsblk
> NAME            MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
> sda               8:0    0   32G  0 disk
> └─sda1            8:1    0   32G  0 part
>   ├─vg-root     253:0    0   16G  0 lvm   /
>   └─vg-home     253:1    0   16G  0 lvm
>     └─dm-1-luks 253:2    0   16G  0 crypt /home
> sr0              11:0    1 1024M  0 rom
> 
> # cat /etc/fstab
> proc            /proc                   proc    nosuid,noexec,gid=proc      
> 0 0
> devpts          /dev/pts                devpts 
> nosuid,noexec,gid=tty,mode=620  0 0
> tmpfs           /tmp                    tmpfs   nosuid                      
> 0 0
> UUID=7c4cfbe7-7446-4724-840b-5b0be0799a61       /       ext4    relatime    
> 1       1
> UUID=8afe3af1-4d64-495d-9c8e-826003cc7008       /home   ext4   
> nosuid,relatime 1       2

спасибо. я попробую сделать тест и воспроизвести.
Comment 18 Alexey Gladkov 2021-01-22 16:11:55 MSK
(Ответ для Alexey Gladkov на комментарий #16)
> > PS как запустить тесты в пакете? Там нет никакой документации
> 
> $ ./configure --enable-local-build

ой. для вас этой опции не нужно.
Comment 19 Alexey Gladkov 2021-01-22 16:46:20 MSK
$ lsblk
NAME           MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda              8:0    0    1G  0 disk 
`-sda1           8:1    0 1024M  0 part /
sdb              8:16   0    1G  0 disk 
`-mygroup-home 252:0    0  1.5G  0 lvm  
sdc              8:32   0    1G  0 disk 
|-mygroup-home 252:0    0  1.5G  0 lvm  
`-mygroup-root 252:1    0  532M  0 lvm  /root/rootfs

с ядром 5.4.7-un-def-alt1 не воспроизводится.
Comment 20 Alexey Gladkov 2021-01-22 17:05:09 MSK
Попробовал воспроизвести с ядром std-def-5.4.91-alt1. Пока не получается.
Comment 21 Олег Соловьев 2021-01-25 11:01:31 MSK
ping?
Comment 22 Alexey Gladkov 2021-01-25 14:49:35 MSK
После обсуждения в telegram выяснили, что make-initrd успешно находит корень системы и загружает его, но он не пытается расшифровать и смонтировать home из-за чего уже в живой системе происходит emergency mode.

Указанный коммит как раз и меняет порядок проверки разделов, чтобы не пытаться расшифровывать разделы, которые не участвуют в загрузке корня.

Это поведение не ошибка.

Нужно выяснять почему systemd в живой системе не пытается расшифровать и смонтировать home.
Comment 23 Олег Соловьев 2021-01-25 14:51:23 MSK
(Ответ для Alexey Gladkov на комментарий #22)
> После обсуждения в telegram выяснили, что make-initrd успешно находит корень
> системы и загружает его, но он не пытается расшифровать и смонтировать home
> из-за чего уже в живой системе происходит emergency mode.
> 
> Указанный коммит как раз и меняет порядок проверки разделов, чтобы не
> пытаться расшифровывать разделы, которые не участвуют в загрузке корня.
> 
> Это поведение не ошибка.
> 
> Нужно выяснять почему systemd в живой системе не пытается расшифровать и
> смонтировать home.

подтверждаю.
Comment 24 Alexey Gladkov 2021-01-25 14:51:40 MSK
Created attachment 9147 [details]
экран загрузки
Comment 25 Gleb F-Malinovskiy 2021-01-25 16:58:15 MSK
В этом коде
http://git.altlinux.org/gears/i/installer.git?p=installer.git;a=blob;f=installer/preinstall.d/08-crypttab.sh;hb=HEAD

написано, что если у пользователя / на devmapper-е (любом), то нужно включить модуль luks в initrd, а *все* последующие устройства обрабатывать вообще не нужно.

Олег, а в получившейся после установки системе вообще есть что-то в /etc/crypttab?
Comment 26 Alexey Gladkov 2021-01-25 17:15:42 MSK
Вот этот код в корне неправильный:

http://git.altlinux.org/gears/i/..git?p=installer.git;a=blob;f=installer/preinstall.d/08-crypttab.sh;hb=HEAD

uuid=$(blkid -o value -s UUID "$device")
fgrep "$uuid" "/tmp/fstab" &> /dev/null || continue
# we should add luks feature to initrd if / is placed on luks
# or create /etc/crypttab otherwise
if grep -qe ".*$uuid.*[^[:alnum:]]/[^[:alnum:]]" "/tmp/fstab"; then
        echo 'FEATURES += luks' >> $destdir/etc/initrd.mk
         exit 0
fi
 ... 
luks_uuid=$(blkid -o value -s UUID "$device_luks")

Наличие /dev/dm-* не значит наличие корня на luks, это может быть корнем на lvm, что в данном случае и происходит. UUID luks раздела получается после проверки fstab. Поэтому `FEATURES += luks` попадает в initrd.mk даже если фича там не нужна.

`exit 0` в данном цикле неправильно делать т.к. это помешает заполнить /etc/crypttab. Утилита find не сортирует свой вывод. Порядок обхода устройств может быть любым.

Также стоило бы написать:

if [ "$(findmnt -s -n --source "UUID=$uuid" -o TARGET)" = / ]; then
   ...
fi

Кроме того, нет никакого смысла искать все устройства в fstab. Проще прочитать сам fstab и поискать там.
На вскидку вот так:

findmnt -s -n -l -o TARGET
findmnt -n -o MAJ:MIN "$mntpoint"
ls -1 /sys/dev/block/$MAJMIN/slaves/
Comment 27 Олег Соловьев 2021-01-25 17:20:59 MSK
(Ответ для Gleb F-Malinovskiy на комментарий #25)
> В этом коде
> http://git.altlinux.org/gears/i/installer.git?p=installer.git;a=blob;
> f=installer/preinstall.d/08-crypttab.sh;hb=HEAD
> 
> написано, что если у пользователя / на devmapper-е (любом), то нужно
> включить модуль luks в initrd, а *все* последующие устройства обрабатывать
> вообще не нужно.
> 
> Олег, а в получившейся после установки системе вообще есть что-то в
> /etc/crypttab?

Этот файл вообще отсутствует (ставил Workstation K beta от 20200811 + апгрейд до сизифа)
Comment 28 Alexey Gladkov 2021-01-25 17:40:00 MSK
(Ответ для Олег Соловьев на комментарий #27)
> > Олег, а в получившейся после установки системе вообще есть что-то в
> > /etc/crypttab?
> 
> Этот файл вообще отсутствует (ставил Workstation K beta от 20200811 +
> апгрейд до сизифа)

А /etc/crypttab может помочь systemd ?
Если его создать руками, то система загрузится ?
Comment 29 Leonid Krivoshein 2021-01-26 04:47:31 MSK
(In reply to Олег Соловьев from comment #27)
> (Ответ для Gleb F-Malinovskiy на комментарий #25)
> > Олег, а в получившейся после установки системе вообще есть что-то в
> > /etc/crypttab?
> 
> Этот файл вообще отсутствует (ставил Workstation K beta от 20200811 +
> апгрейд до сизифа)
/etc/crypttab не принадлежит какому-либо пакету, т.е. он создаётся инсталлятором либо администратором после установки. Должен стоять пакет cryptsetup. Он установлен в системе? А такие файлы есть в наличии:

1) /etc/rc.d/init.d/cryptdisks.functions
2) /etc/sysconfig/cryptdisks

(In reply to Alexey Gladkov from comment #28)
> А /etc/crypttab может помочь systemd ?
> Если его создать руками, то система загрузится ?
За запуск скриптов SysV из пакета cryptsetup, при их наличии, отвечает пакет startup, в зависимости от содержимого файла конфигурации [2]. systemd не содержит соответствующих юнитов. Запускаются именно службы /etc/rc.d/scripts/cryptdisks после /etc/rc.d/scripts/cryptdisks-early. Первая обычно предназначена как раз для расшифровки корня в stage0 (initrd).

Заглянул по случаю в libevms плагин luks. Поддержки LUKS2 там нет, как и ожидалось, хотя именно этот более секьюрный вариант сейчас используется утилитой cryptsetup в консоли по умолчанию. Глядя на код, можно быть почти уверенным, что инсталлятор обрушится или повиснет, встретив сделанный руками LUKS2.
Comment 30 Олег Соловьев 2021-01-26 10:42:36 MSK
(Ответ для Leonid Krivoshein на комментарий #29)
> (In reply to Олег Соловьев from comment #27)
> > (Ответ для Gleb F-Malinovskiy на комментарий #25)
> > > Олег, а в получившейся после установки системе вообще есть что-то в
> > > /etc/crypttab?
> > 
> > Этот файл вообще отсутствует (ставил Workstation K beta от 20200811 +
> > апгрейд до сизифа)
> /etc/crypttab не принадлежит какому-либо пакету, т.е. он создаётся
> инсталлятором либо администратором после установки. Должен стоять пакет
> cryptsetup. Он установлен в системе? А такие файлы есть в наличии:
> 
> 1) /etc/rc.d/init.d/cryptdisks.functions
> 2) /etc/sysconfig/cryptdisks
Оба файла на месте
Comment 31 Олег Соловьев 2021-01-26 13:55:11 MSK
Похоже, проблема решается наличием в системе /etc/crypttab
Comment 32 Олег Соловьев 2021-01-26 14:58:19 MSK
На каком моменте исполняется 08-crypttab.sh и куда будет идти вывод, если поставить -x?
Comment 33 Антон Мидюков 2021-01-26 15:07:24 MSK
(Ответ для Олег Соловьев на комментарий #32)
> На каком моменте исполняется 08-crypttab.sh и куда будет идти вывод, если
> поставить -x?

08-crypttab.sh находится в preinstall.d, значит это шаг сохранения настроек. Сразу после установки пакетов. А вот куда пойдёт вывод, интересно самому.
Comment 34 Anton V. Boyarshinov 2021-01-26 15:08:33 MSK
(Ответ для Антон Мидюков на комментарий #33)
> (Ответ для Олег Соловьев на комментарий #32)
> > На каком моменте исполняется 08-crypttab.sh и куда будет идти вывод, если
> > поставить -x?
> 
> 08-crypttab.sh находится в preinstall.d, значит это шаг сохранения настроек.
> Сразу после установки пакетов. А вот куда пойдёт вывод, интересно самому.

Если я правильно понимаю, в один из логов, которые в этот момент находится в /tmp
Comment 35 Anton V. Boyarshinov 2021-01-26 15:10:31 MSK
(Ответ для Олег Соловьев на комментарий #32)
> На каком моменте исполняется 08-crypttab.sh и куда будет идти вывод, если
> поставить -x?

Вообще, может оказаться удобнее всего дождаться начала установки "дополнительного программного обеспечения", перейти на вторую консоль, остановить сигналом apt и отлаживать этт 08-crypttab.sh на этой второй консоли
Comment 36 Олег Соловьев 2021-01-26 15:13:47 MSK
(Ответ для Leonid Krivoshein на комментарий #29)
> Заглянул по случаю в libevms плагин luks. Поддержки LUKS2 там нет, как и
> ожидалось, хотя именно этот более секьюрный вариант сейчас используется
> утилитой cryptsetup в консоли по умолчанию. Глядя на код, можно быть почти
> уверенным, что инсталлятор обрушится или повиснет, встретив сделанный руками
> LUKS2.

Какие системы поддерживают LUKS2 при установке?
ЕМНИП, наш инсталлятор умеет только создавать/уничтожать LUKS.(Ответ для Anton V. Boyarshinov на комментарий #35)
> 
> Вообще, может оказаться удобнее всего дождаться начала установки
> "дополнительного программного обеспечения", перейти на вторую консоль,
> остановить сигналом apt и отлаживать этт 08-crypttab.sh на этой второй
> консоли

т.е. просто его запустить?
Comment 37 Gleb F-Malinovskiy 2021-01-26 15:15:45 MSK
(Ответ для Олег Соловьев на комментарий #32)
> На каком моменте исполняется 08-crypttab.sh и куда будет идти вывод, если
> поставить -x?

Да зачем?  И так же по коду всё понятно.  Что вы хотите отлаживать?
Comment 38 Олег Соловьев 2021-01-26 15:36:12 MSK
(Ответ для Gleb F-Malinovskiy на комментарий #37)
> (Ответ для Олег Соловьев на комментарий #32)
> > На каком моменте исполняется 08-crypttab.sh и куда будет идти вывод, если
> > поставить -x?
> 
> Да зачем?  И так же по коду всё понятно.  Что вы хотите отлаживать?

По коду не станет понятно, если, вместо $uuid прилетит что-либо неожиданное.
В моём случае там empty string.
Comment 39 Alexey Gladkov 2021-01-26 15:42:27 MSK
(Ответ для Олег Соловьев на комментарий #38)
> По коду не станет понятно, если, вместо $uuid прилетит что-либо неожиданное.
> В моём случае там empty string.

Да в этом скрипте вообще не нужно никакие UUID смотреть!
Comment 40 Олег Соловьев 2021-01-26 17:28:04 MSK
Created attachment 9151 [details]
patch

Сообразил поиск через findmnt, а не через find /dev/dm-*
Избавился от получения uuid (он использовался исключительно для поиска нужной записи в /tmp/fstab)
Проверка на корень теперь реализована через findmnt (не стал убирать return 0, т.к. эта ветвь выполнялась по ошибке, см. комментарий 38
device_luks теперь получается через MAJMIN
Comment 41 Leonid Krivoshein 2021-01-27 03:07:24 MSK
(In reply to Олег Соловьев from comment #36)
> Какие системы поддерживают LUKS2 при установке?
Видимо тут подразумевался вопрос: какие ещё системы могут обрушиться или повиснуть, если встретят LUKS2 в процессе? ;-) Debia'овский набор скриптов под названием partman едва ли, т.к. он использует утилиты командной строки, что на мой взгляд правильно. И RedHat'овские нескольких последних лет тоже маловероятно, т.к. LUKS2 -- продвигаемая ими разработка. Про остальные мне неизвестно. Если же отвечать на исходный вопрос, то PartmanCrypt появился в Debian с версии 4.0. См. также важное пояснение в 11 разделе: https://cryptsetup-team.pages.debian.net/cryptsetup/README.Debian.html

> ЕМНИП, наш инсталлятор умеет только создавать/уничтожать LUKS.
Да, и там последние изменения в 2012 делал ALT Linux Team. LUKS2 появился чуть позже, на p8 он уже точно поддерживался, но не в инсталляторе.
Comment 42 Anton V. Boyarshinov 2021-01-27 10:53:14 MSK
(Ответ для Олег Соловьев на комментарий #40)
> Создано вложение 9151 [details] [подробности]
> patch

Полагаю, надо сделать тестовое задание с этим патчем и собрать с ним какой-нибудь образ.

> Сообразил поиск через findmnt, а не через find /dev/dm-*
> Избавился от получения uuid (он использовался исключительно для поиска
> нужной записи в /tmp/fstab)
> Проверка на корень теперь реализована через findmnt (не стал убирать return
> 0, т.к. эта ветвь выполнялась по ошибке, см. комментарий 38
> device_luks теперь получается через MAJMIN
Comment 43 Олег Соловьев 2021-01-27 10:56:30 MSK
(Ответ для Anton V. Boyarshinov на комментарий #42)
> (Ответ для Олег Соловьев на комментарий #40)
> > Создано вложение 9151 [details] [подробности]
> > patch
> 
> Полагаю, надо сделать тестовое задание с этим патчем и собрать с ним
> какой-нибудь образ.
> 
> > Сообразил поиск через findmnt, а не через find /dev/dm-*
> > Избавился от получения uuid (он использовался исключительно для поиска
> > нужной записи в /tmp/fstab)
> > Проверка на корень теперь реализована через findmnt (не стал убирать return
> > 0, т.к. эта ветвь выполнялась по ошибке, см. комментарий 38
> > device_luks теперь получается через MAJMIN

Уже собрал образ с патчем, патч работает не совсем так, как планировалось.
Comment 44 Олег Соловьев 2021-01-27 14:03:41 MSK
Created attachment 9161 [details]
patch

Пока вот так оно выглядит: теперь оно сначала пропускает устройства не на LUKS, а потом проверяет, нет ли среди них корневой ФС. Если есть, то return 0 и /etc/crypttab не создаётся. Если нет, то создаётся.
Comment 45 Gleb F-Malinovskiy 2021-01-27 14:11:39 MSK
(Ответ для Олег Соловьев на комментарий #40)
> Создано вложение 9151 [details] [подробности]
> patch

Но ведь этот патч не делает только хуже -- теперь вообще неважен тип корня, можно просто пропустить после него все устройства.

Обратите внимание на опцию -s у findmnt, пожалуйста.
Comment 46 Gleb F-Malinovskiy 2021-01-27 14:14:30 MSK
(Ответ для Gleb F-Malinovskiy на комментарий #45)
> (Ответ для Олег Соловьев на комментарий #40)
> > Создано вложение 9151 [details] [подробности]
> > patch

Вы считаете, что если корень на luks окажется раньше, чем остальные разделы, то эти остальные разделы не нужно вносить в crypttab?
Comment 47 Олег Соловьев 2021-01-27 14:17:25 MSK
(Ответ для Gleb F-Malinovskiy на комментарий #46)
> (Ответ для Gleb F-Malinovskiy на комментарий #45)
> > (Ответ для Олег Соловьев на комментарий #40)
> > > Создано вложение 9151 [details] [подробности]
> > > patch
> 
> Вы считаете, что если корень на luks окажется раньше, чем остальные разделы,
> то эти остальные разделы не нужно вносить в crypttab?

Я считаю, что это не нужно трогать без необходимости.
На образе без патча я установил систему, где на LVM оба раздела - шифруемые.
т.о. получилась система с фичей в initrd и без /etc/crypttab
Comment 48 Олег Соловьев 2021-01-27 14:21:34 MSK
(Ответ для Gleb F-Malinovskiy на комментарий #45)
> (Ответ для Олег Соловьев на комментарий #40)
> > Создано вложение 9151 [details] [подробности]
> > patch
> 
> Но ведь этот патч не делает только хуже -- теперь вообще неважен тип корня,
> можно просто пропустить после него все устройства.
> 
Этот патч уже устарел.
Comment 49 Alexey Gladkov 2021-01-27 14:29:00 MSK
Мне этот патч не кажется правильным. Если все каталоги смонтированы в $destdir, то вам совершенно не нужно анализировать SOURCE.

Может сначала расскажите какого результата вы хотите добиться ?
Comment 50 Олег Соловьев 2021-01-27 14:29:57 MSK
(Ответ для Gleb F-Malinovskiy на комментарий #45)
> Обратите внимание на опцию -s у findmnt, пожалуйста.

# findmnt -s
TARGET   SOURCE                                                        FSTYPE OPTIONS
/proc    proc                                                          proc   nosuid,noexec,gid=proc
/dev/pts devpts                                                        devpts nosuid,noexec,gid=tty,mode=620
/tmp     tmpfs                                                         tmpfs  nosuid
Comment 51 Олег Соловьев 2021-01-27 14:44:01 MSK
(Ответ для Alexey Gladkov на комментарий #49)
> Мне этот патч не кажется правильным. Если все каталоги смонтированы в
> $destdir, то вам совершенно не нужно анализировать SOURCE.
> 
> Может сначала расскажите какого результата вы хотите добиться ?

Перебор всех целевых устройств с проверкой на шифруемость корня и установку /etc/crypttab, если корень не шифруется.

Без привязки к uuid раздела, исходя из комментария 39.
Comment 52 Alexey Gladkov 2021-01-27 15:09:22 MSK
(Ответ для Олег Соловьев на комментарий #51)
> > Может сначала расскажите какого результата вы хотите добиться ?
> 
> Перебор всех целевых устройств с проверкой на шифруемость корня и установку
> /etc/crypttab, если корень не шифруется.

Это вы описываете, то что делает скрипт сейчас.

У нас я не нашёл man про crypttab поэтому привожу ссылку [1]. Согласно ему crypttab это "configuration for encrypted block devices". То есть стоит помещать в crypttab все шифрованные девайсы.

* Двигайтесь по точкам монтирования согласно fsfab, используя findmnt;
* Получите major:minor используя тот же findmnt или stat;
* Вам не нужно шаманить с slaves в /sys. Проверить на LUKS можно гораздо проще:

cryptsetup isLuks /dev/block/$MAJMIN;

* опционально вы можете не придумывать новые имена, а воспользоваться уже существующими на случай, если инсталлер уже где-то сохранил существующее имя:

dmsetup info -c --noheadings -o name /dev/block/$MAJMIN

[1] https://www.linux.org/docs/man5/crypttab.html
Comment 53 Олег Соловьев 2021-01-27 16:08:25 MSK
(Ответ для Alexey Gladkov на комментарий #52)
> * Вам не нужно шаманить с slaves в /sys. Проверить на LUKS можно гораздо
> проще:
> 
> cryptsetup isLuks /dev/block/$MAJMIN;
Не помогает, rc = 1.

Нужен был способ узнать, находится ли раздел _внутри_ контейнера LUKS.

sda
`-sda1
  |-alt-root
  `-alt-home
    `-alt-home_luks

В /tmp/fstab примонтированы alt-root и alt-home_luks.
cryptsetup isLuks /dev/mapper/alt-home покажет, что это устройство LUKS, но /dev/mapper/alt-home_luks таковым не является.

Нужна какая-то другая проверка, которая однозначно отделит примонтированные разделы внутри криптоконтейнеров от примонтированных разделов вне криптоконтейнеров.
Comment 54 Alexey Gladkov 2021-01-27 16:27:43 MSK
(Ответ для Олег Соловьев на комментарий #53)
> Нужен был способ узнать, находится ли раздел _внутри_ контейнера LUKS.
> 
> sda
> `-sda1
>   |-alt-root
>   `-alt-home
>     `-alt-home_luks

Я не понял каких типов устройства в этом дереве.

> В /tmp/fstab примонтированы alt-root и alt-home_luks.
> cryptsetup isLuks /dev/mapper/alt-home покажет, что это устройство LUKS, но
> /dev/mapper/alt-home_luks таковым не является.
> 
> Нужна какая-то другая проверка, которая однозначно отделит примонтированные
> разделы внутри криптоконтейнеров от примонтированных разделов вне
> криптоконтейнеров.

Для проверки LUKS в дереве всё-таки нужно смотреть в /sys, но всё равно не так как сделано сейчас. нужен код типа того который есть в make-initrd и для каждого узла нужно будет пробовать isluks.
Comment 55 Олег Соловьев 2021-01-27 16:42:46 MSK
(Ответ для Alexey Gladkov на комментарий #54)
> нужен код типа того который есть в make-initrd и для
> каждого узла нужно будет пробовать isluks.

можете подсказать, в каком файле?
Comment 56 Alexey Gladkov 2021-01-27 17:19:48 MSK
(Ответ для Олег Соловьев на комментарий #55)
> можете подсказать, в каком файле?

http://git.altlinux.org/gears/m/make-initrd.git?a=blob;f=tools/guess-functions

Этот код был написан с учётом того, что в sysfs является стабильным API.
Comment 57 Leonid Krivoshein 2021-01-27 22:35:51 MSK
(In reply to Олег Соловьев from comment #53)
> Нужен был способ узнать, находится ли раздел _внутри_ контейнера LUKS.
Командой lsblk можно фильторовать и по точкам монтирования, пропуская запись корневого раздела, и по типу файловой системы, и определять вложенность, хотя в скрипте последнее проще делать через чтение sysfs.
Comment 58 Олег Соловьев 2021-01-28 09:45:55 MSK
Created attachment 9162 [details]
patch

Пока такое колдунство. Проверил вчера на двух разделах внутри LVM со всеми 4 комбинациями "шифруемый/нешифруемый"
Comment 59 Олег Соловьев 2021-01-28 09:46:41 MSK
(Ответ для Leonid Krivoshein на комментарий #57)
> (In reply to Олег Соловьев from comment #53)
> > Нужен был способ узнать, находится ли раздел _внутри_ контейнера LUKS.
> Командой lsblk можно фильторовать и по точкам монтирования, пропуская запись
> корневого раздела, и по типу файловой системы, и определять вложенность,
> хотя в скрипте последнее проще делать через чтение sysfs.

Зачем делать лишнюю работу и фильтровать, если можно взять сразу из целевого fstab?
Comment 60 Олег Соловьев 2021-01-28 11:04:18 MSK
Сделал через cryptsetup isLuks

>device_luks="/dev/"$(ls -1 "/sys/dev/block/$MAJMIN/slaves/")
Пока не сообразил, как избавиться от этого колдунства, чтобы получить путь к устройству, чтобы потом его отдать cryptsetup'у
Comment 61 Олег Соловьев 2021-01-28 13:50:40 MSK
собирается в таске 265409
Comment 62 Олег Соловьев 2021-01-28 18:58:11 MSK
Проверил на конфигурациях:
(/, /home)                  - works
(/, luks(/home))            - works
(luks(/), /home)            - works
(luks(/), luks(/home))      - works
lvm(/, /home)               - works
lvm(/, luks(/home))         - works
lvm(luks(/), /home)         - works
lvm(luks(/), luks(/home))   - works
Comment 63 Олег Соловьев 2021-01-29 10:47:03 MSK
Собралось. Кого пинговать?
Comment 64 Repository Robot 2021-01-29 11:25:50 MSK
installer-1.10.7-alt1 -> sisyphus:

 Thu Jan 28 2021 Oleg Solovyov <mcpain@altlinux> 1.10.7-alt1
 - fix crypttab generation (Closes: #39581)