zaki work log

作業ログやら生活ログやらなんやら

yum updateするときに特定のパッケージを更新対象外にする

色んな事情で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.el72.4.2.0-2.el7yumでインストール可能で、現在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
:

参考

linuxfan.info


古いバージョンに固定しなくても運用できるようにしような。