Основы управления пакетами в Ubuntu и Debian
Вступление
Одно из основных преимуществ 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, но постарались выделить наиболее важные на наш взгляд. Не забывайте добавлять свои замечания в коментариях.
Комментарии
Отправить комментарий