Предисловие
Во-первых, этот текст изначально писался по следам того, как я пытался установить и перейти на Gentoo. Но эта джентльменская система мне не покорилась пока что… Одну-две недели я ставил заново, компилировал, менял настройки, ядра, профили, но при входе так и не смог получить изображение — либо чёрный экран, либо чёрный экран с вверху мигающим курсором. Сдаётся мне, что дело в этой ненавистной зелёной компании, которые из рук вон плохо работают с ГНУ системами. Кто-то сейчас со мной может не согласиться, но у всех свой опыт, и если работает хорошо в одной системе, то не факт, что в другой будет всё гладко.
Во-вторых, хотя я и не дошёл до рабочего стола, но за время изучения фиксировал накопленные знания в этот файлик, заносил свои действия, жалко откладывать в долгий ящик (не надо шуток про пчёлку), если всё-таки установлю и будет повод вернутся к этому тексту. Может, кто подскажет полезного, а иным, кто боится Дженту, будет интересно почитать и разубедит в сложности этой системы, если справился даже я (почти). Но уже говорил, установка — меньшая из проблем.
Это было вступление, а теперь приглашаю почитать заинтересовавшихся.
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Пользовался я калькой — производной от Gentoo — на протяжении почти 2-х лет. Но несмотря на кое-какое изучение в начале в виде чтения своей wiki на сайте, которая, несомненно, помогла в освоении, и опыт использования сильно проще дистрибутив для меня не стал. Оно и понятно — не мой это уровень, требует более глубоких и комплексных знаний. Команда Calculate делает Gentoo легкодоступным для большинства, но эта работа накладывает некий отпечаток, кмк, добавляя местами нестабильности, потому что появляется ещё одна прослойка. Может это я такой, не у всех она ломается, либо они способны починить и вовремя отловить неполадки. Форум без дела не простаивает.
Коли второй SSD у меня не занят после создания заново таблиц разделов на обоих, а на основной поставил MX, то начал там ковырять Gentoo, давно на неё заглядываюсь, взглянуть ради интереса и изучения нового. Первым делом открыл статью vantiki об установке и почти сразу отказался от такого приключения. Позже нашёл ещё один материал более старый. Тогда я понял, что проще нет и не будет. Потом заметил ещё более старый, но я руководствовался первыми двумя ссылками.
Когда по земле ещё не летали волны 5G, а Arch не имел своего TUI установщика в виде archinstall, на сайте были пользователи, которые устанавливали данную систему через gui- и псевдоgui. Я поискал такой для Gentoo и по запросу «gentoo gui installer» первым результатом был выдан вот такой скрипт, который поможет в установке.
Если Calculate Linux Scratch поставить относительно просто, можно через GUI, и получить пусть и голую, но работающую систему, то с Gentoo так не выйдет — тут система собирается с нуля изначально, как конструктор и всё в консоли.
Насколько я понял о скрипте:
- Отсортирует зеркала;
- Размечает выбранный диск/SSD: efi раздел для загрузчика и всё остальное под /;
- Скачивает Stage3 и устанавливает базовую систему;
- Задаёт там некоторые конфигурационные файлы и прописывает содержание;
- Позволяет сразу выбрать профиль;
- Выбор в настройках между бинарными пакетами и компиляцией;
- Установит linuxfirmware, dhcpcd, dracut, efibootmgr, gentoolkit, installkernel и некоторые дополнительные пакеты (смотрите вывод в процессе);
- Выполнит emerge-webrsync (не уверен);
- В конце попросит задать пароль для root;
- И другие операции/параметры, которые можно выбрать при настройке.
Применение скрипта
Установка
Для использования первым делом рекомендуется скачать liveiso Arch (я взял его) и загрузиться в голую консоль, потом обновить репозитории, скачать git и скачать сам скрипт
pacman -Sy git
git clone https://github.com/oddlama/gentoo-install
Затем этап конфигурирования, появляется окно для выбора настроек (Скриншот 1), в которых пользователь задаёт параметры. С разделами работать не умеет, готовьтесь отдать ему всё устройство, которое он отформатирует. Настройки сохраняются под выбранным названием в домашней директории. Потом выход и этап выполнения поставленных задач.
cd gentoo-install #войти в скачанную папку
./configure #Команда для смены конфигурации
./install #Команда для запуска выполнения поставленных задач
Получается такая разметка, / занимает весь доступный объём.
Настройка
После установки базовой системы начинается этап настройки и дальнейшая установка — как рекомендуется на странице скрипта, из своей рабочей системы MX подключился к / Gentoo через chroot. Плюс такой связки, что установка, процессы настройки и компиляции не отрывают от основного рабочего процесса за ПК (в отличие от голой консоли в tty), из рабочей системы можно подсмотреть в интернете или Handbook.
Между этими двумя статьями смотрел и читал Gentoo Handbook по установке. Но эта информация имеет общий характер, написана от понимающих и прожжённых линуксоидов, я не всё оттуда понимаю. Ещё нашёл эту статью со стороннего сайта. Суть у них примерно одна, оставляю данные материалы для ознакомления, создать у себя понимание и оценить масштаб проблемы установки, что способы и последовательность действий могут отличаться. Как и установка CLS, это заняло у меня длительный срок, только ещё больше. Скрипт значительно сокращает количество рутинных операций, автоматизирует процесс первоначальной установки, сокращает ввод команд.
Я ставил четвёртым способом — нечто среднее между статьями и хэндбуком. Туда стоит заглядывать для разъяснения и выбора некоторых параметров и действий под себя, есть страницы на русском, иначе помогут переводчики. Например, параметр MAKEOPTS авторы объясняют по-разному. Я задал его равным 11, то есть количество потоков -1. У меня 5600G 6/12 и вовремя компиляции ядра (оценивал на этом процессе) загрузка ЦП была ≈95%, если поставить 12, то 100%.
Выбор профиля
Выбор профиля доступен в меню скрипта. В первые две попытки возникал вопрос — почему компиляция через GCC? В третий раз я заметил, как сменить его на LLVM — в меню скрипта при выборе варианта для установки есть llvm, его и выбрал. Это можно задать либо сразу, либо в профиле позже. Но профили с llvm не имеют редакции desktop, только minimal. Поэтому и процесс настройки/компиляции займёт больше времени, потому что всё собирать придётся самому, насколько я понял. Изначально выбирал 23, как более современный, но после неудачных установок вновь вернулся к 17-му, на снимках зафиксировал 17-й. Их смена мне не помогла.
Материалы для справки
Выбор компилятора
В Calculate собирается через clang/clang++ (из набора LLVM), в Arch тоже ставил его для компиляции вместо GCC, но там это опционально, доступно оба варианта для использования. Поэтому смену компилятора на clang считаю оправданной. Во время написания материала отправился за сравнением и нашёл статью с хабра, где автор рассказывает об LLVM. Если кратко, то в этот проект в своё время вложились крупные технологические компании (бигтех), особенно после перехода GCC на GPLv3, от этой лицензии у них и раньше свербило, подробнее читайте в материале. Статьи об LLVM есть на разных сайтах.
Это вопрос, кмк, выбора между СПО (GPLv3) и производительностью. Но в статье про Арч авторы утверждают, что не всё собирается через llvm. Например, я не могу собрать браузер Librewolf в Calculate, на поздней стадии компиляции выдаёт ошибку. Собрал его через GCC, отключив флаг clang. Материалы о GCC и Clang c gentoo.org. О GCC текст короткий, но внизу ещё есть пара ссылок полезных.
Важные отличия Clang по сравнению с GCC
1) Clang не поддерживает некоторые расширения GCC, такие, как вложенные функции. Это основная причина, по которой Clang не может компилировать sys-libs/glibc, хотя в настоящее время ведется большая работа над тем, чтобы сделать glibc альтернативным инструментарием. Во-вторых, GCC по умолчанию использует -ftrapping-math, Clang по умолчанию использует -fno-trapping-math.
2) GCC не требует установки отдельной библиотеки для PGO и является самодостаточным. Clang требует llvm-runtimes/compiler-rt-santizers[profile orc] перед включением флага pgo USE для пакетов.
3) GCC по умолчанию выполняет взаимодействие кода через -fsemantic-interposition. Clang делает меж процедурные оптимизации по умолчанию, но -fno-semantic-interposition позволяет дальнейшие меж процедурные оптимизации, если код это позволяет.
1) В GCC по умолчанию стоит -ffp-contract=fast, а в Clang по умолчанию -ffp-contract=on. Если вы не собираетесь использовать более рискованное поведение GCC, то проблем с более безопасным значением по умолчанию в Clang возникнуть не должно.
(текст выше я слабо понял, но это что-то на уровне программистов)
2) До 12-й версии GCC не запускал векторные оптимизации при -O2 или ниже. Clang выполняет векторные оптимизации на всех уровнях выше -O1, кроме уровня -Oz, на котором работает только SLP-вектор. Хотя это вряд ли вызовет проблемы, в настоящее время это актуально, поскольку sys-devel/gcc:11 все еще находится в ::gentoo.
3) Оба компилятора LTO-фазы функционируют совершенно по-разному, и их подробное описание выходит за рамки данной статьи. То, что работает в GCC, может работать или не работать в Clang, и наоборот.
Проблемы и вопросы, с которыми я столкнулся
Не работает команда emerge-webrsync, если ставить через этот скрипт, о которой есть упоминания в обеих статьях. Насколько я понимаю, это важная команда, раз оба автора её указывают. Нашёл решение — нужно в файле сменить значение git на webrsync. Либо при настройке скрипта сменить тип синхронизации.
/etc/portage/repos.conf
sync-type = webrsync
Кусок о ключах, на которые будет ругаться emerge (не применял и работоспособность не проверял, но сам искал про ошибки ключей до правки с git на webrsync, потому что иначе будет ругаться на ключи.
Eix обязателен к установке, в кальке искал/ищу пакеты обычно через него. Работает быстрее «emerge -s», но имеет другой вывод и ключи. Первоначально нужно создать локальную базу для поиска, а после её обновлять
eix-update && eix-sync
Genkernel — это утилита, созданная Gentoo, которая используется для автоматизации процесса сборки ядра и initramfs. Некоторые основные функции:
- Конфигурация исходного кода ядра;
- Сборка сжатого ядра bzImage и его копирование в /boot;
- Создание initramfs и копирование его в /boot; создание символьных ссылок в /boot;
- Добавление настроенного вручную содержимого в initramfs. Например, файлов связанных с шифрованием, splash images, дополнительных модулей и так далее;
- Конфигурация загрузчика для загрузки нового ядра и initramfs.
Типичное недоразумение — считать, что genkernel "автоматически" создает индивидуальную конфигурацию ядра. genkernel автоматизирует процесс сборки ядра и собирает initramfs, но не создает индивидуальный конфигурационный файл ядра. Он использует универсальный файл конфигурации ядра, который включает в себя поддержку для типичных компонентов системы на архитектурно-зависимой основе. С подробностями установок по умолчанию для каждой архитектуры можно ознакомиться в upstream repository. Выберите архитектуру, затем выберите файл конфигурации ядра.
Файловая система initramfs (initial ram file system) используется для предварительной подготовки Linux-систем при загрузке перед запуском процесса init. Обычно initramfs занимается монтированием важных файловых систем (загружая соответствующие модули и драйверы ядра), таких как /usr или /var, подготовкой файловой структуры /dev и т. д. У пользователей, использующих зашифрованные файловые системы, initramfs так же будет запрашивать парольную фразу, прежде чем смонтировать файловые системы. Когда файловые системы смонтированы, управление передается init, который занимается дальнейшим запуском всех необходимых служб и загрузкой остальной части системы.
Binutils — это набор инструментов для создания и управления определенными типами двоичных файлов. Они могут работать с исполняемыми файлами, библиотеками, объектными файлами, ассемблерным кодоми т. д. Binutils содержит такие команды, как компоновщик ld, ассемблер as и инструмент strip для удаления отладочных символов.
Grub
Оставлю пару заметок о загрузчике: GRUB, миграция на GRUB2 и pingvinus. Будет упоминание об отключенном параметре «GRUB_DISABLE_OS_PROBER» для обнаружения других систем. Пропишите в файл строку
/etc/default/grub
GRUB_DISABLE_OS_PROBER=false
Флаги
Флаги для конкретного пакета задавать в папке …, создав там файл с именем пакета, например, cmake, firefox-esr, keepassxc, librewolf, nvidia-drivers и тд (это для удобства), а в каждый из этих файлов уже прописать поддержку или отключение флагов, с которыми я сам не особо понимал как взаимодействовать. Подробнее расписано тут.
Доступные флаги можно найти на сайте wiki.gentoo.org, введя в поиске нужный пакет, либо они будут указаны при установке (без расшифровки). Флаги начинаются с минуса для отключения и флаг без знаков — для включения.
В таком случае пакет cmake будет установлен без поддержки qt6, но с поддержкой gui
/etc/portage/package.use #расположение файлов для управления флагами
sudo nano cmake
dev-build/cmake -qt6 gui #содержимое файла для переключения флагов
nVidia
Драйвер nouveau, nvidia-drivers, Nouveau & nvidia-drivers switching
Для решения вопроса с выводом изображения и загрузки DM пересобирал модули
emerge --ask @module-rebuild
В этом файле менял переменную
(/etc/portage/make.conf)
USE="dist-kernel"
Но либо я чего-то не учёл (в силу опыта и знаний), либо где-то ошибся, что тоже вполне может быть.
Теперь начал менять пакетам USE флаги и в Calculate заметил, что отключен dist-kernel.
Эпиграф
Гентушников и тех, кто понимает в этом, прошу отозваться о данном варианте установки (о скрипте) за исключением того, что это не «Gentoo way», как читать пересказ книги вместо самой книги. Как написано на той странице, способ этот рекомендуется как новичкам, которые хотят посмотреть на Gentoo, так и тем, кто ставить умеет, но хочет сэкономить время. Через ввод команд в лайв LM, как предлагает vantiki, я пробовал — это долго, есть вероятность ошибиться или что-то упустить, плюс нужно под рукой держать заготовленный список команд для ввода. Но всё равно потом оказывается, что во время настройки системы пользователь сам будет ставить нужные модули и пакеты, то есть скрипт уменьшает количество вводимых команд.
Я сам себя гентушником по-прежнему не считаю, рано ещё, хотя и ещё на шаг приблизился к этому званию. В детстве я не плохо играл в шахматы (самоучка) и усвоил один урок — если хочешь научится хорошо играть, повышать своё мастерство, то нужно играть с сильными соперниками. А за ошибки поправьте, они наверняка есть, я сам только-только в этом разбираться начал. Этот материал написан больше в исследовательских целях, для закрепления пройденного, объединить и актуализировать имеющиеся материалы. Надеюсь, поможет мне самому структурировать знания и другим тоже для знакомства. Плюс на сайте такие материалы оставлять надёжнее, нежели в файлах, где форматирование и информация могут испортиться.
Почти 2-хлетний опыт на Calculate мне безусловно помог в понимании вещей и выводу emerge — один из плюсов данного пакетника в том, что в выводе отображаются подсказки: установка нужных или удаление блокирующих установку пакетов, обновление конфигурационного файла (dispatch-conf) и прочее. Например, у меня не получалось по началу установить комплект пакетов Xfce и тут стоит смотреть на версии, потому что они могут не совпадать. В другой установке xfce-meta установился без вопросов.
Несмотря на неудачный опыт установки, что попасть на рабочий стол у меня не получилось, но опыт всё-таки интересный и полезный. Польза, что теперь лучше стал понимать кальку, она выглядит чуть менее сложной. С Calculate в этом плане, конечно, гораздо проще и возни меньше — скачал образ и ставишь из графики. Но для сравнения и опыта стоит и на эту ёлку попытаться влезть.
Оставлю свой make.conf на момент написания. Общие рекомендации по его заполнению. Список зеркал, заметка о выборе архитектуры с wiki.gentoo.org, подробнее о параметре -march.
COMMON_FLAGS="-O2 -pipe -march=native"
#флаги -O2/-O3 указывают на быстродействие ценой ошибок сборки
#-march — архитектура, под которую ведётся сборка
#COMMON_FLAGS="-O2 -march=znver3 -pipe" — для моего ЦП рекомендуется эта строка
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
#с 4-мя флагами выше не знаком пока, про них есть в статье выше
MAKEOPTS="-j11" #влияет на загрузку ЦП во время компиляции
CPU_FLAGS_X86="aes avx avx2 f16c fma3 mmx mmxext pclmul popcnt rdrand sha
sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3 vpclmulqdq"
#Выше набор инструкций, доступных для ЦП,
ACCEPT_LICENSE="*"
VIDEO_CARDS="nvidia, nouveau"
INPUT_DEVICES="libinput"
# NOTE: This stage was built with the bindist USE flag enabled
# This sets the language of build output to English.
# Please keep this setting intact when reporting bugs.
LC_MESSAGES=C.utf8
GENTOO_MIRRORS=" #Список зеркал используемых
https://gentoo-mirror.alexxy.name/
https://gentoo.c3sl.ufpr.br/ \
rsync://gentoo.c3sl.ufpr.br/gentoo/ \
https://mirrors.tnonline.net/gentoo/gentoo-distfiles/ \
https://gentoo.jss.hu"
FEATURES="getbinpkg"
ACCEPT_KEYWORDS="~amd64"
Комментарии
10:26
https://ventureo.codeberg.page/
Gentoo пока не особо интересует, так как мне более удобен SystemD и хватает оптимизаций компилятора от CachyOS
12:48
А если серьезно то очень даже неплохо, теперь с 2 ядра проца играю в майн на 16 чанков с 60+ фпс)))
11:18
Без литра не установишь - причём только самогона ! ))
11:38
— Взял
— Краски взял?
— Взял
— Кисти взял?
— Взял
— Поллитру взял?
— Да я подумал, по литру мало будет, взял по два
Я не дошёл до такой стадии
11:43
*Политуру )
Ты что и политуру еще не пил ? О_о ....тогда куда ж те в Генту ? )))
__https://pingvinus.ru/distribution/sabayon-linux
11:33
11:39
12:44