Mevcut değilse bir proxy'yi nasıl yok sayabilirim?


15

Bir LAN'da uygun indirmeleri önbelleğe almanın en iyi yolu talimatları izleyin , Yerel ağımda bir önbellek proxy ayarladım. Bu makine her zaman hazır olmadığından, kaynak listesini yenileyebiliyorum ve kullanılamıyorsa bu proxy'yi kullanmadan paketleri yükleyebiliyorum.

Kılavuz sayfasındaki Edinme grubu bölümünü zaten okudum apt.conf(5), ancak "Sessiz-Başarısız" gibi bir seçenek bulamadım.

Şu anda sudo apt-get updatehiçbir bağlantı kurulamadığı için ilgili komutlar başarısız oluyor. Peki, istemciyi proxy yoksa yoksayılırsa nasıl yapılandırabilirim?


Sıfır konf keşif mi kullanıyorsunuz veya proxy'yi her istemcide manuel olarak mı ayarlıyorsunuz?
Jorge Castro

Proxy'yi olası güvenlik duvarları / devre dışı bırakılmış yayın nedeniyle manuel olarak ayarlıyorum.
Lekensteyn

Yanıtlar:


20

Belgelenmemiş bir ayar var Acquire::http::ProxyAutoDetect. Bu ayar, ikilinin tam yolunu içermelidir ve bağımsız değişkenleri olamaz. Komut, kullanılacak proxy'yi çıktılamalıdır (örnek:) http://10.0.0.1:8000.

Yukarıdaki bilgiler göz önüne alındığında, bir proxy'yi ayarlamadan önce deneyen bir komut dosyası oluşturulabilir. Proxy yoksa, doğrudan bağlantı kullanılmalıdır.

Aşağıda http://10.0.0.1:8000/ve http://10.0.0.2:8000vekilleri çalıştıran böyle bir proxy algılama komut dosyası bulunmaktadır .

Kodu yerleştirin /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

Şimdi, APT yukarıdaki proxy algılama komut dosyasını kullanacak şekilde yapılandırılmalıdır, bu nedenle aşağıdaki kodu yerleştirin /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";

Ben de bazı host proxified önlemek için dosyaya sonraki kodu koydum.

# Override the default proxy, DIRECT causes a direct connection to be used
Acquire::http::Proxy {
    deb.opera.com DIRECT;
    dl.google.com DIRECT;
};

Varsayılan olarak, komut dosyası bir proxy kullanılıp kullanılmadığını verir. O, düzenleyebilir devre dışı bırakmak için /etc/apt/detect-http-proxyve değişim show_proxy_messages=1için show_proxy_messages=0.


Lekensteyn, bunu kukla-apt-cacher-ng'ye bir seçenek olarak yapıştırma izniniz olabilir apt-cacher-ng::clientmi?
Garth Kidd

1
İzin verildi, onunla ne istersen yap :)
Lekensteyn

2
Bir süre önce apt-cacher-ng ayarladığımda bu cevabı bulduğum için çok mutluyum. Ev bilgisayarlarımdan birine (192.168.0.2) uygun apt-cacher-ng var. Ben basitleştirilmiş bir tespit-http-vekil yazdı yüzden senaryo, benim durumumda için biraz overkill hissetti: if nc -w1 -z 192.168.0.2 3142; then printf http://192.168.0.2:3142; else printf DIRECT; fi. Umarım belgesiz özellik kaldırılır :)
geirha

2
Senaryoyu yararınız için kapsamlı bir şekilde belgeledim, eğer boyutu önemsiyorsanız, daha da i=192.168.0.2;nc -zw1 $i 3142&&echo http://$i:3142/||echo DIRECT
kısaltabilirsiniz

3

Şimdi bunu yapmanın resmi olarak desteklenen bir yolu var - seçeneği kullanarak - Acquire::http::Proxy-Auto-Detect(bkz apt.conf. Sayfa). Davranış eski belgelenmemiş Acquire::http::ProxyAutoDetect(yeni / eski yapılandırma seçeneklerinde tire işaretinin varlığı / yokluğu) ile benzerdir , büyük ölçüde geriye dönük olarak uyumludur, ancak genişletilmiştir ...

Belgeleri iyileştirmek için uygun bakıcılara bir yama gönderme sürecindeyim, ancak bunun bir süre için dağıtım sürümüyle birlikte gelen bir apt sürümüne dönüştürülmesi mümkün olmadığından, burada önerilen yama:

Acquire::http::Proxy-Auto-Detectkullanılacak http proxy'yi bulmak için harici bir komut belirtmek üzere kullanılabilir. APT komutu birden çok kez çağırabilir ve komuta ilk ve tek parametresi olarak bir URI iletir. APT, komutun, stdout'unda söz konusu URI ile iletişim kurmak için kullanılacak proxy'yi stilde tek bir satır olarak http://proxy:port/veya DIRECTproxy kullanılmaması gerekiyorsa kelimeyi çıkarmasını bekler . Çıktı yok, genel proxy ayarlarının kullanılması gerektiğini belirtir.

Ana bilgisayara özgü bir proxy yapılandırması önceden ayarlanmışsa, bir ana makine için otomatik algılamanın kullanılmayacağını unutmayın Acquire::http::Proxy::HOST.

Harici komutla etkileşimleri teşhis etmek için, Debug::Acquire::http=yesve / veya komut satırı parametresini Debug::Acquire::https=yeskullanarak ayarlayın ve / veya -o.

Apt, 1.3 ~ exp2 ila 1.3 sürümleri için bir ön sürüm kullandığına dikkat edin, o zaman apt ile birlikte harici komutun stderr'in ayrıştırılmasına neden olan bir hata (muhtemelen 1.3.1 ile düzeltilmiştir) vardır .


2

/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

Komut satırı

  • Eksikse ncçalışması ( sudo apt-get install netcat) gerekir .
  • Emin olun chmod +x /usr/local/bin/apt-proxy-detect.sh
  • Komut dosyasını belirtirken tam yolu kullanın.

Nasıl çalışır

Bir proxy'ye bağlanabiliyorsa, APT bunu kullanan proxy'yi yazdırır. Eğer yapamazsa, normalde DIRECT ve APT chugs yazdırır.

Sos

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.