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/