QuickStart/PkgManagment: различия между версиями

Материал из ALT Linux Wiki
мНет описания правки
 
(не показаны 72 промежуточные версии 2 участников)
Строка 1: Строка 1:
{{Note|Статья переезжает на [[Управление пакетами new]]}}
'''Основы управления пакетами'''
'''Основы управления пакетами'''
{{stub}}


== Почему так важно уметь пользоваться пакетным менеджером? ==
== Почему так важно уметь пользоваться пакетным менеджером? ==
Строка 7: Строка 6:
Чтобы научиться управлять '''любым дистрибутивом Linux''', первым делом необходимо освоить работу с его '''пакетным менеджером'''. Пакетный менеджер – самая важная отличительная черта любой Linux-системы, '''ALT''' – не исключение. Почему так важно им владеть? Всё просто: 90% ответов на вопросы управления системой даёт пакетный менеджер. За редким исключением практически вся система построена на пакетах, каждый из которых является своего рода архивом файлов. Таким образом, почти все файлы, каталоги и ссылки в системе принадлежат каким-то пакетам.
Чтобы научиться управлять '''любым дистрибутивом Linux''', первым делом необходимо освоить работу с его '''пакетным менеджером'''. Пакетный менеджер – самая важная отличительная черта любой Linux-системы, '''ALT''' – не исключение. Почему так важно им владеть? Всё просто: 90% ответов на вопросы управления системой даёт пакетный менеджер. За редким исключением практически вся система построена на пакетах, каждый из которых является своего рода архивом файлов. Таким образом, почти все файлы, каталоги и ссылки в системе принадлежат каким-то пакетам.


=== Какому пакету принадлежит этот файл? ===
Приведём несколько примеров…
 
<pre>
$ rpm -qf /etc/bashrc
bash-3.2.57-alt1
</pre>
 
То есть, файл {{path|/etc/bashrc}} попал в систему в результате установки пакета {{pkg|bash}}. В настоящий момент этот пакет установлен (версия '''3.2.57''', релиз '''alt1''').
 
=== Какие файлы входят в этот пакет? ===
 
<pre>
$ rpm -ql bash
$ rpm -ql bash-3.2.57
$ rpm -ql bash-3.2.57-alt1
</pre>
 
=== Где искать конфигурационные файлы этого пакета? ===
 
<pre>
$ rpm -ql bash | grep /etc/
/etc/bashrc
/etc/bashrc.d
/etc/bashrc.d/alias.sh
</pre>
 
Оказывается, их всего ДВА! И оба откроют вам тонкости работы с командной строкой, специфичные для дистрибутивов '''АЛЬТ''', поскольку там – принятые сокращения. Так, вы узнаете, что вместо длинного «'''df -h -x supermount'''» достаточно скомандовать просто «'''df'''». А вместо «'''ls -lapt'''» – просто «'''l'''».
 
=== Где искать исполняемые файлы этого пакета? ===
 
<pre>
$ rpm -ql bash | grep /bin/
/bin/bash
/bin/bash2
/bin/rbash
/usr/bin/bashbug
</pre>
 
=== Что отвечает за запуск служб в этом пакете? ===
 
<pre>
$ rpm -ql udev | grep /etc/rc.d/init.d/
/etc/rc.d/init.d/udevd


$ rpm -ql udev | grep /lib/systemd/system/
</pre>


=== Где почитать документацию к этому пакету? ===
=== Где почитать документацию к этому пакету? ===
Строка 70: Строка 24:
/usr/share/man/man8/udevd.8.xz
/usr/share/man/man8/udevd.8.xz


$ rpm -qd bash
$ less /usr/share/doc/bash-3.2.57/INTRO
$ less /usr/share/doc/bash-3.2.57/INTRO
$ info bash
$ info bash
Строка 76: Строка 31:


Кроме того, документация может быть упакована в отдельный пакет, а этот пакет ещё не установлен. Проверить довольно легко: обычно это такое же имя пакета с допиской «'''-doc'''».
Кроме того, документация может быть упакована в отдельный пакет, а этот пакет ещё не установлен. Проверить довольно легко: обычно это такое же имя пакета с допиской «'''-doc'''».
=== Есть ли отдельный под-пакет с документацией? ===
<pre>
$ apt-cache search bash | grep doc
bash-doc - Documentation for the GNU Bourne Again SHell
bash4-doc - Documentation for the GNU Bourne Again SHell
$ rpm -q bash-doc
предупреждение: пакет bash-doc не установлен
$ rpm -q bash4-doc
предупреждение: пакет bash4-doc не установлен
</pre>


=== Где найти man-страницы на русском языке? ===
=== Где найти man-страницы на русском языке? ===
Строка 93: Строка 63:
# О возможно ещё не установленном пакете:
# О возможно ещё не установленном пакете:
$ apt-cache show bash
$ apt-cache show bash
# Об указанном пакете, который ещё не установлен:
$ rpm -qip /ALT/p8/files/x86_64/RPMS/kernel-image-un-def-*.rpm
</pre>
</pre>


== Как найти пакет по имени файла, которого нет в системе? ==
== Основные инструменты для управления пакетами ==
 
=== Synaptic ===
 
'''Synaptic''' – это '''графический интерфейс''' к программе управления пакетами '''APT'''. С помощью '''Synaptic''' можно управлять источниками пакетов (репозиториями), получать сведения о доступных пакетах, устанавливать/удалять/обновлять пакеты, производить поиск по ключевым словам среди доступных пакетов. Подробный обзор работы с '''Synaptic''' можно почитать [[Synaptic|ЗДЕСЬ]] и [[Управление пакетами#Synaptic|ЗДЕСЬ]].
 
Однако по умолчанию эта программа может быть не установлена. Например, на серверах графического интерфейса может не быть совсем. Кроме того, графический интерфейс не может обеспечить всей гибкости и возможностей автоматизации, предоставляемой утилитами командной строки. Поэтому далее будет рассмотрена работа с '''пакетным менеджером''' только в командной строке.
 
=== rpm ===
 
'''RPM''' ('''R'''edhat '''P'''ackage '''M'''anager) – низкоуровневая утилита командной строки, используемая для установки, удаления, обновления, выполнения запросов и проверки целостности пакетов программного обеспечения. Все остальные утилиты управления пакетами в конечном итоге работают через RPM. Важно понимать: сам RPM ничего не знает о репозиториях, он оперирует только файлами, пакетами и их зависимостями, для чего использует собственную Базу Данных. Информация, хранимая в этой БД, в идеале должна соответствовать фактической картине внутри файловой системы, иначе проблем не избежать. В дистрибутивах '''ALT Linux''' RPM хранит свою БД в {{path|/var/lib/rpm}}. В один момент времени в системе должен быть запущен лишь один процесс, обращающийся к БД RPM, другие запросы блокируются.
 
Пакеты могут предоставлять (провайдить) что-либо, требовать (запрашивать) что-либо и конфликтовать с чем-либо, образуя таким образом систему межпакетных зависимостей (dependencies). В '''ALT Linux''' можно установить пакет, если удовлетворены все его зависимости и нет конфликтов с другими уже установленными пакетами и объектами файловой системы. Из этого следует, что никакими системными файлами нельзя манипулировать непосредственно (вручную), никакое программное обеспечение не стоит устанавливать в обход штатного '''пакетного менеджера''', например, разворачивая tar'болы, скаченные из Интернета.
 
Впрочем, могут быть исключения: АЛЬТ'овый RPM позволяет устанавливать RPM-пакеты из других дистрибутивов, но только на выше оговоренных условиях. Так, очень часто проприетарный софт может распаковываться в {{path|/opt}}, {{path|/usr/local/bin}}, итп, и это не должно вызывать конфликтов с системным ПО из официального репозитория АЛЬТ. Подразумевается, что вы доверяете устанавливаемому из сторонних источников и сами несёте ответственность за всё установленное.
 
Пакеты всегда содержат определённую мета-информацию, на которую ориентируется утилита rpm. Также пакеты могут содержать какие-то файлы, каталоги и симлинки, но это необязательно. Так называемые мета-пакеты никогда не содержат объектов файловой системы, в них перечисляются только зависимости на другие пакеты.
 
Основные режимы работы утилиты '''rpm''':
 
* '''Install''': установка пакетов
* '''Remove''': удаление пакетов
* '''Upgrade''': обновление пакетов
* '''Query''': выполнение запросов
* '''Verify''': проверка целостности пакетов
 
Наиболее часто встречающиеся на практике команды '''rpm''':
 
Русский перевод man-страницы '''rpm''' доступен, например, [http://www.opennet.ru/man.shtml?category=8&russian=&topic=rpm ЗДЕСЬ].
 
=== APT и apt-config ===
 
'''APT''' ('''A'''dvanced '''P'''ackaging '''T'''ool) используется в '''ALT Linux''' для установки, обновления, удаления программных пакетов, для транзакционного обновления всей системы, как '''основной высокоуровневый инструмент командной строки''', работающий не только с файлами RPM-пакетов, но и (прежде всего!) на уровне подключенных репозиториев. APT включает в себя несколько инструментов, в том числе, рассматриваемых далее. И, хотя мычит АЛЬТ'овый APT не хуже прародителя ('''apt-get moo'''), прозван недоброжелателями '''гремучей смесью''' за свою способность удовлетворять такие необычные запросы:


<pre>
<pre>
$ apf search wimlib-imagex
# apt-get install /path/to/foo-1.0-i586.rpm
wimtools
# apt-get install /usr/bin/mcedit
</pre>
</pre>


Но это не единственный способ. И по умолчанию '''apf''' не установлен, а после установки требуется его настройка.
APT на АЛЬТ'е хранит кэш скаченных из сети пакетов в {{path|/var/cache/apt/archives}}, так же, как и в Debian'е. И точно так же можно найти кэш скаченных индексов в {{path|/var/lib/apt/lists}}. Вся конфигурация APT'а хранится в {{path|/etc/apt}}, главный конфигурационный файл: {{path|/etc/apt/apt.conf}}, списки подключенных репозиториев хранятся в {{path|/etc/apt/sources.list}} и {{path|/etc/apt/sources.list.d/*}}. Посмотреть текущую конфигурацию APTможно командой:


...
<pre>$ apt-config dump</pre>


== Пакеты с ядром и модулями ==
Более подробно почитать про APT и устройство репозиториев на АЛЬТ'е можно (и нужно обязательно!) [[APT в ALT Linux|на этой ВиКи]] и в соответствующей справочной документации.


=== Как посмотреть установленные пакеты с модулями ядра? ===
=== apt-repo ===
 
[[Apt-repo|apt-repo]] – весьма полезная утилита, надстройка над APT'ом для удобного управления источниками (репозиториями). Типовые примеры использования:


<pre>
<pre>
# Текущее ядро
# Показать список подключенных репозиториев
$ uname -r
$ apt-repo
4.9.131-std-def-alt0.M80P.1
rpm [p8] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p8/branch/x86_64 classic
rpm [p8] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p8/branch/x86_64-i586 classic
rpm [p8] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p8/branch/noarch classic


# Пакеты с модулями ядра
# Очистить все источники
$ rpm -qa | grep -E '^kernel\-(image|modules)\-' | grep 'std-def'
# apt-repo rm all
kernel-modules-bcmwl-std-def-6.30.223.248-alt13.264579.0.M80P.1
# apt-repo clean
kernel-modules-virtualbox-std-def-5.1.30-alt2.264579.0.M80P.1
 
kernel-modules-zfs-std-def-0.7.9-alt1.264579.0.M80P.1
# Добавить стандартный репозиторий P8
kernel-image-std-def-4.9.131-alt0.M80P.1
# apt-repo add p8
kernel-modules-kvm-std-def-4.9.131-alt0.M80P.1
 
kernel-modules-staging-std-def-4.9.131-alt0.M80P.1
# Удалить стандартный репозиторий P8 из источников
kernel-modules-drm-std-def-4.9.131-alt0.M80P.1
# apt-repo rm p8
kernel-modules-v4l-std-def-4.9.131-alt0.M80P.1
 
# Добавить указанный репозиторий
# apt-repo add "/ALT/p8"
# apt-repo add "ftp://ftp.altlinux.org/pub/distributions/ALTLinux/p8/branch"
 
# Добавить временный микро-репозиторий из тестового задания,
# после чего обновить индексы APT'а и выполнить точечную установку
# указанных пакетов (подразумевается, что тестовое задание может
# исправить баг в этих пакетах, но нам не надо устанавливать все
# пакеты, которые есть в этом микро-репозитории)
#
# apt-repo add 123456 && apt-get update && apt-get install PACKAGES
 
# Добавить временный микро-репозиторий из тестового задания,
# после чего обновить индексы APT'а и выполнить установку
# ВСЕХ пакетов из указанного микро-репозитория)
#
# apt-repo test 123456
</pre>
</pre>


=== Сопоставление модулей ядра файлам и пакетам ===
Если вдуматься, синтаксис '''apt-repo add/test task taskid''' чем-то напоминает '''apt-add-repository ppa:ppa-name''' из Debian-подобных систем, но проще в использовании и не приводит к неуправляемому замусориванию системы.
 
=== apt-cache ===
 
Инструмент для поиска и извлечения полезной информации из индекса подключенных репозиториев. Наиболее часто используемые на практике команды:


<pre>
<pre>
# Какие модули ядра сейчас используются/загружены?
# Поиск по выражению или части названия пакета
# lspci -nnk
$ apt-cache search EXPRESSION
 
# Вывод подробной информации о пакетах
$ apt-cache show PACKAGES
 
# Проверка системы на наличие неудовлетворённых зависимостей (т.н. анмет)
$ apt-cache unmet
 
# Вывод списка установленных пакетов, непосредственно зависящих от указанного
$ apt-cache showpkg PACKAGE
 
# Вывод графа зависимостей указанного пакета
$ apt-cache depends PACKAGE
 
# Вывод обратного графа зависимостей от указанного пакета для всего индекса
$ apt-cache whatdepends PACKAGE
 
# Получение справки
$ apt-cache --help
$ man apt-cache
 
# Вывод списка установленных пакетов, отсутствующих в репозитории (возможно устаревших)
$ apt-cache list-extras
 
# Вывод списка установленных пакетов, от которых не зависят никакие другие пакеты
# (возможно, установленных по зависимостям, которые уже неактуальны, однако прежде,
# чем их удалять, стоит взвесить все ЗА и ПРОТИВ)
#
$ apt-cache list-nodeps
</pre>
 
Две последние команды требуют наличия в системе установленного пакета {{pkg|apt-scripts}}. Следует также обратить внимание, что АЛЬТ'овый APT по умолчанию ищет информацию не только в названиях пакетов, но и в описаниях, вследствие чего оказывается более «говорливым» своего прародителя. Уменьшить излишнюю «шумливость» можно фильтрацией вывода, например, так:
 
<pre>$ apt-cache search bash | grep -E ^bash</pre>
 
либо так:
<pre>$ apt-cache search --names-only ^bash</pre>
 
=== Другие инструменты ===
 
АЛЬТ'овый '''less''' «из коробки» умеет показывать содержимое RPM-пакетов ('''rpm -qip''' && '''rpm -qlp'''):
<pre>$ less /path/to/foo-1.0-i586.rpm</pre>
 
То же самое касается дефолтных настроек '''Midnight Commander''''а ({{path|/usr/bin/mc}}) – подсвечивается синтаксис .spec-файлов, можно заходить внутрь RPM-пакетов и изучать их содержимое. Если нужно распаковать содержимое пакета в текущий каталог «ручками», без установки его в систему, выполните следующую команду:
 
<pre>$ rpm2cpio /path/to/foo-1.0-i586.rpm | cpio -idmv</pre>
 
Весьма полезная утилита [[Sisyphus-mirror|sisyphus-mirror]] поможет с организацией локальных зеркал и даже их архивами. Как и в Debian-подобных системах, в АЛЬТ'е тоже есть свой [[APT в ALT Linux/aptitude|aptitude]], но насколько он рабочий, судить не берусь. Судя по ченжлогу, не обновлялся очень давно, так что в любом случае не рекомендовал бы с него начинать.
 
Есть много других пакетов (утилит), так или иначе связанных с управлением пакетами, например, {{pkg|apt-scripts}}, {{pkg|apt-repo-tools}}, '''apf''', '''epm''', подробное описание которых выходит за рамки основ пакетного менеджмента. Кое-что из этого уже упоминалось выше, о чём-то будет сказано дальше. Вы можете изучить это самостоятельно после того, как освоите наиболее важные инструменты, описанные ранее: '''apt-repo''', '''apt-cache''', '''apt-get''' и '''rpm'''.
 
== Как найти пакет по имени файла, если пакет не установлен? ==
 
Предположим, мы знаем, что ищем программу '''partclone.ntfs'''. Но другие инструменты поиска успеха не дали: пакета с таким названием в репозитории не оказалось.
<pre>$ apt-cache search partclone.ntfs</pre>
Как быть? Как найти точное название пакета, если известна часть имени или пути файла, в том числе, исполняемого?
 
=== С помощью apf ===
 
По умолчанию пакет {{pkg|apf}} (аналог '''apt-file''' из Debian-based дистрибутивов) не установлен, а после установки требуется его настройка.
 
<pre>
$ su-
# apt-get update
# apt-get install apf
# $EDITOR /etc/apf/apf.conf
# apf update
</pre>
 
По умолчанию одноимённая команда '''apf''' будет искать файлы в Сизифе. Отредактируйте конфигурацию {{pkg|apf}}, указав нужный источник, например так:
 
<pre>
# P8
$index{'noarch'} = "rsync://rsync.altlinux.ru/ALTLinux/p8/branch/noarch/base/contents_index";
$index{'x86_64'} = "rsync://rsync.altlinux.ru/ALTLinux/p8/branch/x86_64/base/contents_index";
$index{'i586'}  = "rsync://rsync.altlinux.ru/ALTLinux/p8/branch/i586/base/contents_index";
</pre>
 
Или так:
 
<pre>
# Local mirror
$index{'noarch'} = "/ALT/p8/noarch/base/contents_index";
$index{'x86_64'} = "/ALT/p8/x86_64/base/contents_index";
$index{'i586'}  = "/ALT/p8/i586/base/contents_index";
</pre>
 
После обновления индексов ('''apf update''' под рутом) можно искать интересующую информацию:
 
<pre>
$ apf search partclone.ntfs
partclone
</pre>
 
И это не единственный способ!
 
=== С помощью epm ===
 
По умолчанию пакет {{pkg|eepm}} не установлен. Ставим его:
 
<pre>
$ su-
# apt-get update
# apt-get install eepm
</pre>
 
Теперь можно искать интересующее:
 
<pre>
$ epm -sf partclone.ntfs
00:1f.6 Ethernet controller [0200]: Intel Corporation Ethernet Connection (2) I219-LM [8086:15b7] (rev 31)
partclone: /usr/sbin/partclone.ntfs
Subsystem: Intel Corporation Device [8086:2064]
Kernel driver in use: e1000e
$ lsmod | grep e1000e
</pre>
e1000e                188416  0
ptp                    20480  1 e1000e


# Подробная информация о модуле ядра
Здесь нет опечатки: программа '''epm''' входит в состав пакета {{pkg|eepm}}!
# modinfo e1000e
 
filename:      /lib/modules/4.9.131-std-def-alt0.M80P.1/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko.gz
=== Командой grep ===
 
Найти нужную информацию можно и обычной командой '''grep''' по индексному файлу, не устанавливая никаких дополнительных пакетов! Предположим, вы используете локальное зеркало, доступное через {{path|/ALT/p8}}.
 
<pre>
# Поиск по индексу только для x86_64:
$ grep partclone.ntfs /ALT/p8/x86_64/base/contents_index | awk '{print $2}' | sort -u
partclone
 
# Поиск по всему репозиторию p8:
$ grep partclone.ntfs /ALT/p8/{i586,x86_64,noarch}/base/contents_index | awk '{print $2}' | sort -u
partclone
</pre>
 
Если локального зеркала нет, нужный файлик сначала скачиваем:


# К какому пакету относится модуль ядра?
<pre>
# rpm -qf $(modinfo e1000e | head -n1 | awk '{print $2}')
$ wget https://mirror.yandex.ru/altlinux/p8/branch/x86_64/base/contents_index
kernel-image-std-def-4.9.131-alt0.M80P.1
</pre>
</pre>


В последней команде мы взяли из вывода '''modinfo''' первую строку ('''head -n1''') и отщипнули от неё второе по счёту поле ('''awk '{print $2}'''') с полным путём к файлу модуля. Этот путь к файлу мы передали в качестве параметра команде '''rpm'''. В данном случае нам сообщили, что модуль '''e1000e''' входит в пакет самого ядра. Но далеко не всегда это так и если сетевая карта не работает, возможно, в системе просто не установлен пакет с нужным модулем.
== Итоги ==


Продолжение следует…
Теперь вы знаете '''ОСНОВЫ''' и можете переходить к практике. Изучение '''основ управления пакетами''' не заменяет необходимости самолично глубоко и досконально изучить всё, что связано с пакетным менеджментом. Данный раздел содержит подсказки, где и как можно найти недостающую информацию. Почему это важно, говорилось в самом начале: 90% управления всей системой обеспечивается описанным здесь инструментарием. Вам этого мало? Тогда продолжим изучение…


[[Категория:Руководства]]
[[Категория:Руководства]]
[[Категория:FAQ]]
[[Категория:FAQ]]

Текущая версия от 17:31, 23 мая 2023

Примечание: Статья переезжает на Управление пакетами new

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

Почему так важно уметь пользоваться пакетным менеджером?

Чтобы научиться управлять любым дистрибутивом Linux, первым делом необходимо освоить работу с его пакетным менеджером. Пакетный менеджер – самая важная отличительная черта любой Linux-системы, ALT – не исключение. Почему так важно им владеть? Всё просто: 90% ответов на вопросы управления системой даёт пакетный менеджер. За редким исключением практически вся система построена на пакетах, каждый из которых является своего рода архивом файлов. Таким образом, почти все файлы, каталоги и ссылки в системе принадлежат каким-то пакетам.

Приведём несколько примеров…


Где почитать документацию к этому пакету?

$ rpm -ql bash | grep /usr/share/doc
…
/usr/share/doc/bash-3.2.57/INTRO
…

$ rpm -ql bash | grep /usr/share/info
/usr/share/info/bash.info.xz

$ rpm -ql udev | grep man
…
/usr/share/man/man8/udevd.8.xz

$ rpm -qd bash
$ less /usr/share/doc/bash-3.2.57/INTRO
$ info bash
$ man 8 udev

Кроме того, документация может быть упакована в отдельный пакет, а этот пакет ещё не установлен. Проверить довольно легко: обычно это такое же имя пакета с допиской «-doc».

Есть ли отдельный под-пакет с документацией?

$ apt-cache search bash | grep doc
bash-doc - Documentation for the GNU Bourne Again SHell
bash4-doc - Documentation for the GNU Bourne Again SHell
…

$ rpm -q bash-doc
предупреждение: пакет bash-doc не установлен

$ rpm -q bash4-doc
предупреждение: пакет bash4-doc не установлен

Где найти man-страницы на русском языке?

$ apt-cache search man-pages | grep ru
man-pages-ru - Русские переводы страниц руководства по ОС GNU/*/Linux
man-pages-ru-extra - Дополнительный набор русских переводов страниц руководства по ОС GNU/*/Linux

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

# Об уже установленном пакете:
$ rpm -qi bash

# О возможно ещё не установленном пакете:
$ apt-cache show bash

# Об указанном пакете, который ещё не установлен:
$ rpm -qip /ALT/p8/files/x86_64/RPMS/kernel-image-un-def-*.rpm

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

Synaptic

Synaptic – это графический интерфейс к программе управления пакетами APT. С помощью Synaptic можно управлять источниками пакетов (репозиториями), получать сведения о доступных пакетах, устанавливать/удалять/обновлять пакеты, производить поиск по ключевым словам среди доступных пакетов. Подробный обзор работы с Synaptic можно почитать ЗДЕСЬ и ЗДЕСЬ.

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

rpm

RPM (Redhat Package Manager) – низкоуровневая утилита командной строки, используемая для установки, удаления, обновления, выполнения запросов и проверки целостности пакетов программного обеспечения. Все остальные утилиты управления пакетами в конечном итоге работают через RPM. Важно понимать: сам RPM ничего не знает о репозиториях, он оперирует только файлами, пакетами и их зависимостями, для чего использует собственную Базу Данных. Информация, хранимая в этой БД, в идеале должна соответствовать фактической картине внутри файловой системы, иначе проблем не избежать. В дистрибутивах ALT Linux RPM хранит свою БД в /var/lib/rpm. В один момент времени в системе должен быть запущен лишь один процесс, обращающийся к БД RPM, другие запросы блокируются.

Пакеты могут предоставлять (провайдить) что-либо, требовать (запрашивать) что-либо и конфликтовать с чем-либо, образуя таким образом систему межпакетных зависимостей (dependencies). В ALT Linux можно установить пакет, если удовлетворены все его зависимости и нет конфликтов с другими уже установленными пакетами и объектами файловой системы. Из этого следует, что никакими системными файлами нельзя манипулировать непосредственно (вручную), никакое программное обеспечение не стоит устанавливать в обход штатного пакетного менеджера, например, разворачивая tar'болы, скаченные из Интернета.

Впрочем, могут быть исключения: АЛЬТ'овый RPM позволяет устанавливать RPM-пакеты из других дистрибутивов, но только на выше оговоренных условиях. Так, очень часто проприетарный софт может распаковываться в /opt, /usr/local/bin, итп, и это не должно вызывать конфликтов с системным ПО из официального репозитория АЛЬТ. Подразумевается, что вы доверяете устанавливаемому из сторонних источников и сами несёте ответственность за всё установленное.

Пакеты всегда содержат определённую мета-информацию, на которую ориентируется утилита rpm. Также пакеты могут содержать какие-то файлы, каталоги и симлинки, но это необязательно. Так называемые мета-пакеты никогда не содержат объектов файловой системы, в них перечисляются только зависимости на другие пакеты.

Основные режимы работы утилиты rpm:

  • Install: установка пакетов
  • Remove: удаление пакетов
  • Upgrade: обновление пакетов
  • Query: выполнение запросов
  • Verify: проверка целостности пакетов

Наиболее часто встречающиеся на практике команды rpm:

Русский перевод man-страницы rpm доступен, например, ЗДЕСЬ.

APT и apt-config

APT (Advanced Packaging Tool) используется в ALT Linux для установки, обновления, удаления программных пакетов, для транзакционного обновления всей системы, как основной высокоуровневый инструмент командной строки, работающий не только с файлами RPM-пакетов, но и (прежде всего!) на уровне подключенных репозиториев. APT включает в себя несколько инструментов, в том числе, рассматриваемых далее. И, хотя мычит АЛЬТ'овый APT не хуже прародителя (apt-get moo), прозван недоброжелателями гремучей смесью за свою способность удовлетворять такие необычные запросы:

# apt-get install /path/to/foo-1.0-i586.rpm
# apt-get install /usr/bin/mcedit

APT на АЛЬТ'е хранит кэш скаченных из сети пакетов в /var/cache/apt/archives, так же, как и в Debian'е. И точно так же можно найти кэш скаченных индексов в /var/lib/apt/lists. Вся конфигурация APT'а хранится в /etc/apt, главный конфигурационный файл: /etc/apt/apt.conf, списки подключенных репозиториев хранятся в /etc/apt/sources.list и /etc/apt/sources.list.d/*. Посмотреть текущую конфигурацию APT'а можно командой:

$ apt-config dump

Более подробно почитать про APT и устройство репозиториев на АЛЬТ'е можно (и нужно обязательно!) на этой ВиКи и в соответствующей справочной документации.

apt-repo

apt-repo – весьма полезная утилита, надстройка над APT'ом для удобного управления источниками (репозиториями). Типовые примеры использования:

# Показать список подключенных репозиториев
$ apt-repo
rpm [p8] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p8/branch/x86_64 classic
rpm [p8] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p8/branch/x86_64-i586 classic
rpm [p8] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p8/branch/noarch classic

# Очистить все источники
# apt-repo rm all
# apt-repo clean

# Добавить стандартный репозиторий P8
# apt-repo add p8

# Удалить стандартный репозиторий P8 из источников
# apt-repo rm p8

# Добавить указанный репозиторий
# apt-repo add "/ALT/p8"
# apt-repo add "ftp://ftp.altlinux.org/pub/distributions/ALTLinux/p8/branch"

# Добавить временный микро-репозиторий из тестового задания,
# после чего обновить индексы APT'а и выполнить точечную установку
# указанных пакетов (подразумевается, что тестовое задание может
# исправить баг в этих пакетах, но нам не надо устанавливать все
# пакеты, которые есть в этом микро-репозитории)
#
# apt-repo add 123456 && apt-get update && apt-get install PACKAGES

# Добавить временный микро-репозиторий из тестового задания,
# после чего обновить индексы APT'а и выполнить установку
# ВСЕХ пакетов из указанного микро-репозитория)
#
# apt-repo test 123456

Если вдуматься, синтаксис apt-repo add/test task taskid чем-то напоминает apt-add-repository ppa:ppa-name из Debian-подобных систем, но проще в использовании и не приводит к неуправляемому замусориванию системы.

apt-cache

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

# Поиск по выражению или части названия пакета
$ apt-cache search EXPRESSION

# Вывод подробной информации о пакетах
$ apt-cache show PACKAGES

# Проверка системы на наличие неудовлетворённых зависимостей (т.н. анмет)
$ apt-cache unmet

# Вывод списка установленных пакетов, непосредственно зависящих от указанного
$ apt-cache showpkg PACKAGE

# Вывод графа зависимостей указанного пакета
$ apt-cache depends PACKAGE

# Вывод обратного графа зависимостей от указанного пакета для всего индекса
$ apt-cache whatdepends PACKAGE

# Получение справки
$ apt-cache --help
$ man apt-cache

# Вывод списка установленных пакетов, отсутствующих в репозитории (возможно устаревших)
$ apt-cache list-extras

# Вывод списка установленных пакетов, от которых не зависят никакие другие пакеты
# (возможно, установленных по зависимостям, которые уже неактуальны, однако прежде,
# чем их удалять, стоит взвесить все ЗА и ПРОТИВ)
#
$ apt-cache list-nodeps

Две последние команды требуют наличия в системе установленного пакета apt-scripts. Следует также обратить внимание, что АЛЬТ'овый APT по умолчанию ищет информацию не только в названиях пакетов, но и в описаниях, вследствие чего оказывается более «говорливым» своего прародителя. Уменьшить излишнюю «шумливость» можно фильтрацией вывода, например, так:

$ apt-cache search bash | grep -E ^bash

либо так:

$ apt-cache search --names-only ^bash

Другие инструменты

АЛЬТ'овый less «из коробки» умеет показывать содержимое RPM-пакетов (rpm -qip && rpm -qlp):

$ less /path/to/foo-1.0-i586.rpm

То же самое касается дефолтных настроек Midnight Commander'а (/usr/bin/mc) – подсвечивается синтаксис .spec-файлов, можно заходить внутрь RPM-пакетов и изучать их содержимое. Если нужно распаковать содержимое пакета в текущий каталог «ручками», без установки его в систему, выполните следующую команду:

$ rpm2cpio /path/to/foo-1.0-i586.rpm | cpio -idmv

Весьма полезная утилита sisyphus-mirror поможет с организацией локальных зеркал и даже их архивами. Как и в Debian-подобных системах, в АЛЬТ'е тоже есть свой aptitude, но насколько он рабочий, судить не берусь. Судя по ченжлогу, не обновлялся очень давно, так что в любом случае не рекомендовал бы с него начинать.

Есть много других пакетов (утилит), так или иначе связанных с управлением пакетами, например, apt-scripts, apt-repo-tools, apf, epm, подробное описание которых выходит за рамки основ пакетного менеджмента. Кое-что из этого уже упоминалось выше, о чём-то будет сказано дальше. Вы можете изучить это самостоятельно после того, как освоите наиболее важные инструменты, описанные ранее: apt-repo, apt-cache, apt-get и rpm.

Как найти пакет по имени файла, если пакет не установлен?

Предположим, мы знаем, что ищем программу partclone.ntfs. Но другие инструменты поиска успеха не дали: пакета с таким названием в репозитории не оказалось.

$ apt-cache search partclone.ntfs

Как быть? Как найти точное название пакета, если известна часть имени или пути файла, в том числе, исполняемого?

С помощью apf

По умолчанию пакет apf (аналог apt-file из Debian-based дистрибутивов) не установлен, а после установки требуется его настройка.

$ su-
# apt-get update
# apt-get install apf
# $EDITOR /etc/apf/apf.conf
# apf update

По умолчанию одноимённая команда apf будет искать файлы в Сизифе. Отредактируйте конфигурацию apf, указав нужный источник, например так:

# P8
$index{'noarch'} = "rsync://rsync.altlinux.ru/ALTLinux/p8/branch/noarch/base/contents_index";
$index{'x86_64'} = "rsync://rsync.altlinux.ru/ALTLinux/p8/branch/x86_64/base/contents_index";
$index{'i586'}   = "rsync://rsync.altlinux.ru/ALTLinux/p8/branch/i586/base/contents_index";

Или так:

# Local mirror
$index{'noarch'} = "/ALT/p8/noarch/base/contents_index";
$index{'x86_64'} = "/ALT/p8/x86_64/base/contents_index";
$index{'i586'}   = "/ALT/p8/i586/base/contents_index";

После обновления индексов (apf update под рутом) можно искать интересующую информацию:

$ apf search partclone.ntfs
partclone

И это не единственный способ!

С помощью epm

По умолчанию пакет eepm не установлен. Ставим его:

$ su-
# apt-get update
# apt-get install eepm

Теперь можно искать интересующее:

$ epm -sf partclone.ntfs
…
partclone: /usr/sbin/partclone.ntfs
…

Здесь нет опечатки: программа epm входит в состав пакета eepm!

Командой grep

Найти нужную информацию можно и обычной командой grep по индексному файлу, не устанавливая никаких дополнительных пакетов! Предположим, вы используете локальное зеркало, доступное через /ALT/p8.

# Поиск по индексу только для x86_64:
$ grep partclone.ntfs /ALT/p8/x86_64/base/contents_index | awk '{print $2}' | sort -u
partclone

# Поиск по всему репозиторию p8:
$ grep partclone.ntfs /ALT/p8/{i586,x86_64,noarch}/base/contents_index | awk '{print $2}' | sort -u
partclone

Если локального зеркала нет, нужный файлик сначала скачиваем:

$ wget https://mirror.yandex.ru/altlinux/p8/branch/x86_64/base/contents_index

Итоги

Теперь вы знаете ОСНОВЫ и можете переходить к практике. Изучение основ управления пакетами не заменяет необходимости самолично глубоко и досконально изучить всё, что связано с пакетным менеджментом. Данный раздел содержит подсказки, где и как можно найти недостающую информацию. Почему это важно, говорилось в самом начале: 90% управления всей системой обеспечивается описанным здесь инструментарием. Вам этого мало? Тогда продолжим изучение…