Blue Flower

Одна из основных задач администратора - установка, обновление и удаление программ. При наличии соединения с сетью Internet, эта задача может быть легко решена использованием пакетного менеджера yum в CentOS 7, либо любого другого пакетного менеджера выбранного Вами дистрибутива. Можно также скачать отдельные .rpm файлы и установить с помощью того же yum или rpm.

В случае недоступности сети Internet конечным узлам, необходимы дополнительные способы решения проблемы управления программным обеспечением. Причиной отсутствия у конечного узла доступа к Internet могут быть как элементарное желание снизить загруженность внешнего канала передачи данных, вызванную скачиванием одних и тех же пакетов внутренними узлами, так и размещение конечного узла во внутреннем, защищенном контуре сети, в целях безопасности.

 

Сразу оговоримся, что для размещения репозитория потребуется большой объем пространства. На момент написания статьи каталог со всеми файлами репозитория CentOS 7.3.1611 занимает 45 Гб. 

Для настройки воспользуемся виртуальной машиной с установленной минимальной версией CentOS 7.3.1611. 

Первым шагом проверим общие сетевые параметры и обновим операционную систему:

[root@localhost ~]# hostname --fqdn
localhost
[root@localhost ~]# hostnamectl set-hostname repo.lab.akonchenkov.com
[root@localhost ~]# cat /etc/hostname localhost.localdomain
[root@localhost ~]# echo repo.lab.akonchenkov.com > /etc/hostname
[root@localhost ~]# echo kernel.domainname = lab.akonchenkov.com > /etc/sysctl.d/domainname.conf
[root@localhost ~]# ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:15:5d:0f:7b:d3 brd ff:ff:ff:ff:ff:ff inet 192.168.15.127/24 brd 192.168.15.255 scope global dynamic eth0 valid_lft 84745sec preferred_lft 84745sec inet6 fe80::6f2e:d531:d791:d072/64 scope link valid_lft forever preferred_lft forever [root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@localhost ~]# echo 192.168.15.127 repo.lab.akonchenkov.com repo >> /etc/hosts
[root@localhost ~]# cat /etc/sysconfig/network # Created by anaconda [root@localhost ~]# echo NETWORKING=yes > /etc/sysconfig/network [root@localhost ~]# echo HOSTNAME=repo.lab.akonchenkov.com >> /etc/sysconfig/network
[root@localhost ~]# echo GATEWAY=192.168.15.1 >> /etc/sysconfig/network [root@localhost ~]# echo GATEDEV=eth0 >> /etc/sysconfig/network [root@localhost ~]# echo NOZEROCONF=true >> /etc/sysconfig/network
[root@localhost ~]# cat /etc/resolv.conf # Generated by NetworkManager search lab.akonchenkov.com nameserver 192.168.15.1
[root@localhost ~]# ping centos.org PING centos.org (85.12.30.226) 56(84) bytes of data. 64 bytes from 85.12.30.226 (85.12.30.226): icmp_seq=1 ttl=55 time=280 ms 64 bytes from 85.12.30.226 (85.12.30.226): icmp_seq=2 ttl=55 time=280 ms ^C --- centos.org ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 280.421/280.480/280.540/0.532 ms
[root@localhost ~]# yum update -y

Для размещения файлов репозитория подключим отдельный виртуальный жесткий диск и отформатируем его.

[root@localhost ~]# dmesg | grep -E "sd.*Attached SCSI disk"
[    1.018456] sd 2:0:0:0: [sda] Attached SCSI disk
[    1.018952] sd 3:0:0:0: [sdb] Attached SCSI disk
[root@localhost ~]# pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created.
[root@localhost ~]# vgcreate vg01 /dev/sdb Volume group "vg01" successfully created
[root@localhost ~]# vgdisplay vg01 | grep "Total PE"
Total PE 20479 [root@localhost ~]# lvcreate -n vol00 -l 20479 vg01 Logical volume "vol00" created. [root@localhost ~]# lvdisplay vg01 | grep "LV Path" LV Path /dev/vg01/vol00 [root@localhost ~]# mkfs.ext4 /dev/vg01/vol00

Обработку запросов конечных узлов мы будем проводить с помощью Web-сервера Apache. Установим и запустим его, а также сделаем правило межсетевого экрана разрешающее доступ к нему.

[root@localhost ~]# yum install httpd -y
[root@localhost ~]# systemctl enable httpd Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service. [root@localhost ~]# systemctl start httpd
[root@localhost ~]# firewall-cmd --get-zone-of-interface=eth0 public
[root@localhost ~]# firewall-cmd --zone=public --permanent --add-service=http
success
[root@localhost ~]# firewall-cmd --reload
success

Далее, в корневом каталоге web-сервера создадим подкаталог для монтирования тома подготовленного ранее.

[root@localhost ~]# mkdir -p /var/www/html/repos/
[root@localhost ~]# blkid /dev/mapper/vg01-vol00 /dev/mapper/vg01-vol00: UUID="f7d8e819-a419-4c8f-ab23-3844137573b0" TYPE="ext4"
[root@localhost ~]# echo UUID="f7d8e819-a419-4c8f-ab23-3844137573b0" /var/www/html/repos xfs rw,nosuid,nodev,noexec,auto,nouser,async 0 0 >> /etc/fstab

 Создадим структуру каталогов и наполним их содержимым

[root@localhost ~]# yum install createrepo rsync -y
[root@localhost ~]# mkdir -p /var/www/html/repos/centos/7
[root@localhost ~]# createrepo /var/www/html/repos/centos/7 Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs Sqlite DBs complete

 Открываем в любом браузере CentOS download mirror и выбираем наиболее близко к Вам расположенное и доступное зеркало с дистрибутивом CentOS. В случае автора статьи таковым оказался Yandex. Если он оказался недоступен, попробуйте выбрать другое зеркало. Запускаем первоначальную синхронизацию каталогов. Эта процедура займет достаточно продолжительное время, поэтому: "А не пора ли нам подкрепиться? По-моему, пора! :)"

[root@localhost ~]# rsync -avz "rsync://mirror.yandex.ru/centos/7/" "/var/www/html/repos/centos/7/"
[root@localhost ~]# find /var/www/html/repos -type d -exec chmod 0750 {} \;
[root@localhost ~]# find /var/www/html/repos -type f -exec chmod 0640 {} \;
[root@localhost ~]# chown -R apache:apache /var/www/html/repos
[root@localhost ~]# restorecon -r /var/www/html

Не забываем создать назначенное задание для синхронизации локального репозитория со внешним зеркалом.

[root@localhost ~]# echo "0 3 * * * rsync -avz \"rsync://mirror.yandex.ru/centos/7/\" \"/var/www/html/repos/centos/7/\"; createrepo --update \"/var/www/html/repos/centos/7/\"" | crontab -u apache -

 

Серверная часть настройки завершена.

На конечном узле нам нужно создать файл конфигурации для пакетного менеджера yum, а также отключить оригинальные ссылки на репозитории. Конфигурационные файлы пакетного менеджера находятся в /etc/yum.repos.d и имеют расширение .repo

[root@localhost ~]# sed -i -E 's/\(^enabled\).*/$1=0/' /etc/yum.repos.d/*.repo
[root@localhost ~]# for i in $(ls /etc/yum.repos.d/*.repo); do mv $i $i.orig; done
[root@localhost ~]# cat <<< ' [localbase] name=Local CentOS-$releasever - Base baseurl=http://repo.lab.akonchenkov.com/repos/centos/$releasever/os/$basearch/
gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #released updates [localupdates] name=Local CentOS-$releasever - Updates baseurl=http://repo.lab.akonchenkov.com/repos/centos/$releasever/updates/$basearch/
gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that may be useful [localextras] name=Local CentOS-$releasever - Extras baseurl=http://repo.lab.akonchenkov.com/repos/centos/$releasever/extras/$basearch/
gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that extend functionality of existing packages [localcentosplus] name=Local CentOS-$releasever - Plus baseurl=http://repo.lab.akonchenkov.com/repos/centos/$releasever/centosplus/$basearch/
gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 '> /etc/yum.repos.d/localmirror.repo
[root@localhost ~]# restorecon -r /etc/yum.repos.d/localmirror.repo
[root@localhost ~]# yum update
Loaded plugins: fastestmirror localbase | 3.6 kB 00:00:00 localextras | 3.4 kB 00:00:00 localupdates | 3.4 kB 00:00:00 (1/4): localbase/7/x86_64/group_gz | 155 kB 00:00:00 (2/4): localextras/7/x86_64/primary_db | 183 kB 00:00:00 (3/4): localbase/7/x86_64/primary_db | 5.6 MB 00:00:00 (4/4): localupdates/7/x86_64/primary_db | 1.2 MB 00:00:00 Loading mirror speeds from cached hostfile 

 Настройка локального репозитория завершена. Кроме стандартных репозиториев пакетов от CentOS, аналогичным образом можно добавлять и другие.