Нам довольно часто приходится устанавливать различные программы. По умолчанию в системе есть только самое необходимое, а если вам понадобится что-либо специфическое, то вам придется устанавливать программы вручную. Установка программ Linux в некотором смысле проще, чем в Windows. Здесь большинство необходимых программ находятся в официальных репозиториях и для их установки или обновления достаточно выполнить несколько команд.
В этой статье мы рассмотрим как выполняется установка пакетов CentOS 7. Рассмотрим основы работы с пакетным менеджером yum, его возможности, поиск и разрешение зависимостей пакетов.
YUM (Yellowdog Updater Modified) - это пакетный менеджер с открытым исходным кодом, разработанный в компании RedHat для работы с пакетами в формате RPM. С помощью него пользователи и системные администраторы могут устанавливать, удалять и обновлять пакеты в системах, основанных на RedHat.
Программа распространяется под лицензией GPL (General Public License) и любой пользователь может получить доступ к исходникам или даже улучшить код. Пакетный менеджер поддерживает подключение сторонних репозиториев и разрешение зависимостей для установки пакетов. Для улучшения работы Yum могут быть загружены различные плагины.
Утилита работает в консоли, а ее синтаксис очень прост:
$ sudo yum опции команда имя_пакета
Сначала рассмотрим основные команды пакетного менеджера:
Еще рассмотрим дополнительные опции, которые могут вам понадобиться когда будет выполняться установка rpm CentOS:
Теперь вы знаете все основные возможности утилиты, рассмотрим некоторые примеры работы с ней.
Перед тем как переходить к установке пакетов CentOS нужно обновить список репозиториев и систему до самой последней версии. Для этого существует команда:
Чтобы установить пакет, который есть в официальных репозиториях вам достаточно использовать команду install. Просто наберите эту команду и имя пакета, например, для firefox:
sudo yum install thunderbird
Во время установки вам придется подтвердить, что вы хотите установить именно эту программу нажав клавишу y. Чтобы этого избежать используйте опцию -y:
sudo yum -y install thunderbird
Чтобы посмотреть информацию об установленном пакете используйте команду info:
sudo yum info thunderbird
Для удаления пакета используйте команду remove:
sudo yum remove thunderbird
Мы знаем точные названия далеко не всех пакетов. Но yum поддерживает возможность поиска, которая поможет вам понять какой установить пакет CentOS 7. Существует две команды для поиска. Первая - это search - позволяет найти пакет по названию:
sudo yum search mysql
Вторая позволяет найти нужный пакет по команде, которая вам нужна, в некоторых случаях это бывает очень удобно:
sudo yum provides lspci
Теперь вы знаете какой пакет нужен и установка пакетов rpm CentOS 7 теперь может быть выполнена очень быстро и вам не нужно открывать множество форумов для поиска информации.
Группы пакетов, это тоже достаточно удобный инструмент. С помощью него вы можете не устанавливать пакеты по одному, а установить сразу целую группу. Сначала посмотрите список доступных групп:
sudo yum group list
sudo yum group info "Стандартный веб-сервер"
Затем. чтобы установить группу пакетов наберите:
sudo yum group install "Стандартный веб-сервер"
Точно так же вы можете обновить группу пакетов, чтобы не обновлять всю систему:
sudo yum group update "Стандартный веб-сервер"
Или удалить:
sudo yum group remove "Стандартный веб-сервер"
В официальных репозиториях есть далеко не все нужные пакеты. Если серверные программы там можно найти без труда, то с программами для рабочего стола, теми же кодеками, возникнут проблемы. Их нужно устанавливать из сторонних репозиториев.
Репозитории в CentOS добавляются не через конфигурационный файл, они устанавливаются путем загрузки и установки rpm файла репозитория. Например, один из самых часто используемых сторонних репозиториев - это EPEL. Его установщик есть в официальных репозиториях, поэтому для подключения достаточно выполнить:
sudo yum install epel-release
Но такая ситуация не со всеми репозиториями. Многие из них хранят файлы установки у себя. Например, репозиторий с различным мультимедийным программным обеспечением nux устанавливается по-другому. Сначала нужно скачать файл репозитория по ссылке. Качайте обязательно последнюю версию иначе ничего работать не будет.
Например, на данный момент самая новая
wget http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
Затем установите загруженный пакет с помощью yum:
sudo yum install nux-dextop-release-0-5.el7.nux.noarch.rpm
Затем обновите список репозиториев и можете устанавливать пакеты:
sudo yum install vlc
Ну и смотрим список репозиториев:
sudo yum repolist
Здесь отображаются все доступные репозитории. Для удаления репозитория будет достаточно удалить его пакет.
Если вы не любите пользоваться терминалом, то установка программ CentOS 7 может быть выполнена и через графический интерфейс. Но здесь возможностей намного меньше чем в терминале. Используйте утилиту "Программы" , которая расположена в главном меню:
Yum и RPM являются отличными инструментами управления пакетами, но они имеют несколько малоизвестных вариантов и возможностей, которые позволяют делать некоторые весьма интересные вещи. Вам не обязательно непременно использовать их, но они могут вам пригодится когда-нибудь.
Эту простую мелочь довольно легко выполнить, и она будет очнь полезна людям, использующих x86_64 системы. Одна строка в файле ~/.rpmmacros спасет от неприятностей в дальнейшем.
Echo "%_query_all_fmt %%{name}-%%{version}-%%{release}.%%{arch}" >> ~/.rpmmacros
Хотите получить список пакетов установленных из сторонних репозиториев, не CentOS?
Rpm -qa --qf "%{NAME} %{VENDOR}\n" | grep -v CentOS
У вас возникла полная неразбериха с правами доступа на файлы в пакете? Не беда, RPM об этом позаботится.
Rpm --setperms
Поскольку CentOS и исходный поставщик кода выпускают обновления безопасности, номера версий могут ввести в заблуждение, когда вы смотрите на CVE исправления. Проверка наличия изменений в пакете есть хороший способ увидеть - внесены ли исправления или нет. И снова RPM приходит на помощь.
Rpm -q --changelog | less
Использование "less" не является обязательным, но для некоторых пакетов, таких как ядро, изменения могут быть довольно обширными. Поэтому данное дополнение делает вывод более читабельным.
Чтобы быстро получить документацию, связанную с пакетом, вы можете использовать следующие два варианта:
Иногда хочется знать, где вы получили пакет или пакеты, сколько в вашей системе пакетов от конкретного репозитория или поставщика. Есть несколько параметров поиска, которые можно использовать. Хотя они не 100% совершенны, тем не менее они могут помочь. Большинство пакетов из репозиториев имеют теги с идентификатором в строке Release. Например rpmforge использует rf в качестве идентификатора. Вы можете использовать это, чтобы посмотреть, что у вас установлено оттуда:
Rpm -qa release="*rf*"
а если вы хотите увидеть, как много пакетов у вас установлено от Johnny Hughes-а можно использовать:
Rpm -qa packager="Johnny*"
Этот метод работает на большинстве категорий вида rpm -qi
Данная команда выдаст весь список установленных пакетов.
Если вам нужно извлечь только один файл из rpm без переустановки всего пакета, вы можете сделать это с rpm2cpio. Например, чтобы извлечь только один файл из logrotate rpm, используйте следующее:
Rpm2cpio logrotate-1.0-1.i386.rpm |cpio -ivd etc/logrotate.conf
Полезно после обновления найти старые пакеты, которые не были обновлены.
Rpm -qa --last >~/RPMS_by_Install_Date
Можно использовать "less" для вывода, чтобы найти все RPMS старше, чем дата установки. Используя также grep - конкретизировать пакеты и дату установки.
Найти все пакеты, доступные из определенного репозитория, например RPMforge. Пакеты уже установленные из этого репозитория показываться не будут.
Yum --disable "*" --enable "rpmforge" list available
Поиск пакетов, содержащих нужную строку в названии или описании пакета.
Yum search buildrpmtree | less
Для того чтобы заставить Yum работать через прокси-сервер необходимо добавить следующий параметр в /etc/yum.conf:
Proxy=http://yourproxy:8080/
где - yourproxy это имя прокси-сервера, а 8080 это порт прокси-сервера. Если сервер требует аутентификации, вы можете указать логин как:
Proxy=http://username:password@yourproxy:8080/
RPM Package Manager позволяет использовать прокси-переменные среды. Это может быть задано в /etc/profile или специфизированно для конкретного пользователя в файле ~/.bash_profile::
Export http_proxy=http://yourproxy:8080/ export ftp_proxy=http://yourproxy:8080/
Для использования wget через прокси-сервер, добавте следующие строки в /etc/wgetrc
Http_proxy = http://yourproxy:8080/ ftp_proxy = http://yourproxy:8080/
В обоих случаях логин и пароль могут быть заданы как в примере выше.
Иногда вам просто необходимо пересобрать определенный пакет - возможно, лишь добавить конфигурационные опции, которые просто не существуют в основном пакете. Или потому, что вы нашли необходимый пакет, который отсутствует в репозитории, а на сайте разработчика RPMs для другого дистрибутива. Таким образом, вы должны получить src.rpm и востановить его под себя. Но в действительности вы не хотите делать этого в качестве суперпользователя. Итак, как пересобрать свои пакеты в вашей домашней директории под собственной учетной записью.
Для начало необходимо настроить каталог для работы. Он имеет довольно полное сходство по структуре с каталогом /usr/src/redhat:
$ cd $ mkdir -p redhat/{SRPMS,RPMS,SPECS,BUILD,SOURCES} $ ls redhat/ BUILD RPMS SOURCES SPECS SRPMS $
С помощью rpm макроса произведем подмену, для того чтобы rpmbuild узнал о нас и о том что нужно собрать:
$ echo "%_topdir /home/testuser/redhat" >> .rpmmacros $ echo "%packager Test User " >> .rpmmacros $ cat .rpmmacros %_topdir /home/testuser/redhat %packager Test User $
Именно так. Следующее действие - задание rpmbuild-у --rebuild foo.src.rpm, результат работы будет в файле ~/redhat/RPMS/i386 (или та архитектура с которой вы строили пакет).
Для CentOS-4, настроить репозиторий kbs-Extras repo (опционально добавить kbs-Misk) со страницы и "yum install fedora-rpmdevtools" под root-ом используя "sudo" или "su -". Завести юзера (возможно вы захотите использовать специальный аккаунт для того, чтобы избежать проблем в своей обычной домашней директории) и выполнить "fedora-buildrpmtree" и ~/rpmbuild/...в дереве каталогов и ~/.rpmmacros файл будет автоматически создан. (Примечание "rpmbuild" против "RedHat" в методе А.)
Для CentOS-5 - пакет rpmdevtools отсутствует в наличии. В FC6 SRPM rpmdevtools-5.3-1.fc6.src.rpm собирается и работает.
Ниже представлен макрос для получения надлежащих имен некоторых пакетов (замените соответствующую версию дистрибутива для "el4" на свою):
$ echo "%dist .el4" >> .rpmmacros
Вы можете получить список всех установленных у вас репозиториев - yum repolist all . Однако, он не показывает индекс приоритета. Вот строка необходимая для этого. Если номер не определен, по умолчанию, это самый низкий приоритет (99).
Cat /etc/yum.repos.d/*.repo | sed -n -e "/^\# yum list "vim*" Installed Packages vim-minimal.i386 2:7.0.109-7.el5 installed Available Packages vim-X11.i386 2:7.0.109-7.el5 base vim-augeas.i386 0.9.0-2.el5.rf rpmforge vim-clustershell.noarch 1.5.1-1.el5 epel vim-common.i386 2:7.0.109-7.el5 base vim-enhanced.i386 2:7.0.109-7.el5 base vim-halibut.i386 1.0-2.20100504svn8934.el5.1 epel vim-puppet.noarch 2.7.9-1.el5.rf rpmforge
Показать список всех ключей с соответствующей информацией репозитория:
Rpm -q gpg-pubkey --qf "%{name}-%{version}-%{release} --> %{summary}\n"
Вы хотите подписать свой пакет, который собрали, чтобы другие могли убедится в его достоверности? Вы можете это сделать достаточно просто. Воспользуйтесь документацией .
Примечание: для CentOS 5 и 4, будет лучше, если вы будете использовать для подписи ключ DSA (так как для версии 4 RSA были выявлены проблемы с подтверждением).
Метапакет - это специальный пакет, не содержащий никакого программного обеспечения, но имеющий в зависимостях определенный набор софта. Например: установка X-ов на сервер .
Чтобы посмотреть список всех метапакетов, необходимо выполнить команду: yum grouplist . Но если у вас стоит русская локаль, то список будет выдан на русском языке. Чтобы получить список пригодный для установки (на английском), задайте язык вывода команды на английском:
LANG=C yum grouplist
Установленные пакеты могут показать команды
Yum list installed
Пример, порлучить список установленных пакетов из репозитория :
# yum list installed | grep ius php71u-cli.x86_64 7.1.17-1.ius.el6 @ius php71u-common.x86_64 7.1.17-1.ius.el6 @ius php71u-embedded.x86_64 7.1.17-1.ius.el6 @ius php71u-fpm.x86_64 7.1.17-1.ius.el6 @ius 7.1.17-1.ius.el6 @ius php71u-gd.x86_64 7.1.17-1.ius.el6 @ius php71u-intl.x86_64 7.1.17-1.ius.el6 @ius php71u-json.x86_64 7.1.17-1.ius.el6 @ius php71u-mbstring.x86_64 7.1.17-1.ius.el6 @ius php71u-pdo.x86_64 7.1.17-1.ius.el6 @ius 3.4.3-2.ius.el6 @ius php71u-pgsql.x86_64 7.1.17-1.ius.el6 @ius php71u-xml.x86_64 7.1.17-1.ius.el6 @ius php71u-xmlrpc.x86_64 7.1.17-1.ius.el6 @ius
Yum создан для решения следующих задач:
Для поиска в репозиториях с помощью yum используются три команды: list , search и provides .
Самый простой способ поиска - использование команды list . Команда list просматривает названия пакетов и их версии в поисках совпадений. Например, для просмотра пакетов с названием tsclient используйте:
Yum list tsclient
Команда search ищет в названии пакета и его описании указанную строку. Например, для поиска пакетов связанных с PalmPilot введите:
Yum search PalmPilot
Команда provides позволяет производить поиск пакетов содержащих указанный файл. Например, для поиска пакетов содержащих libneon введите:
Yum provides libneon
Все команды поиска поддерживают групповые символы? и * (экранируйте их символом \ для корректной обработки bash). К примеру, при для поиска пакетов начинающихся на tsc введите:
Yum list tsc\*
для поиска пакетов, содержащих файлы в директории /etc/httpd
Yum provides /etc/httpd\*
или для поиска определённых команд/программ, например для поиска mc(midnight commander)
Yum provides \*/mc
в результате получим следующий вывод
1:mc-4.7.4-1.fc14.i686: User-friendly text console file manager and visual shell Репозиторий: base Совпадения с: Имя файла: /usr/share/mc Имя файла: /usr/libexec/mc Имя файла: /etc/mc Имя файла: /usr/bin/mc
Для установки пакетов с помощью yum используется параметр install
Для установки tsclient введите:
Yum install tsclient
Yum автоматически разрешит (если сможет) зависимости, и предложит установить их:
Для установки.rpm пакета с автоматическим разрешением зависимостей раньше использовалась команда localinstall . Теперь можно использовать обычный install . Так команда:
Yum install foo.rpm
автоматически найдет зависимости пакета foo.rpm в репозиториях (если сможет) и предложит их установить.
Может возникнуть проблема в отсутствии или неизвестной GPG подписи у RPM пакета, результатом чего будет отказ в установке и как следствие следующая ошибка
Публичный ключ для foo.rpm не установлен
Для того чтобы обойти это (в случае если Вы доверяете источнику предоставляющему пакет) необходимо выключить проверку GPG ключей, добавив в конце команды параметр --nogpgcheck
Обновление системы осуществляется с помощью одной команды - update . Таким образом:
Yum update
обновит всю вашу систему. А команда
Yum update foo
При использовании обоих методов работоспособность сохраняется.
Для того чтобы заставить Yum работать через прокси-сервер необходимо добавить следующий параметр в /etc/yum.conf:
Proxy=http://yourproxy:8080/
где - yourproxy это имя прокси-сервера, а 8080 это порт прокси-сервера. Если сервер требует аутентификации, вы можете указать логин как:
Proxy=http://username:password@yourproxy:8080/
RPM Package Manager позволяет использовать прокси-переменные среды. Это может быть задано в /etc/profile или специфизированно для конкретного пользователя в файле ~/.bash_profile::
Export http_proxy=http://yourproxy:8080/
export ftp_proxy=http://yourproxy:8080/
Для использования wget через прокси-сервер, добавте следующие строки в /etc/wgetrc
Http_proxy = http://yourproxy:8080/
ftp_proxy = http://yourproxy:8080/
В обоих случаях логин и пароль могут быть заданы как в примере выше.
Вы можете получить список всех установленных у вас репозиториев - yum repolist all . Однако, он не показывает индекс приоритета. Вот строка необходимая для этого. Если номер не определен, по умолчанию, это самый низкий приоритет (99).
Cat /etc/yum.repos.d/*.repo | sed -n -e "/^\}