Пост канала
- фото
Я не так давно рассказывал, как периодически возникают проблемы с различными репозиториями для ОС. В связи с этим я все репы настроил на mirror.yandex.ru. С ним на тот момент никаких проблем не было. Плюс, помимо базовых репозиториев ОС, там ещё куча всяких заблокированных реп, типа Grafana, Elastic и т.д. В целом было удобно и стабильно. Но после всех известных событий стабильности стало меньше. В целом, зеркало работало. Я не перенастраивал на что-то другое. Но заметил, что если разом обновлять пачку серверов (примерно 10-15), то на некоторых можно увидеть ошибки, типа такой: E: Failed to fetch https://mirror.yandex.ru/debian-security/pool/updates/main/b/bind9/bind9-dnsutils_9.20.30-1%7edeb13u1_amd64.deb 404 Not Found [IP: 213.180.204.183 443] Повторный запуск проходит успешно. Не знаю, с чем это связано. Может не с одновременным обновлением, а с тем, что на каких-то серверах нет всех пакетов. У меня нет больших инфраструктур (50+ VM). Плюс, я не обновляю разом прям сразу всё, обычно группами. Мне это некритично, но всё равно эти ошибки напрягают, отвлекая на себя внимание. Да и в целом не очень разумно на каждый сервер качать пакеты, хотя современные скорости интернета позволяют не обращать на это внимание. Дополнительно возникла ещё одна проблема с обновлением Vector из его репы apt.vector.dev. Там одно время была очень низкая скорость, а теперь вообще без прокси или впн ничего не качает. Зеркало для него на mirror.yandex.ru не нашёл. Свою копию репы поднимать не хочется. Там нужен всего один пакет. Решил разом все эти вопросы поднятием своего кэширующего прокси для пакетного менеджера. Не стал ничего придумывать, а взял стандартный apt-cacher-ng из базового репозитория Debian. Для стандартных дебиановских реп, к которым обращаются по HTTP, ничего на самом сервере с apt-cacher-ng настраивать не надо. Всё заведётся с дефолтной конфигурацией. А вот с другими репозиториями, типа Docker, Elastic и т.д., которые работают по HTTPS, есть нюансы и различные варианты конфигурации. Я у себя настроил и уже опробовал такую схему. Сервер с apt-cacher-ng принимает от клиентов все запросы по HTTP и сам их редиректит на HTTPS, скачивает пакеты и отдаёт клиентам. Такая настройка мне показалась самой простой и интуитивно понятной. Покажу на практике, как это реализовано. Ставим apt-cacher-ng: # apt install apt-cacher-ng Рисуем ему конфигурацию в /etc/apt-cacher-ng/zzz_local.conf: Port: 3142 BindAddress: 10.20.1.150 CacheDir: /var/cache/apt-cacher-ng LogDir: /var/log/apt-cacher-ng Remap-vector-https: http://apt.vector.dev Remap-docker-https: http://download.docker.com/linux/debian Remap-grafana-https: http://mirror.yandex.ru/mirrors/packages.grafana.com/oss/deb/ Remap-elastic-https: http://mirror.yandex.ru/mirrors/elastic/9/ Запускаем: # systemctl enable --now apt-cacher-ng Идём к клиентам, прописываем им прокси. Для этого добавляем файл /etc/apt/apt.conf.d/90apt-proxy: Acquire::http::Proxy "http://10.20.1.150:3142"; Acquire::https::Proxy "DIRECT"; Репозитории, что работают по HTTP, трогать не надо. Они теперь будут обновляться через прокси. А в тех репах, что работают по HTTPS, надо поменять протокол с https на http. Вот пример для docker.list: deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] http://download.docker.com/linux/debian trixie stable Собственно, на этом всё. Те репы, где оставили https, работают напрямую. Обновляемся на клиентах и смотрим на сервере с прокси логи и кэш в папках /var/log/apt-cacher-ng и /var/cache/apt-cacher-ng. С vector я решил вопрос так. Подключил эту репу на сам сервер apt-cacher-ng. Ему настроил доступ к репе через впн. Сначала обновляю пакет на нём, он попадает в кэш. Все остальные сервера берут с него. Вариантов решения подобных задач много. Я их все решил одним apt-cacher-ng. p.s. уже после написания заметки узнал, что для vector можно использовать репу apt.datadoghq.com, это CNAME для apt.vector.dev, то есть полная копия, доступная пока без ограничений. #linux #apt
Открыть в MAX- Просмотры
- 711
- ER
- 2,4%
- Реакции
- 17