How to -поднятие локального зеркала CentOS для установки и обновления программ - CentOS Wiki

Создание локального репозитория

Если у вас установлено много систем, то вы можете рассмотреть возможность создания локального зеркала для обновления или установки по сети. Предположим, что мы хотим создать общий доступ на CentOS 5.3 как /share/CentOS/5 / ...

На серверной машине, став суперпользователем, создайте раздел:

mkdir -p /share/CentOS/5.3
cd /share/CentOS
ln -s 5.3 5

Отредактируйте путь к файловой системе, которая имеет достаточное место, или смонтируйте новый диск/раздел под /share. На систему с полным зеркалом и iso образами плюс местные пакеты понадобится около 28GB.

Найдите текущее зеркало рядом с вами, которое поддерживает Rsync, создайте структуру каталогов, которую можно наполнить на начальном этапе содержимым из установочных DVD или компакт-дисков. Можно добавить ISO-образы и любые обновления которые уже скачали.

Данная структура должна выглядеть следующим образом:

addons:
i386 SRPMS x86_64
centosplus:
i386 SRPMS x86_64
contrib:
i386 SRPMS x86_64
extras:
i386 SRPMS x86_64
fasttrack:
i386 x86_64
isos:
i386 x86_64
os:
i386 x86_64
updates:
i386 SRPMS x86_64

(вышеописанный пример для версии 5.3)

Выполните:

mkdir /tmp/mnt
mount -ro loop /share/CentOS/5.3/isos/x86_64/CentOS-5.3-x86_64-bin-DVD.iso /tmp/mnt
rsync -avHPS /tmp/mnt/ /share/CentOS/5.3/os/x86_64/
umount /tmp/mnt
mount -ro loop /share/CentOS/5.3/isos/x86_64/CentOS-5.3-i386-bin-DVD.iso /tmp/mnt
rsync -avHPS /tmp/mnt/ /share/CentOS/5.3/os/i386/
umount /tmp/mnt

Если вы используете ISO- образы CD дисков - также скопируйте содержимое всех дисков в те же каталоги для каждой архитектуры, переписав файлы с теми же именами.

Для CentOS 5.3 используется такой скрипт:

#!/bin/bash
if [ -d /share/CentOS/5.3 ] ; then
rsync -avSHP --delete --exclude "local*" --exclude "isos" nearby.rsync.centos.net::CentOS/5.3/ /share/CentOS/5.3/
else
echo "Target directory /share/CentOS/5.3 not present."
fi

Запуск скрипта можно поместить в cron. Вы можете использовать только i386 или x86_64, или исключить такие разделы как [extras] или [centosplus] подстраивая нужное по мере необходимости. Если использовать cron, вероятно лучшим решением будет использовать файл блокировки, который будет заверять что работа еще не запущена.

#!/bin/bash
if [ -f /var/lock/subsys/rsync_updates ]; then
echo "Updates via rsync already running."
exit 0
fi
if [ -d /share/CentOS/5.3 ] ; then
touch /var/lock/subsys/rsync_updates
rsync -avSHP --delete --exclude "local*" --exclude "isos" nearby.rsync.centos.net::CentOS/5.3/ /share/CentOS/5.3/
/bin/rm -f /var/lock/subsys/rsync_updates
else
echo "Target directory /share/CentOS/5.3 not present."
fi

Создайте ссылку на текущий релиз.

cd /share/CentOS/
ln -s 5.3 5

На сервере вы можете использовать NFS для экспорта каталога.

cat >> /etc/exports
/share 192.168.1.0/24(rw,mountpoint)

Задана локальная подсеть или поименный список адресов IP.

Если сервис NFS еще не включен:

exportfs -a
chkconfig nfs on
service nfs start

В противном случае просто:

exportfs -r

Осталось клиентам смонтировать ресурс. Можно использовать запись в файле /etc/fstab как6

myserver.my.net:/share   /share   nfs   rw  0 0

Или, если используется autofs:

cd /
ln -s net/myserver/share

Сконфигурируйте /etc/yum.repos.d/CentOS-Base.repo как:

[base]
name=CentOS-$releasever - Base
baseurl=file:/share/CentOS/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
protect=1
priority=1
enabled=1
[updates]
name=CentOS-$releasever - Updates
baseurl=file:/share/CentOS/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
protect=1
priority=1
enabled=1
[extras]
name=CentOS-$releasever - Extras
baseurl=file:/share/CentOS/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
protect=1
priority=1
enabled=1
[centosplus]
name=CentOS-$releasever - Plus
baseurl=file:/share/CentOS/$releasever/centosplus/$basearch/
exclude=kernel*
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
protect=0
priority=1
[contrib]
name=CentOS-$releasever - Contrib
baseurl=file:/share/CentOS/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
protect=0
priority=3

Не забудьте включить для репозиториев protectbase или priorities в зависимости от ваших нужд.

В качестве упражнения рассмотрите вариан использование HTTP вместо или дополнительно к NFS.

 

Если у вас имеется достаточная пропускная способность сети, просьба рассмотреть вопрос об участии в публичном зеркале.

 

Возможно, вы захотите добавить 'lftp' в качестве альтернативного метода rsync. Из-за низкой скорости интернета lftp может оказаться предпочтительным. Кроме того, существует много сайтов доступных по http/ftp, чем через rsync. Эту возможность можно задать в виде одной строчки:

lftp -e 'open http://<some.site>/centos/ && mirror -c --delete  5.3 && exit'

Зеркало будет отражать весь 5.3 в соответствии с удаленным каталогом centos/. Основным недостатком lftp является то, что он не так устойчив в сохранении существующих файлов и часто будет загружать повторно файлы, если есть неточности с отметкой времени, а игнорируя временную отметку можно допустить вариант когда не загрузится нужный файл, например repodata, имеющий всегда одно название но изменяющееся содержимое и временную отметку.

Автор: Александр