Как в Debian и Ubuntu помешать заменять файл при обновлении пакета

Проблема: подменил один из файлов установленной программы на свой, но при обновлении пакета этой программы возвращается прежний файл. Как запретить замену файла при обновлении?

Использованное решение: можно обмануть установщик – заставить его перенаправлять файл при установке.

Применив dpkg-divert
(override a package's version of a file, см. man dpkg-divert).

А именно, командой

sudo dpkg-divert --divert /переназначенный/файл --rename /исходный/файл

Отмена:

sudo dpkg-divert --rename --remove /исходный/файл

_______________________________
Подробнее, на конкретном примере:

Мне нравится для индикатора переключения языка использовать флаги.
Но флаг США напоминает семейные трусы, а трёхцветный флажок напоминает про генерала Власова и его нынешних последышей.
Так что я заменяю их на британский и советский, либо на крупные изображения En,Ru – синего и красного цвета.

В разных линуксах пользуюсь xfce4-xkb-plugin, xxkb и gxneur.

С xxkb проблем нет – там путь и названия флажков прописываешь в файле конфигурации /etc/X11/app-defaults/XXkb , и всё, никуда они не денутся.

Но в xfce4-xkb-plugin и gxneur "законного" способа указать другие флажки нет.
Можно только подменить их в
/usr/share/xfce4/xkb/flags/ru.svg и, там же, us.svg
или
/usr/share/icons/hicolor/scalable/apps/gxneur-ru.svg и, там же, gxneur-us.svg

Но тогда, периодически, при очередном обновлении пакета xfce4-xkb-plugin, или gxneur, его флажки опять заменяются на прежние.

В Debian'е (Ubuntu, и т.п.) эту "беду" несложно предотвратить.

Посмотрим на примере флага us.svg для xfce4-xkb-plugin.
Допустим, я его уже заменил на мой вариант, и не хочу, чтобы он при обновлении заменился обратно.

Пишу команду

sudo dpkg-divert --divert /tmp/us.svg --rename /usr/share/xfce4/xkb/flags/us.svg

(ответ: Добавляется «локальное отклонение /usr/share/xfce4/xkb/flags/us.svg в /tmp/us.svg»)

Заодно эта команда действительно перекинет /usr/share/xfce4/xkb/flags/us.svg в /tmp/us.svg,
так что надо ещё не забыть мой /tmp/us.svg скопировать обратно в /usr/share/xfce4/xkb/flags/us.svg

И это всё! Флажок при обновлении больше не будет заменяться.
Теперь система при обновлении xfce4-xkb-plugin будет кидать флажок us.svg из пакета в /tmp
(откуда он благополучно исчезнет при перезагрузке – /tmp у меня прописан на рам-диске tmpfs :-)

А сам клавиатурный индикатор xfce4-xkb-plugin так и будет брать флажок с прежнего места, /usr/share/xfce4/xkb/flags/us.svg , для него всё осталось по-прежнему. (Поменялась только настройка обновлятора пакетов dpkg).

_______________________
Если когда-то будет необходимо отменить это переназначение,
то сначала надо будет обязательно убирать куда-то файл /usr/share/xfce4/xkb/flags/us.svg
(иначе будет ошибка «...не разрешено»),
а потом:
sudo dpkg-divert --rename --remove /usr/share/xfce4/xkb/flags/us.svg
(ответ: Удаляется «локальное отклонение /usr/share/xfce4/xkb/flags/us.svg в /tmp/us.svg»)
И вернуть стандартный файл, если вы его сохранили. Либо пакет переустановить.

================
Дополнение от 05.05.2015
см. Учим базовые команды Linux: chattr
Видимо
chattr +i /ваш/файл
даёт ещё одно решение данной задачи
(i – immutable. Файл с этим атрибутом невозможно модифицировать или удалить. Даже суперпользователю.
Отмена: chattr -i /ваш/файл )

Правда оно подходит только для файлов, которые не должны изменяться не только при обновлениях, но и "в мирной жизни" :-)

========
Дополненьице от 07.07.2015
Если вы заменили иконки gxneur'а, а он всё-равно старые показывает, надо удалить кэш иконок
/usr/share/icons/hicolor/icon-theme.cache
и перезапустить gxneur.

Ваша оценка: Нет Средняя оценка: 5 (3 votes)
11
pomodor

либо на крупные изображения En,Ru – синего и красного цвета

En и Ru все же правильнее. Язык-то русский, а не российский или советский. Но я, кстати, вообще индикаторами не пользуюсь. Привык, что по умолчанию включена английская раскладка, поэтому при вводе текста на русском интуитивно пальцы тянутся к Ctrl+Shift. А переводить взгляд с курсора на индикатор — терять время, ИМХО.

Ваша оценка: Нет
a

Ого! Так я не один заменяю флаги на векоюританию и ссср?

Ваша оценка: Нет
9
comrade

Это очевидный эстетический выбор ((-;

В гноме2 такими пользовался:

флаг СССР

Британский флаг

В Xfce – такими:

флаг СССР
svg брал здесь:
https://cloud.mail.ru/public/a6b7ce1f84a5/sssr.svg

Британский флаг
svg брал здесь:
https://cloud.mail.ru/public/e0733685b6c7/brit.svg

Ваша оценка: Нет
Отправить комментарий
КАПЧА
Вы человек? Подсказка: зарегистрируйтесь, чтобы этот вопрос больше никогда не возникал. Кстати, анонимные ссылки запрещены.
CAPTCHA на основе изображений
Enter the characters shown in the image.
Linux I класса
Linux II класса
Linux III класса
Счетчики
  • Самый популярный сайт о Linux и Windows 10
О Либератуме

Liberatum — это новости мира дистрибутивов Linux, обзоры, сборки, блоги, а также лучший сайт об Ubuntu*.