Paludis

Процесс работы Paludis
Тип |  Менеджер пакетов
Разработчик |  Ciaran McCreesh
Написана на |  C++
Операционная система  |  кроссплатформенный
Последняя версия |  3.0.0 (12 февраля 2023)
Репозиторий |  git.exherbo.org/paludis/…
Лицензия |  GNU GPL
Сайт |  paludis.exherbo.org

Paludis — менеджер программных пакетов, подхода «построение из исходных кодов» (source-based). Применяется в ОС Exherbo и, в качестве альтернативы portage, на Gentoo (оба применяют ядро Linux). В активном развитии с января 2006 года[1].

## Содержание

* 1 Происхождение
* 1.1 Почему бы не исправить portage?
* 2 Особенности
* 2.1 Для пользователя
* 2.2 Для разработчиков Ebuild
* 2.3 Для программистов
* 3 Использование
* 4 Пример
* 5 См. также
* 6 Примечания
* 7 Ссылки

## Происхождение

[править | править код]

Изначально Paludis представлял собой инструмент для разрешения проблем с зависимостями и использовался как дополнение к Portage в Gentoo GNU/Linux.

Однако позже (не в последнюю очередь ввиду разногласий между разработчиком и комитетом Gentoo) превратился в самостоятельную систему управления пакетами. В качестве причин фигурируют:

* бюрократия Gentoo,
* ошибки в дизайне,
* неполноценность/избыточность и запутанность исходных кодов emerge,
* личный эгоизм некоторых участников комитета Gentoo,
* страх перед изменениями.[2]

После долгой разработки, начиная с версии Paludis 0.60.0 клиент paludis и все поставляемые с ним утилиты были заменены на значительно более понятный клиент cave. Сave можно кратко охарактеризовать как: «Клиент доступа ко всем возможностям системы paludis, схожий по дизайну с aptitude, а синтаксисом с git». Система по прежнему носит название «Paludis», но клиент paludis и все утилиты были убраны.

### Почему бы не исправить portage?

[править | править код]

> В коде portage слишком много дефектов, чтобы его можно было исправить. Это огромное мессиво спагетти-образного процедурного кода без какого-либо дизайна. Он повсеместно и везде опирается на нестандартные трюки, поэтому любое его изменение способно сильно нарушить работоспособность в, казалось бы, никак несвязных областях. Он практически целиком недокументирован, внутренние переменные нелепы и часто уже не отражают реалии, которые код выполняет в настоящее время.[3]

> Оригинальный текст (англ.)

> The Portage codebase is too broken to be fixed. It is a huge mess of spaghetti procedural code with no underlying design. It relies upon weird quirks in its own behaviour all over the place, so any change is liable to cause huge breakage in seemingly unrelated areas. It is almost entirely undocumented, and the internal names are perverse and often do not reflect what the code now does.

> — Ciaran McCreesh

## Особенности

[править | править код]

Следует заметить, что с момента появления paludis прошло много времени и, несмотря на то, что paludis остается новатором, часть функциональности свойственной paludis на текущий момент уже реализовано в portage. Однако большинство проблем (с точки зрения paludis) в portage не может быть исправлено, так как они заложены в саму основу portage (defective by design).

### Для пользователя

[править | править код]

* Предсказуемость и конфигурация «заранее», а не «во время».
* Быстродействие — написан на C++.
* Высокая скорость разработки и отсутствие задержек связанных с бюрократией.
* Небольшие собственные зависимости и грамотная интеграция всех инструментов, в том числе GLSA.
* Изначальная поддержка нескольких репозиториев.
* Профили связанные с репозиториями.
* Документированность и чистота кода.
* Многочисленные хуки для запуска пользовательских действий.
* Определяемые пользователем наборы пакетов.
* Возможность продолжить установку пакетов после сбоя или продолжить прерванную компиляцию гораздо более гибко, чем это возможно в Portage.
* Возможность понять, какие действительные зависимости у пакета, а не основываясь на довольно грубом выводе опции «--tree» в Portage.
* Более логично построенные механизмы `--query` и `--pretend`.
* Безопасная установка/удаление пакетов выставляющих *id-флаги на файлах, чтобы в вашей системе не оставались уязвимости даже после того, как уязвимое приложение было заменено.
* Возможность указывать и использовать SLOT-, USE- для отдельных репозиториев, категорий и пакетов.
* Изначальная поддержка для пакетов, устанавливаемых из систем контроля версий. Возможность автоматически обновлять их через заданный период времени.
* Управление пакетами, даже если ebuild(ы) уже не доступен/ны.

### Для разработчиков Ebuild

[править | править код]

* Полное и правильное разрешение циклических зависимостей.
* Глубокое разрешение зависимостей, даже если обновлено не всё.
* Поддержка «экспериментальных» (читай: 'still not implemented in Portage') EAPI (use dependencies, ranged version specs, -scm and -try version specs, src_uri arrows etc).
* Возможность доставки новостей до конечного потребителя.
* Более полезная диагностика.

### Для программистов

[править | править код]

* Независимые API, библиотеки и клиенты. К качестве подтверждения преимуществ такого подхода — срок в полгода на написание, тест и миграцию на клиент cave.
* Практичный ООП API, документация и примеры кода.
* Соответствующие интерфейсы для различных видов репозиториев.
* Наборы тестов и обширный статический анализ, чтобы проверить влияние изменений.
* Тип безопасных интерфейсов, для отлова ошибок программирования во время компиляции.
* Выбор языка программирования для внешних инструментов.[4]

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

[править | править код]

Paludis на данный момент имеет только один клиент — cave (лат.). Список всех клиентов можно найти здесь.

Обновление базы данных (синхронизация):

cave sync

Вывод списка установленных пакетов:

cave show installed-packages

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

cave resolve пакет -x

Вывод наборов (sets):

# cave print-sets
insecurity
insecurity::gentoo
installed-packages
installed-packages::installed
installed-slots
installed-slots::installed
security
security::gentoo
system
system::gentoo
world
world::environment

## Пример

[править | править код]

Пример работы клиента cave пакетного менеждера paludis:

# cave show paludis
* sys-apps/paludis
::arbor                   0.60.4(~) 0.62.2(~) 0.64.1(~)* (scm)R(~) {:0}
::installed               0.64.1 {:0}
sys-apps/paludis-0.64.1:0::installed (system)
Homepage                  http://paludis.pioto.org/
Summary                   Paludis, the one true package mangler
From repositories         arbor
Installed time            Thu Jun 23 21:57:59 UTC 2011
Installed using           paludis-0.64.0
Licences                  GPL-2 vim-syntax? ( vim )
Options
OPTIONS
(bash-completion) Enable bash-completion support
(-doc)            Adds extra documentation (API, Javadoc, etc)
(-gemcutter)      Enable Gemcutter-based support for ruby gems
(pbin)            Experimental binary package support
(-pink)           Use an obnoxious girly colour scheme
(-prebuilt-documentation) Use prebuilt documentation
(-python)         Adds support/bindings for the Python language
(-ruby)           Adds support/bindings for the Ruby language
(-search-index)   Enable cave search --index
(vim-syntax)      Pulls in related vim syntax scripts.
(xml)             Enable parsing of xml files, for GLSA and metadata.xml support, only useful with Gentoo repositories
(-zsh-completion) Install completion files for the Z shell
Build Options
-trace            Trace actions executed by the package (very noisy, for debugging broken builds only)

## См. также

[править | править код]

* Порты FreeBSD
* Portage

## Примечания

[править | править код]

1. ↑ Сhangelog (неопр.). Дата обращения: 22 ноября 2010. Архивировано 26 октября 2010 года.
2. ↑ Frequently Asked Questions (неопр.). Дата обращения: 11 августа 2010. Архивировано 31 июля 2010 года.
3. ↑ Why not fix Portage? (неопр.). Дата обращения: 20 октября 2010. Архивировано 31 октября 2010 года.
4. ↑ configuration (неопр.). Дата обращения: 22 ноября 2010. Архивировано 2 декабря 2010 года.

## Ссылки

[править | править код]

* Официальный сайт. (англ.)
* Блог главного разработчика paludis. (англ.)
* Установка и настройка paludis. (рус.)
* Установка и настройка paludis. (англ.)