複数台のPCでパッケージのインストールを高速化するためにapt-mirrorを使用している、という例を見かけることがちらほらあります。APT用のキャッシュプロキシがあまり知られていないようなので、今回のレシピでは、APT用のキャッシュプロキシとapt-offlineによるオフライン環境でのインストールについて紹介します。
複数PCでのインストールを高速に行う
Ubuntu搭載のPCや仮想マシンを複数台動かしている場合は、インストールやアップデートの際に各PCで同一のパッケージをダウンロードするため、時間がかかったりネットワーク帯域を浪費しがちだったりします。クラウド環境で、数十台~数百台単位でサーバーを管理している場合ならなおさらです。そういった場合は、リポジトリのミラーを作成するか、キャッシュプロキシを利用すると、パッケージ取得が高速に行えます。
前者は、本連載の第47回でapt-mirrorによるミラーの構築を取り上げているように、完全なリポジトリのミラー(複製)を作成するため、数十~数百Gバイト単位のディスク容量が必要で、構築に時間もかかります。
このため、通常の利用であれば後者のキャッシュプロキシの利用のほうがお勧めです。キャッシュプロキシの利用では、1回ダウンロードしたパッケージを保存しておき2回目以降はそのパッケージを再利用するため、大量のディスク容量は不要で構築の時間もかからず、簡単な設定でプロキシを意識することなく利用できます。
APT用キャッシュプロキシの概要
APT用のキャッシュプロキシとしては以下のパッケージなどがあります。
- apt-cacher
- apt-cacher-ng
- approx
- squid-deb-proxy(squid-deb-proxy-client)
apt-cacherは古くからある定番パッケージです。apt-cacher-ngはapt-cacherと比べ、新しくてインタプリタ不要のため動作が軽量です。approxは過去に存在したapt-proxyとの互換性を考慮して開発されています。squid-deb-proxyは、有名なプロキシサーバーであるsquidを利用して設定を行うツールで、クライアントではZeroconfが可能で設定の手間が少なくすみます。
どのソフトウェアを選択しても良いのですが、今回はプロビジョニングツールのchef/puppetなどからの利用も多いapt-cacher-ngについて取り上げます。
apt-cacher-ngをローカル環境で試してみよう
まずは、ローカルPC上でAPT用キャッシュプロキシを構築してみましょう。以下のコマンドでapt-cacher-ngをインストールします。
インストールが完了すると、キャッシュプロキシとしてapt-cacher-ngデーモンがポート3142で実行されます。また、apt-cacher-ngによってキャッシュされるパッケージは/var/cache/apt-cacher-ng/以下に保存されます。
次に、APT用のプロキシ設定を行います。/etc/apt/apt.conf.d/02proxyなどの名前でファイルを作成し、以下の内容を書いて保存してください。保存する前に、綴り間違いや末尾のセミコロンの付け忘れがないかどうかなど、確認を行ってください。
以上で設定は完了です。
では、apt-cacher-ngの動作を確認するため、任意のソフトウェアをインストールしてみましょう。
正しく設定できていれば、/var/log/apt-cacher-ng/apt-cacher.logに時刻/入出力/サイズ/IPアドレス/ファイルパスなどのログが書き込まれているはずです。ログが書き込まれていない場合は、プロキシの設定が正しいかどうか確認したり、エラーログ/var/log/apt-cacher-ng/apt-cacher.errを確認してみてください。
apt-cacher-ngを他のPCからも利用する
他のPCから利用する場合は、他のPCの環境で、前述した“APT用のプロキシ設定”のみ行ってください。その際、「127.0.0.1」の箇所はapt-cacher-ngをインストールしたPCのIPアドレスに変更してください。また、ufwやiptablesなどによるパケットフィルタリングを行っている場合は、TCP/3142の通信を許可することも忘れないようにしてください。
問題なくapt-cacher-ngを使ってアップデートができているか確認するには、上記と同じくログファイルを参照してください。
Webブラウザーからapt-cacher-ngを管理
apt-cacher-ngにはWebブラウザーから利用できる管理機能があり、利用状況のレポートを確認したりキャッシュの管理を行うことができます。
Webブラウザーで以下のように入力して、apt-cacher-ngをインストールしたPCにアクセスします。
では、利用状況のレポートを確認してみましょう。下にある「Statistics report and configuration page」にアクセスすると、管理画面に移動できます。「Transfer Statistics」の表にある「Count Data」ボタンを押すと、データを集計して表が出力されます。この内容は、リクエスト数とデータサイズごとのHits(ヒット)とMisses(見逃し)とTotal(合計)となっており、ヒットの割合が高いほどキャッシュが効率的に使われていることになります。
また、同ページの下ではキャッシュファイルを確認したり削除することもできます。「Start Scan and/or Expiration」ボタンで不要になったパッケージにマークを付けて数日以内に削除されるように指定でき、「Show unreferenced」「Delete unreferenced」ボタンでは、直接不要になったパッケージを表示/削除することができます。
apt-offlineによるオフライン環境でのインストール
インターネットに接続できない事情があり、アップデートが行えないオフライン環境のUbuntuもあるかと思います。そういったPCでも、apt-offlineを利用してオンライン環境にあるPCでダウンロードしUSBメモリなどの媒体を使ってやり取りすれば、手軽に最新の状態にアップグレードしたり新しいソフトウェアをインストールすることができます。
オンライン環境のPCでは、以下のコマンドでapt-offlineをインストールします。
オフライン環境のPCでは、一時的にインターネットに接続して上記のコマンドを実行するか、同一バージョンのUbuntu環境でapt-offlineをインストールし、/var/cache/apt/archives以下にあるapt-offlineのdebパッケージをUSBメモリなどで移動してから、以下の例のようにdpkg コマンドでインストールしてください。
では、インターネットに接続されていない、オフライン環境のPCで以下のコマンドを実行します。これで、パッケージのダウンロードに必要な情報が記録されたシグニチャファイルapt-offline.sigがホームディレクトリ以下に保存されます。
新規にインストールしたいパッケージがある場合は、以下のようなコマンドを実行してください。この例ではgimpパッケージのインストールを指定しています。
次に、オフライン環境のPCでapt-offline.sigファイルをUSBメモリなどの媒体を使って、オンライン環境のPCにコピーしてください。以下の例のようなコマンドを実行すると、必要なパッケージなどがダウンロードされbundle.zipにまとめられます(/path/to/apt-offline.sigはUSBメモリなどのパスに置き換えてください)。
作成されたbundle.zipをUSBメモリなどの媒体を使ってオフライン環境のPCにコピーし、以下のようなコマンドを実行してください(/path/to/bundle.zipはUSBメモリなどのパスに置き換えてください)。
これで、必要なパッケージがオフライン環境のPCでローカルリポジトリに同期されたので、以下のようなコマンドでパッケージをインストールしてください。
以上でオフライン環境でのインストールは完了です。
まとめ
パッケージのインストールを高速化する際は、ミラー構築またはキャッシュプロキシ利用のどちらが自分の利用方法に向いているか考えたうえで、行うことをお勧めします。