😽

apt-cacher-ng は、deb 以外でも使える。

commits10 min read

要約

apt-cacher-ng は、Debian や ubuntu だけでなく、OpenSuSE, Arch Linux, Sourceforge mirror network, Cygwin, などに対するアクセスを減らせるプロキシーです。Fedoraについては[1]を参照のこと。

Docker や LXD また、ご家庭にある複数台のPCが上記のOSやソフトウェアを参照している場合なら、ネットワークに取りにいくよりも、通信料を下げたり、ローカルネットにあるサーバからデータを取得するので、ほとんどの場合インストールが速くなったりします。

追加のスクリプトを書くと、apt-cacher-ng のサーバが存在している場合は、そこから取得ない場合は、直接サーバに取りに行くという、複数のネットワークを渡り歩くノートパソコンにとって便利な設定も可能です。

はじめに

この記事では、自分の環境での設定方法を書いておきます。LXD を使っていますが、実機や Docker であっても考え方は同じです。

複数台のPCおよび、それなりの数のコンテナを作っては壊ししていると、いちいち外部にパッケージを取得しに行っていると、むだが多い。
プロキシーサーバを立てて、コンテンツのキャッシュをつくろうとしたときに、自分の用途に適しており、時間をかける価値があると思って
構築した。

わたしが、apt-cacher-ng を使っている環境は、自宅で10台以下のDebian machineおよび、仮想環境/コンテナ環境を作っている。主に実マシンと、LXD によるコンテナから apt-cacher-ng を使っている。
docker を使うことがあるので、その時にも何度も外部にパッケージを取りに行くのはネットワークと時間の浪費なので家庭内LANにおけて便利に使っています。

ネットワーク

LXD をディフォルトでインストールすると、LXD は、IPv4 の Class A な Private IP address をコンテナに割り振ります。また IPv6 のアドレスをホストマシンおよび、コンテナに割り振り振ります。

この文章はだれ向けか

ある程度の量のパッケージをダウンロードする必要がある人で、まだ Proxy を利用していない人で、通信料やダウンロード時間を短くしたいと考えている人と、自分が環境を最高するときの考慮点を残すためです。

この文書の読み方

apt-cacher-ng を立てるだけなら、参考にしたドキュメントたち を読んでいただけれ事足りるかと思います。それらの情報を読んだとして、私の環境における差異を書いておきますので、関係のありそうな部分を拾い読みしてください。

本文

ルータから、IPv4 のアドレスを配ってもらっているマシンやコンテナと、固定アドレスを振って使っているマシンがあります。apt-cacher-ng の管理は、apt-cacher-ng が動いているマシン(コンテナ)の 3142 ボート
にアクセスします。(このボート番号はもちろん設定で変更できます。) コンテナで、avahi を動かしている場合、http://apt-cacher-ng.local:3142/acng-report.html?doCount=Count+Data#stats のようにアクセル
すると下記の画面のような表示がでます。

apt-cacher-ng web image

ときどき困る点

ホストマシンが再起動したり、avahi がうまくアドレスを返してくれないことがあります。とくに、ホストマシンからコンテナのIPv4アドレスは、ときたまIP Addressが変わったりすることがあるので即値で書きたくありません。
avahiはだいたい答えを返してくれますが、うまく返してくれないこともあり、原因追究よりはワークアラウンドして、いつも同じアドレスを振っていそうなIPv6をで apt-cacher-ng を指定したいことがあります。

所が、スクリプトで利用している netcat は、IPv6 に対応していないので、毎回 lxc list で IP address を確認してから cache を使っている不便さです。そこで、参考にしたドキュメントたちの netcat の記事を見つけたのです。

どう解決したか。

上記の記事を読んでから、Debian sid にも ncat パッケージがあることを確認したので、インストール。

$ apt-cache search netcat|grep netcat

cryptcat - twofish 暗号化の拡張を施された軽量版 netcat
netcat-openbsd - TCP/IP スイスアーミーナイフ
netcat-traditional - TCP/IP スイスアーミーナイフ
netcat - TCP/IP swiss army knife -- transitional package
netrw - netcat like tool with nice features to transport files over network
ncat - NMAP netcat reimplementation

nc と ncat のオプションを確認後、完全に置き換え可能だと判断して置き換えました。

スクリプトの中で、どこのマシンで動いているのか確認もできますが、私は dotfiles の管理に TheLocehiliosan/yadm: Yet Another Dotfiles Manager を使っています。
このソフトの本格的な使い方は、また記事を書きますが、 Alternate Files - yadm と template を使って使う環境ごとに使いまわしをする部分と固有の情報を分離できるので
実験をして使って見ました。yadm add した段階でテンプレートから生成され思ったようになりました。

作業記録

下記のような感じ。LXD ではなく、LXC 単体での記録ですが、こんな感じです。

lxc shell apt-cacher-ng
WARNING: cgroup v2 is not fully supported yet, proceeding with partial confinement
root@apt-cacher-ng:~# apt update
Hit:1 http://deb.debian.org/debian buster InRelease
Get:2 http://security.debian.org/debian-security buster/updates InRelease [65.4 kB]
Get:3 http://security.debian.org/debian-security buster/updates/main amd64 Packages [290 kB]
Get:4 http://security.debian.org/debian-security buster/updates/main Translation-en [150 kB]
Fetched 506 kB in 1s (416 kB/s)     
Reading package lists... Done
Building dependency tree       
Reading state information... Done
All packages are up to date.
root@apt-cacher-ng:~# apt install apt-cacher-ng
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libwrap0
Suggested packages:
  doc-base libfuse2 avahi-daemon
The following NEW packages will be installed:
  apt-cacher-ng libwrap0
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 589 kB of archives.
After this operation, 1,575 kB of additional disk space will be used.
Do you want to continue? [Y/n]

avahi-daemon も入れる。

apt install avahi-daemon
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  bind9-host geoip-database libavahi-common-data libavahi-common3 libavahi-core7 libbind9-161 libdaemon0 libdns1104 libfstrm0 libgeoip1 libicu63 libisc1100 libisccc161 libisccfg163 liblmdb0 liblwres161
  libnss-mdns libprotobuf-c1 libxml2
Suggested packages:
  avahi-autoipd geoip-bin avahi-autoipd | zeroconf
The following NEW packages will be installed:
  avahi-daemon bind9-host geoip-database libavahi-common-data libavahi-common3 libavahi-core7 libbind9-161 libdaemon0 libdns1104 libfstrm0 libgeoip1 libicu63 libisc1100 libisccc161 libisccfg163 liblmdb0
  liblwres161 libnss-mdns libprotobuf-c1 libxml2
0 upgraded, 20 newly installed, 0 to remove and 0 not upgraded.
Need to get 15.0 MB of archives.
After this operation, 52.7 MB of additional disk space will be used.
Do you want to continue? [Y/n] 
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:16:3e:c3:a9:fc brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.133.152.75/24 brd 10.133.152.255 scope global dynamic eth0
       valid_lft 3110sec preferred_lft 3110sec
    inet6 fd42:b00f:803e:1956:216:3eff:fec3:a9fc/64 scope global dynamic mngtmpaddr 
       valid_lft 3511sec preferred_lft 3511sec
    inet6 fe80::216:3eff:fec3:a9fc/64 scope link 
       valid_lft forever preferred_lft forever
10: eth1@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:16:3e:89:62:26 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.1.76/24 brd 192.168.1.255 scope global dynamic eth1
       valid_lft 83339sec preferred_lft 83339sec
    inet6 fe80::216:3eff:fe89:6226/64 scope link 
       valid_lft forever preferred_lft forever
  • 自分の中だと、10.133.152.75
  • 他のマシンからだと 192.168.1.76

設定を /etc/apt/apt-conf.d/05proxyに設定を書いて、apt update してから、動作確認
動いている。バンザーイ。

参考にしたドキュメントたち

repositories

これらの repositories は、あなたが思っているようなブランチ構成にはなっていないかもしれません。git-buildpackage/gbp コマンドで便利に使えるようなブランチ構成になっています。gbp-buildpackage(1) — git-buildpackage — Debian testing — Debian Manpages あたりから調べてください。

大規模につかうなら

netcat

謝辞

さいごに

件名 日付
記事を書いた日 2021-06-21
記事を変更した日 2021-06-24

上記は、この記事の鮮度を判断する一助のために書き手が載せたものです。

詳細な変更履歴は、 GitHub - yabuki/friendly-potato: zenn-contents を参照してください。

記事に対するTypoの指摘などは、pull reqをしてもらえるとありがたいです。受け入れるかどうかは、差分とPull reqの文章で判断いたします。





脚注
  1. Fedra に関しては、もはやサポート外とドキュメントにありました。ちゃんと調べてないけど、rpm 系は別の素敵な仕組みがあるのだと思う。 ↩︎

GitHubで編集を提案

Discussion

ログインするとコメントできます