У меня есть несколько компьютеров Ubuntu дома и довольно медленное подключение к Интернету, и иногда несколько компьютеров необходимо обновлять сразу (особенно во время новых выпусков Ubuntu.)
Есть ли способ, когда только один из мои машины должны загружать пакеты, а другие машины могут использовать первую машину для получения debs? Включает ли это создание собственного локального зеркала? Или прокси-сервер? Или это можно сделать проще?
apt-cacher-ng является ответом для меня - я не сталкивался с проблемами в небольших средах (около 20 клиентов), поэтому я предполагаю, что проблемы @MagicFab были решены в текущей версии (установленной на Ubuntu 10.04 и 10.10) , Для сервера нет необходимости в настройке, и вам нужно только указать своим клиентам использовать сервер в качестве прокси-сервера диспетчера пакетов.
Сервер полностью установлен и настроен установкой пакета apt-cacher-ng. [ ! d3]
Клиенты должны быть настроены путем настройки прокси-сервера APT - добавив файл /etc/apt/apt.conf.d/01proxy, содержащий это (где «ваш-apt-сервер» - это имя или 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
Я провел некоторое исследование в виде множества решений, а некоторые разработчики Ubuntu разработали конфигурацию прокси (на основе Squid) для 10.04 и более поздних версий. Это называется squid-deb-proxy
. Это требует только того, чтобы машина работала как сервер.
На компьютере, который вы хотите использовать в качестве сервера, установите инструмент с помощью:
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, затем нажмите кнопку «Настройки ...», на вкладке «Обновление» она автоматически загрузит все обновления.
[/g12]
По умолчанию кеш настроен только для кэширования официальных репозиториев Ubuntu. Чтобы добавить больше, вам нужно добавить их в список источников в /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 использует 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 в /var/cache/squid-deb-proxy
.
С этого момента все компьютеры в вашей сети будут проверять кеш перед удалением внешней сети для извлечения пакетов , Если есть новые пакеты, то первая машина загрузит их из сети, после чего последующие запросы на этот пакет поступят с сервера на клиентов.
Нам все равно нужно включить apt, чтобы просто использовать рекламируемый кеш в сети из коробки и по умолчанию, поэтому вам не нужно устанавливать часть клиента. Нам также нужно исправить ошибку , что deb3 deb не находится в списке зеркал.
apt-cacher не был самым легким в настройке, и он не переживет dist-upgrade.
Установите squid-deb-proxy на сервере, squid-deb-proxy-client на клиентах. Он использует zeroconf Avahi, поэтому никакой конфигурации не требуется.
Если вы хотите кэшировать больше, чем просто debs, я бы не стал беспокоиться с Squid. Apache Traffic Server - следующая большая вещь. http://trafficserver.readthedocs.org
Я предпочитаю настраивать локальное зеркало с помощью утилиты 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
Это создает связанную копию дерева (использует почти нулевое дисковое пространство), и я могу указать каждый из моих локальных серверов в apt sources.list
В небольших сетях (таких как домашний / малый офис) я использовал apt-cacher-ng с хорошими результатами. Я не проверял последние версии, но я знаю, что он нуждается в тщательной настройке как сервера, так и клиентов, и он лучше всего подходит для клиентов, которые будут получать обновления только из вашей локальной сети.
Я попробовал squid- но для этого требовалось применение нескольких методов обработки и настройки клиента, чем я хотел бы, поэтому он не чувствует, что он может заменить apt-cacher-ng в небольших настройках.
Одним из самых простых решений является установка apt-proxy.
Читайте здесь документацию ubuntu: https://help.ubuntu.com/community/AptProxy
apt-cacher не был самым легким в настройке, и он не переживет dist-upgrade.
Установите squid-deb-proxy на сервере, squid-deb-proxy-client на клиентах. Он использует zeroconf Avahi, поэтому никакой конфигурации не требуется.
Если вы хотите кэшировать больше, чем просто debs, я бы не стал беспокоиться с Squid. Apache Traffic Server - следующая большая вещь. http://trafficserver.readthedocs.org
apt-cacher-ng является ответом для меня - я не сталкивался с проблемами в небольших средах (около 20 клиентов), поэтому я предполагаю, что проблемы @MagicFab были решены в текущей версии (установленной на Ubuntu 10.04 и 10.10) , Для сервера нет необходимости в настройке, и вам нужно только указать своим клиентам использовать сервер в качестве прокси-сервера диспетчера пакетов.
Сервер полностью установлен и настроен установкой пакета apt-cacher-ng. [ ! d3]
Клиенты должны быть настроены путем настройки прокси-сервера APT - добавив файл /etc/apt/apt.conf.d/01proxy, содержащий это (где «ваш-apt-сервер» - это имя или 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
я предпочитаю настраивать локальную зеркало с помощью 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.список
В небольших сетях (таких как домашний / малый офис) я использовал apt-cacher-ng с хорошими результатами. Я не проверял последние версии, но я знаю, что он нуждается в тщательной настройке как сервера, так и клиентов, и он лучше всего подходит для клиентов, которые будут получать обновления только из вашей локальной сети.
Я попробовал squid- но для этого требовалось применение нескольких методов обработки и настройки клиента, чем я хотел бы, поэтому он не чувствует, что он может заменить apt-cacher-ng в небольших настройках.
Одним из самых простых решений является установка apt-proxy.
Читайте здесь документацию ubuntu: https://help.ubuntu.com/community/AptProxy