APT

APT

Oleg

APT для пакетов Debian так же важен, как и Yum для пакетов RPM: это высокоуровневая система управления пакетами, самостоятельно скачивающая пакеты из репозиториев и автоматически отменяющая межпакетные взаимозависимости. Комбинация из пакетов Debian и инструмента APT на настоящее время представляется наиболее проработанной системой управления пакетами в Linux. Среди прочего, она применяется в Ubuntu и Debian в качестве стандартной системы управления пакетами.

Для управления пакетами предлагаются две различные команды: apt-get и aptitude. Обе команды очень похожи друг на друга и при всей схожести обслуживания даже имеют практически одинаковый синтаксис. Команды apt-get install имя_пакета или aptitude install имя_пакета загружают указанный пакет и все пакеты, зависящие от него, и устанавливают их.

В настоящее время apt-get по умолчанию применяется в Ubuntu, а в Debian версии 5 и выше рекомендуется использовать aptitude. Неважно, работаете вы с Debian или с Ubuntu, — обе команды устанавливаются по умолчанию.

Кроме того, существуют версии APT для пакетов RPM, которые, однако, распространены не так широко, как Yum. В этом разделе будет рассмотрен только APT для пакетов Debian.

Конфигурация

Конфигурация APT производится в двух файлах — apt.conf.d/* и sources.list, находящихся в каталоге /etc/apt. Более подробная информация по репозиториям может храниться в каталоге sources.list.d.

apt.conf.d/* как правило, содержит лишь немногие базовые настройки, которые обычно нужно оставить в том виде, в котором они заданы по умолчанию (также см. man apt.conf). Файл sources.list (справка man sources.list) уже интереснее. Этот файл включает в себя построчное описание репозиториев APT. Синтаксис каждой строки таков:

pakettyp uri distribution [компонент1] [компонент2] [компонент3] ...

Тип обычных пакетов Debian называется deb, а для пакетов с исходным кодом — deb-src. Наряду с каталогами HTTP и FTP APT поддерживает обычные каталоги, RSH и SSH-серверы, а также CD и DVD.

Правда, случай с репозиториями CD и DVD особый: такие пакеты создаются командой apt-cdrom, описанной чуть ниже. Просто добавить строку deb cdrom недостаточно.

В третьем столбце стоит название дистрибутива (ведь на сервере могут находиться пакеты для нескольких дистрибутивов или их версий). Во всех остальных столбцах указываются компоненты дистрибутива, которые можно учитывать. Названия компонентов зависят от конкретного дистрибутива и пакета! Например, в Ubuntu различаются пакеты main, restricted, universe и multiverse, а в Debian — main, contrib, non-free и т. д.

Версии пакетов, названные раньше, считаются предпочтительными: то есть если пакет доступен для скачивания в нескольких источниках, APT скачивает его по первой ссылке. в следующих строках показан синтаксис.

# Файл /etc/apt/sources.list
deb http://de.archive.ubuntu.com/ubuntu/ quantal main restricted universe
multiverse
deb http://de.archive.ubuntu.com/ubuntu/ quantal-updates main restricted universe
multiverse
deb http://security.ubuntu.com/ubuntu quantal-security main restricted universe
multiverse

Изменения в sources.list лучше всего вносить в текстовом редакторе. Если не хотите пользоваться редактором, попробуйте графический пользовательский интерфейс, например Synaptic.

Декларирование CD в качестве репозитория. В качестве источников данных для APT также можно использовать CD. В таком случае для каждого диска необходимо выполнить команду apt-cdrom add. Она считывает метаданные APT компакт-диска и заносит доступные пакеты в файл кэша. Кроме того, обновляется sources.lst.

Если apt-cdrom жалуется на то, что не может найти СD/DVD, укажите каталог параметром -d.

root# apt-cdrom -d /media/dvd add

Установка APT-ключа. В большинстве APT-источников в Интернете метафайлы для описания репозиториев зашифрованы криптографическими ключами. Кроме того, файлы-оглавления APT содержат контрольные суммы для всех пакетов. Такие механизмы контроля позволяют обеспечить постепенное изменение пакета. Однако этот механизм контроля действует лишь в том случае, если APT известна общедоступная часть ключа, позволяющая определить происхождение пакета. Чтобы настроить ключ для APT, пользуйтесь командой apt-key:

root# apt-key add кодовый_файл .gpg

Команда apt-get

Само управление пакетами производится командой apt-get или aptitude. Синтаксис apt-get понятен на следующих примерах. Показанный в них вывод сокращен ради экономии места.

Обновление информации по APT. Перед установкой пакетов выполните apt-get update, загрузив таким образом новейшую информацию из репозиториев. Пакеты при этом ни устанавливаются, ни обновляются. В данном случае речь идет только об описаниях пакетов!

Установка пакетов. Дополнительно выполните apt-get install — при этом необходимо указать правильное название пакета. Если команда обнаружит, что определенные взаимозависимости пакетов не соблюдаются, она также предложит установить недостающие пакеты. Когда вы примете это предложение, apt-get скачает файлы пакетов и установит их. В следующем примере apt-get рекомендует установить несколько дополнительных пакетов.

root# apt-get update
...
root# apt-get install apache2
...
Устанавливаются следующие дополнительные пакеты:
apache2-mpm-worker apache2-utils apache2.2-common libapr1 libaprutil1
Предлагаемые пакеты:
apache2-doc apache2-suexec apache2-suexec-custom
Устанавливаются следующие НОВЫЕ пакеты:
apache2 apache2-mpm-worker apache2-utils apache2.2-common libapr1 libaprutil1
0 обновлено, 6 новых установлено, 0 к удалению и 11 не обновлено.
Необходимо скачать архивы общим размером 1472 Кбайт.
После этой операции на диске будет занято еще 5452 Кбайт места.
Хотите продолжить? [Y/n]?

Удаление пакетов. Команда apt-get remove имя_пакета удаляет указанный пакет. Пакеты, которые первоначально были загружены с удаляемым пакетом и связаны с ним зависимостями, остаются при этом нетронутыми. В данном случае используйте apt-get autoremove. Эта команда удаляет все пакеты, которые больше не нужны.

Обновление пакетов. Команда apt-get dist-upgrade обновляет все установленные пакеты. Если изменились межпакетные взаимосвязи и требуется установить новые пакеты или удалить старые, эти операции также выполняются

qqroot# apt-get upgrade
...
Следующие пакеты будут обновлены:
libmozjs1d xulrunner-1.9 xulrunner-1.9-gnome-support
3 обновлено, 0 новых установлено, 0 к удалению и 0 не обновлено.
Необходимо скачать архивы общим размером 8208 Кбайт.
После этой операции на диске будет занято еще 8192 Кбайт места.
Хотите продолжить? [Y/n]? Y

У команды apt-get dist-upgrade есть еще вариант upgrade: он также обновляет все пакеты. Разница заключается в том, что при этом не устанавливаются никакие новые или имеющиеся пакеты.

Инсталляция исходного кода. Команда apt-get source имя_пакета устанавливает исходный код нужного пакета в текущий каталог.

Программа aptitude

Текстовая программа aptitude также построена на основе APT. Если вы используете эту программу в командном режиме (aptitude install имя_пакета), ее синтаксис во многом совместим с apt-get. Кроме того, эту программу можно использовать в консоли — с текстовым пользовательским интерфейсом (рис.). Для этого просто запустите программу без дополнительных параметров. Для перехода в меню нажмите клавишу F10.

Управление пакетами с помощью программы aptitude

По сравнению с apt-get программа aptitude имеет принципиальное преимущество: она отмечает, какие зависимые пакеты были установлены, и автоматически удаляет их при деинсталляции. Если, например, вы устанавливаете программу xyz, для работы которой требуется пять дополнительных пакетов (lib-abc, lib-efg и т. д.), эти пакеты удаляются (если от них не зависит какой-нибудь другой пакет)

Если же вы удаляете xyz с помощью aptget или Synaptic, зависимые пакеты lib-abc, lib-efg и т. д. остаются в системе. Пройдет немного времени, и никто уже не вспомнит, зачем были установлены эти пакеты.

В Debian для управления пакетами специально рекомендуется использовать aptitude вместо apt-get.

Пример. Две следующие команды сначала устанавливают пакет html2ps, а потом снова его удаляют. Отмечу, что большинство дополнительных пакетов, установленных вместе с html2ps, снова удаляются. Большинство, но не все — команда aptitude несовершенна.

root# aptitude install html2ps
Считываются списки пакетов... Готово
...
Дополнительно устанавливаются следующие пакеты:
gs-gpl html2ps libcompress-zlib-perl libfont-afm-perl libhtml-format-perl
libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl libmailtools-perl
...
Хотите продолжить? [Y/n/?] Y
...
root# aptitude remove html2ps
...
Следующие пакеты не используются и будут УДАЛЕНЫ:
libfont-afm-perl libhtml-format-perl libhtml-parser-perl libhtml-tagset-perl
libhtml-tree-perl libmailtools-perl libtimedate-perl liburi-perl libwww-perl
perlmagick
...

Команда tasksel

Как правило, для установки групп пакетов в Debian и Ubuntu используются мета пакеты: это пустые пакеты, определяющие только отдельные межпакетные взаимосвязи. Например, вместе с метапакетом build-essential инсталлируется несколько пакетов с важными инструментами разработки (Compiler , make и т. д.).

Есть еще один способ определения групп пакетов — на основе команды tasksel. Этот механизм предназначен в первую очередь для того, чтобы можно было с легкостью выбирать пакеты при установке дистрибутива. Разумеется, tasksel можно использовать и позже, при эксплуатации компьютера. Список всех имеющихся групп пакетов выводится командой tasksel --list-task. Для установки групп пакетов применяется команда tasksel install groupname. Если tasksel выполняется без дополнительных параметров, то система выводит диалоговое окно, в котором можно выбрать требуемые группы пакетов.

Команда apt-cache

Команда apt-cache узнает различные данные относительно доступных или уже установленных пакетов:

root# apt-cache show apache2
Package: apache2
Priority: optional
Section: web
...
Description: передовой, масштабируемый, расширяемый веб-сервер
Apache v2 — представитель следующего поколения вездесущего веб-сервера
Apache. Данная версия — полностью переработанная — содержит множество
нововведений, в частности функцию обработки потоков, новый интерфейс API,
поддержку IPv6, фильтрацию запросов и откликов и многое другое.
...
root# apt-cache search scribus | sort
lprof - Hardware Color Profiler
scribus - Open Source Desktop Publishing
scribus-template - additional scribus templates

Автоматизация обновлений

Как правило, после установки APT требуется откорректировать некоторые конфигурационные файлы, чтобы система могла автоматически скачивать обновления, а при необходимости и устанавливать их. Нужные конфигурационные файлы входят в состав пакета unattended-upgrades, который по умолчанию устанавливается в Debian и Ubuntu.

Для автоматизации скачивания и установки обновлений была разработана программа Cron, которая ежедневно выполняет сценарий /etc/cron.daily/apt. Этот сценарий интерпретирует конфигурационный файл /etc/apt/apt.conf.d/* и при необходимости выполняет команду обновления unattended-upgrade. Чтобы активизировать автоматические обновления, нужно вручную внести в конфигурационные файлы следующие изменения:

// Файл /etc/apt/apt.conf.d/10periodic
// Активизировать ежедневные обновления
APT::Periodic::Unattended-Upgrade «1»;
// Файл /etc/apt/apt.conf.d/50unattended-upgrades
// Проводить стандартные обновления и обновления системы безопасности
Unattended-Upgrade::Allowed-Origins {
"${distro_id} stable";
"${distro_id} ${distro_codename}-security";
"${distro_id} ${distro_codename}-updates";
};
// Не обновлять следующие пакеты
Unattended-Upgrade::Package-Blacklist {
// "vim";
// ...
};
// Прислать электронное сообщение о статусе обновления
// Unattended-Upgrade::Mail "root@localhost";

APT::Periodic::Unattended-Upgrade указывает, с каким интервалом (в днях) система должна пытаться скачивать обновления.

С помощью Allowed-Origins укажите, какие репозитории должны учитываться при проведении обновлений. С использованием Package-Blacklist можно автоматически исключить определенные пакеты при проведении обновлений.

Наконец, команда mail позволяет указать адрес, на который команда unattended-upgrade посылает краткое статусное уведомление после того, как обновление будет успешно завершено. Для рассылки электронной почты необходимо настроить на компьютере почтовый сервер (MTA) и дополнительно установить пакет mailx.

В заключение скажу еще несколько слов о процессе обновления: в каталоге /etc/cron.daily/apt содержится команда sleep, задерживающая выполнение сценария на случайное количество секунд (до 1800). Такая принудительная пауза позволяет избежать ситуации, в которой тысячи компьютеров, использующих cron, одновременно обращались бы к одним и тем же репозиториям.

Сценарий /usr/bin/unattended-upgrade протоколирует все обновления или попытки обновлений в файлах регистрации в каталоге /var/log/unattended-upgrade. Кроме того, /etc/cron.daily/apt закладывает в каталоге /var/lib/apt/periodic/ файлы с отметками времени, показывающими, когда именно в последний раз проводилась определенная операция.

Команда unattended-upgrade не обновляет те пакеты, в которых имеется так называемая инструкция conffile prompt, то есть конфигурационные файлы которых были обновлены вручную. К сожалению, эти данные можно узнать только из файлов регистрации, но не из статусного сообщения, пришедшего по электронной почте.

Поскольку на практике такие изменения проводятся довольно часто, несмотря на автоматические обновления, вам придется регулярно проверять, появились ли обновления, которые необходимо установить вручную.

Обновления ядра вступают в силу только после перезагрузки компьютера. Команда unattended-upgrade этим не занимается, то есть вы сами должны перезапустить компьютер командой reboot.

Обновления версий или дистрибутивов

С помощью команды apt-get dist-upgrade можно обновить целый дистрибутив до новейшей версии. Для этого потребуется соответствующим образом заново настроить репозитории в /etc/apt/sources.list.

В Ubuntu обновление дистрибутива можно произвести с помощью команды do-release-update -m desktop (для ПК) или -m server (для сервера). В версиях Ubuntu LTS (рассчитанных на долговременную поддержку) новые релизы предусмотрены лишь для следующих версий, то есть, например, 8.04 или 12.04. Если вы хотите обновить версию, которая не рассчитана на долговременную поддержку, вам сначала нужно в каталоге /etc/updatemanager/release-upgrades установить для переменной Prompt значение normal вместо lts.

Несмотря на то что в Debian хорошо проработана система управления пакетами, обновление версий этой системы — дело очень деликатное. Если после обновления все программы и серверные службы будут работать как надо, то это счастливое исключение, а не правило.

Буфер обмена пакетов

Если в вашей сети работают десятки компьютеров с Debian и Ubuntu и каждый обращается за обновлениями к внешнему репозиторию, то общий ежемесячный трафик достигает нескольких гигабайт. Даже если тарифы на пользование Интернетом безлимитные, обновления засоряют сеть и чрезмерно замедляют передачу данных по LAN. В данном случае кажется очевидным, что не помешает организовать центральный буфер обмена (прокси), из которого все компьютеры будут брать пакеты для обновления. Для решения этой задачи существует большое количество программ, в частности apt-cacher, apt-cacher-ng, squid-deb-proxy, apt-proxy (уже не поддерживается) и approx. В качестве примера я расскажу о программе apt-cacher.

Серверная конфигурация

На кэш-сервере (то есть на компьютере, управляющем буфером обмена) необходимо установить пакет apt-cacher. (Из многочисленных руководств по apt-cacher, имеющихся в Интернете, можно сделать вывод, что вам также потребуется установить Apache. Это неверно — apt-cacher работает сам! Взаимодействие с Apache оправданно только в тех случаях, когда обмен информацией с apt-cacher должен производиться через HTTP-порт 80.)

root# apt-get install apt-cacher

Чтобы в дальнейшем пакет apt-cacher запускался автоматически как демон, внесите небольшие изменения в файл /etc/default/apt-cacher:

# Файл /etc/default/apt-cacher
AUTOSTART=1
...

Остальные параметры конфигурации содержатся в файле /etc/apt-cacher/apt-cacher.conf. Большинство установок можно оставить как есть, тогда APT-прокси будет доступен всем компьютерам через порт 3142. Файлы пакетов будут сохраняться в каталоге /var/cache/apt-cacher. По соображениям безопасности рекомендуется внести в конфигурационный файл и следующие изменения:

# Файл /etc/apt-cacher/apt-cacher.conf
...
daemon_addr=192.168.0.1
allowed_hosts=192.168.0.0/24
...

Демон связывается с определенным адресом (в данном случае 192.168.0.1, этот показатель важен для компьютеров с несколькими интерфейсами) и позволяет пользоваться прокси только клиентам, относящимся к адресному пространству 192.168.0.*. После внесения в конфигурацию таких изменений мы в первый раз запускаем apt-cacher:

root# service apt-cacher start

Пакет apt-cacher заносит все случаи доступа, а также возможные ошибки в файлы регистрации, находящиеся в каталоге /var/log/apt-cacher.

Импорт имеющихся пакетов

Как правило, в каталоге /var/cache/apt/archive на сервере уже имеется множество пакетов, загружаемых локальной системой управления пакетами для установки либо обновления. Вы можете импортировать эти пакеты в кэш apt-cacher. Это целесообразно делать в тех случаях, когда ожидается, что данные пакеты потребуются другим компьютерам, работающим в локальной сети:

root# service apt-cacher start

Пакет apt-cacher заносит все случаи доступа, а также возможные ошибки в файлы регистрации, находящиеся в каталоге /var/log/apt-cacher.

Клиентская конфигурация

На клиентской машине необходимо включить браузер и убедиться, что apt-cacher доступен через HTTP. Для этого укажите следующие адреса (конечно же, при этом необходимо изменить мой apt-cacher на хост-имя вашего компьютера или прокси сервера):

http://mein-apt-cacher:3142;
http://mein-apt-cacher:3142/report.

На первой странице обобщается конфигурация, а на второй сообщается информация об эффективности прокси, которая тем выше, чем дольше работает прокси и чем больше клиентов им пользуется.

Когда apt-cacher уже будет работать, вам лишь останется внести еще одно маленькое изменение в конфигурацию APT, чтобы прокси-сервером могла пользоваться и команда apt-get. Для этого потребуется создать следующий новый файл и изменить mein-apt-cacher на хост-имя компьютера либо адрес прокси-сервера:

// Файл /apt/apt.conf.d/01proxy
Acquire::http::Proxy "http://mein-apt-cacher:3142/";

Теперь все команды APT будут пользоваться новым прокси. Файлы, которых на нем еще нет, разумеется, нужно, как и раньше, скачивать из Интернета. Но если другой компьютер в сети также решит обновиться или установить пакет, который был незадолго до этого инсталлирован на ином компьютере, необходимые пакеты уже будут в распоряжении (не забудьте закомментировать первую строку, поставив символы //, — возможно, вы захотите поработать с ноутбуком в дороге и вам при этом понадобится установить обновления и пакеты, не имея доступа к прокси-серверу)!

Synaptic

Для APT существует множество графических пользовательских интерфейсов, и лучшая из таких программ на настоящий момент — Synaptic (рис.). Эта программа рассчитана, скорее, на опытных пользователей. В любом случае по умолчанию Synaptiс не устанавливается ни в Ubuntu, ни в Debian 7. Canonical постепенно продвигает Ubuntu Software Center, а Debian в версии 7 и выше переходит на использование PackageKit.

Окно программы Synaptic

Поиск пакетов. Synaptic обладает сразу двумя поисковыми функциями: быстрым поиском по названиям и описаниям пакетов и обычным поиском, учитывающим другие критерии. Обе поисковые функции можно комбинировать друг с другом: тогда быстрый поиск будет производиться по результатам обычного поиска. Однако часто такая связь не нужна: удалите поисковый запрос в поле для быстрого поиска либо щелкните в столбце Поиск результатов на записи Все, чтобы вернуться к обычной функции поиска.

Установка. Если хотите установить определенный пакет, перейдите к инсталляции двойным щелчком кнопкой мыши. Если пакет зависит от другого пакета, то появляется диалоговое окно, где перечислены пакеты, которые также необходимо установить. Сама установка начинается после нажатия кнопки Принять , после чего вы должны одобрить все планируемые действия.

Если сначала нажать кнопку Настроить фильтр, а затем выбрать пункт Сохранить изменения в открывшемся меню, то программа выведет список всех пакетов, подготовленных для установки. Вы всегда можете отследить процесс, выполнив ко-манду Файл>История.

Управление репозиториями. Управлять репозиториями можно в диалоговом окне Настройки>Репозитории. Здесь отображаются все известные репозитории. Установив флажки напротив определенных пакетов, вы можете быстро активизировать или деактивировать нужные вам пакеты. С помощью EDIT можно изменять свойства имеющихся репозиториев, а с использованием ADD — добавлять новые репозитории.

Блокировка. Одновременно может работать лишь одна программа управления пакетами. Если вы попытаетесь запустить сразу две такие программы, то система выдаст предупреждение: unable to get exclusive lock (невозможно обеспечить исключающую блокировку). Это означает, что программа не может обратиться к внутренним системным файлам, отвечающим за управление пакетами. Необходимо завершить обе конфликтующие программы.

Иногда предупреждение о блокировке выводится и тогда, когда на первый взгляд работает только одна программа управления пакетами. Причина обычно заключается в том, что при завершении предыдущей программы не был правильно удален lock-файл. При необходимости просто удалите его сами:

root# rm /var/lib/dpkg/lock

Дефектные пакеты. Иногда при инсталляции или деинсталляции пакета возникает проблема и процесс не удается правильно завершить. В результате пакет помечается как дефектный. Synaptic и другие инструменты для управления пакетами отказываются работать, пока эта проблема не будет решена.

Для устранения проблемы нажмите в Synaptic в списке страниц кнопку Специальные фильтры, а затем выберите пункт Дефектный. Тогда Synaptic отобразит список всех дефектных пакетов. Отметьте все пакеты, нажав сочетание Ctrl+A, щелкните в списке правой кнопкой мыши и выберите пункт контекстного меню Запретить для новой установки. Далее проведите установку заново, нажав кнопку Принять. Если опять возникнут проблемы, отметьте дефектные пакеты и удалите их.

Report Page