yum パッケージのバージョンを固定する yum-versionlock
の使い方をまとめました.
検証環境
下記 Vagrant Box で検証しました.
インストール方法
普通に yum から下記プラグインをインストールします.
sudo yum install -y yum-plugin-versionlock
検証対象
今回は Ansible で検証します. CentOS7 では epel-release
を導入すると,次のように複数のバージョンの Ansible
を yum
でインストールできます.
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 でパッケージのバージョンを固定する方法をまとめました.マニュアルが若干わかりにくかったので挙動と実例を付属しました.プロダクションでは固定せざるを得ない部分があるのであまり乱用しない程度で利用するのが良いでしょう.