Обзор Gentoo Linux

Gentoo-Logo
Я долго не писал, потому-что тема, о которой пойдет речь в этой статье требует много времени. Gentoo довольно известный дистрибутив среди красноглазых пользователей. Почему? Пользуясь Gentoo, вы становитесь повелителем системы, которая как влажная глина готова принять любую форму, которую вы хотите, с любым функционалом, который вам нужен. Нужно только разбираться в ней. Вы собираете из исходников нужный вам софт включая или отключая зависимости от других пакетов с помощью USE флагов и тратите много времени на компиляцию программ. Поэтому gentoo-шники знают, что такое время. Во время обзора мы пропустим описание процедуры установки. Во-первых она много раз описана, а обзор такие системы получают не очень часто, во вторых — это тянет на текст размером на эту статью, в третьих ввиду отсутствия установщика, опыт и порядок установки у каждого может быть свой.

Portage

В первую очередь Gentoo известен тем, что это дистрибутив из исходников. Это даёт некоторые преимущества: вы можете изменять функционал пакета, избегать лишних зависимостей, оптимизировать компилируемый код, при этом жертвуете временем на установку ПО. Работает это так: читаются файлы из директории /etc/portagemake.conf и package.(use/license/accept_keyword), затем portage обращается в директорию /usr/portage, где присутствуют инструкции установки ПО.

/usr/portage — это дерево портежей, там находятся ebuild файлы, где находятся описание пакета и инструкции его сборки.
make.conf содержит настройки для сборки пакетов, например:
CFLAGS — флаги компилятора C
MAKEOPTS — флаги утилиты make
CXXFLAGS — флаги компилятора C++
USE — флаги, изменяющие параметры сборки и зависимости пакетов. В моём случае эта переменная выглядит так:
USE="bindist mmx sse sse2 qt4 qt3support opengl kde dbus policykit networkmanager"
PORTDIR — путь к дереву портажей.
DISTDIR — путь к папке, куда скачиваются исходники.
PKGDIR — путь к папке, куда скачиваются бинарные файлы.
LINGUAS — флаги, указывающие, какие языки должны поддерживаться скомпилированным ПО.
GENTOO_MIRRORS — зеркала.
SYNC — зеркала для синхронизации.

В make.conf могут быть флаги, предназначенные для конкретных пакетов, например:
INPUT_DEVICES — для указания устанавливаемых драйверов устройств ввода.
VIDEO_CARDS — для указания устанавливаемых драйверов видеокарт.

Синтаксис флагов, влияющих на конфигурацию сборки таков: через пробел перечисляются флаги. Если перед именем флага стоит минус, то его следует отключить, если нет, то его следует включить.

А что делать, если нужно поменять USE флаги у конкретного пакета? Для этого есть файл package.use, в котором, в каждой строчке указывается, как должны изменяться USE флаги у конкретного пакета. Выглядит строка так:
app-foo/bar flag1 flag2 -flag3
На этом примере мы у пакета app-foo/bar включили флаги flag1, flag2 и отключили flag3.
Аналогично устроены файлы package.license и package.accept_keyword.

Сколько времени займет установка Gentoo?

Вы потратите на это около суток. Если у вас компьютер гораздо мощнее моего, то полсуток. Опустим то время, которое вы потратите на то, чтобы разобраться с системой и настроить все подряд. В случае с Gentoo тут уместна шутка: «В linux вы можете настроить абсолютно все, и вы будете настраивать абсолютно все». В качестве приблизительного времени затраченного на установку системы можно взять время на пересборку мира и по оптимистическим прикидкам добавить два часа. А сколько времени займёт пересборка мира? На моей машине с Intel Celeron T3000 с двумя ядрами на частоте 1.8 GHz я с помощью утилиты time измерил время двух пересборок времени. Во время пересборки я не пользовался компьютером и завершил работу X-сервера и дисплейного менеджера, чтобы на время сборки не влияли процессы из окружающей среды. Пересборка мира происходила в чистой консоли.
Система пересобиралась с миром в таком составе(без зависимостей):
app-admin/sudo
app-benchmarks/sysbench
kde-base/kde-l10n
kde-base/kdebase-meta
kde-base/kdegraphics-meta
kde-base/kdemultimedia-meta
kde-misc/plasma-nm
net-misc/dhcpcd
net-misc/networkmanager
sys-boot/grub
sys-fs/ntfs3g
sys-kernel/genkernel
sys-kernel/gentoo-sources
www-client/firefox
www-plugins/adobe-flash
x11-base/xorg-drivers
x11-base/xorg-server

Время пересборки мира с флагом -O2: 16 часов 54 минуты 30 секунд.
Время пересборки мира с флагом -O2: 17 часов 36 минут 47.7 секунд.
Итого, по самым оптимистическим прогнозам на моей машине у вас на это уйдет около 19 часов.

Сравнительные тесты производительности

Возможно, вы хотите поставить Gentoo ради увеличения производительности. В этом случае не стоит ждать чуда, Gentoo следует ставить для того, чтобы в нем поиграться, а не ради объективного прироста скорости. Для того, чтобы оценить производительность Gentoo, я воспользовался синтетическим тестом sysbench, доступным, как в Gentoo, так и в Archlinux. В тестировании участвуют Archlinux и Gentoo в двух эпостасиях, один собран с флагом -O2, другой с флагом -O3. Оба собраны под мою архитектуру процессора. В Archlinux, по умолчанию, пакеты собраны с флагом оптимизации -O2. Надо сказать, что -O3 нигде не используют, потому что это дает нестабильный код и в системе могут возникать из-за этого косяки.
Обе системы тестировались по одинаковому сценарию:
sysbench --num-threads=3 --test=cpu --max-requests=100000 run
sysbench --num-threads=3 --test=memory run
sysbench --num-threads=3 --test=threads --max-requests=1000000 run
sysbench --num-threads=3 --test=mutex run

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

Archlinux
Gentoo -O2
Gentoo -O3
Для репрезентативности приведём сравнительные тесты в таблице:

Системы Archlinux Gentoo -O2 Gentoo -O3
Время на CPU тесте 70.6054s 71.6212s 70.9476s
Время на тесте памяти 327.4962s 327.9710s 326.8005s
Время на тесте многопоточности 309.9045s 245.3740s 248.2071s
Среднее время запроса на mutex тесте 28.11ms 31.05ms 23.01ms
Время, затраченное на пересборку мира _ 1014m30.079s 1056m47.770s

Во первых, обратим внимание, что на тестах процессора и памяти, код, оптимизированный для этого процессора не дал значительных успехов. Во вторых, очень заметно преимущество Gentoo перед Arch в тесте многопоточности. Этот синтетический тест показывает прирост производительности в 26%, это означает, что в реальных многопоточных приложениях вы можете получить не более четверти производительности. В четвертых, вам нужно потратить всего 17 часов, на то чтобы скомпилировать систему с такой производительностью. Что больше вы потратите своего и машинного времени на пересборки мира, или сэкономите машинное время на решение задачи после сборки системы — решайте сами.

Особенности Gentoo

Если вы решили поставить эту систему на свой компьютер, привыкайте к некоторым особенностям системы. Вам следует ждать, что:

  • GRUB2 по умолчанию не умеет грузиться откуда-либо, кроме ext2 разделов и не поддерживает графический режим в меню.
  • Собранное по умолчанию ядро имеет очень урезанную конфигурацию и может кое-что не иметь, но достаточно, чтобы загрузиться на большинстве компьютеров, поэтому вам придется баловаться с перекомпиляцией ядра. В моем случае, из коробки не работают два сетевых адаптера и framebuffer.
  • genkernel сам не перенесет конфигурацию, при переходе на более новую версию ядра.
  • Собранный по умолчанию RAM диск загрузит все подряд драйвера жестких дисков, что увеличит время загрузки, размер потребляемой ОЗУ и размер самого RAM диска.
  • Стабильная версия Firefox по умолчанию имеет логотип Aurora, в связи с тем, что логотип Firefox имеет правообладателей.
  • Установите USE флаг natspec для пакета unzip, если не хотите проблем с кодировками в zip архивах.
  • Вам придется потратить много времени на установку и обновление пакетов и системы.
  • Широкие возможности настройки USE флагов и accept_keywords дают широкие возможности, для того, чтобы устраивать коллизии зависимостей. Помимо этого вам нужно подтверждать лицензии, отличные от свободных. Ввиду этого будьте готовы доказывать portage, что вам нужно установить пакет. Обычно это можно решить командами "emerge --autounmask-write foo;etc-update". А лучше, вам следует самим залезть в конфиги portage.
  • Система очень не автоматизированна. Если вам нужно что-то автоматизировать, сделайте это сами.

Не то, чтобы я сильно придирался, просто я хотел бы предупредить, что если вам компьютер нужен не для того, чтобы играться с ОС, а для того, чтобы работать, Gentoo, скорее всего, — это не ваш выбор. Если вы вдохновившись этой статьей поставите Gentoo и будите плеваться, я вас предупредил. Но взамен этих неудобств он дает некоторые плюшки:

  • Из коробки настроена цветная консоль.
  • Есть официальная утилита, для того, чтобы играться с перекомпиляцией ведра.
  • Техническая минималистичность и настраиваемость системы.
  • Возможность оптимизировать машинный код для программ с открытым исходным кодом.
  • Официально доступны два демона инициализации: OpenRC и systemd. Из коробки стоит OpenRC.
  • Выбор профилей позволяет выбрать примерную конфигурацию системы, коих может быть много, избавляя от необходимости самому выставлять кучу USE флагов.
  • В системе присутствует только то, что нужно вам.

Итоги

Итак. Поставив Gentoo вы получаете систему, которая несоизмеримо долго компилируется, её сложно поддерживать и легко случайно сломать, систему, благодаря которой вы узнаете что такое время и набьете себе шишек на лбу об подводные грабли. В замен вы получаете возможность отключать не нужные зависимости и небольшой прирост в скорости. Вопрос: нужна вам такая система? Да, нужна. Это замечательный полигон, для тренировки ваших способностей работы с linux системой. Это хороший опыт поломок и ремонтов ОС и незаменимый инструмент для выпрямления рук. Но и наконец, потому что Gentoo — это круто.

1 комментарий к “Обзор Gentoo Linux

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*