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

Обновление RPM отключает RPM

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

При обновлении пакета 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: Обновление и удаление

Ответ 4

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

У нас есть переменная $ 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".