こんにちは。イプシロンソフトウェアで代表をしております渡部です。突然ですがみなさんapt-get updateしてますか? ですよね、しますよね。え?yum使ってるからapt使ってないって?まぁそういう人もいますよね。とりあえず今日はaptの話です。
写真はうちの会社のサーバーラックです。創業以来継ぎ足し継ぎ足しやってきたので中身はめちゃくちゃというか配線がぐちゃぐちゃになっています。一見すると綺麗に見えるでしょ?裏はヤバいことになってるんですね、残念なことに。綺麗に配線が組める人って憧れますよね。
動機
apt-get updateやupgradeするときに、インターネットを経由せずにローカルネットワークにキャッシュサーバーみたいなのを入れられると速くなるんだろうなーとは思っておりましたが、やはり物事には優先順位がありますしやっておりませんでした。aptで更新するのに時間がかかったとしても たった数分の話だったりするので、その時間を短縮をするためにキャッシュサーバーの設定をやるというのはさすがにコスパが悪いなということで後回しにしていたという感じです。ただ、最近になってaptで大量のパッケージを取ってくる必要が出てきたので、そろそろやるべきタイミングだなということでaptのキャッシュサーバーを試してみることになりました。
どういう構成でセットアップしようか
一口にaptのキャッシュサーバーと言っても、なんかどうやらいろいろなソフトがあるらしいですね。とりあえずDockerで動かせるとセットアップがラクだなぁと思っていたのですが、どうやらDockerの公式の文書にapt-cacher-ng サービスの Docker 化というのがあることに気づきまして、この流れに沿ってやってみることにしました。とりあえず実験ということでここに載っているDockerfileを使ってみたら、すぐにセットアップまで完了して、クライアント側の設定を入れたらキャッシュが効くようになるところまで確認ができました。重い腰がなかなか上がらずに「いつかやろう」なんてなことを思っていたら簡単にセットアップできてしまった感じですね。まさに案ずるより産むが易し。
テストでいくつかセットアップが済んだあとは、いくつかうちのサーバーに合うようにカスタマイズを入れたあと、社内でしか引けないDNSにホスト名を登録して完成です。拍子抜けするぐらいあっさり終わったな。
外部のパッケージを入れると動かなくなる
すんなり動くようになったなーと思ったのも束の間、クライアント側でdpkg -iして外部のパッケージをインストールして、かつキャッシュサーバーを有効にしているとapt-get updateしたときにエラーが出てしまうことが分かりました。
Err:1 https://xxxxxxxxxxxxx InRelease
Invalid response from proxy: HTTP/1.0 403 CONNECT denied (ask the admin to allow HTTPS tunnels) [IP: xxxxxxxx]
Err:2 https://xxxxxxxxxxxxx InRelease
Invalid response from proxy: HTTP/1.0 403 CONNECT denied (ask the admin to allow HTTPS tunnels) [IP: xxxxxxxx]
理由をいろいろ探したところ、どうやら設定ファイルにある PassThroughPattern を編集してあげれば良さそうということが分かってきました。
- AptCacherNg - HTTPS repositories
- apt-cacher-ng で https リポジトリを直接アクセスするようにする
- Using apt-cacher-ng with SSL/TLS
我々のケースにおいてはDockerでapt-cacher-ngを動かしていますのでdocker cpで設定ファイルをコンテナ側から吸い出して PassThroughPattern の設定だけを編集したあと、Dockerfileで設定ファイルを書き直すようにしてから起動するようにしました。
COPY acng.conf /etc/apt-cacher-ng/acng.conf
うちのケースにおいてはこれでうまく対応できるようでした!めでたしめでたし。
免責事項(お約束)
この記事の内容をそのまま実行したことによるいかなる損害や障害も株式会社イプシロンソフトウェアは責任を負いません。お手元の環境や設定によっては正しく動作しないこともありますので公式マニュアルや自身の環境を確認の上、必ず自己責任で実行するようにしてください。