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

В экосистеме 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.drawio.png

На данной диаграмме представлена структура и способ подключения сервера Apt-Cacher-AG.

В состав сервера входят:

  • web-сервер;
  • Прокси-сервер;
  • Локальное apt-хранилище.

Каждый раз, когда любой из ПК или сервер в ЛВС, запрашивает deb-пакет, файл сохраняется на сервере и передается клиенту.

В следующий раз, когда другой ПК запросит такой же файл, он будет отдан уже из локального кэша.

Так же Apt-Cacher-AG может работать в режиме прозрачного прокси, перенаправляя запросы на вышестоящий сервер.

Таким образом при использовании Apt-Cacher-AG:

  1. Снижается нагрузка на интернет канал;
  2. Увеличивается скорость загрузки;
  3. Уменьшается общее время установки обновлений;
  4. Снижается нагрузка на ЛВС.

Установка

Установим требуемые пакеты: 

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.