Найти в Дзене

Установка Gentoo часть 1 (UEFI btrfs SystemD)

Добрый день дорогой читатель, данное повествование не является истиной в последней инстанции, это некая инструкция по установке (в основном для собственного пользования) Gentoo (условия таковы установка с использованием UEFI и на файловую систему BTRFS на чистый накопитель и системой инициализации SystemD) с пояснениями и все возможными мыслями. Действия будут происходить на KVM/QEMU для наглядности. Приступим... Загрузимся с предварительно подготовленной флешки скачав с официального сайта образ Minimal installation CD (можно использовать LiveGUI USB Image, будет по проще так как с графической оболочкой, но на вкус и цвет разные фломастеры) если не уверены что в режиме UEFI загрузились можно воспользоваться следующей командой ls /sys/firmware/efi/efivars должны получить что то подобное как на скрине ниже Давайте определимся с накопителем. Так как это виртуальная машина выбор очевиден, для наглядности все же посмотрим что у нас по накопителям с помощью команды ниже lsblk переходим к

Добрый день дорогой читатель, данное повествование не является истиной в последней инстанции, это некая инструкция по установке (в основном для собственного пользования) Gentoo (условия таковы установка с использованием UEFI и на файловую систему BTRFS на чистый накопитель и системой инициализации SystemD) с пояснениями и все возможными мыслями. Действия будут происходить на KVM/QEMU для наглядности. Приступим...

Загрузимся с предварительно подготовленной флешки скачав с официального сайта образ Minimal installation CD (можно использовать LiveGUI USB Image, будет по проще так как с графической оболочкой, но на вкус и цвет разные фломастеры)

если не уверены что в режиме UEFI загрузились можно воспользоваться следующей командой

ls /sys/firmware/efi/efivars

должны получить что то подобное как на скрине ниже

-2

Давайте определимся с накопителем. Так как это виртуальная машина выбор очевиден, для наглядности все же посмотрим что у нас по накопителям с помощью команды ниже

lsblk
-3

переходим к разметке накопителя командой

cfdisk /dev/vda

выбираем GPT

-4

создаем разделы

dev/vda1 - это под boot

dev/vda2 - это под корневой раздел где будет система (root)

dev/vda3 - это под раздел swap

-5

переходим к форматированию разделов, давайте посмотрим на то что получилось командой

lsblk

форматируем раздел /dev/vda1 в fat32 командой

mkfs.vfat -F32 /dev/vda1

далее форматируем раздел /dev/vda2 в btrfs командой

mkfs.btrfs -f /dev/vda2

и раздел swap командой

mkswap /dev/vda3

ниже скрин с результатами наших телодвижений с разделами

-6

Переходим к монтированию. Команду lsblk буду часто использовать для наглядности.

lsblk

монтируем раздел swap командой

swapon /dev/vda3

далее монтируем корневой раздел в директорию /mnt/gentoo

mount /dev/vda2 /mnt/gentoo

переходим в нее для создания subvolume и дальнейшего их монтирования

cd /mnt/gentoo

создаем subvolume для директорий / и /home

btrfs su cr @
btrfs su cr @home

возвращаемся в корень лайф-системы для дальнейшего перемонтирования

cd /

размонтируем /mnt/gentoo

umount /mnt/gentoo

и монтируем subvolume @

mount -o noatime,compress=zstd:4,space_cache=v2,discard=async,subvol=@ /dev/vda2 /mnt/gentoo

далее создадим директорию /mnt/gentoo/home для монтирования subvolume @home

mkdir /mnt/gentoo/home

аналогично корневому subvolume монтируем @home

mount -o noatime,compress=zstd:4,space_cache=v2,discard=async,subvol=@home /dev/vda2 /mnt/gentoo/home

так же создаем директорию для boot раздела /mnt/gentoo/boot/efi

mkdir -p /mnt/gentoo/boot/efi

монтируем

mount /dev/vda1 /mnt/gentoo/boot/efi

проверяем все ли у нас смонтировано командой

lsblk

Должно получится как на скрине ниже. Получилось? замечательно двигаемся дальше

-7

возвращаемся в директорию /mnt/gentoo скачаем и распакуем туда tar-архив, так как это корень нашей будущий системы

cd /mnt/gentoo

скачиваем с помощью текстового браузера tar-архив

links https://gentoo.org/downloads/
-8

далее скачиваем tar-архив, в данном случае я воспользуюсь архивом под desktop, содержащий в себе profile(о профилях напишу чуть ниже) с системой инициализации systemd

-9

пора переходить к распаковке tar-архива следующей командой

tar xpvf stage3-*.tar.xz --xattrs --numeric-owner

давайте разберем что за параметры у нас

-x, --extract – распаковывает файлы из архива

-p, --bzip2 – сохраняет все права доступа

-v --verbose выводит всю информацию о текущем процессе и показывает сведения об уже завершенном процессе.

-f file, --file – выводит результат в file (или на устройство)

--xattrs - Расширенные атрибуты представляют собой пары имя:значение, которые постоянно связаны с файлами и каталогами, подобно тому как строки окружения связаны с процессом.

--numeric-owner - опция позволяет восстановить пользователей файлов по числовому дескриптору, а не по имени, во избежании ошибок.

-10

процесс займет какое то время, наберитесь терпения

-11

переходим к конфигурированию make.conf

nano /mnt/gentoo/etc/portage/make.conf
-12

Флаги компилятора, используемые для GCC C и C++

COMMON_FLAGS="-march=native -O2 -pipe"

-march=native - данный флаг сообщает компилятору, чтобы он использовал целевую архитектуру существующей системы (той, на которую будет установлена Gentoo).

-O2 - класс оптимизации для gcc. Возможные классы: (оптимизация по размеру), 0 (ноль — без оптимизации), 1, 2 или даже 3 для более лучшей оптимизация по скорости (в каждый класс входят все флаги предыдущего, и некоторые дополнительные). -O2 является рекомендованным значением по умолчанию. Оставим как есть.

-pipe - флагом оптимизации является (использование конвейера вместо временных файлов для взаимодействия между различными стадиями компиляции). Это не имеет никакого влияния на сгенерированный код, при этом использует больше оперативной памяти. В системах с небольшим объемом памяти gcc может аварийно завершиться из-за нехватки памяти. В этом случае не используйте этот флаг.

MAKEOPTS="-j8"

Переменная MAKEOPTS определяет, сколько параллельных процессов компиляции должно запускаться при установке пакета. Лучше всего выбрать наименьшее из следующих значений: количество потоков у процессора или общий объем ОЗУ системы, разделённый на 2 ГиБ. На Виртуальной машине я в дальнейшем исправлю на j8 так как 8 ядра и 16Гб ОЗУ (да, жирная у нас получилась виртуалка)

ACCEPT_LICENSE="*"

тип лицензий, в данном случае используем все лицензии

L10N="ru en-US"

Данная переменная определяет, какую дополнительную поддержку локализации следует установить. Обычно это нужно для загрузки пакетами дополнительных пакетов языков.

USE="nls"

Добавляет нативную поддержку языка (с помощью утилит локали gettext)

-13

Далее копируем resolv.conf иначе сеть работать не будет

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

либо же

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

--dereference -L - означает скопировать как файл, если является символьной ссылкой.

-14

далее монтируем необходимые файловые системы для дальнейшей работы chroot

mount --types proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev
mount --bind /run /mnt/gentoo/run
mount --make-slave /mnt/gentoo/run
mount --types tmpfs --options nosuid,nodev,noexec shm /dev/shm

результат на скрине ниже

-15

далее переходим в chroot и загружаем параметры из текущего профиля следующими командами

chroot /mnt/gentoo /bin/bash
source /etc/profile

эта команда чисто для эстетики меняем приглашение

export PS1="(chroot) ${PS1}"
-16

Командой ниже загрузим последний снимок (которые выпускаются каждый день), с одного из зеркал Gentoo, и распакует его в системе

emerge-webrsync
-17

Но, вернемся к репозиториям, для быстрой загрузки исходного кода рекомендуется выбрать быстрое, географически находящееся рядом зеркало. Portage будет искать в файле make.conf переменную GENTOO_MIRRORS и использовать перечисленные в ней зеркала. Можно просмотреть список зеркал Gentoo и найти зеркало (или несколько зеркал), наиболее близко расположенное к месту физического расположения (чаще всего они и есть самые быстрые). Для этого надо установить пакет app-portage/mirrorselect. Воспользуемся следующей командой

emerge --ask --verbose --oneshot app-portage/mirrorselect

по параметрам

--ask - Прежде чем выполнять команду, отобразит предполагаемый результат и спросит подтверждение операции

--verbose - запускает emerge в режиме подробного вывода.

--oneshot - Обычная установка, но пакеты не будут добавлены в файл world и, следовательно, не будут в дальнейшем обновляться, но при очистки системы от старых пакетов командой emerge --depclean пакеты установлденные с --oneshot (то бишь вне world) будут удалены

Подробное описание основных действий и опций emerge описаны в статье Gentoo (emerge пакетный менеджер portage)

-18

Следующей командой вносим изменения в make.conf

mirrorselect -i -o >> /etc/portage/make.conf
-19

отмечаем нужные нам зеркала нажатием пробела

-20

приводим в порядок make.conf

nano /etc/portage/make.conf
-21

GENTOO_MIRRORS="..."

думаю тут понятно, зеркала репозиторий Gentoo. Далее обновляем репозиторий ebuild-файлов Gentoo до текущего состояния следующей командой

emerge --sync
-22

Поговорим о профилях, что такое профили Gentoo, это набор предустановленных флагов глобально, набор предустановленных флагов для пакетов, набор замаскированных флагов и набор замаскированных пакетов.

Давайте посмотрим какие есть профили, в данном случае посмотрим стабильные следующей командой

eselect profile list | grep stable
-23

что бы выбрать профиль воспользуемся следующей командой (ХХ заменить на номер профиля)

eselect profile set XX

следующая команда позволяет посмотреть какой профиль текущий

eselect profile show
-24

пока мы ни чего не будем менять, но помните после смены профиля обязательно обновите world

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

nano /etc/portage/binrepos.conf/gentoobinhost.conf
-25

[binhost]

priority = 9999

sync-uri = https://distfiles.gentoo.org/releases/<arch>/binpackages/<profile>/x86-64/

Далее надо прописать следующее в конфиг make.conf

nano /etc/portage/make.conf

FEATURES="getbinpkg binpkg-request-signature"

FEATURES="${FEATURES}"

...

после выполнения команды getuto если не планируете использовать можно закоментировать как на скрине
после выполнения команды getuto если не планируете использовать можно закоментировать как на скрине

и выполнить следующую команду

getuto

после этого будут устанавливаться скомпилированые пакеты. Опять же тут могут возникнуть нюансы в дальнейшем, по этому я не буду им пользоваться, это всего лишь мои предположения, но все же.

устанавливаем пакет app-portage/cpuid2cpuflags для получение флагов процессора

emerge --ask --verbose --oneshot app-portage/cpuid2cpuflags
-27

и добавляем их make.conf

cpuid2cpuflags >> /etc/portage/make.conf
-28

наводим порядок в make.conf в соответствии с правилами, результат на скрине ниже

nano /etc/portage/make.conf
-29

так же пропишем параметр для видео карты, так как у меня виртуальная машина(KVM/QEMU) адаптер будет virgl, для других смотрим соответствующий раздел на handbook.

VIDEO_CARDS="virgl"

далее обновляем world, наберитесь терпения процесс занимает продолжительное время

emerge --ask --verbose --update --deep --newuse @world
-30

займемся часовым поясом выполним следующие команды

ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
hwclock --systohc
-31

переходим к настройке локалей редактируем следующий конфиг

nano /etc/locale.gen

добавляем содержимое

...

en_US ISO-8859-1
en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8

...

и выполняем следующую команду

locale-gen
-32

так же пропишем шрифт с поддержкой кирилицы и переключение языка (смена языка сочетанием клавишь shift+ctrl)

nano /etc/vconsole.conf

внести следующее

...

KEYMAP=ru

FONT=cyr-sun16

...

-33

устанавливаем пакеты с утилитами для файловых систем

emerge --ask sys-fs/btrfs-progs
emerge --ask sys-fs/e2fsprogs
emerge --ask sys-fs/dosfstools
-34

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

emerge --ask sys-kernel/linux-firmware
-35

если у вас процессор от intel то установите следующий пакет с микрокодами,

emerge --ask sys-firmware/intel-microcode

перед установкой пакета sys-kernel/installkernel прописываем в соответствующий файл он соответствует названию пакета, без этого не получится установить. Это позволит полностью автоматизировать процесс распаковки, конфигурирования, компиляции и установки ядра

nano /etc/portage/package.use/installkernel

...

sys-kernel/installkernel dracut grub

...

dracut это утилита для создания initramfs, используемого при загрузке Linux в качестве первоначальной корневой файловой системы.

grub это загрузчик операционной системы, при данном флаге конфигурация grub будет автоматически обновляется при установке новго ядра. В данном случае установятся автоматически такие пакеты как sys-boot/grub и sys-boot/efibootmgr так как их нет в системе

-36

и устанавливаем пакет sys-kernel/installkernel, обратите внимание что теперь пакет sys-kernel/dracut устанавливается как зависимость к пакету sys-kernel/installkernel, а так же sys-boot/grub и sys-boot/efibootmgr, надеюсь вы немного поняли смысл зависимостей пакетов

emerge --ask sys-kernel/installkernel
-37

давайте установим готовое ядро следующей командой

emerge --ask sys-kernel/gentoo-kernel-bin
-38

устанавливаем следующий пакет для генерации конфига fstab, ну что бы не прописывать все руками

emerge --ask --verbose --oneshot sys-fs/genfstab
-39

генерируем и проверяем конфиг fstab следующими командами

genfstab -U / >/etc/fstab
nano /etc/fstab
-40

должно быть что то подобное как на скрине ниже

-41

Далее пропишем имя виртуальной машины в /etc/hostname, пусть будет Gentoo

nano /etc/hostname
-42

устанавливаем пакеты net-misc/dhcpcd который отвечает за работу сети и net-misc/chrony который позволяет синхронизировать дату и время через интернет

emerge --ask net-misc/dhcpcd net-misc/chrony
-43

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

systemctl enable dhcpcd
systemctl enable chronyd
-44

устанавливаем следующие пакеты для загрузки будщей системы, но они уже установлены, об этом написано чуть выше

emerge --ask sys-boot/grub sys-boot/efibootmgr
-45

далее устанавливаем grub на накопитель (именно на устройство, а не на раздел!!!) и конфигурируем его

grub-install /dev/vda
grub-mkconfig - o /boot/grub/grub.cfg
-46

далее устанавливаем пароль для root

passwd
-47

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

exit
cd /
umount -R /mnt/gentoo
reboot
-48

если все сделано правильно то результат будет как на скрине ниже, входим в нашу систему и продолжаем настраивать

-49

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

eselect locale list

выберим нужную, в данном случае 7

eselect locale set 7

можно на всякий случай убедится

eselect locale show

и перезапустим окружение что бы изменения вступили в силу

env-update && source /etc/profile
-50

создаем нового пользователя например john и устанавливаем пароль для нового пользователя

useradd -G wheel -s /bin/bash john
passwd john
-51

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

systemctl status dhcpcd
systemctl status chronyd
-52

если не запущены (что маловероятно) то выполним команды

systemctl restart dhcpcd
systemctl restart chronyd

далее устанавливаем пакет app-admin/sudo следующей командой

emerge --ask app-admin/sudo
-53

и конфигурируем файл sudoers следующей командой

nano /etc/sudoers

раскоментируем сторку %wheel ALL=(ALL:ALL) ALL

-54

далее ради любопытства давайте поставим sys-proccess/htop посмотрим сколько же есть наша система да и app-misc/neofetch ну как же без него :)

sudo emerge --ask sys-process/htop app-misc/neofetch
-55

можно сказать использует не о чем, да и чему там, процессов по минимуму. Ну и чисто для эстетического блаженства

-56

Поздравляю!!! Вот мы и установили Gentoo и внесли базовые настройки, весьма длительный процесс.

P.S. Подведем итоги. Дистрибутив достаточно интересен, с необычной пакетной системой Portage (так же с возможностью выбора системы инициализации SystemD и OpenRC). По крайней мере для меня было что-то новое и интересное. Gentoo не расчитана для начинающих пользователей, все же нужно иметь опредиленный опыт за спиной и давольно таки не малый богаж знаний(это даже без сборки ядра), в целом Gentoo для опытных linux-пользователей и энтузиастов. Данный дистрибутив занял прочно нишу и имеет большое комюнити, а так же Handbook ни чуть не меньше ArchWiki. Вероятоно больше, много полезной информации. Gentoo могу по рекомендовать тем кто хочет углубиться в изучение конфигов и подтянуть свои знания в области Linux. Хочу пожелать удачи начинающим джедаям, да прибудит с вами Сила!

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

За сим откланиваюсь...