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

Аналог статьи про Ubuntu.

https://wiki.gentoo.org/wiki/Gentoo_Cheat_Sheet – список необходимых команд, все что ниже там есть.

Логи /var/log/emerge.log

Просмотр

Посмотреть все установленные пакеты.

qlist -I (qlist -Iv с версиями)

Смотрим какие версии приложения установлены и какие активны.

$ eselect postgresql list
Available PostgreSQL Slots
 10 * 10.1
Обновление пакетов и ОС

Очень хорошо и подробно описано тут.

Из того что приходилось использовать:

Обновление дерева portage.

sudo emerge --sync

Нужно после обновлений, тут обычно указываем, что не нужно замещать текущие настройки новыми.

etc-update

Обновление всех пакетов.

emerge -vuND --with-bdeps=y --keep-going=y @world
или
emerge -UD --with-bdeps y @world

Сталкивался с кейсом, когда старое приложение (в нашем случае postgresql) при масштабном обновлении ОС удалялось, но новое не ставилось. Связано с autoclean, аналогичную проблему описывал в Ubuntu с autoremove. В нашем случае при этом, т.к. сервис не был отключен при удалении, он остался в процессах и зависимые от БД ресурсы еще как-то (в некоторых случаях частично) работали, хотя в /etc/init.d/ уже не было сервиса. Решилось установкой версии чуть старше установленной ранее (10ый postgres встал, но не запускался, разобраться быстро не получилось).

1517170003: >>> AUTOCLEAN: app-eselect/eselect-postgresql:0
1517170078: === Unmerging... (dev-db/postgresql-9.5.4)
1517170136: »> unmerge success: dev-db/postgresql-9.5.4
$ ps -aux | grep pos
postgres 24296 0.0 0.0 78268 3920 ? S 2016 45:10 /usr/lib64/postgresql-9.5/bin/postgres -D /etc/postgresql-9.5 —data-directory=/var/lib/postgresql/9.5/data
 
 
Установка

Проверяем актуальность текущей версии, смотрим зависимости с опцией –p (не ставит ничего, это pretend что будет поставлено).

sudo emerge -vp vim
зеленый - значит есть апдейт версии или модуля
красный - установлено
синий - модули доступные для установки (через пересборку)

Если конфликтов нет, то устанавливаем (или переустанавливаем, например новую версию или с новыми расширениями в USE) самый актуальный пакет и зависимые пакеты, для работы нужного пакета. Если существует несколько пакетов с таким именем в разных репозиториях – emerge покажет. Можно через emerge даже ставить gem’ы для ruby, но лучше так не делать.

sudo emerge -v vim
sudo emerge -v expect (требует для работы установленного telnet, plink -telnet не поможет)
sudo emerge -v net-misc/telnet-bsd
sudo emerge -v graphviz
 These are the packages that would be merged, in order:
 Calculating dependencies -
 [ Results for search key : graphviz ]
 * dev-haskell/graphviz
 * media-gfx/graphviz
sudo emerge -v media-gfx/graphviz

Если после установки просит обновить конфигурационные файлы – обновляем через sudo etc-update (подробнее по ссылке), там учитываются новые зависимости, удаляются старые и прочее.

* IMPORTANT: 4 config files in '/etc/portage' need updating.
* See the CONFIGURATION FILES and CONFIGURATION FILES UPDATE TOOLS
* sections of the emerge man page to learn how to update config files.


sudo etc-update

 

УДАЛЕНИЕ

Удаление только при отсутствии зависимостей других пакетов от удаляемого.

sudo emerge -cav www-client/firefox

Удаление несмотря на наличие зависимостей.

sudo emerge -C dev-db/postgresql-10.1

Установка старой версии пакета.

sudo emerge -v =dev-db/postgresql-9.5.10

 

MASKING

Masking package позволяет ставить несколько версий одного пакета. Маскируем тот который нам не нравится (новая версия не работает или не хотим терять старую), далее спокойно ставим ту, которая нравится (если только она находится в текущем пакетном дереве). ИСПОЛЬЗОВАТЬ КРАЙНЕ ОСТОРОЖНО и когда знаешь зачем – потому что могут прицепиться пакеты из нестабильной ветки и будет треш. 

sudo vi /etc/portage/package.mask/certifi
>dev-python/certifi-2015.11.20
sudo etc-update
sudo dispatch-conf
Немного поплачу

В целом мне не нравятся Gentoo/FreeBSD во многом из-за сравнения процессов работы с приложениями в CentOS, Ubuntu – там все намного быстрее и проще.

Portage — основная система управления пакетами в Gentoo Linux. Аналог системы портов FreeBSD.

К примеру, в Gentoo для добавления модуля xmlwriter, который необходим для работы PHPExcel (генерация xlsx) нужно пересобирать php с новым USE (или лучше указанием в Portage типа /etc/portage/package.use/php) в котором будет включен xmlreader/xmlwriter, а не “просто взять и поставить” этот модуль отдельно.

$ sudo emerge -vp php5-xml
emerge: there are no ebuildsto satisfy "php5-xml". 
$ sudo emerge -vp php-xmlwriter 
emerge: there are no ebuildsto satisfy "php-xmlwriter". 

Gentoo users: emerge does notcompile dev-lang/php with —enable-xmlwriter by default. To enable this option,add the flag xmlwriter to your USE variable and recompile php.

Да и установка/обновление программ (напр. интерпретатора языка программирования) делается в “нормальных” дистрибутивах через простую и быструю установку пакета, а не сборку через компилятор source code, как это происходит в gentoo c emerge.

А особенно весело начинается когда появляются ошибки при установке. Может выдавать вот такое:

!!! Multiple package instances within a single package slot have been pulled
!!! into the dependency graph, resulting in a slot conflict:
It may be possible to solve this problem by using package.mask to
prevent one of those packages from being selected. However, it is also
possible that conflicting dependencies exist such that they are
impossible to satisfy simultaneously. If such a conflict exists in
the dependencies of two different packages, then those packages can
not be installed simultaneously.

Или вот такое:

(dev-python/six-1.11.0:0/0::gentoo, ebuild scheduled for merge) depends on
(dev-python/setuptools-34.0.2-r1:0/0::gentoo, ebuild scheduled for merge) (buildtime)
(dev-python/six-1.11.0:0/0::gentoo, ebuild scheduled for merge) (buildtime)

Говорят, что “часто приносит пользу одиночная установка (–oneshot или -1) всех конфликтующих пакетов за один приём, так как, бывает, что они зависят друг от друга“, но мне в кейсе 1 это не помогло.

sudo emerge --oneshot dev-python/setuptools dev-python/certifi

И можно долго резвится с подобными ошибками, судя по stackoverflow и форумам (особенно забавен конец “Solving these conflicts when installing Gnome 3 is much fun compared to using it. Good luck”). Вплоть до советов по апдейту всех пакетов системы через @world.

The conflict means that different packages are requiring different versions of sys-fs/udev. In your case for example, the version 171-r9 is the current version on your machine. Some other packages require version 195. The package udev-init-scripts requires version 187. Multiple versions of the same package are not allowed unless they are in the different slots.

When installing Gnome 3, there would be many packages that may require different versions of the same package. One walkaround is to use equery g <package> to check the packages it depends on, and equery d <package> to check which packages requires this package. Locate the package causing conflict and try removing some flags in /etc/portage/make.conf and /etc/portage/package.use, or masking some packages in /etc/portage/package.mask. Solving these conflicts when installing Gnome 3 is much fun compared to using it. Good luck

Leave a Reply