Обновление RPM отключает RPM
Я обновляю RPM нашего проекта. Проблема в том, что когда я обновляюсь от projectname-1.0-0 до projectname-1.0-1, он сначала устанавливает новый проект и удаляет старый проект, который в общем виде полностью удаляет мой проект. Я использовал опцию "vv" во время обновления, и на выходе показано, что удаление происходит после установки.
Кто-нибудь, пожалуйста, помогите с этой проблемой. Есть ли что-то, что я должен изменить в спецификациях RPM или rpmbuild?
Ответы
Ответ 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".