- Разрушители легенд — Gentoo Linux
- Миф №1 — прирост производительности
- Миф №2 — обновления съедают много времени
- Миф №3 — в Gentoo самые свежие версии программ
- +1 — необычайная гибкость настроек
- +2 — скользящие релизы
- +3 — хорошая документация
- ± emerge и portage
- -1 — начальная установка занимает много времени
- Маленькие хитрости
- Обзор Gentoo Linux
- Гибкость Gentoo
- USE флаги
- Оптимизация под целевую архитектуру
- Оптимизация процесса сборки
- Пару советов по сборке ядра
- Полезные инструменты
- Вывод
Разрушители легенд — Gentoo Linux
Дочка Убунту прибежала к Дебиану и, весело смеясь, поцеловала его в лоб: «С днём рождения, папа!». Затем она окинула радостным взглядом сидящих за столом гостей и спросила своим звонким голосом:
— Папа, а где Gentoo, разве он ещё не пришёл?
— Нет, он ещё только собирается.
Среди прочих Linux дистрибутивов Gentoo выделяется тем, что его окружает множество мифов, светлой и темной окраски. Я его использую более 10 лет в качестве домашней и офисной рабочей станции и хочу с вами разоблачить несколько мифов и создать парочку новых .
Также хотелось бы рассказать о достоинствах и недостатках дистрибутива, дабы помочь сомневающимся и беженцам с systemd принять верное решение. Пользуясь случаем также хочу здесь разместить несколько полезных советов, которые помогут избежать многочасовых поисков в интернетах и повторной компиляции монструозных пакетов.
Миф №1 — прирост производительности
Gentoo Linux дает прирост производительности за счет того, что все программы компилируются под конкретное пользовательское железо. На этапе зарождения и становления дистрибутива этот тезис звучал с лютой настойчивостью.
Это на самом деле не совсем миф, но вы скорее всего не заметите прироста производительности, если не ставите целью доказать это статистически, вооружившись Phoronix Test Suite или чем-то подобным. Возможно исключение для FireFox, собранного с профилированием, USE=»pgo» .
На чем основан этот миф? Действительно узкий круг вычислительных программ можно ускорить при компиляции под определенную платформу, задавая компилятору включение инструкций SIMD, AESNI, или AVX. Бинарные дистрибутивы из-за чрезмерной заботы о совместимости со старой архитектурой базой зачастую приносят подобные оптимизации в жертву. Вернее будет сказать, что так было раньше, а сейчас это не играет большой роли.
Определенно, не за это адепты ценят Gentoo.
Миф №2 — обновления съедают много времени
Технически это верно, таки да, иногда программы обновляются долго, но обходные пути очень хорошо проторены, что и делает этот тезис мифом. Вот мои рекордсмены.
Во-первых никто не мешает долгоиграющие обновления запускать ночью. Во-вторых в любой момент задание emerge и компиляцию исходников можно поставить на паузу (Ctrl+Z), возобновив позже в фоновом режиме (bg) или явно (fg). В-третьих можно задать автоматическое обновление через небольной скрипт, например такой.
Миф №3 — в Gentoo самые свежие версии программ
Конечно, если сравнивать с Debian Linux, то в целом это так, однако и тут бывают исключения. Тот же Debian раньше стал использовать Grub 2 в стабильной ветке и Perl какое-то время был более новой версии, нежели в Gentoo. Если же сравнивать стабильные ветки менее консервативных дистрибутивов с таковыми в Gentoo, то результат может быть каким угодно. Все зависит от кучи обстоятельств, насколько данный пакет обеспечен мейнтейнером и волонтерами. Например QEMU обновляется почти одновременно со стабильной веткой Github, а MATE — застрял в Gentoo на версии 1.12.2 из-за того, что у него мало разработчиков.
+1 — необычайная гибкость настроек
Поговорим теперь немного о достоинствах Gentoo Linux. Гибкость и возможность настроить очень многие аспекты ОС под себя это то, чем блещет дистрибутив. Вот всего лишь несколько таких примеров.
- Systemd или OpenRC , решайте сами.
- Pulseaudio ставить или нет, думайте.
- Включить поддержку dri3 в mesa и Xorg или оставить dri2 ?
- Собрать незамутненную 64-битную ОС без 32-х битных библиотек совместимости или не стоит упарываться нарываться?
- Какие кодеки включить в ffmpeg , mpv , vlc ?
- Как насчет альтернативного пакетного менеджера, если штатные emerge и portage вас не устраивают?
+2 — скользящие релизы
Для меня это одно из основных преимуществ дистрибутива. Из-за того, что вы невнимательно читали RSS ленту вашего дистрибутива вы не окажетесь в ситуации, когда вам на голову свалился новый инит, файловая система или принцип работы сетевых интерфейсов.
Все важные изменения доносят до пользователей заблаговременно через механизм рассылки новостей. Прочитать последние актуальные новости дистрибутива можно командой eselect news read .
+3 — хорошая документация
Это действительно так. Установку ОС значительно облегчает подробнейшее руководство, но есть также крайне полезные вики и форум.
Туда же входят упомянутые рассылки новостей и сообщения elog в специальных файлах /var/log/portage/elog .
± emerge и portage
Основная система управления пакетами portage и штатное средство управления пакетами emerge являются очень мощным и функциональным в руках опытного и внимательного к докам пользователя. Именно благодаря системе portage возможны тонкие и гибкие настройки операционной систему и пользовательского ПО (см. выше в +1). Даже беглое описание возможностей emerge/portage заслуживает отдельного поста, поэтому ограничусь общим описанием.
- Установка и обновление программ позволяет указать нужные и ненужные опции, которые соответственно будут включены в них или исключены из них во время сборки. Это задается USE флагами, которые транслируются в —enable- и —disable- инструкции .configure скрипта установки из исходников.
- Удаление программ тупо их удаляет, не заботясь о зависимостях. Так что будьте осторожны с тем, что вы собираетесь удалить. Если удалить python или gcc , придется затем скачивать бинарные пакеты, так как emerge впадет в ступор и будет не в состоянии собрать программу из исходников.
- Поиск в базе данных пакетов, список файлов в пакете, определение пакета по заданному файлу, зависимости данного пакета, история операций emerge и прочие полезности.
- Настройка производится правкой текстовых файлов, что не удивительно. С другой стороны таких файлов несколько и надо знать, что за что отвечает.
- Обсчет зависимостей, парсинг древа портов происходит довольно медленно и это зачастую нервирует. Стандартная проверка обновлений может занять 2 минуты прежде чем выдать результат на экран.
- Иногда случаются блокировки, конфликты между пакетами в момент обновления. В большинстве случаев такие ситуации устраняются за пару минут, если пользователь сносно знает матчасть. Однако в крайне редких случаях можно встрять надолго и распутывать зависимости по часу, а то и более.
Из-за чего могут возникать такие ситуации? По самым разным причинам, изменения в лицензировании продукта, необходимость замаскировать, или наоборот размаскировать пакет, изредка ляпы разработчиков. Тут наблюдается обратная зависимость от частоты обновлений, поэтому рекомендуется регулярно и по возможности часто обновлять систему, чтобы накопленная энтропия в древе портов не порождала цепной реакции.
-1 — начальная установка занимает много времени
Полная ерунда, вот установка с помощью однострочника.
А если серьезно, то действительно весь процесс займет времени намного больше, чем при установки бинарных дистрибутивов, таких как Дебиан, или Убунту. Однако трудности более чем преодолимы, ввиду следующих обстоятельств.
- Качественная документация, о чем говорилось выше.
- SystemRescueCd — дистрибутив, созданный с целью восстановления работоспособности системы после аварии, основан на Gentoo. SystemRescueCd очень полезен в качестве установщика, позже на заключительном этапе вам пригодится образ ядра загрузочного LiveCD образа, если возникнут трудности с настройкой и сборкой ядра.
- Средство автоматизированной сборки ядра genkernel позволяет безболезненно пройти самый запутанный и неформализуемый процесс конфигурации и сборки ядра. Другие утилиты из набора portage-utils , eix , eselect и другие позволят хорошо ориентироваться в порядке и зависимостях установленных пакетов и избежать состояний блокировки.
Маленькие хитрости
Если по каким-то причинам компиляция пакета прервалась (выключился свет, завис компьютер и т. д.), но технически может быть возобновлена, можно продолжить процесс с этого самого места. Это особенно ценно для LibreOffice, Chromium или qt-webengine, которые собираются не один час.
- ebuild /usr/portage/cate-gory/prog/prog-x.y.z.ebuild compile
- ebuild /usr/portage/cate-gory/prog/prog-x.y.z.ebuild install
- ebuild /usr/portage/cate-gory/prog/prog-x.y.z.ebuild qmerge
Смонтируйте /var/tmp/portage и /usr/portage на SSD, а если у вас немерено оперативной памяти, то можно и на tmpfs , это даст заметный прирост скорости работы emerge.
Можно сделать бинарный бэкапы системных пакетов на всякий пожарный случай.
Источник
Обзор Gentoo Linux
Многие из пользователей Linux слышали о таком дистрибутиве как Gentoo. И о том что работа с ним нечто сложное и непостижимое для обычного пользователя. Но на деле все совсем иначе. Gentoo один из не многих дистрибутивов который позволяет без особых усилий весьма гибко настроить систему, при этом сделать это быстро. Огромный набор программного обеспечения в репозиториях данного дистрибутива дает возможность не отвлекаться на подключение сторонних источников ПО. А система портов позволяет выбирать версию нужного ПО.
В формате обзора Gento linux мы постараемся на практике оценить возможности этого дистрибутива, и сделать идеальную персональную систему. Познакомимся с Portage, научимся избавляться от лишнего функциональность в программах, оптимизировать систему под железо. Мы не будем описывать процесс установки Gentoo, хотя по факту после прочтения этой статьи у вас не возникнет проблем с установкой, ибо разница не особо большая.
Гибкость Gentoo
Очень часто в интернете всплывают споры, дает ли Gentoo прирост в производительности. Тут на самом деле все предельно просто. Все зависит от того на сколько тонко вы настроили систему. Многие если не все пользователи Gentoo Linux заявляют что это самый гибкий дистрибутив, чем же обусловлена эта гибкость?
Во первых стоит начать с того что Gentoo это source-based дистрибутив, то есть все ПО распространяется не бинарными пакетами (как например deb или rpm), а в виде исходных кодов. Так же сама система пакетный менеджер (если его можно так назвать) напоминает по принципу работы пакетный менеджер в FreeBSD. В системе есть папка в которой находятся порты, а именно подпапки с .ebuild файлами. Это своеобразные скрипты, они указывают на то откуда качать файлы, как их компилировать, и куда раскладывать то что получилось в итоге. За счет такого подхода достаточно создать всего один ebuild для того что бы установить целый набор программ.
USE флаги
Стоит отметить то что при установке различного ПО в Gentoo, его функциональность можно расширить / сузить за счет использования USE флагов. Например хотим мы установить пакет WireShark, в стандартный набор поставки этой программы в различных дистрибутивах входит весьма приличный пакет дополнительного ПО, которым скорей всего мы и пользоваться то и не будем. В Gentoo за счет USE флагов можно собрать собственный WireShark, только с нужным функциональностью. Например нам нужен весь стек протоколов, и графический интерфейс на основе Qt. Достаточно включить все флаги кроме doc, doc-pdf и GTK.eq
Проверка USE с помощью equery
В итоге мы получим пакет который будет весить значительно меньше чем аналог для других дистрибутивов.
Флаги можно ставить глобально и локально. Рассмотрим два файла
/etc/portage/make.conf — Глобальный файл настроек portage, к нему мы сегодня будем обращаться очень часто, т.к именно он поможет нам выжать буквально все из нашей системы. В случае с USE флагами все просто, в строчке USE=» « мы можем указать какие флаги надо использовать для каждого пакета, например имеет смысл поставить туда systemd если в дальнейшем будет использоваться эта система инициализации, или же KDE если планируете работать с этой оболочкой. Важно знать что от флагов будут определятся зависимости для пакетов, соответственно чем больше флагов — тем больше будет зависимостей для ПО.
/etc/portage/package.use — Тут уже можно определить файлы настроек для каждого пакета отдельно, поддерживаются логические выражения. Например :
В таком случае для python версии 3.6 или выше у нас будут устанавливаться примеры программ, а для 2.7 и ниже напротив, примеры будут игнорироваться. Стоит обратить внимание, для того что бы включить флаг достаточно внести его имя, а для того что бы жестко указать portage на игнорирование флага, поставить перед его именем «-«.
Так же можно указывать временные флаги, которые будут действовать единожды в процессе сборки.
Оптимизация под целевую архитектуру
Помимо сокращения бинарных файлов методом изменения USE флагов, так же оптимизировать работу компьютера можно настройкой компилятора под целевую архитектуру.
Как это работает ? — Программы в репозиториях других дистрибутивов находятся в бинарном виде. Разработчики как правило собирают программы без оптимизации под архитектуру, так как их основная задача заставить работать программу на как можно большем количестве ПК. Gentoo же дает нам возможность собрать нужную нам программу под нужную нам архитектуру.
Для того что бы это сделать нам надо заглянуть в файл /etc/portage/make.conf , там нам нужно отредактировать пару пунктов.
CFLAGS — дописываем туда -martch=native или же название своей архитектуры , например -march=haswell
По сути этим можно было и ограничится, но мы будем выжимать все из системы. Добавим флаг -O2 , это «скажет» portage собирать программы с оптимизацией второго уровня. Стоит отметить что в некоторых источниках могут писать что чем больше число тем будет выше степень оптимизации, иногда люди ставят -O10 и больше, но GCC поддерживает только 4 уровня оптимизации, все что выше будет автоматически сброшено до 4.
Оптимизация процесса сборки
- MAKEOPTS — тут мы можем указать количество потоков во время сборки, рекомендуется использовать n Ядер + 1;
- Это сделает сборку ПО менее долгим процессом.
ACCEPT_LICENSE = «*» — даем portage разрешение на сборку программ под любой лицензией; - L10N = «ru» и LINGUAS = «ru ru_RU en» — во время сборки программ будет выполняться их локализация (если программа поддерживает это);
- FEATURES — тут мы можем указать разные «фичи» которые будет использовать portage во время своей работы. Например : userfetch — Во время загрузки файлов portage будет сбрасывать root привилегии, имеет смысл с точки зрения безопасности. parallel-fetch — Во время компиляции программ будут загружаться исходные коды, это ускорит время установки пакетов. candy — интересная анимация для emerge. fail-clean — очистка TMP после ошибки во время сборки. 2ccache — кешировние GCC, дает весьма заметный прирост во время сборки. Чем больше пакетов собираете — тем больше прирост скорости;
О других фичах можно прочитать в официальной Wiki проекта Gentoo. - VIDEO_CARDS — оптимизация ПО под вашу видеокарту , например =»i965 intel»;
- ACCEPT_KEYWORDS — выбор ветки portage. Например при
amd64 portage будет использовать тестовую ветку amd64;
Пару советов по сборке ядра
- Прежде чем самому лезть в конфигуратор ядра, имеет смысл загуглить конфиг для сборки. Например мне, с моим T440P это сэкономило кучу времени. Как правило в таких конфигах имеет смысл проверить железо, и довести все до актуального состояния.
- Для конфигурировния ядра есть много способов, начиная от элементарного ручного (работа с файлом .config), заканчивая веб-конфигуработором. Но обычно во всех гайдах используется menuconfig, но никто не говорит о том что есть более удобные вариации, GTK — gconfig и Qt — xconfig.
- Заранее установите sys-kernel/linux-firmware , и в случае если потребуется сборка модуля которого нет в ядре (например iwlwifi.ucode), то стоит помнить что они находятся в /lib/firmware
- Если планируете накладывать патчи, то настоятельно рекомендую использовать sys-kernel/vanilla-sources, ибо именно под него пишутся эти самые патчи.
- Использование ccache во время сборки ядра поможет вам сэкономить уйму времени, ибо будут собираться только измененные части ядра.
- Рекомендуем прочитать эту статью о сборке ядра linux.
Полезные инструменты
- gentoolkit — Набор утилит для администрации Gentoo;
- layman — Инструмент для управления оверлеями;
- eix — Удобное приложение для поиска программ в portage;
- porthole — Графический интерфейс для portage, написан на GTK, в качестве бекэнда использует emerge;
Вывод
В этом обзоре Gentoo linux мы открыли для себя возможности тонкой настройки системы под конечного пользователя. Исходя из выше написанного можно сделать вывод что Gentoo действительно гибкая система. За счет флагов мы можем уменьшить бинарный файл, как следствие он будет быстрее выгружаться в оперативную память, и меньше занимать места на жестком диске. Тонкая настройка /etc/portage/make.conf дает заметный прирост в производительности.
Система Portage позволяет использовать несколько версий пакетов одновременно, что позволяет работать с самым стабильным ПО, даже если оно использует тестовые библиотеки. Так же мы рассмотрели несколько нюансов сборки ядра, и узнали про пару удобных инструментов для администрирования Gentoo. Так же советуем вам почитать о установке пакетов в Gentoo и настройке sync Portage
Источник