มีการตั้งค่าที่ไม่มีเอกสาร, 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 <lekensteyn@gmail.com>
# 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";
ฉันยังใส่รหัสถัดไปในไฟล์เพื่อป้องกันไม่ให้โฮสต์บางส่วนถูก proxified
# 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