Установка Gentoo на шифрованный раздел

Решил поэкспериментировать с шифрованием разделов в gentoo. Т.к. не нашлось готовых мануалов, по которым бы всё сразу завелось пришлось долго гуглить и ходить по граблям. В посте будет полное описание данного процесса. Нет, не неуклюжего хождения по граблям, а готового решения, которое сработало на моём ноутбуке. Поехали. Имеем машину с не размеченным винчестером, livecd с ubuntu-13.1.

Разметка разделов:

# sudo su
# # далее размечаем раздел любым удобным способом. Например так: 
# fdisk /dev/sda

Я обычно размечаю в следующей конфигурации (для винчестера ~160 Гб):

sda1 - 64 Мб - /boot
sda2 - 50 Гб - /
sda3 - 110 Гб - /home

Получаем 3 не отформатированных раздела. Корень и домашняя директория будут зашифрованы, поэтому выполняем (не забывая вводить `YES' заглавными буквами):

# cryptsetup luksFormat /dev/sda2
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase: 
Verify passphrase: 

# cryptsetup luksFormat /dev/sda3
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase: 
Verify passphrase:

# # успешность операции можно проверить этой командой:
# cryptsetup luksDump -v /dev/sda3

# # подготовили для использования dmcrypt-ом.
# # теперь подключим их: 

# cryptsetup luksOpen /dev/sda2 root
# cryptsetup luksOpen /dev/sda3 home

Данные устройства отобразятся в `/dev/mapper'. Теперь создадим файловые системы:

# mkfs.ext2 /dev/sda1
# mkfs.ext4 /dev/mapper/root
# mkfs.ext4 /dev/mapper/home

Работа с разделами закончена. Теперь нужно поставить саму систему. Для начала скачаем слепки:

$ # я обычно качаю с яндекса, но тут кому как удобней: 
$ wget http://mirror.yandex.ru/gentoo-distfiles/snapshots/portage-latest.tar.bz2 
$ wget http://mirror.yandex.ru/gentoo-distfiles/releases/x86/current-stage3/stage3-i686-20131029.tar.bz2

# # примонтируем корень:
# mkdir gentoo
# mount /dev/mapper/root gentoo/
# cd gentoo/

# # распакуем слепок:
# tar -xjpvf /home/ubuntu/Downloads/stage3-i686-20131029.tar.bz2
# cd usr/
# tar -xjpvf /home/ubuntu/Downloads/portage-latest.tar.bz2
# cd ../

# # примонтируем всё остальное:
# mount /dev/sda1 boot/
# mount /dev/mapper/home home/

# # это нужно для работы интернета внутри gentoo
# cp /etc/resolv.conf ../gentoo/etc/

# # подключаем процессы и устройства
# mount -t proc proc ./proc
# mount --rbind /sys ./sys
# mount --make-rslave ./sys
# mount --rbind /dev ./dev
# mount --make-rslave ./dev

# # переходим в новое окружение 
# chroot . /bin/bash
# env-update && source /etc/profile

Теперь все действия будут производиться внутри новой системы. Установим и настроим ядро:

# # синхронизируемся с актуальными версиями пакетов
# emerge --sync

# # качаем ядро 
# USE="symlink" emerge gentoo-sources

# # теперь будем устанавливать нужные модули
# cd /usr/src/linux
# make menuconfig

Помимо конфигурации для наших железок необходимо также включить следующие модули, позволяющие работать с шифрованными разделами:

General setup  --->
  [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
Device Drivers  --->
  Generic Driver Options  --->
    [*]   Automount devtmpfs at /dev, after the kernel mounted the rootfs
  [*] Multiple devices driver support (RAID and LVM)  --->
    <*>   Device mapper support
    <M>     Crypt target support
  [*] Block devices  --->
    <*>   Loopback device support
    <*>     Cryptoloop Support
-*- Cryptographic API  --->
  <M>   SHA224 and SHA256 digest algorithm
  <M>   SHA384 and SHA512 digest algorithms
# # собираем ядро:
# make -j3 && make modules_install -j3
# cp arch/x86/boot/bzImage /boot/gentoo-3.10.17

Теперь сгенерим initramfs, т.к. без него загрузка будет невозможной:

# USE="crypt cryptsetup" emerge genkernel

Я не люблю собирать ядро genkernel'ом (травма детства), поэтому будем использовать его только для создания initramfs:

# genkernel --install --luks initramfs
# mv /boot/initramfs-genkernel-x86-3.10.17-gentoo /boot/initramfs-3.10.17 

Установим и настроим grub:

# USE="device-mapper truetype" emerge grub
# echo "GRUB_GFXMODE=1280x720" >> /etc/default/grub
# echo "GRUB_CRYPTODISK_ENABLE=true" >> /etc/default/grub

# # пропишем grub на диске 
# grub2-install --modules="configfile linux crypto search_fs_uuid luks" /dev/sda

# # шрифты могли не подцепиться
# cp /usr/share/grub/*pf2 /boot/grub

# vim /etc/grub.d/40_custom 

В этом файле пропишем наше ядро:

menuentry "Gentoo-3.10.17" {
set root=(hd0,2)
linux (hd0,1)/gentoo-3.10.17 root=/dev/mapper/root crypt_root=/dev/sda2
initrd (hd0,1)/initramfs-3.10.17
}

И сгенерируем необходимые настройки:

# grub2-mkconfig -o /boot/grub/grub.cfg

Теперь пропишем шифрованные разделы в конфигах dmcrypt и поставим его запуск при загрузке:

# vim /etc/conf.d/dmcrypt
target=root
source='/dev/sda2'

target=home
source='/dev/sda3'

Добавим dmcrypt на стадию загрузки:

# rc-update add dmcrypt boot

Настроим fstab

# vim /etc/fstab

/dev/sda1         /boot        ext2        noatime,nodiratime    1 2
/dev/mapper/root  /            ext4        noatime,nodiratime    0 1
/dev/mapper/home  /home        ext4        noatime,nodiratime    0 1
/dev/cdrom        /mnt/cdrom    auto       noauto,ro             0 0

И последний штрих - не забудем установить пароли и создать пользователей:

# passwd
# useradd -m -G users,wheel -s /bin/bash alex
# passwd alex

После этих несложных действий мне удалось загрузиться в систему, два раза во время загрузки она спросила меня пароль от разделов, после чего удалось успешно в неё залогиниться.

Источники (те, к которым обращался чаще всего):

http://gentoo.theserverside.ru/

http://wiki.enchtex.info/howto/gentoo/gentoo_dmcrypt

http://wiki.enchtex.info/howto/gentoo/gentoo_dmcrypt_root

http://wiki.gentoo.org/wiki/Initramfs/HOWTO/ru

http://ru.wikibooks.org/wiki/Grub_2

https://wiki.archlinux.org/index.php/GRUB2_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29

http://wiki.gentoo.org/wiki/GRUB2