QuickStart/PkgManagment
Основы управления пакетами
Почему так важно уметь пользоваться пакетным менеджером?
Чтобы научиться управлять любым дистрибутивом 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 # Более простой способ: $ rpm -qc bash /etc/bashrc /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 $ 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
Как получить полный список установленных пакетов?
# Все пакеты с номерами версий и релизов в отсортированном виде $ rpm -qa | sort # То же самое, но только названия пакетов $ rpm -qa --qf '%{NAME}\n' | sort
Основные инструменты для управления пакетами
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:
# Установка пакета из файла (в системе foo ещё не установлен) # rpm -ivh foo-1.0-i586.rpm # Обновление пакета из файла (если более старый foo уже стоит, # он будет обновлён указанным, если не стоит, будет установлен) # rpm -Uvh foo-1.0-i586.rpm # Освежение версии пакета из файла (если более старый foo уже стоит, # он будет обновлён, если ещё не стоит, то ничего не изменится) # rpm -Fvh foo-1.0-i586.rpm # Замена или установка пакета (указанный foo окажется в системе # независимо от наличия и версий пакетов, вплоть до понижения версии) # rpm -Uvh --oldpackage foo-1.0-i586.rpm # Установка пакета без удовлетворения его зависимостей (плохая идея) # rpm -Uvh --nodeps foo-1.0-i586.rpm # Удаление ранее установленного пакета (достаточно указать только имя) # rpm -e foo # Удаление ранее установленного пакета без учёта зависимых от него пакетов # rpm -e --nodeps foo # Проверка целостности указанной программы $ rpm -Vf /usr/bin/passwd # Проверка целостности всех установленных пакетов # rpm -Va # Проверить, установлен ли пакет $ rpm -q foo-1.0 $ rpm -q foo # Вывести список установленных пакетов, относящихся к указанной группе $ rpm -qg System/Base # Показать 20 последних установленных пакетов $ rpm -qa --last | head -n20 # От каких пакетов зависит указанный (выводятся и другие зависимости) $ rpm -q --requires basesystem-sisyphus # Какие пакеты из установленных непосредственно зависят от указанного $ rpm -q --whatrequires bash # Что (какие зависимости) предоставляет указанный пакет $ rpm -q --whatprovides bash # Проверить цифровые подписи указанного пакета $ rpm --checksig foo-1.0-i586.rpm # Какому пакету принадлежит этот файл? $ rpm -qf /etc/bashrc # Какие файлы входят в этот пакет? $ rpm -ql bash-3.2.57-alt1 $ rpm -ql bash-3.2.57 $ rpm -ql bash # Где искать конфигурационные файлы этого пакета? $ rpm -qc bash # Вывод подробной информации об уже установленном пакете $ rpm -qi bash # Вывод подробной информации о ещё не установленном пакете rpm -qip foo-1.0-i586.rpm # Какие файлы входят в ещё не установленный пакет $ rpm -qlp foo-1.0-i586.rpm # Где находится документация к этому пакету? $ rpm -qd bash # Полный список установленных пакетов с номерами версий и релизов $ rpm -qa # То же самое, но только названия пакетов $ rpm -qa --qf '%{NAME}\n' # Вывод текущей конфигурации RPM $ rpm --showrc # Получение справки по другим возможностям и опциям $ rpm --help $ man rpm
Русский перевод man-страницы доступен, например, ЗДЕСЬ.
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 на АЛЬТ'е хранит кэш скаченных из сети пакетов в: /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-cache
Наиболее часто используемые команды:
$ apt-cache search EXPRESSION $ apt-cache show PACKAGENAME $ apt-cache unmet $ apt-cache list-extras $ apt-cache list-nodeps
apt-get
Наиболее часто используемые команды:
# apt-get update # apt-get install PACKAGES # apt-get remove [--purge] PACKAGES # apt-get dist-upgrade # apt-get clean # apt-get check
Другие инструменты
rpm2cpio, aptitude, apt-scripts, apt-repo-tools, sisyphus-mirror, apf, epm...
Как найти пакет по имени файла, если пакет не установлен?
Предположим, мы знаем, что ищем программу 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 входит в пакет самого ядра. Но далеко не всегда это так и если сетевая карта не работает, возможно, в системе просто не установлен пакет с нужным модулем.
Продолжение следует…