.png)
Я пытаюсь добиться установки CentOS 7 с шифрованием LUKS с отдельным /boot
разделом и lvm на материнской плате с поддержкой EFI.
Я сделал разбиение новой установки CentOS на разделы из старой CentOS (установленной из графического интерфейса), и это выглядит так:
sdb 8:16 0 745,2G 0 disk
├─sdb1 8:17 0 200M 0 part /home/user/target/boot/efi
├─sdb2 8:18 0 1G 0 part /home/user/target/boot
├─sdb3 8:19 0 700G 0 part
│ └─crypto 253:3 0 700G 0 crypt
│ ├─lv-swap 253:4 0 16G 0 lvm
│ ├─lv-root 253:5 0 50G 0 lvm /home/user/target
│ └─lv-home 253:6 0 634G 0 lvm /home/user/target/home
Самозагрузка также прошла успешно в CentOS chroot (использовалсяэтотиэтотобучающие материалы) и теперь готовы к созданию загрузочного образа.
Дело в том, что я решил использовать нестандартный алгоритм в cryptsetup:
cryptsetup -v --cipher serpent-xts-plain64 --key-size 512 --hash sha256 --iter-time 3000 --use-random luksFormat /dev/sdb3
и теперь мне интересно, как сгенерировать правильный initrd с моими параметрами.
В руководствах мне говорят, что следующим шагом будет:
mkinitcpio -p linux
Однако нет mkinitcpio
команды или списка /etc/mkinitcpio.conf
для изменения HOOKS
, чтобы lvm
это encrypt
работало правильно.
Однако, есть только initrd
то, что мне незнакомо из-за отсутствия знаний о дистрибутивах на основе rpm. Поиск примеров initrd для моего случая не увенчался успехом.
/boot
Теперь внутри chroot есть несколько файлов/каталогов :
bash-4.2# ls
config-3.10.0-514.16.1.el7.x86_64 grub2 symvers-3.10.0-514.16.1.el7.x86_64.gz
efi initramfs-3.10.0-514.16.1.el7.x86_64.img System.map-3.10.0-514.16.1.el7.x86_64
grub lost+found vmlinuz-3.10.0-514.16.1.el7.x86_64
Но я сомневаюсь, что они поддерживают шифрование Serpent или даже Luks, поскольку эти файлы были сгенерированы во время начальной загрузки.
Итак, мой вопрос: как мне создать правильную цепочку инструментов загрузки с Luks и Serpent, начиная с генерации образа ядра?
Хотя, возможно, мне следует использовать initramfs
вместо initrd
, поэтому любые подсказки по этому подходу также приветствуются.
решение1
Наконец-то я закончил настройку и готов поделиться конечным набором инструкций по ее реализации для CentOS 7.
Я пропустил разбиение на разделы и ручную загрузку — в других местах есть множество полных руководств.
Итак, начните с этого варианта разбиения:
sdb 8:16 0 745,2G 0 disk
├─sdb1 8:17 0 200M 0 part
├─sdb2 8:18 0 1G 0 part
└─sdb3 8:19 0 700G 0 part
└─crypto 253:3 0 700G 0 crypt
├─lv-swap 253:4 0 16G 0 lvm
├─lv-root 253:5 0 50G 0 lvm
└─lv-home 253:6 0 634G 0 lvm
затем смонтируйте необходимые диски, чтобы получилось:
sdb 8:16 0 745,2G 0 disk
├─sdb1 8:17 0 200M 0 part /home/user/target/boot/efi
├─sdb2 8:18 0 1G 0 part /home/user/target/boot
└─sdb3 8:19 0 700G 0 part
└─crypto 253:3 0 700G 0 crypt
├─lv-swap 253:4 0 16G 0 lvm
├─lv-root 253:5 0 50G 0 lvm /home/user/target
└─lv-home 253:6 0 634G 0 lvm
Шаг 0. Подготовка скрипта chroot. Повторение mount
каждой перезагрузки утомительно, поэтому я остановился на этом элементарном скрипте chroot:
#!/bin/bash
sudo mount /dev/mapper/lv-root /home/user/target
sudo mount /dev/sdb2 /home/user/target/boot
sudo mount /dev/sdb1 /home/user/target/boot/efi
sudo mount --bind /proc /home/user/target/proc
sudo mount --bind /dev /home/user/target/dev
sudo mount --bind /sys /home/user/target/sys
sudo chroot /home/user/target /bin/bash -l
Шаг 1. Установите отсутствующие модули EFI (вне chroot):
sudo yum --installroot=/home/user/target install -y efibootmgr grub2-efi-modules
Шаг 2. Редактировать/etc/crypttab
crypto UUID=UUID_of_/dev/sdb3 none luks,discard
Причина discard
- я использую SSD и пренебрегаю некоторой безопасностью ради лучшей производительности TRIM.Подробности.
Шаг 3. Редактировать/etc/dracut.conf
omit_dracutmodules+="systemd"
add_dracutmodules+="crypt lvm" #sequencing could matter
hostonly="yes" #optional
lvmconf="yes"
Шаг 4. Редактировать/etc/fstab
UUID=UUID_of_/dev/sdb1 /boot/efi vfat umask=0077 0 0
UUID=UUID_of_/dev/sdb2 /boot ext2 defaults 0 0
UUID=UUID_of_/dev/mapper/lv-root / ext4 defaults 0 0
UUID=UUID_of_/dev/mapper/lv-home /home ext4 defaults 0 0
UUID=UUID_of_/dev/mapper/lv-swap none swap sw 0 0
Шаг 5. Редактировать/etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_CMDLINE_LINUX="rd.lvm.lv=lv/swap vconsole.font=latarcyrheb-sun16 vconsole.keymap=us rd.luks.options=discard rd.luks.uuid=UUID_of_/dev/sdb3 crashkernel=auto rd.lvm.lv=lv/root rd.lvm.lv=lv/home nomodeset"
GRUB_THEME="/boot/grub2/themes/system/theme.txt"
rd.luks.options=discard
- может быть излишним, поправьте меня, если это так.
nomodeset
- для устранения параллелизма аппаратных драйверов (noveaufb против EFI VGA)
Шаг 6. Выполнитьgrub2-mkconfig -o /boot/grub2/grub.cfg
Шаг 7. Выполнитьgrub2-install --target=x86_64-efi --efi-directory=/boot/efi
Шаг 8. Выполнитьdracut -fv
Все вышеперечисленные шаги необходимо выполнять внутри chroot, если не указано иное.
Оказалось, что выбранный алгоритм шифрования никак не повлиял - grub автоматически загрузил все необходимые драйверы.