apt-cacher 便利で使ってる。
以前導入したapt-cacher が便利である。
膨れ上がった複数台のRaspi4や、膨れ上がったLXCや、Dockerfileからのdocker build時に時短のために大活躍中である。
apt-cacher の問題点/HTTPS
apt-cacher は HTTPSに未対応である。TLSはProxy Connectしてしまうとキャッシュできないので。流石にこれどうしようもない問題である。
APTのレポジトリなどはAPT専用のキーで署名されてるのでHTTPSは無用だと思うのですが、chromeがHTTPを絶滅させに掛かってるので、早晩HTTPSになってしまうのであろう。
そこで、なんとかHTTPSのレポジトリ(docker や nodejs のレポジトリ)をキャッシュできないかと考えていた。
解決方法:強引にHTTPでアクセスする。
調べていると解決方法があって、そうかその手があったか。という感じだったのでメモとして残します。
apt-cacher 側でhttpsするー>クライアントにhttpsさせない
設定を確認すると、次のようになっている。
つまり、HTTPならすべて、プロキシするわけである。
cat /etc/apt-cacher-ng/acng.conf | grep PassThroughPattern # PassThroughPattern: private-ppa\.launchpad\.net:443$ PassThroughPattern: .* # # PassThroughPattern: ^(bugs\.debian\.org|changelogs\.ubuntu\.com):443$
apt-cacher を通すクライアントのDebianから、httpsなレポジトリへアクセスすると、次のようになる。証明書検証エラーになってしまう。
Err:1 https://download.docker.com/linux/debian bookworm InRelease Invalid response from proxy: HTTP/1.1 400 Bad Request Server: nginx/1.18.0 (Ubuntu) Date: Tue, 10 Oct 2023 08:16:25 GMT Content-Type: text/html Content-Length: 166 Connection: close [IP: 192.168.2.21 443] Reading package lists... Done Building dependency tree... Done Reading state information... Done All packages are up to date. W: Failed to fetch https://download.docker.com/linux/debian/dists/bookworm/InRelease Invalid response from proxy: HTTP/1.1 400 Bad Request Server: nginx/1.18.0 (Ubuntu) Date: Tue, 10 Oct 2023 08:16:25 GMT Content-Type: text/html Content-Length: 166 Connection: close [IP: 192.168.2.21 443] W: Some index files failed to download. They have been ignored, or old ones used instead.
https -> http にダウングレードする
そこで、apt レポジトリの設定をいじってあげる。
## http にする場合(Apt-Cacherを使うとき) sudo sed -e 's|https:|http:|' -i /etc/apt/sources.list.d/docker.list ## https にする場合 sudo sed -e 's|http:|https:|' -i /etc/apt/sources.list.d/docker.list
その結果、次のような soueces.list が出来上がる。
/etc/apt/sources.list.d/docker.list
deb [arch=arm64 signed-by=/etc/apt/keyrings/docker.gpg] http://download.docker.com/linux/ubuntu jammy stable
この状態で、Apt-Cacherを通すと・・・
無事にキャッシュされる。
takuya@raspi-ubuntu:~$ sudo apt update [sudo] password for takuya: Get:1 http://download.docker.com/linux/ubuntu jammy InRelease [48.8 kB] Hit:2 http://ports.ubuntu.com/ubuntu-ports jammy InRelease Get:3 http://ports.ubuntu.com/ubuntu-ports jammy-updates InRelease [119 kB] Hit:4 http://ports.ubuntu.com/ubuntu-ports jammy-backports InRelease Get:5 http://ports.ubuntu.com/ubuntu-ports jammy-security InRelease [110 kB]
インストールも問題なく行える。
sudo apt reinstall docker-ce-cli
apt-cacher-ng へhttp でプロキシに繋いで、apt-cacher-ng プロキシ側がhttpsでデータとを取りに行って返してくれる。
debian でも試してみた.
takuya@:~$ cat /etc/apt/sources.list.d/php.list deb [signed-by=/etc/apt/keyrings/php.gpg] http://packages.sury.org/php/ bookworm main takuya@:~$ cat /etc/apt/sources.list.d/nodesource.list deb [signed-by=/etc/apt/keyrings/nodesource.gpg] http://deb.nodesource.com/node_18.x nodistro main
アップデートとインストール
takuya@:~$ sudo apt update 取得:1 http://deb.debian.org/debian-security bookworm-security InRelease [48.0 kB] ヒット:2 http://debian-mirror.sakura.ne.jp/debian bookworm InRelease ヒット:3 http://deb.nodesource.com/node_18.x nodistro InRelease ヒット:4 http://debian-mirror.sakura.ne.jp/debian bookworm-updates InRelease ヒット:5 http://download.docker.com/linux/debian bookworm InRelease ヒット:6 http://packages.sury.org/php bookworm InRelease ヒット:7 http://packages.gitlab.com/gitlab/gitlab-ce/debian bookworm InRelease ヒット:8 http://www.deb-multimedia.org bookworm InRelease 48.0 kB を 4秒 で取得しました (12.6 kB/s) パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています... 完了 状態情報を読み取っています... 完了
特に問題なく行える。
apt-cacher なしで docker のビルドとか仮想マシンの作成とかダウンロード時間が面倒くさくてやりたくないです。
結論
HTTP->HTTPSにリダイレクトがかかるサイトは、HTTPでアクセスすればいい。apt-cacherがリダイレクトを処理してくれる。