Как создать сервер репозитория в ubuntu 16.04 [duplicate]

У меня есть несколько компьютеров Ubuntu дома и довольно медленное подключение к Интернету, и иногда несколько компьютеров необходимо обновлять сразу (особенно во время новых выпусков Ubuntu.)

Есть ли способ, когда только один из мои машины должны загружать пакеты, а другие машины могут использовать первую машину для получения debs? Включает ли это создание собственного локального зеркала? Или прокси-сервер? Или это можно сделать проще?

147
задан 10 March 2014 в 22:39

11 ответов

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
126
ответ дан 18 July 2018 в 01:41

Я провел некоторое исследование в виде множества решений, а некоторые разработчики Ubuntu разработали конфигурацию прокси (на основе Squid) для 10.04 и более поздних версий. Это называется squid-deb-proxy. Это требует только того, чтобы машина работала как сервер.

Почему squid-deb-proxy?

  • Нет редактирования файлов на клиенте, а для большинства людей достаточно зеркального отображения. сторона [. g13]
  • Используйте zeroconf, чтобы клиенты были «zero config»
  • Используйте существующее твердое прокси-решение вместо написания нового инструмента.
  • Легко установить

Конфигурация сервера

На компьютере, который вы хотите использовать в качестве сервера, установите инструмент с помощью:

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, затем нажмите кнопку «Настройки ...», на вкладке «Обновление» она автоматически загрузит все обновления.

alt text [/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.

Использование [

С этого момента все компьютеры в вашей сети будут проверять кеш перед удалением внешней сети для извлечения пакетов , Если есть новые пакеты, то первая машина загрузит их из сети, после чего последующие запросы на этот пакет поступят с сервера на клиентов.

TODO

Нам все равно нужно включить apt, чтобы просто использовать рекламируемый кеш в сети из коробки и по умолчанию, поэтому вам не нужно устанавливать часть клиента. Нам также нужно исправить ошибку , что deb3 deb не находится в списке зеркал.

126
ответ дан 14 August 2018 в 18:22

apt-cacher не был самым легким в настройке, и он не переживет dist-upgrade.

Установите squid-deb-proxy на сервере, squid-deb-proxy-client на клиентах. Он использует zeroconf Avahi, поэтому никакой конфигурации не требуется.

Если вы хотите кэшировать больше, чем просто debs, я бы не стал беспокоиться с Squid. Apache Traffic Server - следующая большая вещь. http://trafficserver.readthedocs.org

1
ответ дан 18 July 2018 в 01:41

Я предпочитаю настраивать локальное зеркало с помощью утилиты 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

6
ответ дан 18 July 2018 в 01:41

В небольших сетях (таких как домашний / малый офис) я использовал apt-cacher-ng с хорошими результатами. Я не проверял последние версии, но я знаю, что он нуждается в тщательной настройке как сервера, так и клиентов, и он лучше всего подходит для клиентов, которые будут получать обновления только из вашей локальной сети.

Я попробовал squid- но для этого требовалось применение нескольких методов обработки и настройки клиента, чем я хотел бы, поэтому он не чувствует, что он может заменить apt-cacher-ng в небольших настройках.

2
ответ дан 18 July 2018 в 01:41

Одним из самых простых решений является установка apt-proxy.

Читайте здесь документацию ubuntu: https://help.ubuntu.com/community/AptProxy

6
ответ дан 18 July 2018 в 01:41

apt-cacher не был самым легким в настройке, и он не переживет dist-upgrade.

Установите squid-deb-proxy на сервере, squid-deb-proxy-client на клиентах. Он использует zeroconf Avahi, поэтому никакой конфигурации не требуется.

Если вы хотите кэшировать больше, чем просто debs, я бы не стал беспокоиться с Squid. Apache Traffic Server - следующая большая вещь. http://trafficserver.readthedocs.org

1
ответ дан 24 July 2018 в 17:26
  • 1
    squid-deb-proxy настаивает на установке кальмара. И apt-cacher давно мертв, apt-cacher-ng, где он находится. – Ken Sharp 20 November 2015 в 23:16

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
37
ответ дан 24 July 2018 в 17:26
  • 1
    apt-cacher-ng также поддерживает IPv6 (я помню, что некоторые другие решения не выполнялись). – Azendale 22 June 2011 в 18:34
  • 2
    Через год я перешел к squid-deb-proxy и squid-deb-proxy-client: zeroconf действительно означает нулевую конфигурацию на клиентах, что чрезвычайно полезно для кочевых пользователей - и в случае, если сервер не отвечает, клиенту по умолчанию предоставляется прямая загрузка , – Piskvor 21 May 2012 в 14:22
  • 3
    2014/01/21 14: 56: 31 | ОШИБКА: / var / cache / squid-deb-proxy / 03: (2) Отсутствует такой файл или каталог FATAL: Не удалось проверить один из каталогов подкачки, проверьте кеш-лист. Запустите squid -z для создания каталогов подкачки, если это необходимо, или если запущен Squid в первый раз. Squid Cache (версия 3.3.8): завершено ненормально. – thumper 21 January 2014 в 08:05
  • 4
    Вам также нужно установить кальмара. – thumper 21 January 2014 в 08:11
  • 5
    apt-cacher-ng сосет, это ужасно багги, зависает при загрузке пакетов. например, я видел, что он загрузил 150 МБ только для 30 МБ пакета – pylover 3 September 2015 в 01:46
  • 6
    apt-cacher-ng отлично работает. У вас что-то очень плохое в вашей системе. На Precise squid-deb-proxy хочет установить Squid. Настаивает на этом. – Ken Sharp 20 November 2015 в 23:00
  • 7
    Похоже, что Manual Config больше недействительна. Файл apt.conf отсутствует в /etc/apt. Однако в разделе /etc/apt/apt.conf.d имеется множество файлов с настройками. Я бы предположил, что теперь мы должны создать файл там? – Alexis Wilke 24 July 2016 в 21:06
  • 8
    Кроме того, похоже, что TODO был разрешен. То есть мне не нужно было ничего делать, и сначала использовался кеш. Хотя ошибка не похожа на то, что она была отмечена как исправленная. – Alexis Wilke 24 July 2016 в 21:14
  • 9
    Конечно, если apt.conf.d - вот как это делается сейчас, пожалуйста, отправьте отредактировать этот ответ, ура! – Jorge Castro 24 July 2016 в 21:36
  • 10
    Теперь это лучшее решение для работы кэша с pbuilder. Это сработало из коробки. Также похоже, что есть поддержка zeroconf (в 2016 году), но я не мог (пока) получить это для работы на моем конце. – Alexis Wilke 25 July 2016 в 00:46

я предпочитаю настраивать локальную зеркало с помощью 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.список

6
ответ дан 24 July 2018 в 17:26
  • 1
    Вы должны проверить ubumirror, это удобный пакет в архиве, в котором есть все, что уже настроено для вас. Это то, что используют официальные зеркала. – Jorge Castro 8 September 2010 в 22:39

В небольших сетях (таких как домашний / малый офис) я использовал apt-cacher-ng с хорошими результатами. Я не проверял последние версии, но я знаю, что он нуждается в тщательной настройке как сервера, так и клиентов, и он лучше всего подходит для клиентов, которые будут получать обновления только из вашей локальной сети.

Я попробовал squid- но для этого требовалось применение нескольких методов обработки и настройки клиента, чем я хотел бы, поэтому он не чувствует, что он может заменить apt-cacher-ng в небольших настройках.

2
ответ дан 24 July 2018 в 17:26

Одним из самых простых решений является установка apt-proxy.

Читайте здесь документацию ubuntu: https://help.ubuntu.com/community/AptProxy

6
ответ дан 24 July 2018 в 17:26

Другие вопросы по тегам:

Похожие вопросы: