Теоретическая часть
Большинство информации в теоретической части взято из справочных страниц, официальной документации на русском и английском языках.
Общая информация
Все пакеты для Debian можно разделить на два типа :
Двоичные пакеты (binary) — содержат исполняемые файлы, файлы настроек, справочные страницы, информацию об авторских правах. Пакеты поставляются в файлах с расширением .deb (специфичен именно для Debian-систем).
Пакеты исходного кода (source) — содержат описание пакета, файл с tar-архивом немодифицированного исходного кода (расширение .orig.tar.gz) и обычно файла, содержащего особые Debian-специфичные изменения к оригинальному исходному коду (расширение .diff.gz)
Имена файлов пакетов включают в себя последовательно общее имя пакета, номер ревизии, архитектуру.
Помимо обычных пакетов существуют также виртуальные . Они обладают идентичной функциональностью, но имеют разные названия. Оба пакета предоставляют одно и то же дополнительное имя пакета, которое и является виртуальным. При этом для разрешения зависимостей может использоваться как первый, так и второй реальные пакеты, если вдруг какой-либо из них понадобится для другой программы.
Файл control
Вся сопроводительная информация о пакете находится в файле control. Некоторые атрибуты в этом файле рассмотрены ниже, назначение остальных легко можно понять исходя из их названия. Рассмотрим для примера вывод файла control для пакета mysql-server-5.5:
Приоритет (priority) — может принимать значения требуемый (required), важный (important), стандартный (standard), дополнительный (optional) и экстра (extra). Все типы указаны в порядке уменьшения их важности для операционной системы. Если без требуемых пакетов операционная система не сможет функционировать нормально, то экстра и дополнительные пакеты в принципе не нужны для работы системы, они добавляют дополнительный функционал.
В нижней части текста можно встретить атрибуты, которые содержат списки определенных пакетов. Некоторые из этих пакетов могут быть установлены по желанию, а какие-то должны присутствовать обязательно. В этом случае говорят, что пакет : зависит (depends), пред-зависит (pre-depends), рекомендует (reccomends), предлагает (suggests), ломает (breaks), конфликтует (conflict), предоставляет (provides), заменяет (replace), наращивает (enhances). Конечно же все эти поля содержат имена других пакетов, без которых работа основного невозможна (как в случае с пакетами в атрибуте depends), которые добавляют дополнительный функционал (reccomends, suggests), или которые могут даже заменять уже существующие в системе пакеты (replace) и так далее.
Почти в самом низу находятся данные файла conffile . Он необходим для определения конфигурационных файлов, которые нельзя заменять при обновлении пакета, чтобы сохранить настройки.
Сценарии установки
Помимо данных самого приложения и информации о нем, в пакетах также поставляются сценарии, которые определяют необходимые действия до/после установки/удаления пакета. Все сценарии установленного пакета хранятся в каталоге низкоуровневой утилиты управления пакетами — dpkg — /var/lib/dpkg/info с соответствующим расширением (проверим это на примере все того же mysql-server-5.5):
Вот за что отвечает каждый сценарий :
.preinst — выполняется перед распаковкой пакетов, обычно останавливает связанные с ними службы;
.postinst — выполняется соответственно после распаковки пакета и в большинстве случае служит для настройки только что распакованного пакета — либо самостоятельной, либо с помощью пользователя путем запроса каких-либо данных и/или вывода предупреждений. Конечно же остановленные на этапе выполнения сценария .preinst службы должны быть запущены;
.prerm — как можно догадаться из названия, этот сценарий запускается перед удалением пакета и обычно останавливает все зависящие от него службы;
.postrm — выполняется в самую последнюю очередь после удаления пакета, запускает обратно необходимые службы, подчищает все оставшиеся от пакета данные.
Вообще процессы установки/удаления/обновления пакетов содержат достаточно много действий, это не просто распаковка различных файлов в соответствующие им каталоги системы. Все эти нюансы также подробно расписаны в официальных руководствах .
Утилиты управления пакетами
Существует достаточно много утилит управления пакетами, например: apt, aptitude, dpkg, dselect, synaptic и другие. Все они обладают практически идентичным функционалом для «повседневного» использования, но различаются некоторыми другими функциями, интерфейсом и т.д.
В данном случае меня интересуют утилиты командной строки для администрирования прежде всего серверов, не обладающих графическим интерфейсом, а потому я собираюсь рассмотреть три наиболее часто используемые утилиты — dpkg, apt, aptitude.
Надо понимать, что высокоуровневые утилиты, такие как aptitude, основаны на apt, которая в свою очередь использует низкоуровневую dpkg .
Основные различия
Основные различия заключаются в следующем :
dpkg:
apt:
aptitude:
(главы 6, 7)
(глава 2)
Также могут быть полезны ресурсы смежных дистрибутивов:
В любом случае я не ставил задачу описать все нюансы работы с пакетами. Статья предназначена прежде всего для аккумулирования опыта из общедоступных источников, коллекционирования ссылок на наиболее полезные ресурсы и небольшого обзора самых фундаментальных положений и функций.
Большинство информации в теоретической части взято из справочных страниц, официальной документации на русском и английском языках.
Общая информация
Все пакеты для Debian можно разделить на два типа :
Двоичные пакеты (binary) — содержат исполняемые файлы, файлы настроек, справочные страницы, информацию об авторских правах. Пакеты поставляются в файлах с расширением .deb (специфичен именно для Debian-систем).
Пакеты исходного кода (source) — содержат описание пакета, файл с tar-архивом немодифицированного исходного кода (расширение .orig.tar.gz) и обычно файла, содержащего особые Debian-специфичные изменения к оригинальному исходному коду (расширение .diff.gz)
Имена файлов пакетов включают в себя последовательно общее имя пакета, номер ревизии, архитектуру.
Помимо обычных пакетов существуют также виртуальные . Они обладают идентичной функциональностью, но имеют разные названия. Оба пакета предоставляют одно и то же дополнительное имя пакета, которое и является виртуальным. При этом для разрешения зависимостей может использоваться как первый, так и второй реальные пакеты, если вдруг какой-либо из них понадобится для другой программы.
Файл control
Вся сопроводительная информация о пакете находится в файле control. Некоторые атрибуты в этом файле рассмотрены ниже, назначение остальных легко можно понять исходя из их названия. Рассмотрим для примера вывод файла control для пакета mysql-server-5.5:
Приоритет (priority) — может принимать значения требуемый (required), важный (important), стандартный (standard), дополнительный (optional) и экстра (extra). Все типы указаны в порядке уменьшения их важности для операционной системы. Если без требуемых пакетов операционная система не сможет функционировать нормально, то экстра и дополнительные пакеты в принципе не нужны для работы системы, они добавляют дополнительный функционал.
В нижней части текста можно встретить атрибуты, которые содержат списки определенных пакетов. Некоторые из этих пакетов могут быть установлены по желанию, а какие-то должны присутствовать обязательно. В этом случае говорят, что пакет : зависит (depends), пред-зависит (pre-depends), рекомендует (reccomends), предлагает (suggests), ломает (breaks), конфликтует (conflict), предоставляет (provides), заменяет (replace), наращивает (enhances). Конечно же все эти поля содержат имена других пакетов, без которых работа основного невозможна (как в случае с пакетами в атрибуте depends), которые добавляют дополнительный функционал (reccomends, suggests), или которые могут даже заменять уже существующие в системе пакеты (replace) и так далее.
Почти в самом низу находятся данные файла conffile . Он необходим для определения конфигурационных файлов, которые нельзя заменять при обновлении пакета, чтобы сохранить настройки.
Сценарии установки
Помимо данных самого приложения и информации о нем, в пакетах также поставляются сценарии, которые определяют необходимые действия до/после установки/удаления пакета. Все сценарии установленного пакета хранятся в каталоге низкоуровневой утилиты управления пакетами — dpkg — /var/lib/dpkg/info с соответствующим расширением (проверим это на примере все того же mysql-server-5.5):
Вот за что отвечает каждый сценарий :
.preinst — выполняется перед распаковкой пакетов, обычно останавливает связанные с ними службы;
.postinst — выполняется соответственно после распаковки пакета и в большинстве случае служит для настройки только что распакованного пакета — либо самостоятельной, либо с помощью пользователя путем запроса каких-либо данных и/или вывода предупреждений. Конечно же остановленные на этапе выполнения сценария .preinst службы должны быть запущены;
.prerm — как можно догадаться из названия, этот сценарий запускается перед удалением пакета и обычно останавливает все зависящие от него службы;
.postrm — выполняется в самую последнюю очередь после удаления пакета, запускает обратно необходимые службы, подчищает все оставшиеся от пакета данные.
Вообще процессы установки/удаления/обновления пакетов содержат достаточно много действий, это не просто распаковка различных файлов в соответствующие им каталоги системы. Все эти нюансы также подробно расписаны в официальных руководствах .
Утилиты управления пакетами
Существует достаточно много утилит управления пакетами, например: apt, aptitude, dpkg, dselect, synaptic и другие. Все они обладают практически идентичным функционалом для «повседневного» использования, но различаются некоторыми другими функциями, интерфейсом и т.д.
В данном случае меня интересуют утилиты командной строки для администрирования прежде всего серверов, не обладающих графическим интерфейсом, а потому я собираюсь рассмотреть три наиболее часто используемые утилиты — dpkg, apt, aptitude.
Надо понимать, что высокоуровневые утилиты, такие как aptitude, основаны на apt, которая в свою очередь использует низкоуровневую dpkg .
Основные различия
Основные различия заключаются в следующем :
dpkg:
- является основным низкоуровневым инструментом для работы с пакетами, умеет работать с файлами .deb, в отличие от apt и aptitude, работает только с существующими пакетами, загружать ничего не умеет, пользуйтесь этим инструментом очень аккуратно;
- не умеет работать с зависимостями и если устанавливаемому пакету нужны какие-либо другие, dpkg выкинет ошибку и вам придется подгружать зависимости вручную;
- ведет очень подробные логи в файле /var/log/dpkg.log;
apt:
- рекомендуют использовать для обновлении системы при переходе между версиями дистрибутивов, а также просто при установке или обновлении пакетов благодаря более надежному механизму разрешения зависимостей пакетов;
- apt-get и apt-cache работают только в режиме командной строке;
- apt-cache предоставляет возможность поиска с использованием регулярных выражений только в именах и описаниях пакетов;
- умеет работать с предпочтениями только через файл /etc/apt/preferences, в отличие от aptitude;
- менее требовательна к аппаратным ресурсам.
aptitude:
- крайне не рекомендуют использовать для обновления системы при переходе от одной версии дистрибутива к другой; встречаются ситуации с массовым удалением пакетов при обновлении в нестабильных сборках;
- является наиболее универсальным функциональным инструментом на основе apt;
- умеет работать как в режиме командной строки, так и в интерактивном режиме;
- наиболее полезная при выполнении повседневных задач управления пакетами — усиленные возможности поиска (поддерживаются регулярные выражения при поиске в метаданных пакета), подробный анализ существующих пакетов, управление устаревшими пакетами, удобный доступ ко всем версиям пакета;
- уступает по производительности другим утилитам.
(главы 6, 7)
(глава 2)
Также могут быть полезны ресурсы смежных дистрибутивов:
В любом случае я не ставил задачу описать все нюансы работы с пакетами. Статья предназначена прежде всего для аккумулирования опыта из общедоступных источников, коллекционирования ссылок на наиболее полезные ресурсы и небольшого обзора самых фундаментальных положений и функций.