<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>26691</bug_id>
          
          <creation_ts>2011-12-10 23:00:13 +0400</creation_ts>
          <short_desc>Feature request: загрузка с зашифрованного корневого раздела</short_desc>
          <delta_ts>2012-08-05 01:28:40 +0400</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>make-initrd-luks</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>aebirukov</reporter>
          <assigned_to name="Alexey Gladkov">legion</assigned_to>
          <cc>antohami</cc>
    
    <cc>dd1email</cc>
    
    <cc>evg</cc>
    
    <cc>glebfm</cc>
    
    <cc>ildar</cc>
    
    <cc>kas</cc>
    
    <cc>ldv</cc>
    
    <cc>legion</cc>
    
    <cc>placeholder</cc>
    
    <cc>radik</cc>
    
    <cc>vt</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>127534</commentid>
    <comment_count>0</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-10 23:00:13 +0400</bug_when>
    <thetext>Можно ли сделать загрузку с зашифрованного корневого раздела с использованием ключа на внешнем носителе (без ввода пароля)? А еще лучше, чтобы /boot находился на том же внешнем носителе.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127535</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-12-10 23:54:35 +0400</bug_when>
    <thetext>Насчёт отдельного раздела /boot, это и так работает.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127566</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-12-12 17:01:00 +0400</bug_when>
    <thetext>Я думаю, ничего не мешает это реализовать. Сложностью будет то что для монтирования шифрованного раздела придётся ждать не один девайс, а два.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127598</commentid>
    <comment_count>3</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-13 23:00:37 +0400</bug_when>
    <thetext>Что нужно прописать в fstab, касающееся зашифрованного корневого раздела (luks), чтобы сгенерировать initrd и раздел примонтировался при загрузке?
Или, это как-то иначе делать?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127601</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-12-14 00:52:45 +0400</bug_when>
    <thetext>(В ответ на комментарий №3)
&gt; Что нужно прописать в fstab, касающееся зашифрованного корневого раздела
&gt; (luks), чтобы сгенерировать initrd и раздел примонтировался при загрузке?
&gt; Или, это как-то иначе делать?

Пожалуйста поясните свой вопрос.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127603</commentid>
    <comment_count>5</comment_count>
    <who name="ildar">ildar</who>
    <bug_when>2011-12-14 08:06:51 +0400</bug_when>
    <thetext>что сделать, чтобы при загрузке монтировался LUKS / раздел ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127609</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-12-14 14:16:06 +0400</bug_when>
    <thetext>(В ответ на комментарий №5)
&gt; что сделать, чтобы при загрузке монтировался LUKS / раздел ?

Для корня на LUKS процедура создания не отличается от других схем:

* Создайте шифрованный рутовый раздел;
* Заполните там fstab;
* Установите туда make-initrd и make-initrd-luks;
* Смонтируйте туда /sys;
* Сделайте туда chroot;
* make-initrd.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127632</commentid>
    <comment_count>7</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-14 18:12:14 +0400</bug_when>
    <thetext>&gt;* Заполните там fstab;
Строчку в fstab не подскажите?
Я добавил такую строчку:
UUID=&quot;a07e14e6-7bee-48ac-99ea-39aa168cd44d&quot; / crypt_LUKS defaults 0 0
(подобная строка при &quot;ручном&quot; монтировании командой mount работает, но используется mount.crypt_LUKS)

make-initrd
вылетает с ошибкой
add-module: No module &quot;crypt_LUKS&quot; found for kernel 3.0.3-std-def-alt0.M60P.1

В этом-то и загвоздка, что в мануалах пишут про crypttab+fstab, а crypttab у нас то ли не работает, то ли я как то не так его &quot;готовлю&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127638</commentid>
    <comment_count>8</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-14 18:45:05 +0400</bug_when>
    <thetext>Вот еще текст письма из рассылки:

Спасибо, но сложность, похоже, именно alt-specific
Такая строчка в /etc/crypttab
_dev_sdb2       UUID=&quot;a07e14e6-7bee-48ac-99ea-39aa168cd44d&quot;     none    luks
устройства в /dev/mapper/ не создаёт.


Такая строчка в fstab

UUID=&quot;a07e14e6-7bee-48ac-99ea-39aa168cd44d&quot; /mnt/sdb2  crypt_LUKS      defaults        0       0
позволяет монтировать устройство командой &quot;mount /mnt/sdb2&quot;. Но используется, в данном случае, mount.crypt_LUKS из пакета pam_mount.

Но сгенерировать initrd командой make-initrd (соответственно точка монтирования -- корневой раздел)
не получается:
add-module: No module &quot;crypt_LUKS&quot; found for kernel

crypttab у нас обрабатывается? Если да, то какой формат записи? Если нет, то что писать fstab, чтобы make-initrd было понятно?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127641</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-12-14 19:49:08 +0400</bug_when>
    <thetext>(В ответ на комментарий №7)
&gt; &gt;* Заполните там fstab;
&gt; Строчку в fstab не подскажите?

Сейчас предполагается, что в fstab будет уже /dev/mapper/... т.е. уже расшифрованный раздел.

&gt; make-initrd
&gt; вылетает с ошибкой
&gt; add-module: No module &quot;crypt_LUKS&quot; found for kernel 3.0.3-std-def-alt0.M60P.1

Это понятно. make-initrd пытается по fstab узнать модуль файловой системы.
Я попробую определить его иначе, чтобы работало более железно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127643</commentid>
    <comment_count>10</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-14 20:22:00 +0400</bug_when>
    <thetext>&gt; Сейчас предполагается, что в fstab будет уже /dev/mapper/... т.е. уже
&gt; расшифрованный раздел.
/etc/crypttab обрабатывается? Если нет, то где нужно прописать, что корневой раздел требует расшифровки?


&gt; Это понятно. make-initrd пытается по fstab узнать модуль файловой системы.
&gt; Я попробую определить его иначе, чтобы работало более железно.
Не могли бы вы описать как на данный момент (менее железно :)) можно настроить систему, чтобы при загрузке монтировался корневой раздел. Потому как в других системах зашифрованный раздел нужно прописывать в crypttab, а в ALT это эффекта не дало и непонятно как нужно делать.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127649</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-12-15 01:55:21 +0400</bug_when>
    <thetext>(В ответ на комментарий №10)

Прежде всего хотел бы оправдаться :)

Я не мантейнер cryptsetup:

$ giter acl sisyphus cryptsetup show
cryptsetup	naf shaba

я его использую, но не для рутового раздела и несколько нестандартно.

И второе, make-initrd-luks создавал kas@ для своих конфигураций, но некоторое время назад он покинул наш проект (sisyphus, altlinux). Я лишь создавал ядро make-initrd.

&gt; /etc/crypttab обрабатывается? Если нет, то где нужно прописать, что корневой
&gt; раздел требует расшифровки?

Статус /etc/crypttab стоит обсуждать не в этой баге :)

&gt; Не могли бы вы описать как на данный момент (менее железно :)) можно настроить
&gt; систему, чтобы при загрузке монтировался корневой раздел. Потому как в других
&gt; системах зашифрованный раздел нужно прописывать в crypttab, а в ALT это эффекта 
&gt; не дало и непонятно как нужно делать.

Можно обойтись без автодетекта и прописать всё руками, но если это не горит не наш метод :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127655</commentid>
    <comment_count>12</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-15 12:18:24 +0400</bug_when>
    <thetext>(В ответ на комментарий №11)

Дело ясное, что дело тёмное :)

&gt;Статус /etc/crypttab стоит обсуждать не в этой баге :)
На какие еще пакеты нужно развесить фич реквесты или баги, чтобы дело могло сдвинуться?

&gt;Можно обойтись без автодетекта и прописать всё руками, но если это не горит не
&gt;наш метод :)
Вы имеете ввиду образ initrd.img распаковать и внести изменения? Это интересно. Если не трудно, не могли бы вы описать какие изменения там нужно сделать?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127657</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-12-15 14:15:08 +0400</bug_when>
    <thetext>(В ответ на комментарий №12)
&gt; На какие еще пакеты нужно развесить фич реквесты или баги, чтобы дело могло
&gt; сдвинуться?

Вам стоит пообщаться с мантейнерами cryptsetup на тему поддержки crypttab.
 
&gt; Вы имеете ввиду образ initrd.img распаковать и внести изменения? Это интересно.

Нет :) Я конечно не люблю людей, но не до такой степени.

&gt; Если не трудно, не могли бы вы описать какие изменения там нужно сделать?

make-initrd на самом деле состоит из нескольких частей: автоугадав конфигурации и механизма, который собственно создаёт initrd. Сейчас у вас угадав не может автоматически определить конфигурацию, но это можно сделать вручную.

Для этого в /etc/initrd.mk укажите:

AUTODETECT = common resume
FEATURES = luks

# модуль для файловой системы
MODULES_ADD = ext4

# Алгоритм шифрования. Если у вас sha256, то можно это не писать.
LUKS_HASHES = twofish-generic 

и попробуйте сгенерировать inird с таким конфигом.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127685</commentid>
    <comment_count>14</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-15 19:09:18 +0400</bug_when>
    <thetext>&gt; Для этого в /etc/initrd.mk укажите:
Попробую. А что в данном случае нужно писать в /etc/fstab?
/dev/mapper/что?
UUID?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127712</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-12-16 14:42:08 +0400</bug_when>
    <thetext>(В ответ на комментарий №14)
&gt; &gt; Для этого в /etc/initrd.mk укажите:
&gt; Попробую. А что в данном случае нужно писать в /etc/fstab?

То что будет в fstab для make-initrd уже не важно. Он в него смотреть не будет.

&gt; /dev/mapper/что?
&gt; UUID?

Если вы пропишите UUID в fstab от /dev/mapper/что и укажете в fstab её файловую систему, то тогда если вы сделаете чрут на неё и выполние make-initrd, то автодетект определит, что у вас рут на зашифрованном разделе и тогда мой приведённый initrd.mk не нужен. Автоматика будет работать.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127716</commentid>
    <comment_count>16</comment_count>
    <who name="Kirill A. Shutemov">kas</who>
    <bug_when>2011-12-16 16:04:37 +0400</bug_when>
    <thetext>Есть ещё один момент: текущая реализация (если я всё окончательно не забыл) будет пытаться расшифровать все разделы, что в общем случае не верно. Нужно на этапе автодетекта фиксировать какой путь нужно пройти что бы получить рашифрованый root.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127717</commentid>
    <comment_count>17</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-12-16 16:23:48 +0400</bug_when>
    <thetext>(В ответ на комментарий №16)
&gt; Есть ещё один момент: текущая реализация (если я всё окончательно не забыл)
&gt; будет пытаться расшифровать все разделы, что в общем случае не верно. Нужно на
&gt; этапе автодетекта фиксировать какой путь нужно пройти что бы получить
&gt; рашифрованый root.

На самом деле ты реализовал параметр luksdev, который если выставлен указывает какое устройство искать:

http://git.altlinux.org/people/legion/packages/make-initrd.git?p=make-initrd.git;a=blob;f=features/luks/data/lib/filters/luks;h=ea7fe7f7f2fe4eea9553854f84d59bf2a59b9247;hb=c914c9685dd20f4318848c1bf82512de0e3cbbab#l10

но забыл указать, что этот параметр нужно слушать. Поэтому сейчас его нельзя указать.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127725</commentid>
    <comment_count>18</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-16 18:44:33 +0400</bug_when>
    <thetext>&gt; Если вы пропишите UUID в fstab от /dev/mapper/что и укажете в fstab её файловую
&gt; систему, то тогда если вы сделаете чрут на неё и выполние make-initrd, то
&gt; автодетект определит, что у вас рут на зашифрованном разделе и тогда мой
&gt; приведённый initrd.mk не нужен. Автоматика будет работать.
Спасибо, почти получилось. Сделал как вы написали. Действительно автоматика сработала.
Теперь, при загрузке меня спрашивают пароль. Я его ввожу, но система не дожидаясь окончания ввода пишет:
No key available with this passphrase.
Проверил несколько раз. После первого введённого символа перескакивает на новую строку и &quot;ругается&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127726</commentid>
    <comment_count>19</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-16 19:21:24 +0400</bug_when>
    <thetext>Если это как-то может помочь, то в последнем openSUSE зашифрованный корневой раздел монтируется корректно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127728</commentid>
    <comment_count>20</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-16 20:22:45 +0400</bug_when>
    <thetext>В дополнение к комментарию №18
http://s014.radikal.ru/i326/1112/7b/c8550de1ffd9.jpg
Как видно из скриншота если продолжить и вручную сделать
cryptsetup luksOpen из под initramfs, то раздел подключается.
Баг?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127729</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-12-16 20:31:05 +0400</bug_when>
    <thetext>(В ответ на комментарий №20)
&gt; cryptsetup luksOpen из под initramfs, то раздел подключается.
&gt; Баг?

в момент монтирования выполняется команда:

cryptsetup --key-file=- luksOpen /dev/sda2 sda2-luks

не могли бы вы выполнить её вручную ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127730</commentid>
    <comment_count>22</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-16 21:40:33 +0400</bug_when>
    <thetext>&gt; cryptsetup --key-file=- luksOpen /dev/sda2 sda2-luks
Enter passphrase:
(initramfs) ls /dev/mapper
control sda2-luks

Пароль вводится, том подключается.

Кстати, а по поводу --key-file не могли бы уточнить? Где можно указать путь к key-file, чтобы initramfs сгенерировалась соответствующим образом для монтирования не по паролю, а по ключу?

Однако, конечно, хотелось бы решить вопрос с вводом пароля.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127740</commentid>
    <comment_count>23</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-12-17 02:40:11 +0400</bug_when>
    <thetext>(В ответ на комментарий №22)
&gt; Пароль вводится, том подключается.

Скверно.
 
&gt; Где можно указать путь к key-file, чтобы initramfs сгенерировалась
&gt; соответствующим образом для монтирования не по паролю, а по ключу?

Это ещё предстоит реализовать.
 
&gt; Однако, конечно, хотелось бы решить вопрос с вводом пароля.

Мне тоже интересно почему оно так себя ведёт
kas@ ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127753</commentid>
    <comment_count>24</comment_count>
    <who name="Kirill A. Shutemov">kas</who>
    <bug_when>2011-12-17 15:37:27 +0400</bug_when>
    <thetext>а что stdin в этом месте? попробуйте убрать --key-file=- вообще. он должен спросить с терминала по-умолчанию.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127755</commentid>
    <comment_count>25</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-12-17 16:19:20 +0400</bug_when>
    <thetext>(В ответ на комментарий №24)
&gt; а что stdin в этом месте? попробуйте убрать --key-file=- вообще. он должен
&gt; спросить с терминала по-умолчанию.

Кажется я знаю в чём дело. Сейчас я сделал так, что /dev/console открывалась сразу в init.

aebirukov@, вы можете проверить версию make-initrd из git ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127764</commentid>
    <comment_count>26</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-17 21:43:55 +0400</bug_when>
    <thetext>Проверил. Не помогло.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127847</commentid>
    <comment_count>27</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-12-21 19:13:45 +0400</bug_when>
    <thetext>(В ответ на комментарий №26)
&gt; Проверил. Не помогло.

Простите за задержку.

Сегодня создал зашифрованный с паролем раздел и загрузился с него в qemu. Пароль ввёлся весь.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127859</commentid>
    <comment_count>28</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-22 11:08:04 +0400</bug_when>
    <thetext>&gt; Пароль ввёлся весь.
Странно. Посмотрите, пожалуйста, что не так.
Все действия из под VirtualBox.
Установлен ALTLinux 6.0, скопирован на зашифрованный раздел.
Затем, загрузился с livecd и:

[root@localhost ~]# mount /dev/sda2 /mnt/
Password: 
[root@localhost ~]# mount /dev/sda1 /mnt/boot/
[root@localhost ~]# mount --bind /dev/ /mnt/dev/
[root@localhost ~]# mount --bind /proc/ /mnt/proc/
[root@localhost ~]# mount --bind /sys/ /mnt/sys
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# chroot /mnt/
[root@localhost /]# rpm -q make-initrd
make-initrd-0.6.2-alt1
[root@localhost /]# rpm -q make-initrd-luks
make-initrd-luks-0.6.2-alt1
[root@localhost /]# make-initrd 
Guessed features: add-modules cleanup compress devmapper luks 
Adding LUKS support ...
Image is saved as /boot/initrd-3.0.3-std-def-alt0.M60P.1.img

[root@localhost /]# cat /etc/fstab
UUID=&quot;2829eb20-0787-499a-97e6-aceceeefb46a&quot; /boot       ext2    defaults       00
# /dev/mapper/_dev_sdb2
UUID=&quot;7cda95cd-bc1a-4676-b91a-a1bcdf2e6b87&quot;     / ext4  defaults        0      0

[root@localhost /]# grub-mkconfig -o /boot/grub/grub.cfg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127860</commentid>
    <comment_count>29</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-22 11:22:03 +0400</bug_when>
    <thetext>Дополнение:
Сейчас попробовал выбрать в меню grub (failsave mode)
Пароль ввёлся весь, но загрузка дальше не идёт. Остановилась на строчке:
initrd: udev: Running luks handler ...


http://s15.radikal.ru/i188/1112/2f/3727311ac805.jpg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127861</commentid>
    <comment_count>30</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-22 11:29:54 +0400</bug_when>
    <thetext>Еще дополнение:
http://s15.radikal.ru/i189/1112/b9/e219726673a6.jpg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127868</commentid>
    <comment_count>31</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-12-22 14:48:03 +0400</bug_when>
    <thetext>Я к сожалению не знаю про VirtualBox ... я проверял на qemu из сизифа.

Проверьте, правильный ли вы указали root=UUID=... т.е. указали ли вы UUID от /dev/mapper/... ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127871</commentid>
    <comment_count>32</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-22 16:01:50 +0400</bug_when>
    <thetext>&gt; Я к сожалению не знаю про VirtualBox ... я проверял на qemu из сизифа.
Вряд ли может быть разница. Тем более, что failsafe пароль вводить даёт. В чем же дело?

&gt; Проверьте, правильный ли вы указали root=UUID=... т.е. указали ли вы UUID от
&gt; /dev/mapper/... ?
Да, проверил.

/dev/sdb2: UUID=&quot;a07e14e6-7bee-48ac-99ea-39aa168cd44d&quot; TYPE=&quot;crypto_LUKS&quot; 
/dev/mapper/_dev_sdb2: UUID=&quot;7cda95cd-bc1a-4676-b91a-a1bcdf2e6b87&quot; TYPE=&quot;ext4&quot; 
[root@host-15 etc]# cat /etc/fstab|grep 7cda
UUID=&quot;7cda95cd-bc1a-4676-b91a-a1bcdf2e6b87&quot;     / ext4  defaults        0       0

Вы проверяли на версии make-initrd из Сизифа или git? Или они сейчас одинаковые?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127872</commentid>
    <comment_count>33</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-12-22 16:12:53 +0400</bug_when>
    <thetext>(В ответ на комментарий №32)
&gt; /dev/sdb2: UUID=&quot;a07e14e6-7bee-48ac-99ea-39aa168cd44d&quot; TYPE=&quot;crypto_LUKS&quot; 
&gt; /dev/mapper/_dev_sdb2: UUID=&quot;7cda95cd-bc1a-4676-b91a-a1bcdf2e6b87&quot; TYPE=&quot;ext4&quot; 
&gt; [root@host-15 etc]# cat /etc/fstab|grep 7cda
&gt; UUID=&quot;7cda95cd-bc1a-4676-b91a-a1bcdf2e6b87&quot;     / ext4  defaults        0      
&gt; 0

Это всё хорошо, но что вы в bootloader&apos;е прописываете в cmdline ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127873</commentid>
    <comment_count>34</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-22 16:23:37 +0400</bug_when>
    <thetext>&gt; Это всё хорошо, но что вы в bootloader&apos;е прописываете в cmdline ?
Ничего, а надо что-то?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127874</commentid>
    <comment_count>35</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-12-22 16:43:05 +0400</bug_when>
    <thetext>(В ответ на комментарий №34)
&gt; &gt; Это всё хорошо, но что вы в bootloader&apos;е прописываете в cmdline ?
&gt; Ничего, а надо что-то?

Разумеется. Если вы выполните команду &quot;cat /proc/cmdline&quot; на загруженной системе, то увидите с какими параметрами было загружено ядро. В частности вы увидите, что передаётся параметр root=ЧТО_ТО, где ЧТО_ТО указывает тем или иным образом на корень. Эта информация не &quot;прошивается&quot; в initrd при его создании. Один и тот же initrd может использоваться для загрузки с разных источников корневой файловой системы.

Так же могут указываться другие параметры, которые управляют поведением initrd и/или последующей системой.

Пропишите в загрузчик параметр root=UUID=7cda95cd-bc1a-4676-b91a-a1bcdf2e6b87 (прямо как я указал).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127879</commentid>
    <comment_count>36</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-22 17:30:36 +0400</bug_when>
    <thetext>&gt;(прямо как я указал).
Спасибо, огромное - с Божьей помощью и помощью legion@ мне удалось таки загрузиться с корневого зашифрованного раздела :)

В grub.cfg убрал опцию quiet=1, именно она не давала вводить пароль полностью.
Теперь всё работает.
Получается &quot;автоматика&quot; в части make-initrd работает хорошо. grub.cfg правильный автоматом не генерируется. Request сделать?

Теперь хотелось бы вернуться первоначальному вопросу. Вход по ключу, а не по паролю реально сделать? Пусть даже не автоматом пока. Где нужно что поправить?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127881</commentid>
    <comment_count>37</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-12-22 17:41:46 +0400</bug_when>
    <thetext>(В ответ на комментарий №36)
&gt; Получается &quot;автоматика&quot; в части make-initrd работает хорошо. grub.cfg
&gt; правильный автоматом не генерируется. Request сделать?

Это не задача make-initrd. У нас есть пакет bootloader-utils, утилиты которого вызываются при обновлении ядра и именно они обновляют записи в загрузчиках (grub или lilo). 

Когда вы руками меняете схему загрузки, то никакой автоматики не будет.

&gt; Теперь хотелось бы вернуться первоначальному вопросу. Вход по ключу, а не по
&gt; паролю реально сделать? Пусть даже не автоматом пока. Где нужно что поправить?

Пока это сделать нельзя т.к. make-initrd работает таким образом, что не может ждать нескольких устройств сразу. Я думаю над этой проблемой и багу не закрываю.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127890</commentid>
    <comment_count>38</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-22 22:19:58 +0400</bug_when>
    <thetext>&gt;(grub или lilo).
Да, я это и имел ввиду.

На уже рабочей системе при попытке сгенерировать grub.cfg:
# grub-mkconfig -o /boot/grub/grub.cfg
/usr/sbin/grub-probe: error: cannot stat `/dev/sdb2-luks&apos;.

Но если поставить символическую ссылку на /dev/mapper/sdb2-luks, то генерация проходит успешно. Машина загружается. (Правда у меня почему-то из под VirtualBox работает только когда vga=normal, надо вживую потестировать.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127896</commentid>
    <comment_count>39</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-23 10:31:04 +0400</bug_when>
    <thetext>&gt; Пока это сделать нельзя т.к. make-initrd работает таким образом, что не может
&gt; ждать нескольких устройств сразу. Я думаю над этой проблемой и багу не
&gt; закрываю.

А если ключ размещать на /boot разделе. А /boot раздел на flash накопителе?
Он ведь уже подмонтирован - его ждать не надо.

Вроде, удобно. Как вы считаете?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127897</commentid>
    <comment_count>40</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-12-23 11:01:58 +0400</bug_when>
    <thetext>Это зависит от задачи. На своём рабочем ноуте я держу /home на внешнем шифрованном носителе, а корень системы на обычном разделе.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127898</commentid>
    <comment_count>41</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-23 11:09:21 +0400</bug_when>
    <thetext>&gt; Это зависит от задачи. На своём рабочем ноуте я держу /home на внешнем
&gt; шифрованном носителе, а корень системы на обычном разделе.

Т.е. используя текущий make-initrd уже можно реализовать схему с ключом размещённым на разделе /boot?

Если не трудно, не могли бы вы описать как это сделать?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127901</commentid>
    <comment_count>42</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-12-23 12:56:24 +0400</bug_when>
    <thetext>(В ответ на комментарий №37)
&gt; &gt; Теперь хотелось бы вернуться первоначальному вопросу. Вход по ключу, а не по
&gt; &gt; паролю реально сделать? Пусть даже не автоматом пока. Где нужно что поправить?
&gt; 
&gt; Пока это сделать нельзя т.к. make-initrd работает таким образом, что не может
&gt; ждать нескольких устройств сразу.

Средствами make-initrd реализовать схему с ключём пока нельзя.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127917</commentid>
    <comment_count>43</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2011-12-24 18:35:36 +0400</bug_when>
    <thetext>&gt; Средствами make-initrd реализовать схему с ключём пока нельзя.
А мне это удалось.

# ls -l /etc/root.key
-rw------- 1 root root 56 Дек 23 21:05 /etc/root.key

# cat /etc/initrd.mk.d/key.mk 
include /etc/initrd.mk

IMAGE_SUFFIX = -key

PUT_FILES += \
        /etc/root.key

$ cat make-initrd-0.6.2/features/luks/data/lib/handlers/050-luks 
#!/bin/sh

. /scripts/functions

KEY=&quot;/etc/root.key&quot;

nameluks=
password=
handler() {
        nameluks=&quot;${INIT_LUKS##*/}-luks&quot;

        # skip if $nameluks has already exist
        dmsetup info &quot;$nameluks&quot; &gt;/dev/null 2&gt;&amp;1 &amp;&amp;
                return 0 ||:


        if [ -e $KEY ]; then
             cryptsetup --key-file=$KEY luksOpen &quot;$INIT_LUKS&quot; &quot;$nameluks&quot;
        else
            cryptsetup luksOpen &quot;$INIT_LUKS&quot; &quot;$nameluks&quot;
        fi

        retcode=&quot;$?&quot;

        if [ &quot;$retcode&quot; != &quot;0&quot; ]; then
                error &quot;Unable to activate LUKS: $retcode&quot;
                return 1
        fi
}

rc=0
for e in &quot;$handler_eventdir&quot;/luks/*; do
        [ -f &quot;$e&quot; ] || break                                                                                                                         
                                                                                                                                                     
        ( . &quot;$e&quot;; handler; ) ||
                rc=1
done

exit $rc

Как легко понять, принцип в том, что root.key запаковывается в образ initramfs, а там считывается слегка изменённым make-initrd-luks. Если root.key в образе найден не будет - система будет ожидать ввода пароля.

/boot следует размещать на внешнем носителе. Собственно, этот носитель и будет ключом.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128042</commentid>
    <comment_count>44</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2012-01-02 23:59:28 +0400</bug_when>
    <thetext>В git добавлена поддержка загрузки с шифрованным корнем на LUKS и ключём от этого раздела на внешнем носителе. Для этого добавлен ключ:

luks_key=&lt;path&gt;
luks_key=&lt;path&gt;:&lt;keydev&gt;
luks_key=&lt;path&gt;:&lt;keydev&gt;:&lt;luksdev&gt;

path - путь до ключа, если keydev не задан, то этот путь на самом initrd;
keydev - устройство на котором находится ключ. Оно задаётся как и root= т.е. UUID=&lt;uuid&gt; или LABEL=&lt;label&gt; ...
luksdev - раздел для которого нужно применить ключ.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128109</commentid>
    <comment_count>45</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2012-01-08 00:23:48 +0400</bug_when>
    <thetext>&gt; path - путь до ключа, если keydev не задан, то этот путь на самом initrd;
&gt; keydev - устройство на котором находится ключ. Оно задаётся как и root= т.е.
&gt; UUID=&lt;uuid&gt; или LABEL=&lt;label&gt; ...
&gt; luksdev - раздел для которого нужно применить ключ.

С ключом интегрированным в initrd -- работает.

USB накопитель с ключом что-то у меня не монтируется.

И по UUID и по LABEL пробовал
luks_key=/etc/root.key:UUID=00f42648-1a35-4c60-a7f3-59727e7c6834
luks_key=/etc/root.key:LABEL=bootkeyflash

Так хоть пишу?

Останавливается на udev: что-то там luks handler</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128110</commentid>
    <comment_count>46</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2012-01-08 00:36:24 +0400</bug_when>
    <thetext>(В ответ на комментарий №45)
&gt; USB накопитель с ключом что-то у меня не монтируется.

FEATURES += usb

?

&gt; Так хоть пишу?

Да.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128114</commentid>
    <comment_count>47</comment_count>
    <who name="">aebirukov</who>
    <bug_when>2012-01-08 15:18:54 +0400</bug_when>
    <thetext>&gt; FEATURES += usb
Работает, Спасибо.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132595</commentid>
    <comment_count>48</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2012-08-05 01:28:40 +0400</bug_when>
    <thetext>Исправлено.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>