RPM/pretrans: различия между версиями
< RPM
Vt (обсуждение | вклад) Нет описания правки |
Vt (обсуждение | вклад) мНет описания правки |
||
Строка 5: | Строка 5: | ||
= Замена директории на симлинк = | = Замена директории на симлинк = | ||
Заменяйте значение присваиваемое <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/