プログラミング

yumコマンドとCentOSにおける注意点

CentOSなどのRedHat系のLinuxでは、yumコマンドを使用して、配信されているパッケージのリポジトリから、 様々なソフトをインストールすることが出来る。

  • yumでインストール可能なパッケージとインストール済みのパッケージを表示したければ

yum list コマンドをオプション無しで実行する。

sudo yum list

 

  • yumで利用可能なパッケージを確認したければ

yum list available コマンドを使用する。 表示されるパッケージ数が多いので、パイプを利用して以下のように使うことが多い。 (例)MySQL関連のパッケージを一覧表示する場合

sudo yum list available | grep mysql

 

  • yumでアップデート可能なパッケージを確認したければ

yum list updates コマンドを使用する。

sudo yum list updates

 

yum check-update でも確認できる。

sudo yum check-update

 

  • yumでアップデート可能なパッケージの各バージョンを確認したければ

yum –showduplicates list コマンドを使う。

sudo yum --showduplicates list パッケージ名

 

sudo yum info でも見れる。

sudo yum info パッケージ名

 

  • yumで配信されているパッケージを最新状態にしたければ

yum update コマンドを使用する。

sudo yum update

 

  • yumでインストールした履歴を確認したければ

yum history list コマンドを使用する。

sudo yum history list

読み込んだプラグイン:fastestmirror, langpacks
ID     | コマンドライン           | 日時             | 操作           | 変更
-------------------------------------------------------------------------------
    27 | --security update        | 2019-09-24 11:50 | I, U           |   80 EE
    26 | install createrepo       | 2019-09-24 11:43 | Install        |    3
    25 | update bind*             | 2019-04-25 19:18 | I, U           |   32 EE
    24 | update bind*             | 2018-05-21 18:19 | Update         |    6
    23 | update bind*             | 2018-01-23 10:16 | Update         |    6
    22 | update bind*             | 2018-01-17 15:51 | Update         |    6
    21 | update bind*             | 2017-09-14 11:28 | Update         |    6 EE
    20 | update bind*             | 2017-07-06 14:50 | Update         |    6 EE
    19 | update bind*             | 2017-05-11 15:23 | Update         |    6
    18 | update bind*             | 2017-03-03 21:04 | Update         |    6
    17 | update bind*             | 2017-02-15 11:57 | Update         |    6
    16 | update yum               | 2017-01-13 12:06 | Update         |    2
    15 | update bind*             | 2016-12-21 13:33 | I, U           |    7 EE
    14 | update bind              | 2016-10-04 22:16 | Update         |    6
    13 | update bind              | 2016-09-28 14:15 | Update         |    6
    12 | update                   | 2016-02-18 16:40 | I, U           |  336 EE
    11 | update bind              | 2016-01-21 13:10 | Update         |    6 EE
    10 | -y install bind bind-chr | 2015-11-24 17:03 | I, U           |    6
     9 | remove ntp               | 2015-09-15 15:41 | Erase          |    1
     8 | -y install ntp           | 2015-09-15 15:33 | Install        |    2
history list

こんな感じで表示されるので、その履歴の詳細を確認したければ、ID番号を指定して下記のコマンドを実行。

yum history info ID番号

実行すると、指定したID番号でインストールや更新した一覧が表示される。

 

  • yumでインストールしたパッケージを確認するなら
sudo yum list installed

絞り込みしたければ、grepを使う。

sudo yum list installed | grep postfix

 

  • yumでインストールしたパッケージのバージョンの履歴を確認したければ
sudo yum history package-list postfix

読み込んだプラグイン:fastestmirror, langpacks
ID     | 操作           | Package
-------------------------------------------------------------------------------
     1 | インストール   | postfix-2:2.10.1-6.el7.x86_64
history package-list

のように、パッケージ名を指定し、コマンドを実行。

複数のバージョンの更新履歴があれば以下のように表示される。


  • yumでインストールしたパッケージの依存関係を調べたければ

yum deplist コマンドを使用する。絞り込みしたければ、grepを使う。

sudo yum deplist postfix | grep ldap
   provider: openldap.x86_64 2.4.44-21.el7_6
  依存性      : libldap-2.4.so.2()(64bit)
   provider: openldap.x86_64 2.4.44-21.el7_6

 

  • yumのリポジトリを新たに追加するには
sudo yum install epel-release

といった感じ。

 

  • 追加したyum リポジトリを一覧で確認するには
sudo yum repolist all

でOK。有効なものと無効なものが表示される。

CentOSでのセキュリティアップデートをyumでやる場合の注意点

本来「yum –security update」と実行すると、セキュリティパッチのみアップデートされるはずだが、 CentOS7の場合はリポジトリにセキュリティアップデート情報が提供されていないので、 通常のアップデートが実行されてしまう。

そこで、セキュリティアップデートができるように、 CentOS用のセキュリティ情報を提供しているCEFS projectの情報を基に、 ローカルリポジトリを導入することで、yumでセキュリティアップデートが行えるようにしなければいけない。

上記では、

CentOS does not provide the necessary metadata in the repos for yum-plugin-security to function. It does not work on CentOS.

と回答しており、yumリポジトリのセキュリティプラグインに必要なメタデータを提供していないとしている。

yum update で対応せよ。とのこと。

また、こちらのgithubリポジトリはまだ活発で、CentOSのsecurity update toolを開発している。こちらのリポジトリの活用も検討してみるのも良いかもしれない。

CentOS用のセキュリティ情報を提供しているCEFS projectというものがあるので、このプロジェクトが提供している情報をもとに リンク先のPythonのスクリプトで、updateinfo.xmlを作成し、ローカルリポジトリを導入してそのリポジトリをSecurityのパッケージのリポジトリにしてしまうというもの。

上記の対応でもアップデートされないyumパッケージがあった時に分かったこと※重要

実は、CEFS projectの情報を基に作成したyumリポジトリでは、CEFS project自体に、「エポック番号」に対応していないことが yum update –security してもアップデートされないパッケージがある原因だった!

generate_updateinfo.pyでもepochは補完されない

 

「エポック番号」とは、

「Epoch」はパッケージの新旧を比較するために使われる数値で、指定されていない場合は「0」と見なされる。 rpmコマンドやyumコマンドでパッケージをアップデートする場合、通常はVersionやReleaseの値の大小を比較してバージョンの新旧をチェックするのだが、Epochの値が指定されていた場合は、この値の大小でバージョンの新旧がチェックされる。つまり、VersionやReleaseの値が古い(数値が小さい)場合でも、Epochの値が大きければそちらのパッケージがより新しいものと認識される。

Epochは通常パッケージ名には表示されないため、利用するとバージョンの新旧が判別しにくくなる。 そのため、明示的に古いバージョンのものをインストールさせたい場合などを除き、利用は基本的には推奨されていない。

じゃあ、どうやってyumパッケージのセキュリティ管理していくのか

代替策として、Vulsを使っていくのは有効かもしれない。

ABOUT ME
moto
約5年間勤めた公務員から転職しました。 日頃の学びをここにアウトプットしていきます。 御朱印集めと筋トレが好きです。