RPM/pretrans
< RPM
В случае если новая версия пакета заменяет симлинк на диру или диру на симлинк 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/