26 мая 2009 г.

Блокировка пакетов, нежелательных к обновлению

Замечательный хинт для deb-based дистрибов (ну, для Debian/*buntu точно), позволяющий запрещать к обновлению некоторые пакеты. Зачем это нужно? А вот... Есть к примеру пакет rdesktop, который по умолчанию очень хреново работает с переключением раскладок во время RDP-сессии. А есть патченная версия его же, но от Etersoft'a, доступная также свободно. Версия последнего - старее, поэтому при любом apt-get upgrade apt норовит обновить его. Что влечет за собой последующие дополнительные действия по скачиванию пакета, и его установке. Нет, можно конечно взять исходники и патчи Этерсофта, и скомпилить самому свеженький rdesktop'чик. Но ведь лень ;)
Гораздо проще блокировать изменения данного пакета. Чтобы это сделать, пишем от root:
echo {PACKAGENAME} hold | dpkg --set-selections
В нашем случае,
apt-get update
echo rdesktop hold | dpkg --set-selections
apt-get upgrade
После чего обновятся все пакеты дистрибутива, версии которых новее установленных, однако rdesktop (или какой то иной пакет) останется неизменным.
delayer@interro:~# apt-get upgrade
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Пакеты, которые будут оставлены в неизменном виде:
rdesktop
...