Подтвердить что ты не робот

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

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

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

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

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

Насколько мне известно, 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 администраторов.
  • Изменить (2019): В настоящее время Коллекции программного обеспечения предлагает полезную альтернативу. Вы можете создавать пакеты, которые устанавливаются где-то под /opt, и инструменты "Коллекции программного обеспечения" предлагают пользователям стандартный способ использовать их вместо тех, которые обычно устанавливаются в /usr. Red Hat использует это для распространения более новых версий инструментов для их стабильных и долгоживущих (то есть более старых) дистрибутивов Red Hat Enterprise Linux.

Ответ 2

Подробнее о директивах 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 представляет количество пакетов, которые уже установлены.

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

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

Ответ 3

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