色んな事情でyumでインストールした特定パッケージのバージョンを固定したい(アップデートしたくない)場合の設定について。
環境
[zaki@manager-dev ~]$ cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core)
ちょっと古いけどこれで。
お題
[zaki@manager-dev ~]$ ansible --version ansible 2.4.2.0 config file = /etc/ansible/ansible.cfg configured module search path = [u'/home/zaki/.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, Aug 7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
古いにもほどがあるけど、これで。
(CentOS7系デフォルトのリポジトリでyum installできるもの)
準備
Ansibleの最新バージョンがインストールされる状態にする。
epelを追加
[zaki@manager-dev ~]$ sudo yum install epel-release -y
updateを確認
[zaki@manager-dev ~]$ sudo yum update
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.cat.net
* epel: mirrors.aliyun.com
* extras: mirrors.cat.net
* updates: mirrors.cat.net
:
:
================================================================================
Package アーキテクチャー
バージョン リポジトリー 容量
================================================================================
インストール中:
python2-passlib noarch 1.7.1-1.el7 epel 741 k
python-passlib.noarch 1.6.5-2.el7 を入れ替えます
更新します:
ansible noarch 2.9.3-1.el7 epel 17 M
epel-release noarch 7-12 epel 15 k
トランザクションの要約
================================================================================
インストール 1 パッケージ
更新 2 パッケージ
総ダウンロード容量: 18 M
Is this ok [y/d/N]:
この通り、Ansible 2.9がインストール可能になる。 今回やりたいのは、この状況で他のパッケージはアップデートしてもいいけど、Ansibleのみアップデート対象外にするにはどうするか。
除外設定
(a) --excludeオプションで指定
[zaki@manager-dev ~]$ sudo yum update --exclude=ansible
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.cat.net
* epel: ftp.yz.yamagata-u.ac.jp
* extras: mirrors.cat.net
* updates: mirrors.cat.net
:
:
================================================================================
Package アーキテクチャー
バージョン リポジトリー 容量
================================================================================
インストール中:
python2-passlib noarch 1.7.1-1.el7 epel 741 k
python-passlib.noarch 1.6.5-2.el7 を入れ替えます
更新します:
epel-release noarch 7-12 epel 15 k
トランザクションの要約
================================================================================
インストール 1 パッケージ
更新 1 パッケージ
総ダウンロード容量: 756 k
Is this ok [y/d/N]:
一応動く。
とはいえ、yumの度に毎回--exclude=ansibleを指定するのも面倒だし、そもそも忘れる。
(b) /etc/yum.conf に設定
[zaki@manager-dev ~]$ tail -2 /etc/yum.conf # exclude setting exclude=ansible
設定ファイルにexclude=ansibleを追加
[zaki@manager-dev ~]$ sudo yum update
:
:
================================================================================
Package アーキテクチャー
バージョン リポジトリー 容量
================================================================================
インストール中:
python2-passlib noarch 1.7.1-1.el7 epel 741 k
python-passlib.noarch 1.6.5-2.el7 を入れ替えます
更新します:
epel-release noarch 7-12 epel 15 k
トランザクションの要約
================================================================================
インストール 1 パッケージ
更新 1 パッケージ
総ダウンロード容量: 756 k
Is this ok [y/d/N]:
Ansible 2.9がアップデート対象から除外された。
ちなみに、こんな外部ファイルを用意してみたけど、こういうのはincludeされたりはしなかった:)
# ダメな設定 [zaki@manager-dev ~]$ cat /etc/yum/exclude.conf exclude=ansible
うっかりアップデートしてしまった時のダウングレード
2.9にしてしまったあとに、2.4など古いバージョンに戻したい場合
[zaki@manager-dev ~]$ ansible --version ansible 2.9.3 config file = /etc/ansible/ansible.cfg configured module search path = [u'/home/zaki/.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, Aug 7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
インストール可能なバージョンをリストアップ
[zaki@manager-dev ~]$ sudo yum list ansible --showduplicate 読み込んだプラグイン:fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.cat.net * epel: ftp.yz.yamagata-u.ac.jp * extras: mirrors.cat.net * updates: mirrors.cat.net インストール済みパッケージ ansible.noarch 2.9.3-1.el7 @epel 利用可能なパッケージ ansible.noarch 2.4.2.0-2.el7 extras ansible.noarch 2.9.3-1.el7 epel [zaki@manager-dev ~]$
2.9.3-1.el7と2.4.2.0-2.el7がyumでインストール可能で、現在2.9.3-1.el7であることがわかる。
yumでダウングレード
downgradeサブコマンドを使う
[zaki@manager-dev ~]$ sudo yum downgrade ansible-2.4.2.0-2.el7
:
:
================================================================================
Package アーキテクチャー
バージョン リポジトリー 容量
================================================================================
ダウングレード中:
ansible noarch 2.4.2.0-2.el7 extras 7.6 M
トランザクションの要約
================================================================================
ダウングレード 1 パッケージ
総ダウンロード容量: 7.6 M
Is this ok [y/d/N]:
これでyで進めれば、2.4.2になる。
[zaki@manager-dev ~]$ ansible --version ansible 2.4.2.0 :
参考
古いバージョンに固定しなくても運用できるようにしような。