LANでaptダウンロードをキャッシュする最適な方法 の指示に従って 、ローカルネットワークにキャッシュプロキシを設定しました。そのマシンは常に稼働しているわけではないので、ソースリストを更新し、使用できない場合はそのプロキシを使用せずにパッケージをインストールできるようにしたいと思います。
私はすでにapt.conf(5)
のマニュアルページのグループセクションを取得しましたが、できませんでした」 t "Silent-Fail"のようなオプションを見つけます。
現時点では、接続を確立できなかったため、Sudo apt-get update
および関連コマンドは失敗します。プロキシが利用できない場合、プロキシが無視されるようにクライアントを設定するにはどうすればよいですか?
文書化されていない設定Acquire::http::ProxyAutoDetect
があります。この設定には、バイナリへのフルパスが含まれている必要があり、引数を持つことはできません。コマンドは、使用するプロキシを出力する必要があります(例:http://10.0.0.1:8000
)。
上記の情報があれば、プロキシを設定する前に試行するスクリプトを作成できます。プロキシが利用できない場合は、直接接続を使用する必要があります。
以下は、http://10.0.0.1:8000/
およびhttp://10.0.0.2:8000
プロキシを試行するプロキシ検出スクリプトです。
コードを/etc/apt/detect-http-proxy
に配置します。
#!/bin/bash
# detect-http-proxy - Returns a HTTP proxy which is available for use
# Author: Lekensteyn <[email protected]>
# Supported since APT 0.7.25.3ubuntu1 (Lucid) and 0.7.26~exp1 (Debian Squeeze)
# Unsupported: Ubuntu Karmic and before, Debian Lenny and before
# Put this file in /etc/apt/detect-http-proxy and create and add the below
# configuration in /etc/apt/apt.conf.d/30detectproxy
# Acquire::http::ProxyAutoDetect "/etc/apt/detect-http-proxy";
# APT calls this script for each Host that should be connected to. Therefore
# you may see the proxy messages multiple times (LP 814130). If you find this
# annoying and wish to disable these messages, set show_proxy_messages to 0
show_proxy_messages=1
# on or more proxies can be specified. Note that each will introduce a routing
# delay and therefore its recommended to put the proxy which is most likely to
# be available on the top. If no proxy is available, a direct connection will
# be used
try_proxies=(
10.0.0.1:8000
10.0.0.2:8000
)
print_msg() {
# \x0d clears the line so [Working] is hidden
[ "$show_proxy_messages" = 1 ] && printf '\x0d%s\n' "$1" >&2
}
for proxy in "${try_proxies[@]}"; do
# if the Host machine / proxy is reachable...
if nc -z ${proxy/:/ }; then
proxy=http://$proxy
print_msg "Proxy that will be used: $proxy"
echo "$proxy"
exit
fi
done
print_msg "No proxy will be used"
# Workaround for Launchpad bug 654393 so it works with Debian Squeeze (<0.8.11)
echo DIRECT
ここで、上記のプロキシ検出スクリプトを使用するようにAPTを構成する必要があるため、/etc/apt/apt.conf.d/30detectproxy
に次のコードを配置します。
# Fail immediately if a file could not be retrieved. Comment if you have a bad
# Internet connection
Acquire::Retries 0;
# undocumented feature which was found in the source. It should be an absolute
# path to the program, no arguments are allowed. stdout contains the proxy
# server, stderr is shown (in stderr) but ignored by APT
Acquire::http::ProxyAutoDetect "/etc/apt/detect-http-proxy";
また、いくつかのホストがプロキシ化されるのを防ぐために、次のコードをファイルに追加しました。
# Override the default proxy, DIRECT causes a direct connection to be used
Acquire::http::Proxy {
deb.opera.com DIRECT;
dl.google.com DIRECT;
};
デフォルトでは、スクリプトはプロキシが使用されているかどうかを出力します。それを無効にするには、/etc/apt/detect-http-proxy
を編集し、show_proxy_messages=1
をshow_proxy_messages=0
に変更します。
これを公式にサポートする方法があります-オプション-Acquire::http::Proxy-Auto-Detect
を使用します(apt.conf
manページを参照)。動作は、文書化されていない古いAcquire::http::ProxyAutoDetect
(新しい/古い設定オプションにハイフンが存在するかどうかに注意)に似ています。
私はドキュメントを改善するためにaptメンテナーにパッチを提出していますが、これはかなり長い間ディストリビューションのリリースが同梱されるaptのバージョンにはなりそうにないので、ここに提案されたパッチ:
Acquire::http::Proxy-Auto-Detect
を使用して、使用するHTTPプロキシを検出する外部コマンドを指定できます。 APTはコマンドを複数回呼び出すことができ、最初の唯一のパラメーターとしてコマンドにURIを渡します。 APTは、コマンドが、標準のhttp://proxy:port/
またはWord DIRECT
の単一行として問題のURIに接続するために使用されるプロキシを出力することを期待しますプロキシを使用しないでください。出力は、汎用プロキシ設定を使用する必要があることを示しています。
ホスト固有のプロキシ設定がAcquire::http::Proxy::Host
を介して既に設定されている場合、自動検出はホストに使用されないことに注意してください。
外部コマンドとの相互作用を診断するには、Debug::Acquire::http=yes
やDebug::Acquire::https=yes
を設定します(例:-o
コマンドラインパラメーターを使用)。
Aptのプレリリースバージョンであるバージョン1.3〜exp2から1.3を使用している場合、外部コマンドのstderrを解析するバグ(1.3.1で修正される可能性が高い)があることに注意してください。標準出力で。
/etc/apt/apt.conf.d/02proxy
:
Acquire::http::Proxy-Auto-Detect "/usr/local/bin/apt-proxy-detect.sh";
/usr/local/bin/apt-proxy-detect.sh
:
#!/bin/bash
IP=192.168.88.1
PORT=3142
if nc -w1 -z $IP $PORT; then
echo -n "http://${IP}:${PORT}"
else
echo -n "DIRECT"
fi
nc
が必要です(Sudo apt-get install netcat
)。chmod +x /usr/local/bin/apt-proxy-detect.sh
を確認してくださいプロキシに接続できる場合、APTはそれを使用してプロキシを出力します。できない場合、DIRECTおよびAPTを通常どおりに出力します。