💈

ports.ubuntu.com のミラーサイトを探せ

2022/05/09に公開

クロスビルドするときにターゲットのルートファイルシステムをaptでとってくることをしていたのですが、arm64のbionic(= ubuntu 18.04)のダウンロードが遅いのが気になります。ports.ubuntu.comからダウンロードしていたのですが、ミラーサイトを探すことにしました。

ubuntuのaptリポジトリのミラーサイト

ubuntuのaptリポジトリのミラーサイトはここにまとめられています。
https://launchpad.net/ubuntu/+archivemirrors

日本のサイトもいくつかあるのですが、残念ながらi386とamd64以外のアーキテクチャのものは置いてませんでした。

ports.ubuntu.com のミラーサイトは?

検索したらちょうどいいものを見つけました。
https://askubuntu.com/questions/428698/are-there-alternative-repositories-to-ports-ubuntu-com-for-arm

このサイトに載っているスクリプトをfind-mirrorsというファイルに保存して、以下のように実行しました。

$ bash find-mirrors arm64 bionic main |grep FOUND |awk '{print $2}' > list

すると以下のような結果が得られました。

list
http://mirror.kumi.systems/ubuntu-ports/
http://mirrors.layeronline.com/ubuntu/
http://mirror.telcotech.com.kh/Linux/ubuntu-releases/
http://mirrors.portafixe.com/ubuntu/archive/
http://mirror.bjtu.edu.cn/ubuntu/
http://mirrors.cqu.edu.cn/ubuntu/
http://www.ubuntu.org.tw/
http://in.mirror.coganng.com/ubuntu-ports/
http://mirror.arvancloud.com/ubuntu/
http://ftp.daum.net/ubuntu/
http://suro.ubaya.ac.id/ubuntu/
http://ftp.lanet.kr/ubuntu-ports/
http://mirror.misakamikoto.network/ubuntu-ports/
http://jp.mirror.coganng.com/ubuntu-ports/
http://ftp.harukasan.org/ubuntu-ports/
http://ntc.net.np/ubuntu/
http://cesium.di.uminho.pt/pub/ubuntu-archive/
http://ubuntu.mirror.cambrium.nl/ubuntu/
http://mirror.coganng.com/ubuntu-ports/
http://dafi.inf.um.es/ubuntu/
http://mirrors.coreix.net/ubuntu/
http://mirrors.us.kernel.org/ubuntu/
http://mirrors.ocf.berkeley.edu/ubuntu-ports/
http://mirror.d.umn.edu/ubuntu/
http://mirror.vcu.edu/pub/gnu+linux/ubuntu/

しかし、これらのうちのどれを使うのがよいでしょうか?
ネットワーク的に近くて、ダウンロードの速度が速いものがよいのですが。

curlコマンドでダウンロード速度を測る

検索したらよさそうなものを見つけました。

https://dev.classmethod.jp/articles/curl-benchmark/

即興で以下のようなスクリプトを書いてみました。

ARCH=arm64
DIST=bionic
REPO=main

for url in `cat list`; do
  echo -n $url
  curl -w "  code: %{http_code}, speed: %{speed_download}\n" -o /dev/null -s "$url/dists/$DIST/$REPO/binary-$ARCH/"
done

比較のために http://ports.ubuntu.comlistに追加して実行しました。

http://ports.ubuntu.com/  code: 200, speed: 1842
http://mirrors.layeronline.com/ubuntu/  code: 302, speed: 0
http://mirror.bjtu.edu.cn/ubuntu/  code: 301, speed: 854
http://ubuntu.letscloud.io/ubuntu/  code: 301, speed: 57
http://mirror.telcotech.com.kh/Linux/ubuntu-releases/  code: 301, speed: 608
http://www.ubuntu.org.tw/  code: 301, speed: 0
http://ftp.tu-chemnitz.de/pub/linux/ubuntu-ports/  code: 200, speed: 23694
http://ubuntu.hbcse.tifr.res.in/ubuntu/  code: 301, speed: 211
http://mirror.arvancloud.com/ubuntu/  code: 302, speed: 0
http://suro.ubaya.ac.id/ubuntu/  code: 301, speed: 183
http://mirror.iranserver.com/ubuntu/  code: 301, speed: 228
http://mirror.faraso.org/ubuntu/  code: 301, speed: 279
http://jp.mirror.coganng.com/ubuntu-ports/  code: 200, speed: 32033
http://mirror.misakamikoto.network/ubuntu-ports/  code: 200, speed: 4298
http://mirror.isoc.org.il/pub/ubuntu/  code: 301, speed: 289
http://ftp.daum.net/ubuntu/  code: 301, speed: 1370
http://ftp.lanet.kr/ubuntu-ports/  code: 200, speed: 12699
http://ftp.harukasan.org/ubuntu-ports/  code: 200, speed: 10006
http://ntc.net.np/ubuntu/  code: 301, speed: 214
http://mirror.ihost.md/ubuntu/  code: 200, speed: 573
http://mirror.coganng.com/ubuntu-ports/  code: 200, speed: 2089
http://mirrors.coreix.net/ubuntu/  code: 301, speed: 529
http://mirrors.us.kernel.org/ubuntu/  code: 301, speed: 380
http://mirrors.ocf.berkeley.edu/ubuntu-ports/  code: 200, speed: 16131
http://mirror.d.umn.edu/ubuntu/  code: 301, speed: 668

status codeが301や302でspeedが0になっているものはどう扱うのがいいかな?
もうちょっと工夫が必要そう。

netselectコマンド

また、ツイッターで以下のページを教えていただきました。
https://linuxconfig.org/how-to-select-the-fastest-apt-mirror-on-ubuntu-linux

これはICMPパケット(おおまかな理解ではping)の遅延時間でネットワーク的な近さを判断するもののようです。

$ sudo netselect -s 20 -t 40 `cat list`
    9 http://mirror.arvancloud.com/ubuntu/
    9 http://mirrors.layeronline.com/ubuntu/
    9 http://mirrors.layeronline.com/ubuntu/
   10 http://mirror.arvancloud.com/ubuntu/
   37 http://jp.mirror.coganng.com/ubuntu-ports/
  105 http://mirror.misakamikoto.network/ubuntu-ports/
  105 http://ftp.harukasan.org/ubuntu-ports/
  127 http://ftp.lanet.kr/ubuntu-ports/
  156 http://ftp.harukasan.org/ubuntu-ports/
  292 http://ftp.harukasan.org/ubuntu-ports/
  369 http://mirror.coganng.com/ubuntu-ports/
  648 http://ports.ubuntu.com/
  910 http://suro.ubaya.ac.id/ubuntu/
  920 http://mirrors.ocf.berkeley.edu/ubuntu-ports/
 1130 http://mirrors.us.kernel.org/ubuntu/
 1226 http://ports.ubuntu.com/
 1271 http://ntc.net.np/ubuntu/
 1430 http://mirrors.coreix.net/ubuntu/
 1438 http://ubuntu.letscloud.io/ubuntu/
 1803 http://mirror.ihost.md/ubuntu/

でもこれはICMPパケットを返さないサーバは除外されてしまいますね。
あと、上位4つのやつは302 Moved Temporarilyが返ってきて中身がない ..

http://jp.mirror.coganng.com/ubuntu-ports/ は中身はありますが、誰が運営しているのかがよくわからない .. ご利用は自己責任で。

参考

今回は使いませんでしたが、twitterで以下のページも教えてもらいました。
https://github.com/jblakeman/apt-select

Discussion