yum updateなどのパッケージ管理コマンドで特定のパッケージを除外する方法のまとめ

Linuxの各種パッケージを管理する場合、yumやaptといったコマンドを利用しますよね。一般的に、パッケージをアップデートする場合、これらのコマンドを使って登録済みのリポジトリの内容を更新したのち、対象となるパッケージを、依存関係含め、まとめてアップデートできるのが特徴であるメリットとも言えます。

Linuxのパッケージは、システム関連や導入したアプリケーション含め。セキュリティ的な観点からも常に最新であることが望ましいのですが、特定の業務や現場によっては、特定のパッケージはバージョンを固定して利用したい、つまりアップデートのタイミングを調整したい場合が出てきます。

例えば、頻繁にアップデートが行われるKubernetesなどは、システムを構成するコントロールブレーンや複数ワーカーノードを含めたクラスタ全体がアップデートの対象になります。ここではKubernetesの詳細解説は省きますが、クラスタ全体を安全に更新するためには一般的なパッケージアップデートでは対応できないケースが出てきます。

ややこしい話になってしまいましたが、端的に言えば、運用しているシステムによって特定のパッケージを除いてアップデートしたいというケースが出てくるということです。

そうした状況などで利用するパッケージ管理コマンドのオプションをご紹介します。

yum updateコマンドの実行例

以下は、CentOS7の仮想マシンで、通常のyum updateを実行した例です。
ちなみに、KubernetesとDockerを導入済みでそれらのリポジトリが追加されています。

# yum update
読み込んだプラグイン:fastestmirror, langpacks
Determining fastest mirrors
 * base: mirrors.cat.net
 * extras: mirrors.cat.net
 * updates: mirrors.cat.net
base                                                                                                             | 3.6 kB  00:00:00
docker-ce-stable                                                                                                 | 3.5 kB  00:00:00
extras                                                                                                           | 2.9 kB  00:00:00
kubernetes/signature                                                                                             |  844 B  00:00:00
kubernetes/signature                                                                                             | 1.4 kB  00:00:00 !!!
updates                                                                                                          | 2.9 kB  00:00:00
(1/3): docker-ce-stable/7/x86_64/primary_db                                                                      |  70 kB  00:00:00
(2/3): kubernetes/primary                                                                                        | 104 kB  00:00:01
(3/3): updates/7/x86_64/primary_db                                                                               |  13 MB  00:00:02
kubernetes                                                                                                                      766/766
依存性の解決をしています
--> トランザクションの確認を実行しています。
(中略)
依存性を解決しました

========================================================================================================================================
 Package                                          アーキテクチャー バージョン                          リポジトリー                容量
========================================================================================================================================
インストール中:
 kernel                                           x86_64           3.10.0-1160.53.1.el7                updates                     50 M
更新します:
 bash                                             x86_64           4.2.46-35.el7_9                     updates                    1.0 M
 bind-export-libs                                 x86_64           32:9.11.4-26.P2.el7_9.8             updates                    1.1 M
 bind-libs                                        x86_64           32:9.11.4-26.P2.el7_9.8             updates                    157 k
 bind-libs-lite                                   x86_64           32:9.11.4-26.P2.el7_9.8             updates                    1.1 M
 bind-license                                     noarch           32:9.11.4-26.P2.el7_9.8             updates                     91 k
 bind-utils                                       x86_64           32:9.11.4-26.P2.el7_9.8             updates                    261 k
 bpftool                                          x86_64           3.10.0-1160.53.1.el7                updates                    8.5 M
 containerd.io                                    x86_64           1.4.12-3.1.el7                      docker-ce-stable            28 M
 cronie                                           x86_64           1.4.11-24.el7_9                     updates                     92 k
 cronie-anacron                                   x86_64           1.4.11-24.el7_9                     updates                     36 k
 docker-ce                                        x86_64           3:20.10.12-3.el7                    docker-ce-stable            23 M
 docker-ce-cli                                    x86_64           1:20.10.12-3.el7                    docker-ce-stable            30 M
 docker-ce-rootless-extras                        x86_64           20.10.12-3.el7                      docker-ce-stable           8.0 M
 docker-scan-plugin                               x86_64           0.12.0-3.el7                        docker-ce-stable           3.7 M
 iscsi-initiator-utils                            x86_64           6.2.0.874-22.el7_9                  updates                    423 k
 iscsi-initiator-utils-iscsiuio                   x86_64           6.2.0.874-22.el7_9                  updates                     94 k
 kbd                                              x86_64           1.15.5-16.el7_9                     updates                    347 k
 kbd-legacy                                       noarch           1.15.5-16.el7_9                     updates                    466 k
 kbd-misc                                         noarch           1.15.5-16.el7_9                     updates                    1.4 M
 kernel-tools                                     x86_64           3.10.0-1160.53.1.el7                updates                    8.2 M
 kernel-tools-libs                                x86_64           3.10.0-1160.53.1.el7                updates                    8.1 M
 krb5-libs                                        x86_64           1.15.1-51.el7_9                     updates                    809 k
 kubeadm                                          x86_64           1.23.3-0                            kubernetes                 9.0 M
 kubectl                                          x86_64           1.23.3-0                            kubernetes                 9.5 M
 kubelet                                          x86_64           1.23.3-0                            kubernetes                  21 M
 libsss_idmap                                     x86_64           1.16.5-10.el7_9.11                  updates                    162 k
 libsss_nss_idmap                                 x86_64           1.16.5-10.el7_9.11                  updates                    168 k
 mdadm                                            x86_64           4.1-8.el7_9                         updates                    440 k
 nss                                              x86_64           3.67.0-4.el7_9                      updates                    882 k
 nss-sysinit                                      x86_64           3.67.0-4.el7_9                      updates                     66 k
 nss-tools                                        x86_64           3.67.0-4.el7_9                      updates                    549 k
 openssh                                          x86_64           7.4p1-22.el7_9                      updates                    510 k
 openssh-clients                                  x86_64           7.4p1-22.el7_9                      updates                    655 k
 openssh-server                                   x86_64           7.4p1-22.el7_9                      updates                    459 k
 openssl                                          x86_64           1:1.0.2k-24.el7_9                   updates                    494 k
 openssl-libs                                     x86_64           1:1.0.2k-24.el7_9                   updates                    1.2 M
 polkit                                           x86_64           0.112-26.el7_9.1                    updates                    170 k
 python-perf                                      x86_64           3.10.0-1160.53.1.el7                updates                    8.1 M
 qemu-img                                         x86_64           10:1.5.3-175.el7_9.5                updates                    705 k
 qemu-kvm                                         x86_64           10:1.5.3-175.el7_9.5                updates                    1.9 M
 qemu-kvm-common                                  x86_64           10:1.5.3-175.el7_9.5                updates                    441 k
 rpm                                              x86_64           4.11.3-48.el7_9                     updates                    1.2 M
 rpm-build-libs                                   x86_64           4.11.3-48.el7_9                     updates                    108 k
 rpm-libs                                         x86_64           4.11.3-48.el7_9                     updates                    279 k
 rpm-python                                       x86_64           4.11.3-48.el7_9                     updates                     84 k
 sssd-client                                      x86_64           1.16.5-10.el7_9.11                  updates                    229 k
 subscription-manager-rhsm                        x86_64           1.24.50-1.el7.centos                updates                    333 k
 subscription-manager-rhsm-certificates           x86_64           1.24.50-1.el7.centos                updates                    237 k
 systemd                                          x86_64           219-78.el7_9.5                      updates                    5.1 M
 systemd-libs                                     x86_64           219-78.el7_9.5                      updates                    419 k
 systemd-python                                   x86_64           219-78.el7_9.5                      updates                    146 k
 systemd-sysv                                     x86_64           219-78.el7_9.5                      updates                     97 k
 unzip                                            x86_64           6.0-24.el7_9                        updates                    172 k

トランザクションの要約
========================================================================================================================================
インストール   1 パッケージ
更新          53 パッケージ

総ダウンロード容量: 240 M
Is this ok [y/d/N]: 

ログが少々長いですが、DockerとKubernetesのパッケージも更新対象になっているのが確認できます。

このDockerとKubernetes関連のパッケージ以外をアップデートした場合ですが方法はいくつかあります。

特定のパッケージを除いてアップデートしたい場合

まずは特定のパッケージを除いてアップデートしたい場合は、excludeオプションを使用し、除外したいパッケージを指定します。

yum update --exclude=<パッケージ名>

パッケージの指定に正規表現も使用可能です。
今回はdockerとkubeで始まるパッケージを指定します。

# yum --exclude==docker*,kube* update
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.cat.net
 * extras: mirrors.cat.net
 * updates: mirrors.cat.net
依存性の解決をしています
--> トランザクションの確認を実行しています。
(中略)
依存性を解決しました

========================================================================================================================================
 Package                                          アーキテクチャー バージョン                          リポジトリー                容量
========================================================================================================================================
インストール中:
 kernel                                           x86_64           3.10.0-1160.53.1.el7                updates                     50 M
更新します:
 bash                                             x86_64           4.2.46-35.el7_9                     updates                    1.0 M
 bind-export-libs                                 x86_64           32:9.11.4-26.P2.el7_9.8             updates                    1.1 M
 bind-libs                                        x86_64           32:9.11.4-26.P2.el7_9.8             updates                    157 k
 bind-libs-lite                                   x86_64           32:9.11.4-26.P2.el7_9.8             updates                    1.1 M
 bind-license                                     noarch           32:9.11.4-26.P2.el7_9.8             updates                     91 k
 bind-utils                                       x86_64           32:9.11.4-26.P2.el7_9.8             updates                    261 k
 bpftool                                          x86_64           3.10.0-1160.53.1.el7                updates                    8.5 M
 containerd.io                                    x86_64           1.4.12-3.1.el7                      docker-ce-stable            28 M
 cronie                                           x86_64           1.4.11-24.el7_9                     updates                     92 k
 cronie-anacron                                   x86_64           1.4.11-24.el7_9                     updates                     36 k
 docker-scan-plugin                               x86_64           0.12.0-3.el7                        docker-ce-stable           3.7 M
 iscsi-initiator-utils                            x86_64           6.2.0.874-22.el7_9                  updates                    423 k
 iscsi-initiator-utils-iscsiuio                   x86_64           6.2.0.874-22.el7_9                  updates                     94 k
 kbd                                              x86_64           1.15.5-16.el7_9                     updates                    347 k
 kbd-legacy                                       noarch           1.15.5-16.el7_9                     updates                    466 k
 kbd-misc                                         noarch           1.15.5-16.el7_9                     updates                    1.4 M
 kernel-tools                                     x86_64           3.10.0-1160.53.1.el7                updates                    8.2 M
 kernel-tools-libs                                x86_64           3.10.0-1160.53.1.el7                updates                    8.1 M
 krb5-libs                                        x86_64           1.15.1-51.el7_9                     updates                    809 k
 libsss_idmap                                     x86_64           1.16.5-10.el7_9.11                  updates                    162 k
 libsss_nss_idmap                                 x86_64           1.16.5-10.el7_9.11                  updates                    168 k
 mdadm                                            x86_64           4.1-8.el7_9                         updates                    440 k
 nss                                              x86_64           3.67.0-4.el7_9                      updates                    882 k
 nss-sysinit                                      x86_64           3.67.0-4.el7_9                      updates                     66 k
 nss-tools                                        x86_64           3.67.0-4.el7_9                      updates                    549 k
 openssh                                          x86_64           7.4p1-22.el7_9                      updates                    510 k
 openssh-clients                                  x86_64           7.4p1-22.el7_9                      updates                    655 k
 openssh-server                                   x86_64           7.4p1-22.el7_9                      updates                    459 k
 openssl                                          x86_64           1:1.0.2k-24.el7_9                   updates                    494 k
 openssl-libs                                     x86_64           1:1.0.2k-24.el7_9                   updates                    1.2 M
 polkit                                           x86_64           0.112-26.el7_9.1                    updates                    170 k
 python-perf                                      x86_64           3.10.0-1160.53.1.el7                updates                    8.1 M
 qemu-img                                         x86_64           10:1.5.3-175.el7_9.5                updates                    705 k
 qemu-kvm                                         x86_64           10:1.5.3-175.el7_9.5                updates                    1.9 M
 qemu-kvm-common                                  x86_64           10:1.5.3-175.el7_9.5                updates                    441 k
 rpm                                              x86_64           4.11.3-48.el7_9                     updates                    1.2 M
 rpm-build-libs                                   x86_64           4.11.3-48.el7_9                     updates                    108 k
 rpm-libs                                         x86_64           4.11.3-48.el7_9                     updates                    279 k
 rpm-python                                       x86_64           4.11.3-48.el7_9                     updates                     84 k
 sssd-client                                      x86_64           1.16.5-10.el7_9.11                  updates                    229 k
 subscription-manager-rhsm                        x86_64           1.24.50-1.el7.centos                updates                    333 k
 subscription-manager-rhsm-certificates           x86_64           1.24.50-1.el7.centos                updates                    237 k
 systemd                                          x86_64           219-78.el7_9.5                      updates                    5.1 M
 systemd-libs                                     x86_64           219-78.el7_9.5                      updates                    419 k
 systemd-python                                   x86_64           219-78.el7_9.5                      updates                    146 k
 systemd-sysv                                     x86_64           219-78.el7_9.5                      updates                     97 k
 unzip                                            x86_64           6.0-24.el7_9                        updates                    172 k

トランザクションの要約
========================================================================================================================================
インストール   1 パッケージ
更新          47 パッケージ

総ダウンロード容量: 140 M
Is this ok [y/d/N]:

ログでを確認するとdockerとkubeで始まるパッケージが除外されているのが確認できます。

ただ、docker-ce-stableリポジトリに含まれるcontainerd.ioが除外されていません。

このような場合は、特定のリポジトリに含まれるパッケージ一式を除外対象にする方が確実です。

特定のリポジトリに含まれるパッケージ一式を除外したい場合

特定のリポジトリをアップデート対象外にするには、disablerepoオプションを使用し、除外するリポジトリを指定します。

yum update --disablerepo=<リポジトリ名>

dockerとkubernetes関連のパッケージをまとめて除外したい場合は以下のようにリポジトリを指定します。

# yum --disablerepo=docker-ce-stable,kubernetes update
(正規表現を使う場合は、docker*,kube*のように省略可能)
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.cat.net
 * extras: mirrors.cat.net
 * updates: mirrors.cat.net
依存性の解決をしています
--> トランザクションの確認を実行しています。
(中略)
依存性を解決しました

========================================================================================================================================
 Package                                            アーキテクチャー   バージョン                             リポジトリー         容量
========================================================================================================================================
インストール中:
 kernel                                             x86_64             3.10.0-1160.53.1.el7                   updates              50 M
更新します:
 bash                                               x86_64             4.2.46-35.el7_9                        updates             1.0 M
 bind-export-libs                                   x86_64             32:9.11.4-26.P2.el7_9.8                updates             1.1 M
 bind-libs                                          x86_64             32:9.11.4-26.P2.el7_9.8                updates             157 k
 bind-libs-lite                                     x86_64             32:9.11.4-26.P2.el7_9.8                updates             1.1 M
 bind-license                                       noarch             32:9.11.4-26.P2.el7_9.8                updates              91 k
 bind-utils                                         x86_64             32:9.11.4-26.P2.el7_9.8                updates             261 k
 bpftool                                            x86_64             3.10.0-1160.53.1.el7                   updates             8.5 M
 cronie                                             x86_64             1.4.11-24.el7_9                        updates              92 k
 cronie-anacron                                     x86_64             1.4.11-24.el7_9                        updates              36 k
 iscsi-initiator-utils                              x86_64             6.2.0.874-22.el7_9                     updates             423 k
 iscsi-initiator-utils-iscsiuio                     x86_64             6.2.0.874-22.el7_9                     updates              94 k
 kbd                                                x86_64             1.15.5-16.el7_9                        updates             347 k
 kbd-legacy                                         noarch             1.15.5-16.el7_9                        updates             466 k
 kbd-misc                                           noarch             1.15.5-16.el7_9                        updates             1.4 M
 kernel-tools                                       x86_64             3.10.0-1160.53.1.el7                   updates             8.2 M
 kernel-tools-libs                                  x86_64             3.10.0-1160.53.1.el7                   updates             8.1 M
 krb5-libs                                          x86_64             1.15.1-51.el7_9                        updates             809 k
 libsss_idmap                                       x86_64             1.16.5-10.el7_9.11                     updates             162 k
 libsss_nss_idmap                                   x86_64             1.16.5-10.el7_9.11                     updates             168 k
 mdadm                                              x86_64             4.1-8.el7_9                            updates             440 k
 nss                                                x86_64             3.67.0-4.el7_9                         updates             882 k
 nss-sysinit                                        x86_64             3.67.0-4.el7_9                         updates              66 k
 nss-tools                                          x86_64             3.67.0-4.el7_9                         updates             549 k
 openssh                                            x86_64             7.4p1-22.el7_9                         updates             510 k
 openssh-clients                                    x86_64             7.4p1-22.el7_9                         updates             655 k
 openssh-server                                     x86_64             7.4p1-22.el7_9                         updates             459 k
 openssl                                            x86_64             1:1.0.2k-24.el7_9                      updates             494 k
 openssl-libs                                       x86_64             1:1.0.2k-24.el7_9                      updates             1.2 M
 polkit                                             x86_64             0.112-26.el7_9.1                       updates             170 k
 python-perf                                        x86_64             3.10.0-1160.53.1.el7                   updates             8.1 M
 qemu-img                                           x86_64             10:1.5.3-175.el7_9.5                   updates             705 k
 qemu-kvm                                           x86_64             10:1.5.3-175.el7_9.5                   updates             1.9 M
 qemu-kvm-common                                    x86_64             10:1.5.3-175.el7_9.5                   updates             441 k
 rpm                                                x86_64             4.11.3-48.el7_9                        updates             1.2 M
 rpm-build-libs                                     x86_64             4.11.3-48.el7_9                        updates             108 k
 rpm-libs                                           x86_64             4.11.3-48.el7_9                        updates             279 k
 rpm-python                                         x86_64             4.11.3-48.el7_9                        updates              84 k
 sssd-client                                        x86_64             1.16.5-10.el7_9.11                     updates             229 k
 subscription-manager-rhsm                          x86_64             1.24.50-1.el7.centos                   updates             333 k
 subscription-manager-rhsm-certificates             x86_64             1.24.50-1.el7.centos                   updates             237 k
 systemd                                            x86_64             219-78.el7_9.5                         updates             5.1 M
 systemd-libs                                       x86_64             219-78.el7_9.5                         updates             419 k
 systemd-python                                     x86_64             219-78.el7_9.5                         updates             146 k
 systemd-sysv                                       x86_64             219-78.el7_9.5                         updates              97 k
 unzip                                              x86_64             6.0-24.el7_9                           updates             172 k

トランザクションの要約
========================================================================================================================================
インストール   1 パッケージ
更新          45 パッケージ

総ダウンロード容量: 107 M
Is this ok [y/d/N]:

リポジトリを指定したので、パッケージ指定の時に残っていたcontainerd.ioも除外対象になりました。

対象のパッケージが除外されていることが確認できたらアップデートを実施します。

その他のケース

追加したリポジトリの情報は/etc/yum.repos.d/に追加されますが、当該ディレクトリ内ファイルのenableの項目を0に設定することで無効化つまりアップデート対象から外す方法もあります。

# cat /etc/yum.repos.d/docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/stable
enabled=1 →ここを0にする
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/g
(以下省略)

無効化したリポジトリを追加してアップデートしたい場合には、enablerepoオプションを使用します。

yum update --enablerepo=<リポジトリ名>

参考:Debian系のaptコマンドの場合

Debian系のaptコマンドでも同様のことが可能です。

パッケージを無効化

sudo apt-mark hold <パッケージ名>
(sudo attitude hold <パッケージ名>でも可)

無効化したパッケージの確認

apt-mark showhold

無効化したパッケージの有効化

sudo apt-mark unhold <パッケージ名>
(sudo attitude unhold <パッケージ名>でも可)

ひとこと

エスパくん

LinuCの資格取得に必須の内容ではありませんが、101試験「主題1.04:リポジトリとパッケージ管理」の理解を深める意味でも知っておいて損はないと思います。