如何使用Rsync和Nginx创建CentOS 8本地存储库镜像
在本指南中,很好地探索了如何使用Rsync并将其托管在Nginx Web服务器上来创建CentOS 8的本地存储库。通过具有本地cron作业来创建本地CentOS 8镜像,该作业会定期检查上游存储库中的更新,并相应地在本地进行更新。
通过创建CentOS 8本地存储库镜像,我们将能够配置CentOS 8服务器来访问软件包,而无需访问Internet。通过从外部来源提取RPM软件包,可以提高安全性并减少带宽消耗。
在此设置中,请很好地使用CentOS 7或者CentOS 8服务器执行操作。我们应该具有一个外部存储,该存储应具有足够的容量来托管存储库软件包和潜在的增长。
对于CentOS 7和CentOS 6,请检查:如何创建本地CentOS 7 6和EPEL存储库同步镜像。
安装Nginx Web服务器
由于Nginx用作首选的Web服务器,因此将其安装在CentOS 7系统中。
CentOS的8
sudo dnf -y install @nginx
CentOS 7:
sudo yum -y install epel-release sudo yum -y install nginx
安装后,启动并启用该服务。
sudo systemctl enable --now nginx
确认服务正在运行。
$systemctl status nginx ● nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2019-11-01 00:28:39 EAT; 4s ago Process: 7378 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS) Process: 7376 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) Process: 7375 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS) Main PID: 7380 (nginx) Tasks: 2 (limit: 11512) Memory: 9.4M CGroup: /system.slice/nginx.service ├─7380 nginx: master process /usr/sbin/nginx └─7381 nginx: worker process Nov 01 00:28:39 centos8.novalocal systemd[1]: Starting The nginx HTTP and reverse proxy server... Nov 01 00:28:39 centos8.novalocal nginx[7376]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok Nov 01 00:28:39 centos8.novalocal nginx[7376]: nginx: configuration file /etc/nginx/nginx.conf test is successful Nov 01 00:28:39 centos8.novalocal systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument Nov 01 00:28:39 centos8.novalocal systemd[1]: Started The nginx HTTP and reverse proxy server.
在防火墙中打开http端口。
sudo firewall-cmd --add-service=http --permanent sudo firewall-cmd --reload
创建存储库目录
我的服务器中有一个辅助磁盘,用于存储100GB的存储库数据/dev/vdc。
$lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 252:0 0 20G 0 disk ├─vda1 252:1 0 1G 0 part /boot └─vda2 252:2 0 9G 0 part ├─cl-root 253:0 0 8G 0 lvm / └─cl-swap 253:1 0 1G 0 lvm [SWAP] vdc 252:32 0 100G 0 disk
在该块设备上创建一个分区,并将其安装在/data目录下。让我们先在其上创建一个分区。
sudo parted -s -a optimal -- /dev/vdc mklabel gpt sudo parted -s -a optimal -- /dev/vdc mkpart primary 0% 100% sudo parted -s -- /dev/vdc align-check optimal 1
其中创建物理卷和卷组。
$sudo pvcreate /dev/vdc1 Physical volume "/dev/vdc1" successfully created. $sudo vgcreate data /dev/vdc1 Volume group "data" successfully created
创建逻辑卷
$sudo lvcreate -n repos -l+100%FREE data Logical volume "repos" created.
创建一个文件系统
$sudo mkfs.xfs /dev/mapper/data-repos meta-data=/dev/mapper/data-repos isize=512 agcount=4, agsize=1965824 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 data = bsize=4096 blocks=7863296, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=3839, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
创建用于挂载逻辑卷的目录。
sudo mkdir /data
创建一个挂载点
$sudo vim /etc/fstab /dev/mapper/data-repos /data xfs defaults 0 0
安装它。
sudo mount -a
确认:
$df -hT /data Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/data-repos xfs 100G 247M 100G 1% /data
为CentOS 8存储库数据创建基本目录。
sudo mkdir -p /data/repos/centos/8/
确认所有目录均已创建。
$tree /data/ /data/ └── repos └── centos └── 8 3 directories, 0 files
建立储存库同步处理指令码
现在让我们创建一个脚本,该脚本将用于将远程存储库中的内容同步到本地系统。
$sudo vim /etc/centos8_reposync.sh
粘贴下面的数据。
#!/bin/bash repos_base_dir="/data/repos/centos/8/" # Start sync if base repo directory exist if [[ -d "$repos_base_dir" ]] ; then # Start Sync rsync -avSHP --delete rsync://mirror.liquidtelecom.com/centos/8/ "$repos_base_dir" # Download CentOS 8 repository key wget -P $repos_base_dir wget https://www.centos.org/keys/RPM-GPG-KEY-CentOS-Official fi
使脚本可执行。
sudo chmod +x /etc/centos8_reposync.sh
安装Tmux并启动第一次执行。
$sudo yum -y install tmux $tmux $sudo /etc/centos8_reposync.sh
该脚本应开始运行。
应该创建许多目录。
$ls -1 /data/repos/centos/8/ AppStream BaseOS centosplus COMPOSE_ID cr extras fasttrack isos PowerTools
等待初始脚本完成运行,然后创建cron作业以进行每周同步。
我将同步设置为在每个星期日的晚上6点运行。
$sudo crontab -e 00 18 * * 7 /etc/centos8_reposync.sh
配置Nginx
创建Nginx配置文件以服务存储库内容。
$sudo vim /etc/nginx/conf.d/centos.conf server { listen 80; server_name repos.example.com; root /data/repos/; location/{ autoindex on; } }
其中repos.example.com是用于访问存储库的域名。
配置SELinux标签。
sudo semanage fcontext -a -t httpd_sys_content_t "/data/repos(/.*)?" sudo restorecon -Rv /data/repos
更改后重新启动nginx。
sudo nginx -t sudo systemctl restart nginx
打开服务器URL确认它正在运行。
配置CentOS 8客户端计算机
现在我们的镜像已经准备好了,我们可以配置CentOS 8机器以使用本地存储库。
首先备份当前存储库
cd /etc/yum.repos.d/ sudo mkdir old-repos sudo mv *.repo old-repos
创建一个新的存储库文件
sudo vim local.repo
在下面进行修改并将其粘贴。
[BaseOS] name=CentOS-$releasever - Base baseurl=//repos.theitroad.local/centos/$releasever/BaseOS/$basearch/os/ gpgcheck=1 enabled=1 gpgkey=//repos.theitroad.local/centos/$releasever/RPM-GPG-KEY-CentOS-Official [AppStream] name=CentOS-$releasever - AppStream baseurl=//repos.theitroad.local/centos/$releasever/AppStream/$basearch/os/ gpgcheck=1 enabled=1 gpgkey=//repos.theitroad.local/centos/$releasever/RPM-GPG-KEY-CentOS-Official [centosplus] name=CentOS-$releasever - Plus baseurl=//repos.theitroad.local/centos/$releasever/centosplus/$basearch/os/ gpgcheck=1 enabled=0 gpgkey=//repos.theitroad.local/centos/$releasever/RPM-GPG-KEY-CentOS-Official [extras] name=CentOS-$releasever - Extras baseurl=//repos.theitroad.local/centos/$releasever/extras/$basearch/os/ gpgcheck=1 enabled=1 gpgkey=//repos.theitroad.local/centos/$releasever/RPM-GPG-KEY-CentOS-Official [PowerTools] name=CentOS-$releasever - PowerTools baseurl=//repos.theitroad.local/centos/$releasever/PowerTools/$basearch/os/ gpgcheck=1 enabled=0 gpgkey=//repos.theitroad.local/centos/$releasever/RPM-GPG-KEY-CentOS-Official [cr] name=CentOS-$releasever - cr baseurl=//repos.theitroad.local/centos/$releasever/cr/$basearch/os/ gpgcheck=1 enabled=0 gpgkey=//repos.theitroad.local/centos/$releasever/RPM-GPG-KEY-CentOS-Official [fasttrack] name=CentOS-$releasever - fasttrack baseurl=//repos.theitroad.local/centos/$releasever/fasttrack/$basearch/os/ gpgcheck=1 enabled=0 gpgkey=//repos.theitroad.local/centos/$releasever/RPM-GPG-KEY-CentOS-Official
其中:repos.theitroad.local是用于Repo访问的域
清理当前Repo缓存:
sudo yum clean all
更新:
$sudo yum makecache CentOS-8 - AppStream 1.2 MB/s | 4.3 kB 00:00 CentOS-8 - Base 3.9 kB/s | 3.9 kB 00:01 CentOS-8 - Extras 881 kB/s | 1.5 kB 00:00 Metadata cache created.
列出存储库:
$sudo yum repolist Last metadata expiration check: 0:02:10 ago on Fri 01 Nov 2019 12:41:38 PM EAT. repo id repo name status AppStream CentOS-8 - AppStream 5,089 BaseOS CentOS-8 - Base 2,843 extras CentOS-8 - Extras 3
从中运行系统更新。
sudo yum -y update
启用禁用的存储库
默认情况下,某些存储库是禁用的。要启用它们,请安装yum-utils软件包。
sudo yum install yum-utils
要激活存储库,请使用以下命令:
sudo yum-config-manager --enable reponame
以下是启用PowerTools和centosplus存储库的示例:
sudo yum-config-manager --enable PowerTools sudo yum-config-manager --enable centosplus
确认:
$sudo yum repolist CentOS-8 - AppStream 1.7 MB/s | 4.3 kB 00:00 CentOS-8 - Base 2.0 MB/s | 3.9 kB 00:00 CentOS-8 - PowerTools 75 MB/s | 1.8 MB 00:00 CentOS-8 - Plus 58 MB/s | 833 kB 00:00 CentOS-8 - Extras 783 kB/s | 1.5 kB 00:00 repo id repo name status AppStream CentOS-8 - AppStream 5,089 BaseOS CentOS-8 - Base 2,843 PowerTools CentOS-8 - PowerTools 1,507 centosplus CentOS-8 - Plus 26 extras CentOS-8 - Extras 3
要禁用,请用禁用替换启用。
我们现在可以使用本地CentOS 8镜像。