Linux: использование rpm/yum/dnf в CentOS (обновление, установка, удаление приложений)

  • Аналог статьи про Ubuntu, Gentoo
  • (Centos, Ubuntu) PackageKit — открытый и свободный набор приложений для обеспечения высокоуровнего интерфейса для различных пакетных менеджеров. Он используется RHEL в качестве графического интерфейса (по факту нескольких интерфейсов/утилит – add/remove software, package updater, settings) управления пакетами.
    • Включаем в себя ряд приложений
      • gpk-application: Добавить/удалить приложение
      • gpk-update-viewer: Обновление системы
      • gpk-prefs: Настройка параметров обновления приложений
      • gpk-repo: Включение/выключение источников приложений
      • gpk-log: Журнал установки, удаления и обновления приложений
      • gpk-install-file: Устанавливает локальный пакет приложения
      • gpk-update-icon: Когда PackageKit установлен, автоматически запускает значок сеанса при входе в систему
      • gpk-backend-status: Показывает техническое состояние поддержки пакетным менеджером
    • Поддерживает работу с:
      • APT
      • yum
      • Conary
      • Pacman
      • Portage
      • Zypper
      • urpmi
  • База пакетов находится по пути /var/lib/rpm , с ней могут работать разные утилиты
    • rpm (redhat package manager) – аналог dpkg (только локальная работа без репо, не устраняет проблемы с зависимостями)
    • yum (yellowdog update manager) – аналог apt-get
    • dnf (dandified yum) – аналог apt, рекомендуется использовать dnf (причем так же как с apt-get yum в актуальных версиях rhel 8 и старше это просто ссылка на dnf), он так же как и apt лучше работает с зависимостями, при этом использует команды на входе и конфигурационные файлы yum в /etc/yum.repos.d/*   Например для rhel по умолчанию redhat.repo , причем в одном файле может быть прописано много репозиториев и часть из них могут быть с аутентификацией по ключам ssl (например, платные redhat).

  • При установке софта weak dependencies – это необязательные для работы пакета зависимости, но чаще всего устанавливаемые/нужные

  • Установка из repo в среднем предпочтительнее установки из файла т.к. (одна из причин) в репо будут обновления как основного софта, так и зависимого, при этом RHEL в целом рекомендует крайне аккуратно относится к апдейтам софта т.к. это может повлиять на стабильность, по умолчанию при установке dnf-automatic автоматически устанавливаются только security updates, а не все апдейты софта
  • Поиск драйверов для ядра (напр. bnx2)
  • CentOS работает с .rpm пакетами (так же как и RHEL, Fedora, Suse, Mandriva).
  • Вот тут есть очень хорошая шапаргалка. Ниже только самое используемое, остальное проще взять оттуда.

 

Базовая/типовая работа

Проверка обновлений по всем репозиториям.

yum check-update

Проверка обновлений в конкретном репозитории mariadb, без установки.

sudo yum/dnf check-update --disablerepo "*" --enablerepo=mariadb

Обновление всех приложений (сразу и обновляем данные из репозиториев о пакетах и ставим эти пакеты) и ядра системы, можно отключать конкретные репозитории или наоборот

sudo yum/dnf update
sudo yum/dnf update —disablerepo=epel
sudoyum/dnf update --disablerepo "*" --enablerepo=mariadb

Если в списке обновлений было ядро – без перезагрузки не обойтись (если нужно проверить что код нового ядра запустится корректно прямо сейчас).

(37/37): kernel-3.10.0-957.10.1.el7.x86_64.rpm

uname -a

Приложения из репозиториев ставятся через команду install.

sudo yum/dnf install python36

Обновление конкретного приложения

sudo yum/dnf update certbot

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

sudo yum/dnf list <name>
sudo yum/dnf repo-pkgs epel list <name>

Список установленных приложений с краткой информацией по ним

sudo yum/dnf list installed

Поиск приложения (не только по имени)

yum/dnf search python36

Просмотр информации о приложении

yum/dnf info python36u-pip

Удаление ненужных приложений

sudo yum/dnf autoremove

Удаление конкретного приложения remove только удаляет, erase так же счищает cache копию пакета, которая остается по умолчанию в системе после удаления (на случай необходимости быстрого rollback).

sudo yum/dnf -y remove vsftpd
sudo yum/dnf -y erase vsftpd
Пример обновления ядра centos
1. Run the uname command and check the version of the running kernel
[root@localhost ~]# uname -r
3.10.0-327.el7.x86_64
2. Run the yum command to install the latest available kernel from the subscription management service using either the update or the install subcommand:
[root@localhost ~]# yum -y update kernel
3. Confirm that the kernel package has been updated. The output indicates that a higher kernel version 3.10.0-123.8.1.el7 has been installed. It also shows the presence of the previous kernel.
[root@localhost ~]# yum list installed kernel
Installed Packages
kernel.x86_64 3.10.0-327.el7 @anaconda
kernel.x86_64 3.10.0-327.36.2.el7 @updates
4. The /boot/grub2/grub.cfg file gets the newest kernel menuentry added to it as well. Reboot the system and you will see the new kernel menu entry shows up in the GRUB boot list. The system will boot with this kernel as the install process has marked it as the default kernel
[root@localhost ~]# cat /boot/grub2/grub.cfg | grep menuentry | grep el7
menuentry 'CentOS Linux (3.10.0-327.36.2.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-9de934e4-f41b-4169-ab46-d4d8e9e43664' {
menuentry 'CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-9de934e4-f41b-4169-ab46-d4d8e9e43664' {
5. Reboot the system and you will see the new kernel menu entry shows up in the GRUB boot list. The system will boot with this kernel as the install process has marked it as the default kernel. Run the uname command again after the reboot to confirm the loading of the new kernel. You can also view the contents of either of the following files to verify the new kernel.
[user1@localhost ~]$ uname -r
3.10.0-327.36.2.el7.x86_64
YUM
  • yum group commands
    • yum info LibreOffice – просмотр списка пакетов группы пакетов LibreOffice
  • yum grouplist Lists installed groups and groups that are available for installation.
    yum groupinfo groupname Displays detailed information about a group.
    yum groupinstall groupname Installs all the packages in a group.
    yum groupupdate groupname Updates all the packages in a group.
    yum groupremove groupname Removes all the packages in a group.
  • yumdownloader позволяет выкачать как отдельные пакеты, так и все необходимые зависимости без установки
    • yumdownloader mc
    • yumdownloader samba –destdir ~/samba –resolve
  • можно работать с группами пакетов, например обновить или удалить группу:
    • sudo yum group update “Стандартный веб-сервер”
    • sudo yum group remove “Стандартный веб-сервер”

 

rpm
    • извлечение файлов пакета
    • опции
      • -q – query – просмотреть информации, не установка
        • (-qa) -a (all) – все пакеты, просмотр всех установленных пакетов
        • (-ql) -l (list) – вывести список файлов в пакете
      • -F – freshing vs upgrading package – fresh не устанавливает пакет если в системе не было старой его версии в отличии от upgrade
      • -ivh
        • -i – установка файла
        • -v (verbose) – более подробная информация при установке
        • -h – статус бар
rpm -Fvh foo-2.0-1.el6.x86_64.rpm
RPM's freshen option checks the versions of the packages specified on the command line against the versions of packages that have already been installed on your system. When a newer version of an already-installed package is processed by RPM's freshen option, it is upgraded to the newer version. However, RPM's freshen option does not install a package if no previously-installed package of the same name exists. This differs from RPM's upgrade option, as an upgrade does install packages whether or not an older version of the package was already installed.

Установка приложения из .rpm пакета делается с помощью утилиты rpm, но можно rpm пакет указать и на вход yum/dnf. Можно отключить проверку на зависимостей, в случае с tcpdump работает. Если не использовать этот подход, то можно получить dependency hell (tcpdump -> libpcap -> glibc…).

sudo rpm --force --nodeps -i tcpdump-4.9.2-3.el7.x86_64.rpm

sudo yum install ./tcpdump-4.9.2-3.el7.x86_64.rpm
ПОДПИСКА red hat
  • subscription-manager register -auto-attach – регистрация системы в RedHat Network (RHN) / Red Hat Subscription Management (RHSM)
  • rhnsd – демон обеспечивающий работу RHN
rhnsd - a program for quering the Red Hat Network for updates and information

 

настройка/добавление репозитория

Для установки разных утилит зачастую требуется установка репозиториев – например для python может понадобиться добавление репозитория epel (оффициальный репо fedora).

Простейшее добавление репозитория на CentOS7 (проверено, работает)

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

базовая настройка

в самом простом случае просто добавляем репозиторий через его установку (yum/dnf install)

sudo yum/dnf install epel-release

в чуть более сложном первой командой (rpm import) добавляем публичные ключи, которые будут использоваться для проверки подписанных приватным ключем файлов из репо, второй (yum install) добавляем уже сам репо

The following command installs the Red Hat Enterprise Linux 8 EPEL repo package

sudo rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-8

sudo yum install http://dl.fedoraproject.org/pub/epel/8/x86_64/e/epel-release-8-2.noarch.rpm

 

ручная настройка

Создаем файл в директории репозиториев /etc/yum.repos.d/mariadb.repo , задаем настройки (enabled позволяет управлять включением/отключением репо)

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos73-amd64/
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
enabled=1

(Необязательно) После этого, нужно сбросить кэш в yum и пересоздать его заново:

yum clean all
yum makecache

Для удаления репозиториев используется утилита yum-config-manager, которая входит в набор yum-utils. Удалите репозиторий, например remi:

yum -y install yum-utils
yum-config-manager --disable remi

Для полного удаления репозиторий нужно удалить его конфигурационные файлы и обновить кэш yum.

 

Создание своего репозитория
  • createrepo – основная утилита для создания

 

Проблемы

Если ни одно из приложений при обновлении не устанавливается с ошибкой невозможности аллоцировать память – скорей всего память утекла, поможет перезагрузка. Так же имеет смысл в будущем:

    1. разобраться с тем, какое приложение послужило проблемой (напр. sql, apache)
    2. нарастить память RAM или
    3. как минимум создать SWAP файл, чтобы система могла в случае необходимости использовать память на ЖД как RAM
[Errno 5] [Errno 12] Невозможно выделить память

Пример OOM из-за mysql (сервис mysql падает в activating до перезагрузки)
~$ dmesg
[Fri Mar 27 11:16:03 2020] Out of memory: Kill process 20533 (mysqld) score 62 or sacrifice child
[Fri Mar 27 11:16:03 2020] Killed process 20533 (mysqld), UID 27, total-vm:1433124kB, anon-rss:116248kB, file-rss:0kB, shmem-rss:0kB
[Fri Mar 27 11:16:03 2020] httpd invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0 ~$ sudo service mysql status ● mysqld.service - MySQL Community Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: activating (start-post) since Пт 2020-03-27 11:16:06 MSK; 6min ago

Если жалуется на недостаток места в разделе /boot – удаляем старые ядра через утилиту package-cleanup из пакета yum-utils.

Transaction check error:
installing package kernel-3.10.0-957.5.1.el7.x86_64 needs 15MB on the /boot filesystem

Error Summary
-------------
Disk Requirements:
At least 15MB more space needed on the /boot filesystem.
~$ df -h /boot
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 240M 206M 18M 93% /boot

~$ rpm -q kernel
kernel-3.10.0-327.28.2.el7.x86_64
kernel-3.10.0-327.28.3.el7.x86_64
kernel-3.10.0-862.14.4.el7.x86_64
kernel-3.10.0-957.1.3.el7.x86_64

~$ sudo yum install yum-utils
~$ sudo package-cleanup --oldkernels --count=2

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

sudo vi /etc/yum.conf
installonly_limit=2 # меняем с 5 до 1 или 2

Если возникли проблемы с совместимостью пакетов и в целом работе пакетного менеджера yum, то возможно поможет чистка кеша пакетов.

sudo yum/dnf clean all

Если Centos 7 не обновляются репозитории с ошибкой резолва mirrorlist.centos.org – меняем его на vault.centos.org. mirrorlist.centos.org вывели из эксплуатации т. к. CentOS EOL.

-bash-4.2$ sudo yum update
Loaded plugins: elrepo, fastestmirror, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
Determining fastest mirrors
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was
14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error"

-bash-4.2$ ping mirrorlist.centos.org
ping: mirrorlist.centos.org: Name or service not known

-bash-4.2$ sudo sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
-bash-4.2$ sudo sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

 

questions

Which of the following commands updates the already installed RPM package rpmname?

A. rpm –update rpmname

B. rpm –U rpmname

C. rpm –q rpmname

D. rpm –force rpmname

E. rpm –u rpmname

Answer: B
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
       This upgrades or installs the package currently installed to a newer version.  This is the same as install, except all other version(s) of the package are removed after the new package is installed.

Which of the following commands lists the dependencies of the RPM package file foo.rpm?

A. rpm –qpR foo.rpm

B. rpm –dep foo

C. rpm –ld foo.rpm

D. rpm –R foo.rpm

E. rpm –pD foo

Answer: A

The command that lists the dependencies of the RPM package file foo.rpm is rpm -qpR foo.rpm. The rpm command is the low-level tool for managing RPM packages on Linux systems.
The -q or --query option is used to query information about installed or uninstalled packages. 
The -p or --package option is used to specify a package file instead of an installed package name. 
The -R or --requires option is used to list the capabilities that the package requires. The capabilities are usually the names of other packages, libraries, or files that the package depends on. The rpm command is part of the 101.1 Determine and configure hardware settings topic of the LPI Linux Essentials certification program .
The other options are either invalid or do not perform the desired task. 
The rpm -dep foo command does not exist, as -dep is not a valid option for rpm. 
The rpm -ld foo.rpm command does not list the dependencies of the package file, but the files in the package. 
The rpm -R foo.rpm command does not list the dependencies of the package file, but the capabilities that the package provides. 
The rpm -pD foo command does not exist, as -pD is not a valid option for rpm.

Which option to the yum command will update the entire system? (Specify ONLY the option name without any additional parameters.)

update/upgrade
The yum command is a tool for managing software packages on Red Hat Enterprise Linux and other RPM-based systems. The yum update option will update the entire system by checking the versions of the installed packages and installing the latest available versions from the repositories. The yum upgrade option will do the same, but it will also remove any obsolete packages that are no longer needed by the system. Both options will prompt the user to confirm before proceeding with the update or upgrade process.

How can the list of files that would be installed by the RPM package file apache-xml.rpm be previewed?

A. rpm –qp apache-xml.rpm

B. rpm –qv apache-xml.rpm

C. rpm –ql apache-xml.rpm

D. rpm –qpl apache-xml.rpm

Answer: D

https://stackoverflow.com/questions/5616668/view-rpm-scripts-with-rpm-scripts-qp
When I run rpm -qlp I get the file contents of the RPM

$ rpm -qlp CS0.0.0_10.0.i386.rpm
/home/thy_diff/rt
/home/thy_diff/rt/Cerse-zip
/home/thy_diff/rt/Configure_rht.properties
/home/thy_diff/rt/UFE_Install.sh
/home/thy_diff/M_client
/home/thy_diff/M_client/Crse-CLIENT.zip
/home/thy_diff/M_client/Configure_client.properties
/home/thy_diff/M_client/UF_Install.sh

Leave a Reply