debootstrapを速くするには

Fri, Jan 4, 2019 in debian , tips debian , debootstrap

debootstrapは最低限のDebian環境の作成に使われるツール。pbuildercowbuilder(とその環境を使うpiuparts)などのツールの裏側でも動くし、dockerイメージの裏側もコイツ。ちなみに環境構築にはリポジトリから必要なパッケージを取得してくるので、それなりに時間がかかる(しかも最初はaptも使えないのでwgetで取得するんだぜ?)。うーむ。

で、どうやって時間を短縮するか?というと、以下のような選択肢がある。

  1. ローカルミラーをセットアップしてそれを参照する
  2. ローカルプロキシをセットアップしてそれを参照する
  3. ローカルキャッシュをセットアップしてそれを参照する
  • 1のミラーはまるっとDebianリポジトリをコピーするやり方。
    • クライアントが何十台、スペックによっては何百台とかあっても対応できる
    • どのパッケージでもLAN内にあるので取得が早い
    • でも、ミラーを構築するには最低でも数百GBのディスクを使うことになるし、更新も追随するとなるとそれなりにトラフィックが生じる
    • ぶっちゃけオーバースペックすぎる。牛刀をもって鶏頭を裂く、的な。
    • あと、必ずそのミラー参照するようになるので、Laptopで作って移動したときには面倒になるかも
    • 構築するならftpsync使おうね。他のツールはダメダメ。
  • 2のプロキシはsquidなどのサーバーを立てるやり方。
    • 取得したパッケージだけをキャッシュするのでディスク容量がミラーより格段に少なくて済む
    • ミラーと同様に複数のマシンからも参照可能
    • debootstrap 1.0.96からsquid-deb-proxy-clientをインストールしておくと、squid-deb-proxyで立ち上げたプロキシサーバーを自動的に参照するようになる。apt-cacherなどだと一々プロキシがどこにあるのかを指定しないといけないので、squid-deb-proxyマジおすすめ
  • 3のキャッシュは--cache-dirオプションを使って、適当なところにキャッシュしておいたdebパッケージを参照するやり方。`
    • debootstrap 1.0.97から実装済み。一台だけでやるならこれで十分。
    • --cache-dir=/home/henrich/tmp/cachedirというように、このオプションでは絶対パスで参照するのが必要。~/tmp/cachedirの様な指定はできない。

あと、リポジトリのミラーはdebootstrap 1.0.85からdeb.debian.orgを参照するようになっている。これはFastly提供のCDNだけど、個人的には自分が運用しているdebian-mirror.sakura.ne.jpを使っている。これは異常があったらすぐ気付くように、というドッグフーディングの側面もあるが、利用者がそんなに多くないので快適だということもある。もっと使っていいのよ?

最後に、記述時の最新であるdebootstrap 1.0.112はMr.FAIことThomas Langeさんのハックによってパッケージ依存関係の最適化(これもaptが使われてはいない)が図られているので、随分と時間が短縮されている。

結論:debootstrap 1.0.112以降を使おうdebootstrapはshell script+embedded perlコードというアレなやつなので、環境依存が極小であり、どのバージョンでも動くよ。バグがあったら教えてくださいな。