色んな事情で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 :
参考
古いバージョンに固定しなくても運用できるようにしような。