Большинство дистрибутивов Linux поддерживают репозитории совместимого программного обеспечения и ту или иную систему управления процессом установки программ из репозитория - менеджер пакетов. Чаще всего менеджер пакетов делится на две составляющие. Низкоуровневая часть менеджера, управляет локальной базой установленных пакетов. Высокоуровневая часть менеджера умеет вычислять зависимости пакетов между собой, находить необходимые пакеты в репозиториях и скачивать их для локальной установки через низкоуровневую компоненту.
Название дистрибутива: cat /etc/os-release
или lsb_release -a
Существует несколько популярных менеджеров пакетов, которые используются большинством дистрибутивов.
Debian и его производные (в частности Ubuntu) используют связку dpkg, apt, aptitude и пакеты в формате DEB. RedHat (CentOS, SciLinux и т.д.) используют rpm, yum и пакеты в формате RPM. ArchLinux использует менеджер pacman.
Программа Alien позволяет конвертировать пакеты RPM в DEB и обратно.
К сожалению, даже использование единой системы управления пакетами не всегда обеспечивает автоматическую переносимость пакетов из дистрибутива в дистрибутив. Разные дистрибутивы могут строить различные схемы зависимостей и установка пакета от "чужого" дистрибутива может привести к конфликтам в версиях используемых библиотек.
При установке kleopatra в Antix Linux выдается ошибка
$sudo apt install kleopatra
...
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
kleopatra : Depends: libkf5kcmutils5 (>= 5.2.0+git20141003) but it is not going to be installed
Depends: libkf5notifications5 (>= 5.12.0) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
последовательные попытки ручной установки пакетов по цепочке приводят к
$sudo apt install libpulse-mainloop-glib0
....
The following packages have unmet dependencies:
libpulse-mainloop-glib0 : Depends: libpulse0 (= 10.0-1+deb9u1) but 10.0-1.0nosystemd1 is to be installed
опции -f, -m, --ignore-missing не помогают
Ручная установка
apt-get download libpulse-mainloop-glib0
sudo dpkg -i --force-all libpulse-mainloop-glib0_10.0-1+deb9u1_i386.deb
sudo vim /var/lib/dpkg/status
# Находим зависимости для libpulse-mainloop-glib0
# и удаляем libpulse0
sudo apt-get install kleopatra
Утилита управления пакетами dpkg
используется в дистрибутиве Debian, а так же в Ubuntu и многих других. Файлы пакетов имеют расширение .deb
dpkg -i mc-3.14.deb
- установка пакета
dpkg -r mc
- удаление пакета с сохранением файлов конфигурации
dpkg --purge mc
-полное удаление пакета
dpkg -V mc
- проверка целостности установленного пакета
dpkg-query -L mc
- список файлов в пакете
dpkg-query -S /etc/mc.ini
- поиск пакета, которому принадлежит файл или каталог
dpkg-deb --contents mc-3.14.deb
- просмотр содержимого
dpkg-deb -x mc-3.14.deb /tmp
- извлечение файлов из архива
Для установки, удаления и обновления программ в дистрибутивах RHEL, Fedora, Mandriva, AltLinux и некоторых других используется менеджер пакетов rpm. Менеджер пакетов rpm позволяет устанавливать, удалять, верифицировать пакеты соответствующего формата, но не имеет средств для автоматического разрешения зависимостей и поиска в репозиториях. Для автоматизации установки пакетов можно воспользоваться программой yum (Yellowdog Update Manager), которая автоматически разрешает зависимости между пакетами и подгружает необходимые файлы. При необходимости собрать пакет с программой из исходных текстов можно воспользоваться rpmbuild. Для этого необходимо подготовить пакет в формате .src.rpm, включающий исходные тексты программы и .spec файл, описывающий процесс сборки.
Пакеты именуются по следующей схеме: имя-версия-сборка
. Распространяются пакеты в виде файлов, в название которых добавляется .архитектура.rpm
. Например, squid-2.5.STABLE8–1.FC3.1.i386.rpm
расшифровывается так: программа squid
, версия 2.5.STABLE8
, сборка 1.FC3.1
, архитектура i386
(неоптимизированное приложение под i386 совместимые процессоры). Номер сборки может включать название дистрибутива (FC3 в данном случае, а может и не включать). Архитектура noarch
означает скрипты, независимые от архитектуры процессора. Файлы .src.rpm
содержат исходные тексты программ и устанавливаются особым образом.
Каждый пакет содержит файлы программ, библиотек, конфигурации, документации и пр., упакованные архиватором cpio
. Также пакет содержит дополнительные секции:
и т.д.
Кроме того, каждый пакет принадлежит к некоторой группе Интернет, Разработка Программ, Развлечения и т.п. Просмотреть секции rpm файла можно в mc.
В дальнейших описаниях <пакет> означает имя пакета без i386.rpm
(если установлена одна версия программы, то номер версии и сборки тоже можно опустить), а <файл> означает имя файла .rpm. В качестве файла можно указывать его URL, например, http://download.fedora.redhat.com/pub/fedora/linux/core/updates/3/i386/yum-2.2.0-0.fc3.noarch.rpm
Вспомогательные опции: -v
– подробный вывод сообщений, -h
– показ индикатора прогресса установки.
rpm -ivh <файл>...
– установить пакет(ы)
rpm -Uvh <файл>...
– обновить пакет(ы), если не установлены – установить
rpm -Fvh <файл>...
– обновить уже установленный(е) пакет(ы)
rpm -e <пакет>...
– удалить пакет(ы)
Вспомогательные опции: -a
– все установленные пакеты, -p
– информация о файле rpm (в примерах будут приведены не везде).
rpm -q <пакет>...
– проверка на наличие установленного пакета и его версии
rpm -qa
- список всех пакетов
rpm -qi <пакет>...
– DESCRIPTION пакета
rpm -qip <файл>...
– DESCRIPTION файла
rpm -qR <пакет>...
– REQUIERS пакета
rpm -ql <пакет>...
– список файлов пакета
rpm -qf <файл_в_файловой_системе>...
– определение принадлежности произвольного файла к одному из установленных пакетов
Файлы, размещенные в rpm пакете, сопровождаются вычисленной контрольной суммой и, как правило, подписаны цифровой подписью сборщика пакета. После установки пакета контрольные суммы и подписи сохраняются в базе установленных пакетов. Эти вспомогательные данные позволяют выполнить несколько проверок, например, можно проверить, что пакет создан доверенным издателем и что файлы пакета не были подменены после установки.
Первая проверка очень важна при скачивании пакетов из интернета, а вторая при подозрении на взлом компьютера.
Публичные ключи для проверки подписи автоматически устанавливаются при установке из дистрибутива, а также полуавтоматически добавляются при установке rpm пакетов для подключения репозиториев yum
. Файлы с ключами в CentOS устанавливаются в каталог /etc/pki/rpm-gpg/
. Можно добавить ключ вручную, указав путь к локальному файлу или его url. Файл с ключем должен иметь текстовый формат 'ASCII armored'
rpm --import PUBKEY-file
После инсталляции к ключам применимы те же команды, что и к установленным пакетам
rpm -qa gpg-pubkey*
– список всех ключей
rpm -qi gpg-pubkey-db42a60e
– информация (в том числе имя хозяина) о конкретном ключе
rpm -e gpg-pubkey-db42a60e
– удаление ключа
Проверка файла пакета на целостность
rpm --checksig <файл>
Проверка установленного пакета на целостность
rpm --verify <пакет>
После выполнения этой команды будет выдан список изменившихся файлов с указанием, что именно в них поменялось. Информация о типе изменений состоит из строки аббревиатур, включающих:
Программа rpm2cpio
извлекает файлы из RPM пакета в формате архива cpio
.
Для распаковки файлов вместе со структурой каталогов используется команда cpio
с опциями -i
– распаковать и -d
– создать каталоги:
rpm2cpio <файл.rpm> | cpio -i -d
Если необходимо сохранить установленный пакет в файл, то можно воспользоваться программой rpmrebuild
:
rpmrebuild <package>
Eсли пакет уже установлен и его надо переустановить или необходимо понизить версию пакета, то можно к командам инсталяции или обновления добавить опцию --force
.
Если установка или удаление пакета формально нарушает зависимости, но известно, что все будет хорошо, то используется опция --nodeps
.
Менеджер пакетов Apt
(Advanced Package Tool) надстроен над утилитой dpkg
и предназначен для кэширования списков пакетов из локальных и сетевых репозиториев, вычисления зависимостей между пакетами и автоматизированных скачивания и установки пакетов.
Функциональность менеджера пакетов распределена между несколькими командами (apt-get
, apt-cache
и др.).
apt-cache search Midnight
- поиск пакета по регулярному выражению в названии или кратком описании
apt-cache show pkg
- основные сведения о пакете
apt-get update
- обновление кэша
apt-get upgrade
- обновление установленных пакетов до последней версии
apt-get install pkg
- установка пакета
apt-get remove pkg
- удаление пакета
apt-cdrom add
- добавить репозиторий на смонтированном CD
yum search <строка>
– поиск текстовой строки в названиях пакетов и комментариях
yum install <пакет>...
– установка пакетов и всего для них необходимого
yum install <файл.rpm>
– установка из локального файла
yum upgrade <пакет>...
– обновление пакетов до самой последней версии
yum downgrade <пакет-версия>...
– откат обновления до определённой версии
yum remove <пакет>...
– удаление пакета. Если этот пакет необходим другим, то будут удалены все
yum list z\*
– список пакетов на букву z. Пакеты разбиты на установленные и доступные.
yum info <пакет>
– просмотр информации о пакете
yum repolist
– список всех репозиториев
yum clean
– очистка кэша
Описания репозиториев находятся в каталоге /etc/yum.repos.d/
в файлах с расширением .repo
.
Формат файла
#в одном файле могут быть описаны несколько репозиториев, каждый размещается в своей секции
[epel]
# человекочитаемое имя. $basearch - архитектура процессора, $releasever - версия дистрибутива
name=Extra Packages for Enterprise Linux $releasever - $basearch
#местоположение репозитория; если репозиторий локальный, то url может иметь вид
#baseurl=file:///var/repos/myrepo
baseurl=http://download.fedoraproject.org/pub/epel/$releasever/$basearch
#если у проекта есть несколько зеркал, то baseurl может быть заменен на путь к списку зеркал в формате xml
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
#репозиторий можно отключить, поставив enabled=0
enabled=1
#надо ли проверять цифровую подпись пакетов и путь к файлу ключа
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
#если мы предпочитаем получать определённые пакеты из другого репозитория,
# то можем выборочно отключить их в этом
exclude=nagios*
<dir>
Проверить, что установлен пакет createrepo, и установить, если необходимо
rpm -q createrepo
sudo yum install createrepo
Создать XML данные репозитория
createrepo <dir>