Блог-шпаргалка

Картинка

Установка Gentoo на шифрованный LVM

Категория -> linux
Обновлено: 2026-03-09

Проходя свой путь линуксойда, с 2017-го года и по сей день, я не мало сменил дистрибутивов и по итогу решил отнести себя к красноглазикам, остановившись на прекрасном Gentoo.

Учитывая, что ни что не стоит на месте, данная инструкция была полностью переделана, так как подход к установке на LUKS'овый LVM раздел в 2026 году значительно изменился.

Погнали…

Сливаем Minimal Installation CD

Записываем на USB утилиткой dd, ну или если с винды, то руфус’ом

Грузимся...

Проверяем, поднята ли сеть

ping -c3 gentoo.org

Если планируется установка по ssh (что для копи/паста будет удобнее), то запускаем нужный демон

rc-service sshd start
ssh-keygen: generating new host keys: RSA ECDSA ED25519
* Starting sshd ...

И задаём пароль рута

passwd
New password:
Retype new password:
passwd: password updated successfully

Смотрим IP адрес

ip a

И подключаемся к хосту

Метим диск следующим образом

Раздел Размер Тип ФС
/dev/nvme0n1p1 512m EFI System
/dev/nvme0n1p2 1024m Linux Filesystem
/dev/nvme0n1p3 Всё остальное место Linux Filesystem
fdisk /dev/nvme0n1

Размечаем раздел под /efi
g - для метки GPT
n - новый
enter - по умолчания первая партиция
enter - по умолчанию первый сектор
+512m - может показаться и много, но пусть будет =)
t - тип файловой системы
1 - EFI

Размечаем под раздел /boot
n - новый
enter - по умолчания вторая партиция
enter - по умолчанию следующий сектор после будущего раздела /efi
+1024m - для хранения в /boot 3-х - 4-х ядер + initramfs этого достаточно более чем...
t - тип файловой системы
83 - Linux Filesystem

Размечаем под всё остальное
n - новый
enter - по умолчания вторая партиция
enter - по умолчанию следующий сектор после будущего раздела /boot
enter - всё оставшееся место
t - тип файловой системы
enter - по умолчанию следующий раздел
44 - Linux LVM

Отлично!

Вводим p и смотрим что получилось

Command (m for help): p
Disk /dev/nvme0n1: 476,94 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: TEAM TM8FP6512G
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 6078AEC1-950E-4782-8F78-F3366C2ECA5D

Device           Start        End   Sectors   Size Type
/dev/nvme0n1p1    2048    1050623   1048576   512M EFI System
/dev/nvme0n1p2 1050624    3147775   2097152     1G Linux Filesystem
/dev/nvme0n1p3 3147776 1000214527 997066752 475,4G Linux LVM

Для сохранения изменений жмём w

Форматируем первый раздел в FAT32, а второй в ext4, используя параметр -Т small, для резервирования необходимого количества инодов на разделе менее 8Гб

mkfs.vfat -F 32 /dev/nvme0n1p1
mkfs.ext4 -T small /dev/nvme0n1p2 -L bootfs

Шифруем раздел под lvm.
Заглавными буквами пишем YES и вводим парольную фразу

cryptsetup -v -y -c aes-xts-plain64 -s 512 -h sha512 -l 5000 --use-random luksFormat /dev/nvme0n1p3

WARNING!
========
This will overwrite data on /dev/nvme0n1p3 irrevocably.

Are you sure? (Type ’yes’ in capital letters): YES
Enter passphrase for /dev/nvme0n1p3: 
Verify passphrase: 
Key slot 0 created.
Command successful.

Можно полюбопытствовать характеристики шифра командой

cryptsetup luksDump /dev/nvme0n1p3

Для продолжения установки открываем контейнер следующей командой

cryptsetup luksOpen /dev/nvme0n1p3 gentoo

Так как у нас чистый диск для установки и вышеописанные действия заново разметили диск, мы знаем что у нас там и как, но для параноиков удостоверимся, что разделов LVM там нет

lvmdiskscan 
  /dev/live-base     [    <679.03 MiB] 
  /dev/mapper/gentoo [     <49.61 GiB] 
  /dev/vda1          [     384.00 MiB] 
  /dev/vda2          [      49.62 GiB] 
  2 disks
  2 partitions
  0 LVM physical volume whole disks
  0 LVM physical volumes

Создаём физическую группу томов, добавив в неё раздел под LVM

pvcreate /dev/mapper/gentoo
  Physical volume "/dev/mapper/gentoo" successfully created.

Смотрим подробности

pvdisplay
  "/dev/mapper/gentoo" is a new physical volume of "<49.61 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/mapper/gentoo
  VG Name               
  PV Size               <49.61 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               pt0bn0-GezX-vcms-rf1C-4GOK-XvS1-OKzKCq>

Создаём группу томов, именуя её gentoo

vgcreate gentoo /dev/mapper/gentoo
  Volume group "gentoo" successfully created

Смотрим подробности

vgdisplay 
  --- Volume group ---
  VG Name               gentoo
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <49.61 GiB
  PE Size               4.00 MiB
  Total PE              12699
  Alloc PE / Size       0 / 0   
  Free  PE / Size       12699 / <49.61 GiB
  VG UUID               QNly8N-7SgY-kznw-twHZ-Qis6-x7K6-eHP4oF

Создаём на всём свободном месте логический диск.

lvcreate -l +100%FREE -n root gentoo
  Logical volume "root" created.

Смотрим подробности

lvdisplay 
  --- Logical volume ---
  LV Path                /dev/gentoo/root
  LV Name                root
  VG Name                gentoo
  LV UUID                QX0NCa-BVwD-IiY7-p2BP-Mccm-4onj-jhock6
  LV Write Access        read/write
  LV Creation host, time livecd, 2025-03-25 02:16:27 +0000
  LV Status              available
  # open                 0
  LV Size                <49.61 GiB
  Current LE             12699
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

Для просмотра найденных групп томов используем vgscan

vgscan 
  Found volume group "gentoo" using metadata type lvm2

Для активации логических дисков

vgchange -ay
  1 logical volume(s) in volume group "gentoo" now active

Форматируем логический диск

mkfs.ext4 /dev/mapper/gentoo-root -L rootfs
mke2fs 1.47.2 (1-Jan-2025)
Creating filesystem with 13003776 4k blocks and 3252224 inodes
Filesystem UUID: ba9b3a00-be25-45c4-b8a9-985b59df09f2
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done

И монтируем его

mount /dev/mapper/gentoo-root /mnt/gentoo/

Переходим в примонтированную папку

cd /mnt/gentoo/

Скачиваем файлы для работы системы
Тут на вкус и цвет кто что хочет. Мой выбор desktop-openrc

links https://www.gentoo.org/downloads/mirrors

Распаковываем

tar xpvf stage3-amd64-desktop-openrc-202*.tar.xz --xattrs-include='*.*' --numeric-owner -C /mnt/gentoo

Приведём make.conf к следующему виду

nano /mnt/gentoo/etc/portage/make.conf
CFLAGS="-march=native -mtune=native -O2 -pipe"
CXXFLAGS="${CFLAGS}"
RUSTFLAGS="-C target-cpu=native"
GRUB_PLATFORMS="efi-64"
ACCEPT_LICENSE="*"
LINGUAS="ru en"
L10N="ru en_US"
GENTOO_MIRRORS="https://mirror.yandex.ru/gentoo-distfiles/"

Скопируем настройки DNS

cp --dereference /etc/resolv.conf /mnt/gentoo/etc/

Переходим в изолированное окружение и загрузим в память некоторые параметры прпофиля

arch-chroot /mnt/gentoo
source /etc/profile

Монтируем остальные разделы

mount /dev/nvme0n1p1 /efi
mount /dev/nvme0n1p2 /boot

Скачаем снимок репозитория

emerge-webrsync

Для удобства (конкретно моего) соберём и установим vim, но соберём мы его без излишеств. Cкажем протажу что нам не нужны в пакете звук и шифрование. До сих пор не могу понять где это может пригодиться

nano /etc/portage/package.use/vim
app-editors/vim -crypt -sound
emerge -av vim

Для дополнения по tab установим bash-comletion

emerge -av bash-completion

Добавим ближайшее зеркало, откуда система будет качать исходные коды, но перед этим, разово, установим mirrorselect

emerge -av --oneshot app-portage/mirrorselect
mirrorselect -i -o >> /etc/portage/make.conf

Активируем ранее выбранный профиль

eselect profile list | less
eselect profile set <цифра>

В переменной USE файла make.conf необходимо указать с чем собрать систему, а что выкинуть из неё. Я покажу свой пример.

YES="X x265"
NO="-bluetooth -bluray -cdda -cdr -cups -dvd -dvdr -gnome -ipv6 -kde -qt5 -qt6 -systemd -wayland -wext -wifi"
USE="$YES $NO"

Далее нам снова разово понадобится уже другая утилита cpuid2cpuflags для автоматического выбора флагов процессора

emerge --oneshot cpuid2cpuflags

Выхлопом команды echo создадим файл с необходимыми флагами

echo "*/* $(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags

А затем обновиться с новыми флагами

emerge -avuDN @world

Укажем таймзону, локали и перезагрузим окружение

ln -sf ../usr/share/zoneinfo/Asia/Vladivostok /etc/localtime
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
echo "ru_RU.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen
eselect locale list
eselect locale set <цифра>
env-update && source /etc/profile

Ставим фирмвари

emerge -av sys-kernel/linux-firmware sys-firmware/intel-microcode

installkernel - это набор скриптов для автоматической установки новых ядер и обновления конфигурации загрузчика. Для его правильной работы добавим ему необходимые флаги

echo "sys-kernel/installkernel dracut grub" >> /etc/portage/package.use/installkernel

Установим installkernel и следом, чтоб на старте не ебаццо со сборкой ядра, установим оное бинарное

emerge -av sys-kernel/installkernel sys-kernel/gentoo-kernel-bin

В своё время, наебавшись вдоволь с genkernel, я понял, что лучший инструмент для сборки initramfs - это dracut. Подготовим для него необходимые конфиги, заменив <UUID> на то, что показывает blkid у раздела nvme0n1p3

mkdir /etc/dracut.conf.d
vim /etc/dracut.conf.d/00-microcode.conf
early_microcode="yes"
vim /etc/dracut.conf.d/10-luks.conf
add_dracutmodules+=" crypt dm "
kernel_cmdline+=" rd.luks.uuid=<UUID> "
kernel_cmdline+=" root=LABEL=rootfs "
kernel_cmdline+=" rd.luks.allow-discards "
kernel_cmdline+=" rd.luks.name=<UUID>=gentoo "
vim /etc/dracut.conf.d/20-lvm.conf
add_dracutmodules+=" lvm "
kernel_cmdline+=" rd.lvm.vg=vg "

Установим пакеты lvm и cryptsetup

echo "sys-fs/lvm2 lvm" >> /etc/portage/package.use/lvm
emerge -av sys-fs/lvm2 sys-fs/cryptsetup

и сконфигурирем initramfs для начальной загрузки

dracut --kver $(ls /lib/modules/) -f

Скажем fstab'у как монтировать диски, предварительно узнав UUID'ы при помощи blkid

vim /etc/fstab
UUID=цифры-буквы        /efi        vfat        rw,relatime,umask=0077,tz=UTC 0 2
UUID=цифры-буквы        /boot       ext4        rw,relatime 0 2
UUID=цифры-буквы        /           ext4        rw,relatime 0 1

Обзовём нашу систему как-нибудь креативно

echo skynet > /etc/hostname

Запаролим рута

passwd

Важный момент! lvm у нас должен стартовать вместе с системой

rc-update add lvm boot

Устанавливем загрузчик и генерируем его конфиг

grub-install --efi-directory=/efi
grub-mkconfig -o /boot/grub/grub.cfg

Основа сделана! Выходим из окружения и рестартимся

exit
cd
umount -R /mnt/gentoo
reboot

И необходимые пакеты для сборки и старта системы

vim /etc/portage/package.use/sudo
app-admin/sudo -sendmail
vim /etc/portage/package.use/lvm
sys-fs/lvm2 lvm
emerge -av sudo lvm cryptsetup genkernel

Сгенерируем fstab. Я предпочитаю идентифицировать накопители по UUID и делаю это извращённо

blkid > /etc/fstab

Затем оставляю необходимые UUID и добавляю точку монтирования с параметрами. На выходе должно получиться примерно так

UUID=BE2B-3600					/boot	vfat	noatime				0 2
UUID=ba9b3a00-be25-45c4-b8a9-985b59df09f2	/	ext4	rw,relatime,data=ordered	0 1

В конфиге генкернела включим lvm и шифрование

vim /etc/genkernel.conf
LVM="yes"
LUKS="yes"

Выбираем ядро

eselect kernel set 1

Конфигурация ядра - это одна большая тема. Сами делайте =)

Собираем initramfs

genkernel --lvm --luks initramfs

Добавляем необходимые параметры перед установкой загрузчика

vim /etc/portage/package.use/grub
sys-boot/grub device-mapper mount

И собираем его

emerge -av grub

Говорим грабу как надо грузиться
Я ещё выключил ipv6

vim /etc/default/grub
# Append parameters to the linux kernel command line
GRUB_CMDLINE_LINUX="ipv6.disable=1 crypt_root=UUID=5e4f0cfa-ec51-435b-8340-63f8ef332dc8 root=/dev/mapper/root-root rootfstype=ext4 dolvm quiet"

Устанавливаем его

grub-install --target=x86_64-efi --efi-directory=/boot /dev/vda

Генерируем сам файл загрузки

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

Ставим пароль на рута

passwd

Создаём обычного пользователя и добавляем его в необходимые группы

useradd -m -G audio,video,users,wheel -s /bin/bash username

Задаём ему парольную фразу

passwd username

Добавляем старт lvm при загрузке

rc-update add lvm boot

Выходим и рестартуемся

exit
cd
reboot

Неуверен, что генту будет использоваться на сервере. Скорее на десктопе. В связи с чем необходимо накатить иксы ну и любимую DE. Заебенем это в следующих постах!