Очень часто некоторые внутренние корпоративные сервера, особенно на виртуальных машинах, по тем или иным субъективным причинам не имеют выхода в Интернет. По крайней мере у меня в практике такое встречается очень часто.
Но обновления системы проводить нужно. Сразу же напрашивается выход — хранить сервер обновления локально, на одной из машин имеющих доступ к интернету. То-есть использовать apt-mirror.
Существенный недостаток этого подхода — 80% (если не больше!!!) репозитория я не использую и использовать никогда не буду. Ни на одном из моих серверов.
Самый разумный выход использовать сервис apt-cacher-ng. Когда пользователь клиентской машины инициирует обновление или установку какого либо программного обеспечения, его машина подключается к локальному серверу обновлений и запрашивает необходимые пакеты.
Сервер обновлений проверяет, есть ли его последние версии запрошенных пакетов в локальном кэше. Если есть, то пакеты отправляются пользователю. В противном случае apt-cacher-ng скачивает обновлённые версии запрошенных пакетов, а затем отправляет их пользователю. Новые версии остаются в кэше для дальнейшего использования.
Серверная часть
apt-cacher-ng устанавливается из репозитория Ubuntu:.
user$ sudo apt-get install apt-cacher-ng
При желании можно немного подправить конфигурационный файл /etc/apt-cacher-ng/acng.conf:
$ sudo nano /etc/apt-cacher-ng/acng.conf
Обычно меняются только три этих параметра
... CacheDir: /var/cache/apt-cacher-ng #Директория где будет хранится кэш LogDir: /var/log/apt-cacher-ng #Путь лога, если пути нет, лог записываться не будет Port: 3142 #TCP (http) Порт который использует сервис ...
apt-cacher-ng не создает никаких баз и структур, ничего не сжимает, а хранит все в том виде как в оригинале репозитория. CacheDir нужно указывать с учетом того, что в самом безумном случае на сервере обновлений окажется репозиторий целиком. А это около 40GB.
После изменения конфигурации необходимо перезапустить сервис:
user$ service apt-cacher-ng restart
Настройка клиентов
На всех клиентах для использования локального сервера обновлений необходимо только создать один файл —
/etc/apt/apt.conf.d/01proxy
с одной строчкой:
$ sudo sh -c "echo "Acquire::http { Proxy "http://server:3142"; }; "> /etc/apt/apt.conf.d/01proxy"
server — естественно нужно заменить на имя или IP- адрес сервера обновлений. Можно приступать к обновлению.
$ sudo apt-get update $ sudo apt-get upgrade
Результат использования сервера можно посмотреть через браузер, по адресу http://server:3142/acng-report.html