Разрушители легенд — Gentoo Linux +55


Дочка Убунту прибежала к Дебиану и, весело смеясь, поцеловала его в лоб: "С днём рождения, папа!". Затем она окинула радостным взглядом сидящих за столом гостей и спросила своим звонким голосом:
— Папа, а где Gentoo, разве он ещё не пришёл?
— Нет, он ещё только собирается.

Среди прочих Linux дистрибутивов Gentoo выделяется тем, что его окружает множество мифов, светлой и темной окраски. Я его использую более 10 лет в качестве домашней и офисной рабочей станции и хочу с вами разоблачить несколько мифов и создать парочку новых.




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


Миф №1 — прирост производительности


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


Это на самом деле не совсем миф, но вы скорее всего не заметите прироста производительности, если не ставите целью доказать это статистически, вооружившись Phoronix Test Suite или чем-то подобным. Возможно исключение для FireFox, собранного с профилированием, USE="pgo".


На чем основан этот миф? Действительно узкий круг вычислительных программ можно ускорить при компиляции под определенную платформу, задавая компилятору включение инструкций SIMD, AESNI, или AVX. Бинарные дистрибутивы из-за чрезмерной заботы о совместимости со старой архитектурой базой зачастую приносят подобные оптимизации в жертву. Вернее будет сказать, что так было раньше, а сейчас это не играет большой роли.


Определенно, не за это адепты ценят Gentoo.


Миф №2 — обновления съедают много времени


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


(5:515)$ sudo qlop -t libreoffice firefox qtwebengine
libreoffice: 15028 seconds average for 20 merges
firefox: 3127 seconds average for 32 merges
qtwebengine: 8884 seconds average for 5 merges

Во-первых никто не мешает долгоиграющие обновления запускать ночью. Во-вторых в любой момент задание emerge и компиляцию исходников можно поставить на паузу (Ctrl+Z), возобновив позже в фоновом режиме (bg) или явно (fg). В-третьих можно задать автоматическое обновление через небольной скрипт, например такой.


# Part 1
layman -S
emerge --sync
eix-update

# Part 2
emerge -avuND --with-bdeps=y --complete-graph=y --backtrack=30 --keep-going --verbose-conflicts --exclude "gentoo-sources firefox libreoffice chromium glibc perl python gcc" world
smart-live-rebuild -- -av --with-bdeps=y --complete-graph=y
emerge -av --exclude "gentoo-sources firefox libreoffice chromium glibc perl python gcc" @preserved-rebuild
eclean distfiles

Миф №3 — в Gentoo самые свежие версии программ


Конечно, если сравнивать с Debian Linux, то в целом это так, однако и тут бывают исключения. Тот же Debian раньше стал использовать Grub 2 в стабильной ветке и Perl какое-то время был более новой версии, нежели в Gentoo. Если же сравнивать стабильные ветки менее консервативных дистрибутивов с таковыми в Gentoo, то результат может быть каким угодно. Все зависит от кучи обстоятельств, насколько данный пакет обеспечен мейнтейнером и волонтерами. Например QEMU обновляется почти одновременно со стабильной веткой Github, а MATE — застрял в Gentoo на версии 1.12.2 из-за того, что у него мало разработчиков.


(5:499)$ eix -ce qemu;eix -ce mate
[I] app-emulation/qemu (2.9.0-r2@19.05.2017): QEMU + Kernel-based Virtual Machine userland tools
[N] mate-base/mate (1.12-r1): Meta ebuild for MATE, a traditional desktop environment

+1 — необычайная гибкость настроек


Поговорим теперь немного о достоинствах Gentoo Linux. Гибкость и возможность настроить очень многие аспекты ОС под себя это то, чем блещет дистрибутив. Вот всего лишь несколько таких примеров.


  • Systemd или OpenRC, решайте сами.
  • Pulseaudio ставить или нет, думайте.
  • Включить поддержку dri3 в mesa и Xorg или оставить dri2?
  • Собрать незамутненную 64-битную ОС без 32-х битных библиотек совместимости или не стоит упарываться нарываться?
  • Какие кодеки включить в ffmpeg, mpv, vlc?
  • Как насчет альтернативного пакетного менеджера, если штатные emerge и portage вас не устраивают?

+2 — скользящие релизы


Для меня это одно из основных преимуществ дистрибутива. Из-за того, что вы невнимательно читали RSS ленту вашего дистрибутива вы не окажетесь в ситуации, когда вам на голову свалился новый инит, файловая система или принцип работы сетевых интерфейсов.


Все важные изменения доносят до пользователей заблаговременно через механизм рассылки новостей. Прочитать последние актуальные новости дистрибутива можно командой eselect news read.


(5:501)$ sudo eselect news read
No news is good news.

+3 — хорошая документация


Это действительно так. Установку ОС значительно облегчает подробнейшее руководство, но есть также крайне полезные вики и форум.


Туда же входят упомянутые рассылки новостей и сообщения elog в специальных файлах /var/log/portage/elog.


± emerge и portage


Основная система управления пакетами portage и штатное средство управления пакетами emerge являются очень мощным и функциональным в руках опытного и внимательного к докам пользователя. Именно благодаря системе portage возможны тонкие и гибкие настройки операционной систему и пользовательского ПО (см. выше в +1). Даже беглое описание возможностей emerge/portage заслуживает отдельного поста, поэтому ограничусь общим описанием.


  • Установка и обновление программ позволяет указать нужные и ненужные опции, которые соответственно будут включены в них или исключены из них во время сборки. Это задается USE флагами, которые транслируются в --enable-<опция> и --disable-<опция> инструкции .configure скрипта установки из исходников.
  • Удаление программ тупо их удаляет, не заботясь о зависимостях. Так что будьте осторожны с тем, что вы собираетесь удалить. Если удалить python или gcc, придется затем скачивать бинарные пакеты, так как emerge впадет в ступор и будет не в состоянии собрать программу из исходников.
  • Поиск в базе данных пакетов, список файлов в пакете, определение пакета по заданному файлу, зависимости данного пакета, история операций emerge и прочие полезности.
  • Настройка производится правкой текстовых файлов, что не удивительно. С другой стороны таких файлов несколько и надо знать, что за что отвечает.
  • Обсчет зависимостей, парсинг древа портов происходит довольно медленно и это зачастую нервирует. Стандартная проверка обновлений может занять 2 минуты прежде чем выдать результат на экран.
  • Иногда случаются блокировки, конфликты между пакетами в момент обновления. В большинстве случаев такие ситуации устраняются за пару минут, если пользователь сносно знает матчасть. Однако в крайне редких случаях можно встрять надолго и распутывать зависимости по часу, а то и более.

Из-за чего могут возникать такие ситуации? По самым разным причинам, изменения в лицензировании продукта, необходимость замаскировать, или наоборот размаскировать пакет, изредка ляпы разработчиков. Тут наблюдается обратная зависимость от частоты обновлений, поэтому рекомендуется регулярно и по возможности часто обновлять систему, чтобы накопленная энтропия в древе портов не порождала цепной реакции.


-1 — начальная установка занимает много времени


Полная ерунда, вот установка с помощью однострочника.


wget goo.gl/5Y2Gj -O install.sh && sh install.sh

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


  1. Качественная документация, о чем говорилось выше.
  2. SystemRescueCd — дистрибутив, созданный с целью восстановления работоспособности системы после аварии, основан на Gentoo. SystemRescueCd очень полезен в качестве установщика, позже на заключительном этапе вам пригодится образ ядра загрузочного LiveCD образа, если возникнут трудности с настройкой и сборкой ядра.
  3. Средство автоматизированной сборки ядра genkernel позволяет безболезненно пройти самый запутанный и неформализуемый процесс конфигурации и сборки ядра. Другие утилиты из набора portage-utils, eix, eselect и другие позволят хорошо ориентироваться в порядке и зависимостях установленных пакетов и избежать состояний блокировки.

Маленькие хитрости


Если по каким-то причинам компиляция пакета прервалась (выключился свет, завис компьютер и т. д.), но технически может быть возобновлена, можно продолжить процесс с этого самого места. Это особенно ценно для LibreOffice, Chromium или qt-webengine, которые собираются не один час.


  1. ebuild /usr/portage/cate-gory/prog/prog-x.y.z.ebuild compile
  2. ebuild /usr/portage/cate-gory/prog/prog-x.y.z.ebuild install
  3. ebuild /usr/portage/cate-gory/prog/prog-x.y.z.ebuild qmerge

Смонтируйте /var/tmp/portage и /usr/portage на SSD, а если у вас немерено оперативной памяти, то можно и на tmpfs, это даст заметный прирост скорости работы emerge.


Можно сделать бинарный бэкапы системных пакетов на всякий пожарный случай.


quickpkg --include-config y <установленная программа>

Использованные материалы и полезные ссылки





К сожалению, не доступен сервер mySQL