RPM/pretrans

Материал из ALT Linux Wiki
< 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

Ссылки