Иногда возникает необходимость развернуть внутри организации свой репозитарий для CentOS. Это, например, необходимо для настройки и обновлений ОС находящихся в защищенном сегменте сети. В моем случае был один момент, который частенько возникает в организациях, а именно синхронизация локального репозитария должна идти через прокси сервер SQUID
Давайте разбираться как это сделать.
В ней все описано достаточно подробно, но у меня задача. Синхронизация должна идти через прокси сервер SQUID.
Так как сервер находился за SQUID я настроил серврер репозитария по своей же статье. Ознакомиться можно ТУТ
Обновляем его
# yum update -y
Далее я оключил SELINUX. Знаю, что это неправильно 😋
#sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
Перезагрузим
#reboot
Теперь настроим Web сервер. Использовать будем nginx
#yum install epel-release
#yum install nginx
#systemctl enable nginx
#systemctl start nginx
Открываем браузер вводим ip адрес сервера репозитария и видим страницу приветствия и понимаем, что nginx у нас работает.
Настраиваем репозитарий
#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 не будет сейчас работать через SQUID а будет пытаться напрямую скачать файлы. Но для этого сначала нужно настроить SQUID.
Идем на сервер где у нас установлен SQUID и прописываем порты для rsync
#mcedit /etc/squid/squid.conf
Добавляем следующие строки
acl SSL_ports port 443 563 873 # 873 - for rsync
acl Safe_ports port 873 # for rsync
Теперь снова возвращаемся к серверу репозитария. Необходимо сделать так, что бы rsync работал через прокси. Необходимо дать команду
#export RSYNC_PROXY=proxyhost:proxyport
Но тут необходимо понимать, что после выхода из терминала ничего работать не будет.
Для того что бы все заработало как надо необходимо
#mcedit /etc/environment
и добавить следующие строки
http_proxy="http://proxyhost:proxyport/"
https_proxy="https://proxyhost:proxyport/"
ftp_proxy="ftp://proxyhost:proxyport/"
no_proxy=".domain,server1,"
Теперь можно выполнить синхронизацию
#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
Теперь настроим nginx
#mcedit /etc/nginx/nginx.conf
Находим секцию
server {
И дописываем туда
root /usr/share/nginx/html;
index index.html index.htm;
autoindex on;
У меня секция выглядит так
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
index index.html index.htm;
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 Repo
baseurl=http://iprepo/repos/$releasever/os/$basearch/
enabled=1
gpgcheck=0
[local-update]
name=Local Yum Repo for update packages
baseurl=http://iprepo/repos/$releasever/updates/$basearch/
enabled=1
gpgcheck=0
* где local — название репозитория; name — описание; baseurl — базовый адрес http, по которому нужно искать пакеты; enabled — указание на включение или отключение репозитория; gpgcheck — включить или отключить проверку GPG сигнатур для пакетов.
Также можно задать приоритет для каждого из репозиториев:
priority=1
* 1 — наивысший приоритет.
Готово. Можно выполнить установку.
Если в процессе обновления или установки мы получим ошибку [Errno 14] PYCURL ERROR 22, выполняем команду yum clean all. Подробнее в статье Ошибка CentOS: [Errno 14] PYCURL ERROR 22 - The requested URL returned error: 404.
Посмотреть список установленных пакетов и с какого репозитория они были скачаны можно командой:
#yum list installed
Обновление репозитория
Для поддержания списка пакетов в актуальном состоянии необходимо постоянно обновлять установочные файлы в репозиториях. Это можно делать вручную и/или автоматическом режиме.
Ручное обновление
Для обновления репозитория выполняем синхронизацию с источником пакетов (также, как мы делали начальную синхронизацию):
#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
Аналогично, со всеми остальными репозиториями.
Автоматическое обновление
Его суть сводится к запуску скрипта в cron. Сначала создадим папку для хранения скриптов, затем сам скрипт:
#mkdir /scripts
#mcedit /scripts/repos_update.sh
Заполняем файл следующим содержимым
#!/bin/bash
PATH=/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 (и не только 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 Repo
Для 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 7
baseurl=http://iprepo/epel/$releasever/$basearch/
enabled=1
gpgcheck=0
По такому же принципу мы можем добавить любой репозиторий, например, rpmforge, remi, nginx и другие.
Комментариев нет:
Отправить комментарий