21 июля 2009 г.

Почему я не могу пользоваться ничем кроме portage



Как известно, система управления программным обеспечением - одна из отличительных черт различных дистрибутивов Linux. Мамонты в этой области - YUM (Yellowdog Update Manager) и APT (Advanced Package Manager). На базе обоих построено достаточно много известных систем. Наиболее крупные - debian, ubuntu для apt и fedora, rhel для yum. Однако, такая слава "старых и проверенных" означает также некоторую принципиальную старость. Вообще, о выборе такой системы можно спорить бесконечно долго, как и о выборе дистрибутива. Но на данный момент для меня есть неоспоримый лидер. И это не apt и не yum. Это portage - уникальная часть дистрибутива Gentoo Linux.
Ещё немного теории. Для меня работа с системой обязательно подразумевает активную работу с вышеупомянутым ПО, т.к. я не могу обойтись без постоянного исследования чего-то нового. И здесь ключевую роль играет "чистота" работы пакетного менеджера (буду называть его так). Он должен уметь вычищать из системы все кусочки удалённых пакетов, при этом оставляя ровно то, что необходимо для работы установленных компонентов системы.
Вот здесь и начинается практика. Большинство пакетных менеджеров имеют команды для установки какого-то пакета (при этом автоматически ставятся необходимые зависимости) и удаления пакета (иногда можно удалить пакет со всеми ненужными зависимостями). На мой взгляд, этого явно недостаточно.
В Gentoo реализован очень логичный подход. У нас имеется список лично пользователем установленных пакетов(т.е. вы лично ставите музыкальный проигрыватель, а необходимые библотеки для видео, графики и кодеки - это уже зависимости, которые вы не ставите напрямую). Он доступен в текстовом файле. Также имеется понятие "набора приложений". В том числе базового набора. Естественно, присутствет возможность установки и удаления любого пакета руками. Но ГЛАВНОЕ - можно вычистить из системы ненужные зависимости. Не претендую на полное понимание, но опишу, как это происходит. Для каждого пакета составляется список зависящих от него пакетов. Также он может принадлежать к базовому набору пакетов (удалить пакет из которого можно только вручную) или присутствовать в списке нужных пользователю. Если он не попадает ни в базовый набор, ни в список, ни в зависимости пакетов из базового набора и списка, он считается ненужным. После такой "инвентаризации" останется только то, что вы сами устанавливали (это обычно несколько десятков пакетов) и всё необходимое, чтобы работали пакеты из списка установленных пользователем. Можно, например, удалить какой-нибудь пакет из спсика установленных лично вами и запустить очистку от ненужных зависимостей. И он, со всеми его зависимостями будет удалён. Он ведь больше не попадает ни в базовый набор, ни в одну из зависимостей лично вами установленных пакетов. Хотя, конечно, чаще сам плеер удаляют "руками", а его зависимости - автоматически.
Как же другие пакетные менеджеры обходятся без такого списка пакетов, лично установленных пользователем? Как они вычищают зависимости? Как пользователь знает, что удалять? Для меня - это загадка.
Конечно, в portage есть и минусы. Та же тотальная сборка всего и вся из исходников. Она не особо нужна в обычной жизни. Но, то преимущество, которое я многословно описал выше, полностью перевешивает любые недостатки текущей версии portage (2.1.6.13).
Цель этого поста - не только рассказать о моих предпочтениях. Я хочу спросить у тебя, читатель: "Если ты используешь неGentoo, как в твоём любимом дистрибутиве решаются подобные вопросы зависимостей?" Мне правда интересно. Буду благодарен за ответы. Если что непонятно описал, уточняйте - объясню подробнее.
PS Посмотрел на заголовок и подумал, что он, наверное, эквивалентен "Почему я люблю portage".

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

Falcon комментирует...

пользуюсь Гентой... но такаяже система есть и у freebsd откуда собственна она и была взята

Чайкин Евгений комментирует...

У FreeBSD, кстати, чистка зависимостей - слабое место. Она удаляет только сами пакеты, которые установил пользователь, а вот то, что установилось по зависимостям - остаётся.

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

Сейчас пользуюсь Ubuntu. Aptitude в ней умеет вычищать всё полностью. Как он работает - не разбирался, чисто эмпирически проверил, что "сколько установлено, столько и удалено", тем и удовлетворился.

taz комментирует...

aptitude autoremove и aptitude purge