Установка пакетов в Gentoo

Gentoo — особенный дистрибутив Linux, и выделяется он именно установкой программного обеспечения. Здесь реализована собственная система управления пакетами — portage, которая в отличие от других систем, таких как deb или rpm, предоставляет не полностью собранные, настроенные и готовые для установки пакеты, а только файлы со скриптами компиляции, установки, и последующей настройки.

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

Немного о Portage

Система portage очень похожа на систему портов FreeBSD, а еще чем-то напоминает работу pacman’а в ArchLinux. Как я сказал, здесь нет собранных пакетов, есть только исходники, патчи и файлы, описывающие что с этим всем делать. Такие файлы имеют расширение *.ebuild. По сути, база данных пакетов это система подкаталогов в /usr/protage. При обновлении базы данных просто скачиваться ее новая версия с серверов Gentoo, а старая, используемая в системе удаляется.

Список всех установленных вами пакетов хранится в файле /var/lib/portage/world. Здесь будут только те пакеты, которые вы явно устанавливали с помощью менеджера пакетов. Очень удобная вещь, можно всегда определить что в системе лишнее.

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

Это было немного матчасти, теперь перейдем непосредственно к теме статьи — установка пакетов в Gentoo.

Установка пакетов в Gentoo

Для управления пакетами в Gentoo используется собственный менеджер пакетов — emerge. Чтобы установить пакет Gentoo достаточно набрать:

emerge имя_пакета имя_пакета2

Но это самый простой вариант, emerge поддерживает множество параметров, рассмотрим только те, которые касаются установки пакетов:

  • -a — Спрашивать перед установкой;
  • -v — Показать более подробную информацию;
  • -p — Не устанавливать пакет, только показать информацию;
  • -b — Только скомпилировать пакет без установки;
  • -O — Установить пакет, не учитывая зависимости;
  • -o — установить только зависимости пакета;
  • -l —oneshot — Установить пакет, но не добавлять его в файл world;

Например, самой популярной командой, с помощью которой выполняется установка пакетов в Gentoo есть:

sudo emerge -av имя_пакета

Программа выведет всю доступную информацию о пакете, USE флаги, полное имя, размер, категорию и т д. А затем спросит нужно ли его устанавливать:

emerge

Здесь красным цветом отмечены активные USE флаги, синим неактивные, салатовым — те, которые будут активированы, например, при переустановке или обновлении.

Буква возле слова ebuild значит действие с пакетом:

  • N — будет установлен;
  • S — установка в новый слот;
  • U — обновление версии пакета;
  • D — установка более старой версии пакета;
  • R  — переустановка;
  • F — необходима ручная загрузка исходников пакета;
  • f — то же самое, только файлы уже загружены;
  • B — пакет конфликтует с другими пакетами, но конфликт будет решен автоматически;
  • b — пакет конфликтует с другими пакетами, конфликт нужно решать вручную.

Дальше мы видим количество обрабатываемых пакетов и количество данных которые необходимо скачать в килобайтах.

Если установка программ в Gentoo не нужна, а нужно только посмотреть информацию о пакете можно использовать опцию -p:

sudo emerge -pv имя_пакета

Для ручного обновления системных библиотек лучше использовать опцию -l, чтобы не засорять файл world лишними записями:

sudo emerge -avl имя_пакета

Если к пакету необходимо применить дополнительные USE флаги можно указать их прямо в команде с помощью локальной переменной:

USE="флаг1 флаг2" sudo emerge имя_пакета

Но лучше так не делать, так как эти флаги будут применены только сейчас, и при следующем обновлении просто слетят.

Иногда необходимо установить в 64х битной системе 32 битную программу или библиотеку. Например, Skype и Wine, тянут в зависимостях 32-битные библиотеки, а некоторые программы и вовсе существуют только в 32 битных версиях. Для установки 32-битных пакетов в Gentoo с недавних времен используется USE флаг — abi_x86_32. Достаточно добавить строчку в /etc/portage/package.use, и установить пакет Gentoo:

nano /etc/portage/package.use

категория_пакета/имя_пакета abi_x86_32

Еще такой случай, нужно установить только определенную версию пакета и не обновлять его, даже когда появиться новая. Тогда скрываем все версии выше нужной с помощью /etc/portage/package.mask, например, все версии выше 14.0.3:

sudo nano /etc/portage/package.mask

>категория_пакета/имя_пакета-14.0.3

А затем устанавливаем пакет:

sudo emerge - av имя_пакета

Решение проблем с установкой пакетов в Gentoo

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

The following keyword changes are necessary to proceed:
(see "package.accept_keywords" in the portage(5) man page for more details)
# required by skype (argument)
=net-im/skype-4.3.0.37-r5 ~amd64

Это значит что пакет не был протестирован с вашей архитектурой или считается не совсем стабильным для нее, но это не повод его не использовать просто добавьте строчку в /etc/portage/package.keywords, разрешающую устанавливать этот пакет:

nano /etc/portage/package.keywords

категория_пакета/имя_пакета ~amd64

The following mask changes are necessary to proceed:
(see "package.unmask" in the portage(5) man page for more details)
# required by sun-jdk (argument)

Это значит что пакет считается еще нестабильным или уже устаревшим и замаскирован, или он несовместим с вашим профилем, если уверены что оно вам нужно, добавьте имя пакета в /etc/portage/package.unmask

nano /etc/portage/package.unmask

категория_пакета/имя_пакета

Часто возникают конфликты USE флагов, здесь даже не нужно ничего делать необычного, чтобы получить вот ошибку. Для ее устранения нужно посмотреть какие пакеты конфликтуют и убрать или добавить к одному из пакетов нужные флаги с помощью /etc/portage/package.use.

Оцените статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (4 оценок, среднее: 5,00 из 5)
Загрузка...

3 комментария

  1. Александр Ноябрь 26, 2017 Ответить
  2. Илья Декабрь 5, 2017 Ответить
  3. Taras Февраль 20, 2018 Ответить

Ответить

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: