LAN에서 적절한 다운로드를 캐시하는 가장 좋은 방법은?


152

집에 여러 개의 Ubuntu 컴퓨터가 있고 인터넷 연결이 매우 느리고 때로는 여러 대의 컴퓨터를 한 번에 업데이트해야합니다 (특히 새로운 Ubuntu 릴리스 중에).

내 컴퓨터 중 하나만 패키지를 다운로드해야하고 다른 컴퓨터가 첫 번째 컴퓨터를 사용하여 뎁을 가져올 수있는 방법이 있습니까? 내 로컬 미러 설정과 관련이 있습니까? 아니면 프록시 서버? 아니면 더 간단하게 만들 수 있습니까?

답변:


129

나는 많은 솔루션에 대한 연구를했고 일부 우분투 개발자는 10.04 이상에 대한 프록시 구성 (오징어 기반)을 제안했습니다. 이라고 squid-deb-proxy합니다. 시스템은 서버로 작동하기 만하면됩니다. 대기업은 일반적으로 자체 미러를 실행하지만 대부분의 사람들에게는 온 디맨드 미러링으로 충분합니다.

왜 오징어-deb-proxy?

  • 클라이언트 측에서 파일을 편집하지 않습니다.
  • 클라이언트가 "제로 구성"이되도록 zeroconf를 사용하십시오.
  • 새 도구를 작성하는 대신 기존의 견고한 프록시 솔루션을 사용하십시오.
  • 일반적인 Linux 관리자를위한 손쉬운 설정.

서버 구성

서버로 작동하려는 머신에서 다음을 사용하여 도구를 설치하십시오.

sudo apt-get install squid-deb-proxy avahi-utils

이제 서비스 비트를 시작하십시오.

 sudo start squid-deb-proxy

그리고 avahi 비트 (12.04 이상인 경우 필요하지 않음) :

 sudo start squid-deb-proxy-avahi

프록시 서버 (기본적으로 포트 8000을 수신)와 서버가 zeroconf를 통해 네트워크에 광고하는 데 필요한 avahi 도구가 설치됩니다.

클라이언트 구성

각 컴퓨터에 당신이 (너무 캐시를 사용할 수 있도록 클라이언트 및 서버 자체) 캐시를 사용하려면, 당신은 그들을 여기를 클릭, 자동으로 서버의 적절한 살펴 보자 클라이언트 측 도구를 설치해야 할 필요가 :

소프트웨어 센터를 통해 설치

또는 명령 줄을 통해 :

sudo apt-get install squid-deb-proxy-client

선택 사항 : 효율성을 극대화하려면 한 컴퓨터에서 업데이트를 자동으로 다운로드하도록 설정해야합니다. 따라서 다른 컴퓨터에서는 필요할 때 이미 캐시에 있습니다. 시스템-> 관리-> 업데이트 관리자로 이동 한 다음 업데이트 탭에서 "설정 ..."버튼을 클릭하여 모든 업데이트를 자동으로 다운로드하도록 설정하십시오.

대체 텍스트

타사 소스 캐싱

기본적으로 캐시는 공식 우분투 리포지토리 만 캐시하도록 설정되어 있습니다. 더 추가하려면의 소스 목록에 추가해야합니다 /etc/squid-deb-proxy/mirror-dstdomain.acl. 여기서 ppa.launchpad.net 또는 사용 가능한 다른 서비스를 추가 할 수 있습니다. 이 파일을 변경 한 후 변경 사항을 적용하려면 실행해야합니다 sudo restart squid-deb-proxy.

수동 구성

어떤 이유로 든 zeroconf를 사용하지 않으려는 경우 (네트워크 등의 이유로) /etc/apt/apt.conf다음 스탠자 를 편집 하고 추가하여 프록시를 사용하도록 클라이언트를 수동으로 설정할 수 있습니다 (0.0.0.0을 서버의 IP 주소로 대체하십시오) ) :

 Acquire { 
   Retries "0"; 
   HTTP { Proxy "http://0.0.0.0:8000"; };
 };

방화벽

방화벽을 사용하는 경우 avahi는 224.0.0.0/4 주소에서 5353을 사용하며 다음과 같은 규칙이 필요합니다.

# Specifically port 5353 which avahi uses
-A INPUT -i eth2 -d 224.0.0.0/4 --dport 5353 -j ACCEPT

# OR

# Wide open so all local broadcasting works
-A INPUT -i eth2 -d 224.0.0.0/4 -j ACCEPT

다음으로 프록시를 통한 실제 통신을 위해 TCP 포트 8000을 열어야합니다. 다음과 같은 것 :

-A INPUT -i eth2 -p tcp -m tcp --dport 8000 -d 192.168.0.1 -s 192.168.0.0/24 --syn -j ACCEPT

이 규칙은 단지 당신을 돕기위한 것입니다. 설정과 일대일로 일치하지 않을 수 있습니다. (예 : 잘못된 인터페이스, 개인 네트워크 IP 주소 등)

작동 확인

먼저 서버에서 로그를 확인하여 다음을 확인할 수 있습니다. tail -F /var/log/squid-deb-proxy/access.log그런 다음 클라이언트가 설치된 시스템에서 업데이트를 실행하십시오. 로그는 다음과 같은 항목으로 스크롤하기 시작해야합니다.

1307310795.647     32 192.168.1.106 TCP_MISS/302 768 GET http://us.archive.ubuntu.com/ubuntu/dists/natty-proposed/universe/i18n/Translation-en.xz - DIRECT/141.210.26.10 text/html
1307310795.683     34 192.168.1.106 TCP_MISS/302 752 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/main/i18n/Translation-en_US.lzma - DIRECT/141.210.26.10 text/html
1307310795.716     32 192.168.1.106 TCP_MISS/302 746 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/main/i18n/Translation-en.lzma - DIRECT/141.210.26.10 text/html
1307310795.750     32 192.168.1.106 TCP_MISS/302 764 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/multiverse/i18n/Translation-en_US.lzma - DIRECT/141.210.26.10 text/html
1307310795.784     32 192.168.1.106 TCP_MISS/302 758 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/multiverse/i18n/Translation-en.lzma - DIRECT/141.210.26.10 text/html
1307310795.817     32 192.168.1.106 TCP_MISS/404 657 GET http://us.archive.ubuntu.com/dists/natty-proposed/multiverse/i18n/Translation-en_US.xz - DIRECT/141.210.26.10 text/html

이는 클라이언트가 캐시를 볼 수 있지만 누락 된 것을 의미합니다. 아직 캐시하지 않은 것으로 예상됩니다. 이후의 각 실행은 TCP_HIT로 표시되어야합니다. 오징어 캐시 파일 자체는에서 찾을 수 있습니다 /var/cache/squid-deb-proxy.

그것을 사용하여

그때부터 네트워크의 모든 컴퓨터는 외부 네트워크에 도달하기 전에 캐시를 확인하여 패키지를 가져옵니다. 사용 가능한 새 패키지가있는 경우 첫 번째 시스템은 네트워크에서 해당 패키지를 다운로드 한 후 해당 패키지에 대한 후속 요청이 서버에서 클라이언트로 전달됩니다.

할 것

우리는 여전히 네트워크에서 광고 캐시를 즉시 사용하기 위해 apt를 활성화해야하며 기본적으로 클라이언트 조각을 설치할 필요가 없습니다. 또한 403의 deb가 미러 목록에없는 버그 를 수정해야 합니다.


2014/01/21 14 : 56 : 31 | 오류 : / var / cache / squid-deb-proxy / 03 : (2) 해당 파일 또는 디렉토리가 없습니다 치명적 : 스왑 디렉토리 중 하나를 확인하지 못했습니다. 자세한 내용은 cache.log를 확인하십시오. 'squid -z'를 실행하여 필요한 경우 또는 Squid를 처음으로 실행하는 경우 스왑 디렉토리를 만듭니다. 오징어 캐시 (버전 3.3.8) : 비정상적으로 종료되었습니다.
thumper

1
오징어도 설치해야합니다.
thumper

등이 보이는 수동 구성이 더 이상 유효하지 않습니다. apt.conf아래에 파일 이 없습니다 /etc/apt. 그러나 아래에 설정이있는 파일이 많이 /etc/apt/apt.conf.d있습니다. 대신 파일을 만들어야한다고 생각하십니까?
Alexis Wilke

또한 TODO가 해결 된 것 같습니다. 즉, 아무것도 할 필요가 없으며 캐시가 먼저 사용되었습니다. 버그는 아직 수정 된 것으로 표시되지는 않습니다.
Alexis Wilke

물론, apt.conf.d가 이제 어떻게 수행되는지이 답변에 대한 수정 사항을 제출해주세요.
Jorge Castro

37

apt-cacher-ng작은 환경 (약 20 명의 클라이언트)에서 아무런 문제가 발생하지 않았으므로 @MagicFab 언급 문제가 현재 버전 (Ubuntu 10.04 및 10.10에 설치됨)에서 해결 되었다고 가정합니다 . 서버에는 구성이 필요하지 않으며 클라이언트에게 서버를 패키지 관리자 프록시로 사용하도록 지시하면됩니다.

패키지 를 설치하면 서버가 완전히 설치 되고 구성됩니다 apt-cacher-ng.

클라이언트는 APT 프록시를 설정하여 다음을 /etc/apt/apt.conf.d/01proxy포함 하는 파일을 추가하여 구성해야합니다 (여기서 "your-apt-server"는 서버 이름 또는 IP 주소 임).

Acquire::http { Proxy "http://your-apt-server:3142"; };

완료 -이제는 어떤 소스를 사용하거나 어떤 시스템 버전을 사용하든 상관없이 서버에서 패키지를 캐시합니다 (예 : 10.04 서버는 9.10,10.04 및 11.04 클라이언트가 아무런 문제 나 충돌없이 사용할 수 있음).


네트워크간에 로밍하는 클라이언트 랩톱이 있으면 조금 더 복잡해집니다. 네트워크 주소에 따라 올바른 프록시를 설정하는 스크립트를 만들었습니다. 스크립트는 실행 가능하며에 /etc/network/if-up.d/apt-proxy있습니다. DHCP 서버에서 IPv4 주소를 수신하면 스크립트는 각 네트워크에 적합한 apt-cacher 서버를 설정합니다.

#!/bin/sh

set -e
# Don't bother when lo is configured.
if [ "$IFACE" = lo ]; then
    exit 0
fi
# Only run from ifup.
if [ "$MODE" != start ]; then
    exit 0
fi
# currently only cares about IPv4
if [ "$ADDRFAM" != inet ] && [ "$ADDRFAM" != NetworkManager ]; then
    exit 0
fi
# only run for DHCP-assigned addresses
if [ "$DHCP4_IP_ADDRESS" = "" ]; then
    exit 0
fi

# we're matching on network *broadcast* address,
#  not the specific IP address we were assigned
case "$DHCP4_BROADCAST_ADDRESS" in
    10.3.141.255)
        PROXY='Acquire::http::Proxy "http://my-home-server:3142";';
        ;;
    192.168.154.255)
        PROXY='Acquire::http::Proxy "http://work-server.foo.bar.example.com:3142";';
        ;;
    # add as needed
    *)
        # unknown, no proxying
        PROXY=""
        ;;
esac

# set the proxy
FNAME="/etc/apt/apt.conf.d/01proxy"
echo -n "$PROXY">$FNAME

exit 0

apt-cacher-ng는 IPv6도 지원합니다 (다른 솔루션 중 일부는 그렇지 않은 것을 기억합니다).
Azendale

11
년 후, 나는까지 갔어요 squid-deb-proxysquid-deb-proxy-client: Zeroconf를 실제로 제로 유목 사용자에게 매우 유용 클라이언트의 구성, 의미 - 그리고 경우에 서버가 직접 다운로드하려면 클라이언트 기본값을 응답하지 않습니다.
Piskvor

apt-cacher-ng는 짜증나고 버그가 많으며 패키지 다운로드에 달려 있습니다. 예를 들어 30MB 패키지로 150MB를 다운로드하는 것을 보았습니다
pylover

apt-cacher-ng는 완벽하게 작동합니다. 시스템에 문제가 있습니다. 정확한 squid-deb-proxy는 Squid를 설치하려고합니다. 주장한다.
Ken Sharp

이제 캐시 작업을 수행하는 가장 좋은 솔루션입니다 pbuilder. 이것은 즉시 사용 가능합니다. 또한 zeroconf(2016 년)에 대한 지원이있는 것처럼 보이지만 아직 끝까지 작동하지 못했습니다.
Alexis Wilke


6

debmirror유틸리티를 사용하여 로컬 미러를 설정하는 것이 좋습니다.

다음은 예시입니다.

debmirror --progress --verbose --nosource --method=ftp --passive \
 --host=ftp.osuosl.org --root=pub/ubuntu \
 --dist=lucid,lucid-updates,lucid-security,lucid-backports \
 --section=main,restricted,universe,multiverse --arch=amd64 \
 /d2/ftp/mirror/ubuntu-lucid

나는 이것을 일주일에 한 번 정도 실행하고 하나 이상의 "패치 레벨"을 설정하기위한 기초로 사용합니다. 예를 들어 ...

 cd /d2/ftp/mirror/
 cp -al ubuntu-lucid ubuntu-lucid-20100908

그러면 트리의 연결된 사본이 생성되며 (디스크 공간이 거의 사용되지 않음) 각 로컬 서버를 적절한 소스로 지정할 수 있습니다.


5
ubumirror를 확인해야합니다. 아카이브의 편의 패키지로 이미 설정되어 있습니다. 공식 거울이 사용하는 것입니다.
Jorge Castro

2

소규모 네트워크 (예 : 가정 / 소규모 사무실)에서 apt-cacher-ng를 사용하여 좋은 결과를 얻었습니다. 최신 버전을 확인하지는 않았지만 서버와 클라이언트를 모두 신중하게 설정해야하며 로컬 네트워크에서만 업데이트를 얻는 클라이언트에 가장 적합하다는 것을 알고 있습니다.

나는 위의-오징어 기반 솔루션을 시도했지만 내가, 그것을 생각하지 않습니다 너무 좋아하는 것보다 여러 가지 문제를 해결하고 더 클라이언트 구성을 적용해야 하지만 이 작은 설정에있는 apt-cacher-NG를 대체 할 수있다.


1

apt-cacher 설정하기가 가장 쉽지 않았으며 dist-upgrade에서도 살아남지 못합니다.

squid-deb-proxy서버, squid-deb-proxy-client클라이언트에 설치 하십시오 . zeroconf Avahi를 사용하므로 구성이 필요하지 않습니다.

단순한 뎁 이상을 캐시하려는 경우 오징어를 귀찮게하지 않을 것입니다. 다음은 Apache Traffic Server입니다. http://trafficserver.readthedocs.org


squid-deb-proxy는 오징어 설치를 주장합니다. 그리고 apt-cacher는 오랫동안 죽었고, apt-cacher-ng는 어디에 있습니다.
Ken Sharp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.