четверг, 10 февраля 2011 г.

Актуальное обновление пакетов в Debian

Stable-выпуски Debian славятся своими устаревшими версиями пакетов и поскольку Debian Squeeze вышла совсем недавно в режиме Stable, прийдет время и мы вновь столкнемся с этой проблемой.

Лично я всегда стараюсь поддерживать актуальное состояние некоторых сервисов, запущенных на моем Debian-сервере и по этому обновляюсь с зеркал для testing или unstable в зависимости от ситуации.

Для этого нежно добавить в файл /etc/apt/sources.list адреса репозиториев этих версий:

#Testing
deb http://debian.nsu.ru/debian testing main non-free contrib

#Unstable
deb http://debian.nsu.ru/debian unstable main non-free contrib

Мы же не хотим, чтобы ВСЕ наши пакеты обновлялись до версий, включенных в дистрибутив Unstable? Ну и конечно же пакеты для версии Testing в большем приоритете чем Unstable, если только не ультра-новая "фича" которая по-любому нужна=)



По этому нужно задать определенный порядок приоритетов для программы APT.
Для этого создаем файл:
root@isl-debian:/home# touch /etc/apt/preferences
И добавляем в него строки:
 root@isl-debian:/home# nano /etc/apt/preferences

Package: *
Pin: release a=stable
Pin-Priority: 100

Package: *
Pin: release a=testing
Pin-Priority: 90

Package: *
Pin: release a=unstable
Pin-Priority: 80


Синтаксис очень простой:
Package - имя пакета. В данном случае мы оговорим обо ВСЕХ пакетах
Pin          -  версия которая будет использоваться. Мы говорим что хотим использовать версии актуальные для релизов stable, testing и unstable.
Pin-priority  - Приоритет, приоритетов существует несколько видов:

P > 1000 - ставится в случае даунгрейда.

990 < P <=1000  версия пакета поставиться даже если не с этого релиза,  
если только установленная версия ниже.

500 < P <=990   версия пакета поставится только, 
если есть более новая версия для данного релиза

0 < P <=100   версия пакета поставиться,  
если есть более новая версия для другого релиза  
или установленный пакет имеет более позднюю версию.

P < 0   не поставится вообще

Соответственно мыслим логически:

1.Все пакеты ставятся с резпозиториев STABLE
2.Необходимые нам пакеты мы вручную ставим с репозиториев TESTING\UNSTABLE
3.Если нам необходимо чтобы какой-то пакет оставался определенной версии, указываем это.

B так, получается приоритеты от 0 до 100 ставится с репозиториев,при чем максимальный приоритет у Stable. В дальнейшем мы можем указать более высокий приоритет для определенных пакетов вручную и так же можем указать пакеты с приоритетом ниже нуля для сохранения версий.

Обновляемся: apt-get update

Проверяем приоритеты на примере пакета Nagios3.
 root@isl-debian:/home# apt-cache policy nagios3
nagios3:
  Установлен: (отсутствует)
  Кандидат:   3.2.1-2
  Таблица версий:
     3.2.3-1 0
         90 http://debian.nsu.ru/debian/ testing/main i386 Packages
         80 http://debian.nsu.ru/debian/ unstable/main i386 Packages
     3.2.1-2 0
        100 http://mirror2.corbina.ru/debian/ stable/main i386 Packages
        100 ftp://ftp.ru.debian.org/debian/ stable/main i386 Packages
        100 http://debian.nsu.ru/debian/ stable/main i386 Packages

root@isl-debian:/home# apt-cache show nagios3
Package: nagios3
Priority: optional
Section: net
Installed-Size: 32
Maintainer: Debian Nagios Maintainer Group <pkg-nagios-devel@lists.alioth.debian.org>
Architecture: i386
Version: 3.2.1-2
Depends: nagios3-core (= 3.2.1-2), nagios3-cgi (= 3.2.1-2)
Suggests: nagios-nrpe-plugin
Filename: pool/main/n/nagios3/nagios3_3.2.1-2_i386.deb
Size: 1428
....................
....................

Package: nagios3
Priority: optional
Section: net
Installed-Size: 32
Maintainer: Debian Nagios Maintainer Group <pkg-nagios-devel@lists.alioth.debian.org>
Architecture: i386
Version: 3.2.3-1
Depends: nagios3-core (= 3.2.3-1), nagios3-cgi (= 3.2.3-1)
Suggests: nagios-nrpe-plugin
Filename: pool/main/n/nagios3/nagios3_3.2.3-1_i386.deb
Size: 1434
....................
....................

Как vs видим, все так как и запланированно. При вводе команды apt-get install nagios3 установится пакет версии 3.2.1. Тем не менее команда apt-get show выдает нам информацию сразу по двум версиям,не стоит этого бояться=) Ну что, пробуем:
root@isl-debian:/home# apt-get install nagios3
Проверяем,какая версия у нас установилась:
root@isl-debian:/home# dpkg -s nagios3
Package: nagios3
Status: install ok installed
Priority: optional
Section: net
Installed-Size: 32
Maintainer: Debian Nagios Maintainer Group <pkg-nagios-devel@lists.alioth.debian.org>
Architecture: i386
Version: 3.2.1-2
Depends: nagios3-core (= 3.2.1-2), nagios3-cgi (= 3.2.1-2)


То, что нужно.Проверяем что у нас с приоритетами:
root@isl-debian:/home# apt-cache policy nagios3
nagios3:
  Установлен: 3.2.1-2
  Кандидат:   3.2.1-2
  Таблица версий:
     3.2.3-1 0
         90 http://debian.nsu.ru/debian/ testing/main i386 Packages
         80 http://debian.nsu.ru/debian/ unstable/main i386 Packages
 *** 3.2.1-2 0
        100 http://mirror2.corbina.ru/debian/ stable/main i386 Packages
        100 ftp://ftp.ru.debian.org/debian/ stable/main i386 Packages
        100 http://debian.nsu.ru/debian/ stable/main i386 Packages
        100 /var/lib/dpkg/status

Нам сообщают о том что стоит версия 3.2.1-2 и при обновлении сохранится версия 3.2.1-2. Но ведь мы же хотели самую последнюю версию? Тогда пишем в консоле:
root@isl-debian:/home# apt-get -t testing install nagios3
И все идёт по плану :) По синтаксису можно догадаться что после ключа "-t" нужно указать для какого релиза ставить пакет stable, testing или unstable.

Цель достигнута.

Комментариев нет:

Отправить комментарий