В этой статье я расскажу как создать своё локальное зеркало репозиториев для Linux, с использованием инструмента — apt-mirror.

Введение

Иногда бывает полезно сделать своё зеркало различных Linux репозиториев. Оно будет синхронизироваться с официальными репозиториями, а уже локальные сервера будут получать обновления с нашего сервера.

Например, это можно сделать, если у этих серверов нет возможности выйти в интернет, а обновлять их нужно.

Локальное зеркало Linux репозиториев

Создание зеркала репозиториев

Устанавливаем пакет apt-mirror:

# apt install apt-mirror

Apt-mirror написан на языке программирования perl. Посмотреть расположение самого скрипта можно с помощью следующей команды:

# which apt-mirror
/bin/apt-mirror

Так как проект давно заброшен, то в скрипте есть недоработки, например Файлы переводов (i18n/Translation) раньше в репозиториях хранились в виде архива bz2, а сейчас хранятся в виде архива xz. Ещё одна проблема в том, что начиная с Ubuntu Focal (20.04), клиент APT ожидает, что репозиторий предоставят файлы метаданных (command-not-found — cnf). Про эти файлы apt-mirror тоже ничего не знает. Но есть один разработчик, который поддерживает проект apt-mirror, и вы можете использовать его версию скрипта. Найти его скрипт можно здесь. Просто сделайте резервную копию файла /bin/apt-mirror и в оригинал поместите версию скрипта от Stifler6996.

Настройка apt-mirror

После исправления скрипта нужно произвести настройки apt-mirror. Для этого используется конфиг /etc/apt/mirror.list. В конфиг нужно добавить те репозитории, для которым мы делаем зеркало. Вы также можете изменить пути сохранения файлов, но я оставляю их по умолчанию (/var/spool/apt-mirror):

# nano /etc/apt/mirror.list
############# config ##################
### тут ничего не правлю
############# end config ##############

# Репозитории для ProxMox 6 (на 7 я ещё не перешёл)
deb [arch=amd64] http://download.proxmox.com/debian/pve buster pve-no-subscription
deb http://download.proxmox.com/debian/pbs buster pbs-no-subscription

# Репозитории для Debian 11 (указываю архитектуру, чтобы хоть как-то уменьшить количество скачиваемых пакетов)
deb [arch=amd64] http://deb.debian.org/debian/ bullseye main
deb [arch=amd64] http://security.debian.org/debian-security bullseye-security main
deb [arch=amd64] http://deb.debian.org/debian/ bullseye-updates main

# Репозитории для Ubuntu 22.04
deb [arch=amd64] http://ru.archive.ubuntu.com/ubuntu jammy main restricted
deb [arch=amd64] http://ru.archive.ubuntu.com/ubuntu jammy-updates main restricted
deb [arch=amd64] http://ru.archive.ubuntu.com/ubuntu jammy-security main restricted

clean http://ftp.us.debian.org/debian

И запускаем синхронизацию:

#  apt-mirror

С моими настройками будет скачано 128 GB. Так что убедитесь что у вас хватает мета на жестком диске.

Возможно у вас за 1 раз всё не скачается, процесс может упасть и придется снова выполнить команду apt-mirror. Не волнуйтесь, процесс начнется не с начала, а продолжит скачивать то что ещё не скачалось.

Файлы загружаются в каталог /var/spool/apt-mirror/, можем посмотреть структуру каталогов с помощью утилиты tree (возможно её нужно будет установить):

# tree -d -L 4 /var/spool/apt-mirror/
/var/spool/apt-mirror/
├── mirror
│   ├── deb.debian.org
│   │   └── debian
│   │       ├── dists
│   │       └── pool
│   ├── download.proxmox.com
│   │   └── debian
│   │       ├── pbs
│   │       └── pve
│   ├── ru.archive.ubuntu.com
│   │   └── ubuntu
│   │       ├── dists
│   │       └── pool
│   └── security.debian.org
│       └── debian-security
│           ├── dists
│           └── pool
├── skel
│   ├── deb.debian.org
│   │   └── debian
│   │       └── dists
│   ├── download.proxmox.com
│   │   └── debian
│   │       ├── pbs
│   │       └── pve
│   ├── ru.archive.ubuntu.com
│   │   └── ubuntu
│   │       └── dists
│   └── security.debian.org
│       └── debian-security
│           └── dists
└── var

32 directories

В каталоге mirror находятся сами пакеты. А в каталоге skel — содержится служебная информация. Например, список пакетов можете посмотреть для разных веток в файле Packages:

# less /var/spool/apt-mirror/skel/download.proxmox.com/debian/pve/dists/buster/pve-no-subscription/binary-amd64/Packages
# less /var/spool/apt-mirror/skel/deb.debian.org/debian/dists/bullseye/main/binary-amd64/Packages

Проверить, есть ли у вас битые пакеты можно так:

# cd /var/spool/apt-mirror/mirror/
# md5sum -c /var/spool/apt-mirror/var/MD5 > mirror.log
# grep -v 'OK' mirror.log

Последняя команда покажет пути установки битых пакетов, если такие имеются. Их нужно будет удалить и выполнить заново команду apt-mirror. А если вывод пустой, значит битых пакетов нет и пора переходить к следующему шагу.

Публикация своего репозитория

Чтобы использовать этот репозиторий, нужно опубликовать его с помощью веб сервера. Я для этого использую nginx. Устанавливаем веб сервер:

# apt install nginx

Правим основной конфиг nginx. Вам нужно изменить корневой путь и включить autoindex:

# nano /etc/nginx/sites-enabled/default
root /var/spool/apt-mirror/mirror/;
location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
                autoindex on;

Перезапускаем nginx:

# systemctl restart nginx.service

Если в браузере введёте адрес вашего сервера, то увидите следующее:

Внешний вид вашего зеркала репозитория в браузере
Внешний вид вашего зеркала репозитория в браузере

Прописываем репозиторий на наши сервера

Осталось добавить наш репозиторий на остальные наши сервера. Для этого нужно поправить конфиг /etc/apt/sources.list или создать отдельные конфиги в файле /etc/apt/sources.list.d. Кстати, про Linux репозитории я уже писал в этой статье.

Вот примеры того, как прописывается наш локальный репозиторий:

# так прописываем репозитории для PVE
deb [arch=amd64] http://172.28.90.45/download.proxmox.com/debian/pve/ buster pve-no-subscription
deb [arch=amd64] http://172.28.90.45/download.proxmox.com/debian/pbs/ buster pbs-no-subscription

# так для debian 11
deb [arch=amd64] http://172.28.90.45/deb.debian.org/debian/ bullseye main 
deb [arch=amd64] http://172.28.90.45/deb.debian.org/debian/ bullseye-updates main
deb [arch=amd64] http://172.28.90.45/security.debian.org/debian-security/ bullseye-security main

# так для Ubuntu 22.04
deb [arch=amd64] http://172.28.90.45/ru.archive.ubuntu.com/ubuntu/ jammy main restricted
deb [arch=amd64] http://172.28.90.45/ru.archive.ubuntu.com/ubuntu/ jammy-updates main restricted
deb [arch=amd64] http://172.28.90.45/ru.archive.ubuntu.com/ubuntu/ jammy-security main restricted

Сводка
Локальное зеркало Linux репозитория (apt-mirror)
Имя статьи
Локальное зеркало Linux репозитория (apt-mirror)
Описание
В этой статье я расскажу как создать своё локальное зеркало репозиториев для Linux, с использованием инструмента - apt-mirror

2 Replies to “Локальное зеркало Linux репозитория (apt-mirror)”

  1. Привет.

    Сделал апт-миррор по этой статье

    При проверке md5sum, получил много ошибок — большая часть пакетов не существует или не читается, примерно 90%.

    md5sum: ru.archive.ubuntu.com/ubuntu/pool/main/libn/libnl3/libnl-xfrm-3-dev_3.5.0-0.1_amd64.deb: No such file or directory md5sum: ru.archive.ubuntu.com/ubuntu/pool/main/n/network-manager/libnm-dev_1.36.4-2ubuntu1_amd64.deb: No such file or directory md5sum: ru.archive.ubuntu.com/ubuntu/pool/main/n/network-manager/libnm0_1.36.4-2ubuntu1_amd64.deb: No such file or directory md5sum: ru.archive.ubuntu.com/ubuntu/pool/main/libn/libnma/libnma-common_1.8.34-1ubuntu1_all.deb: No such file or directory md5sum: ru.archive.ubuntu.com/ubuntu/pool/main/libn/libnma/libnma-dev_1.8.34-1ubuntu1_amd64.deb: No such file or directory

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *