Postępując zgodnie z instrukcjami w Najlepszy sposób na buforowanie apt pobrań w sieci LAN? , Skonfigurowałem buforujący serwer proxy w mojej sieci lokalnej. Ponieważ ten komputer nie zawsze działa, chciałbym móc odświeżyć listę źródeł i zainstalować pakiety bez używania tego serwera proxy, jeśli jest niedostępny.
Przeczytałem już sekcję Zdobądź grupę na stronie podręcznika apt.conf(5)
, ale nie mogłem znaleźć opcji takiej jak „Silent-Fail”.
W tej chwili sudo apt-get update
powiązane polecenia nie działają, ponieważ nie można nawiązać połączenia. Jak więc skonfigurować klienta, aby serwer proxy był ignorowany, jeśli nie jest dostępny?
networking
apt
proxy
Lekensteyn
źródło
źródło
Odpowiedzi:
Jest tam nieudokumentowane ustawienia,
Acquire::http::ProxyAutoDetect
. To ustawienie powinno zawierać pełną ścieżkę do pliku binarnego i nie może zawierać argumentów. Polecenie powinno wypisać proxy, które ma być użyte (przykładhttp://10.0.0.1:8000
:).Biorąc pod uwagę powyższe informacje, można utworzyć skrypt, który próbuje ustawić proxy przed jego ustawieniem. Jeśli nie jest dostępny serwer proxy, należy użyć bezpośredniego połączenia.
Poniżej znajduje się taki skrypt wykrywający proxy, który próbuje
http://10.0.0.1:8000/
ihttp://10.0.0.2:8000
proxy.Wprowadź kod
/etc/apt/detect-http-proxy
:Teraz APT musi być skonfigurowany do używania powyższego skryptu wykrywającego proxy, więc wstaw następujący kod
/etc/apt/apt.conf.d/30detectproxy
:Do pliku umieściłem również następny kod, aby zapobiec pośredniczeniu niektórych hostów.
Domyślnie skrypt wyświetla, czy proxy jest używane, czy nie. Aby to wyłączyć, edytuj
/etc/apt/detect-http-proxy
i zmieńshow_proxy_messages=1
nashow_proxy_messages=0
.źródło
apt-cacher-ng::client
?if nc -w1 -z 192.168.0.2 3142; then printf http://192.168.0.2:3142; else printf DIRECT; fi
. Miejmy tylko nadzieję, że nieudokumentowana funkcja zostanie usunięta :)i=192.168.0.2;nc -zw1 $i 3142&&echo http://$i:3142/||echo DIRECT
: pJest teraz oficjalnie obsługiwany sposób, aby to zrobić - używając opcji -
Acquire::http::Proxy-Auto-Detect
(patrzapt.conf
strona podręcznika ). Zachowanie jest podobne do starego nieudokumentowanegoAcquire::http::ProxyAutoDetect
(zauważ obecność / brak łączników w nowych / starych opcjach konfiguracji), jest w dużej mierze kompatybilne wstecz, ale zostało rozszerzone ...Jestem w trakcie przesyłania łaty do opiekunów apt w celu ulepszenia dokumentacji, ale ponieważ jest mało prawdopodobne, aby zrobiła to wersja apt, która jest dostarczana z wersją dystrybucyjną przez dłuższy czas, dołączę tekst proponowana łatka tutaj:
Acquire::http::Proxy-Auto-Detect
może być użyty do określenia zewnętrznego polecenia do wykrycia proxy HTTP do użycia. APT może wywoływać polecenie wiele razy i przekaże identyfikator URI do polecenia jako pierwszy i jedyny parametr. APT oczekuje, że polecenie wyświetli serwer proxy, który ma zostać użyty do skontaktowania się z danym identyfikatorem URI na jego stdout jako pojedynczy wiersz w styluhttp://proxy:port/
lub słowoDIRECT
jeśli nie należy używać proxy. Brak danych wyjściowych wskazuje, że należy użyć ogólnych ustawień proxy.Zauważ, że automatyczne wykrywanie nie będzie używane dla hosta, jeśli konfiguracja proxy specyficzna dla hosta jest już ustawiona za pośrednictwem
Acquire::http::Proxy::HOST
.Aby zdiagnozować interakcje z zewnętrznym poleceniem, ustaw
Debug::Acquire::http=yes
i / lubDebug::Acquire::https=yes
np. Używając-o
parametru wiersza poleceń.Zauważ, że używasz przedpremierowej wersji apt, wersji 1.3 ~ exp2 do 1.3, wtedy występuje błąd (prawdopodobnie naprawiony przez 1.3.1), który powoduje, że apt analizuje stderr polecenia zewnętrznego wraz ze stdout.
źródło
/etc/apt/apt.conf.d/02proxy
:/usr/local/bin/apt-proxy-detect.sh
:Wiersz poleceń
nc
działać (sudo apt-get install netcat
), jeśli go brakuje.chmod +x /usr/local/bin/apt-proxy-detect.sh
Jak to działa
Jeśli może połączyć się z serwerem proxy, drukuje serwer proxy, z którego korzysta APT. Jeśli nie, drukuje normalnie DIRECT i APT.
sos
źródło