カテゴリー「サーバ」の3件の記事

2020年4月20日 (月)

apt-cacher-ng:使用できないプロキシは無視したい

apt用キャッシュプロキシの構築 〜 apt-cacher-ng」の兄弟記事です。

前ページの設定まで行えば、aptキャッシュプロキシは利用できるんですが、実はこの設定で終わらせた場合、プロキシサーバが何らかの理由で落ちていると、debパッケージのインストールができません。

Apxy_004

この設定ではプロキシサーバは絶対経由しなければならんのですね。これはこれで面倒なのと、出先等で違うネットワークからパッケージをインストールする際も面倒になります。

ということで、プロキシサーバが利用できない場合、プロキシサーバを無視して直にパッケージを取りに行く設定の話をば。

Apxy_005

プロキシサーバを利用するホスト側で以下の2つの作業をします。
(上図で言うと、192.168.1.2 や 192.168.1.4 のホストにて)

①/etc/apt/apt.conf.d/以下に設定した
  Acquire::http::Proxy "http://プロキシサーバのIPやホスト名:3142";
 の書き換え。
②プロキシ選択判定のためのシェルスクリプトの作成

どちらから先にやってもいいんですが、説明上②からいきます。

/usr/local/bin/以下に自前で以下のシェルスクリプトを作成します。

(今回は「vi /usr/local/bin/apt-proxy-detect.sh」で作成。ファイル名は任意。)

#!/bin/bash
Proxy_Host=プロキシサーバのIPやホスト名
PORT=3142
if nc -w1 -z ${Proxy_Host} ${PORT};then
echo -n "http://${Proxy_Host}:${PORT}"
else
echo -n "DIRECT"
fi

Apxy_503_r

スクリプトを作成したら、実行権限を付与するのを忘れずに。

# chmod +x /usr/local/bin/apt-proxy-detect.sh

ちなみに、スクリプトの中身をざっくり説明すると、「nc -w1 -z ${Proxy_Host} ${PORT}」でプロキシサーバの3142ポートを調べて、プロキシサーバが生きているか確認しています。このコマンドでは、サーバが生きていれば0,死んでいれば1が返ってきます。
(「# nc -w1 192.168.1.3 3142 ; echo $?」とかやってみると確認可。)

結果、最終的にこのシェルにて、プロキシサーバが生きていれば「http://プロキシサーバのIPやホスト名:3142」が、プロキシサーバが死んでいれば「DIRECT」を返します。「DIRECT」は直にパッケージを取りに行くためのワードになります。

 

次に①の作業です。

以前、/etc/apt/apt.conf.d/以下に作成したプロキシを指定したファイルの1行を以下に書き換えます。

Acquire::http::Proxy-Auto-Detect "/usr/local/bin/apt-proxy-detect.sh";

Acquire::http::Proxy-Auto-Detect で、外部コマンド(ここではさっき作成した/usr/local/bin/apt-proxy-detect.sh)を指定します。

以上で作業は終了です。一応「# apt update」しておきます。

 

以後、プロキシが生きていればプロキシ経由で、プロキシが死んでいれば直にdebパッケージを取りに行くかと思います。(終)

 

※ おまけ

192.168.1.2(や192.168.1.4)を使用している最中にプロキシサーバが落ちた場合にて。

この場合、コンソールから

# apt update
# apt パッケージ名

とする分には問題が無いが、Apperによるインストールだと、なぜかエラーを起こしインストールできない。

一応、PCを再起動すればApperでもパッケージをインストールできるようになる。原因は不明だが、もしかしたらApperは毎回/etc/apt/apt.conf.d/以下のファイルを読みに行かないのかもしれない。まぁApperを使わない人には関係の無い話。

 

 

【参考ページ】
 ・Debian MANPAGE:apt.conf 
 ・How do I ignore a proxy if not available? 

 ・apt.confapt用proxyをrepositoryによっては使いたくないとき 
   リポジトリ別にプロキシを選択できるようにする設定が述べられている
   これを利用すれば、https のリポジトリなどのプロキシ使用の選択もできるかと。

 ・/usr/local/bin ‐ 通信用語の基礎知識 
 ・「/bin」「/usr/bin」「/usr/local/bin」ディレクトリの使い分け 
 ・Wikipedia:FHS ディレクトリ構造 

 

 

 

 

 

apt用キャッシュプロキシの構築 〜 apt-cacher-ng

仮想化含めて、実験用のホストが増加した反面、同じパッケージをネットからダウンロードする機会が増加。

公開されているサーバへの負担をあまりかけたくなかったので、apt用のキャッシュサーバを構築することにした。

ということで、今回は「apt用キャッシュプロキシについてのメモ」です。なお作業OS環境はDebian10になります。

 

さて、apt用のキャッシュサーバに利用できるソフトはいくつかあります。

・squid-deb-proxy
・approx
・apt-cacher
・apt-cacher-ng
・go-apt-cacher

等々。

で、今回は手軽に扱えやすそうな「apt-cacher-ng」を選択。

 

以下、作業環境概略図です。このページでは基本、この状況で説明します。

Apxy_002

なお、以下のような環境でも同様に可。

Apxy_003r

仮想マシンで利用する場合についても作業内容は基本的に変わりません。

 

では、最初にサーバにするホスト(192.168.1.3)に「apt-cacher-ng」をインストール。(仮想環境では192.168.1.5)

# apt update
# apt install apt-cacher-ng

で、終。

Apxy_403r

なお、純CUI環境(デスクトップ環境を入れていない)ではコンソールの表示の一部が文字化けする可能性がある。

(ちなみにデスクトップ環境入りのケースでは、tty1〜6の仮想コンソールに切り替えた場合などでも同様の文字化けが起きたりする。)

Apxy_405r

これを解決するには

$ export LANG=C

として、日本語表示を諦める・・・

Apxy_401r

か、または、

$ fbterm

などのフレームバッファベースの端末エミュレータを利用して日本語表示をさせれば解決する可能性大。

Apxy_402

ちなみに、今回は「fbterm」を利用して作業してます。

 

さて、話変わって必須では無いんですが、同一セグメント限定で、プロキシサーバをIPアドレスで指定するのでなく、ホスト名で指定したいならば、

# apt install avahi-daemon

と、avahiもここでインストールしておくとよいかと。mDNSにてホスト名で指定が可能となります。

以上でプロキシサーバ側の設定は終了。

なお、自分のプロキシサーバのIPアドレスを知りたければ、

# ip a

とかで調べてください。

Apxy_504r

 

次にプロキシを利用する側のホスト(192.168.1.2 や 192.168.1.4)の設定。
(仮想環境なら 192.168.122.○/△/◇)

プロキシを利用するホスト側で、/etc/apt/apt.conf.d/以下に使用するプロキシを指定するためのファイルを作成します。

# vi /etc/apt/apt.conf.d/02proxy

vi が嫌な人は nano などで対応をば。ファイル名は「02proxy」としてますが、「05proxy」とかでも別に構いません。

このファイルに以下の行を書き込みます。

Acquire::http::Proxy "http://プロキシサーバのIPやホスト名:3142";

Apxy_501_  

なお、3142は、apt-cacher-ngデーモンが利用するポートです。

 

ファイルを作成し終わったら終了。一度「# apt update」しておきます。

これで作業は終了です。

 

以降「# apt install パッケージ名」とするとプロキシサーバ経由でdebパッケージをインストールしていきます。

ちなみにプロキシサーバに実際にdebパッケージファイルが保存されているか確認したければ、

プロキシサーバ(192.168.1.3 または 192.168.1.5)の

/var/cache/apt-cacher-ng/

を確認してみると良いです。ここがキャッシュの保存先になってます。

Apxy_404

また、ログに関しては

/var/log/apt-cacher-ng/apt-cacher.log

にあるので、これを読めばどのパッケージをキャッシュしたかが確認できます。

Apxy_502

[I]の行が外のサーバからダウンロードしたパッケージ。

[O]の行がプロキシから各ホストへ配布されたパッケージ。

 

また、apt-cacher-ngはWebブラウザから利用状況の確認ができたりもします。

たとえばプロキシを利用する側のWebブラウサで

http://プロキシサーバのIPやホスト名:3142/

とすると利用できます。

Apxy_410_r

以上、apt-cacher-ng によるapt用のキャッシュプロキシの構築でした。

 

なお、補足ページとして以下のページもあります。

 補足①「apt-cacher-ng:仮想環境にてホストOS自身もキャッシュを利用する

 補足②「apt-cacher-ng:使用できないプロキシは無視したい

興味がある方はどうぞ。

 

 

【参考ページ】
 ・Ubuntu Weekly Recipe:第315回 apt-cacher-ngを使ってAPT用キャッシュプロキシの構築 
 ・DebianWiki:AptCacherNg 
 ・Apt-Cacher-NG User Manual 

 ・Linux,BSDでmDNSの名前解決がavahiで行われない場合は .local ドメインがないか確認しましょう。 
 ・LANで使用するドメイン名の注意点 

 ・GUIなしのLinuxのコンソールで文字化け・・・「LANG=C」ではなく「fbterm」で解決 
 ・Wikipedia(英):Linux console 
 ・ArchWiki:Fbterm 
   すでに開発は止まっているらしい
 ・ArchWiki:KMSCON 
   こやつも開発が止まってそうな感が・・・

 

 

〔関連ページ〕
 ・virt-manager 超入門! in 2018 

 

 

 

 

 

 

 

 

apt-cacher-ng:仮想環境にてホストOS自身もキャッシュを利用する

apt用キャッシュプロキシの構築 〜 apt-cacher-ng」の兄弟記事です。

前ページの設定で終わらせた場合、仮想環境におけるホストOS自身はプロキシを利用せず直にパッケージを取りにいってしまいます。

 Apxy_003r3

これだとちょっともったいない。せっかくなので、自身のプロキシサーバからダウンロードするようにしたい。

 

Apxy_003r2

ということで、以下設定。

やることは単純。ホストにて「/etc/apt/apt.conf.d/02proxy」を作成すれば良いです。
(上図の場合、192.168.1.5)

上記のファイルに以下の一行を記述。

Acquire::http::Proxy "http://localhost:3142";

やってることは前ページと変わりません。

あとは「# apt update」しておけば作業終了。

以後、ホストOSのdebパッケージのインストールはapt-cacher-ngを経由して行われるかと思います。(終)

 

 

 

〔関連ページ〕
 ・apt-cacher-ng:使用できないプロキシは無視したい  

 

 

 

 

 

 

2021年5月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
無料ブログはココログ