LINUX.ORG.RU
ФорумAdmin

debian-сохранить текущую версию файла после обновления пакета

 


0

1

На системе c Debian 9.11 я изменил файл /usr/bin/sa-compile, входящий в пакет sa-compile. Я хотел бы, чтобы при следующем обновлении пакета sa-compile эти изменения сохранились.

Сделал так:

# dpkg-divert --divert /usr/bin/sa-compile --rename /home/slawa/tmp/sa-compile

Теперь после попытки обновления до buster версии:

# apt-get install sa-compile
или
# apt-get -f install sa-compile

Распаковывается sa-compile (3.4.2-1+deb10u1) на замену (3.4.2-1+deb9u2)...
dpkg: ошибка при обработке архива /var/cache/apt/archives/sa-compile_3.4.2-1+deb10u1_all.deb (--unpack):
попытка переписать "/usr/bin/sa-compile", являющийся отклоненной версией "/home/slawa/tmp/sa-compile"
При обработке следующих пакетов произошли ошибки:
/var/cache/apt/archives/sa-compile_3.4.2-1+deb10u1_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

чтобы при следующем обновлении пакета sa-compile эти изменения сохранились.

Почему не хочешь применить alternatives?

anonymous
()

Никак. При установке новой версии пакета твой модифицированный файл улалится вместе со старой версией. Так что ни dpkg-divert ни alternatives не помогут. Можно разве что зафиксировать пакет и запретить его обновлять.

TeopeTuK ★★★★
()
Ответ на: комментарий от TeopeTuK

типа в /etc/apt/preferences.d/sa-compile или зафиксировать пакет:

# apt-mark hold sa-compile 
sa-compile помечен как зафиксированный

попробовал зафиксировать, но все равно пакет новый устанавливается и /usr/bin/sa-compile перезаписывается при

# apt-get install sa-compile
zorinquen
() автор топика
Ответ на: комментарий от TeopeTuK

а почему кстати dpkg-divert не поможет? из мана:

File  diversions  are  a  way of forcing dpkg(1) not to install a file into its location, but to a diverted location. Diversions can be used through the Debian package scripts to move a file away when it causes a conflict.

Т.е. можно указать устанавливать новый файл с обновленного пакета не в /usr/bin/sa-compile, а в другое место? А в /usr/bin будет модифицированный мною sa-compile. Или я не так инфу из мана понял?

zorinquen
() автор топика
Ответ на: комментарий от zorinquen

А зачем ты делаешь apt install? apt upgrade его перезаписывает?

TeopeTuK ★★★★
()
Ответ на: комментарий от zorinquen

Diversions должны согласовываться сопровождающий пакетов. И в любом случае они для случая, когда разные пакеты хотят управлять одним файлом. У тебя пакет один, версии разные.

TeopeTuK ★★★★
()

У dpkg-divert наркоманский синтаксис: dpkg-divert [option...] command, где command = [--add] file, то есть, отклоняемый файл должен идти последним из аргументов. А ещё нужно не забывать --rename, чтобы переименование, собственно, произошло. Предлагаю удалить неправильное отклонение, после чего попробовать снова:

dpkg-divert --remove /home/slawa/tmp/sa-compile
dpkg-divert --rename --divert /root/sa-compile /usr/bin/sa-compile

Убедитесь, что файл /usr/bin/sa-compile на самом деле перемещается в /root/sa-compile.

anonymous
()
Ответ на: комментарий от anonymous

Спасибо, так заработало и после обновления пакета sa-compile осталась модифицированная мной версия файла /usr/bin/sa-compile

Помогла команда:

dpkg-divert --rename --divert /root/sa-compile /usr/bin/sa-compile
zorinquen
() автор топика
Последнее исправление: zorinquen (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.