RPM/pretrans: различия между версиями
< RPM
Vt (обсуждение | вклад) (Новая страница: «В случае если новая версия пакета заменяет ''симлинк на диру'' или ''диру на симлинк'' RPM сам не может решить этот конфликт. Для его решения используется <code>%pretrans</code> скриптлет (его поддержка есть с {{pkg|rpm-build-4.0.4.185-alt1}}). {{Attention|<code>%pretrans</code> скриптлет '''ДОЛЖЕН'''...») |
Vt (обсуждение | вклад) мНет описания правки |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 1: | Строка 1: | ||
В случае если новая версия пакета заменяет ''симлинк на диру'' или ''диру на симлинк'' RPM сам не может решить этот конфликт. Для его решения используется <code>%pretrans</code> скриптлет (его поддержка есть с {{pkg|rpm-build-4.0.4.185-alt1}}). | В случае если новая версия пакета заменяет ''симлинк на диру'' или ''диру на симлинк'' RPM сам не может решить этот конфликт. Для его решения используется <code>%pretrans</code> скриптлет (его поддержка есть с {{pkg|rpm-build-4.0.4.185-alt1}}). | ||
{{Attention|<code>%pretrans</code> скриптлет '''ДОЛЖЕН''' быть написан на языке '''Lua''', для того чтоб | {{Attention|<code>%pretrans</code> скриптлет '''ДОЛЖЕН''' быть написан на языке '''Lua''', для того, чтоб они ''могли'' выполняться только средствами RPM (без использования Shell в пустой системе)!}} | ||
{{Note|Пожалуйста не меняйте код скриптлетов, кроме параметра <code>path</code>, для того чтоб его не приходилось анализировать. Код проверен временем.}} | {{Note|Пожалуйста не меняйте код скриптлетов, кроме параметра <code>path</code>, для того чтоб его не приходилось анализировать. Код проверен временем.}} | ||
= Замена директории на симлинк = | = Замена директории на симлинк = | ||
Заменяйте значение присваиваемое <code>path</code> на путь к | Заменяйте значение присваиваемое <code>path</code> на путь к нужной директории. В результате работы скриптлета она будет переименована в <code>/path/to/dir.rpmmoved</code>. Желательно также объявить эту переименованную директорию как <code>%ghost</code> в секции <code>%files</code>. | ||
<pre> | <pre> | ||
%pretrans -p <lua> | %pretrans -p <lua> |
Текущая версия от 02:10, 17 июня 2023
В случае если новая версия пакета заменяет симлинк на диру или диру на симлинк RPM сам не может решить этот конфликт. Для его решения используется %pretrans
скриптлет (его поддержка есть с rpm-build-4.0.4.185-alt1).
Внимание!
%pretrans
скриптлет ДОЛЖЕН быть написан на языке Lua, для того, чтоб они могли выполняться только средствами RPM (без использования Shell в пустой системе)!Примечание: Пожалуйста не меняйте код скриптлетов, кроме параметра
path
, для того чтоб его не приходилось анализировать. Код проверен временем.
Замена директории на симлинк
Заменяйте значение присваиваемое path
на путь к нужной директории. В результате работы скриптлета она будет переименована в /path/to/dir.rpmmoved
. Желательно также объявить эту переименованную директорию как %ghost
в секции %files
.
%pretrans -p <lua> -- Define the path to directory being replaced below. -- DO NOT add a trailing slash at the end. path = "/path/to/dir" st = posix.stat(path) if st and st.type == "directory" then status = os.rename(path, path .. ".rpmmoved") if not status then suffix = 0 while not status do suffix = suffix + 1 status = os.rename(path .. ".rpmmoved", path .. ".rpmmoved." .. suffix) end os.rename(path, path .. ".rpmmoved") end end
Замена симлинка на директорию
Заменяйте значение присваиваемое path
на путь к симлинку, который будет меняться на директорию.
%pretrans -p <lua> -- Define the path to the symlink being replaced below. path = "/path/to/dir" st = posix.stat(path) if st and st.type == "link" then os.remove(path) end
Ссылки
- Пакеты с примерами использования:
- Апстримная документация https://docs.fedoraproject.org/en-US/packaging-guidelines/Directory_Replacement/