RPM/pretrans: различия между версиями

Материал из ALT Linux Wiki
< RPM
(Новая страница: «В случае если новая версия пакета заменяет ''симлинк на диру'' или ''диру на симлинк'' RPM сам не может решить этот конфликт. Для его решения используется <code>%pretrans</code> скриптлет (его поддержка есть с {{pkg|rpm-build-4.0.4.185-alt1}}). {{Attention|<code>%pretrans</code> скриптлет '''ДОЛЖЕН'''...»)
 
Нет описания правки
Строка 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''', для того чтоб выполниться только средствами RPM (без использования Shell в пустой системе)!}}
{{Attention|<code>%pretrans</code> скриптлет '''ДОЛЖЕН''' быть написан на языке '''Lua''', для того, чтоб они ''могли'' выполняться только средствами RPM (без использования Shell в пустой системе)!}}
{{Note|Пожалуйста не меняйте код скриптлетов, кроме параметра <code>path</code>, для того чтоб его не приходилось анализировать. Код проверен временем.}}
{{Note|Пожалуйста не меняйте код скриптлетов, кроме параметра <code>path</code>, для того чтоб его не приходилось анализировать. Код проверен временем.}}



Версия от 00:56, 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

Ссылки