суббота, 13 сентября 2008 г.

Исключить пакеты из apt-get (exclude apt-get package)

Вводная часть:

Есть домашний шлюз исправно функционирующий под управлением ОС Ubuntu 8.04.1.

Всё работает хорошо, но всё же нужно обновлять ПО на сервере, для того чтобы можно было устанавливать/компилировать/жить безопасно - без проблем. Тем более, что репозитарий Ubuntu у меня есть в локальной Сети, траффик быстр, и бесплатен.

Но на сервере есть один сервис который мне не хочеться обновлять, это программа vsftpd, она отлично работает, да у той версии есть некоторые проблемы в безопасности, но я не использую те функции в которых есть эти проблемы, но я использую перекодировку имён папок и файлов в кодировку CP1251 для совместимости с довольно популярной ОС от Microsoft, поэтому пакет включает в себя уже эти преобразователи кодировок на лету. А в репозитарии пакет простой которому не ведомы проблемы Русскоязычного сегмента пользователей ПК, а значит перекодировать на лету он не может, и было принятно решение его не обновлять...

Сказанно, сделанно!

Идём в yandex и получаем по запросу "exclude apt-get package" массу интересного...

http://qref.sourceforge.net/Debian/quick-reference/ch-package.ru.html

И делаем:

Удержание пакетов libc6 и libc6-dev при работе с командами dselect и apt-get -u upgrade package может быть выполнено так:
# echo -e "libc6 hold\nlibc6-dev hold" | dpkg --set-selections

Однако, для команды apt-get -u install пакет этот "hold" не будет помехой. Для того, чтобы удержать пакет от обновления путем автоматического отката в командах apt-get -u upgrade пакет или apt-get -u dist-upgrade, добавьте следующие строки в файл /etc/apt/preferences:
Package: libc6
Pin: release a=stable
Pin-Priority: 2000

Здесь элемент "Package:" не может использовать запись вида "libc6*". Если Вам нужно удержать все бинарные пакеты, связанные с пакетом с исходными текстами glibc в синхронном состоянии, Вам нужно перечислить всех их здесь явным образом.
Следующая команда выведет всех удержанные от обновления пакеты:
dpkg --get-selections "*"|grep -e "hold$"


Для меня это получилось вот так:

Package: vsftpd
Pin: release a=stable
Pin-Priority: 2000

Проверяем ДО исключения пакета:


daldon@ubuntu:~$ sudo apt-get upgrade

Чтение списков пакетов... Готово

Построение дерева зависимостей      

Reading state information... Готово                      

Пакеты, которые будут оставлены в неизменном виде:

  linux-generic linux-image-generic linux-restricted-modules-generic

Пакеты, которые будут обновлены:

  cpp-4.2 eject gcc-4.2-base initramfs-tools libc6 libc6-i686 libgcc1 libglib2.0-0 libldap-2.4-2 libstdc++6 linux-restricted-modules-common pciutils python2.5 python2.5-minimal samba samba-common sudo vsftpd

обновлено 18, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 3 пакетов не обновлено.

Необходимо скачать 20,7MB/20,8MB архивов.

After this operation, 41,0kB of additional disk space will be used.

Хотите продолжить [Д/н]? n






Проверяем ПОСЛЕ исключения пакета:


daldon@ubuntu:~$ sudo apt-get upgrade

Чтение списков пакетов... Готово

Построение дерева зависимостей      

Reading state information... Готово                      

Пакеты, которые будут оставлены в неизменном виде:

  linux-generic linux-image-generic linux-restricted-modules-generic vsftpd

Пакеты, которые будут обновлены:

  cpp-4.2 eject gcc-4.2-base initramfs-tools libc6 libc6-i686 libgcc1 libglib2.0-0 libldap-2.4-2 libstdc++6 linux-restricted-modules-common pciutils python2.5 python2.5-minimal samba samba-common sudo

обновлено 17, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 4 пакетов не обновлено.

Необходимо скачать 20,7MБ архивов.

After this operation, 16,4kB disk space will be freed.

Хотите продолжить [Д/н]? y






Как видно, пакет vsftpd перекочивал в список тех пакетов которые будут оставлены БЕЗ ИЗМЕНЕНИЙ!

Всё, теперь можно спокойно соглашаться, пакет vsftpd не будет изменён. И волки сыты и зайцы целы.

P.S. dpkg --get-selections "*"|grep -e "hold$" , ничего не выводит. Не знаю почему, но особо не разбирался. Главное что работает, то, что нужно.