yum-versionlock で yum パッケージのバージョンを固定する

シェアする

yum パッケージのバージョンを固定する yum-versionlock の使い方をまとめました.

スポンサーリンク
レクタングル(大)広告

検証環境

下記 Vagrant Box で検証しました.

インストール方法

普通に yum から下記プラグインをインストールします.

sudo yum install -y yum-plugin-versionlock

検証対象

今回は Ansible で検証します. CentOS7 では epel-release を導入すると,次のように複数のバージョンの Ansibleyum でインストールできます.

epel-release リポジトリの追加.

sudo yum install -y epel-release

yum でインストールできる Ansible の確認.

[vagrant@localhost ~]$ yum list --showduplicates | grep ^ansible.noarch
ansible.noarch                          2.4.2.0-2.el7                 extras
ansible.noarch                          2.7.5-1.el7                   epel

旧バージョン v2.4.2.0-el7 の Ansible のインストール.

sudo yum install -y ansible-2.4.2.0-2.el7

インストールされた Ansible のバージョン確認.

[vagrant@localhost ~]$ ansible --version
ansible 2.4.2.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/vagrant/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

使い方

バージョン固定: yum versionlock add [PACKAGES]

バージョン固定は次のコマンドで行います.

sudo yum versionlock add [PACKAGES]

先程インストールした Ansible とデフォルトで入っている bash のバージョンを固定するには次のようにします.

sudo yum versionlock add ansible bash

これを実行すると, /etc/yum/pluginconf.d/versionlock.list にエントリが追加されます.

[vagrant@localhost ~]$ cat /etc/yum/pluginconf.d/versionlock.list

# Added locks on Sat Jan  5 16:54:51 2019
0:ansible-2.4.2.0-2.el7.*
0:bash-4.2.46-31.el7.*

この状態で yum update を試みると次のように防いでくれます.

[vagrant@localhost ~]$ sudo yum update
読み込んだプラグイン:fastestmirror, versionlock
Loading mirror speeds from cached hostfile
 * base: mirrors.cat.net
 * epel: www.ftp.ne.jp
 * extras: mirrors.cat.net
 * updates: mirrors.cat.net
Excluding 1 update due to versionlock (use "yum versionlock status" to show it)
No packages marked for update

バージョン固定の確認: yum versionlock list

バージョン固定の定義ファイルを直接見に行く代わりに専用の確認コマンドも提供されています.

yum versionlock list

Ansible と bash の固定 sudo yum versionlock add ansible bash を行った状態では次のようになります.

[vagrant@localhost ~]$ yum versionlock list
読み込んだプラグイン:fastestmirror, versionlock
0:ansible-2.4.2.0-2.el7.*
0:bash-4.2.46-31.el7.*
versionlock list done

バージョン固定設定の削除: yum versionlock delete [PACKAGES]

バージョン固定設定は次の文法で削除します.

sudo yum versionlock delete [PACKAGES]

Ansible と bash の固定を行った状態で bash の固定だけを開放するには次のようにします(今回は単一の引数ですが, add と同様に引数にはパッケージ名のリストを与えられます.).

sudo yum versionlock delete bash

出力

読み込んだプラグイン:fastestmirror, versionlock
Deleting versionlock for: 0:bash-4.2.46-31.el7.*
versionlock deleted: 1

パッケージ除外設定: yum versionlock exclude [PACKAGES]

パッケージを除外したい場合は次の文法で指定できます.

sudo yum versionlock exclude [PACKAGES]

tree コマンドを利用できないように指定してみます.

sudo yum versionlock exclude tree

この状態で tree をインストールしようとすると除外してくれます.注意としては単に上記にようにパッケージ名を指定した場合はそのタイミングでの最新版を除外する設定となる点です.アップデート版が配信されたときはそのパッケージは除外されていないのでインストールされる挙動となります.

[vagrant@localhost ~]$ sudo yum install tree
読み込んだプラグイン:fastestmirror, versionlock
Loading mirror speeds from cached hostfile
 * base: mirrors.cat.net
 * epel: www.ftp.ne.jp
 * extras: mirrors.cat.net
 * updates: mirrors.cat.net
Excluding 1 update due to versionlock (use "yum versionlock status" to show it)
パッケージ tree は利用できません。
エラー: 何もしません

全バージョン固定情報の削除: yum versionlock clear

下記コマンドで全バージョン固定情報を削除します.バックアップもないので復元できません.

sudo yum versionlock clear

具体的には,定義ファイルが空になります.

まとめ

yum でパッケージのバージョンを固定する方法をまとめました.マニュアルが若干わかりにくかったので挙動と実例を付属しました.プロダクションでは固定せざるを得ない部分があるのであまり乱用しない程度で利用するのが良いでしょう.

スポンサーリンク
レクタングル(大)広告

シェアする

フォローする

スポンサーリンク
レクタングル(大)広告