GrabDuck

Основы управления пакетами в Ubuntu и Debian / DEVACADEMY

:

Вступление

Одно из основных преимуществ Linux систем - это управление пакетами. Формат самих пакетов и способы управления ими отличается в разных дистрибутивах, но, тем не менее, можно выделить два основных направления.

В дистрибутивах на базе RHEL используется RPM формат пакетов, а управлять ими можно при помощи rpm или yum. Второе направление используется в операционных системах семейства Debian (например Ubuntu). В них применяется формат пакетов deb, а роль инструментов, помогающих управлять ими, apt и dpkg. Именно вторую группу мы и обсудим в статье. В этой статье-шпаргалке мы пройдемся по всем основным инструментам для управления пакетами, которыми пользуются системные администраторы на Debian и Ubuntu. Сохранив эту статью вы сможете всегда к ней обратиться при возникновении проблем с пакетами.

Как применять это руководство

Мы рассмотрим часто применяемые пользовательские инструменты в Debian и Ubuntu системах. Оставим инструменты для создания пакетов, так как они сильно различаются от дистрибутива к дистрибутиву в силу различий в лицензионных соглашениях.

Каждый отдельный инструмент мы рассмотрим в разделе “Описание инструментов управления пакетами для Debian”. Вся остальная часть руководства будет основываться больше на отдельных функциях, чем на инструменте как таковом. Такое построение руководства более логично, так как сначала вы сталкиваетесь с задачей, а уже потом ищите инструменты для её решения.

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

  • Если вы не знакомы с инструментами управления пакетами для Debian, то полностью прочтите раздел “Описание инструментов управления пакетами для Debian”.
  • Каждый раздел руководства можно использовать по отдельности. Поэтому можете сразу обращаться к той части, которая вам нужна в текущий момент.
  • Используйте содержание к руководству для поиска важной вам информации.
  • Копируйте команды в терминал вашей ОС, чтобы видеть результат для вашей ОС.

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

Debian/Ubuntu системы используют довольно небольшое количество инструментов для управления пакетами.

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

Apt-get

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

Чаще всего, apt-get применяется для обновления кеша и выполнения операций на рабочей системе.

Apt-cache

Другой незаменимый инструмент из семейства apt - apt-cache. С его помощью вы сможете получить информацию о доступных пакетах из локального кеша.

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

Aptitude

Объединяет в себе функционал двух предыдущих инструментов. Он может работать не только в командном режиме, но и имеет интерфейс, построенный на базе библиотеки ncurses. При работе в командном режиме aptitude почти полностью копирует команды apt-get и apt-cache. Поэтому мы не будем отдельно обсуждать этот инструмент. По идеи вы всегда можете заменить apt-get и apt-cache на aptitude.

Dpkg

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

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

Taskel

Taskel стоит особняком в этом ряду. Эта программа объединяет пакеты, основываясь на выполнении определенной задачи.

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

Другие

Конечно на этом ряд инструментов для управления пакетами не заканчивается. Существуют еще и другие программы с отличающимся функционалом и манерой предоставления информации. Мы будем к ним обращаться только по необходимости, но не стоит про них забывать. Очень полезными могут оказаться такие инструменты как apt-file, dselect и gdebi.

Обновление кеша пакетов и самой системы

В Debian/Ubuntu системах реализован очень удобный подход не только для поддержания актуальности списка пакетов, но и для их обновления.

Обновление локального кеша пакетов

Удаленные хранилища, в которых хранятся пакеты, постоянно обновляются. А так как все инструменты управления пакетами работают с локальным кешем, следует следить за актуальностью кеша.

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

Для обновления кеша воспользуйтесь командой apt-get и её подкомандой update:

sudo apt-get update

Информация о доступных пакетах для вашей операционной системы полностью обновится.

Обновление пакетов без их удаления

Команда apt предоставляет вам возможность легко поддерживать актуальность установленных пакетов.

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

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

sudo apt-get upgrade

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

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

Команда apt предоставляет вам возможность легко поддерживать актуальность установленных пакетов.

Она различает два типа обновления. Первый (будет рассмотрен в этом разделе) - используется для обновления пакетов, не требующих предварительного удаления. Эта процедура описана в разделе выше.

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

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

sudo apt-get dist-upgrade

В итоге получите полностью обновленную систему.

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

Одна из основных задач системы управления пакетами - упрощение процесса скачивания и установки пакетов.

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

Первый шаг при установке пакетов - поиск необходимого пакета в хранилищах. Большинство команд apt работает напрямую с кешем вашей локальной машины. Таким образом вы экономите на времени выполнения и сетевом трафике.

Поиск пакетов - это единственная операция, которая работает с локальным кешем. Для выполнения поиска вам потребуется команда apt-cache. Не забывайте, что кеш необходимо предварительно обновить командой sudo apt-get update:

apt-cache search package

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

Например, если вы ищете htop, то вы увидите следующий результат:

apt-cache search htop

aha - ANSI color to HTML converter
htop - interactive processes viewer
libauthen-oath-perl - Perl module for OATH One Time Passwords

Как вы видите, помимо пакета htop, мы получили два других пакета, в описании которых присутствует слово htop (описание в примере сокращено).

Установка пакета из хранилищ

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

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

sudo apt-get install package

Можно установить несколько пакетов за раз, разделив их названия пробелом:

sudo apt-get install package1 package2

Если для установки требуемых пакетов нужны определенные зависимости, то их список будет выведен и потребуется подтверждение действий. Пример вывода:

sudo apt-get install apache2

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
 apache2-data
Suggested packages:
 apache2-doc apache2-suexec-pristine apache2-suexec-custom
 apache2-utils
The following NEW packages will be installed:
 apache2 apache2-data

0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 236 kB of archives.
After this operation, 1,163 kB of additional disk space will be used.
Do you want to continue [Y/n]?

Как видите, хотя мы устанавливаем только apache2, пакет apache2-data устанавливается в качестве зависимости. В это случае вы можете просто нажать Enter или Y для подтверждения действия или N для отмены.

Установка определенной версии пакета из хранилища

Если вам нужна определенная версия пакета, то указать её вы можете через знак равенства после имени пакета:

sudo apt-get install package=version

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

apt-cache policy package

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

Многие пакеты подразумевают выполнение пост-установочных скриптов. Чаще всего администратору компьютера приходится выбирать определенные варианты настройки пакета. Если, после установки, вам потребуется снова выполнить эти скрипты, то можно воспользоваться командой dpkg-reconfigure. Она находит указанный вами пакет и исполняет все требуемые скрипты.

sudo dpkg-reconfigure package

Таким образом вы получите доступ к тем же (а иногда и к другим) вариантам настройки пакета.

Холостой запуск действий с пакетами

Довольно часто вам понадобится увидеть результат действий с пакетом без внесения каких либо изменений в систему. Команда apt позволяет сделать это при помощи ключа -s. Например, чтобы увидеть, что произойдет при установке пакета, можно выполнить следующую команду:

apt-get install -s package

В результате вы увидите полный список требуемых зависимостей и изменений для установки пакета. Таким образом, вы можете увидеть что произойдет в системе, как если бы вы выполнили эту команду с правами администратора (sudo).

Например, чтобы увидеть что произойдет при установке apache2, надо выполнить следующее:

apt-get install -s apache2

NOTE: This is only a simulation!
     apt-get needs root privileges for real execution.
     Keep also in mind that locking is deactivated,
     so don't depend on the relevance to the real current situation!
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
 apache2-data
Suggested packages:
 apache2-doc apache2-suexec-pristine apache2-suexec-custom
 apache2-utils
The following NEW packages will be installed:
 apache2 apache2-data
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst apache2-data (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [all])
Inst apache2 (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [amd64])
Conf apache2-data (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [all])
Conf apache2 (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [amd64])

Вы видите полный список пакетов и их версий, которые будут установлены, но это всего лишь симуляция процесса.

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

apt-get -s dist-upgrade

Отключение запроса на подтверждение действий

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

Чтобы не отвечать каждый раз на эти запросы, вы можете сразу указать ваш ответ по-умолчанию, указав флаг -y:

sudo apt-get install -y package

В результате все пакеты будут установлены без лишних вопросов к администратору. Также можно поступить и при обновлении системы:

sudo apt-get dist-upgrade -y

Восстановление испорченных зависимостей и пакетов

Случается так, что установка обрывается в силу проблем с зависимостями либо по другим причинам. Например, вы устанавливаете .deb пакет при помощи dpkg, не указав все необходимые зависимости.

Команда apt-get попробует исправить ситуацию, если ей передать флаг -f:

sudo apt-get install -f

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

Загрузка пакетов из хранилища

Иногда вам требуется скачать сам пакет без установки. Вы можете это легко сделать указав подкоманду download команде apt-get.

Так как вы не вносите изменений в систему, права администратора не требуются.

apt-get download package

Пакет будет загружен в текущий рабочий каталог.

Загрузка исходного кода пакета

Команда apt может загрузить не только сам .deb пакет, но и его исходный код, если соответствующая информация указана в списке используемых вами хранилищ.

Для загрузки исходного кода соответствующая deb-src строка должна быть указана в файле source.list для apt. Более подробно вы можете почитать об этом в соответствующем разделе руководства.

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

sudo apt-get source package

Файлы будут загружены в текущий каталог. Чаще всего это - каталог пакета, файл описания dsc и сам пакет сжатый архиватором tar.

ls -F

sublime-text-2.0.2/                 sublime-text_2.0.2-1~webupd8~3.tar.gz
sublime-text_2.0.2-1~webupd8~3.dsc

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

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

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

Для их установки вам понадобится dpkg, который в основном работает с отдельными пакетам. Эта команда не обращается к хранилищам, а ищет необходимый пакет по указанному вами пути:

sudo dpkg --install debfile.deb

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

sudo apt-get install -f

Все необходимые пакеты будут установлены.

Установка программных “задач” при помощи Tasksel

Большие наборы пакетов можно установить при помощи, так называемых, “задач”. Задачи - набор пакетов, которые вместе образуют определенную программную среду. Примером таких задач служат сервер LAMP, окружение рабочего стола или сервера приложений.

Не на всех системах tasksel установлен по-умолчанию. Установить его можно следующим образом:

sudo apt-get update
sudo apt-get install tasksel

Выбрать группу задач можно в интерактивном режиме командой:

sudo tasksel

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

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

tasksel --list-task

Далее можно установить задачу из командной строки выполнив:

sudo tasksel install task_name

Удаление пакетов и их файлов

Удаление пакетов так же можно выполнить при помощи систем управления пакетами. В этом разделе мы рассмотрим как удалить пакеты и файлы, оставшиеся после них.

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

Для удаления пакета требуется выполнить подкоманду remove команды apt-get. Большинство файлов, связанных с пакетом будут удалены, за одним большим исключением. Все файлы настройки остаются нетронутыми, чтобы вы могли легко восстановить состояния пакета в случае его повторной установки. Такой подход очень удобен, так как вы сохраняете все настройки, если случайно удалили пакет.

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

sudo apt-get remove package

Пакет будет удален, а файлы настройки сохранены.

Удаление пакета и связанного с ним файлов

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

В отличии от remove, purge удаляет все файлы. Такой подход может быть полезен в случае когда вам необходимо создать настройки заново и начать с чистого листа. Не забывайте, что удалив файлы настройки, восстановить вы их не сможете.

sudo apt-get purge package

Теперь при переустановке пакета будет использованы настройки по-умолчанию.

Автоматическое удаление невостребованных зависимостей

При использовании apt-get remove или apt-get purge вы удаляете указанный вами пакет. Но все зависимости, что были установлены ранее для этого пакета остаются нетронутыми. Для удаления таких брошенных зависимостей используйте команду autoremove:

sudo apt-get autoremove

Чтобы удалить конфигурационные файлы зависимых пакетов, используйте ключ --purge. Таким образом все лишние файлы будут удалены. Действие идентично команде purge.

sudo apt-get --purge autoremove

Очистка устаревших загруженных пакетов

По мере добавления новых пакетов в хранилища, некоторые из них становятся устаревшими. Команда apt-get способна удалить файлы на вашем компьютере, которые связаны с устаревшими пакетами при помощи подкоманды autoclean.

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

sudo apt-get autoclean

Получение информации о пакетах

Каждый пакет содержит в себе довольное большое количество мета информации, доступ к которой можно получить средствами инструментов управления пакетами.

Отображение информации о пакете

Чтобы просмотреть информацию о пакете из хранилища, воспользуйтесь подкомандой show команды apt-cache. Команде достаточно передать название пакета из хранилища.

apt-cache show package

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

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

apt-cache showpkg package

Отображение информации о .deb пакете

Чтобы получить информацию о deb пакете используйте ключ --info команды dpkg. Так же следует указать путь к deb файлу.

dpkg --info debfile.deb

Вы увидите различную мета информацию, включая название пакета, его версию, архитектуру, размер, список зависимостей, полное описание и возможные конфликты.

Отображение прямых и обратных зависимостей

Для вывода всех зависимостей следует воспользоваться командой apt-cache c подкомандой depends.

apt-cache depends package

Вы получите полный список жестких зависимостей, рекомендаций и конфликтных пакетов. Для вывода списка обратных зависимостей используйте подкоманду rdepends

apt-cache rdepends package

Вывод версий установленных и доступных к установке пакетов

Довольно часто в хранилище находятся несколько версий пакетов, причем одна из них устанавливается по-умолчанию. Чтобы получить список доступных версий, используйте подкоманду policy команды apt-cache

apt-cache policy package

Вы увидите номер установленной версии, версию по-умолчанию, если не указать её отдельно, а так же таблицу версий с указанием приоритета.

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

Вывод установленных пакетов при помощи dpkg -l

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

Первый метод - использование dpkg или dpkg-query с ключом -l. Вывод команд идентичен. При использовании без аргументов вы получите список всех установленных и частично установленных пакетов. Пример вывода:

dpkg -l

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                        Version                                 Architecture Description
+++-===========================================-=======================================-============-=====================================================================================================================
ii  account-plugin-generic-oauth                0.10bzr13.03.26-0ubuntu1.1              amd64        GNOME Control Center account plugin for single signon - generic OAuth
ii  accountsservice                             0.6.34-0ubuntu6                         amd64        query and manipulate user account information
ii  acl                                         2.2.52-1                                amd64        Access control list utilities
ii  acpi-support                                0.142                                   amd64        scripts for handling many ACPI events
ii  acpid                                       1:2.0.18-1ubuntu2                       amd64        Advanced Configuration and Power Interface event daemon
. . .

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

  • u: неизвестно
  • i: установлен
  • r: удален с сохранением файлов настроек
  • p: удален без сохранения файлов настроек
  • h: удержание версии

Второй символ показывает действительный статус пакета в системе управления пакетами. Он принимает значения:

  • n: не установлен
  • i: установлен
  • c: наличие файлов настроек, но сам пакет отсутствует
  • u: распакован. Файлы распакованы, но не настроены
  • f: Пакет частично установлен. Указывает на возникшую ошибку в процессе установки
  • w: пакет ожидает запуска от другого пакета
  • p: Пакет был запущен из другого пакета

Третий символ, как правил, пробел, но может принимать только одно значение:

  • r: Требуется переустановка. Обычно означает, что пакет испорчен и восстановить его невозможно.

Остальные столбцы содержат имя пакета, версию, архитектуру и описание.

Вывод состояния пакета при помощи фильтров

Если указать маску названия пакета после ключа -l, то вы получите информацию о пакетах, попадающих под эту маску. Например, давайте найдем библиотеку для обработки YAML:

dpkg -l libyaml*

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name            Version      Architecture Description
+++-===============-============-============-===================================
ii  libyaml-0-2:amd 0.1.4-2ubunt amd64        Fast YAML 1.1 parser and emitter li
ii  libyaml-dev:amd 0.1.4-2ubunt amd64        Fast YAML 1.1 parser and emitter li
un  libyaml-perl    <none>                    (no description available)
un  libyaml-syck-pe <none>                    (no description available)
ii  libyaml-tiny-pe 1.51-2       all          Perl module for reading and writing

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

Вывод установленных пакетов при помощи dpkg --get-selections

Второй способ: вывод списка установленных пакетов - использование команды dpkg с ключом --get-selections.

Вы получите список всех установленных и удаленных с сохранением настроек пакетов.

dpkg --get-selections

Чтобы вывести только установленные пакеты, используйте:

dpkg --get-selections | awk '$2 ~ /^install/`

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

dpkg --get-selections | awk '$2 !~ /^install/'

Поиск среди установленных пакетов

Чтобы найти установленный пакет используйте маску пакета после ключа --get-selections. Опять, вы увидите не только установленные пакеты, но и удаленные с сохранением настроек пакеты.

dpkg --get-selections libz*

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

Вывод установленных пакетом файлов

Чтобы получить список файлов, которые установил определенный пакет, используйте ключ -L команды dpkg:

dpkg -L package

Вы получите список абсолютных путей к файлам. Файлов настроек, которые были созданы в процессе работы, вы не увидите.

Поиск пакета, установленного по адресу

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

Вы увидите название пакета, ответственного за файл:

dpkg -S /path/to/file

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

Обнаружение пакета, ответственного за файл, без его установки

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

Для этого вам понадобится утилита apt-file. Она поддерживает базу связки файлов и пакетов.

Установить её можно следующим образом:

sudo apt-get update
sudo apt-get install apt-file

Затем обновите базу данных утилиты и приступайте к поиску:

sudo apt-file update
sudo apt-file search /path/to/file

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

Передача списка пакетов между системами

Иногда вам приходится создавать системы с одинаковым набором пакетов. В таком случае можно экспортировать список установленных пакетов на одной машине и использовать её на другой. Такой подход так же можно использовать при создания резервных копий. В этом разделе мы рассмотрим методы создания списков пакетов.

Экспорт списка пакетов

Для начала вам понадобится создать список пакетов. Получить такой список можно при помощи команды dpkg --get-selections.

dpkg --get-selections > ~/packagelist.txt

Этот список позднее можно скопировать на другую машину и импортировать. Также имеет смысл сохранить список хранилищ и ключей к ним. Для этого создайте каталог для хранения необходимых файлов и просто скопируйте её.

mkdir ~/sources
cp -R /etc/apt/sources.list* ~/sources

Экспортировать ключи можно следующим образом:

apt-key exportall > ~/trusted_keys.txt

Все созданные файлы теперь можно перенести на другую машину.

Импорт списка пакетов

Если вы создали список пакетов, как описано выше, то импортировать его вы можете так же при помощи команды dpkg.

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

sudo apt-key add ~/trusted_keys.txt
sudo cp -R ~sources/* /etc/apt/

Теперь обнулите состояние не основных пакетов в системе. То есть изменения надо наносить на свежие пакеты. Команда должна быть выполнена с правами администратора.

sudo dpkg --clear-selections

Таким образом вы отметите все неважные пакеты для удаления. Теперь следует обновить кеш пакетов, чтобы мы установили последние версии. Самой установкой займется утилита под названием dselect.

Убедитесь в том, что она установлена и обновите её БД.

sudo apt-get update
sudo apt-get install dselect
sudo dselect update

Теперь мы можем применить наш список пакетов поверх имеющегося:

sudo dpkg --set-selections < packagelist.txt

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

sudo apt-get dselect-upgrade

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

Добавление хранилищ и PPA

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

Добавление PPA

PPA (личные архивы пакетов) - своего рода аналог хранилищам. На момент написания руководство они доступны только для Ubuntu. PPA гораздо меньше по объему чем хранилища и поддерживаются частными лицами.

Добавив PPA в список доступных источников пакетов, вы можете использовать их так же как и обычные хранилища. Таким образом можно поддерживать актуальность пакетов или предоставлять пакеты недоступные в стандартных хранилищах. Не забывайте, вы добавляете только те PPA, которым доверяете, так как вы будете устанавливать оттуда пакеты. Чтобы добавить PPA воспользуйтесь командой add-apt-repository. Вы должны передать команде приставку ppa:, имя собственника ppa на launchpad, слеш и название ppa.

sudo add-apt-repository ppa:owner_name/ppa_name

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

sudo apt-get update

Добавление хранилища

Существует два подхода для добавления хранилищ в ubuntu и debian.

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

sudo nano /etc/apt/sources.list.d/new_repo.list

Добавлять источник нужно в формате:

deb_or_deb-src url_of_repo release_code_name_or_suite component_names

Описание формата:

  • deb или deb-src: Указывает на тип хранилища. Традиционные хранилища обозначаются при помощи deb, а хранилища исходных кодов - при помощи deb-src.
  • url: Главный url хранилища. Адрес расположения хранилища.
  • release code name or suite: кодовое имя вашей системы, обозначающее набор пакетов именно для вашей версии системы.
  • component names: Отметка набора пакетов, которые вы хотите сделать доступными себе.

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

Второй способ добавления хранилищ - команда add-apt-repository. Как правило, эта утилита установлена по-умолчанию в ubuntu и debian. Если у вас её нет, то установить её можно следующим образом:

sudo apt-get update
sudo apt-get install software-properties-common

Далее, просто отдавайте хранилища в указанном формате этой утилите.

sudo add-apt-repository 'deb url release component'

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

sudo apt-get update

Заключение

Конечно это не полный список возможностей систем управления пакетами в ubuntu и debian, но постарались выделить наиболее важные на наш взгляд. Не забывайте добавлять свои замечания в коментариях.