ฉันจะเพิกเฉยต่อพร็อกซีได้อย่างไรถ้าไม่มี


15

ทำตามคำแนะนำในวิธีที่ดีที่สุดในการแคชดาวน์โหลด apt บน LAN หรือไม่ ฉันได้ตั้งค่าแคชแคชในเครือข่ายท้องถิ่นของฉัน เนื่องจากเครื่องดังกล่าวไม่ทำงานตลอดเวลาฉันต้องการให้สามารถรีเฟรชรายการแหล่งข้อมูลและติดตั้งแพ็กเกจโดยไม่ต้องใช้พรอกซีนั้นหากไม่พร้อมใช้งาน

ฉันได้อ่านส่วนAcquire groupในหน้าคู่มือapt.conf(5)แล้ว แต่ฉันไม่พบตัวเลือกเช่น "Silent-Fail"

ในขณะนี้sudo apt-get updateและคำสั่งที่เกี่ยวข้องล้มเหลวเนื่องจากไม่สามารถสร้างการเชื่อมต่อได้ ดังนั้นฉันจะกำหนดค่าไคลเอนต์เพื่อให้พร็อกซี่จะถูกละเว้นถ้ามันไม่สามารถใช้ได้?


คุณใช้การค้นพบ zeroconf หรือคุณตั้งค่าพร็อกซีด้วยตนเองในแต่ละไคลเอนต์หรือไม่?
Jorge Castro

ฉันกำลังตั้งค่าพร็อกซีด้วยตนเองเนื่องจากอาจมีการปิดกั้นไฟร์วอลล์ / การออกอากาศ
Lekensteyn

คำตอบ:


20

มีการตั้งค่าที่ไม่มีเอกสาร, 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=1show_proxy_messages=0


Lekensteyn ฉันขออนุญาตให้คุณวางมันลงในpuppet-apt-cacher-ngเพื่อเป็นทางเลือกได้apt-cacher-ng::clientหรือไม่?
การ์ ธ Kidd

1
ได้รับอนุญาตให้ทำสิ่งที่คุณต้องการด้วยค่ะ :)
Lekensteyn

2
ฉันดีใจมากที่ฉันพบคำตอบนี้เมื่อฉันตั้งค่า apt-cacher-ng สักพัก ฉันมี apt-cacher-ng ติดตั้งไว้ในคอมพิวเตอร์ที่บ้านของฉัน (192.168.0.2) สคริปต์รู้สึกบิต overkill if nc -w1 -z 192.168.0.2 3142; then printf http://192.168.0.2:3142; else printf DIRECT; fiสำหรับกรณีของฉันดังนั้นฉันเขียนง่ายตรวจสอบ-http-พร็อกซี: เราแค่หวังว่าฟีเจอร์ที่ไม่มีเอกสารจะถูกลบออก :)
geirha

2
ฉันบันทึกสคริปต์อย่างกว้างขวางเพื่อประโยชน์ของคุณถ้าคุณสนใจขนาดคุณสามารถทำให้สั้นลงได้ด้วยi=192.168.0.2;nc -zw1 $i 3142&&echo http://$i:3142/||echo DIRECT: p
Lekensteyn

3

ขณะนี้มีวิธีการสนับสนุนอย่างเป็นทางการในการทำเช่นนี้โดยใช้ตัวเลือก - Acquire::http::Proxy-Auto-Detect(ดูapt.confหน้าคน) พฤติกรรมคล้ายกับเอกสารเก่าAcquire::http::ProxyAutoDetect(การแสดงตน / ไม่มีเครื่องหมายยัติภังค์ในตัวเลือกการกำหนดค่าใหม่ / เก่า) มันสามารถใช้งานร่วมกันได้ส่วนใหญ่ย้อนหลัง แต่ได้ขยาย ...

ฉันกำลังอยู่ในขั้นตอนการส่งแพตช์ไปยังผู้ดูแล apt เพื่อปรับปรุงเอกสาร แต่เนื่องจากมันไม่น่าจะทำให้มันเป็นเวอร์ชั่นของ apt ที่มาพร้อมกับ distro release ได้สักพักฉันจะรวมข้อความของ แพทช์เสนอที่นี่:

Acquire::http::Proxy-Auto-Detectสามารถใช้เพื่อระบุคำสั่งภายนอกเพื่อค้นหา http proxy ที่จะใช้ APT อาจเรียกใช้คำสั่งหลายครั้งและจะส่ง URI ไปยังคำสั่งเป็นพารามิเตอร์แรกและพารามิเตอร์เดียว APT คาดว่าคำสั่งที่จะส่งออกพร็อกซี่ซึ่งจะใช้ในการติดต่อ URI ในคำถามเกี่ยวกับ stdout เป็นบรรทัดเดียวในสไตล์http://proxy:port/หรือคำว่าDIRECTถ้าไม่ควรใช้พร็อกซี่ ไม่มีเอาต์พุตบ่งชี้ว่าควรใช้การตั้งค่าพร็อกซีทั่วไป

Acquire::http::Proxy::HOSTโปรดทราบว่าการตรวจหาอัตโนมัติจะไม่ถูกนำมาใช้สำหรับโฮสต์ถ้าการกำหนดค่าพร็อกซีโฮสต์เฉพาะกำหนดไว้แล้วผ่านทาง

หากต้องการวิเคราะห์การโต้ตอบกับคำสั่งภายนอกให้ตั้งค่าDebug::Acquire::http=yesและ / หรือDebug::Acquire::https=yesเช่นใช้-oพารามิเตอร์บรรทัดคำสั่ง

โปรดทราบว่ากำลังใช้ apt รุ่นก่อนวางจำหน่ายรุ่น 1.3 ~ exp2 ถึง 1.3 จากนั้นมีข้อบกพร่อง (น่าจะได้รับการแก้ไข 1.3.1) ซึ่งทำให้ apt แยกวิเคราะห์stderrของคำสั่งภายนอกพร้อมกับ stdout


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 chugs ตามปกติ

ซอส

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.