# Управление ПО

## RPM пакеты

* RPM - Red Hat Package Manager
* RPM - формат пакетов для установки ПО, ровно как и база установленных в систему пакетов
* Пакет содержит в себе архив фалов, сжатых cpio, метаданные и список зависимостей
* RPM также может содержать скрипт
* Для установки пакетов используются репозитории
* Индивидуальные пакеты также могут быть установлены, но такая установка не некомендуется

## Работа с репозиториями

Создание локального репозитория на основе ISO RHEL 8:

* Создание ISO: **dd if=/dev/sr0 of=/rhel8.iso bs=1M**
* Создание директории: **mkdir /repo**
* Отредактировать **/etc/fstab** и добавить точку монтирования:
  * **/rhel8.iso /repo iso9660 defaults 0 0**
  * **systemctl daemon-reload**
  * **mount -a** для монтирования ISO
* Создать файл **/etc/yum.repos.d/appstream.repo** следующего содержания:

```
[appstream]
name=appstream
baseurl=file:///repo/AppStream
gpgcheck=0
```

* Создать файл **/etc/yum.repos.d/base.repo** следующего содержания:

```
[base]
name=base
baseurl=file:///repo/BaseOS
gpgcheck=0
```

* Проверяем результат через **yum repolist**

## Модули и Application Stream

* Новый функционал, доступный в RHEL 8
* Application Streams используются для разделения пользовательских пакетов от пакетов для ядра
* Application Streams позволяют работать с различными версиями пакетов
* Base пакеты предоставляются через BaseOS репозиторий, AppStream предоставляется как отдельный репозиторий
* Application Streams разделены на два формата:
  * Традиционные RPM
  * Новые модули
* Модули содержат потоки для того, чтобы предоставить возможность использовать несколько версий приложения
* Активация модульного потока (module stream) предоставляет доступ к RPM в этом потоке
* У модулей также могут быть профили
  * Профиль - список пакетов, который характерен для конкретного набора решаемых задач
* Список пакетов в модуле может содержать пакеты за пределами потока модуля
* **yum module** используется для управления модулями

## Управление пакетами через yum

* **yum search** - поиск нужного пакета
* **yum install**  - установка нужного пакета

```
[admin@centos8 ~]$ yum search nmap
Last metadata expiration check: 0:00:09 ago on Sun 01 Mar 2020 01:08:38 PM MSK.
========================== Name Exactly Matched: nmap ==========================
nmap.x86_64 : Network exploration tool and security scanner
========================= Name & Summary Matched: nmap =========================
nmap-ncat.x86_64 : Nmap's Netcat replacement
```

```
[admin@centos8 ~]$ sudo yum install nmap
Dependencies resolved.
================================================================================
 Package       Architecture    Version                 Repository          Size
================================================================================
Installing:
 nmap          x86_64          2:7.70-5.el8            AppStream          5.8 M

Transaction Summary
================================================================================
Install  1 Package

Total download size: 5.8 M
Installed size: 24 M
Is this ok [y/N]: y
Downloading Packages:
nmap-7.70-5.el8.x86_64.rpm                      3.1 MB/s | 5.8 MB     00:01    
--------------------------------------------------------------------------------
Total                                           2.4 MB/s | 5.8 MB     00:02     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1 
  Installing       : nmap-2:7.70-5.el8.x86_64                               1/1 
  Running scriptlet: nmap-2:7.70-5.el8.x86_64                               1/1 
  Verifying        : nmap-2:7.70-5.el8.x86_64                               1/1 

Installed:
  nmap-2:7.70-5.el8.x86_64                                                      

Complete!
```

* **yum remove** - удаление пакетов
* **yum update** - обновление ПО через репозиторий
* **yum provides** - глубокий поиск по пакетам, включая их содержимое
* **yum info** - информация о пакете
* **yum list**  - отображение списка пакетов
  * **yum list all**
  * **yum list  installed**

## Управление модулями и потоками

* Для управления модулями используется yum module
* **yum module list** - отображает список модулей

```
[root@centos8 ~]# yum module list
Last metadata expiration check: 0:02:42 ago on Sun 01 Mar 2020 08:25:03 PM MSK.
CentOS-8 - AppStream
Name                 Stream       Profiles           Summary                                                
389-ds               1.4                             389 Directory Server (base)                            
ant                  1.10 [d]     common [d]         Java build tool                                        
container-tools      rhel8 [d][e] common [d]         Common tools and dependencies for container runtimes   

python27             2.7 [d]      common [d]         Python programming language, version 2.7               
python36             3.6 [d][e]   build, common [d]  Python programming language, version 3.6               
redis                5 [d]        common [d]         Redis persistent key-value database                    
rhn-tools            1.0 [d]      common [d]         Red Hat Satellite 5 tools for RHEL                     
ruby                 2.5 [d]      common [d]         An interpreter of object-oriented scripting language   
ruby                 2.6          common             An interpreter of object-oriented scripting language   
rust-toolset         rhel8 [d]    common [d]         Rust                                                   
satellite-5-client   1.0 [d][e]   common [d], gui    Red Hat Satellite 5 client packages                    
scala                2.10 [d]     common [d]         A hybrid functional/object-oriented language for the JV
                                                     M
squid                4 [d]        common [d]         Squid - Optimising Web Delivery                        
              rhel [d][e]  common [d]         Virtualization module                                  

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
```

* **yum module provides \<package\_name>** - позволяет найти модуль, который содержит необходимый пакет

```
[root@centos8 ~]# yum module provides python36
Last metadata expiration check: 0:04:04 ago on Sun 01 Mar 2020 08:25:03 PM MSK.
python36-3.6.8-2.module_el8.1.0+245+c39af44f.x86_64
Module   : python36:3.6:8010020191115015851:a920e634:x86_64
Profiles : build common
Repo     : AppStream
Summary  : Python programming language, version 3.6

python36-3.6.8-2.module_el8.1.0+245+c39af44f.x86_64
Module   : python36:3.6:8010020191115015851:a920e634:x86_64
Profiles : build common
Repo     : Stream-AppStream
Summary  : Python programming language, version 3.6
```

* **yum module info \<module\_name>** - информация о модуле

```
[root@centos8 ~]# yum module info python36
Last metadata expiration check: 0:04:44 ago on Sun 01 Mar 2020 08:25:03 PM MSK.
Name             : python36
Stream           : 3.6 [d][e]
Version          : 8010020191115015851
Context          : a920e634
Architecture     : x86_64
Profiles         : build, common [d]
Default profiles : common
Repo             : Stream-AppStream
Summary          : Python programming language, version 3.6
Description      : This module gives users access to the internal Python 3.6 in RHEL8, as
                 : well as provides some additional Python packages the users might need.
                 : In addition to these you can install any python3-* package available
                 : in RHEL and use it with Python from this module.
Requires         : platform:[el8]
Artifacts        : python-PyMySQL-0:0.8.0-10.module_el8.1.0+245+c39af44f.src
                 : python-distro-0:1.4.0-2.module_el8.1.0+245+c39af44f.src
<...>
                 : python36-devel-0:3.6.8-2.module_el8.1.0+245+c39af44f.x86_64
                 : python36-rpm-macros-0:3.6.8-2.module_el8.1.0+245+c39af44f.noarch
                 : scipy-0:1.0.0-20.module_el8.1.0+245+c39af44f.src


Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled, [a]ctive
```

* **yum module info --profile \<module\_name>** - профили, к которым относится модуль
* **yum module list \<module\_name>** - отобразить доступные потоки
* **yum module install php:7.1** или **yum install @php:7.1** - установка из необходимого модуля
  * при последующем вводе другой версии стрима, старый будет деактивирован
* **yum module install php:7.1/devel** - установка конкретного профиля
* **yum install \<package\_name>** - позволяет yum автоматически активировать модульный поток, в котором содержится данный пакет, перед установкой этого пакета
* **yum module enable php:7.1** - активация модуля, но без установки чего-либо
* Для отката пакета из другого модульного стрима, отсутствующего в профилях, необходимо использовать **yum distro-sync**

## Работа с yum группами

* you groups определяют доступ к определенным категориям ПО
* **yum group list** отобразит список наиболее доступных групп
  * **yum groups list hidden** - для отображения всех групп

```
[root@centos8 ~]# yum groups list
Available Environment Groups:
   Server with GUI
   Server
   Minimal Install
   Virtualization Host
   Custom Operating System
Installed Environment Groups:
   Workstation
Available Groups:
   Container Management
   .NET Core Development
   RPM Development Tools
   Development Tools
   Graphical Administration Tools
   Headless Management
   Legacy UNIX Compatibility
   Network Servers
   Scientific Support
   Security Tools
   Smart Card Support
   System Tools
```

* **yum groups info \<groupname>** - установит заданную группу

```
[root@centos8 ~]# yum groups info Workstation
Last metadata expiration check: 0:00:47 ago on Sun 01 Mar 2020 08:35:01 PM MSK.
Environment Group: Workstation
 Description: Workstation is a user-friendly desktop system for laptops and PCs.
 Mandatory Groups:
   Common NetworkManager submodules
   Core
   Fonts
   GNOME
   Guest Desktop Agents
   Hardware Support
   Internet Browser
   Multimedia
   Printing Client
   Standard
   Workstation product core
   base-x
 Optional Groups:
   Backup Client
   GNOME Applications
   Headless Management
   Internet Applications
   Office Suite and Productivity
   Remote Desktop Clients
   Smart Card Support
```

## Обновления yum и история

* **yum history** - отобразит список недавно выполненных команд

```
[root@centos8 ~]# yum history
ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     8 | update --skip-broken --n | 2020-03-01 13:26 | I, U           |   13   
     7 | install nmap             | 2020-03-01 13:10 | Install        |    1   
     6 | install -y yum-utils     | 2020-02-29 21:36 | Install        |    1   
     5 | install -y nodejs        | 2020-02-29 20:59 | Install        |    2  <
     4 | install dhcp-server.x86_ | 2020-02-28 23:07 | Install        |    1 >E
     3 | install docker-ce --nobe | 2020-02-17 23:22 | Install        |    5   
     2 | update                   | 2020-02-17 23:17 | I, U           |  178 EE
     1 |                          | 2020-01-07 12:23 | Install        | 1403 EE
```

* **yum history info** - позволяет откатить заданную команду, основанную на ID в истории
* **yum update**  - обновит все пакеты в системе
* **yum update \<packagename>** - обновит пакет и его зависимости
* **yumdownloader** - скачать пакет с репозитория

## RPM запросы

* **rpm** - устаревшая команда для установки пакетов RPM
  * rpm не учитывает зависимости и не рекомендуется для установки пакетов
* Однако rpm используется для выполнения запросов по пакетам
  * По-умолчанию запросы обрабатываются по базе установленных пакетов, флаг "**-p**" создаст запрос по файлам пакетов
  * **rpm -qf /any/file** - отобразит пакет, с которым был файл создан
  * **rpm -ql mypackage** - отобразит файлы в пакете
  * **rpm -qc mypackage** - отобразит конфигурационные файлы
  * **rpm -qd mypackage** - отобразит документацию по пакету
  * **rpm -qp --scripts mypackage-file.rpm** - запрос неустановленного пакета на содержание в нем скриптов

```
[root@centos8 ~]# rpm -qf /etc/tcsd.conf
trousers-0.3.14-4.el8.x86_64
```

```
[root@centos8 ~]# rpm -ql nano
/etc/nanorc
/usr/bin/nano
/usr/bin/rnano
/usr/share/doc/nano
/usr/share/doc/nano/AUTHORS
/usr/share/doc/nano/COPYING
<....>
```

```
[root@centos8 ~]# rpm -qc nano
/etc/nanorc
```

## Red Hat Subscription Manager

* Для работы с репозиториями необходимо иметь подписку
* Для тестового периода используется бесплатная подписка для разработчиков
  * берется с <https://developer.redhat.com>
* Для управления подпиской используется Subscription Manager
  * **subscription-manager register** используется для регистрации
  * Используются учетные данные аккаунта Red Hat
  * **subscription-manager attach --auto** для активации подписки
