Проблема: подменил один из файлов установленной программы на свой, но при обновлении пакета этой программы возвращается прежний файл. Как запретить замену файла при обновлении?
Использованное решение: можно обмануть установщик – заставить его перенаправлять файл при установке.
Применив 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.
En и Ru все же правильнее. Язык-то русский, а не российский или советский. Но я, кстати, вообще индикаторами не пользуюсь. Привык, что по умолчанию включена английская раскладка, поэтому при вводе текста на русском интуитивно пальцы тянутся к Ctrl+Shift. А переводить взгляд с курсора на индикатор — терять время, ИМХО.
Ого! Так я не один заменяю флаги на векоюританию и ссср?
Это очевидный эстетический выбор ((-;
В гноме2 такими пользовался:
В Xfce – такими:
svg брал здесь:
https://cloud.mail.ru/public/a6b7ce1f84a5/sssr.svg
svg брал здесь:
https://cloud.mail.ru/public/e0733685b6c7/brit.svg