Проходя свой путь линуксойда, с 2017-го года и по сей день, я не мало сменил дистрибутивов и по итогу решил отнести себя к красноглазикам, остановившись на прекрасном Gentoo.
В этом посте я не буду пересказывать хэндбук, а покажу свою установку gentoo на шифрованный lvm раздел.
Погнали…
Сливаем Minimal Installation CD
Записываем на USB утилиткой dd, ну или если с винды, то руфус’ом
Грузимся...
Если планируется установка по 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
И подключаемся к хосту
Размечаем диск
У меня для показа это виртуалка, поэтому диск будет именоваться vda
fdisk /dev/vda
Размечаем под раздел /boot
g - для метки GPT
n - новый
enter - по умолчания первая партиция
enter - по умолчанию первый сектор
+384m - для хранения в /boot 3-х - 4-х ядер + initramfs этого хватает
t - тип файловой системы
1 - EFI
Размечаем под всё остальное
n - новый
enter - по умолчания вторая партиция
enter - по умолчанию следующий сектор после будущего раздела /boot
enter - всё оставшееся место
t - тип файловой системы
enter - по умолчанию следующий раздел
44 - Linux LVM
Отлично!
Вводим p и смотрим что получилось
Command (m for help): p Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 sectors 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/vda1 2048 788479 786432 384M EFI System /dev/vda2 788480 104855551 104067072 49.6G Linux LVM
Для сохранения изменений жмём w
Форматируем первый раздел в FAT32
mkfs.vfat -F32 /dev/vda1 mkfs.fat 4.2 (2021-01-31)
Шифруем раздел под lvm.
Заглавными буквами пишем YES и вводим парольную фразу
cryptsetup -v -y -c aes-xts-plain64 -s 512 -h sha512 -l 5000 --use-random luksFormat /dev/vda2 WARNING! ======== This will overwrite data on /dev/vda2 irrevocably. Are you sure? (Type ’yes’ in capital letters): YES Enter passphrase for /dev/vda2: Verify passphrase: Key slot 0 created. Command successful.
Можно полюбопытствовать характеристики шифра командой
cryptsetup luksDump /dev/vda2
Для продолжения установки открываем контейнер следующей командой
cryptsetup luksOpen /dev/vda2 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 gentoo -n root 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 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/
Удостоверяемся
lsblk /dev/vda NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS vda 252:0 0 50G 0 disk ├─vda1 252:1 0 384M 0 part └─vda2 252:2 0 49.6G 0 part └─gentoo 253:0 0 49.6G 0 crypt └─gentoo-root 253:1 0 49.6G 0 lvm /mnt/gentoo
Переходим в примонтированную на прошлом шаге папку
cd /mnt/gentoo/
Скачиваем файлы для работы системы
Тут на вкус и цвет кто что хочет. Мой выбор desktop-openrc
links https://www.gentoo.org/downloads/mirrors
Распаковываем
tar xpvf stage3-amd64-desktop-openrc-20250322T105044Z.tar.xz --xattrs-include=’*.*’ --numeric-owner
Скопируем настройки DNS
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
Настраивим make.conf, приводя его к следующему виду
nano /mnt/gentoo/etc/portage/make.conf CFLAGS="-march=native -O2 -pipe" CXXFLAGS="${CFLAGS}" ACCEPT_LICENSE="*" LINGUAS="ru en" L10N="ru en_US" GENTOO_MIRRORS="https://mirror.yandex.ru/gentoo-distfiles/"
Сделаем индивидуальный файл, в котором описаны настройки для обновления
mkdir --parents /mnt/gentoo/etc/portage/gentoo.conf cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/gentoo.conf/
Монтируем файловые системы
Параметр --make-rslave необходим для поддержки systemd в ходе установки. Я выбрал профиль openrc, в связи с чем, поддержка systemd мне нахуй не нужна
mount --types proc /proc /mnt/gentoo/proc mount --rbind /sys /mnt/gentoo/sys mount --rbind /dev /mnt/gentoo/dev mount --bind /run /mnt/gentoo/run
Переходим в изолированное окружение и загрузим в память некоторые параметры прпофиля
chroot /mnt/gentoo /bin/bash source /etc/profile
Монтируем первый раздел диска в папку /boot
mount /dev/vda1 /boot
Скачаем снимок репозитория
emerge-webrsync
Далее, для синхронизации с репозиторием пакетов gentoo, мы будем использовать git. Установим его
emerge --ask dev-vcs/git
Для удобства (конкретно мне) соберём и установим vim, но соберём мы его без излишеств. Cкажем протажу что нам не нужны в пакете звук и шифрование. До сих пор не могу понять где это может пригодиться
nano /etc/portage/package.use/vim app-editors/vim -crypt -sound
emerge -av vim
Для дополнения по табу установим bash-comletion
emerge -av bash-completion
А теперь подредактируем наш индивидуальный конфиг. Заменим значение sync-type = rsync на git и sync-uri на https://github.com/gentoo/gentoo. Файл /etc/portage/repos.conf/gentoo.conf должен выглядеть примерно так
[DEFAULT] main-repo = gentoo [gentoo] location = /var/db/repos/gentoo sync-type = git sync-uri = https://github.com/gentoo/gentoo auto-sync = yes sync-rsync-verify-jobs = 1 sync-rsync-verify-metamanifest = yes sync-rsync-verify-max-age = 3 sync-openpgp-key-path = /usr/share/openpgp-keys/gentoo-release.asc sync-openpgp-keyserver = hkps://keys.gentoo.org sync-openpgp-key-refresh-retry-count = 40 sync-openpgp-key-refresh-retry-overall-timeout = 1200 sync-openpgp-key-refresh-retry-delay-exp-base = 2 sync-openpgp-key-refresh-retry-delay-max = 60 sync-openpgp-key-refresh-retry-delay-mult = 4 sync-webrsync-verify-signature = yes
Удалим, что скачал webrsync
rm -rf /var/db/repos/gentoo/
А теперь обновим дерево пакетов до самого актуального
emerge --sync
В переменной 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"
А затем обновиться с новыми флагами
emerge -avuDN @world
Далее нам разово понадобится утилита cpuid2cpuflags для автоматического выбора флагов процессора
emerge --oneshot cpuid2cpuflags
Выхлопом команды echo создадим файл с необходимыми флагами
echo "*/* $(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags
При настройке часового пояса, хуй знает почему, но симлинк локалтайма уже есть. Удалим его
rm /etc/localtime
Затем настроим часовой пояс. У меня это Владивосток
echo ’Asia/Vladivostok’ > /etc/timezone emerge --config timezone-data
Настроим локали приведя файл locale.gen к следующему виду
vim /etc/locale.gen en_US ISO-8859-1 en_US.UTF-8 UTF-8 ru_RU.UTF-8 UTF-8
И сгенерируем их
locale-gen
Посмотрим какие теперь присутствуют
eselect locale list
Выберем необходимую
eselect locale set <номер>
Перезагрузим окружение
env-update && source /etc/profile
Ставим исходники
emerge -av gentoo-sources
И необходимые пакеты для сборки и старта системы
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. Заебенем это в следующих постах!