Мне любопытно, как люди разворачивают порты FreeBSD в своей среде. Я предполагаю, что большинство людей, использующих FreeBSD, действительно используют порты (и часто portupgrade для обновления с помощью бинарных файлов). Мне, однако, интересно, как у вас есть эта настройка, так как я не удовлетворен тем, как все работает в последних версиях. Сейчас я использую FreeBSD 9.0 и у меня возникают проблемы.
Я настроил вещи следующим образом:
- / usr / ports используется совместно через NFS с одного узла (с еженедельным 'обновлением выборки portsnap').
- Каждый узел монтирует / usr / ports с возможностью чтения-записи
- Я установил «WRKDIRPREFIX = / usr / tmp» в /etc/make.conf на всех узлах
- Я настроил Portsnap для использования локального индекса, добавив следующее в /usr/local/etc/pkgtools.conf:
ENV['LOCALINDICES'] ||= '/var/db'
ENV['PORTS_INDEX'] ||= ENV['LOCALINDICES'] + '/INDEX.local'
Я могу успешно запустить portupgrade -p package
создание пакета, а затем portupgrade -P package
установить двоичный файл на других узлах.
Тем не менее, иногда я получаю следующую проблему: /var/db/INDEX.local:23265:dbm_store failed
Я не могу думать о каких-либо других оптимизациях, которые я могу сделать для системы, поскольку индекс теперь находится локально, и единственное, что действительно экспортируется, это дерево портов, и с узлов ничего туда не записывается.
Ответы:
Я никогда не был полностью удовлетворен системой портов в большой среде - всегда кажется, что вам нужно применить какое-то внешнее управление для того, чтобы она работала хорошо.
Мои лучшие советы (в порядке возрастания предпочтений, «худшее» решение «лучшее» решение):
Если вы строите на каждом хосте, не надо .
Если вам нужно, не делайте этого по NFS с монтируемыми на чтение и запись монтируемыми устройствами, как вы описали: обычно вы можете доверять портам «Делать правильные вещи» и не топать по дереву портов, если вы предоставляете альтернативные рабочие каталоги, но всегда лучше Будьте осторожны, чем потом сожалейте: запустите локальное зеркало CVS / csup и скопируйте все ваши хосты из этого ящика, затем соберите их локально, как если бы это были отдельные машины.
Да, я знаю, это означает, что на хостах должно быть больше дискового пространства и дополнительный шаг. Это также почти гарантированно будет без проблем.
Предостережение: Возможно, вы захотите синхронизировать файлы конфигурации пакета (rsync или аналогичные) с назначенного «хоста конфигурации», чтобы обеспечить согласованность на каждой машине (вы можете даже rsync по всему дереву портов, если хотите, вместо использования csup на каждом узле).
Используйте Build Host, создавайте пакеты и устанавливайте их.
Гораздо лучшее решение, чем сборка на каждом отдельном компьютере: используйте хост сборки для создания пакетов и направляйте свои инструменты на эти пакеты.
Это означает сохранение хоста сборки для каждой архитектуры, которую вы запускаете (или кросс-компиляции), но в конечном итоге это лучше для ваших целевых машин (нет больших заданий компиляции, гарантия согласованности)
Используйте инструмент конфигурации / управления системой.
Это решение, с которым я столкнулся - я создаю стандартный образ сервера и использую его в своей среде
radmind
. Вы можете делать подобные вещи с Puppet или Chef . Это дает все преимущества использования хоста сборки (согласованность, меньшая нагрузка на отдельные серверы) и добавляет преимущества управления конфигурацией.Предостережение: это работает очень хорошо, только если ваши машины "идентичны" - то есть вы можете установить одинаковый набор портов на всех них. Он может работать, если у вас разные наборы портов, но это существенно увеличивает административные издержки.
Отказ от ответственности: я обслуживаю порт для
sysutils/radmind
. Да, мне так нравится, что я принял это.Все это основано на моем опыте управления средами FreeBSD различных размеров (от 1-2 машин до более 100). Инструменты конфигурирования / управления системой, которые поддерживают и поддерживают стандартизированный образ, - действительно лучший способ справиться с этим по моему опыту.
источник
Странно, что никто не упомянул ports-mgmt / tinderbox :
Кроме того, переход на pkgng значительно упрощает развертывание пакетов.
Проверьте это на github: https://github.com/pkgng/pkgng
источник
PACKAGEROOT
/PACKAGESITE
и использовать radmind или Puppet / Chef).pkg_delete
сначала нужно запустить, а затем установить новую версию. OpenBSD справился с этим лучше, включив опцию обновления вpkg_add
. Не уверен насчет Portupgrade, но portmaster может работать только с использованием INDEX, а не полного дерева портов.Я управлял более чем 100 серверами FreeBSD, просто разделяя / usr только для чтения по хорошо настроенной NFS, перемещая базы данных пакетов из / var в / usr и вставляя ссылки на них (не обязательно, но включает pkg_info и тому подобное). Возможно, были один или два других файла, которые нужно было переместить в одном или другом направлении и создать символическую ссылку, но вся установка заняла у меня около часа, чтобы выяснить это. Это сработало очень и очень хорошо. Если бы я столкнулся с проблемами масштабирования, я бы добавил дополнительные NFS-серверы и разделил бы рабочую нагрузку, но она так и не появилась. Производительность никогда не была проблемой для меня (на самом деле это было здорово), но я полагаю, что вы можете поместить / usr NFS-сервера (или его копию) на md.
источник
Похоже, что никто, к сожалению, не нашел хорошего решения. Скорее всего, это связано с ограничениями лежащих в основе инструментов.
Вот что я придумал: я отказался от идеи экспорта всего дерева портов. Вместо этого я сдался и поместил полное дерево портов на каждый узел. Затем я смонтировал «пакеты» поверх NFS (чтобы разрешить распространение пакетов).
Я также собираюсь использовать кеширующий прокси (возможно, Squid) для ускорения процесса portnap. Я написал небольшой пост о том, как настроить это в моем блоге.
Ссылки:
источник