VirtualBox  CentOS7 RPMパッケージ管理について

### はじめに
linux パッケージ管理について知識をつけるため、勉強しました。
復習のため、この記事にまとめました。

以下のサイトで学びました。
infracollege
https://infracollege.vamdemicsystem.black/linux/

### 動作環境
VirtualBox環境 
ゲストOS CentOS7

### linux パッケージ管理とは
linux パッケージ管理とは、アプリケーションを使用するための実行ファイルとライブラリと設定ファイル等が入ったものです。例えば、linuxのコマンドは、何らかのパッケージに含まれているから使用出来ます。
RPMはRedHat社が開発したパッケージシステムです。
※上記はLPICレベル1 小豆本を参考にしました。

### パッケージ(php72-php)のインストール
#### 現在のリポジトリのリストを取得
リポジトリとは、パッケージの入手先です。
デフォルトで入っているCentOS7のリポジトリと拡張リポジトリ(epel)が入っていることを確認した
※拡張リポジトリ(epel)は事前にインストールしました
```
[root@localhost yum.repos.d]# yum repolist
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * remi-safe: ftp.riken.jp
 * updates: ftp.iij.ad.jp
リポジトリー ID                                                             リポジトリー名                                                                                                        状態
base/7/x86_64                                                               CentOS-7 - Base                                                                                                       10,072
epel/x86_64                                                                 Extra Packages for Enterprise Linux 7 - x86_64                                                                        13,755
extras/7/x86_64                                                             CentOS-7 - Extras
updates/7/x86_64                                                            CentOS-7 - Updates                                                                                                     3,773
repolist: 32,864
```
#### php72-phpのパッケージをインストールした

現在、この環境にremiのリポジトリがないため、インストールできない。
※remiをインストールする前に、拡張リポジトリ(epel)のインストールは必要
今回は拡張リポジトリ(epel)は既にインストールしているため、手順の記載は省く
```
[root@localhost ~]# yum install php72-php
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.iij.ad.jp
base                                                                                                                                                       | 3.6 kB  00:00:00
extras                                                                                                                                                     | 2.9 kB  00:00:00
updates                                                                                                                                                    | 2.9 kB  00:00:00
パッケージ php72-php は利用できません。
エラー: 何もしません
```
#### remiリポジトリを追加
```
[root@localhost ~]# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
http://rpms.famillecollet.com/enterprise/remi-release-7.rpm を取得中
警告: /var/tmp/rpm-tmp.iIcSL6: ヘッダー V4 DSA/SHA1 Signature、鍵 ID 00f97f56: NOKEY
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:remi-release-7.9-3.el7.remi      ################################# [100%]
[root@localhost ~]#
```
#### 現在のリポジトリのリストを取得
remiのリポジトリが追加されたことを確認した
```
[root@localhost yum.repos.d]# yum repolist
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * remi-safe: ftp.riken.jp
 * updates: ftp.iij.ad.jp
リポジトリー ID                                                             リポジトリー名                                                                                                        状態
base/7/x86_64                                                               CentOS-7 - Base                                                                                                       10,072
epel/x86_64                                                                 Extra Packages for Enterprise Linux 7 - x86_64                                                                        13,755
extras/7/x86_64                                                             CentOS-7 - Extras                                                                                                        509
remi-safe                                                                   Safe Remi's RPM repository for Enterprise Linux 7 - x86_64                                                             4,755
updates/7/x86_64                                                            CentOS-7 - Updates                                                                                                     3,773
repolist: 32,864
[root@localhost yum.repos.d]#
```
#### 再度、 php72-phpのパッケージをインストールした
 php72-phpのバージョンを確認し、問題なければyを入力して、インストールを実施する。
※yum install -y を入れてパッケージをインストールすると、誤ったバージョンのパッケージをインストールすることがあるため注意。最終確認する意味で、yを入れない方が良い
```
[root@localhost yum.repos.d]# yum install php72-php
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink                                                                                                                                                             | 7.6 kB  00:00:00
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.tsukuba.wide.ad.jp
※処理の途中は記載を省略した

依存性を解決しました

========================================================================================================================================================================================================
 Package                                                アーキテクチャー                       バージョン                                               リポジトリー                               容量
========================================================================================================================================================================================================
インストール中:
 php72-php                                              x86_64                                 7.2.34-10.el7.remi                                       remi-safe                                 1.6 M
依存性関連でのインストールをします:
 audit-libs-python                                      x86_64                                 2.8.5-4.el7                                              base                                       76 k
 checkpolicy                                            x86_64                                 2.5-8.el7                                                base                                      295 k
 environment-modules                                    x86_64                                 3.2.10-10.el7                                            base                                      107 k
 httpd                                                  x86_64                                 2.4.6-97.el7.centos.5                                    updates                                   2.7 M
 libX11                                                 x86_64                                 1.6.7-4.el7_9                                            updates                                   607 k
 libX11-common                                          noarch                                 1.6.7-4.el7_9                                            updates                                   164 k
 libXau                                                 x86_64                                 1.0.8-2.1.el7                                            base                                       29 k
 libargon2                                              x86_64                                 20161029-3.el7                                           epel                                       23 k
 libcgroup                                              x86_64                                 0.41-21.el7                                              base                                       66 k
 libsemanage-python                                     x86_64                                 2.5-14.el7                                               base                                      113 k
 libxcb                                                 x86_64                                 1.13-1.el7                                               base                                      214 k
 php72-php-cli                                          x86_64                                 7.2.34-10.el7.remi                                       remi-safe                                 3.2 M
 php72-php-common                                       x86_64                                 7.2.34-10.el7.remi                                       remi-safe                                 645 k
 php72-php-json                                         x86_64                                 7.2.34-10.el7.remi                                       remi-safe                                  71 k
 php72-runtime                                          x86_64                                 2.0-1.el7.remi                                           remi-safe                                 1.1 M
 policycoreutils-python                                 x86_64                                 2.5-34.el7                                               base                                      457 k
 python-IPy                                             noarch                                 0.75-6.el7                                               base                                       32 k
 scl-utils                                              x86_64                                 20130529-19.el7                                          base                                       24 k
 setools-libs                                           x86_64                                 3.3.8-4.el7                                              base                                      620 k
 tcl                                                    x86_64                                 1:8.5.13-8.el7                                           base                                      1.9 M

トランザクションの要約
========================================================================================================================================================================================================
インストール  1 パッケージ (+20 個の依存関係のパッケージ)

総ダウンロード容量: 14 M
インストール容量: 44 M
Is this ok [y/d/N]:
```
インストール処理の続きです。
パッケージをインストールする前に、RPMパッケージが本物であるかどうかチェックするかの確認だと思われます。
yを入力する。以下のGPGチェックはサイトで勉強しました。
https://xtech.nikkei.com/it/article/COLUMN/20061031/252339/
```
合計                                                                                                                                                                    6.5 MB/s |  14 MB  00:00:02
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi から鍵を取得中です。
Importing GPG key 0x00F97F56:
 Userid     : "Remi Collet <RPMS@FamilleCollet.com>"
 Fingerprint: 1ee0 4cce 88a4 ae4a a29a 5df5 004e 6f47 00f9 7f56
 Package    : remi-release-7.9-3.el7.remi.noarch (installed)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-remi
上記の処理を行います。よろしいでしょうか？ [y/N]y
Running transaction check
Running transaction test
```
#### php72-phpをインストール済みであること確認した
```
[root@localhost yum.repos.d]# rpm -qa | grep php72-php
php72-php-common-7.2.34-10.el7.remi.x86_64
php72-php-7.2.34-10.el7.remi.x86_64
php72-php-json-7.2.34-10.el7.remi.x86_64
php72-php-cli-7.2.34-10.el7.remi.x86_64
[root@localhost yum.repos.d]#
```
#### epelのリポジトリ設定ファイルの中身を確認した
以下のサイトでリポジトリの設定で有効／無効の勉強しました。
https://kazmax.zpp.jp/linux_beginner/yum_repository_enable_disable.html#an1
```
[root@localhost yum.repos.d]# pwd
/etc/yum.repos.d ※現在のフォルダ
[root@localhost yum.repos.d]# cat epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1　　※リポジトリの設定で有効／無効
gpgcheck=1 　※パッケージをインストールする前に、RPMパッケージをチェックする
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7                                       
```
リポジトリの設定が無効(enabled=0)の場合、パッケージをインストールする際は、
以下の様にリポジトリを指定する必要があります。何も指定しなかった場合は、パッケージをインストールできません。
```
yum --enablerepo=remi-safe install php72-php-ldap
```
#### 補足でdnfコマンドを試してみた。
yumに代わって今後使われると思います。
yumコマンドに比べて、インストールしている途中の処理が詳細に表示されてます。
```
 [root@localhost yum.repos.d]#
[root@localhost yum.repos.d]# dnf install nrpe
CentOS-7 - Base                                                                                                                                                    6.9 MB/s |  10 MB     00:01
CentOS-7 - Updates                                                                                                                                                 5.0 MB/s |  18 MB     00:03
CentOS-7 - Extras                                                                                                                                                  1.2 MB/s | 330 kB     00:00
メタデータの期限切れの最終確認: 0:00:01 時間前の 2022年05月14日 12時10分13秒 に実施しました。
Package nrpe-4.0.3-6.el7.x86_64 is already installed.
依存関係が解決しました。
行うべきことはありません。
完了しました!            
```
### まとめ
●リポジトリについて
パッケージをインストールするには、インストールするパッケージを保有するリポジトリ(入手先)の
の場所が記載している設定ファイル(/etc/yum.repos.d/xxxxxx.repo)が必要になります。

例えば、php関連のパッケージは、remiリポジトリが必要であり、デフォルトでは入っていないため、
事前にリポジトリをインストールする必要があります。
※リポジトリをインストールすることで、/etc/yum.repos.d/xxxxxx.repoの設定ファイル作成されて
パッケージをインストールすることが出来る様になります。

●パッケージについて
基本的には、パッケージをインストールする際は、依存関係を解決してくれるyumコマンドを使用します。
セキュリティが厳しい環境であれば、一つの方法として、インターネットに出れるサーバーから、yumコマンドを使ってrpmパッケージのファイル自体をダウンロードし、ダウンロードしたrpmパッケージファイルを対象のサーバーにコピーする方法があります。
また、yumコマンドよりdnfコマンドを使う機会が増えるため、今後勉強が必要だと思いました。