remi と epel のリポジトリを削除する — 順番と、「無効にしたつもり」で残るもの
先に結論
リポジトリを消す前に、やりたいのは「無効化」なのか「削除」なのかを決めてください。 多くの場合、必要なのは無効化のほうです。
| 無効化 | 削除 | |
|---|---|---|
| やること | dnf config-manager --set-disabled | dnf remove |
| 設定ファイル | 残る(enabled=0 になる) | 消える |
| GPG鍵 | 残る | 消える |
| 入れたパッケージ | 残る | 残る |
| 戻すとき | --set-enabled だけ | 入れ直し |
| 向いている場面 | 一時的に使いたくない | 環境を作り直す |
削除する場合、順番が決まっています。
| 順 | やること | 理由 |
|---|---|---|
| 1 | 入っているバージョンを確認 | rpm -qa | grep -E 'epel-release|remi-release' |
| 2 | remi-release を先に消す | remi が epel に依存しているため(詳しく) |
| 3 | epel-release を消す | 依存元が無くなってから |
| 4 | dnf clean all | 消えたリポジトリのメタデータを捨てる |
| 5 | 残ったパッケージを確認 | リポジトリを消しても消えない(詳しく) |
remi は epel に依存している
いまの依存関係を確かめた
公式が配っている remi-release パッケージを実際にダウンロードして、
RPMヘッダの依存宣言を読みました。
| パッケージ | epel への要求 |
|---|---|
remi-release-9.8-1.el9.remi | epel-release = 9 |
remi-release-10.2-1.el10.remi | epel-release = 10 |
remi-release-8.10-2.el8.remi | epel-release = 8 |
3系統とも epel-release を要求しています。 だから epel を先に消そうとすると止まります。
# 入っているものを確認する
rpm -qa | grep -E 'epel-release|remi-release'
# 何に依存しているかを自分の環境で見る
rpm -q --requires remi-release | grep epel
昔より厳しくなっている
この依存自体は昔からありました。ただし書き方が変わっています。
| 時期 | 条件 | 意味 |
|---|---|---|
| 2012年ごろ(EL5) | epel-release >= 5 | 5以上なら何でもよい |
| いま(EL9) | epel-release = 9 | 9ちょうどでなければならない |
「以上」から「完全一致」になりました。 EL9 の環境に EPEL 8 の release パッケージが入っていると、remi-release 9 は入りません。 メジャーバージョンを混ぜられないということです。
「remi を無効にした」が効いていないことがある
remi が置く .repo は1本ではない
ここが一番の落とし穴です。パッケージの中身を展開して、何が置かれるかを数えました。
| ファイル | セクション | 既定 |
|---|---|---|
remi.repo | [remi] | 無効 |
[remi-test] | 無効 | |
[remi-debuginfo] | 無効 | |
[remi-test-debuginfo] | 無効 | |
remi-safe.repo | [remi-safe] | 有効 |
[remi-safe-debuginfo] | 無効 | |
remi-modular.repo | [remi-modular] | 有効 |
[remi-modular-debuginfo] | 無効 | |
[remi-modular-test] | 無効 | |
[remi-modular-test-debuginfo] | 無効 |
3ファイル・10セクション。そして [remi] は既定で無効です。
実際に有効になっているのは remi-safe と remi-modular の2つ。
--set-disabled remi だけ実行して「止めた」と思っていると、何も止まっていません。
自分の環境で有効なものを数えるなら、これが早いです。
# 有効なリポジトリだけを一覧する
dnf repolist --enabled
# remi 系で有効なものだけ
dnf repolist --enabled | grep remi
なぜ [remi] だけ無効なのか
この並びには理由があります。パッケージが置く remi-safe.repo の冒頭に、
公式のコメントとして書いてあります。
「このリポジトリは RHEL/CentOS の base リポジトリと併用しても安全である。
PHPスタック向けの追加パッケージだけを提供し、
依存はすべて base か EPEL にある」
— remi-safe.repo の先頭コメント(要約)
つまり remi-safe は「足すだけ」で、OS標準のパッケージを置き換えません。
だから既定で有効でも危なくない。
一方 [remi] は標準のPHPを置き換えるので、
自分で有効にした人だけが使う形になっています。
| 名前 | 既定 | 性格 |
|---|---|---|
remi-safe | 有効 | 追加だけ。標準パッケージを置き換えない |
remi-modular | 有効 | モジュール形式で複数バージョンを扱う |
remi | 無効 | 標準のPHPを置き換える。自分で有効にして使う |
remi-test | 無効 | テスト版 |
ここが分かると、消し方の判断が変わります。
「PHPのバージョンを上げるために remi を有効にした」のなら、
戻したいのは [remi] を無効にすることであって、remi-release の削除ではないかもしれません。
remi-release を消すと remi-safe も一緒に消えます。
GPG鍵も、消すときに気づく人が多い部分です。13個置かれます。
| 鍵 | 数 | 用途 |
|---|---|---|
RPM-GPG-KEY-remi2017 〜 remi2026 | 10 | 年ごとに署名鍵を更新しているため |
RPM-GPG-KEY-remi.el9 / remi.el10 | 2 | OSのメジャーバージョン別 |
RPM-GPG-KEY-remi | 1 | 共通 |
古い鍵が残っているのは、過去に署名されたパッケージを検証できるようにするためです。
手で /etc/yum.repos.d/remi.repo だけ消しても、この13個は残ります。
パッケージとして削除すれば一緒に消えます。
EPEL 側も2つ有効になる
EPEL も同じように数えました。
| ファイル | 有効なセクション | 無効なセクション |
|---|---|---|
epel.repo | [epel] | epel-debuginfo / epel-source |
epel-testing.repo | なし | 3つとも無効 |
epel-cisco-openh264.repo | [epel-cisco-openh264] | 2つ |
EPEL を入れると epel-cisco-openh264 も一緒に有効になります。
H.264 のコーデックを配るためのもので、意識して入れた覚えがない人がほとんどだと思います。
| 由来 | 有効なもの | 数 |
|---|---|---|
| epel-release | epel / epel-cisco-openh264 | 2 |
| remi-release | remi-safe / remi-modular | 2 |
| 合計 | 4 |
消さずに無効化する
「いまは使いたくない」だけなら、削除より無効化のほうが安全です。 設定が残るので、戻すのが一行で済みます。
# remi 系をまとめて無効にする(* が使える)
dnf config-manager --set-disabled 'remi*'
# EPEL も止める
dnf config-manager --set-disabled 'epel*'
# 確認
dnf repolist --enabled
config-manager が無いと言われたら dnf install dnf-plugins-core を先に実行してください。
ワイルドカードを使うのは、表5のとおりセクションが複数あるからです。
| 方法 | 書き方 | 備考 |
|---|---|---|
| 恒久的に止める | dnf config-manager --set-disabled 'remi*' | 推奨 |
| 1回のコマンドだけ外す | dnf update --disablerepo='remi*' | 設定は変えない |
| 1回だけ使う | dnf install --enablerepo=remi ... | 無効のまま一時的に有効化 |
| 手で書き換える | enabled=1 → 0 | 10セクションある。消し漏らしやすい |
削除する
順番
# 1) 何が入っているか
rpm -qa | grep -E 'epel-release|remi-release'
# 2) remi を先に消す
dnf remove remi-release
# 3) epel を消す
dnf remove epel-release
# 4) メタデータを捨てる
dnf clean all
順番を逆にすると、依存関係で止まります(表3)。
rpm -e を直接使った場合は Failed dependencies で弾かれます。
dnf remove epel-release は依存している remi-release も巻き込んで消そうとします。
実行前に「何が消えるか」の一覧が出るので、そこを読んでから y を押してください。
意図しないものが並んでいたら中止します。
消しても残るもの
リポジトリを消しても、そこから入れたパッケージは消えません。 消えるのは「どこから取ってくるか」の設定だけです。
| もの | どうなるか |
|---|---|
/etc/yum.repos.d/ の .repo | 消える(remi は3本、epel は3本) |
| GPG鍵 | 消える |
| remi から入れた PHP など | そのまま残る |
| その残ったパッケージの更新 | 止まる。取得先が無くなるため |
| キャッシュ | dnf clean all で消す |
何が残っているかは、こう数えられます。
# remi 由来のパッケージを探す(リリース表記に remi が入る)
rpm -qa | grep remi
# epel 由来
rpm -qa | grep -E '\.el[0-9]+\.?.*epel'
残ったパッケージを放置すると、更新が来ない状態で動き続けます。 セキュリティ更新も届きません。 リポジトリを消すなら、残ったパッケージをどうするか(消すのか、標準のものに戻すのか)まで決めてから消してください。
EPEL 9 は release パッケージが2つある
これも消し忘れの原因になります。EPEL 9 には release パッケージが2種類あります。
「EPEL 9 には2つの異なるリリースパッケージがあります。RHEL 9 を使っているなら epel-release だけを、
CentOS Stream 9 を使っているなら epel-release と epel-next-release の両方を入れてください」
— Getting started with EPEL(Fedora Docs・要約)
| OS | 入っているもの |
|---|---|
| RHEL 9 | epel-release |
| CentOS Stream 9 | epel-release と epel-next-release |
| RHEL 10 / CentOS Stream 10 | epel-release |
| RHEL 8 | epel-release |
CentOS Stream 9 で epel-release だけ消すと、epel-next-release が残ります。
最初の確認コマンドを grep epel にしておけば、両方見つかります。
なお EPEL を入れるときに crb(RHEL 8 では powertools)を有効にしているはずです。
EPEL をやめるなら、これを戻すかどうかも決めてください。
# 入れたときに有効にしたもの(EL9 の例)
dnf config-manager --set-enabled crb
# 戻すなら
dnf config-manager --set-disabled crb
crb を無効に戻すのは、他に crb のパッケージを使っていない場合だけにしてください。 EPEL 以外のものが crb に依存していると、そちらの更新が止まります。
| 区分 | 対応しているもの |
|---|---|
| RHEL | 10.2 / 9.8 / 8.10 |
| CentOS Stream | 10 / 9 |
| Fedora | 45(開発版)/ 44 / 43 |
| EPEL 7 以前 | サポート終了。アーカイブ送り |
AIに任せるときの注意
| 頼むこと | 向くか | 理由 |
|---|---|---|
dnf repolist --enabled の出力を貼って「消すとどうなる?」 | 向く | 手元の事実から判断できる |
rpm -qa | grep remi の結果を貼って仕分けさせる | 向く | 一覧の整理は得意 |
rpm -q --requires の読み方 | 向く | 書式の説明 |
| 「remi を無効にして」 | 向かない | --set-disabled remi だけ返りやすい。実際に有効なのは別の2つ |
| 「epel を消すコマンドを教えて」 | 向かない | 順番と、残るパッケージの話が落ちる |
| バージョン番号そのもの | 向かない | 自分の環境の rpm -qa が正本 |
判定の目安です。答えに remi-safe と remi-modular が出てこなかったら、その回答は足りていません。
CentOS 6 や 7 を前提にした yum の手順が返ってきた場合も、いまの環境とは違います。
よくある質問
epel を先に消せないのはなぜですか
remi-release が epel-release を要求しているからです(表3)。
remi を先に消してください。
無効化と削除、どちらにすべきですか
一時的に使いたくないだけなら無効化です(表1)。 設定が残るので戻すのが一行で済みます。
--set-disabled remi を実行したのに止まりません
[remi] はもともと無効だからです。
有効なのは remi-safe と remi-modular です(表5)。
'remi*' とワイルドカードで指定してください。
リポジトリを消せば、入れたPHPも消えますか
消えません。消えるのは取得先の設定だけです(表11)。 残ったパッケージは更新が届かない状態になります。
自分が remi から何を入れたか分かりません
rpm -qa | grep remi で出ます。リリース表記に remi が含まれるためです。
epel-cisco-openh264 とは何ですか
EPEL を入れると一緒に有効になるリポジトリです(表8)。 H.264 のコーデックを配るためのもので、意識して入れていなくても有効になっています。
CentOS Stream 9 で消し残しが出ます
epel-next-release が残っていませんか(詳しく)。
CentOS Stream 9 では release パッケージが2つです。
EL8 と EL9 を混ぜられますか
できません。依存条件が完全一致になっているためです(表4)。
まとめ
- まず「無効化」か「削除」かを決める。一時的に止めたいだけなら無効化で足りる。
- 削除するなら remi → epel の順。
remi-releaseがepel-releaseを要求している。 - 依存条件は EL9 で
epel-release = 9の完全一致。昔の「以上」より厳しくなった。 remi-releaseは .repo を3本置き、10セクションを定義する。- 既定で有効なのは
[remi]ではなくremi-safeとremi-modular。これが「無効にしたのに効かない」の正体。 remi-safeが既定で有効なのは「追加だけで標準パッケージを置き換えない」ため(公式のコメントに明記)。[remi]は置き換えるので自分で有効にする。- 無効化は
dnf config-manager --set-disabled 'remi*'とワイルドカードで。 - EPEL 側は
epelとepel-cisco-openh264の2つが有効になる。 - リポジトリを消しても、そこから入れたパッケージは残る。残ったものは更新が止まる。
- CentOS Stream 9 は release パッケージが2つ(
epel-releaseとepel-next-release)。 - EPEL を入れるとき有効にした
crb/powertoolsを戻すかどうかも決める。 - バージョンは記事ではなく
rpm -qaを見る。環境ごとに違う。
同じく yum / dnf でつまずく話は CentOS 6 で yum localinstall が通らないときの切り分け、 サーバーが止まる側の話は MySQLが「No space left on device」で止まったとき、 どのサーバーを借りるかは レンタルサーバーおすすめ8選 に書きました。
この記事の依存関係とファイル構成は、2026年10月25日に公式が配布している
remi-release-9.8-1.el9.remi・remi-release-10.2-1.el10.remi・
remi-release-8.10-2.el8.remi・epel-release-9-11.el9 を取得して、
パッケージの中身を直接読んで確かめたものです。
release パッケージは更新されるので、作業の前に自分の環境で rpm -qa と
dnf repolist --enabled を実行して確認してください。