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 флаги, полное имя, размер, категорию и т д. А затем спросит нужно ли его устанавливать:
Здесь красным цветом отмечены активные 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
Еще такой случай, нужно установить только определенную версию пакета и не обновлять его, даже когда появиться новая. Тогда скрываем все версии выше нужной с помощью /etc/portage/package.mask, например, все версии выше 14.0.3:
sudo nano /etc/portage/package.mask
А затем устанавливаем пакет:
sudo emerge - av имя_пакета
Решение проблем с установкой пакетов в Gentoo
Установка программ в Gentoo, которые очень редко используются или еще нестабильны и тем более при использовании различных оверлеев может вызвать различные ошибки. Начнем с самых простых и элементарных.
Это значит что пакет не был протестирован с вашей архитектурой или считается не совсем стабильным для нее, но это не повод его не использовать просто добавьте строчку в /etc/portage/package.keywords, разрешающую устанавливать этот пакет:
nano /etc/portage/package.keywords
Это значит что пакет считается еще нестабильным или уже устаревшим и замаскирован, или он несовместим с вашим профилем, если уверены что оно вам нужно, добавьте имя пакета в /etc/portage/package.unmask
nano /etc/portage/package.unmask
Часто возникают конфликты USE флагов, здесь даже не нужно ничего делать необычного, чтобы получить вот ошибку. Для ее устранения нужно посмотреть какие пакеты конфликтуют и убрать или добавить к одному из пакетов нужные флаги с помощью /etc/portage/package.use.
Как установить skype в calculate. Подскажите пошагово.
https://wiki.gentoo.org/wiki/Skype
Ну или просто в терминале
emerge —ask net-im/skypeforlinux
-l —oneshot — Установить пакет, но не добавлять его в файл world;
-l надо заменить на -1
не указано в явном виде главной проблемы при установке : практически все 95 процентов устанавливаемых программ или их компонент помечены как masked и установка не производится
и получается надо куда то сотню зависимостей вбивать и снимать маскирование со всех?