Linux Mint    Ubuntu    openSUSE    Asterisk    FreeBSD    Android    Nokia N900    Игры в Linux
 Linux Mint    Ubuntu     openSUSE     Asterisk     FreeBSD     Android     N900     Games

Изучаем пакетные менеджеры rpm и yum

Продолжаем углублять знания о Linux. В одной из прошлых статей мы уже немного разобрались, что такое rpm и deb, настало время копнуть глубже.

Так как я сижу на Fedora, а здесь rpm, то и начнем с нее.

rpm (RPM Package Manager) - система управления пакетами. Команда rpm позволяет осуществлять основные действия с пакетами - установку, обновление, удаление, получение информации о пакетах. В случае с rpm, атрибуты коренным образом влияют на поведение команды. Перечислим основные из них:

  • rpm -i # используется для установки нового пакета, часто используется вместе с vh

  • rpm -ivh whatever.rpm # в данном случае i обозначает install, v - verbose (подробный вывод), h - hash (рисует линейку из хешей #, отображая прогресс)

  • rpm -e # используется для удаления пакета, часто используется вместе с v

  • rpm -ev package # удаление пакета package с проверкой на существующие зависимости, убрать проверку можно атрибутом --nodeps

  • rpm -U # используется для обновления какого-то пакета, также используется с vh

  • rpm -Uvh new_whatever.rpm # обновляет пакет

Здесь остановимся поподробнее. Допустим, мы хотим обновить версию python до третьей. Мы скачали python3-3....rpm. Просто обновить версию python командой:

rpm -Uvh python3-3...rpm

не удастся, потому что огромное количество других пакетов требуют старую версию. Отсюда получается, что чтобы обновить python, мы должны обновить все пакеты, которые зависят от него, лишь затем обновлять сам оригинальный пакет. Но для этого и существует утилита yum, но о ней позже.

А пока, как же узнать, существуют ли зависимости на данный пакет, который мы хотим обновить. Для этого мы воспользуемся query-mode команды rpm с использованием атрибута -q, который позволяет достать практически любую информацию о пакетах, установленных в системе.

  • rpm -q --whatrequires python # эта команда выдаст список всех пакетов, зависящих от python

Мы также можем подсчитать их количество:

  • rpm -q --whatrequires python | wc -l # wc - очень удобная программа

Отлично, теперь мы знаем как устанавливать, удалять и обновлять пакеты. Осталось научиться получать о них данные. Как уже было сказано ранее, для этого используется ключ -q. Самые основные команды:

  • rpm -qa # список всех пакетов, установленных в системе

И конечно, можно делать с этой командой все, что угодно:

rpm -qa | wc -l

rpm -qa > my_packages

и так далее...

  • rpm -qi python # эта команда дает подробное описание пакета, здесь i означает info

  • rpm -ql python # а эта команда показывает все файлы данного пакета в вашей системе

Идем дальше,

  • rpm -qf some_file # позволяет узнать, какие пакеты используют файл some_file

Например, у меня команда:

  • rpm -qf /etc/passw # отображает setup-2...f16.noarch, что в принципе логично.

Последнее, узнаем зависимости самого пакета:

  • rpm -qR python # все зависимости пакета python

На этом, пожалуй, можно закончить с rpm и переходить к yum.

Итак, зачем нам нужна очередная утилита yum, когда у нас есть уже довольно-таки мощная программа rpm. Ответ был уже найден где-то выше.

yum позволяет автоматизировать некоторые процессы, которые возникают при работе с rpm. К примеру, разрешение зависимостей.

Итак, начнем с самого начала. Конфигурационный файл yum находится в

/etc/yum.conf

Он представляет из себя ни что иное, как набор параметров, настраивающих работа yum. К примеру keepcache=1 позволяет использовать кэширование, если необходимо достать информацию из репозиториев. Список всех репозиториев хранится в

/etc/yum.repo.d

Что такое репозиторий? Это таблица хедеров доступных пакетов как ключей, а в качестве значений сами пакеты.

Основные команды с yum:

  • yum install a [b c d] # устанавливает пакеты a (b, c, d), если есть репозитории, в которых они доступны

Автоматически разрешает все зависимости старого пакета и устанавливает другие необходимые пакеты при необходимости.

Просмотреть список установленных пакетов очень просто:

yum list

Но здесь опять проще воспользоваться:

  • yum list | wc -l # потому что у меня этих пакетов установлено за 26 тысяч

Чтобы проверить, установлен ли какой-то конкретный пакет надо лишь добавить название после list:

yum list python

И конечно же работают регекспы(не помню, как называются в шелле, но как-то они по-другому назывваются).

Допустим, я забыл, как на английском пишется питон, помню только 3 первые буквы - pyt, тогда я использую:

yum list pyt*

Также мы можем захотеть найти пакет по файлу, которые в нем состоит. Для этого есть whatprovides:

  • yum whatprovides /bin/bash # к примеру

Обновление пакетов:

Чтобы проверить, доступны ли новые версии каких-либо пакетов, которые у вас уже установлены, можно воспользоваться программой

yum check-update

В моем случае это 4 пакета. Чтобы обновить все устаревшие пакеты на новые версии мы используем:

yum update

Существует небольшая разница между update и upgrade - update просто устанавливает новые версии, в то время как upgrade еще и удаляет устаревшие.

Список зависимостей какого-либо пакета проверяется с помощью deplist:

yum deplist python

Удаление пакетов:

  • yum remove package # то же самое, что и erase. Разницы никакой, это просто алиас

Кстати сказать, команда очень опасная, потому что вместе с пакетом удаляет все другие пакеты, от него зависящие. Помню, один раз запустил такой yum remove и ушел на кухню. Когда вернулся с чашкой чая, от системы уже ничего не осталось. Даже иксы упали.

Заключение:

Теперь вроде бы более или менее понятно, что такое rpm, yum и с чем их едят. Rpm - более низкоуровневая и следовательно, быстрая, программа, которая позволяет выполнять примитивные вещи, не заботясь о зависимостях и других высокоуровневых вещах. Yum заботится об этом и уменьшает головную боль.

Лично я пока не вижу случая, когда использование команды rpm было бы более уместным, чем yum. Но так ли это, непонятно.

BAF аватар

Хорошая статья, ложу в закладки.
П.С. Мне больше нравится dpkg и aptitude. Особенно второе намного лучше этого yum, т.к. каждый раз не лезит в инет.

Эксперт - зто человек, который совершил все возможные ошибки в очень узкой специальности.

skim1776 аватар

для yum можно тоже настроить кэширование. для этого достаточно в yum.conf keepcache установить в 1, потом при установке пакета добавить флаг -C

BAF аватар

Да, я прочитал про это в статье. Но вот про -С нет. Интересно а почему бы сразу по умолчанию как в apt так не зделают, это же не удобно блин каждый раз -С ставить.

Эксперт - зто человек, который совершил все возможные ошибки в очень узкой специальности.

Platon аватар

ИМХО борьба за место на диске. RPM умеет параллельно раскидывать версии по папкам(т.е. применять одновременно и старые и новые версии библиотек для разных программ), кэширование идет в / - корневой раздел может быть и небольшим, поэтому по-умолчанию эту опцию(кэширование) не выставили - как-то так(пересказал по памяти - как-то общался на эту тему с юзером OpenSUSE)

BAF аватар

Шикарная фишка с версиями, надо поискать есть ли в апт похожее и еще подумать для чего это вообще надо;)

Эксперт - зто человек, который совершил все возможные ошибки в очень узкой специальности.

skim1776 аватар

да, кстати, ждем ответа от пользователей убунту про dpkg и apt

Linux_man аватар

хорошая идея :)

Linux_man аватар

кстати, почему бы мне не написать статью про zypper? :)

skim1776 аватар

Макс, было бы здорово. Как раз подумываю над тем, чтобы перейти с федоры на сусу.

Linux_man аватар

сделаю :)

LaD аватар

дада)) мне тоже интересно когда уже приложения с н9 можно будет запускать)

Linux_man аватар

где запускть, какие приложения?