FedoraでDNFを高速化:パッケージを素早くダウンロードするプラグインのインストールと設定

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

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です——ダウンロードがボトルネックにならないようにするだけで、体験が大きく変わります。

Share: