Создаем собственный репозиторий для centos (на базе debian)
Репозиторий - это набор пакетов (в данном случае rpm), а также метаданные, которые считываются пакетным менеджером (в данном случае yum). Метаданные - это набор xml, содержащих контрольные суммы пакетов.
Обычно в метаданные входят следующие файлы:
repomd.xml: Файл-индекс, содержащий расположение, контрольную сумму и таймштампы остальных xml-файлов.
primary.xml.gz: Содержит детальную информацию о каждом пакете в репозитории: имя, версия, лицензия, зависимости, таймштампы, размер итп.
filelists.xml.gz: Содержит информацию о каждом файле и директории в каждом пакете репозитория
other.xml.gz: Содержит changelog, извлеченный из файла RPM SPEC для каждого файла в репозитории.
Что нужно чтоб репозиторий работал:
1) доступность - могут быть случаи, когда репозиторий нужен только локально, тогда вам не интересна доступность, иначе, нужно "раздавать" репозиторий с помощью веб или фтп сервера. Ничего особенного настраивать не нужно - только положите файлы так, чтобы к ним можно было обратиться по http\ftp\.. протоколам.
2) Собственно сам репозиторий - его мы будем скачивать с одного из публичных
3) Файлы индекса - о том что это такое рассказано выше.
Устанавливаем необходимые пакеты. Из пакете yum-utils нам пригодится конфиг и папка с репозиториями, lzma нужен для работы с xz архивами при создании репозитория. createrepo будет создавать индекс репозитория и помещать их в архивы в папке repodata.
По умолчанию утилита reposync считывает конфиг yum'a и скачивает "enabled=1" репозитории. Поэтому в первую очередь нам необходимо создать нужные репы в папке /etc/yum/repos.d/.
Например, возьмем базовый репозиторий Centos-6 и Epel-7 (разные версии для полноты примера)
—
Созданные файлы в repos.d, по-умолчанию включены в yum.conf, поэтому по-умолчанию править конфиг не придется. Выполним теперь скачивание и синхронизацию:
createrepo создаст индексы в папках repodata, расположеные каждая в своем репозитории. Это нарушает обычную структуру репозитория, но здесь вы вольны делать расположения как душе угодно, ведь вы контролируете репозиторий и вам его потом настраивать.
Выполним настройку со стороны клиента в файле, например, repo.repo
Небольшое отступление. Поскольку хочется, чтобы зеркало работало с родными gpg ключами, то мы не производим переподписывание пакетов. Посему вам придется установить ключи выбранных репозиториев и на клиента и на сервер.
на сервере, например:
на клиенте - как обычно.
Еще одно замечание: createrepo поддерживает ключ —update, который после первичного создания репозитория не пересоздает индексы заново, а обновляет. это существенно ускоряет работу (вместо 5 минут - 15 секунд), однако он очень требователен к оперативной памяти. Например для репозитория свыше 9к пакетов потребуется 1,5гига оперативки. В случае нехватки памяти вываливается с ошибкой killed, а в логах видно ошибку out of mem. Полная же переинициализация репозитория к памяти вообще не требовательна. Поэтому внимательнее относитесь к использованию в production.
Репозиторий - это набор пакетов (в данном случае rpm), а также метаданные, которые считываются пакетным менеджером (в данном случае yum). Метаданные - это набор xml, содержащих контрольные суммы пакетов.
Обычно в метаданные входят следующие файлы:
repomd.xml: Файл-индекс, содержащий расположение, контрольную сумму и таймштампы остальных xml-файлов.
primary.xml.gz: Содержит детальную информацию о каждом пакете в репозитории: имя, версия, лицензия, зависимости, таймштампы, размер итп.
filelists.xml.gz: Содержит информацию о каждом файле и директории в каждом пакете репозитория
other.xml.gz: Содержит changelog, извлеченный из файла RPM SPEC для каждого файла в репозитории.
Что нужно чтоб репозиторий работал:
1) доступность - могут быть случаи, когда репозиторий нужен только локально, тогда вам не интересна доступность, иначе, нужно "раздавать" репозиторий с помощью веб или фтп сервера. Ничего особенного настраивать не нужно - только положите файлы так, чтобы к ним можно было обратиться по http\ftp\.. протоколам.
2) Собственно сам репозиторий - его мы будем скачивать с одного из публичных
3) Файлы индекса - о том что это такое рассказано выше.
Устанавливаем необходимые пакеты. Из пакете yum-utils нам пригодится конфиг и папка с репозиториями, lzma нужен для работы с xz архивами при создании репозитория. createrepo будет создавать индекс репозитория и помещать их в архивы в папке repodata.
# apt update
# apt upgrade
# apt install yum-utils createrepo lzma python-lzma
# mkdir /mirrors/centos
По умолчанию утилита reposync считывает конфиг yum'a и скачивает "enabled=1" репозитории. Поэтому в первую очередь нам необходимо создать нужные репы в папке /etc/yum/repos.d/.
Например, возьмем базовый репозиторий Centos-6 и Epel-7 (разные версии для полноты примера)
/etc/yum/repos.d/base-6.repo
[base-6]
name=CentOS-6 - Base
baseurl=http://mirror.yandex.ru/centos/6/os/x86_64/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
enabled=1
—
/etc/yum/repos.d/epel-release-7.repo
[epel-7]
name=Extra Packages for Enterprise Linux 7 - x86_64
baseurl=http://download.fedoraproject.org/pub/epel/7/x86_64/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Созданные файлы в repos.d, по-умолчанию включены в yum.conf, поэтому по-умолчанию править конфиг не придется. Выполним теперь скачивание и синхронизацию:
# reposync -c /etc/yum/yum.conf --download_path=/mirrors/centos/
# createrepo -o /mirrors/centos/base-6/ /mirrors/centos/base-6/
# createrepo -o /mirrors/centos/epel-7/ /mirrors/centos/epel-7/
createrepo создаст индексы в папках repodata, расположеные каждая в своем репозитории. Это нарушает обычную структуру репозитория, но здесь вы вольны делать расположения как душе угодно, ведь вы контролируете репозиторий и вам его потом настраивать.
Выполним настройку со стороны клиента в файле, например, repo.repo
[epel-7]
name=Extra Packages for Enterprise Linux 7 - x86_64
baseurl=http://repo.infra.onsec.ru/centos/epel-7/
#failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Небольшое отступление. Поскольку хочется, чтобы зеркало работало с родными gpg ключами, то мы не производим переподписывание пакетов. Посему вам придется установить ключи выбранных репозиториев и на клиента и на сервер.
на сервере, например:
rpm --import /etc/yum/keys/RPM-GPG-KEY-CentOS-SIG-SCLo
на клиенте - как обычно.
Еще одно замечание: createrepo поддерживает ключ —update, который после первичного создания репозитория не пересоздает индексы заново, а обновляет. это существенно ускоряет работу (вместо 5 минут - 15 секунд), однако он очень требователен к оперативной памяти. Например для репозитория свыше 9к пакетов потребуется 1,5гига оперативки. В случае нехватки памяти вываливается с ошибкой killed, а в логах видно ошибку out of mem. Полная же переинициализация репозитория к памяти вообще не требовательна. Поэтому внимательнее относитесь к использованию в production.