メインコンテンツまでスキップ

Debian apt に Alibaba Cloud ミラーを追加する

· 約6分

新規インストールした Debian はデフォルトで公式ソースを使いますが、中国国内からソフトウェアパッケージをダウンロードすると数十 KB/s しか出ないことが多く、何かをインストールしようとするとプログレスバーが延々と止まったままになります。apt ソースを Alibaba Cloud の国内ミラーに切り替えるのは、マシンを手に入れたら私がたいてい最初にやることです。ここに手順と注意点を書き留めておきます。

なぜミラーを変えるのか

apt でソフトウェアをインストールするとき、/etc/apt/sources.list に設定されたリポジトリのアドレスからパッケージとインデックスをダウンロードします。公式ソースのサーバーは国外にあるため、中国国内からのアクセスはレイテンシが高く帯域も細く、apt-get updateapt-get install も非常に遅くなり、タイムアウトで失敗することさえあります。Alibaba Cloud、清華大学、中国科学技術大学などのミラーサイトは公式ソースから定期的にリポジトリ全体を同期しており、パッケージの内容は同一で、アドレスが国内ノードに変わっただけです。速度は桁違いに向上します。

ソースリストの書式

手を動かす前に、まず sources.list の各行の意味を理解しておきましょう。書式は決まっています:

deb [仓库地址] [发行版代号] [组件...]
  • deb はバイナリパッケージのリポジトリを表し、deb-src は対応するソースコードリポジトリです。普段ソフトウェアをインストールするだけなら deb-src は設定しなくても構いません;
  • ディストリビューションのコードネームは Debian のバージョンに対応します。例えば stretch は Debian 9 です。ミラーを変えるときはコードネームが自分のシステムのバージョンと一致していなければなりません。cat /etc/os-release で確認できます;
  • コンポーネントのうち main は公式のメインリポジトリで、contribnon-free には非自由ソフトウェアに依存するパッケージや、それ自体が非自由なパッケージ(一部のドライバやファームウェアなど)が含まれます。通常はすべて付けておきます;
  • stretch/updates はセキュリティ更新のリポジトリ、stretch-updates は通常の更新、stretch-backports は新しいバージョンから移植(バックポート)されたパッケージを提供します。

操作手順

1)ソースリストのファイルを開く

vim /etc/apt/sources.list

変更前にバックアップを取っておくことをおすすめします。問題が起きてもすぐ元に戻せます:

# 既存のソース設定をバックアップする
cp /etc/apt/sources.list /etc/apt/sources.list.bak

# ソースリストを編集する
vim /etc/apt/sources.list

2)Alibaba Cloud ミラーのアドレスを追加する

既存の内容をコメントアウトするか空にして、以下の行を書き込みます(stretch すなわち Debian 9 の例):

deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb http://mirrors.aliyun.com/debian-security stretch/updates main
deb-src http://mirrors.aliyun.com/debian-security stretch/updates main
deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib

コピーしやすいプレーンテキスト版:

deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb http://mirrors.aliyun.com/debian-security stretch/updates main
deb-src http://mirrors.aliyun.com/debian-security stretch/updates main
deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib

3)ソースを更新する

保存して終了したら、ローカルのパッケージインデックスを更新して新しい設定を反映させます:

apt-get update

このステップでは Alibaba Cloud ミラーからすべてのリポジトリのインデックスファイルを取得し直します。出力の中に mirrors.aliyun.com のアドレスが見えるはずです。以降 apt-get install を実行すれば、ダウンロードは国内ミラー経由になります。

ハマりどころと注意点

  • コードネームは必ずシステムのバージョンと対応させること。stretch のソースを別のバージョンに書き込むと、軽くて update の 404 エラー、悪くすると異なるバージョンのパッケージが混在して依存関係が壊れます。他のバージョンでは、上記のすべての stretch を対応するコードネームに置き換えるだけです。
  • 比較的新しい Debian バージョンでは、セキュリティソースの書き方が コードネーム/updates から コードネーム-security に変わりました。古い記事をそのまま写すとリポジトリが見つからないエラーに遭遇します。ミラーサイトのトップページに掲載されている設定を正としてください。
  • update 時に GPG 署名関連のエラーが出る場合、たいていは対応する鍵がないかシステム時刻がずれています。まず時刻を確認してから鍵を調べましょう。検証をスキップして強行インストールするのはやめてください。
  • イントラネットや安定性への要求が高い環境では、ソースを変更した後、まず apt-get update して小さなパッケージを 1 つインストールして検証し、問題がないことを確認してから大規模なインストールやアップグレードを行いましょう。

まとめ

ミラーの変更自体は 3 ステップだけです。/etc/apt/sources.list をバックアップして編集し、ミラーのアドレスを書き込み、apt-get update でインデックスを更新する。鍵となるのはコードネームとシステムのバージョンを一致させることと、変更前にバックアップを残しておくこと。問題が起きてもいつでも元に戻せます。この考え方は清華ミラーや中国科学技術大学ミラーにもそのまま使えます。ドメイン名を変えるだけです。

COMMENTS