QuickStart/PkgManagment

Материал из ALT Linux Wiki

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

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.


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

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

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

Какому пакету принадлежит этот файл?

$ rpm -qf /etc/bashrc
bash-3.2.57-alt1

То есть, файл /etc/bashrc попал в систему в результате установки пакета bash. В настоящий момент этот пакет установлен (версия 3.2.57, релиз alt1).

Какие файлы входят в этот пакет?

$ rpm -ql bash
$ rpm -ql bash-3.2.57
$ rpm -ql bash-3.2.57-alt1

Где искать конфигурационные файлы этого пакета?

$ rpm -ql bash | grep /etc/
/etc/bashrc
/etc/bashrc.d
/etc/bashrc.d/alias.sh

Оказывается, их всего ДВА! И оба откроют вам тонкости работы с командной строкой, специфичные для дистрибутивов АЛЬТ, поскольку там – принятые сокращения. Так, вы узнаете, что вместо длинного «df -h -x supermount» достаточно скомандовать просто «df». А вместо «ls -lapt» – просто «l».

Где искать исполняемые файлы этого пакета?

$ rpm -ql bash | grep /bin/
/bin/bash
/bin/bash2
/bin/rbash
/usr/bin/bashbug

Что отвечает за запуск служб в этом пакете?

$ rpm -ql udev | grep /etc/rc.d/init.d/
/etc/rc.d/init.d/udevd

$ rpm -ql udev | grep /lib/systemd/system/
…

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

$ 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

$ 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 -qa | sort

# То же самое, но только названия пакетов
$ rpm -qa --qf '%{NAME}\n' | sort

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

Synaptic

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

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

rpm

...

apt и apt-config

...

apt-repo

...

apt-cache

...

apt-get

...

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

...

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

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

С помощью apf

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

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

По умолчанию 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 wimlib-imagex
wimtools

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

С помощью epm

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

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

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

$ epm -sf wimlib-imagex
…
wimtools: /usr/bin/wimlib-imagex
…

Командой grep

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

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

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

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

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

Пакеты с ядром и модулями

Как узнать версию текущего ядра?

$ uname -r
4.9.131-std-def-alt0.M80P.1

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

$ rpm -qa | grep -E '^kernel\-(image|modules)\-' | grep 'std-def'
kernel-modules-bcmwl-std-def-6.30.223.248-alt13.264579.0.M80P.1
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
kernel-image-std-def-4.9.131-alt0.M80P.1
kernel-modules-kvm-std-def-4.9.131-alt0.M80P.1
kernel-modules-staging-std-def-4.9.131-alt0.M80P.1
kernel-modules-drm-std-def-4.9.131-alt0.M80P.1
kernel-modules-v4l-std-def-4.9.131-alt0.M80P.1

Сопоставление модулей ядра файлам и пакетам

# Какие модули ядра сейчас используются/загружены?
# lspci -nnk
…
00:1f.6 Ethernet controller [0200]: Intel Corporation Ethernet Connection (2) I219-LM [8086:15b7] (rev 31)
	Subsystem: Intel Corporation Device [8086:2064]
	Kernel driver in use: e1000e
…
$ lsmod | grep e1000e
e1000e                188416  0
ptp                    20480  1 e1000e

# Подробная информация о модуле ядра
# modinfo e1000e
filename:       /lib/modules/4.9.131-std-def-alt0.M80P.1/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko.gz
…

# К какому пакету относится модуль ядра?
# rpm -qf $(modinfo e1000e | head -n1 | awk '{print $2}')
kernel-image-std-def-4.9.131-alt0.M80P.1

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

Продолжение следует…