システム管理 · 3 min read · Dec 01, 2025
CentOS / Rocky Linuxでパッケージとカーネルの更新をブロックする方法

パッケージマネージャーは、Linuxユーザーにとって最も便利なツールの一つです。単一のコマンドで、Linuxシステムから任意のソフトウェア/パッケージをインストール、アップグレード、削除できます。しかし、時にはどのパッケージをインストールまたはアップグレードするか、どのパッケージを自動的にアップグレードからブロックするかを細かく制御する必要があります。なぜこれを行いたいのでしょうか?時には、パッケージの更新版にバグがあることがわかることがあります。そのパッケージが次回sudo yum upgradeを実行したときにアップグレードされないようにしたいのです。そして、各パッケージを個別にアップグレードするのは面倒です。
このチュートリアルでは、特定のパッケージのインストールまたはアップグレードをブロックする方法と、特定のバージョンのパッケージやカーネルのインストールをブロックする方法について説明します。
注意: 時間が経つと、どのパッケージを保持しているかを忘れてしまうことがあります。バグのないバージョンが出ていてもです。したがって、長期間パッケージを保持することはセキュリティ上の問題を引き起こす可能性があるため、注意を怠らないでください。
ここでは5つの方法について説明します。これらの方法はすべて、yum(Yellow dog Updater, Modified)およびdnf(Dandified 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 repoEpelリポジトリの更新を除外するには、以下のコマンドを使用します。
$ 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.repoenabled変数の値を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システムでインストールまたはアップグレードされたくない特定のバージョンのパッケージをブロックできるようになったはずです。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。