Свой репозиторий может понадобиться в случае использования защищенного сегмента сети, желания сократить время загрузки пакетов, использовании своих сборок для установочных пакетов. Установка и настройка будет выполнена из командной строки.
Выполняем некоторые настройки безопасности сервера.
Разрешаем порты, на которых наш сервер будет принимать запросы:
firewall-cmd –permanent –add-port={80,443}/tcp
firewall-cmd –reload
* в данном примере мы разрешаем запросы http и https.
Данный модель безопасности лучше отключить. Для этого вводим две команды:
setenforce 0
sed -i ‘s/^SELINUX=.*/SELINUX=disabled/g’ /etc/selinux/config
* первая команда отключить его разово, вторая — на постоянной основе.
При необходимости использовать SELinux, читаем статью Настройка SELinux в CentOS 7.
Репозиторий для загрузки и установки пакетов представляет из себя хранилище файлов, доступ к которым осуществляется по http протоколу. Для этого нам понадобиться развернуть веб-сервер.
В качестве последнего мы будем использовать nginx. Для его установки, устанавливаем репозиторий epel:
yum install epel-release
После ставим сам nginx:
yum install nginx
Разрешаем запуск веб-сервера:
systemctl enable nginx
Запускаем его:
systemctl start nginx
Открываем браузер и переходим по адресу http://<IP-адрес сервера> — мы должны увидеть приветствие NGINX:
Настроим свой репозиторий, в котором будут храниться установочные пакеты. Также настроим их автоматическую синхронизацию с репозиторием CentOS.
Устанавливаем необходимые утилиты для работы с локальным репозиторием:
yum install createrepo yum-utils
Создаем каталоги для репозитория:
mkdir -p /usr/share/nginx/html/repos/7/{os,updates}/x86_64
* в данном примере будет создан каталог /usr/share/nginx/html/repos/7, а внутри него каталоги os (стандартный репозиторий для установка пакетов) и updates (обновления), в каждой из которых каталог x86_64 (для систем x64 архитектуры x86).
Синхронизируем наш будущий репозиторий с источником пакетов, например, с зеркалом от Яндекса:
rsync -iavrt –delete –exclude=’repo*’ rsync://mirror.yandex.ru/centos/7/os/x86_64/ /usr/share/nginx/html/repos/7/os/x86_64/
… ждем …
После синхронизируем updates:
rsync -iavrt –delete –exclude=’repo*’ rsync://mirror.yandex.ru/centos/7/updates/x86_64/ /usr/share/nginx/html/repos/7/updates/x86_64/
Создаем репозитории:
createrepo -v /usr/share/nginx/html/repos/7/os/x86_64
createrepo -v /usr/share/nginx/html/repos/7/updates/x86_64
А также разрешаем группы:
createrepo /usr/share/nginx/html/repos/7/os/x86_64 -g /usr/share/nginx/html/repos/7/os/x86_64/repodata/repomd.xml
createrepo /usr/share/nginx/html/repos/7/updates/x86_64 -g /usr/share/nginx/html/repos/updates/os/x86_64/repodata/repomd.xml
* в некоторых репозиториях файл repomd.xml может иметь другое название, например, comps.xml.
Настраиваем nginx:
vi /etc/nginx/conf.d/default.conf
… location / { root /usr/share/nginx/html; index index.html index.htm; autoindex on; } …
* в данном примере мы добавили autoindex on для удобства — это позволит просматривать содержимое репозитория в браузере.
Перезапускаем nginx:
systemctl restart nginx
Открываем браузер и переходим по адресу http://<IP-адрес сервера>/repos/7 — мы должны увидеть список os и updates. Походив по нему, мы найдем список скачанных пакетов.
Чтобы гарантировать, что все пакеты будут скачиваться с локального репозитория, отключаем имеющиеся:
find /etc/yum.repos.d -type f -exec sed -i “s/enabled=1/enabled=0/g” {} \;
* в данном примере мы во всей файлах каталога /etc/yum.repos.d нашли и заменили enabled=1 на enabled=0.* можно также поступить радикально и удалить репозитории командой \rm /etc/yum.repos.d/*
Создаем файл с настройкой репозитория:
vi /etc/yum.repos.d/local.repo
[local]name=Local Yum Repobaseurl=http://192.168.0.10/repos/$releasever/os/$basearch/enabled=1gpgcheck=0
[local-update]name=Local Yum Repo for update packagesbaseurl=http://192.168.0.10/repos/$releasever/updates/$basearch/enabled=1gpgcheck=0
* где local — название репозитория; name — описание; baseurl — базовый адрес http, по которому нужно искать пакеты; enabled — указание на включение или отключение репозитория; gpgcheck — включить или отключить проверку GPG сигнатур для пакетов.
Также можно задать приоритет для каждого из репозиториев:
priority=1
* 1 — наивысший приоритет.
Готово. Можно выполнить установку.
Посмотреть список установленных пакетов и с какого репозитория они были скачаны можно командой:
yum list installed
Для поддержания списка пакетов в актуальном состоянии необходимо постоянно обновлять установочные файлы в репозиториях. Это можно делать вручную и/или автоматическом режиме.
Для обновления репозитория выполняем синхронизацию с источником пакетов (также, как мы делали начальную синхронизацию):
И обновляем служебную информацию:
createrepo –update /usr/share/nginx/html/repos/7/os/x86_64
Аналогично, со всеми остальными репозиториями.
Его суть сводится к запуску скрипта в cron. Сначала создадим папку для хранения скриптов, затем сам скрипт:
mkdir /scripts
vi /scripts/repos_update.sh
#!/bin/bashPATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
rsync -iavrt –delete –exclude=’repo*’ rsync://mirror.yandex.ru/centos/7/os/x86_64/ /usr/share/nginx/html/repos/7/os/x86_64/createrepo –update /usr/share/nginx/html/repos/7/os/x86_64
rsync -iavrt –delete –exclude=’repo*’ rsync://mirror.yandex.ru/centos/7/updates/x86_64/ /usr/share/nginx/html/repos/7/updates/x86_64/createrepo –update /usr/share/nginx/html/repos/7/updates/x86_64
Разрешаем запуск скрипта на выполнение:
chmod +x /scripts/repos_update.sh
Добавляем задание в cron:
crontab -e
0 1 * * * /scripts/repos_update.sh
* в данном примере мы запускаем наш скрипт каждый день в час ночи.
В одном репозитории мы можем легко хранить пакеты для различных релизов операционной системы CentOS (и не только CentOS, но и PPA). Для этого создаем каталог под новый релиз, синхронизируем его с источником и создаем из него репозиторий, например:
mkdir -p /usr/share/nginx/html/repos/6/{os,updates}/x86_64
* в данном примере предполагается использование репозитория для релиза 6.
Синхронизируем пакеты:
rsync -iavrt –delete –exclude=’repo*’ rsync://mirror.yandex.ru/centos/6/os/x86_64/ /usr/share/nginx/html/repos/6/os/x86_64/
rsync -iavrt –delete –exclude=’repo*’ rsync://mirror.yandex.ru/centos/6/updates/x86_64/ /usr/share/nginx/html/repos/6/updates/x86_64/
createrepo -v /usr/share/nginx/html/repos/6/os/x86_64
createrepo -v /usr/share/nginx/html/repos/6/updates/x86_64
Для Epel репозитория схема добавления похожа, кроме метода синхронизации — синхронизация с yandex выполняется с помощью wget.
Создаем отдельную ветку каталога:
mkdir -p /usr/share/nginx/html/repos/epel/7/x86_64
wget -r -nH -np -nc -R index.html* https://mirror.yandex.ru/epel/7/x86_64/ -P /usr/share/nginx/html/repos/
createrepo -v /usr/share/nginx/html/repos/epel/7/x86_64
При настройке клиента создаем файл с настройкой репозитория:
vi /etc/yum.repos.d/local-epel.repo
[local-epel]name=Local Extra Packages for Enterprise Linux 7baseurl=http://192.168.0.10/epel/$releasever/$basearch/enabled=1gpgcheck=0
По такому же принципу мы можем добавить любой репозиторий, например, rpmforge, remi, nginx и другие.
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies