APT
は、Debian および Ubuntu Linux ディストリビューションがソフトウェアのインストールと更新に使用するプログラムです。すぐに使える設定では、
apt
を使用してプログラムをインストールする場合、たとえば次のようになります。
sudo apt install inkscape
APT は配布リポジトリ サーバーからソフトウェア アーカイブをダウンロードしてインストールします。これは、ソフトウェア パッケージが小さく、ダウンロードする必要があるファイルが少数で、インターネット接続が高速な場合に最適です。
ただし、インストールするソフトウェアが多数あり、オフィスにすべて更新が必要なマシンがたくさんあり、インターネット接続が遅い場合は、すべてをダウンロードしてすべてのマシンにインストールするのに時間がかかることがあります。
プロキシ サーバー、特に apt-cacher-ng のようなキャッシュ プロキシは、更新しようとしているコンピューターと、ダウンロードしているソフトウェアを格納するリポジトリ サーバーの間に配置されるプログラムです。更新中のマシンはリポジトリではなくプロキシ サーバーにソフトウェアを要求し、プロキシはその要求をリポジトリに転送し、ソフトウェアをダウンロードして更新マシンに返します。
賢い部分は、プロキシがダウンロードしたすべてのソフトウェア ファイルのコピーを保持することです。ローカル ネットワーク上の別のマシンが同じファイルをダウンロードしようとすると、つまり、同じソフトウェアをインストールまたは更新したい場合、プロキシにはすでにコピーがあり、ダウンロードすることなく要求側のマシンに渡すことができます。
最初のダウンロードの後、それ以降のダウンロードはすべてローカル ネットワークの速度で高速に行われます。
要件
このガイドを完了するには、次のものが必要です。
- ローカル ネットワークに接続されている、 Raspbian Buster を実行する Raspberry PI (任意のバージョン)。
- Raspberry Pi に接続する画面とキーボード。 Raspberry Pi に SSH 接続できる場合、これらはオプションです。
- Raspberry Pi 上の非 root の sudo が有効なユーザー。
- ローカル ネットワーク上の Debian または Ubuntu システム。
これらの要件をすべて満たしたら、Raspberry PI のターミナルに sudo ユーザーとしてログインし、次のセクションに進みます。
apt-cacher-ng のインストール
Linux に新しいパッケージをインストールする前に、システムのアップデートを実行することをお勧めします。これにより、配布リポジトリで利用可能なものと同じバージョンのパッケージがシステムで実行され、パッケージ バージョンのローカル リストが最新であることが保証されます。これを行うと、
apt-cacher-ng
のインストール中にエラーが発生しなくなります。
次のコマンドはシステムを更新します。
$ sudo apt update
$ sudo apt upgrade
Raspberry PI が最新になったので、
apt-cacher-ng
をインストールします。
$ sudo apt install apt-cacher-ng
インストーラーは、
apt-cacher-ng
を通じて HTTPS トンネルを有効にするかどうかを尋ねます。この質問には「いいえ」と答える必要があります。トンネルを必要とする代わりに、
apt-cacher-ng
を介して HTTPS 接続をプロキシするように APT を構成します。さらに、必要に応じて、後で
apt-cacher-ng
構成ファイル内のこれらのオプションを変更できます。
最新のソフトウェア規約に従って、
apt-cacher-ng
をインストールすると
systemd
サービス ファイルが作成され、有効になります。これは、
apt-cacher-ng
起動時に自動的に開始され、通常の systemd サービス コマンドを使用して
apt-cacher-ng
管理することもできることを意味します。
$ sudo systemctl start apt-cacher-ng.service
$ sudo systemctl stop apt-cacher-ng.service
$ sudo systemctl restart apt-cacher-ng.service
apt-cacher-ng
現在、ポート
3142
でリッスンするシステム デーモンとして実行されており、
apt
からの接続を受け入れる準備ができています。
Raspberry PI での apt の構成
apt-cacher-ng
プロキシを使用するように構成する最初のシステムは、Raspberry PI 上で
apt
になります。
apt-cacher-ng
プロキシを使用するように
apt
を設定する方法は、
apt
のソース ファイル内の URL を書き直すことです。ソース ファイルには、ディストリビューションのソフトウェアをダウンロードできるリポジトリの URL のリストが含まれています。
Raspbian のメイン ソース ファイルは
/etc/apt/sources.list
にあり、新規インストールでは次のようになります。
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
# deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
ここで唯一のアクティブな (コメントされていない) 行は最初の行です。
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
この行を変更する必要があるため、テキスト エディタでファイルを開きます。ここでは
nano
を使用します。
$ sudo nano /etc/apt/sources.list
最初の行を次のように変更します。
deb http://127.0.0.1:3142/raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
ここで行ったのは、URL に
127.0.0.1:3142
を挿入することでした。
IP アドレス
127.0.0.1
常にローカル コンピュータの IP であり、「localhost」と呼ばれることがよくあります。
:3142
部分はポートを示します。
CTRL+o
、
ENTER
、
CTRL+x
を押して、
nano
を保存して終了します。
次に、
/etc/apt/sources.list.d/raspi.list
にあるソース ファイルに同じ変更を加える必要があります。
apt
と
apt-cacher-ng
をテストする準備ができました。
apt-cacher-ng を使用した apt のテスト
apt
を実行すると、ダウンロードしたファイルのコピーがキャッシュされます。
apt
これを行うのは、不必要なダウンロードを行わないことと、インターネットが存在しない場合にパッケージを再インストールする必要がある場合に備えて、インストール アーカイブのローカル コピーを保存するためです。
このローカル キャッシュは、リポジトリが変更されていない場合、
apt update
または
apt upgrade
を実行するときに
apt
プロキシに接続しないことを意味します。したがって、プロキシをテストするには、
apt
キャッシュを手動でクリアする必要があります。次のコマンドは、
apt
のキャッシュされたパッケージをすべてクリアします。
$ sudo rm -rf /var/lib/apt/lists/
$ sudo rm -rf /var/cache/apt/*
次に、アップデートを実行してエラーを確認して、
apt
をテストします。
$ sudo apt update
次のような出力が数行表示されるはずです。
Get:1 http://127.0.0.1:3142/raspbian.raspberrypi.org/raspbian buster InRelease [15.0 kB]
http://127.0.0.1:3142/
で始まる URL は、
apt
が
apt-cacher-ng
から更新ファイルを受信していることを示します。
次のコマンドを実行して、
apt-cacher-ng
ログ ファイルでエラーを監視することもできます。
$ tail -f /var/log/apt-cacher-ng/apt-cacher.log
2番目のターミナルで。エラーが発生しなかった場合は、ローカル ネットワーク上で Debian または Ubuntu システムの構成に進むことができます。
apt-cacher-ng を使用するための Ubuntu または Debian システムの構成
apt-cacher-ng プロキシの恩恵を受けるローカル ネットワーク上の Debian または Ubuntu システムには、追加のソフトウェアをインストールする必要はありません。必要なのは、リポジトリに直接アクセスするのではなく
apt-cacher-ng
からすべての更新を収集するようにソース ファイルを書き直すことだけです。
ソース ファイルに加える必要がある変更は、
127.0.0.1
の代わりに Raspberry PI の IP アドレスを使用する必要がある点を除いて、Raspberry PI 上のソースに行った編集とまったく同じです。
これは、まず Raspberry Pi の IP アドレスを取得する必要があることを意味します。 Raspberry PI の IP アドレスを取得する最も簡単な方法は、Raspberry PI のターミナルで次のコマンドを実行することです。
$ hostname -I
これにより、Raspberry PI が持つ IP アドレスが出力されます。最初の IPv4 IP アドレスを使用します。ここでは、例としてアドレス
192.168.0.2
を使用します。 Raspberry PI の IP アドレスを置き換える必要があります。
クライアント マシンに戻り、テキスト エディタを使用してメイン ソース ファイルを開きます。ここでは
nano
を使用します。
$ sudo nano /etc/apt/sources.list
このファイルには、Raspberry PI の
/etc/apt/sources.list
と同じ形式の行が含まれます。 Debian Buster インストールの行の例を次に示します。
deb http://ftp.debian.org/debian buster main
Raspberry PI の IP を使用して、これらの行を次のように編集する必要があります。例:
deb http://192.168.0.2:3142/ftp.debian.org/debian buster main
/etc/apt/sources.list
内のすべての行と、
/etc/apt/sources.list.d/
の下にあるその他のソース ファイルを編集します。次に、テストのためにローカルにキャッシュされたファイルをすべて削除します。
$ sudo rm -rf /var/lib/apt/lists/*
$ sudo rm -rf /var/cache/apt/*
システムを再度更新します。
$ sudo apt update
$ sudo apt upgrade
apt
からの出力には、プロキシの IP を含む次のような行が表示され、更新ファイルが
apt-cacher-ng
プロキシからのものであることが示されます。
Hit:1 http://192.168.0.2:3142/ftp.debian.org/debian buster InRelease
これで、このマシンは新しい
apt
プロキシを利用するように完全に構成されました。今後このマシンに追加する新しいソース ファイルには、ディストリビューションのアップグレードのために追加される新しい行も含め、編集する必要があります。
HTTPS 経由の APT
これまで見てきたソース ファイルはすべて HTTP 接続を使用していました。インストール アーカイブには悪意のある改ざんを阻止する内部暗号化署名が組み込まれているため、これは Debian と Ubuntu による意図的な設計上の決定です。したがって、HTTPS によってセキュリティが大幅に強化されるわけではありませんが、地理的に多様なミラーを多数持つことによるエンジニアリングの負担は大幅に増加します。
ただし、HTTPS を使用するといくつかの利点があるため、一部の非公式リポジトリでは HTTPS が使用されます。
apt-cacher-ng
HTTPS リポジトリを処理する 2 つの方法をサポートしています。
1 つ目は、クライアントからリポジトリ サーバーに接続を直接渡すことです。これにより、パッケージが
apt-cacher-ng
によってキャッシュされなくなるという残念な結果が生じます。このモードで
apt-cacher-ng
を実行する場合は、テキスト エディターで
/etc/apt-cacher-ng/acng.conf
を開きます。
$ sudo nano /etc/apt-cacher-ng/acng.conf
そして、次の行を追加します。
PassThroughPattern: .*
これにより、HTTPS 接続がクライアントからリポジトリにパススルーできるように
apt-cacher-ng
が構成されます。
2 番目の方法は、クライアントが HTTP 経由で
apt-cacher-ng
に接続するが、
apt-cacher-ng
HTTPS 経由でリポジトリに接続するように、クライアントのソース ファイル内のリポジトリ行を変更することです。パッケージは HTTPS 経由で
apt-cacher-ng
にダウンロードされ、その後 HTTP 経由でクライアント マシンに送信されます。
apt-cacher-ng
パッケージをキャッシュできるため、HTTPS の利点を失うことはありません。
次のソース行は、HTTPS 経由で Docker リポジトリにアクセスするためのものです。
deb [arch=amd64] https://download.docker.com/linux/debian buster stable
HTTP 行を編集したときに、URL に
192.168.0.2:3142
を追加しました。 HTTPS 行を編集するときは、
192.168.0.2:3142/HTTPS///
を追加する必要があります。例:
deb [arch=amd64] http://192.168.1.67:3142/HTTPS///download.docker.com/linux/debian buster stable
これで、クライアント マシンは HTTP 経由で
apt-cacher-ng
からパッケージをリクエストし、
apt-cacher-ng
HTTPS 経由で Docker からパッケージをダウンロードしてキャッシュします。
apt-cacher-ng の管理
ローカル ネットワーク上で
apt-cacher-ng
管理するために Web GUI を使用できます。この GUI にアクセスするには、ブラウザで次の場所を指定する必要があります。
http://<Proxy IP>:3142/acng-report.html
ローカル ネットワーク IP の例
192.168.0.2
を置き換えると、次のようになります。
http://192.168.0.2:3142/acng-report.html
GUI の最初の最も重要なセクション「転送統計」では、リポジトリからダウンロードされたデータ量とキャッシュから提供されたデータ量に関する情報が提供されます。次の図は、GUI のこのセクションを示しています。
「キャッシュ効率」セクションでは、
apt-cacher-ng
がキャッシュから提供したファイルの数とキャッシュをバイパスしたファイルの数を示します。 「ヒット」はプロキシがキャッシュから提供したファイルを示し、「ミス」はプロキシ マシンがリポジトリからダウンロードしてキャッシュに追加したファイルを示します。
キャッシュの管理
apt-cacher-ng
がダウンロードしてローカル ネットワーク上のクライアント マシンに提供するファイルは、開発者が新しいバージョンをリポジトリに追加すると古くなります。この問題が発生した場合、これらの古い
apt-cacher-ng
不要になり、ドライブ上のスペースを占有するため、キャッシュから削除する必要があります。 Raspberry PI はキャッシュを確認し、古いファイルを自動的に削除します。
apt-cacher-ng
をインストールすると、次の場所に
cron
ファイルもインストールされます。
/etc/cron.daily/apt-cacher-ng
これは毎日
cron
によって実行され、キャッシュがクリアされます。
キャッシュを手動で確認してクリアしたい場合は、Web GUI にログインし、「スキャンの開始および/または有効期限切れ」とマークされたボタンをクリックする必要があります。通常、これを実行する必要はありませんが、急速に更新されるリポジトリから更新する場合は、実行する必要がある場合があります。
これで、オフィスや自宅での大規模な繰り返しのシステム アップデートによるネットワークの負担を軽減する、効率的な
apt
なプロキシが手に入りました。
Raspberry Pi の探索に興味がある場合は、 このオンライン コースをチェックしてください 。