Cách tốt nhất để lưu trữ tải xuống apt trên mạng LAN?


152

Tôi có nhiều máy Ubuntu ở nhà và kết nối internet khá chậm, và đôi khi nhiều máy cần phải được cập nhật cùng một lúc (đặc biệt là trong các bản phát hành Ubuntu mới.)

Có cách nào mà chỉ một trong các máy của tôi cần tải xuống các gói và các máy khác có thể sử dụng máy đầu tiên để nhận các bản sửa lỗi không? Nó có liên quan đến việc thiết lập gương địa phương của riêng tôi? Hoặc một máy chủ proxy? Hoặc nó có thể được làm đơn giản hơn?

Câu trả lời:


129

Tôi đã thực hiện một số nghiên cứu về một loạt các giải pháp và một số nhà phát triển Ubuntu đã đưa ra một cấu hình proxy (dựa trên Squid) cho 10.04 trở đi. Nó được gọi là squid-deb-proxy. Nó chỉ yêu cầu một máy để hoạt động như máy chủ. Các tổ chức lớn thường điều hành gương đầy đủ của riêng họ nhưng đối với hầu hết mọi người, việc phản chiếu theo yêu cầu là đủ.

Tại sao mực-deb-proxy?

  • Không chỉnh sửa các tập tin ở phía khách hàng.
  • Sử dụng zeroconf để khách hàng là "zero config"
  • Sử dụng một giải pháp proxy vững chắc hiện có thay vì viết một công cụ mới.
  • Dễ dàng thiết lập cho một quản trị viên Linux điển hình.

Cấu hình máy chủ

Trên máy bạn muốn hoạt động như một máy chủ cài đặt công cụ với:

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

Bây giờ bắt đầu các bit dịch vụ:

 sudo start squid-deb-proxy

Và các bit avahi (Bạn không cần điều này nếu bạn ở trên 12.04+):

 sudo start squid-deb-proxy-avahi

Điều này sẽ cài đặt máy chủ proxy (nghe theo cổng 8000 theo mặc định) và các công cụ avahi cần thiết cho máy chủ để quảng cáo trên mạng của bạn thông qua zeroconf.

Cấu hình máy khách

Trên mỗi máy tính mà bạn muốn sử dụng bộ đệm (máy khách và chính máy chủ để nó cũng có thể sử dụng bộ đệm), bạn cần cài đặt công cụ phía máy khách để tự động tìm máy chủ, hãy nhấp vào đây :

Cài đặt qua trung tâm phần mềm

hoặc thông qua dòng lệnh:

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

Tùy chọn : Để đạt hiệu quả tối đa, bạn nên đặt một máy tự động tải xuống các bản cập nhật, để khi các máy khác của bạn cần, nó đã có trong bộ đệm. Bạn có thể thực hiện việc này bằng cách đi tới Hệ thống-> Quản trị-> Trình quản lý cập nhật, sau đó nhấp vào nút "Cài đặt ...", trong tab Cập nhật, đặt nó để tự động tải xuống tất cả các bản cập nhật.

văn bản thay thế

Bộ nhớ đệm của bên thứ 3

Theo mặc định, bộ đệm được thiết lập để chỉ lưu trữ bộ nhớ cache chính thức của Ubuntu. Để thêm nhiều hơn, bạn cần thêm chúng vào danh sách các nguồn tại /etc/squid-deb-proxy/mirror-dstdomain.acl. Đây là nơi bạn có thể thêm ppa.launchpad.net hoặc các dịch vụ khác mà bạn có thể sử dụng. Sau khi thực hiện các thay đổi cho tệp này, bạn phải chạy sudo restart squid-deb-proxyđể các thay đổi có hiệu lực.

Cấu hình thủ công

Nếu vì lý do nào đó bạn không muốn sử dụng zeroconf (vì lý do mạng hoặc bất cứ điều gì), bạn có thể tự đặt khách hàng sử dụng proxy bằng cách chỉnh sửa /etc/apt/apt.confvà thêm đoạn thơ sau, (thay thế 0.0.0.0 bằng địa chỉ IP của máy chủ ):

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

Bức tường lửa

Trong trường hợp bạn đang sử dụng tường lửa, avahi sử dụng 5353 qua địa chỉ 224.0.0.0/4 và yêu cầu một quy tắc giống như sau:

# 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

Tiếp theo, bạn cần mở cổng TCP 8000 để liên lạc thực tế thông qua proxy. Một cái gì đó ít nhiều như thế này:

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

Những quy tắc này chỉ để giúp bạn. Họ có thể sẽ không khớp với thiết lập của bạn với một. (tức là giao diện sai, địa chỉ IP mạng riêng sai, v.v.)

Xác nhận nó hoạt động

Đầu tiên, theo dõi nhật ký trên máy chủ để bạn có thể xem nó: tail -F /var/log/squid-deb-proxy/access.logvà sau đó chạy bản cập nhật trên bất kỳ máy nào đã cài đặt máy khách; Nhật ký sẽ bắt đầu cuộn với các mục như thế này:

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

Điều đó có nghĩa là các máy khách nhìn thấy bộ đệm nhưng thiếu nó, điều này được mong đợi vì nó chưa được lưu vào bộ nhớ cache. Mỗi lần chạy tiếp theo sẽ hiển thị dưới dạng TCP_HIT. Bạn có thể tìm thấy các tập tin bộ nhớ cache mực /var/cache/squid-deb-proxy.

Sử dụng nó

Từ đó trở đi, tất cả các máy trên mạng của bạn sẽ kiểm tra bộ đệm trước khi nhấn mạng bên ngoài để tìm nạp các gói. Nếu có sẵn các gói mới thì máy đầu tiên sẽ tải xuống từ mạng, sau đó các yêu cầu tiếp theo cho gói đó sẽ đến từ máy chủ cho khách hàng.

LÀM

Chúng tôi vẫn cần kích hoạt apt để chỉ sử dụng bộ đệm được quảng cáo trên mạng và theo mặc định, do đó bạn không cần phải cài đặt phần máy khách. Chúng tôi cũng cần sửa lỗi mà 403 của deb không có trong danh sách nhân bản.


2014/01/21 14: 56: 31 | LRI: / var / cache / squid-deb-proxy / 03: (2) Không có tệp hoặc thư mục nào như vậy FATAL: Không thể xác minh một trong các thư mục trao đổi, Kiểm tra cache.log để biết chi tiết. Chạy 'squid -z' để tạo thư mục trao đổi nếu cần hoặc nếu chạy Squid lần đầu tiên. Squid Cache (Phiên bản 3.3.8): Chấm dứt bất thường.
nhảy

1
Bạn cũng cần cài đặt mực.
nhảy

Có vẻ như Cấu hình thủ công không còn hợp lệ nữa. Không có apt.conftập tin dưới /etc/apt. Tuy nhiên, có rất nhiều tệp có cài đặt bên dưới /etc/apt/apt.conf.d. Tôi sẽ tưởng tượng rằng bây giờ chúng ta nên tạo một tập tin ở đó?
Alexis Wilke

Ngoài ra, có vẻ như TODO đã được giải quyết. Đó là, tôi không phải làm gì cả và bộ đệm được sử dụng trước tiên. Mặc dù lỗi không có vẻ như đã được đánh dấu là đã được sửa.
Alexis Wilke

Chắc chắn, nếu apt.conf.d là cách nó được thực hiện ngay bây giờ, vui lòng gửi một chỉnh sửa cho câu trả lời này, chúc mừng!
Jorge Castro

37

apt-cacher-nglà câu trả lời cho tôi - Tôi chưa gặp phải bất kỳ vấn đề nào trong môi trường nhỏ (khoảng 20 khách hàng), vì vậy tôi cho rằng các vấn đề @MagicFab đã được giải quyết trong phiên bản hiện tại (được cài đặt trên Ubuntu 10.04 và 10.10). Không có cấu hình cần thiết cho máy chủ và bạn chỉ cần hướng dẫn khách hàng của mình sử dụng máy chủ làm proxy quản lý gói của họ.

Máy chủ được cài đặt và cấu hình hoàn toàn bằng cách cài đặt apt-cacher-nggói.

Các máy khách cần được cấu hình bằng cách thiết lập proxy APT - bằng cách thêm tệp /etc/apt/apt.conf.d/01proxy, chứa tệp này (trong đó "your-apt-server" là tên hoặc địa chỉ IP của máy chủ của bạn):

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

Xong - bây giờ các gói sẽ được lưu trữ bởi máy chủ, bất kể bạn sử dụng nguồn nào hoặc phiên bản hệ thống nào (ví dụ: máy chủ 10.04 có thể được sử dụng bởi các máy khách 9.10,10.04 và 11.04 mà không gặp sự cố hoặc xung đột).


Nếu bạn có (các) máy tính xách tay khách di chuyển giữa các mạng, việc này phức tạp hơn một chút - Tôi đã tạo một tập lệnh đặt proxy đúng tùy theo địa chỉ mạng; kịch bản có thể thực thi được và trong /etc/network/if-up.d/apt-proxy. Khi nhận được địa chỉ IPv4 từ máy chủ DHCP, tập lệnh sẽ đặt đúng máy chủ apt-cacher cho mạng tương ứng:

#!/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 cũng hỗ trợ IPv6 (Tôi nhớ một số giải pháp khác không có).
Azendale

11
Một năm sau, tôi đã đi đến squid-deb-proxysquid-deb-proxy-client: zeroconf thực sự có nghĩa là cấu hình không trên máy khách, điều này cực kỳ hữu ích cho người dùng du mục - và trong trường hợp máy chủ không phản hồi, máy khách mặc định tải xuống trực tiếp.
Piskvor

apt-cacher-ng hút, đó là lỗi rất lớn, treo trên các gói tải xuống. ví dụ tôi thấy nó đã tải xuống 150 MB chỉ với gói 30 MB
pylover

apt-cacher-ng hoạt động hoàn hảo. Bạn có một cái gì đó rất sai với hệ thống CỦA BẠN. Trên chính xác mực-deb-proxy muốn cài đặt Mực. Nhấn mạnh vào nó.
Ken Sharp

Bây giờ đó là giải pháp tốt nhất để có một bộ đệm làm việc với pbuilder. Điều này làm việc ra khỏi hộp. Ngoài ra, có vẻ như có hỗ trợ cho zeroconf(năm 2016), nhưng tôi chưa thể (chưa) làm cho nó hoạt động được.
Alexis Wilke


6

Tôi rất thích thiết lập một máy nhân bản địa phương bằng cách sử dụng debmirrortiện ích.

Dưới đây là một câu thần chú ví dụ.

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

Tôi chạy nó khoảng một lần một tuần và sử dụng nó làm cơ sở để thiết lập một hoặc nhiều "bản vá". Ví dụ...

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

Điều này tạo ra một bản sao được liên kết của cây (sử dụng không gian đĩa gần như bằng không) mà tôi có thể trỏ từng máy chủ cục bộ của mình vào apt nguồn.list


5
Bạn nên kiểm tra ubumirror, đây là gói tiện lợi trong kho lưu trữ có tất cả những gì đã được thiết lập cho bạn. Đó là những gì các gương chính thức sử dụng.
Jorge Castro

2

Trong các mạng nhỏ (như nhà / văn phòng nhỏ), tôi đã sử dụng apt-cacher-ng với kết quả tốt. Tôi chưa kiểm tra các phiên bản mới nhất, nhưng tôi biết nó cần thiết lập cẩn thận cho cả máy chủ và máy khách và nó phù hợp nhất cho các máy khách sẽ chỉ nhận được cập nhật từ mạng cục bộ của bạn.

Tôi đã thử các giải pháp mực dựa trên trên nhưng nó cần áp dụng một vài cách giải quyết và cấu hình máy khách nhiều hơn tôi muốn, vì vậy nó không cảm thấy chưa như nó có thể thay thế apt-cacher-ng trong các thiết lập nhỏ.


1

apt-cacher không phải là dễ nhất để thiết lập và nó sẽ không tồn tại một bản nâng cấp xa.

Cài đặt squid-deb-proxytrên máy chủ, squid-deb-proxy-clienttrên máy khách. Nó sử dụng zeroconf Avahi, vì vậy không cần cấu hình.

Nếu bạn đang tìm kiếm bộ nhớ cache nhiều hơn chỉ là các cuộc tranh luận, tôi sẽ không bận tâm với Squid. Máy chủ lưu lượng truy cập Apache là điều lớn tiếp theo. http://trafficserver.readthedocs.org


squid-deb-proxy nhấn mạnh vào việc cài đặt mực. Và apt-cacher đã chết từ lâu, apt-cacher-ng chính là nơi nó tồn tại.
Ken Sharp
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.