Добрый день дорогой читатель, данное повествование не является истиной в последней инстанции, это некая инструкция по установке (в основном для собственного пользования) Gentoo (условия таковы установка с использованием UEFI и на файловую систему BTRFS на чистый накопитель и системой инициализации SystemD) с пояснениями и все возможными мыслями. Действия будут происходить на KVM/QEMU для наглядности. Приступим...
Загрузимся с предварительно подготовленной флешки скачав с официального сайта образ Minimal installation CD (можно использовать LiveGUI USB Image, будет по проще так как с графической оболочкой, но на вкус и цвет разные фломастеры)
если не уверены что в режиме UEFI загрузились можно воспользоваться следующей командой
ls /sys/firmware/efi/efivars
должны получить что то подобное как на скрине ниже
Давайте определимся с накопителем. Так как это виртуальная машина выбор очевиден, для наглядности все же посмотрим что у нас по накопителям с помощью команды ниже
lsblk
переходим к разметке накопителя командой
cfdisk /dev/vda
выбираем GPT
создаем разделы
dev/vda1 - это под boot
dev/vda2 - это под корневой раздел где будет система (root)
dev/vda3 - это под раздел swap
переходим к форматированию разделов, давайте посмотрим на то что получилось командой
lsblk
форматируем раздел /dev/vda1 в fat32 командой
mkfs.vfat -F32 /dev/vda1
далее форматируем раздел /dev/vda2 в btrfs командой
mkfs.btrfs -f /dev/vda2
и раздел swap командой
mkswap /dev/vda3
ниже скрин с результатами наших телодвижений с разделами
Переходим к монтированию. Команду 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
Должно получится как на скрине ниже. Получилось? замечательно двигаемся дальше
возвращаемся в директорию /mnt/gentoo скачаем и распакуем туда tar-архив, так как это корень нашей будущий системы
cd /mnt/gentoo
скачиваем с помощью текстового браузера tar-архив
links https://gentoo.org/downloads/
далее скачиваем tar-архив, в данном случае я воспользуюсь архивом под desktop, содержащий в себе profile(о профилях напишу чуть ниже) с системой инициализации systemd
пора переходить к распаковке tar-архива следующей командой
tar xpvf stage3-*.tar.xz --xattrs --numeric-owner
давайте разберем что за параметры у нас
-x, --extract – распаковывает файлы из архива
-p, --bzip2 – сохраняет все права доступа
-v --verbose выводит всю информацию о текущем процессе и показывает сведения об уже завершенном процессе.
-f file, --file – выводит результат в file (или на устройство)
--xattrs - Расширенные атрибуты представляют собой пары имя:значение, которые постоянно связаны с файлами и каталогами, подобно тому как строки окружения связаны с процессом.
--numeric-owner - опция позволяет восстановить пользователей файлов по числовому дескриптору, а не по имени, во избежании ошибок.
процесс займет какое то время, наберитесь терпения
переходим к конфигурированию make.conf
nano /mnt/gentoo/etc/portage/make.conf
Флаги компилятора, используемые для 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)
Далее копируем resolv.conf иначе сеть работать не будет
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
либо же
cp -L /etc/resolv.conf /mnt/gentoo/etc/
--dereference -L - означает скопировать как файл, если является символьной ссылкой.
далее монтируем необходимые файловые системы для дальнейшей работы 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
результат на скрине ниже
далее переходим в chroot и загружаем параметры из текущего профиля следующими командами
chroot /mnt/gentoo /bin/bash
source /etc/profile
эта команда чисто для эстетики меняем приглашение
export PS1="(chroot) ${PS1}"
Командой ниже загрузим последний снимок (которые выпускаются каждый день), с одного из зеркал Gentoo, и распакует его в системе
emerge-webrsync
Но, вернемся к репозиториям, для быстрой загрузки исходного кода рекомендуется выбрать быстрое, географически находящееся рядом зеркало. 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)
Следующей командой вносим изменения в make.conf
mirrorselect -i -o >> /etc/portage/make.conf
отмечаем нужные нам зеркала нажатием пробела
приводим в порядок make.conf
nano /etc/portage/make.conf
GENTOO_MIRRORS="..."
думаю тут понятно, зеркала репозиторий Gentoo. Далее обновляем репозиторий ebuild-файлов Gentoo до текущего состояния следующей командой
emerge --sync
Поговорим о профилях, что такое профили Gentoo, это набор предустановленных флагов глобально, набор предустановленных флагов для пакетов, набор замаскированных флагов и набор замаскированных пакетов.
Давайте посмотрим какие есть профили, в данном случае посмотрим стабильные следующей командой
eselect profile list | grep stable
что бы выбрать профиль воспользуемся следующей командой (ХХ заменить на номер профиля)
eselect profile set XX
следующая команда позволяет посмотреть какой профиль текущий
eselect profile show
пока мы ни чего не будем менять, но помните после смены профиля обязательно обновите world
Опционально. Можно подключить бинарный репозиторий, то бишь скомпилированных пакетов, посмотрим следующий конфиг, он должен быть уже заполнен
nano /etc/portage/binrepos.conf/gentoobinhost.conf
[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
после этого будут устанавливаться скомпилированые пакеты. Опять же тут могут возникнуть нюансы в дальнейшем, по этому я не буду им пользоваться, это всего лишь мои предположения, но все же.
устанавливаем пакет app-portage/cpuid2cpuflags для получение флагов процессора
emerge --ask --verbose --oneshot app-portage/cpuid2cpuflags
и добавляем их make.conf
cpuid2cpuflags >> /etc/portage/make.conf
наводим порядок в make.conf в соответствии с правилами, результат на скрине ниже
nano /etc/portage/make.conf
так же пропишем параметр для видео карты, так как у меня виртуальная машина(KVM/QEMU) адаптер будет virgl, для других смотрим соответствующий раздел на handbook.
VIDEO_CARDS="virgl"
далее обновляем world, наберитесь терпения процесс занимает продолжительное время
emerge --ask --verbose --update --deep --newuse @world
займемся часовым поясом выполним следующие команды
ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
hwclock --systohc
переходим к настройке локалей редактируем следующий конфиг
nano /etc/locale.gen
добавляем содержимое
...
en_US ISO-8859-1
en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8
...
и выполняем следующую команду
locale-gen
так же пропишем шрифт с поддержкой кирилицы и переключение языка (смена языка сочетанием клавишь shift+ctrl)
nano /etc/vconsole.conf
внести следующее
...
KEYMAP=ru
FONT=cyr-sun16
...
устанавливаем пакеты с утилитами для файловых систем
emerge --ask sys-fs/btrfs-progs
emerge --ask sys-fs/e2fsprogs
emerge --ask sys-fs/dosfstools
устанавливаем следующий пакет содержащий прошивки для устройств
emerge --ask sys-kernel/linux-firmware
если у вас процессор от 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 так как их нет в системе
и устанавливаем пакет sys-kernel/installkernel, обратите внимание что теперь пакет sys-kernel/dracut устанавливается как зависимость к пакету sys-kernel/installkernel, а так же sys-boot/grub и sys-boot/efibootmgr, надеюсь вы немного поняли смысл зависимостей пакетов
emerge --ask sys-kernel/installkernel
давайте установим готовое ядро следующей командой
emerge --ask sys-kernel/gentoo-kernel-bin
устанавливаем следующий пакет для генерации конфига fstab, ну что бы не прописывать все руками
emerge --ask --verbose --oneshot sys-fs/genfstab
генерируем и проверяем конфиг fstab следующими командами
genfstab -U / >/etc/fstab
nano /etc/fstab
должно быть что то подобное как на скрине ниже
Далее пропишем имя виртуальной машины в /etc/hostname, пусть будет Gentoo
nano /etc/hostname
устанавливаем пакеты net-misc/dhcpcd который отвечает за работу сети и net-misc/chrony который позволяет синхронизировать дату и время через интернет
emerge --ask net-misc/dhcpcd net-misc/chrony
создадим симлинк для автоматической загрузке при включении системы
systemctl enable dhcpcd
systemctl enable chronyd
устанавливаем следующие пакеты для загрузки будщей системы, но они уже установлены, об этом написано чуть выше
emerge --ask sys-boot/grub sys-boot/efibootmgr
далее устанавливаем grub на накопитель (именно на устройство, а не на раздел!!!) и конфигурируем его
grub-install /dev/vda
grub-mkconfig - o /boot/grub/grub.cfg
далее устанавливаем пароль для root
passwd
далее выходим из chroot переходим в корень отмонтируем все что было смонтировано и перезапускаемся
exit
cd /
umount -R /mnt/gentoo
reboot
если все сделано правильно то результат будет как на скрине ниже, входим в нашу систему и продолжаем настраивать
теперь можно сменить локаль на русскую, выполнив следующие команды, получим список локалей
eselect locale list
выберим нужную, в данном случае 7
eselect locale set 7
можно на всякий случай убедится
eselect locale show
и перезапустим окружение что бы изменения вступили в силу
env-update && source /etc/profile
создаем нового пользователя например john и устанавливаем пароль для нового пользователя
useradd -G wheel -s /bin/bash john
passwd john
на всякий случай посмотрим статусы dhcpcd и chronyd следующими командами
systemctl status dhcpcd
systemctl status chronyd
если не запущены (что маловероятно) то выполним команды
systemctl restart dhcpcd
systemctl restart chronyd
далее устанавливаем пакет app-admin/sudo следующей командой
emerge --ask app-admin/sudo
и конфигурируем файл sudoers следующей командой
nano /etc/sudoers
раскоментируем сторку %wheel ALL=(ALL:ALL) ALL
далее ради любопытства давайте поставим sys-proccess/htop посмотрим сколько же есть наша система да и app-misc/neofetch ну как же без него :)
sudo emerge --ask sys-process/htop app-misc/neofetch
можно сказать использует не о чем, да и чему там, процессов по минимуму. Ну и чисто для эстетического блаженства
Поздравляю!!! Вот мы и установили Gentoo и внесли базовые настройки, весьма длительный процесс.
P.S. Подведем итоги. Дистрибутив достаточно интересен, с необычной пакетной системой Portage (так же с возможностью выбора системы инициализации SystemD и OpenRC). По крайней мере для меня было что-то новое и интересное. Gentoo не расчитана для начинающих пользователей, все же нужно иметь опредиленный опыт за спиной и давольно таки не малый богаж знаний(это даже без сборки ядра), в целом Gentoo для опытных linux-пользователей и энтузиастов. Данный дистрибутив занял прочно нишу и имеет большое комюнити, а так же Handbook ни чуть не меньше ArchWiki. Вероятоно больше, много полезной информации. Gentoo могу по рекомендовать тем кто хочет углубиться в изучение конфигов и подтянуть свои знания в области Linux. Хочу пожелать удачи начинающим джедаям, да прибудит с вами Сила!
За основу взято Handbook, так же несколько инструкций от других пользователей и форумы соответствующей тематики и переписаны под себя
За сим откланиваюсь...