Управление пакетами в (open)SUSE с помощью zypper

Данная статья не претендует на попытку написать документацию на zypper. Скорее это попытка познакомить читателя со средством пакетного менеджмента, используемым в дистрибутивах компании Novell. Данный пакетный менеджер является незаслуженно игнорируемым многими. Естественно, что охватить все его функции в рамках такой короткой статьи не представляется возможным, хотя бы потому, что для этого есть исчерпывающая документация ;), с которой трудно конкурировать. Ниже приведено вольное изложение об его основных и часто используемых возможностях. Более полный вариант документации и все возможные опции можно посмотреть в man zypper и здесь, здесь и здесь.

Для управления пакетами в разных версиях SUSE как самое высокоуровневое средство используется Yast, который на самом деле использует zypper (а если еще точнее, то его библиотеку libzypp). Причем, обратите внимание на то, что вторая буква в его названии это «Y», а то почему-то его название многие порываются написать, как zipper. Zypper — средство для управления пакетами в текстовом режиме. С SUSE версии 11 (включая энтерпрайзовые версии) zypper существенно прибавил в скорости. По данному теперь он легко уделывает yum (в отличие от yum zypper написан на С) и не уступает (по субъективному ощущению) apt. Синтаксис его конфигурационных файлов достаточно прост, например, чтобы управлять разными репозиториями не нужно ломать голову в отношении их приоритетов (это камень в огород apt). Также zypper достаточно «всеяден» в плане подключения разных репозиториев — он понимает:

  • «родной» формат репозиториев yast;
  • репозитории yum (rpm repo-md);
  • iso-образы репозиториев (да-да, не нужно их распаковывать!) ;
  • локальный каталог с rpm-пакетами;
  • то, что писать уже практически не обязательно — разные сетевые источники репозиториев — http, ftp, nfs.

Oб остальных интересностях я расскажу по ходу дела.

С версии openSUSE 11.2 в zypper наконец-то была добавлена опция, которая давно в него просилась, а именно, опции предварительного выкачивания пакетов при обновлении. Ранее zypper работал так. Например, нужно обновить с десяток пакетов. Zypper выкачивал их все и устанавливал по одному. В принципе, ничего страшного. Если канал в сеть хороший и надежный. А это в наших широтах не всегда встречается. В основном конфигурационном файле /etc/zypp/zypp.conf данное поведение описывается опцией commit.download.mode (опция закоментирована по умолчанию), которая имеет следующие варианты:

  • DownloadOnly — опция, которая легко заменяется ключом —dry-run, т. е. выкачивание всех пакетов необходимых для обновления без их установки.
  • DownloadInAdvance — сначала выкачать все пакеты, требующие обновления, затем начать процесс их установки.
  • DownloadInHeaps — опция аналогичная представленной выше, но в данном случае закачка и установка пакетов выполняется «порциями», не нарушающими целостность системы. Примерно также ведет себя пакетный менеджер в Mandriva.
  • DownloadAsNeeded — традиционное поведение. Закачка и установка осуществляется по одному пакету.

Следующей интересной возможностью zypper является сокращенный вариант его опций, т. е. для установки пакета можно написать zypper install foopackage, а можно zypper in foopackage. Далее я буду приводить именно сокращенный вариант опций, а полный вариант писать в скобках.

Поиск пакетов

Для того, чтобы найти нужный пакет в подключенных репозиториях используется следующая команда:

zypper se foopackage — выполнить поиск (se — search) пакета foopackage.

Если вы хотите найти какую-то программу, но не знаете в каком пакете ее искать, можно сделать так:

booka:/etc/zypp # zypper wp vi
Loading repository data…
Reading installed packages…

S | Name | Type | Version | Arch | Repository

—+—————+———+———-+——+——————
| gvim | package | 7.2-16.7 | i586 | openSUSE-11.2-Oss
i | vim | package | 7.2-16.7 | i586 | openSUSE-11.2-Oss
| vim-enhanced | package | 7.2-16.7 | i586 | openSUSE-11.2-Oss

Опция wp (what-provides) позволяет искать пакет по любому возможному параметру: имя исполняемого файла, путь до исполняемого файла, любой набор символов из описания пакета. В данном случае я попросил найти пакет, содержащий редактор vi.

Еще примеры:

Попробуем поискать в каком пакете у нас находится библиотека libpng:
host13:~ # zypper wp libpng
Loading repository data…
Reading installed packages…
S | Name | Type | Version | Arch | Repository
—+————+———+————+———+——————
i | libpng12-0 | package | 1.2.39-2.2 | x86_64 | openSUSE-11.2-Oss
v | libpng12-0 | package | 1.2.39-2.2 | i586 | openSUSE-11.2-Oss
Интересно, а в каком пакете находится файл /bin/bash?
Host13:~ # zypper wp /bin/bash
Loading repository data…
Reading installed packages…
S | Name | Type | Version | Arch | Repository
—+——+———+————+———+—————————-
i | bash | package | 4.0-18.4.1 | x86_64 | Updates for openSUSE 11.2-0
v | bash | package | 4.0-18.4.1 | i586 | Updates for openSUSE 11.2-0
v | bash | package | 4.0-18.3 | x86_64 | openSUSE-11.2-Oss
v | bash | package | 4.0-18.3 | i586 | openSUSE-11.2-Oss
Первый столбик показывает статус пакета, где i означает — установлен.
Просмотреть информацию о пакете можно командой zypper info <имя пакета>
Установка и удаление пакетов
Установка пакетов из подключенных репозиториев выполняется командой:
zypper in foopackage
Данная команда (in — install) установит пакет foopackage со всеми его зависимостями.
Для удаления пакетов используется опция rm/remove:
zypper rm foopackage
Данная команда удалит пакет foopackage из вашей системы.
Для проверки целостности системы на предмет удовлетворения зависимостей существует команда verify:
zypper ve
Если чего-то не будет хватать — zypper предложит доустановить нехватающие пакеты (или даже удалить ненужные).
Также есть еще два ключа, которые не являются обязательными, но могут здорово помочь, если вы вызываете zypper из скриптов. Первый ключ «-y» заставляет пакетный менеджер отвечать на все вопрос «да»/«yes». Второй ключ «-l» (маленькая L) — имеет похожее значение, она заставляет zypper соглашаться с лицензионными соглашениями отдельных пакетов (например, таких как Adobe Flash).
Обновление

Выполнять обновление системы zypper позволяет двумя способами — на основе патчей и на основе пакетов. Первый способ рекомендуется для серверов. В данном случае производится только наложение патчей, исправля