Gentoo

Материал из MediaWiki
Перейти к навигации Перейти к поиску

Основная особенность этого дистрибутива состоит в способе установки софта. При инсталляции программы автоматически собираются из исходников прямо на компьютере пользователя, что отличает Gentoo от большинства дистрибутивов, в которых используются заранее собранные бинарные пакеты. Такой подход позволяет выполнять более гибкую настройку дистрибутива под свои нужды (например, компилировать программы с поддержкой определённых возможностей или без ненужных зависимостей) и несколько оптимизировать систему (например, под инструкции конкретного процессора).

Рекомендуется для энтузиастов, увлекающихся настройкой системы.

Основной сайт Gentoo Linux

Русскоязычный ресурс

Настольная книга Gentoo

Как правильно произносить «Gentoo»?

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

Какой stage выбрать?

В настоящее время рекомендуется установка только из stage3. Если вы знаете зачем и действительно уверены в том, что вам нужен stage1 или stage2, то можете просмотреть Gentoo FAQ

Как создать бинарный пакет для последующей установки?

Создать бинарный пакет из уже установленного приложения можно посредством утилиты quickpkg. Пример:

quickpkg --include-config=y bash

--include-config=y позволяет сохранить измененные конфигурационные файлы, относящиеся к приложению, включаемому в пакет.

Для того чтобы создать бинарный пакет из приложения, которое еще не установлено в системе, необходимо воспользоваться ключом emerge --buildpkg (или --buildpkgonly, если необходимо только создать пакет без его установки в текущую систему).

Как ставить бинарные пакеты?

Gentoo, прежде всего, является source-based дистрибутивом. Это порождает как некоторые недостатки, так и преимущества. Существует множество замечательных бинарных дистрибутивов — пользуйтесь ими, если не можете или не хотите собирать основную часть ПО из исходников. Тем не менее, некоторое количество прекомпилированных пакетов идет в составе stage3-образов и GRP-диска.

PKGDIR=/mnt/cdrom emerge -k packet_name

Создавать собственные бинарные пакеты при установке можно передавая параметр --builpkg при emerge, или из уже установленных утилитой quickpkg.

И на десерт смотрим сюда — [1]

Как получить более подробную информацию о пакете?

Информацию о составе, флагах и зависимостях пакетов можно получить с помощью:

  1. equery из пакета gentoolkit - в ней есть все необходимое
  2. portage-utils — самые быстрые утилиты для извлечения информации о пакетах, к тому же имеют простой выхлоп, что удобно для конвейеров
  3. eix из одноимённого пакета. Позволяет производить поиск по практически любым параметрам пакета и выводить информацию о нём в различном виде.

Как экономить трафик?

Воспользуйтесь deltup

Кроме того, если вы используете Gentoo на нескольких машинах, можно использовать общее дерево портажей (portage tree) и DISTDIR.

Вы также можете создать собственное зеркало для RSYNC, если у вас несколько машин с Gentoo, или воспользоваться пакетом emerge-delta-webrsync как заменой для emerge --sync , пакет скачивает сжатые патчи (за сутки) для дерева portage. При использовании eix, есть аналогичная команда eix-sync -W, которая выполняет как emerge-delta-webrsync, так и eix-update

Внимание: вопрос возникал в форуме, но остался без ответа: если при использовании getdelta.sh вы получаете Segmentation fault при выполнении deltup, проверьте права записи на /tmp или каталог, заданный как временный переменной $TMP. getdelta.sh и deltup запускаются от пользователя portage, а deltup же при недостатке прав записи во временный каталог просто вылетает с segmentation fault.

Как обновлять gentoo без прямого доступа в интернет?

[2]

[3]

Чем чистить distfiles?

Скриптом eclean из пакета gentoolkit, скрипт удаляет только старые ненужные более файлы, если же вы хотите полностью очистить все скачанные файлы исходников, то можно удалить каталог стандартными методами (например rm).

Как ставить ПО, не вошедшее в дерево портежей?

Существует удобная утилита для управления неофициальными оверлеями (ветками дерева портежей) под названием layman. Для оверлеев, которые будут обрабатываться вручную, необходимо создать отдельный каталог, допустим /usr/local/portage/ Сюда будут закидываться ebuild-ы. Таким образом официальное дерево и дополнительные ebuild-ы смешиваться не будут. При помещении ebuild файла в этот каталог, необходимо использовать такую же схему иерархии каталогов как и в /usr/portage/

Для начала нужно установить утилиту для автоматизации обслуживания оверлеев:

user@gentoo # emerge layman

В /etc/make.conf добавляем строку:

source /usr/local/portage/layman/make.conf

Могут понадобится утилиты git, subversion, mercurial, bzr. Так как большинство оверлей-репозитории обновляются через эти системы контроля версий.

Краткий перечень команд:

layman -L          # выводит список оверлеев подключаемых оверлеев
layman -a overlay  # подключает оверлей
layman -d overlay  # удаляет оверлей
layman -S          # обновляет все подключенные оверлеи

Координацией оверлеев занимается проект overlays.gentoo.org, также о неофициальных/не поддерживаемых ебилдах (и их разработчиках) заботятся на gentoo-sunrise.org

  • [4] — как установить ебилд не входящий в дерево
  • [5] — пакет zugaina-gensync позволит пользоваться десятком неофициальных зеркал (новичкам не рекомендуется, все экспериментальное).
  • [6] — Howto use portage correctly
  • [7] — Ebuild Howto
  • [8] — Common ebuild mistakes.

Компиляция сильно нагружает систему. Как бороться?

Прописать PORTAGE_NICENESS в /etc/make.conf, подробности (вообще по конфигурации портежей) в файле /etc/make.conf.example.

Например, многие делают так:

PORTAGE_NICENESS=19

Если хотите поменять вручную, то просто добавьте nice -n+19 перед emerge, например:

root@linux# nice -n+19 emerge -uD world

Для portage 2.2 также можно ограничивать и приоритет ввода-вывода, задайте в /etc/make.conf

PORTAGE_IONICE_COMMAND="ionice -c 3 -p \${PID}"

или запустите с командной строки

root@linux# ionice -c3 nice -n+19 emerge -uDN world


Ещё можно ограничить число потоков, которые будет запускать emerge. Делается это с помощью опции MAKEOPTS в make.conf:

MAKEOPTS="-j1"

В таком случае emerge не запустит более одного потока сборки, таким образом для компиляции будет использовано не более одного ядра, что значительно снизит нагрузку на машину более чем с одним ядром (читай, любую современную).

Если требуется ограничить загрузку процессора (например при перегреве ноутбука), то может помочь утилита cpulimit

Какие CFLAGS (CXXFLAGS) мне выбрать для оптимальной производительности ?

Хорошие рекомендации написаны тут (на английском) или здесь (по-русски). Как правило безопасными и оптимальными являются флаги основаные на -O2 -march=тип_вашего_процессора (можно использовать -march=native), но имейте ввиду что если вы собираете бинарные пакеты для других машин с Gentoo, то вам стоит явно указывать самую младшую модель в -march= из соображений совместимости, -march=native также не стоит указывать если вы пользуетесь distcc, укажите тип процессора явным образом.

Пожалуйста не используйте экспериментальные флаги выбранные по случайным рекомендациям, если вы сами не совсем представляете для чего они используются и в каких случаях, особенно для сборки всей системы (world). Для искателей приключений и экстремалов нужно как минимум просмотреть справку по флагам GCC, для автоматического выбора и/или сравнения флагов можно воспользоваться утилитой Acovea

Установка оборвалась, что делать?

Поискать сообщение об ошибке в гугле, затем на bugs.gentoo.org, задать вопрос на английском или русском форумах

Что означают USE флаги?

В пакет gentoolkit входит утилита для управления флагами — euse.

user@linux$ euse -i {флаг}

Данная команда выведет краткое описание флага. Посмотреть значения use флагов для пакета можно утилитой equery:

user@linux$ equery u packet_name

Как искать по дереву портежей?

user@linux$ emerge -s word_for_search # по названию
user@linux$ emerge -S word_for_search # по описанию

Рекомендуется использовать утилиты eix (пакет app-portage/eix) или esearch (app-portage/esearch). Они индексируют метаинформацию дерева портежей и обеспечивают гораздо более быстрый поиск по дереву.

Использование eix

Сначала нужно установить утилиту:

user@linux$ emerge eix

Создать базу дерева портеджей и подключенных к системе оверлеев:

user@linux# eix-update

Поиск:

user@linux# eix package_name         # по названию
user@linux# eix -C app-portage emer  # по указанной категории, части имени пакета ( -С )
user@linux# eix -S                   # по описанию

Как сократить время компиляции?

Использовать distcc и ccache:

  • distcc — распределенная между машинами сборка пакетов [9]

Также стоит добавить в файл /etc/make.conf строчку MAKEOPTS="-jX", где X = (количество-ядер-CPU × 2) + 1

Как русифицировать?

Свежее руководство по русификации Gentoo под UTF-8 — [11].

Чтобы в галерее не кричали «ШГ!» нужно:

emerge layman
layman -a devnull
euse -E newspr
euse -E filter_default
echo "media-libs/freetype -bindist" >>/etc/portage/package.use/use
emerge -1 -uvDN -a media-libs/freetype media-libs/fontconfig
emerge -1 -uvDN -a x11-libs/libXft  x11-libs/pixman x11-libs/cairo 

Параметры субпиксельного сглаживания и хинтинга настраиваются с помощью

eselect fontconfig

Примечание: USE флаг bindist более не актуален для freetype 2.4.0 и выше, bytecode interpreter будет использован по умолчанию, так как соответствующие патенты Apple уже истекли.

Как в gentoo увидеть список установленных пакетов?

При помощи epm:

root@linux# epm -qa

С помощью eix:

user@linux$ eix -Ic

Как запускать 32-битные программы под x86_64?

При сборке возникают проблемы с .la файлами

Установите пакет lafilefixer и запустите скрипт

root@linux# lafilefixer --justfixit

Скрипт исправляет .la файлы в системе избавляя их от зависимостей на другие .la файлы (будут использоваться библиотеки в путях поиска ld/ld.so). Данная операция безопасна.

Если устанавливать лишний пакет не хочется, можно запустить скрипт напрямую из portage, где он находится, следующей командой:

root@linux# bash /usr/portage/dev-util/lafilefixer/files/lafilefixer-0.5 --justfixit

В portage 2.2 lafilefixer — часть логики работы portage: он запускается для .la файлов каждого устанавливаемого пакета. Поэтому его отдельная установка и использование не требуется

Установка ещё более легкого GNOME 2 (по сравнению с gnome-light)

Если даже набор gnome-light кажется Вам громоздким (например, за счет yelp, тянущего xulrunner), можно установить ещё более легкий GNOME, указав основные компоненты вручную:

root@gentoo# emerge -va metacity gnome-settings-daemon gnome-control-center \
nautilus gnome-desktop gnome-session gnome-panel gnome-icon-theme gnome-themes \
gnome-terminal

Если Вы используете gdm, то установите и его.
После этого ставите необходимые Вам компоненты (например, totem, file-roller) по вкусу.