Разбивка: LVM, внутри него хомяк и корень. Хомяк шифруемый, корень - нет. После установки система не грузится и вываливается в emergency mode после таймаута на монтирование хомяка. revert 7407158c71cbb645545b1c4ca4219542b4106a06 возвращает возможность загрузить систему.
Упомянутый коммит исправлял другую конфигурацию.
(Ответ для Alexey Gladkov на комментарий #1) > Упомянутый коммит исправлял другую конфигурацию. Какую конфигурацию? В commit message не упоминается причина такого изменения, а в changelog упоминаний каких-либо багов напротив этого изменения нет.
У меня есть тест подобную конфигурацию: /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.
(Ответ для Олег Соловьев на комментарий #2) > (Ответ для Alexey Gladkov на комментарий #1) > > Упомянутый коммит исправлял другую конфигурацию. > > Какую конфигурацию? Как раз ту, которую я описал в комментарии 3. Если сделать, то что вы предлагаете, то тест test-luks-home сломается.
(Ответ для Alexey Gladkov на комментарий #4) > Как раз ту, которую я описал в комментарии 3. Если сделать, то что вы > предлагаете, то тест test-luks-home сломается. Попробуй с ней установить регулярку
(Ответ для Олег Соловьев на комментарий #5) > (Ответ для Alexey Gladkov на комментарий #4) > > Как раз ту, которую я описал в комментарии 3. Если сделать, то что вы > > предлагаете, то тест test-luks-home сломается. > > Попробуй с ней установить регулярку попробую *
Created attachment 9142 [details] blkid+lsblk У меня система загрузилась после установки и отката 7407158
Я только что проверил этот тест с этим коммитом и без. Без этого коммита тест не проходит.
(Ответ для Олег Соловьев на комментарий #0) > Разбивка: > LVM, внутри него хомяк и корень. Хомяк шифруемый, корень - нет. Расскажите поподробнее об этой конфигурации, чтобы её можно было в rescue-mode создать на пустом диске или дисках.
(Ответ для Alexey Gladkov на комментарий #9) > (Ответ для Олег Соловьев на комментарий #0) > > Разбивка: > > LVM, внутри него хомяк и корень. Хомяк шифруемый, корень - нет. > > Расскажите поподробнее об этой конфигурации, чтобы её можно было в > rescue-mode создать на пустом диске или дисках. Какая информация от меня требуется?
(Ответ для Олег Соловьев на комментарий #10) > > Расскажите поподробнее об этой конфигурации, чтобы её можно было в > > rescue-mode создать на пустом диске или дисках. > > Какая информация от меня требуется? Как конкретно разбит диск, что в lvm, где luks ? Какая версия ядра и утилит ?
(Ответ для 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
PS как запустить тесты в пакете? Там нет никакой документации
На ядре 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
На работающей системе: # 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
(Ответ для Олег Соловьев на комментарий #13) > PS как запустить тесты в пакете? Там нет никакой документации $ ./configure --enable-local-build $ cd tests $ make build $ make test-luks-home или $ ./configure --enable-local-build $ make -C tests check
(Ответ для Олег Соловьев на комментарий #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 спасибо. я попробую сделать тест и воспроизвести.
(Ответ для Alexey Gladkov на комментарий #16) > > PS как запустить тесты в пакете? Там нет никакой документации > > $ ./configure --enable-local-build ой. для вас этой опции не нужно.
$ 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 не воспроизводится.
Попробовал воспроизвести с ядром std-def-5.4.91-alt1. Пока не получается.
ping?
После обсуждения в telegram выяснили, что make-initrd успешно находит корень системы и загружает его, но он не пытается расшифровать и смонтировать home из-за чего уже в живой системе происходит emergency mode. Указанный коммит как раз и меняет порядок проверки разделов, чтобы не пытаться расшифровывать разделы, которые не участвуют в загрузке корня. Это поведение не ошибка. Нужно выяснять почему systemd в живой системе не пытается расшифровать и смонтировать home.
(Ответ для Alexey Gladkov на комментарий #22) > После обсуждения в telegram выяснили, что make-initrd успешно находит корень > системы и загружает его, но он не пытается расшифровать и смонтировать home > из-за чего уже в живой системе происходит emergency mode. > > Указанный коммит как раз и меняет порядок проверки разделов, чтобы не > пытаться расшифровывать разделы, которые не участвуют в загрузке корня. > > Это поведение не ошибка. > > Нужно выяснять почему systemd в живой системе не пытается расшифровать и > смонтировать home. подтверждаю.
Created attachment 9147 [details] экран загрузки
В этом коде 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?
Вот этот код в корне неправильный: 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/
(Ответ для 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 + апгрейд до сизифа)
(Ответ для Олег Соловьев на комментарий #27) > > Олег, а в получившейся после установки системе вообще есть что-то в > > /etc/crypttab? > > Этот файл вообще отсутствует (ставил Workstation K beta от 20200811 + > апгрейд до сизифа) А /etc/crypttab может помочь systemd ? Если его создать руками, то система загрузится ?
(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.
(Ответ для 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 Оба файла на месте
Похоже, проблема решается наличием в системе /etc/crypttab
На каком моменте исполняется 08-crypttab.sh и куда будет идти вывод, если поставить -x?
(Ответ для Олег Соловьев на комментарий #32) > На каком моменте исполняется 08-crypttab.sh и куда будет идти вывод, если > поставить -x? 08-crypttab.sh находится в preinstall.d, значит это шаг сохранения настроек. Сразу после установки пакетов. А вот куда пойдёт вывод, интересно самому.
(Ответ для Антон Мидюков на комментарий #33) > (Ответ для Олег Соловьев на комментарий #32) > > На каком моменте исполняется 08-crypttab.sh и куда будет идти вывод, если > > поставить -x? > > 08-crypttab.sh находится в preinstall.d, значит это шаг сохранения настроек. > Сразу после установки пакетов. А вот куда пойдёт вывод, интересно самому. Если я правильно понимаю, в один из логов, которые в этот момент находится в /tmp
(Ответ для Олег Соловьев на комментарий #32) > На каком моменте исполняется 08-crypttab.sh и куда будет идти вывод, если > поставить -x? Вообще, может оказаться удобнее всего дождаться начала установки "дополнительного программного обеспечения", перейти на вторую консоль, остановить сигналом apt и отлаживать этт 08-crypttab.sh на этой второй консоли
(Ответ для Leonid Krivoshein на комментарий #29) > Заглянул по случаю в libevms плагин luks. Поддержки LUKS2 там нет, как и > ожидалось, хотя именно этот более секьюрный вариант сейчас используется > утилитой cryptsetup в консоли по умолчанию. Глядя на код, можно быть почти > уверенным, что инсталлятор обрушится или повиснет, встретив сделанный руками > LUKS2. Какие системы поддерживают LUKS2 при установке? ЕМНИП, наш инсталлятор умеет только создавать/уничтожать LUKS.(Ответ для Anton V. Boyarshinov на комментарий #35) > > Вообще, может оказаться удобнее всего дождаться начала установки > "дополнительного программного обеспечения", перейти на вторую консоль, > остановить сигналом apt и отлаживать этт 08-crypttab.sh на этой второй > консоли т.е. просто его запустить?
(Ответ для Олег Соловьев на комментарий #32) > На каком моменте исполняется 08-crypttab.sh и куда будет идти вывод, если > поставить -x? Да зачем? И так же по коду всё понятно. Что вы хотите отлаживать?
(Ответ для Gleb F-Malinovskiy на комментарий #37) > (Ответ для Олег Соловьев на комментарий #32) > > На каком моменте исполняется 08-crypttab.sh и куда будет идти вывод, если > > поставить -x? > > Да зачем? И так же по коду всё понятно. Что вы хотите отлаживать? По коду не станет понятно, если, вместо $uuid прилетит что-либо неожиданное. В моём случае там empty string.
(Ответ для Олег Соловьев на комментарий #38) > По коду не станет понятно, если, вместо $uuid прилетит что-либо неожиданное. > В моём случае там empty string. Да в этом скрипте вообще не нужно никакие UUID смотреть!
Created attachment 9151 [details] patch Сообразил поиск через findmnt, а не через find /dev/dm-* Избавился от получения uuid (он использовался исключительно для поиска нужной записи в /tmp/fstab) Проверка на корень теперь реализована через findmnt (не стал убирать return 0, т.к. эта ветвь выполнялась по ошибке, см. комментарий 38 device_luks теперь получается через MAJMIN
(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 он уже точно поддерживался, но не в инсталляторе.
(Ответ для Олег Соловьев на комментарий #40) > Создано вложение 9151 [details] [подробности] > patch Полагаю, надо сделать тестовое задание с этим патчем и собрать с ним какой-нибудь образ. > Сообразил поиск через findmnt, а не через find /dev/dm-* > Избавился от получения uuid (он использовался исключительно для поиска > нужной записи в /tmp/fstab) > Проверка на корень теперь реализована через findmnt (не стал убирать return > 0, т.к. эта ветвь выполнялась по ошибке, см. комментарий 38 > device_luks теперь получается через MAJMIN
(Ответ для Anton V. Boyarshinov на комментарий #42) > (Ответ для Олег Соловьев на комментарий #40) > > Создано вложение 9151 [details] [подробности] > > patch > > Полагаю, надо сделать тестовое задание с этим патчем и собрать с ним > какой-нибудь образ. > > > Сообразил поиск через findmnt, а не через find /dev/dm-* > > Избавился от получения uuid (он использовался исключительно для поиска > > нужной записи в /tmp/fstab) > > Проверка на корень теперь реализована через findmnt (не стал убирать return > > 0, т.к. эта ветвь выполнялась по ошибке, см. комментарий 38 > > device_luks теперь получается через MAJMIN Уже собрал образ с патчем, патч работает не совсем так, как планировалось.
Created attachment 9161 [details] patch Пока вот так оно выглядит: теперь оно сначала пропускает устройства не на LUKS, а потом проверяет, нет ли среди них корневой ФС. Если есть, то return 0 и /etc/crypttab не создаётся. Если нет, то создаётся.
(Ответ для Олег Соловьев на комментарий #40) > Создано вложение 9151 [details] [подробности] > patch Но ведь этот патч не делает только хуже -- теперь вообще неважен тип корня, можно просто пропустить после него все устройства. Обратите внимание на опцию -s у findmnt, пожалуйста.
(Ответ для Gleb F-Malinovskiy на комментарий #45) > (Ответ для Олег Соловьев на комментарий #40) > > Создано вложение 9151 [details] [подробности] > > patch Вы считаете, что если корень на luks окажется раньше, чем остальные разделы, то эти остальные разделы не нужно вносить в crypttab?
(Ответ для Gleb F-Malinovskiy на комментарий #46) > (Ответ для Gleb F-Malinovskiy на комментарий #45) > > (Ответ для Олег Соловьев на комментарий #40) > > > Создано вложение 9151 [details] [подробности] > > > patch > > Вы считаете, что если корень на luks окажется раньше, чем остальные разделы, > то эти остальные разделы не нужно вносить в crypttab? Я считаю, что это не нужно трогать без необходимости. На образе без патча я установил систему, где на LVM оба раздела - шифруемые. т.о. получилась система с фичей в initrd и без /etc/crypttab
(Ответ для Gleb F-Malinovskiy на комментарий #45) > (Ответ для Олег Соловьев на комментарий #40) > > Создано вложение 9151 [details] [подробности] > > patch > > Но ведь этот патч не делает только хуже -- теперь вообще неважен тип корня, > можно просто пропустить после него все устройства. > Этот патч уже устарел.
Мне этот патч не кажется правильным. Если все каталоги смонтированы в $destdir, то вам совершенно не нужно анализировать SOURCE. Может сначала расскажите какого результата вы хотите добиться ?
(Ответ для 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
(Ответ для Alexey Gladkov на комментарий #49) > Мне этот патч не кажется правильным. Если все каталоги смонтированы в > $destdir, то вам совершенно не нужно анализировать SOURCE. > > Может сначала расскажите какого результата вы хотите добиться ? Перебор всех целевых устройств с проверкой на шифруемость корня и установку /etc/crypttab, если корень не шифруется. Без привязки к uuid раздела, исходя из комментария 39.
(Ответ для Олег Соловьев на комментарий #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
(Ответ для 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 таковым не является. Нужна какая-то другая проверка, которая однозначно отделит примонтированные разделы внутри криптоконтейнеров от примонтированных разделов вне криптоконтейнеров.
(Ответ для Олег Соловьев на комментарий #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.
(Ответ для Alexey Gladkov на комментарий #54) > нужен код типа того который есть в make-initrd и для > каждого узла нужно будет пробовать isluks. можете подсказать, в каком файле?
(Ответ для Олег Соловьев на комментарий #55) > можете подсказать, в каком файле? http://git.altlinux.org/gears/m/make-initrd.git?a=blob;f=tools/guess-functions Этот код был написан с учётом того, что в sysfs является стабильным API.
(In reply to Олег Соловьев from comment #53) > Нужен был способ узнать, находится ли раздел _внутри_ контейнера LUKS. Командой lsblk можно фильторовать и по точкам монтирования, пропуская запись корневого раздела, и по типу файловой системы, и определять вложенность, хотя в скрипте последнее проще делать через чтение sysfs.
Created attachment 9162 [details] patch Пока такое колдунство. Проверил вчера на двух разделах внутри LVM со всеми 4 комбинациями "шифруемый/нешифруемый"
(Ответ для Leonid Krivoshein на комментарий #57) > (In reply to Олег Соловьев from comment #53) > > Нужен был способ узнать, находится ли раздел _внутри_ контейнера LUKS. > Командой lsblk можно фильторовать и по точкам монтирования, пропуская запись > корневого раздела, и по типу файловой системы, и определять вложенность, > хотя в скрипте последнее проще делать через чтение sysfs. Зачем делать лишнюю работу и фильтровать, если можно взять сразу из целевого fstab?
Сделал через cryptsetup isLuks >device_luks="/dev/"$(ls -1 "/sys/dev/block/$MAJMIN/slaves/") Пока не сообразил, как избавиться от этого колдунства, чтобы получить путь к устройству, чтобы потом его отдать cryptsetup'у
собирается в таске 265409
Проверил на конфигурациях: (/, /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
Собралось. Кого пинговать?
installer-1.10.7-alt1 -> sisyphus: Thu Jan 28 2021 Oleg Solovyov <mcpain@altlinux> 1.10.7-alt1 - fix crypttab generation (Closes: #39581)