技術ブログ

DigitalOcean で "apt-get update" した際に発生するエラーをどうにかする

author: yterajimadate: 2016-04-07tags: DigitalOcean, itamae, ubuntu

DigitalOcean は SSD で動作する VPS サービスです。価格も安く時間単位で動かすことができるので開発やクライアント向けのステージング環境などで利用しています。

構成管理ツールには普段 Itamae を採用していますが, プロビジョニング実行時に謎エラーが発生したので調査して対応しました。

エラー内容

環境は Ubuntu 15.10, sgp1 (DigitalOcean のシンガポール・リージョン)。

ERROR :       stdout |
ERROR :       stdout | W: Failed to fetch http://mirrors.digitalocean.com/ubuntu/dists/wily-backports/universe/binary-i386/Packages  Cannot initiate the connection to mirrors.digitalocean.com:80 (2400:6180:0:1::10). - connect (101: Network is unreachable) [IP: 2400:6180:0:1::10 80]
ERROR :       stdout |
ERROR :       stdout | W: Failed to fetch http://mirrors.digitalocean.com/ubuntu/dists/wily-backports/multiverse/binary-i386/Packages  Cannot initiate the connection to mirrors.digitalocean.com:80 (2400:6180:0:1::10). - connect (101: Network is unreachable) [IP: 2400:6180:0:1::10 80]
ERROR :       stdout |
ERROR :       stdout | E: Some index files failed to download. They have been ignored, or old ones used instead.
ERROR :       Command `apt-get update -y` failed. (exit status: 100)
ERROR :     execute[apt-get update -y] Failed.

apt-get update を実行した際に Failed to fetch http://mirrors.digitalocean.com/~ というエラーが大量に表示されてプロビジョニングがエラーで停止してしまいました。

対応

この他にも名前解決ができないエラーが出たり, 場合によっては問題なくプロビジョニングできたりしたので放置していましたが, 開発の邪魔になってきたので調査して対応しました。

結果として次のページの内容で対応することで解決しました。

How to speed up apt-get on Digital Ocean - Wiser Coder

この内容を Itamae で記述すると次のようになります。

# magic for DigitalOcean
execute 'sed -i -e "s/mirrors\.digitalocean/archive\.ubuntu/g" /etc/apt/sources.list' do
  command 'sed -i -e "s/mirrors\.digitalocean/archive\.ubuntu/g" /etc/apt/sources.list;
    apt-get update;'
  only_if "grep 'mirrors.digitalocean' /etc/apt/sources.list"
end

どうやら DigitalOcean で提供している Ubuntu はリポジトリに mirrors.digitalocean.com を参照しているようで, この mirror がエラーしてしまう場合があるようです。(Ubuntu の最新バージョンだからではないか? と考えています)

問題が発生する mirror ではなく archive.ubuntu.com を参照させてしまおう!! という比較的力技な対応になりました。