Как использовать rpm для обновления / замены существующих файлов? - PullRequest
21 голосов
/ 06 апреля 2009

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

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

Я уже придумал несколько решений, но, похоже, ничего не подходит.

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

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

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

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

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

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

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

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

Ответы [ 3 ]

11 голосов
/ 06 апреля 2009

Насколько я знаю, 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 других администраторов.
3 голосов
/ 21 апреля 2015

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

2 голосов
/ 11 сентября 2013

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

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

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

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

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

Будьте внимательны к этим вещам, и вам следует идти вперед!

...