[-- Attachment #1: Type: text/plain, Size: 2754 bytes --] Hello! On Wed, 4 Dec 2019, Anton Shevtsov wrote: > Суть вопроса. Делаю небольшой метапакет, не для апстрима, для локального > использования. Хотя и достаточного глобального использования. > > Смысл такой, что надо установить chromium-gost, при этом удалить chromium, > при этом создать симлинку /usr/bin/chromium -> /usr/bin/chromium-gost > > В spec пишу > .. > Requires(pre): chromium-gost > ... > %post > ln -s /usr/bin/chromium-gost /usr/bin/chromium > %postun > rm -f /usr/bin/chromium > ... > > при попытке установить мой метапакет, выводится, что обычный хромиум будет > удален, будет поставлен chromium-gost. На этом этапе все хорошо. Пакеты > ставятся, но тут же получаю > > ln: не удалось создать символьную ссылку '/usr/bin/chromium': Файл > существует > > Что логично ибо логика пакетного менеджера _сначала установить_, а лишь > потом _удалить_. Т.е. симлинка пытается появится, когда еще установлен > обычный chromium. > > А Conflicts(pre) нету, чтобы удалить его раньше установки. Раз Conflicts(pre) нету, можно было бы придумать попробовать Requires(pre): conflicts-chromium а в пакете conflicts-chromium поставить Conflicts: chromium Но я так не советую пробовать делать в первую очередь, см. моё предложение ниже. > Есть ли механим, вмешаться в транзакцию и удалить пакет раньше? Какие пути > решения? Вмешаться в порядок действия в транзакцию довольно сложно, там и так в коде rpm всё очень непросто в этом месте. Мне кажется, в Вашем случае этот симлинк можно просто положить в секцию %files Вашего пакета. Раз в результате транзакции старый владелец этого файла (пакет chromium) удаляется, то rpm это учтёт и без жалоб сразу на этом месте создаст новый симлинк при выполнении транзакции. -- Best regards, Ivan
On Wed, Dec 04, 2019 at 09:02:08AM +0500, Anton Shevtsov wrote: > Смысл такой, что надо установить chromium-gost, при этом удалить chromium, > при этом создать симлинку /usr/bin/chromium -> /usr/bin/chromium-gost Вдумчиво читайте порядок установки/удаления пакетов в самом конце /usr/share/doc/rpm-4.0.4/manual/triggers -- ---- WBR, Michael Shigorin / http://altlinux.org ------ http://opennet.ru / http://anna-news.info
Stop emailing me
Sent from my iPhone
> On Dec 4, 2019, at 8:42 AM, Ivan Zakharyaschev <imz@altlinux.org> wrote:
>
> Hello!
>
>> On Wed, 4 Dec 2019, Anton Shevtsov wrote:
>>
>> Суть вопроса. Делаю небольшой метапакет, не для апстрима, для локального
>> использования. Хотя и достаточного глобального использования.
>>
>> Смысл такой, что надо установить chromium-gost, при этом удалить chromium,
>> при этом создать симлинку /usr/bin/chromium -> /usr/bin/chromium-gost
>>
>> В spec пишу
>> ..
>> Requires(pre): chromium-gost
>> ...
>> %post
>> ln -s /usr/bin/chromium-gost /usr/bin/chromium
>> %postun
>> rm -f /usr/bin/chromium
>> ...
>>
>> при попытке установить мой метапакет, выводится, что обычный хромиум будет
>> удален, будет поставлен chromium-gost. На этом этапе все хорошо. Пакеты
>> ставятся, но тут же получаю
>>
>> ln: не удалось создать символьную ссылку '/usr/bin/chromium': Файл
>> существует
>>
>> Что логично ибо логика пакетного менеджера _сначала установить_, а лишь
>> потом _удалить_. Т.е. симлинка пытается появится, когда еще установлен
>> обычный chromium.
>>
>> А Conflicts(pre) нету, чтобы удалить его раньше установки.
>
> Раз Conflicts(pre) нету, можно было бы придумать попробовать
>
> Requires(pre): conflicts-chromium
>
> а в пакете conflicts-chromium поставить Conflicts: chromium
>
> Но я так не советую пробовать делать в первую очередь, см. моё предложение
> ниже.
>
>> Есть ли механим, вмешаться в транзакцию и удалить пакет раньше? Какие пути
>> решения?
>
> Вмешаться в порядок действия в транзакцию довольно сложно, там и так в
> коде rpm всё очень непросто в этом месте.
>
> Мне кажется, в Вашем случае этот симлинк можно просто положить в секцию
> %files Вашего пакета.
>
> Раз в результате транзакции старый владелец этого файла (пакет chromium)
> удаляется, то rpm это учтёт и без жалоб сразу на этом месте создаст новый
> симлинк при выполнении транзакции.
>
> --
> Best regards,
> Ivan
> _______________________________________________
> devel-newbies mailing list
> devel-newbies@lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/devel-newbies