วิธีที่ดีที่สุดในการแคชดาวน์โหลด apt บน LAN?


152

ฉันมีเครื่อง Ubuntu หลายเครื่องที่บ้านและการเชื่อมต่ออินเทอร์เน็ตค่อนข้างช้าและบางครั้งเครื่องหลายเครื่องจำเป็นต้องได้รับการอัปเดตพร้อมกัน (โดยเฉพาะในช่วงที่ออก Ubuntu ใหม่)

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

คำตอบ:


129

ฉันได้ทำการวิจัยเกี่ยวกับโซลูชันจำนวนมากและนักพัฒนา Ubuntu บางคนได้กำหนดค่าพร็อกซี (ตาม Squid) สำหรับ 10.04 และใหม่กว่า squid-deb-proxyมันเรียกว่า มันต้องการเพียงเครื่องที่จะทำหน้าที่เป็นเซิร์ฟเวอร์ องค์กรขนาดใหญ่มักใช้กระจกเต็มของตัวเอง แต่สำหรับคนส่วนใหญ่การทำมิเรอร์แบบออนดีมานด์ก็เพียงพอแล้ว

ทำไมต้อง squid-deb-proxy?

  • ไม่มีการแก้ไขไฟล์ในฝั่งไคลเอ็นต์
  • ใช้ zeroconf เพื่อให้ลูกค้าเป็น "zero config"
  • ใช้พร็อกซีโซลูชันโซลิดสเตตที่มีอยู่แทนที่จะเขียนเครื่องมือใหม่
  • ติดตั้งง่ายสำหรับผู้ดูแลระบบ 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 โดยค่าเริ่มต้น) และเครื่องมือ avahi ที่จำเป็นสำหรับเซิร์ฟเวอร์ในการโฆษณาตัวเองบนเครือข่ายของคุณผ่านทาง zeroconf

การกำหนดค่าไคลเอนต์

ในคอมพิวเตอร์แต่ละเครื่องที่คุณต้องการใช้แคช (ไคลเอนต์และเซิร์ฟเวอร์เองเพื่อให้สามารถใช้แคชได้) คุณต้องติดตั้งเครื่องมือฝั่งไคลเอ็นต์ที่ให้มองหาเซิร์ฟเวอร์โดยอัตโนมัติคลิกที่นี่ :

ติดตั้งผ่านศูนย์ซอฟต์แวร์

หรือผ่านทางบรรทัดคำสั่ง:

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

ทางเลือก : เพื่อประสิทธิภาพสูงสุดคุณควรตั้งให้เครื่องหนึ่งเครื่องดาวน์โหลดการอัพเดทโดยอัตโนมัติดังนั้นเมื่อเครื่องอื่นของคุณต้องการมันก็จะอยู่ในแคชแล้ว คุณสามารถทำได้โดยไปที่ System-> Administration-> Update Manager จากนั้นคลิกที่ปุ่ม "การตั้งค่า ... " ในแท็บอัปเดตตั้งให้ดาวน์โหลดการอัปเดตทั้งหมดโดยอัตโนมัติ

ข้อความแสดงแทน

การแคชแหล่งข้อมูลของบุคคลที่สาม

ตามค่าเริ่มต้นแคชจะถูกตั้งค่าเป็นที่เก็บแคชอย่างเป็นทางการของ Ubuntu เท่านั้น /etc/squid-deb-proxy/mirror-dstdomain.aclจะเพิ่มมากขึ้นคุณจะต้องเพิ่มลงในรายการของแหล่งที่มาที่ นี่คือที่ที่คุณสามารถเพิ่ม ppa.launchpad.net หรือบริการอื่น ๆ ที่คุณอาจใช้ หลังจากทำการเปลี่ยนแปลงไฟล์นี้คุณจะต้องเรียกใช้sudo restart squid-deb-proxyเพื่อให้การเปลี่ยนแปลงมีผล

กำหนดค่าด้วยตนเอง

หากด้วยเหตุผลบางอย่างที่คุณไม่ต้องการใช้ zeroconf (สำหรับเหตุผลเครือข่ายหรืออะไรก็ตาม) คุณสามารถตั้งค่าไคลเอนต์ให้ใช้พรอกซีด้วยตนเองโดยแก้ไข/etc/apt/apt.confและเพิ่ม stanza ต่อไปนี้ (แทนที่ 0.0.0.0 ด้วยที่อยู่ IP ของเซิร์ฟเวอร์ ):

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

ไฟร์วอลล์

ในกรณีที่คุณใช้ไฟร์วอลล์ avahi ใช้ 5353 ที่อยู่ 224.0.0.0/4 และต้องการกฎที่มีลักษณะดังนี้:

# 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 คุณสามารถค้นหาไฟล์ squid cache เอง/var/cache/squid-deb-proxyได้

ใช้มัน

จากนั้นในเครื่องทั้งหมดในเครือข่ายของคุณจะตรวจสอบแคชก่อนที่จะกดเครือข่ายภายนอกเพื่อดึงแพคเกจ หากมีแพ็กเกจใหม่พร้อมใช้งานเครื่องแรกจะดาวน์โหลดจากเน็ตหลังจากการร้องขอที่ตามมาสำหรับแพ็คเกจนั้นจะมาจากเซิร์ฟเวอร์ไปยังไคลเอนต์

ทำ

เรายังต้องเปิดใช้งาน apt เพียงแค่ใช้แคชที่โฆษณาบนเครือข่ายนอกกรอบและตามค่าเริ่มต้นดังนั้นคุณไม่จำเป็นต้องติดตั้งชิ้นส่วนไคลเอนต์ เราต้องแก้ไขข้อผิดพลาดที่ deb ของ 403 ไม่อยู่ในรายการมิเรอร์


2014/01/21 14: 56: 31 | ข้อผิดพลาด: / var / cache / squid-deb-proxy / 03: (2) ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว FATAL: ล้มเหลวในการตรวจสอบหนึ่งในไดเรกทอรีแลกเปลี่ยนตรวจสอบ cache.log เพื่อดูรายละเอียด เรียกใช้ 'squid -z' เพื่อสร้างไดเรกทอรี swap หากจำเป็นหรือถ้าเรียกใช้ Squid เป็นครั้งแรก Squid Cache (เวอร์ชั่น 3.3.8): สิ้นสุดลงอย่างผิดปกติ
Thumper

1
คุณต้องติดตั้งปลาหมึก
Thumper

ดูเหมือนว่าการกำหนดค่าด้วยตนเองจะไม่สามารถใช้งานได้อีกต่อไป ไม่มีเป็นไฟล์ภายใต้apt.conf แต่มีมากมายเหลือเฟือของไฟล์ที่มีการตั้งค่าภายใต้/etc/apt /etc/apt/apt.conf.dฉันจะจินตนาการว่าตอนนี้เราควรสร้างไฟล์ที่นั่นแทนไหม?
Alexis Wilke

ดูเหมือนว่าสิ่งที่ต้องทำได้รับการแก้ไขแล้ว นั่นคือฉันไม่ต้องทำอะไรเลยและใช้แคชก่อน แม้ว่าข้อผิดพลาดจะไม่ดูเหมือนว่ามันถูกทำเครื่องหมายเป็นคงที่
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สคริปต์ปฏิบัติการและใน เมื่อได้รับที่อยู่ IPv4 จากเซิร์ฟเวอร์ DHCP สคริปต์จะตั้งค่าเซิร์ฟเวอร์ 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-proxyและsquid-deb-proxy-client: zeroconf หมายถึงการกำหนดค่าเป็นศูนย์สำหรับลูกค้าซึ่งเป็นประโยชน์อย่างยิ่งสำหรับผู้ใช้เร่ร่อน - และในกรณีที่เซิร์ฟเวอร์ไม่ตอบสนองลูกค้าจะเริ่มต้นดาวน์โหลดโดยตรง
Piskvor

apt-cacher-ng sucks มันเป็นรถที่ค่อนข้างแขวนในแพ็คเกจการดาวน์โหลด ตัวอย่างเช่นฉันเห็นมันดาวน์โหลด 150 MB สำหรับแพ็คเกจ 30MB
pylover

apt-cacher-ng ทำงานได้อย่างสมบูรณ์แบบ คุณมีบางอย่างผิดปกติกับระบบของคุณ ใน Precise squid-deb-proxy ต้องการติดตั้ง Squid ยืนยันกับมัน
Ken Sharp

pbuilderตอนนี้ที่เป็นทางออกที่ดีที่สุดที่จะได้รับแคชกับการทำงานกับ สิ่งนี้ใช้ได้นอกกรอบ ดูเหมือนว่าจะมีการสนับสนุนzeroconf(ในปี 2559) แต่ฉันไม่สามารถ (ยัง) ได้ว่าจะทำงานให้เสร็จ
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

ฉันใช้งานสัปดาห์ละครั้งและใช้เป็นพื้นฐานในการสร้าง "patchlevels" หนึ่งรายการขึ้นไป ตัวอย่างเช่น...

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

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


5
คุณควรตรวจสอบ ubumirror มันเป็นแพคเกจความสะดวกสบายในเอกสารสำคัญที่มีทั้งหมดที่ตั้งค่าไว้แล้วสำหรับคุณ มันเป็นสิ่งที่กระจกทางการใช้
Jorge Castro

2

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

ฉันพยายามแก้ปัญหาปลาหมึกตามข้างต้น แต่มันต้องใช้วิธีแก้ปัญหาหลายและการกำหนดค่าของลูกค้ามากกว่าที่ฉันต้องการดังนั้นจึงไม่รู้สึกเลยว่ามันจะเปลี่ยน apt-cacher-ng ในการตั้งค่าขนาดเล็ก


1

apt-cacher ไม่ใช่วิธีที่ง่ายที่สุดในการตั้งค่าและมันจะไม่รอดจากการอัพเกรด

ติดตั้งsquid-deb-proxyบนเซิร์ฟเวอร์squid-deb-proxy-clientบนไคลเอนต์ มันใช้ zeroconf Avahi ดังนั้นจึงไม่จำเป็นต้องตั้งค่าใด ๆ

หากคุณกำลังมองหาแคชมากกว่า debs ฉันจะไม่รำคาญกับ Squid Apache Traffic Server เป็นเรื่องใหญ่ต่อไป http://trafficserver.readthedocs.org


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