a-mavrin.ru

Что такое кэш apt. Список установленных пакетов Debian

Для автоматизации процесса установки, удаления и обновления пакетов программ в ряде дистрибутивов Linux применяется Усовершенствованная система управления программными пакетами APT (Advanced Packaging Tool ). Автоматизация достигается созданием одного или нескольких внешних репозитариев, в которых хранятся пакеты программ и относительно которых производится сверка пакетов, установленных в системе. Репозитории могут содержать как официальную версию дистрибутива, обновляемую его разработчиками по мере выхода новых версий программ, так и локальные наработки.

Таким образом, в распоряжении APT находятся две базы данных: одна описывает установленные в системе пакеты, вторая - внешний репозитарий. APT отслеживает целостность установленной системы и, в случае обнаружения противоречий в зависимостях пакетов, руководствуется сведениями о внешнем репозитарии для разрешения конфликтов и поиска корректного пути их устранения.

APT изначально проектировался как не зависящий от конкретного метода работы с установленными в системе пакетами, что позволило разработчикам из бразильской компании Connectiva реализовать в нём поддержку менеджера пакетов RPM . Таким образом, пользователи основанных на RPM дистрибутивов (Fedora Core , Mandriva , ASP Linux , ALT Linux) получили возможность использовать этот мощный инструмент.

Графический интерфейс для APT

Графической оболочкой для APT является synaptic , основанный на мощной системе фильтрации пакетов. Это значительно упрощает интерфейс и вместе с тем предоставляет значительную гибкость при навигации по очень длинным спискам пакетов.

Использование APT

Система APT состоит из нескольких утилит. Главной и наиболее часто используемой является утилита управления пакетами apt-get , которая автоматически определяет зависимости между пакетами и строго следит за их соблюдением при выполнении любой из следующих операций: установка, удаление или обновление пакетов.

apt-get позволяет устанавливать в систему пакеты, требующие для своей работы другие, пока ещё не установленные. В этом случае он определяет, какие пакеты необходимо установить, и устанавливает их, пользуясь всеми доступными репозитариями. Для того, чтобы apt-get мог использовать тот или иной репозитарий, информацию о нем необходимо поместить в файл /etc/apt/sources.list и выполнить команду

~# apt-get update

Эту команду необходимо также выполнять каждый раз, когда вы собираетесь работать с репозитарием после длительного перерыва, так как при поиске пакетов APT должен руководствоваться базой данных, отражающей актуальное состояние репозитария. Такая база данных создаётся заново каждый раз, когда в репозитарии происходит изменение: добавление, удаление или переименование пакета. Для ускорения работы apt-get хранит локальную копию базы данных, которая через некоторое время может уже не соответствовать реальному состоянию репозитария.

В качестве источника пакетов можно использовать и компакт-диски дистрибутива, поскольку на каждом диске присутствует вся необходимая для APT информация о содержащихся на нём пакетах. Для этого необходимо использовать утилиту apt-cdrom с единственным параметром add . Операцию следует повторить для CD из набора. После этого в /etc/apt/sources.list появится запись о подключённом диске.

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

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

При отсутствии точного названия пакета для его поиска можно воспользоваться утилитой apt-cache , позволяющей искать не только по имени пакета, но и по его описанию:

~$ apt-cache search wine wine-utils - Эмулятор Wine (Дополнительные программы) libwine-arts - arts support library for wine libwine-twain - twain support library for wine libwine-devel - Headers for libwine-devel libwine - Main library for wine wine - Среда для запуска программ Windows (сборка от Etersoft)

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

~$ apt-cache show wine-utils Package: wine-utils Section: Emulators Installed Size: 8700 Maintainer: Vitaly Lipatov Version: 20040716-alt1 Pre-Depends: rpmlib(PayloadFilesHavePrefix) (<= 4.0-1), rpmlib(CompressedFileNames) (<= 3.0.4-1) Depends: wine (= 20040716-alt1), libc.so.6, libc.so.6(GLIBC_2.0), libc.so.6(GLIBC_2.1), libc.so.6(GLIBC_2.1.3), libc.so.6(GLIBC_2.2), libc.so.6(GLIBC_2.3), libm.so.6, libm.so.6(GLIBC_2.0), libwine.so.1, libwine.so.1(WINE_1.0), perl-base, sh Provides: wine-utils (= 20040716-alt1) Architecture: i586 Size: 1575076 MD5Sum: Filename: wine-utils-20040716-alt1.i586.rpm Description: Эмулятор Wine (Дополнительные программы) This is an ALPHA release of Wine, the MS-Windows emulator. This is still a developers release and many applications may still not work. This package consists many of the utilities provided by wine, both for compiling source using winelib and for running wine. This package is not strictly necessary. Wine is often updated.

Получение зависимостей пакета:

~$ apt-cache depends wine-utils wine-utils-20040716-alt1 Требует: wine = 20040716-alt1 Требует: glibc-core-6:2.3.3.200406160000-alt1 Требует: glibc-core-6:2.3.3.200406160000-alt1 Требует: glibc-core-6:2.3.3.200406160000-alt1 Требует: glibc-core-6:2.3.3.200406160000-alt1 Требует: glibc-core-6:2.3.3.200406160000-alt1 Требует: glibc-core-6:2.3.3.200406160000-alt1 Требует: glibc-core-6:2.3.3.200406160000-alt1 Требует: libwine-20060610-alt0.M24.1 Требует: libwine-20060610-alt0.M24.1 Требует: perl-base Требует: sh

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

Установка или обновление пакета

Установка пакета с помощью APT выполняется командой:

~# apt-get install имя_пакета

Если результате операций с пакетами без использования APT целостность системы нарушится, то apt-get откажется выполнять операции установки, удаления или обновления. В такой ситуации следует повторить операцию, задав опцию -f , заставляющую apt-get исправить нарушенные зависимости (если это возможно), следя при этом за сообщениями, выдаваемыми apt-get , анализируя их и чётко следуя рекомендациям программы.

Переустановка пакета:

~# apt-get install имя_пакета --reinstall

Полезный режим позволяюший исправить ошибки администратора и сборщика пакета.

Если вы не уверены в том, что в результате выполнения операции система останется работоспособной, запустите apt-get с опцией -s .

В этом случае будет показан отчёт о выполнении операции обновления, но само обновление произведено не будет:

~# apt-get install -s имя_пакета

Удаление установленного пакета

Для удаления пакета используется команда

~# apt-get remove имя_пакета

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

Обновление всех установленных пакетов

Для обновления всех установленных пакетов используется команда

~# apt-get upgrade

Она позволяет обновить только те пакеты, для которых в репозитариях, перечисленных в /etc/apt/sources.list , имеются новые версии; при этом из системы не будут удалены никакие другие пакеты.

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

Изменения в именовании пакетов или изменения их зависимостей командой apt-get upgrade не обрабатываются. Такие ситуации разрешаются в режиме обновления в масштабе дистрибутива:

~# apt-get dist-upgrade

В случае обновления всего дистрибутива APT проведёт сравнение системы с репозитарием и удалит устаревшие пакеты, установит новые версии присутствующих в системе пакетов, а также отследит ситуации с переименованиями пакетов или изменения зависимостей между старыми и новыми версиями программ. Всё, что потребуется поставить (или удалить) дополнительно к уже имеющемуся в системе, будет указано в отчёте apt-get , которым APT предварит само обновление.

Настройка APT

APT позволяет взаимодействовать с репозитарием с помощью различных протоколов доступа. Наиболее популярными из них являются HTTP и FTP .

Работа с локальным репозитарием и удаленными подробно описана в разделе

Advanced Packaging Tool – набор утилит для управления программными пакетами в операционных системах основанных на Debian. APT предоставляет дружественную надстройку над DPKG и позволяет:

    Устанавливать, удалять и обновлять пакеты

    Решать зависимости

    Искать пакеты по заданным критериям

    Просматривать подробную информацию о пакете

    Манипулировать ключами от репозиториев

APT является одной из базовых программ и включена в состав Ubuntu.

Настройки

Все файлы настроек APT хранятся в директории /etc/apt .

apt.conf

/etc/apt/apt.conf – основной файл настроек, используемый всеми инструментами из состава APT. Описание всех возможных настроек и опций можно прочитать в документации к нему:

man apt.conf

apt.conf.d

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

auth.conf

sources.list

sources.list.d

Директория с файлами репозиторий, по назначению аналогичных sources.list. Каждый репозиторий описывается в отдельном файле.

Использование

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

Начиная с версии Ubuntu 16.04 доступна новая утилита apt , которая содержит наиболее часто используемые команды из apt-get и apt-cache . Утилита apt предназначена для пользователей, в то время как apt-get можно рассматривать как как инструмент более низкого уровня.

apt-get

apt-get это утилита управления пакетами. apt-get требует прав суперпользователя для своей работы.

Основные команды:

    Update - Обновить информацию о пакетах, содержащихся в репозиториях.

    Install foo - Установить пакет foo. Скачивание, установка и настройка происходят автоматически. Если для настройки пакета foo нужны дополнительные сведения, будет показан запрос к пользователю.

    Upgrade - Обновление пакетов, для которых в репозитории доступны новые версии.

    Dist-upgrade - Обновление пакетов, требующих разрешения зависимостей (установка дополнительных или удаление конфликтующих пакетов).

    Remove foo - Удаление пакета foo из системы.

    Purge foo - Удаление пакета foo и очистка системы от его конфигурационных файлов. Файлы настроек в домашних каталогах пользователей удалены не будут .

    Autoremove - Удаление пакета, который более не нужен в системе. Используется для очистки системы от ненужных пакетов. Факт, что пакет более не нужен, определяется следующим образом: если пакет был установлен не сам по себе, а как зависимость для другого пакета, который впоследствии был удалён, значит этот пакет тоже уже не нужен в системе.

    Source foo - Получение исходных текстов пакета foo.

Утилита apt-get – производительная свободная консольная программа, используемая и работающая с библиотекой APT (Advanced Packaging Tool) для выполнения установки новых пакетов с ПО, удаления существующих, обновления установленых, а также для обновления всей операционной системы.

Консольная утилита apt-cache используется для поиска в кеше программных пакетов APT. Говоря простыми словами, этот инструмент, используется для поиска пакетов, сбора информации о пакетах и поиска пакетов, доступных для установки в операционных системах, основанных на Debian или Ubuntu.

Как можно получить список всех доступных пакетов?

Чтобы увидеть все доступные пакеты, выполните следующую команду:

Apt-cache pkgnames

Как можно найти имя пакета и его описание.

Чтобы найти название пакета и его описание перед установкой, используйте флаг «search». Использование “search” c apt-cache отобразит список подходящих пакетов с кратким описанием. Например, вы хотите найти описание пакета vsftpd: чтобы сделать это, команда должна быть вот такой:

Apt-cache search vsftpd

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

Apt-cache pkgnames vsftpd

Как я могу просмотреть информацию о пакете?

Например, если вы хотите ознакомиться с информацией о пакете, с его кратким описанием, отображающим номер версии, контрольные суммы, размер, размер после установки, категории и так далее, вы можете использовать подкоманду «show», как показано ниже:

Apt-cache show netcat

Как можно проверить зависимости какого-либо пакета?

Чтобы проверить зависимости конкретного пакета, вы можете использовать подкоманду showpkg , чтобы узнать, установлены эти зависимости или нет. Например, используйте команду showpkg вместе с названием пакета.

Apt-cache showpkg vsftpd

Как можно просмотреть статистику кэша?

Подкоманда stats отобразит полную статистику о кеше, например, полное число пакетов, найденное в кеше. Используйте такую команду:

Apt-cache stats

Как обновить список пакетов в системе?

Команда update используется для синхронизации и обновления индексных файлов пакетов. Синхронизация происходит с источниками, указанными в файле /etc/apt/sources.list . Эту команду можно использовать, например, чтобы не упускать важные обновления пакетов.

Sudo apt-get update

Как обновить пакеты в системе?

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

Sudo apt-get upgrade

Но если вы хотите обновиться вне зависимости от требований пакетов, используйте подкоманду dist-upgrade:

Sudo apt-get dist-upgrade

Как я могу установить или обновить какой-либо конкретный пакет?

Подкоманда install используется для установки или обновления какого-либо пакета.

Sudo apt-get install netcat

Как я могу установить несколько пакетов сразу?

Вы можете ввести названия нескольих пакетов, чтобы установить их одновременно. Например, чтобы установить пакеты nethogs и goaccess , вы можете выполнить следующую команду:

Sudo apt-get install nethogs goaccess

Как установить несколько пакетов по «маске» названия

С помощью регулярных вырежний вы можете добавлять несколько пакетов с помощью специальных символов. Например, можно использовать звездочку, чтобы установить все пакеты, которые содержат строку «name» в названии:

Sudo apt-get install *name*

Как установить пакеты без обновления.

Использование флага –no-upgrade предотвратит обновление уже установленных пакетов.

Sudo apt-get install packageName --no-upgrade

Как только обновить определенные пакеты?

Флаг –only-upgrade не установит новые пакеты, а только обновит существующие.

Sudo apt-get install имя_пакета --only-upgrade

Как я могу установить определенную версию пакета?

Представим, что вам необходимо установить специфичную версию пакета, просто используйте знак равно вместе с именем пакета и припишите желаемую версию.

Sudo apt-get install vsftpd=2.3.5-3ubuntu1

Как удалить пакеты без удаления настроек?

Чтобы удалить программные пакеты без удаления их конфигурационных файлов (для дальнейшего их использования), используйте команду remove как показано.

Sudo apt-get remove vsftpd

Как полностью удалить пакеты?

Чтобы удалить пакет вместе с его файлами настроек, используете подкоманду purge , как показано ниже.

Sudo apt-get purge vsftpd

Или вы можете объединить обе команды, вот так:

Sudo apt-get remove --purge vsftpd

Как можно очистить место на диске?

Команда clean используется для освобождения дискового пространствва за счет удаления полученных.deb-файлов пакетов в вашем локальном репозитории.

Sudo apt-get clean

Как только загрузить исходный код пакета?

Чтобы только загрузить исходный код пакета, вы можете использовать опцию –download-only source с именем пакета, например:

Sudo apt-get --download-only source vsftpd

Как можно загрузить и распаковать пакет?

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

Sudo apt-get source vsftpd

Как можно загрузить, распаковать и скомпилировать исходный код пакета?

Вы также можете загрузить, распаковать и скомпилировать исходный код пакета, используя опцию ‘–compile‘, как показано ниже:

Sudo apt-get --compile source goaccess

Как загрузить пакет без установки

Используя опцию «download», вы можете загрузить любой пакет, не устанавливая его. Например, следующая команда только загрузит пакет nethogs в текущую рабочую директорию.

Sudo apt-get download nethogs

Как можно просмотреть лог изменений (changelog) пакета?

Флаг changelog загружает лог изменений пакета и отображает версию пакета, если он установлен.

Sudo apt-get changelog vsftpd

Как можно исправить сломанные зависимости?

Команда «check» – инструмент для диагностики, он используется для обновления кеша пакетов и проверки на сломанные зависимости.

Sudo apt-get check

Как можно найти и собрать зависимости?

Команда build-dep ищет и устанавливает собранные зависимости нужного пакета. Если пакет отсутствует в локальном репозитории, вы получите ошибку.

Sudo apt-get build-dep netcat

Как можно автоматически очистить кеш Apt-Get?

Команда autoclean удаляет все.deb-файлы из /var/cache/apt/archives для освобождения свободного места на жестком диске.

Sudo apt-get autoclean

Как можно автоматически удалить ненужные пакеты?

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

Sudo apt-get autoremove vsftpd

Информация любезно предоставлена сайтом . Спасибо.

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

Краткая справка Debian администратора

Основное и общеизвестное
Получение информации о новых/обновлённых пакетах
sudo aptitude update
Обновление
sudo aptitude safe-upgrade
Поиск пакета по именам пакетов
aptitude search key_word
Поиск пакета по точному названию
aptitude search "^name$"
Поиск по описанию
aptitude search "?description("key_word")"
Информация о пакете
aptitude show package_name
Установка
sudo aptitude install package_name
Удаление
sudo aptitude remove package_name
Полное удаление (вместе с конфигами)
sudo aptitude purge package_name
Очистить кэш загруженных пакетов (освободить место)
aptitude autoclean # удалятся только пакеты неактуальных версий aptitude clean # очистится весь кэш
Установка отдельно скачанного/созданного пакета (для создания пакета из сторонних исходников нужно использовать утилиту checkinstall с флагом -D)
sudo dpkg -i /path/to/package.deb
Для получения доп информации
man aptitude sudo aptitude install aptitude-doc-en
и смотрим документацию (/usr/share/doc/aptitude/html/en/index.html), кому быструю справку по поисковым шаблонам, тому сюда - /usr/share/doc/aptitude/html/en/ch02s04.html. Если лень ставить доку, то в сети она есть .
Вводная на Debian Wiki: wiki.debian.org/Aptitude
А теперь то что не очевидно или требует полного прочтения документации
1. Как после update посмотреть какие пакеты будут обновлены?
aptitude search ?upgradable
также можно юзать (если поставить)
sudo daptup
но после его установки точно также будет себя вести и обычный update

2. Как узнать что изменилось в пакетах которые будут обновлены?
Можно пробовать
sudo aptitude changelog package_name
для каждого пакета.
Но лучше поставить apt-listchanges, тогда перед любой установкой обновлений будет показан список изменений, по умолчанию настройки не очень удобные, поэтому лучше перенастроить под себя, например, выбрать формат вывода (пока использую текст, при больших обновлениях наверно pager лучше), не слать писем, спрашивать подтверждения, выводить всю информацию. Для этого нужно запустить
sudo dpkg-reconfigure apt-listchanges
3. Что делать если обновление что-то поломало и нужно откатиться?
Отката нет, можно попробовать найти предыдущую версию пакета
sudo aptitude version package_name
и установить её
sudo aptitude install package_name=version
4. Как найти все пакеты установленные вручную?
есть вариант команды (aptitude search "~i!~M"), но к сожалению он не даёт желаемого результата, так что вопрос остаётся открытым, есть куча способов основанных на анализе логов
/var/log/aptitude (+ ротированные куски) /var/log/installer/initial-status.gz /var/log/dpkg.log (+ ротированные куски)
но простого и готового решения нет, да информация теоретически может быть потеряна при ротациях, нужно конфигурить

5. Как посмотреть список файлов в пакете?
если пакет установлен
dpkg -L package_name
для любых пакетов поставить apt-file и
apt-file list package_name
6. Как посмотреть какому пакету принадлежит файл?
dpkg -S file_name
7. Как удалить все пакеты, где есть key в названии пакета?
sudo aptitude purge ~ikey
8. Как удалить оставшиеся конфиги от удалённых пакетов?
sudo aptitude purge ~c
9. Как найти пакет пакет, в котором содержится файл lib.so:
apt-file search lib.so
10. Как сконвертировать rpm пакет в deb?
alien --to-deb /path/to/file.rpm
11. Как найти список установленных ядер?
dpkg --list linux-* | grep ii
12. Как установить пакет из testing или experimental?
На эту тему нужно писать отдельно (например так), но если кратко, то команды для этого есть
sudo aptitude -t testing package_name
или
sudo aptitude package_name/testing
13. Как удалить метапакет, но оставить одну из зависимостей?
придётся почитать документацию про ключ unmarkauto или глянуть сюда .

14. Как узнать что попало в файловую систему мимо системы управления пакетами?
Есть утилита cruft, хотя вопрос интерпретации результатов (файла report) пока открыт
sudo cruft -d / -r report --ignore /home --ignore /var --ignore /tmp
15. Какие есть дополнительные репозитории?
Debian - wiki.debian.org/UnofficialRepositories
Ubuntu - множество всяких

В связи с тем что некоторые товарищи не понимают что такое apt и dpkg. Решил создать еще одну запись об этих утилитах.

APT и все, все, все. Изучаем возможности менеджера пакетов APT и сопутствующих программ

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

Продвинутая система управления пакетами

Сама по себе APT (Advanced Packaging Tool) не является системой управления пакетами в прямом смысле этого слова. Все действия по распаковке, регистрации в системе и видению базы пакетов выполняют утилиты пакета dpkg, в то время как утилиты APT представляют собой обертку, с помощью которой осуществляется поиск пакетов, сверка контрольных сумм, выкачивание из репозитория, разрешение зависимостей, а также ряд других действий.

APT включает в себя следующий набор утилит:

Утилиты пакета apt

apt-cache - манипулирует кэшем доступных пакетов, обычно используется
для поиска пакета и/или получения информации о нем

apt-cdrom - позволяет добавить CD/DVD-диск в качестве источника пакетов (репозитория)

apt-config - читает значения опций, заданных в конфигурационном
файле /etc/apt/apt.conf, используется другими APT-утилитами

apt-extracttemplates - извлекает конфигурационные файлы DebConf
из пакетов, используется другими APT-утилитами

apt-ftparchive - создает индексные файлы

apt-get - устанавливает, удаляет, обновляет список пакетов
и сами пакеты, центральная APT-утилита

apt-key - управляет ключами аутентификации, используемыми для проверки
подлинности источников пакетов

apt-secure - проверяет подлинности цифровой подписи пакетов apt, входящих
в состав дистрибутива и репозиториев

apt-sortpkgs - сортирует индексные файлы

Утилиты опираются на следующие файлы конфигурации:

Конфигурационные файлы APT

/etc/apt/sources.list - список источников пакетов (репозиториев)
/etc/apt/apt.conf - основной файл конфигурации APT
/etc/apt/preferences - файл предпочтений, управляет тем, какая версия пакета будет
установлена в случае наличия в репозитории сразу нескольких версий

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

Основные команды APT

apt-cache search маска - поиск пакета
apt-cache show пакет - просмотр информации о пакете
apt-get install пакет - установка пакета
apt-get remove пакет - удаление пакета
apt-get update - обновление кэша доступных пакетов
apt-get upgrade - обновление всех пакетов

Последние две команды обычно выполняются одна за другой, в результате чего переустанавливаются все пакеты, для которых в репозитории доступны новые версии. Если же необходимо обновить только указанный пакет, то после «apt-get update» следует выполнить команду «apt-get install пакет».

Дистрибутив Ubuntu делает процесс "общения" с APT-утилитами еще более простым и сводит его к кликанью по галочкам графического интерфейса. В нем есть собственный, предельно простой, менеджер пакетов (так и называется "Package Manager"), запускающийся по cron"у менеджер обновлений Update Manager, графический установщик вручную загруженных deb-пакетов GDebi и более мощная графическая надстройка над APT-утилитами Synaptic.

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

Сторонние источники пакетов

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

Чтобы научить APT работать со сторонними репозиториями, достаточно выполнить четыре простых действия:

Поле uri - это адрес репозитория, который в большинстве случаев является HTTP-адресом, но может быть и ссылкой на локальный репозиторий (file:/root/repository), адресом репозитория на FTP или SSH-сервере. В поле "дистрибутив" указывается имя дистрибутива, для которого собраны пакеты. Для Debian имя может быть одним из stable, oldstable, unstable, testing, в то время как в случае Ubuntu следует указывать только конкретное наименование дистрибутива (например, jaunty), а также различные обозначения на его основе (например, jaunty-updates, jaunty-backports, jaunty-security). Надо сказать, что APT совсем не против того, чтобы смешивать пакеты различных дистрибутивов на одной системе, но за последствия в этом случае будешь отвечать только ты. Компонент обычно носит имя main, contrib или non-free для Debian и main, universe, multiverse, partner и restricted для Ubuntu. Все это имена различных репозиториев пакетов, которые обособлены только для того, чтобы разделить пакеты на основе каких-либо критериев. Например main - это пакеты, собираемые группой разработчиков Ubuntu/Debian, на качество ПО, содержащегося в них, есть определенные гарантии, включая своевременные обновления и багфиксы, в то время как contrib и universe - это стороннее ПО, которое ты устанавливаешь на свой страх и риск.

2. Добавить в apt keyring публичный ключ репозитория, используемый для удостоверения его подлинности и надежности. Ключ можно получить любыми способами и добавить, выполнив команду «apt-key add ключ», но такой способ редко практикуется из-за неудобства. В подавляющем большинстве случаев ты будешь иметь дело с командой

sudo apt-key adv --keyserver сервер-сертификации --recv-keys ID-ключа
которая запрашивает ключ напрямую у сервера сертификации (для Ubuntu это keyserver.ubuntu.com). Именно так большинство сторонних разработчиков распространяют свое ПО для дистрибутивов Debian/Ubuntu (при этом остальные просто выкладывают пакеты и их контрольные суммы). Например, зайдя на страничку интересующего тебя проекта на хостинге launchpad.net и нажав на ссылку "Technical details about this PPA", ты увидишь строку, которую необходимо добавить в /etc/apt/sources.list, в "Signing key:" будет указан ID ключа.

3. Обновить кэш доступных пакетов:

sudo apt-get update
4. Установить пакет, используя команду «apt-get install пакет».

Многие девелоперы помещают ссылку на репозиторий и ID его ключа прямо в deb-пакет, поэтому после скачивания пакета, установки и выполнения команды «apt-get update && apt-get upgrade» пакеты будут обновлены вместе с их собратьями, перечисленными в sources.list. В частности, так распространяются браузеры opera и альфа-релиз google chrome.

Репозиторий, располагающийся на компакт-диске, добавить в sources.list намного проще. Для этого есть специальная команда apt-cdrom. Ты просто вставляешь CD в привод и выполняешь команду:

sudo apt-cdrom add

Хитрости и нестандартные ситуации

APT есть APT, она удобна и проста, но иногда не обойтись без ухищрений, о самых полезных из которых ты узнаешь из этого раздела.

1. По умолчанию команда «apt-get remove» удаляет пакет полностью только в том случае, если ни один из его файлов не был изменен после установки, иначе измененные файлы остаются нетронутыми. Естественно, конфигурационные файлы меняются почти всегда, поэтому apt-get оставляет после себя кучу мусора, которую приходится убирать руками. Команда «apt-get purge», выполненная вместо «apt-get remove», решает эту проблему.

2. Любители ковыряния в системе, а также системные администраторы, серверы которых подверглись взлому, скорее всего захотят вернуть пакеты к начальному состоянию, в котором они находились до проведения манипуляций. Поможет в этом команда:

sudo apt-get install --reinstall пакет
3. Более низкоуровневые утилиты управления deb-пакетами (такие, как dselect и dpkg) ведут специальный список состояний пакетов, который может использоваться для управления тем, какие пакеты должны быть установлены или удалены в пакетном режиме (именно так работает связка dselect + dpkg). Его же можно использовать для многих других целей, например, для переноса конфигурации системы на другую машину. Выполни следующую команду:

dpkg --get-selections > file
Перенеси файл на другую машину и выполни на ней две команды:

cat file > dpkg --set-selections
apt-get dselect-upgrade

В систему будут добавлены все пакеты системы-источника. Чтобы файл состояний пакетов также содержал информацию о том, какие пакеты следует удалить из системы, добавь символ "\*" после аргумента "--get-selections". Список состояний не содержит версии пакетов, это можно использовать после установки более новой версии дистрибутива для приведения его к требуемому состоянию.

4. Ты вручную наложил заплатку на файл одного из системных пакетов и не хочешь, чтобы этот пакет был обновлен (с уничтожением всех твоих изменений) после вызова «apt-get upgrade». В этом случае тебе на помощь вновь придет список состояний. Пакет может быть "заморожен", в результате чего apt-get откажется его обновлять и пропустит:

echo -e "coreutils hold" | dpkg --set-selections
Принудительно обновить пакет можно с помощью указания флага "-u" при вызове apt-get.

5. Как и любая система, обладающая сетевым функционалом, APT позволяет использовать прокси для доступа к репозиториям. Чтобы задействовать эту возможность, пропиши в файл /etc/apt/apt.conf следующую строку:

Acquire::http::Proxy "http://xxx.xxx.xx:yyyy"

Где xxx.xxx.xx - имя твоего прокси, yyyy - порт.

6. Обычно APT-утилиты запрашивают самую новую версию пакета из всех, что находятся в его кэше, поэтому если ты добавил в sources.list различные экспериментальные и unstable-репозитории, то после обновления получишь дистрибутив, состоящий исключительно из экспериментальных или unstable-пакетов, и кучу проблем, вызванных таким положением дел. Однако ситуация легко разруливается с помощью помещения в /etc/apt/apt.conf следующей строки:

APT::Default-Release "релиз";

Где релиз - это oldstable, stable, unstable, testing или experimental для Debian или имя релиза для Ubuntu. Теперь, в случае необходимости установить пакет из указанного дистрибутива, просто пропиши его имя после аргумента "-t" при вызове apt-get:

sudo apt-get -t unstable install пакет
7. Все полученные apt-get deb-пакеты хранятся в каталоге /var/cache/apt/archives, а это значит, что в случае переустановки системы ты можешь скопировать содержимое каталога на другой диск/раздел, а после восстановить его и сэкономить время/трафик на установке пакетов. Кроме того, это по сути снапшот твоей установленной системы (той ее части, которую ты установил сам), который можно отнести к другу (вместе с описанным в третьем пункте списком состояний) или, при ненадобности, удалить для освобождения места.

8. Удаленный снапшот системы, описанный в предыдущем пункте, легко восстанавливается с помощью приведенной ниже конструкции:

sudo dpkg --get-selections | grep -v "deinstall" | \
awk "{print $1}" | xargs dpkg-repack

9. Кроме бинарных пакетов, репозитории Debian/Ubuntu содержат и пакеты с исходными текстами приложений, которые могут быть получены и собраны с использованием следующей команды:

sudo apt-get -b source имяпакета

Сторонние утилиты

Система APT прошла очень долгий путь развития, поэтому помимо официальных утилит, включенных в пакет apt, репозитории Debian и Ubuntu изобилуют массой сторонних утилит, которые могут быть использованы для выполнения некоторых нестандартных задач.
Наиболее полезная из них называется apt-file и необходима, как нетрудно догадаться из названия, для определения принадлежности того или иного файла определенному пакету. Устанавливаем:

sudo apt-get install apt-file
Просим apt-file создать кэш всех файлов, установленных в системе пакетов (по нему будет производиться поиск):

apt-file search /usr/bin/apt-get
apt: /usr/bin/apt-get

Запрашиваем список всех файлов пакета:

apt-file list apt

Простая утилита apt-show-versions покажет, какие пакеты можно обновить, с указанием версий и других данных. Запусти ее с флагом "-u", чтобы получить список только подлежащих обновлению пакетов (вместо списка всех пакетов).

Если ты установил большое количество различных пакетов и теперь хочешь избавиться от ненужного хлама, то в этом деле поможет утилита deborphan, которая производит поиск неиспользуемых пакетов и осиротевших зависимостей. Просто запусти deborphan без аргументов, и ты увидишь список пакетов, который тут же можно передать на вход команде «apt-get remove» или же просто выполнить такую команду:

sudo apt-get remove `deborphan`

По умолчанию deborphan обрабатывает только пакеты, содержащие библиотеки, но такое поведение можно изменить, добавив флаг "-a" к вызову команды:

Не стоит сразу бросаться удалять показанные утилитой пакеты, потому как даже самый мощный эвристический алгоритм не способен определить твои личные потребности. Так, мне программа показала пакеты google-chrome, inkscape и даже xorg.

Утилита apt-move позволит тебе создать локальный репозиторий. Установи программу, открой файл /etc/apt-move.conf, укажи в опции LOCALDIR путь к каталогу, в котором должен располагаться репозиторий, и запусти команду:

sudo apt-move update

В результате все выкачанные из Сети с помощью apt-get пакеты (каталог /var/cache/apt/archives) будут перемещены в указанный в конфиге каталог, для которого будет создан индексный файл. Это удобный способ создания внутрисетевого репозитория для тех случаев, когда массу одинаковых пакетов необходимо установить на множество машин.

Для создания локального репозитория также очень удобно применять сервер apt-proxy, позволяющий кэшировать скачиваемые из репозитория deb-пакеты на стороне сервера. Для этого apt-proxy устанавливается на выделенной машине (возможно шлюзе), а sources.list клиентов модифицируется так, чтобы в качестве поля uri всех репозиториев был указан адрес этой машины. Как результат, все запросы deb-пакетов перенаправляются к apt-proxy, который запрашивает пакет у головного репозитория и сохраняет его в своем кэше, а ответ на все последующие запросы этого пакета будет отдан из кэша.

Для начала устанавливаем apt-proxy на выделенной машине:

sudo apt-get install apt-proxy

Далее открываем файл /etc/apt-proxy/apt-proxy-v2.conf, переходим в секцию и заменяем значение опции address на IP-адрес машины, а также описываем используемые apt-proxy источники пакетов, например:

sudo vi /etc/apt-proxy/apt-proxy-v2.conf


backends = http://ru.archive.ubuntu.com/ubuntu/
min_refresh_delay = 1d


backends = http://security.ubuntu.com/ubuntu/
min_refresh_delay = 1d

Обычно этих двух адресов достаточно для покрытия всего спектра пакетов, предоставляемого разработчиками Ubuntu. Перезапускаем apt-proxy:

sudo invoke-rc.d apt-proxy restart

Чтобы перевести клиентов на использование apt-proxy, берем стандартный sources.list Ubuntu, заменяем все реальные поля uri на "http://IP-адрес-apt-proxy:9999/ubuntu/" и копируем этот файл на каждый клиент.

Существует и множество других, менее интересных утилит, работающих в связке с APT. Например, apt-dater позволяет производить обновление пакетов на большом количестве удаленных узлов, используя псевдографический интерфейс. Программа aptsh реализует командный интерфейс, подобный sh, поверх команд пакета apt, aptfs - виртуальная файловая система для управления APT. Утилита debdelta, позволяющая обновлять пакеты с помощью выкачивания из Сети их дельт, могла бы стать темой для отдельной статьи, если бы для нее существовал хотя бы один своевременно обновляемый репозиторий.

Aptitude

Утилита apt-get и ее родственники - не единственная из доступных реализация APT. Еще более мощная, удобная и универсальная альтернатива им зовется aptitude и представляет собой концентрированный в одном месте функционал apt-get, apt-cache и dselect.
Aptitude позволяет устанавливать/удалять, искать, обновлять и производить массу других действий с пакетами, используя два типа интерфейса: командный режим, сходный с apt-get и apt-cache, и режим с псевдографическим интерфейсом, внешне напоминающий интерфейс dselect, но гораздо более удобный и функциональный.

В режиме командной строки aptitude можно использовать для выполнения таких действий, как:

aptitude install - установка пакета

aptitude remove - удаление пакета и осиротевших зависимостей

aptitude purge - удаление пакета, осиротевших зависимостей
и оставшихся после них конфигурационных файлов

aptitude search - поиск пакета в кэше (списке доступных пакетов)

aptitude update - обновление кэша

aptitude safe-upgrade - обновление пакетов

aptitude clean - удаление ранее скачанных пакетов

aptitude full-upgrade - обновление пакетов,
даже если это действие требует удаления каких-либо пакетов

aptitude show - информация о пакете

aptitude autoclean - удаление устаревших пакетов

aptitude hold - установка запрета на обновление пакета

Интерактивный режим, доступный при запуске aptitude без аргументов, позволяет выполнить все те же действия, используя псевдографический интерфейс, построенный на базе библиотеки ncurses. Он работает в пакетном режиме (выбрал пакеты - запустил процесс установки), поэтому будет удобен в тех случаях, когда требуется установить большое количество пакетов.

Пасхальные яйца

Разработчики утилит APT оказались ребятами с несколько извращенным чувством юмора. Чего только стоит результат следующей команды:

sudo apt-get moo
Еще более дико выглядит то, что встроили в свою программу создатели aptitude. Попробуй:

sudo aptitude moo
Этакое пасхальное яйцо без пасхального яйца. Ну ладно:

sudo aptitude -v moo
sudo aptitude -vv moo
sudo aptitude -vvv moo
sudo aptitude -vvvv moo
sudo aptitude -vvvvv moo

И финальный аккорд:

sudo aptitude -vvvvvv moo

Полезные команды apt-cache

apt-cache show пакет - детальная информация о пакете
apt-cache showpkg пакет - общая информация о пакете
apt-cache depends пакет - список зависимостей пакета
apt-cache rdepends пакет - список обратных зависимостей (кому нужен указанный пакет)

Словарь APT

Пакет - программа, библиотека, исходники или любые другие файлы, а также их метаданные, упакованные в особым образом сформированный архив.

Репозиторий - место хранения deb-пакетов.

Кэш доступных пакетов (или просто кэш) - файл, в котором кэшируется информация обо всех пакетах, доступных из источников, перечисленных в /etc/apt/sources.list. Кэш обновляется во время каждого вызова команды «apt-get update».

Индексный файл - головной файл репозитория, содержащий название, версию, размер, краткое и полное описание и зависимости для каждого пакета. Носит имя Packages.gz в случае бинарного репозитория и Sources.gz для репозитория исходных текстов. Создается с помощью утилит pkg-scanpackages и dpkg-scansources.

Apt keyring (дословно: связка ключей apt) - хранилище ключей, удостоверяющих подлинность источников пакетов (репозиториев).

Что внутри?

Отличительной чертой пакетов формата Deb является их простота. Любой Deb-пакет - это три файла: data.tar.gz, control.tar.gz и debian-binary, запакованные архиватором ar. Файл data.tar.gz - это содержимое пакета (бинарники, man"ы, документация и т.д.), control.tar.gz - метаданные, в простейшем варианте два файла: control, содержащий описание пакета, зависимости, размер и т.д., и md5sums - контрольные суммы всех файлов пакета. Файл debian-binary содержит версию формата Deb-пакета (например, 2.0). Для распаковки пакета можно использовать команду:

ar -xv пакет.deb && tar -xzf data.tar.gz

Advanced Packaging Tool - высокоуровневый инструмент для работы с пакетами.

Работа с пакетами при помощи dpkg.

dpkg представляет собой основную программу в системе для работы с пакетами Debian. При наличии пакетов.deb именно dpkg позволяет их установить или проанализировать их содержимое. Однако эта программа имеет только частичное представление о мире Debian: она знает, что установлено в системе, а также всё, что передано ей в командной строке, но она ничего не знает о других доступных пакетах. Поэтому она завершится с ошибкой, если обнаружит неудовлетворённую зависимость. Такие инструменты как apt, напротив, автоматически создадут список зависимостей, чтобы установить всё по возможности автоматически.

dpkg или apt?

dpkg стоит рассматривать как низкоуровневый инструмент (движок), а apt - как инструмент, более близкий к пользователю, обходящий ограничения первого. Эти инструменты работают совместно, каждый со своей спецификой, заточенный под определённый круг задач.

Установка пакетов

dpkg - это, прежде всего, инструмент для установки уже доступных пакетов Debian (поскольку он ничего не загружает). Чтобы установить пакет, используется опция -i или --install.

Установка пакета при помощи dpkg

Dpkg -i man-db_2.7.0.2-5_amd64.deb




Настраивается пакет man-db (2.7.0.2-5) …

Мы можем видеть каждый этап, выполняемый dpkg, поэтому мы знаем, в каком месте могла произойти какая-либо ошибка. Установку также можно выполнить в два этапа: сперва распаковка, затем конфигурация. Благодаря этому apt-get делает меньше обращений к dpkg (каждый такой запрос является дорогостоящей операцией из-за необходимости загрузки в память базы данных, включая весь список уже установленных файлов).

Раздельная распаковка и настройка

Dpkg --unpack man-db_2.7.0.2-5_amd64.deb

(Чтение базы данных … на данный момент установлено 86425 файлов и каталогов.)
Подготовка к распаковке man-db_2.7.0.2-5_amd64.deb …
Распаковывается man-db (2.7.0.2-5) на замену (2.7.0.2-5) …
Обрабатываются триггеры для mime-support (3.58) …

Dpkg --configure man-db

Настраивается пакет man-db (2.7.0.2-5) …
Updating database of manual pages ...

Иногда dpkg по той или иной причине не может установить пакет и возвращает ошибку; если пользователь даёт указание проигнорировать эту ошибку, будет выдано лишь предупреждение; для этого существуют различные опции --force-*. Команда dpkg --force-help, или документация этой команды, выдаст полный список таких опций. Самой частой ошибкой, с которой вам придётся рано или поздно столкнуться, является конфликт файлов. Когда пакет содержит файл, который уже установлен другим пакетом, dpkg откажется устанавливать его, и мы получим такое сообщение:

Распаковывается пакет libgdm (из файла.../libgdm_3.8.3-2_amd64.deb) …
dpkg: ошибка при обработке параметра /var/cache/apt/archives/libgdm_3.8.3-2_amd64.deb (--unpack):
попытка перезаписать «/usr/bin/gdmflexiserver», который уже имеется в пакете gdm3 3.4.1-9

В этом случае, если вы считаете, что замена этого файла не представляет существенной опасности для стабильности вашей системы (зачастую это именно так), вы можете использовать опцию --force-overwrite, которая сообщит dpkg о необходимости проигнорировать эту ошибку и перезаписать файл.
Хотя есть много опций --force-*, только --force-overwrite рекомендуется для регулярного использования. Остальные предназначены только для исключительных случаев, и лучше не трогать их, пока это возможно, чтобы соблюдать правила, заложенные при создании пакета. Не забывайте, что эти правила являются гарантией целостности и стабильности системы.

ВНИМАНИЕ! Эффективное использование --force-*

Если вы не будете осторожны, использование опции --force-* может привести к тому, что команды APT перестанут работать. Некоторые из этих опций позволяют установить пакет с неудовлетворёнными зависимостями или при наличии конфликта. В результате согласованность системы с точки зрения зависимостей нарушается, и команды APT откажутся выполнять какие-либо действия кроме тех, которые вернут систему в согласованное состояние (это обычно сводится к установке отсутствующей зависимости или удалению проблемного пакета). Вот пример сообщения, сигнализирующего о такой ошибке, которое получено после установки новой версии rdesktop с игнорированием зависимости от более новой версии libc6:

apt full-upgrade

Возможно, для исправления этих ошибок вы захотите воспользоваться «apt-get -f install».
Пакеты, имеющие неудовлетворённые зависимости:
rdesktop: Зависит от: libc6 (>= 2.5) но 2.3.6.ds1-13etch7 уже установлен
E: Неудовлетворённые зависимости.

Попытайтесь использовать -f.
Бесстрашные администраторы, уверенные в правильности своего анализа ситуации, могут проигнорировать предупреждение о проблеме зависимостями или конфликте, используя соответствующую опцию --force-*. В этом случае, если необходимо продолжать использовать apt или aptitude, нужно отредактировать /var/lib/dpkg/status и удалить/изменить зависимость или конфликт.
Редакрирование данного файла - это грязный хак, и не стоит прибегать к нему, кроме как в самых крайних случаях. Зачастую лучшим решением является пересборка пакета, вызывающего проблему, «Пересборка пакета из его исходного кода») или использование его новой версии (вероятно исправленной) из такого репозитория как stable-backports (см. Раздел 6.1.2.4, «Стабильное ПО с обратной совместимостью»).

Удаление пакета

Запуск dpkg с опцией -r или --remove, за которой следует имя пакета, приведет к удалению этого пакета. Это удаление, однако, не полное: все конфигурационные файлы, сценарии сопровождающего, файлы журналов (системные журналы) и другие пользовательские данные, используемые этим пакетом, останутся. Таким путём легко избавиться от программы, деинсталлировав её, но при этом сохраняется возможность установить её ещё раз с той же конфигурацией. Для полного удаления всего, связанного с пакетом, используется опция -P или --purge, сопровождающаяся именем пакета.

Полное удаление пакета debian-cd

Dpkg -r debian-cd

(Чтение базы данных … на данный момент установлено 97747 файлов и каталогов.)

Dpkg -P debian-cd

(Чтение базы данных … на данный момент установлен 97401 файл и каталог.)
Удаляется пакет debian-cd (3.1.17) …
Вычищаются файлы настройки пакета debian-cd (3.1.17) …

Запросы к базе данных dpkg и анализ файлов.deb

Для большинста опций существуют «длинные» (одно или несколько слов, перед которыми ставится двойной дефис) и «короткие» варианты (одна буква, часто первая буква «длинного» варианта, после одного дефиса). Это соглашение так распространено, что уже является стандартом POSIX.
Прежде чем завершить этот раздел, рассмотрим опции dpkg для запросов к внутренней базе данных для получения различной информации. При этом сперва будут указываться длинные, а затем соответствующие короткие опции (которые, разумеется, принимают те же самые аргументы). Так, --listfiles пакет (или -L) выводит список файлов, установленых пакетом; --search файл (или -S) ищет пакет, к которому относится этот файл; --status пакет (or -s) выводит информацию о том или ином установленном пакете; --list (или -l) показывает список пакетов, известных системе, и их статус; --contents file.deb (или -c) показывает список файлов в этом пакете; --info file.deb (или -I) показывает информацию о пакете Debian.

Получение информации с помощью dpkg

Dpkg -L base-passwd

/.
/usr
/usr/sbin
/usr/sbin/update-passwd
/usr/share
/usr/share/man
/usr/share/man/ru
/usr/share/man/ru/man8
/usr/share/man/ru/man8/update-passwd.8.gz
/usr/share/man/pl
/usr/share/man/pl/man8
/usr/share/man/pl/man8/update-passwd.8.gz
/usr/share/man/man8
/usr/share/man/man8/update-passwd.8.gz
/usr/share/man/fr
/usr/share/man/fr/man8
/usr/share/man/fr/man8/update-passwd.8.gz
/usr/share/doc-base
/usr/share/doc-base/users-and-groups
/usr/share/base-passwd
/usr/share/base-passwd/passwd.master
/usr/share/base-passwd/group.master
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/base-passwd
/usr/share/doc
/usr/share/doc/base-passwd
/usr/share/doc/base-passwd/copyright
/usr/share/doc/base-passwd/users-and-groups.html
/usr/share/doc/base-passwd/changelog.gz
/usr/share/doc/base-passwd/users-and-groups.txt.gz
/usr/share/doc/base-passwd/README

Dpkg -S /bin/date

coreutils: /bin/date

Dpkg -s coreutils

Package: coreutils
Essential: yes
Status: install ok installed
Priority: required
Section: utils
Installed-Size: 13822
Maintainer: Michael Stone
Architecture: amd64
Multi-Arch: foreign
Version: 8.13-3.5
Replaces: mktemp, timeout
Depends: dpkg (>= 1.15.4) | install-info
Pre-Depends: libacl1 (>= 2.2.51-8), libattr1 (>= 1:2.4.46-8), libc6 (>= 2.7), libselinux1 (>= 1.32)
Conflicts: timeout
Description: GNU core utilities
This package contains the basic file, shell and text manipulation
utilities which are expected to exist on every operating system.
.
Specifically, this package includes:
arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp
csplit cut date dd df dir dircolors dirname du echo env expand expr
factor false flock fmt fold groups head hostid id install join link ln
logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup nproc od
paste pathchk pinky pr printenv printf ptx pwd readlink rm rmdir runcon
sha*sum seq shred sleep sort split stat stty sum sync tac tail tee test
timeout touch tr true truncate tsort tty uname unexpand uniq unlink
users vdir wc who whoami yes
Homepage: http://gnu.org/software/coreutils

Dpkg -l "b*"

Желаемый=неизвестно[u]/установить[i]/удалить[r]/вычистить[p]/зафиксировать[h]
| Состояние=не[n]/установлен[i]/настроен[c]/распакован[U]/частично настроен[F]/
частично установлен[H]/trig-aWait/Trig-pend
|/ Ошибка?=(нет)/требуется переустановка[R] (верхний регистр
в полях состояния и ошибки указывает на ненормальную ситуацию)
||/ Имя Версия Архитектура Описание
+++-============-==============-==============-================================
un backupninja <нет> (описание недоступно)
un base <нет> (описание недоступно)
un base-config <нет> (описание недоступно)
ii base-files 7.1 amd64 Debian base system miscellaneous
ii base-passwd 3.5.26 amd64 Debian base system master passwo
[...]

Dpkg -c /var/cache/apt/archives/gnupg_1.4.12-7_amd64.deb

drwxr-xr-x root/root 0 2013-01-02 19:28 ./
drwxr-xr-x root/root 0 2013-01-02 19:28 ./usr/
drwxr-xr-x root/root 0 2013-01-02 19:28 ./usr/share/
drwxr-xr-x root/root 0 2013-01-02 19:28 ./usr/share/doc/
drwxr-xr-x root/root 0 2013-01-02 19:28 ./usr/share/doc/gnupg/
-rw-r--r-- root/root 3258 2012-01-20 10:51 ./usr/share/doc/gnupg/TODO
-rw-r--r-- root/root 308 2011-12-02 18:34 ./usr/share/doc/gnupg/FAQ
-rw-r--r-- root/root 3543 2012-02-20 18:41 ./usr/share/doc/gnupg/Upgrading_From_PGP.txt
-rw-r--r-- root/root 690 2012-02-20 18:41 ./usr/share/doc/gnupg/README.Debian
-rw-r--r-- root/root 1418 2012-02-20 18:41 ./usr/share/doc/gnupg/TODO.Debian
[...]

Dpkg -I /var/cache/apt/archives/gnupg_1.4.12-7_amd64.deb

новый пакет debian, версия 2.0.
размер 1952176 байт(а): управляющий архив длиной 3312 байт(а).
1449 байт(а), 30 строк control
4521 байт(а), 65 строк md5sums
479 байт(а), 13 строк * postinst #!/bin/sh
473 байт(а), 13 строк * preinst #!/bin/sh
Package: gnupg
Version: 1.4.12-7
Architecture: amd64
Maintainer: Debian GnuPG-Maintainers
Installed-Size: 4627
Depends: libbz2-1.0, libc6 (>= 2.4), libreadline6 (>= 6.0), libusb-0.1-4 (>= 2:0.1.12), zlib1g (>= 1:1.1.4), dpkg (>= 1.15.4) | install-info, gpgv
Recommends: libldap-2.4-2 (>= 2.4.7), gnupg-curl
Suggests: gnupg-doc, xloadimage | imagemagick | eog, libpcsclite1
Section: utils
Priority: important
Multi-Arch: foreign
Homepage: http://www.gnupg.org
Description: GNU privacy guard - a free PGP replacement
GnuPG is GNU"s tool for secure communication and data storage.
It can be used to encrypt data and to create digital signatures.
It includes an advanced key management facility and is compliant
with the proposed OpenPGP Internet standard as described in RFC 4880.
[...]

УГЛУБЛЯЕМСЯ: Сравнение версий

Так как dpkg является программой для работы с пакетами Debian, она, помимо всего прочего, содержит эталонную реализацию логики сравнения номеров версий. Поэтому у неё есть опция --compare-versions, используемая внешними программами (главным образом - сценариями настройки, запускаемыми самой dpkg). Для этой опции требуются три параметра: номер версии, оператор сравнения и второй номер версии. Допустимые операторы сравнения - lt (строго меньше), le (меньше или равна), eq (равна), ne (не равна), ge (больше или равна), и gt (строго больше). Если сравнение верно, dpkg возвращает 0 (успех), если нет, то ненулевое значение (признак ошибки).

$ dpkg --compare-versions 1.2-3 gt 1.1-4
$ echo $?
0
$ dpkg --compare-versions 1.2-3 lt 1.1-4
$ echo $?
1
$ dpkg --compare-versions 2.6.0pre3-1 lt 2.6.0-1
$ echo $?
1

Обратите внимание на неожиданный сбой последнего сравнения: для dpkg буквы pre, обозначающие, как правило, предварительный выпуск, не имеет никакого особого значения, и буквенные символы сравниваются таким же образом, как и числа (a < b < c ...), в алфавитном порядке. Именно поэтому dpkg считает, что «0pre3» больше, чем «0». При необходимости указать в номере версии, что она относится к предварительному выпуску, используется символ тильды «~»:

$ dpkg --compare-versions 2.6.0~pre3-1 lt 2.6.0-1
$ echo $?
0

Файл журнала dpkg

dpkg сохраняет журнал всех своих действий в /var/log/dpkg.log. Этот журнал чрезвычайно подробный: в нём задокументированы все этапы обработки пакетов dpkg. Этот журнал помогает не только отследить поведение dpkg, но и сохранить историю изменений в системе: можно найти точный момент, когда каждый пакет был установлен или обновлён, и эта информация может быть чрезвычайно полезной при выяснении причин изменения поведения системы в целом. Кроме того, ведётся запись информации обо всех версиях, и её легко сверить с changelog.Debian.gz из соответствующего пакета или с отчётами об ошибках онлайн.

Поддержка мультиархитектуры

Все пакеты Debian имеют поле Architecture в своих метаданных. Это поле может содержать либо значение «all» (для пакетов, которые не зависят от архитектуры), либо название конкретной архитектуры, для которой пакет предназначен (например «amd64», «armhf», …). В последнем случае dpkg по умолчанию допустит установку пакета только в том случае, если его архитектура соответствует архитектуре системы, возвращаемой dpkg --print-architecture.
Это ограничение гарантирует, что в системе не окажется двоичных файлов, скомпилированных для неправильной архитектуры. Всё было бы прекрасно, но на (некоторых) компьютерах можно запускать двоичные файлы для разных архитектур, нативно (к примеру, на системах «amd64» работают двоичные файлы для «i386») или через эмуляторы.

Включение мультиархитектуры

Поддержка мультиархитектуры dpkg позволяет определять «чужеродные архитектуры», которые могут быть установлены в данной системе. Это легко сделать с помощью dpkg --add-architecture, как показано в примере ниже. Существует и соответствующая команда dpkg --remove-architecture для отключения поддержки чужеродной архитектуры, но её можно использовать только в том случае, когда в системе не осталось ни одного пакета этой архитектуры.

dpkg --print-architecture
amd64

dpkg: error processing archive gcc-4.9-base_4.9.1-19_armhf.deb (--install):
package architecture (armhf) does not match system (amd64)
Errors were encountered while processing:
gcc-4.9-base_4.9.1-19_armhf.deb

dpkg --add-architecture armhf
dpkg --add-architecture armel
dpkg --print-foreign-architectures
armhf
armel

Dpkg -i gcc-4.9-base_4.9.1-19_armhf.deb

Selecting previously unselected package gcc-4.9-base:armhf.
(Reading database ... 86425 files and directories currently installed.)
Preparing to unpack gcc-4.9-base_4.9.1-19_armhf.deb ...
Unpacking gcc-4.9-base:armhf (4.9.1-19) ...
Setting up gcc-4.9-base:armhf (4.9.1-19) ...

Dpkg --remove-architecture armhf

dpkg: error: cannot remove architecture "armhf" currently in use by the database

Dpkg --remove-architecture armel
dpkg --print-foreign-architectures
Поддержка мультиархитектуры в APT

APT автоматически определит, если dpkg будет настроен на поддержку чужеродных архитектур, и начнёт загрузку соответствующих файлов Packages в процессе обновления.
Чужеродные пакеты можно установить при помощи команды apt install пакет:архитектура.

Использование собственнических двоичных файлов i386 в системах amd64

Есть несколько случаев, когда может пригодиться мультиархитектура, но самым распространённымным из них является обеспечение возможности запуска 32-битных файллов (i386) на 64-битных системах (amd64), в частности потому что некоторые популярные собственнические приложения (вроде Skype) доступны только в виде 32-разрядных версий.

Изменения, связанные с мультиархитектурой

Чтобы сделать мультиархитектурную поддержку по-настоящему полезной, библиотеки требовалось перепаковать, переместив их в каталог, соответствующий архитектуре, чтобы можно было установить несколько копий (для разных архитектур) одновременно. Такие обновлённые пакеты содержат заголовок "Multi-Arch: same", указывающий системе управления пакетами, что разные архитектуры пакетов можно устанавливать совместно (и что эти пакеты могут удовлетворять зависимости только пакетов той же архитектуры). Так как поддержка мультиархитектуры была добавлена только в Debian Wheezy, ещё не все библиотеки преобразованы.

Dpkg -s gcc-4.9-base

dpkg-query: ошибка: --status требует корректное имя пакета, но "gcc-4.9-base" таковым не является: неоднозначное имя пакета "gcc-4.9-base" с более чем одним установленным экземпляром

Используйте параметр --help для вывода справки по запросам пакетов.

Dpkg -s gcc-4.9-base:amd64 gcc-4.9-base:armhf | grep ^Multi

Multi-Arch: same
Multi-Arch: same

Dpkg -L libgcc1:amd64 |grep .so

/lib/x86_64-linux-gnu/libgcc_s.so.1

Dpkg -S /usr/share/doc/gcc-4.9-base/copyright

gcc-4.9-base:amd64, gcc-4.9-base:armhf: /usr/share/doc/gcc-4.9-base/copyright

Стоит отметить, что для пакетов с полем Multi-Arch: same следует указывать имена с названием архитектуры, чтобы их можно было однозначно идентифицировать. Они также могут иметь общие файлы с другими экземплярами того же пакета; dpkg в этом случае гарантирует, что все пакеты имеют бит-в-бит идентичные общие файлы. Все экземпляры пакета должны быть одной и той же версии, так что и обновляться они должны вместе.
Поддержка мультиархитектуры также привносит некоторые интересные особенности в механизм обработки зависимосей. Для удовлетворения зависимости требуется либо пакет, помеченный «Multi-Arch: foreign», или пакет с такой же архитектурой (при разрешении зависимости архитектуро-независимые пакеты считаются имеющими ту же архитектуру, что и система). Зависимость может также быть ослаблена, чтобы позволить пакету любой архитектуры удовлетворять её, с помощью синтаксиса пакет:any, но но чужеродные пакеты могут удовлетворять такую зависимость, только если они помечены «Multi-Arch: allowed».

Использованные материалы.

Загрузка...