システム管理 · 3 min read · Dec 01, 2025

CentOS / Rocky Linuxでパッケージとカーネルの更新をブロックする方法

パッケージマネージャーは、Linuxユーザーにとって最も便利なツールの一つです。単一のコマンドで、Linuxシステムから任意のソフトウェア/パッケージをインストール、アップグレード、削除できます。しかし、時にはどのパッケージをインストールまたはアップグレードするか、どのパッケージを自動的にアップグレードからブロックするかを細かく制御する必要があります。なぜこれを行いたいのでしょうか?時には、パッケージの更新版にバグがあることがわかることがあります。そのパッケージが次回sudo yum upgradeを実行したときにアップグレードされないようにしたいのです。そして、各パッケージを個別にアップグレードするのは面倒です。

このチュートリアルでは、特定のパッケージのインストールまたはアップグレードをブロックする方法と、特定のバージョンのパッケージやカーネルのインストールをブロックする方法について説明します。

注意: 時間が経つと、どのパッケージを保持しているかを忘れてしまうことがあります。バグのないバージョンが出ていてもです。したがって、長期間パッケージを保持することはセキュリティ上の問題を引き起こす可能性があるため、注意を怠らないでください。

ここでは5つの方法について説明します。これらの方法はすべて、yumYellow dog Updater, Modified)およびdnfDandified YUM)パッケージマネージャーを使用します。

前提条件

  • CentOSまたはRocky LinuxまたはAlma Linuxを搭載したサーバー。今回のチュートリアルではRocky Linux 9を使用しましたが、ここでのコマンドは他のオペレーティングシステムや古いリリースでも問題なく動作するはずです。
  • sudo権限を持つ非rootユーザー。

方法1 - パッケージのインストール/更新を永久に無効にする(yum.confを使用)

パッケージを永久にインストール、更新、または削除できないようにロックするには、/etc/yum.confまたは/etc/dnf/dnf.confファイルを使用します。

以下のようになります。

[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False

たとえば、nginxパッケージをインストール、更新、または削除できないように保持したい場合は、ファイルの最後に以下の行を追加します。

exclude=nginx

すべてのnginxパッケージを停止したい場合は、*文字を使用できます。

exclude=nginx*

複数のパッケージを除外したい場合は、名前をスペースで区切って入力できます。

exclude=nginx php

ロックされたパッケージは、システムをアップグレードしても同じバージョンのままです。これは特にグラフィックドライバーを保持するのに便利です。

ブロックされたパッケージ、nginxをインストールしてみましょう。

$ sudo dnf install nginx
または
$ sudo yum install nginx

同様の出力が得られます。

Last metadata expiration check: 0:00:21 ago on Mon 05 Dec 2022 10:42:01 AM UTC.
All matches were filtered out by exclude filtering for argument: nginx
Error: Unable to find a match: nginx

ここでは、アーキテクチャによってパッケージをブロックすることもできます。たとえば、32ビットパッケージをブロックしたい場合は、/etc/yum.confファイルに以下の行を入力できます。

exclude=*.i?86 *i686

この方法には重要な注意点があります。この方法では、sudo yum upgradeコマンドを使用したり、システムをアップグレードしたりしてもパッケージは自動的にアップグレードされませんが、手動でパッケージを削除することはできます。sudo yum remove は保持されたパッケージに対しても機能します。

この方法は、パッケージが自動的に変更されるのを防ぐだけです。保持している限り、手動で削除しない限り、現在のバージョンのままです。

カーネルの更新をブロックする

カーネルの更新をブロックするには、以下のコマンドを使用します。

$ sudo dmf --exclude=kernel* update
または
$ sudo yum --exclude=kernel* update

他のすべての方法でカーネルの更新をブロックするために、パッケージ名としてkernel*を使用できます。

方法2 - パッケージのインストール/更新を一時的に無効にする

この方法では、yumコマンドに追加のパラメータを使用します。

任意のパッケージを更新する際に、更新したくない特定のパッケージをブロックするために、コマンドに-xスイッチを使用します。

$ sudo dnf -x nginx update
または
$ sudo yum -x nginx update

上記のコマンドは、システム上のnginxパッケージを除くすべてのパッケージを更新します。単一のコマンドで複数のパッケージをブロックするには、-xスイッチを複数回使用します。

$ sudo dnf -x nginx -x php update
または
$ sudo yum -x nginx -x php update

同様に、-xの代わりに–excludeスイッチを使用することもできます。

$ sudo dnf --exclude nginx, php
または
$ sudo yum --exclude nginx, php

方法3 - リポジトリを使用する(.repoファイルを使用)

リポジトリを介してインストールされたパッケージがある場合、アップグレードを停止する別の方法があります。これは、/etc/yum.repos.dディレクトリにある.repoファイルを編集することで行います。

たとえば、システムにEpelリポジトリが追加されていて、そこからgolangパッケージをインストールしたくない場合、/etc/yum.repos.d/epel.repoファイルにexclude=certbotという行を追加することでブロックできます。

[epel]
name=Extra Packages for Enterprise Linux 8 - $basearch
# メタリンクを使用する方がはるかに安全ですが、ローカルミラーを使用したい場合は
# そのアドレスをここに置いてください。
#baseurl=https://download.example/pub/epel/8/Everything/$basearch
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-8&arch=$basearch&infra=$infra&content=$contentdir
enabled=1
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
exclude=certbot
...

次に、Epelリポジトリを介して利用可能なcertbotパッケージをインストールしてみましょう。

$ sudo dnf install certbot
または
$ sudo yum install certbot

同様の出力が得られます。

Extra Packages for Enterprise Linux 8 - x86_64                                           20 kB/s | 4.5 kB     00:00
All matches were filtered out by exclude filtering for argument: certbot
Error: Unable to find a match: certbot

方法4 - リポジトリ全体の更新をブロックする

代わりに、リポジトリ全体の更新をブロックすることもできます。

まず、システム上のすべてのリポジトリを確認しましょう。

$ dnf repolist
または
$ yum repolist

同様の出力が得られます。

repo id                                       repo name
appstream                                     Rocky Linux 8 - AppStream
baseos                                        Rocky Linux 8 - BaseOS
digitalocean-agent                            DigitalOcean Agent
docker-ce-stable                              Docker CE Stable - x86_64
epel                                          Extra Packages for Enterprise Linux 8 - x86_64
extras                                        Rocky Linux 8 - Extras
nginx-stable                                  nginx stable repo

Epelリポジトリの更新を除外するには、以下のコマンドを使用します。

$ sudo dnf update --disablerepo=epel
または
$ sudo yum update --disablerepo=epel

複数のリポジトリを無効にするには、IDをカンマで区切って指定します。

$ sudo dnf update --disablerepo=epel, extras
または
$ sudo yum update --disablerepo=epel, extras

リポジトリの.repoファイルを介してブロックする

特定のrepoファイルを編集することでリポジトリをブロックする別の方法があります。

epel.repoファイルを編集するために開きましょう。

$ sudo nano /etc/yum.repos.d/epel.repo

enabled変数の値を1から0に変更します。

[epel]
name=Extra Packages for Enterprise Linux 8 - $basearch
# メタリンクを使用する方がはるかに安全ですが、ローカルミラーを使用したい場合は
# そのアドレスをここに置いてください。
#baseurl=https://download.example/pub/epel/8/Everything/$basearch
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-8&arch=$basearch&infra=$infra&content=$contentdir
enabled=0
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
...

Ctrl + Xを押してファイルを保存し、プロンプトが表示されたらYを入力します。

次に、epelリポジトリにあるcertbotパッケージをインストールしてみましょう。

$ sudo dnf install certbot
または
$ sudo yum install certbot

同様の出力が得られます。

Last metadata expiration check: 0:02:10 ago on Mon 05 Dec 2022 10:48:31 AM UTC.
No match for argument: certbot
Error: Unable to find a match: certbot

方法5 - 特定のバージョンでパッケージをブロックする(versionlockプラグインを使用)

VersionlockはYumパッケージマネージャー用のプラグインです。このプラグインは、パッケージがロックを行った時点でインストールされたバージョンよりも大きいバージョンにアップグレードされるのを許可しません。

まず、versionlockをインストールします。

$ sudo dnf install dnf-plugin-versionlock
または
$ sudo yum install dnf-plugin-versionlock

これにより、システムに/etc/yum/pluginconf.d/versionlock.listというファイルが作成されます。

システムにインストールされているmariadb-serverの現在のバージョンをロックするには、次のコマンドを実行します。

$ sudo dnf versionlock mariadb-server
または
$ sudo yum versionlock mariadb-server

同様の出力が得られます。

Last metadata expiration check: 0:01:05 ago on Mon 05 Dec 2022 12:14:16 PM UTC.
Adding versionlock on: mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.*

複数のパッケージを一度に追加することもできます。

$ sudo dnf versionlock evolution golang
または
$ sudo yum versionlock evolution golang

同様の出力が得られます。

Last metadata expiration check: 0:01:05 ago on Mon 05 Dec 2022 12:14:16 PM UTC.
Adding versionlock on: evolution-0:3.28.5-18.el8.*
Adding versionlock on: golang-0:1.18.4-1.module+el8.7.0+1073+99e3b3cd.*

mariadb-serverパッケージを更新してみましょう。

$ sudo dnf update mariadb-server
または
$ sudo yum update mariadb-server

同様の出力が得られます。

Last metadata expiration check: 0:02:07 ago on Mon 05 Dec 2022 12:14:16 PM UTC.
Package mariadb-server available, but not installed.
No match for argument: mariadb-server
Error: No packages marked for upgrade.

versionlockプラグインを介してブロックされたパッケージのリストを確認するには、次のコマンドを使用します。

$ dnf versionlock list
または
$ yum versionlock list

同様の出力が得られます。

Last metadata expiration check: 0:00:05 ago on Wed 07 Dec 2022 02:36:20 AM UTC.
elasticsearch-7.17.5-1.x86_64
mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.*
evolution-0:3.28.5-18.el8.*
golang-0:1.18.4-1.module+el8.7.0+1073+99e3b3cd.*

versionlockからパッケージを削除するには、次のコマンドを使用します。

$ sudo dnf versionlock delete mariadb-server
または
$ sudo yum versionlock delete mariadb-server

次の出力が得られます。

Deleting versionlock for: mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.*

リストを破棄してブロックをクリアするには、次のコマンドを使用します。

$ sudo dnf versionlock clear
または
$ sudo yum versionlock clear

また、/etc/yum/pluginconf.d/versionlock.listファイルを編集してversionlockプラグインを使用してパッケージをブロックすることもできます。

インストールされたパッケージをファイルに追加するには、次のコマンドを使用します。

$ sudo sh -c 'rpm -qa | grep evolution >> /etc/yum/pluginconf.d/versionlock.list'

上記のコマンドは、evolutionパッケージをリストに追加することでブロックします。rpm -qa | grep evolutionを使用して完全なパッケージ名を取得しました。そして、sudo sh -cコマンドは、ファイルに書き込むコマンドを実行するためのsudoシェルを実行します。

結論

これでこのチュートリアルは終了です。CentOSまたはRocky Linuxシステムでインストールまたはアップグレードされたくない特定のバージョンのパッケージをブロックできるようになったはずです。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。