Fedoraをメインの「商売道具」として使い始めて2年、このディストリビューションのパッケージ更新速度の速さがとても気に入っています。しかし、Fedoraは整合性に関して非常に「厳しい」ことでも有名です。MariaDBからMySQLに切り替えたり、RPM Fusionの完全版FFmpegに移行しようとしたことはありませんか?dnfが競合エラーを吐いたり、最悪の場合デスクトップ環境ごと削除しようとしたりするのは、本当にイライラするものです。
そんな行き詰まった時、通常のinstallやremoveコマンドはほとんど役に立ちません。秘訣は、あまり注目されていない2つのツール、dnf swapとdnf shellにあります。これらは、住んでいる家を壊すことなく、システムのコンポーネントを根本から交換するためのテクニックです。
クイックスタート:3ステップで素早く置換
すぐに解決したい場合は、依存関係エラーの調査で少なくとも15分は節約できる、以下の2つのシナリオを参考にしてください。
1. dnf swapでパッケージを入れ替える
パッケージを削除してからインストールしようとしないでください。依存関係の連鎖が壊れやすくなります。これらを1つにまとめましょう。例えば、関連パッケージを維持したままMariaDBからMySQLに変更する場合:
sudo dnf swap mariadb-server community-mysql-server
DNFは、これら2つのパッケージを同じトランザクション内で入れ替えるように計算します。共有ライブラリは、誤って削除されることなく保持されます。
2. dnf shellでマルチタスク処理
Aを削除、Bをインストール、Cをアップグレードといった複雑な操作を、システム上で一度の実行で完結させたい場合:
sudo dnf shell
# 対話型環境に入ります:
> remove firefox
> install google-chrome-stable
> run
> quit
すべてはrunと入力したときに始まります。DNFはすべての要求を統合し、最適な解決策を見つけ出します。
なぜ従来のdnf installは失敗しやすいのか?
通常、DNFは安全策をとります。パッケージBがパッケージAと競合する場合、すぐに停止します。先にパッケージAを削除すると、他の多くの重要なソフトウェアが削除の「ブラックホール」に引き込まれてしまう可能性があります。
実際に、オーディオドライバーを変更する際に苦労したことがあります。古いセットを削除しようとすると、依存関係が複雑に絡み合っているため、FedoraがGNOMEデスクトップまで削除しようとしたのです。dnf swapは「アトミック・トランザクション」という仕組みでこの問題を解決します。システムは「コンポーネントAを取り出し、すぐにコンポーネントBを挿入する」と理解します。システムに穴が開くような空白時間は生じません。
より柔軟なswap構文
パッケージ名が大きく異なる場合に混乱を避けるため、アクションを明示的に指定することもできます:
sudo dnf swap --install new-package --remove old-package
「大手術」のためにdnf shellを使いこなす
dnf shellをトランザクション・プログラミング環境と考えてください。入力したすべてのコマンドは待機リストに入ります。これは、BをインストールするためにAを削除する必要があるが、Aを削除するにはCが先に必要、といった場合に非常に便利です。コマンドを個別に実行すると、終わりのないエラーのループに陥ることがあります。
シェル内の「黄金」コマンド:
config:セッション内で直接DNF設定(GPGチェックの無効化など)を変更します。repo enable [reponame]:このトランザクションの間だけ、一時的にリポジトリを有効にします。transaction list:実行予定のタスクリストを確認します。
典型的な例:Fedoraの制限版であるffmpeg-freeから、ビデオ処理をよりスムーズにするためにRPM Fusionのフル版に切り替える場合:
sudo dnf shell
> --setopt=strict=0
> remove ffmpeg-free
> install ffmpeg
> run
注意:--setopt=strict=0を使用すると、libavcodec-freeのようなライブラリの競合を処理する際にDNFがより柔軟になります。
個人の環境からの実戦経験
システムを深く「いじった」後に再インストールする羽目にならないよう、いくつかの注意点を挙げます:
1. dnf historyで常にバックアップ手段を
swapした後にアプリケーションの動作が不安定になっても、慌てないでください。DNFには優れた「タイムトラベル」機能があります:
sudo dnf history
sudo dnf history undo [ID]
このコマンドは、入れ替えを行う直前と全く同じ状態にシステムを戻します。
2. コアライブラリには触れない
dnf swapは強力ですが、glibcやkernelのようなパッケージを不用意に入れ替えないでください。これらのコンポーネントはシステムの根幹であり、小さなミスでシステムが即座にフリーズする可能性があります。
3. 残骸の掃除
入れ替え後、古い依存パッケージが「孤立(orphan)」した状態でシステムに残ることがあります。システムを常にクリーンに保つために、以下のコマンドを実行しましょう:
sudo dnf autoremove
この記事を通じて、Fedoraをより深くメンテナンスすることに自信を持っていただければ幸いです。真っ赤な「Conflict」エラーを恐れる代わりに、swapとshellを使いこなしてプロのように対処しましょう!

