2009-04-06 5 views
21

У меня есть несколько приложений, которые я хочу развернуть с использованием rpm. Некоторые из файлов в развертывании моего приложения переопределяют файлы из других развернутых пакетов. Простое включение новых файлов в пакет развертывания вызовет конфликты rpm.Как использовать rpm для обновления/замены существующих файлов?

Я ищу подходящий способ использования rpm для обновления/замены уже установленных файлов.

У меня уже есть несколько решений, но ничего не кажется совершенно правильным.

  • Ведение пользовательских версий rpms, содержащих исходные файлы.

Это похоже на большой объем работы за относительно небольшую награду, даже если она менее похожа на хак, чем на некоторые другие возможные решения.

  • Включите файлы в rpm с другим именем и скопируйте их в разделе сообщений.

Это будет работать, но будет означать засоривание системы несколькими копиями файлов. Также это означает дополнительное обслуживание в спецификации сборки rpm для каждого файла.

  • Используйте wget в почтовом отделении, чтобы заменить исходные файлы с известного сервера.

Это похоже на технику копирования, но файлы даже не живут в об/мин. Однако это может быть хорошим центральным конфигурационным центром.

  • Разверните файлы в виде новых файлов, а затем используйте символические ссылки для переопределения оригиналов.

Это также похоже на технику копирования, но с меньшим количеством помех. Проблема здесь в том, что некоторые файлы не ведут себя хорошо как символические ссылки.

ответ

11

Насколько мне известно, RPM не предназначена, чтобы разрешить обновление/замены существующих файлов, так что все, что вы делаете, будет рубить.

Из списка, который вы перечисляете, я бы выбрал # 1 как наименее плохой взлом, если целевые системы - это системы, которые я администрировал (как вы говорите, это больше работает, но является самым чистым решением) и комбинацией # 2 и # 4 (символические ссылки, где это возможно, копии там, где нет), если я создаю RPM для других систем (чтобы избежать необходимости распространять кучу RPM, но я бы сделал это очень ясно в документах, я делаю).

Вы не указали, какие файлы необходимо обновить или заменить, и как их необходимо обновить. В зависимости от ответов на эти вопросы, вы можете иметь несколько других вариантов:

  • Многие программы предназначены для использования одного файла конфигурации по умолчанию, а также захватить конфигурационные файлы из подкаталога .d.Например, Apache использует /etc/httpd/conf/httpd.conf и /etc/httpd/conf.d/*.conf, поэтому ваши RPM могут отбрасывать файлы под /etc/httpd/conf.d вместо изменения /etc/httpd/conf/httpd.conf. И если файлы, которые вам нужно изменить, являются конфигурационными файлами, которые не соответствуют этому шаблону, но могут быть сделаны, вы можете предложить сопровождающим пакетам, что они добавляют эту возможность; это не поможет вам немедленно, но облегчит будущие выпуски.
  • Для служебных программ командной строки, таких как sendmail и lpr, которые могут быть предоставлены несколькими пакетами, система alternatives (см. man alternatives) позволяет использовать более 1 об/мин, чтобы эти утилиты устанавливались рядом друг с другом. Опять же, если файлы, которые вам нужно изменить, являются утилитами командной строки, которые не соответствуют этому шаблону, но могут быть сделаны, вы можете предложить сторонним разработчикам пакетов, чтобы они добавили эту возможность.
  • Конфигурационные изменения файлов в системах, которые вы администрируете, лучше управляются с помощью инструмента, например Cfengine или Puppet, а не через настраиваемые RPM. Я думаю, что Red Hat предпочитает Puppet.
  • Если бы я создавал RPM для систем, которые мне не управляют, я бы подумал об использовании стороннего инструмента, такого как Bitrock, и сбросил все мои вещи под /opt, чтобы мне не пришлось топать по файлам, установленным RPM других администраторов.
0

Вы проверили документацию об оборотах и ​​список рассылки? Вот один о rpmsave и rpmnew, которая покрывает вашу проблему: http://www.redhat.com/archives/fedora-list/2003-December/msg04713.html

+0

Это хороший совет, но функция rpmnew/rpmsave действительно относится к обновлению существующего пакета. У меня возникла проблема с добавлением нового пакета, который изменяет файлы, уже установленные другим пакетом. Спасибо! – tremoloqui

+0

Обновление файлов другого пакета звучит не очень безопасно для меня. Зачем вам нужно возиться с файлами из других пакетов? – lothar

+0

. Пример: пакет perl-5.8.8 на CentOS содержит множество более старых версий модулей CPAN, которые вы не сможете обновить с помощью RPM, потому что обновленные файлы модулей будут конфликтовать. Таким образом, вы либо застряли со старыми модулями, либо взломали его. –

2

Смотрите здесь для получения дополнительной информации о RPM% файлы директив:

http://www.rpm.org/max-rpm/s1-rpm-inside-files-list-directives.html

Вы можете использовать аргументы из% поста и% предварительно разделов в скриптлетах RPM, чтобы определить, если вы устанавливаете, обновления или удаления пакетов.

Если $ 1 - 0, то мы удаляем старые вещи. Установлен таргетинг на 0 пакетов. Если 1 доллар США - 1, мы устанавливаем новые вещи. Ориентация на 1 пакет для установки. Если $ 1 - 2 или более - мы обновляем этот пакет, а $ 1 представляет количество пакетов, которые уже установлены.

Эти разделы помогают управлять файлами между версиями. Следите за тем, что вы делаете между версиями, и подумайте над тем, что можно было бы сделать, если бы они пропустили версию или две.

Примите во внимание эти вещи, и вы должны быть добрыми!

2

Вы также можете выполнить rpm -U --replacefiles --replacepkgs ..., что даст вам то, что вы хотите.

+0

Ум не совсем. Хотя установка будет заменять файлы, операция не будет постоянной. Следующее обновление будет отменено - замените файлы. Обратите внимание, что --replacepkgs в значительной степени не имеет значения, если пакет имеет то же имя. –

+1

Также вы не можете ожидать, что это будет работать, когда пользователи вытаскивают ваш пакет с сервера yum. – Jolta

 Смежные вопросы

  • Нет связанных вопросов^_^