Обновление RPM удаляет RPM - PullRequest
       26

Обновление RPM удаляет RPM

27 голосов
/ 13 сентября 2011

Я обновляю RPM нашего проекта. Проблема заключается в том, что когда я обновляю с projectname-1.0-0 до projectname-1.0-1, он сначала устанавливает новый проект и удаляет старый проект, что, в общем виде, полностью удаляет мой проект. Я использовал опцию "vv" при обновлении, и вывод показал, что удаление сделано после установки.

Кто-нибудь, пожалуйста, помогите с этой проблемой. Что-нибудь, что я должен изменить конкретно в параметрах RPM или rpmbuild?

Ответы [ 4 ]

62 голосов
/ 10 ноября 2011

Да, когда происходит обновление RPM, RPM сначала устанавливает новую версию пакета, а затем удаляет старую версию пакета. Только файлы старого пакета удаляются. Но ваши сценарии (то есть% pre,% post,% preun,% postun) должны знать, обрабатывают ли они обновление или просто устанавливают или удаляют.

Команда rpm передаст один сценарий вашим сценариям, то есть $ 1, который является числом версий установленного пакета. В приведенной ниже таблице (из Руководства по RPM от RedHat Эрика Фостера-Джонстона) приведены примеры возможных значений.

Install the first time:          1
Upgrade:                         2 or higher 
                                 (depending on the number of versions installed)
Remove last version of package:  0

Итак, в вашем% preun вы, возможно, захотите проверить «$ 1 = 0» перед удалением каких-либо сервисов.

Для получения дополнительной информации (и лучшей таблицы) см .: http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch09s04s05.html

6 голосов
/ 26 декабря 2014

При обновлении пакета RPM сценарии выполняются в следующем порядке:

 1. %Pre of new package
     copy in files for new package
 2. %Post of new package
 3. %Preun of old package
     remove files of old package
 4. %Postun of old package

Независимо от того, является ли установка новой или обновленной, каждому сценарию передается один аргумент, представляющий количество установленных RPM одного и того же пакета с разными версиями. Для скриптов pre и post это будет 1 в случае первой установки. Для сценариев preun и postun это будет 0 для последней деинсталляции.

Что может случиться в вашем случае, так это то, что сценарии preun или postun могут удалять файлы, полезные для нового пакета. Вам не нужно беспокоиться об удалении файлов вручную в сценариях postun, это будет обрабатываться интеллектуально, как сам RPM.

ref: Обновление и удаление

5 голосов
/ 08 октября 2011

Да.Во время установки rpm будут вызваны сценарии% install и% post.После успешной установки будут вызваны сценарии% preun и% postun для удаления предыдущей версии rpm.Если не обрабатываться должным образом, эти сценарии% preun и% postun могут манипулировать изменениями, вносимыми сценариями% install и% post.

Параметр rpm устанавливает аргумент $ 1 с соответствующими значениями, чтобы различать количество установленных версий rpm.Во время новой установки projectname-1.0-0 будут вызываться сценарии% install и% post с $ 1, установленным в 1, что указывает на то, что это единственная активная версия.При обновлении до projectname-1.0-1 скрипты% install и% post будут вызываться с $ 1, установленным на 2. После этого скрипты% preun и% postun будут вызываться с $ 1, установленным в 1, чтобы очистить содержимое имени проекта-1.0-0.Таким образом, написав файл спецификации, основанный на значении $ 1, мы можем эффективно обрабатывать обновления.

0 голосов
/ 19 августа 2018

важно понимать, как разделы удаления работают при обновлении

У нас есть переменная $ 1, которую можно проверить в pre, post, unpre, unpost (ее значение зависит от установки, обновления, удаления) В зависимости от его значения мы можем сказать, устанавливается ли он или обновляется из rpm

Например:

In Pre/post
if $1 == 1 initial installation
if $1 == 2 upgrade

In preun/postun
if $1 == 0 uninstall
if $1 == 1 upgrade

рассмотрите возможность обновления abc-1 с версии 1 до версии 2 (abc-2)

Run %pre from "abc-2".
Run %post from "abc-2".
Run %preun from "abc-1".
Run %postun from "abc-1".
...