如何使用Rsync和Nginx创建CentOS 8本地存储库镜像

时间:2020-02-23 14:30:29  来源:igfitidea点击:

在本指南中,很好地探索了如何使用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镜像。