dnf updateを実行してもダウンロードが遅くてイライラしていませんか?筆者も同じ経験をしました。Fedoraをメインの開発マシンとして2年間使い続けた中で、いくつかのプラグインとシンプルな設定変更だけで、makecacheの時間を約45秒から約12秒に短縮する方法を見つけました。
5分ですぐに設定する
長々と説明は不要です。今すぐ実行すべきコマンドはこちらです:
# 基本プラグインをインストール
sudo dnf install -y dnf-plugins-core deltarpm python3-deltarpm
# fastestmirrorを有効化 — 最も近いサーバーを自動選択
echo "fastestmirror=True" | sudo tee -a /etc/dnf/dnf.conf
# 並列ダウンロードを有効化 — 複数ファイルを同時ダウンロード
echo "max_parallel_downloads=10" | sudo tee -a /etc/dnf/dnf.conf
# deltarpmを有効化 — 差分のみダウンロード
echo "deltarpm=True" | sudo tee -a /etc/dnf/dnf.conf
# キャッシュを更新してテスト
sudo dnf clean all && sudo dnf makecache --refresh
以上です。急いでいる場合は上記5つのコマンドをコピーするだけで完了です。以下では各設定がなぜ重要なのかを解説します。
なぜデフォルトのDNFは遅いのか?
核心的な問題:デフォルトのDNFはパッケージを1つずつダウンロードします。並列処理なし、近くのミラーの自動選択もなし、何も特別な設定がありません。日本からDNFがフランクフルトのサーバーからファイルを引っ張っているなら——当然遅くなります。
さらに、変更部分が数百KBだけであっても、更新のたびにパッケージ全体をダウンロードします。まとめると主な問題は3つです:
- ミラー選択が最適化されていない — 遠くのサーバーに接続する
- 並列処理ではなく順番にパッケージをダウンロードする
- 差分のみでなくパッケージ全体をダウンロードする
各プラグインの詳細解説
1. dnf-plugins-core — 基盤プラグインセット
このパッケージはDNFの重要なプラグインを多数含むメタパッケージです。現代のFedoraには通常プリインストールされていますが、念のため再実行しても問題ありません:
sudo dnf install dnf-plugins-core
# インストール済みプラグインを確認
dnf list installed | grep dnf-plugin
2. Fastest Mirror — 最速サーバーの自動選択
仕組みはシンプルです:このプラグインはリスト内のすべてのミラーにpingを送り、あなたの場所から最も応答が速いものを選択します。日本からテストしたところ、デフォルト設定と比べて3〜4倍の速度向上が見られました。
sudo nano /etc/dnf/dnf.conf
次の行を[main]セクションに追加します:
[main]
fastestmirror=True
初回実行時はミラーの速度測定に数秒余分にかかります。結果はキャッシュされるため、次回以降はずっと速くなります。
3. Parallel Downloads — 複数パッケージの同時ダウンロード
これが筆者の一番好きな機能です。次のパッケージを待つのではなく、DNFが複数のファイルを同時にダウンロードします:
sudo nano /etc/dnf/dnf.conf
# [main]セクションに追加
max_parallel_downloads=10
経験上10がスイートスポットです。20以上に増やすとミラーサーバーにスロットルされることがあります。回線が遅い場合は5〜6で十分です。
4. DeltaRPM — 差分のみのダウンロード
更新時に50MBのパッケージ全体をダウンロードする代わりに、deltaRPMは現在インストールされているバージョンとの差分のみをダウンロードします。小さな更新であれば、50MBのパッケージが2〜3MBのダウンロードで済む場合もあり、帯域幅を大幅に節約できます。
sudo dnf install deltarpm python3-deltarpm
# 設定で有効化
echo "deltarpm=True" | sudo tee -a /etc/dnf/dnf.conf
注意: deltaRPMは頻繁に更新する場合に最も効果的です。長期間更新しないでいると、deltaファイルが元のパッケージより大きくなることがあります——その場合、DNFは自動的にフルパッケージのダウンロードに切り替えます。
高度な設定
/etc/dnf/dnf.conf の完全な設定ファイル
開発マシンで現在使用している設定ファイルです。そのままコピーして使えます:
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=False
skip_if_unavailable=True
# ダウンロードの高速化
fastestmirror=True
max_parallel_downloads=10
deltarpm=True
# キャッシュ設定
keepcache=False
metadata_expire=6h
# タイムアウト — ミラーが遅い場合のフリーズを防ぐ
timeout=30
minrate=1000
あまり見慣れない行の説明:
metadata_expire=6h— 更新を頻繁にチェックせず、6時間に1回で十分timeout=30— ミラーが30秒で応答しない場合はスキップして次を試すminrate=1000— 速度が1KB/s以下に落ちたらすぐにミラーを変更best=False— 依存関係の競合がある場合、最新でないバージョンのインストールを許可
大きな更新前にメタデータを更新する
大きなアップグレードの前や設定変更後は、最適なミラーを使用していることを確認するためにこのコマンドを実行します:
# 古いキャッシュを削除して更新
sudo dnf clean all
sudo dnf makecache --refresh
# 選択されているミラーを確認
sudo dnf repolist -v | grep Repo-baseurl
dnf-plugins-coreでCoprリポジトリを管理する
dnf-plugins-coreをインストール済みなら、dnf coprコマンドがすぐ使えます——URLを手動でコピーせずにCoprリポジトリを有効化できます:
# Coprリポジトリを有効化
sudo dnf copr enable username/reponame
# 有効なCoprリポジトリを一覧表示
sudo dnf copr list
# 使わなくなったリポジトリを無効化
sudo dnf copr disable username/reponame
日常使いから得た実践的なTips
Tip 1: 先にダウンロード、後でインストール
回線状態が良いときにパッケージをダウンロードしておき、オフライン時にインストールすることもできます:
# インストールせずにすべての更新をキャッシュにダウンロード
sudo dnf upgrade --downloadonly
# キャッシュからインストール — インターネット不要
sudo dnf upgrade --cacheonly
Tip 2: 不要なプラグインを無効化する
デフォルトで有効になっているプラグインの中には、依存関係の解決を遅くするものがあり、使わない可能性もあります:
# 有効なプラグインを確認
ls /etc/dnf/plugins/
# Coprを使わない場合はcoprプラグインを無効化
# /etc/dnf/plugins/copr.conf を編集して追加:
# enabled=0
Tip 3: ターミナル用の便利なエイリアス
~/.bashrcまたは~/.zshrcに追加します:
# コンパクトな出力で素早く更新
alias update='sudo dnf upgrade -y --refresh'
# 更新後のクリーンアップ
alias cleanup='sudo dnf autoremove -y && sudo dnf clean packages'
# 新しいターミナルを開かずにすぐ適用
source ~/.bashrc
結果の確認
設定が完了したら、シンプルなベンチマークを実行します:
time (sudo dnf clean all && sudo dnf makecache)
筆者のマシンでは、fastestmirrorとparallel downloadsを有効にした後、makecacheが約45秒から約12秒に短縮されました。100Mbps以上の回線環境では、さらに良い結果が得られます。
Fedoraをメインの開発マシンとして2年間使い続け、このセットアップに失望したことは一度もありません。Fedoraは6ヶ月ごとに新バージョンをリリースし、パッケージは常にbleeding-edgeです——ダウンロードがボトルネックにならないようにするだけで、体験が大きく変わります。
