Проходя свой путь линуксойда, с 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. Заебенем это в следующих постах!