Можно ли установить конкретную версию пакетов, от которой зависит основной пакет?

10

У нас есть среда разработки на FreeBSD 10.3. Я слышал, что FreeBSD управляет зависимостями пакетов таким образом, что он всегда ищет самую новую версию всех пакетов, от которых зависит основной пакет. И это выглядит как правда. Итак, мои вопросы:

  1. Это правда? Есть ли официальные документы, подтверждающие это?
  2. Лучший способ, как преодолеть эту проблему?
Сергий
источник
7
Я подозреваю, что вы можете сначала установить пакет нужной вам версии, затем pkg lockее, а затем установить все, что вам нужно.
arrowd
1
Это также зависит от того, какой порт / пакет вы хотите и в какой версии. Например, у вас могут быть разные версии python / postgresql / php. Иногда для программного обеспечения доступно несколько пакетов, иногда вы можете создать свой специальный пакет из портов.
Рафаэль Аренс
3
Если вы вслепую запускаете обновления freebsd (или pkg upugrade), да, он найдет самое новое и попытается его установить. Как сказал arrowd, теперь (начиная с 9.2 или около того) вы можете заблокировать pkg <pkg>, который должен защитить то, что вы установили, и его зависимости от изменений. YMMV.
quadruplebucky

Ответы:

1

Как FreeBSD собирает пакеты

Проект FreeBSD использовался для сборки пакетов только для выпусков, а иногда и для веток STABLE. Старые сборщики пакетов использовали распределенную систему с именем Portbuild. Для сборки пакетов использовался бы большой кластер из небольших машин размером 2 ГБ и 4 ГБ. Это было подвержено ошибкам и медленно, в основном из-за старых машин. Полная сборка может занять неделю. Сегодня пакеты создаются на одной большой машине с использованием Poudriere. (С веб-страницы Брайана Дрюри ).

Смотрите также: Как обновить набор пакетов и портов во FreeBSD

FreeBSD имеет развивающийся ABI (и API), как и Solaris и Windows, в то время как Linux имеет стабильный (застойный?) ABI (и API), так что в Linux старые двоичные файлы все равно будут работать в более новой версии ОС, тогда как в не-Linux ОС это Это всегда так (иногда это так).

Использование pkg lockможет по-прежнему приводить к головным болям , хотя оно блокируется (выдает предупреждение), когда вы пытаетесь выполнить обновление, используя pkg upgradeего, все еще предполагает, что версии с более высоким номером лучше (желательно) и что это то, что вы хотели бы сделать - поэтому он запрашивает разрешение, и вы можете позволить, но это не гарантирует, что что-то еще не будет сломано. Смотрите выше URL или это обсуждение: « Вы бы предпочли, чтобы FreeBSD блокировала версии двоичных пакетов, распространяемых через pkg, для версии ОС? ».

Если один пакет заблокирован, иногда вам нужно будет дать разрешение разблокировать его и выполнить обновление, хотя это будет работать для одного пакета (и всех его зависимостей), нет никакой гарантии, что что-то еще не будет несовместимо с новыми библиотеками ( и, следовательно, также необходимо обновление, если оно доступно в настоящее время).

Блог Брайана Дрюри: « FreeBSD Journal: Poudriere » полагает:

"Прекратите использовать portmaster, portupgrade и порты на ваших серверах и переключитесь на пакеты.

Настройка ваших собственных сборок пакетов с Poudriere займет всего несколько минут и сэкономит вам много времени в будущем.

...

Если вы поддерживаете более одной системы FreeBSD и не используете пакеты, вы должны это сделать. Я поддерживаю только 20 серверов, но создание портов в каждой системе заняло много времени и тратило ресурсы на рабочие машины. При построении портов на нескольких серверах очень просто вывести их параметры или версии из синхронизации. Создав пакеты один раз в одной системе, я уменьшил нагрузку на свои системы, уменьшил объем работы, которую мне пришлось выполнять, и сделал все свои системы согласованными. Вместо того, чтобы иметь дело с одним и тем же отказом в каждой системе, мне нужно только обработать его в системе сборки.

Но загвоздка ...

Зачем вам нужно отклоняться от официальных пакетов? Инфраструктура портов обеспечивает поддержку опций для портов для изменения конфигурации во время сборки. Не все приложения поддерживают настройку во время выполнения. Некоторые приложения должны компилироваться по-разному, в зависимости от того, какие функции включены. У других есть варианты просто уменьшить количество функций и зависимостей в порте по умолчанию. Для администраторов серверов это может быстро привести к обнаружению того, что некоторые пакеты по умолчанию не соответствуют их требованиям.

Так ...

Есть несколько способов получить пользовательские пакеты. Pkg поддерживает использование нескольких репозиториев. Можно настроить использование официального репозитория FreeBSD в качестве основного и пользовательского в качестве дополнительного. Pkg не ограничен количеством репозиториев, которые он может отслеживать, и они могут быть переупорядочены по приоритету. Проблема с несколькими репозиториями состоит в том, что в настоящее время их трудно поддерживать. Когда Pkg обнаруживает, что установленный пакет имеет различные параметры или зависимости от репозитория, который он отслеживает, пакет будет переустановлен из потенциально любой удаленной версии. Вы можете заблокировать пакет во время обновлений с помощью pkg lock PKGNAME и pkg unlock PKGNAME или связать его с определенным репозиторием с помощью pkg annotate -A PKGNAME repository REPONAME. Существует также тонкая проблема синхронизации дерева портов для вашего пользовательского репозитория с пакетами FreeBSD. Поскольку пакеты создаются из моментального снимка дерева портов, получаемого раз в неделю, если ваш пользовательский репозиторий не совпадает, это может привести к конфликтам. Гораздо проще просто создать целый набор пакетов именно того, что вам нужно, с нужными вам опциями.

Решение:

Poudriere (грубо говоря, по-французски «порошковый бочонок») был написан как более быстрая и простая замена Tinderbox. Он был написан автором Pkg Баптистом Даруссеном и в настоящее время поддерживается в основном мной вместе с Баптистом и некоторыми другими авторами. Он быстро стал де-факто инструментом тестирования портов FreeBSD и создания пакетов. Это официальный инструмент кластерной сборки, который также используется проектом портов FreeBSD для тестирования быстрых исправлений в так называемых «exp-run». Он написан в оболочке POSIX и медленно перемещается в компоненты Си. В отличие от Tinderbox, он не имеет зависимостей и не требует базы данных, Он был значительно оптимизирован для обеспечения высокой параллельности во всех операциях. Он использует тюрьмы для создания портов в изолированных средах в очень строгих условиях. Создание тюрьмы выполняется один раз с помощью простой команды. Во время сборки тюрьма автоматически клонируется для каждого процессора, используемого для предоставления портам чистого места для сборки. "

Настройка вашего собственного репозитория с помощью poudriere позволяет вам иметь гибкость портов и простоту управления пакетами.

обкрадывать
источник