Обновление операционной системы очень важный процесс. Автоматизация этого процесса позволяет поддерживать все компоненты в актуальном состоянии, вовремя закрывать уязвимости и вносить исправления, повышающие стабильность и производительность работы операционной системы.
В экосистеме Windows существует Windows Server Update Services (WSUS) его основная задача - хранение и предоставление доступа к обновлениям операционных систем Windows.
В Astra Linux нет отдельного сервера для обновления ПК и серверов в ЛВС. Да, можно сделать полный клон репозитория Astra Linux, но это неэффективно, приводит к хранению большого количества ненужных данных. Некоторые репозитории занимают на диске более 30 Гб, так что с загрузкой могут возникнуть проблемы.
К тому же, в последнее время, некоторые проекты с открытым исходным кодом начали блокировать доступ к репозиториям и сайтам проектов с Российских и Белорусских IP-адресов. В предыдущих статьях мы рассматривали способы обхода этих блокировок, но поднимать OpenVPN на каждом ПК не удобно, к тому же скорость загрузки, как правило, оставляет желать лучшего.
Исходя из проблем, возникающих из вышеперечисленного, я решил начать новый проект - Сервер обновлений Astra Linux - Astra Update Server (AUS).
Сегодня мы сделаем первый шаг к созданию AUS - рассмотрим установку локального кэширующего apt-сервера с помощью Apt-Cacher-NG, таким образом все устанавливаемые пакеты будут доступны локально для повторного использования!
Как это работает?
В ЛВС устанавливается кэширующий apt-сервер. На клиентах, в настройках apt, мы устанавливаем данный сервер в качестве прокси-сервера.

На данной диаграмме представлена структура и способ подключения сервера Apt-Cacher-AG.
В состав сервера входят:
- web-сервер;
- Прокси-сервер;
- Локальное apt-хранилище.
Каждый раз, когда любой из ПК или сервер в ЛВС, запрашивает deb-пакет, файл сохраняется на сервере и передается клиенту.
В следующий раз, когда другой ПК запросит такой же файл, он будет отдан уже из локального кэша.
Так же Apt-Cacher-AG может работать в режиме прозрачного прокси, перенаправляя запросы на вышестоящий сервер.
Таким образом при использовании Apt-Cacher-AG:
- Снижается нагрузка на интернет канал;
- Увеличивается скорость загрузки;
- Уменьшается общее время установки обновлений;
- Снижается нагрузка на ЛВС.
Установка
Установим требуемые пакеты:
sudo apt update
sudo apt install build-essential cmake libzip-dev libbz2-dev liblzma-dev libssl-dev pkg-config libfuse-dev zlib1g-dev libboost-dev libwrap0-dev git libwrap0 curl wget gnupg
Загрузим исходный код проекта:
cd ~
git clone https://github.com/sevikkk/apt-cacher-ng.git
Сменим папку:
cd apt-cacher-ng
Запустим сборку проекта
make
Дождемся окончания сборки:
make[3]: выход из каталога «/root/apt-cacher-ng/build»
[100%] Built target acngfs
make[2]: выход из каталога «/root/apt-cacher-ng/build»
make[1]: выход из каталога «/root/apt-cacher-ng/build»
Скопируем файлы:
sudo cp build/apt-cacher-ng /usr/local/bin
sudo cp build/in.acng /usr/local/bin
sudo mkdir /etc/apt-cacher-ng
sudo cp conf/* /etc/apt-cacher-ng
sudo mkdir /usr/share/doc/apt-cacher-ng
sudo cp doc/* /usr/share/doc/apt-cacher-ng -r
Создадим пользователя:
sudo adduser \
--system \
--shell /bin/bash \
--gecos 'apt-cacher-ng' \
--group \
--disabled-password \
--home /home/apt-cacher-ng \
apt-cacher-ng
Создадим папки для хранения пакетов и логов:
sudo mkdir /var/cache/apt-cacher-ng
sudo mkdir /var/log/apt-cacher-ng
sudo chown -R apt-cacher-ng:apt-cacher-ng /var/cache/apt-cacher-ng
sudo chmod -R 750 /var/cache/apt-cacher-ng
sudo chown -R apt-cacher-ng:apt-cacher-ng /var/log/apt-cacher-ng
sudo chmod -R 750 /var/log/apt-cacher-ng
Откроем файл конфигурации:
sudo mcedit /etc/apt-cacher-ng/acng.conf
Заменим содержимое на:
CacheDir: /var/cache/apt-cacher-ng
LogDir: /var/log/apt-cacher-ng
#ForceManaged: 1
Port:3142
BindAddress: 0.0.0.0
Remap-astra: file:astra_mirrors; file:backends_astra
Remap-debrep: file:debian_mirror; file:backends_debian
UserAgent: Debian APT-HTTP/1.3 (1.6.10)
ReportPage: acng-report.html
VerboseLog: 4
UnbufferLogs: 1
LogSubmittedOrigin: 1
ExTreshold: 360
Debug:5
LocalDirs: acng-doc /usr/share/doc/apt-cacher-ng
Настроим репозитории, заменим содержимое файлов и создадим новые:
echo https://mirror.yandex.ru/debian/ | sudo tee /etc/apt-cacher-ng/backends_debian
echo http://mirror.yandex.ru/debian/ | sudo tee /etc/apt-cacher-ng/debian_mirrors
echo https://mirror.yandex.ru/astra/stable/orel/repository/ | sudo tee /etc/apt-cacher-ng/astra_mirrors
echo https://download.astralinux.ru/astra/stable/orel/repository/ | sudo tee -a /etc/apt-cacher-ng/astra_mirrors
Настроим сервис для запуска сервера. Создадим файл:
sudo mcedit /etc/systemd/system/apt-cacher-ng.service
С содержимым:
[Unit]
Description=Apt-Cacher NG software download proxy
After=local-fs.target
After=network.target
[Service]
ExecStart=/usr/local/bin/apt-cacher-ng -c /etc/apt-cacher-ng ForeGround=1
User=apt-cacher-ng
Group=apt-cacher-ng
[Install]
WantedBy=multi-user.target
Включим и запустим службу:
sudo systemctl enable apt-cacher-ng
sudo systemctl start apt-cacher-ng
Проверим статус:
sudo systemctl status apt-cacher-ng
● apt-cacher-ng.service - Apt-Cacher NG software download proxy
Loaded: loaded (/etc/systemd/system/apt-cacher-ng.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-04-21 18:59:11 +11; 43min ago
Main PID: 17016 (apt-cacher-ng)
Tasks: 3 (limit: 9830)
CGroup: /system.slice/apt-cacher-ng.service
└─17016 /usr/local/bin/apt-cacher-ng -c /etc/apt-cacher-ng Foreground=1
апр 21 19:59:11 astra-seerver1 systemd[1]: Started Apt-Cacher NG software download proxy.
апр 21 19:59:11 astra-seerver1 apt-cacher-ng[17016]: Warning: configured to use libwrap filters but feature is not built-in.
Всё в порядке, можно настраивать apt на клиентских ПК и серверах.
Настройка клиентов
На клиентском Пк или сервере создадим файл:
echo 'Acquire::http { Proxy "http://192.168.0.20:3142"; };' | sudo tee /etc/apt/apt.conf.d/00proxy
Где 192.168.0.20 ip-адрес нашего сервера Apt-Cacher-NG
Изменим список базовый список репозиториев:
sudo echo deb http://mirror.yandex.ru/astra/stable/orel/repository orel main contrib non-free | sudo tee /etc/apt/sources.list
Запустим:
sudo apt update
Пол:1 http://mirror.yandex.ru/astra/stable/orel/repository orel InRelease [13,2 kB]
Пол:2 http://mirror.yandex.ru/astra/stable/orel/repository orel/main i386 Packages [392 kB]
Пол:3 http://mirror.yandex.ru/astra/stable/orel/repository orel/main amd64 Packages [3 980 kB]
Пол:4 http://mirror.yandex.ru/astra/stable/orel/repository orel/contrib amd64 Packages [4 456 B]
Пол:5 http://mirror.yandex.ru/astra/stable/orel/repository orel/contrib i386 Packages [1 174 B]
Пол:6 http://mirror.yandex.ru/astra/stable/orel/repository orel/non-free amd64 Packages [79,7 kB]
Пол:7 http://mirror.yandex.ru/astra/stable/orel/repository orel/non-free i386 Packages [4 276 B]
Получено 4 475 kБ за 3с (1 181 kБ/c)
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Может быть обновлён 1 пакет. Запустите «apt list --upgradable» для показа.
Обратите внимание, мы используем протокол http, это обязательное условие, при котором прокси сервер будет корректно работать!
Установим библиотеку, которой точно нет у нас сервере:
sudo apt install libtiff-dev
Обратите внимание, apt может "зависнуть" на некоторое время с надписью "Ожидание заголовков", это нормально!
Перейдем на сервер и откроем папку:
sudo ls /var/cache/apt-cacher-ng
mirror.yandex.ru
В ней прокси создал папки для хранения репозиториев. По умолчанию мы используем зеркало Яндекса, для ускорения загрузки.
Проверим папку:
sudo ls /var/cache/apt-cacher-ng/mirror.yandex.ru/astra/stable/orel/repository/pool/main/t/tiff
libtiff5_4.0.8-2+deb9u6_amd64.deb libtiff5-dev_4.0.8-2+deb9u6_amd64.deb libtiffxx5_4.0.8-2+deb9u6_amd64.deb
libtiff5_4.0.8-2+deb9u6_amd64.deb.head libtiff5-dev_4.0.8-2+deb9u6_amd64.deb.head libtiffxx5_4.0.8-2+deb9u6_amd64.deb.head
В ней находятся несколько загруженных файлов. В следующий раз, когда мы будем устанавливать эти пакеты на другой ПК или сервер наш прокси использует их и не будет ничего загружать из сети Интернет.
Заключение
Сегодня мы рассмотрели установку локального кэширующего apt - Apt-Cacher-NG.
Установили требуемые пакеты.
Загрузили исходный код прокси и собрали его из исходного кода.
Скопировали и создали все необходимые папки и файлы.
Запустили прокси сервер и настроили клиентский ПК на получение обновлений.
Проверили загрузку и установку через наш прокси.
В следующей части мы рассмотрим подключение стороннего репозитория на примере node.js.