实现私有Yum仓库

架构图

yum

每个系统的最后的路径都不一样,所以要看清,尽量跟大厂路径对齐,起始最重要的就是Packages和repodata,你看阿里云的路径,我们只要走到有repedata的文件夹下,就说明走对了,不用往下走了

主机拓扑

主机名 ip os
yum server 192.168.48.128 Rocker8.9
client1 192.168.48.11 Centos Stream 8
client2 192.168.48.10 Centos 7

前情提要:所有要进行上传yum源的机子都要挂载光盘,也可以选择网络备份

自动挂载光盘

1
2
3
4
5
6
#自动挂载
yum install autofs -y
systemctl enable --now autofs
sed -i '/^[[:space:]]*#.*misc.*\/etc\/auto.misc/ s/^#//' /etc/auto.master
systemctl restart autofs
ls /misc/cd

部署yum server

操作节点:【yum server】

Rocky8

1
2
3
4
5
6
7
8
9
10
11
12
13
yum install -y httpd
systemctl disable --now firewalld.service
systemctl enable --now httpd.service

#自己看前面的教程实现rocky8的光盘自动挂载

#将本地光盘中的内容CP到web目录中,给客户端使用
mkdir -p /var/www/html/rockylinux/8/{BaseOS,AppStream}
cp -r /misc/cd/BaseOS/* /var/www/html/rockylinux/8/BaseOS
cp -r /mnt/BaseOS/repodata /var/www/html/rockylinux/8/BaseOS/
cp -r /misc/cd/AppStream/* /var/www/html/rockylinux/8/AppStream
cp -r /mnt/AppStream/repodata /var/www/html/rockylinux/8/AppStream/
#这里可能有点慢,因为要拷贝的文件有点多

现在一些基本的文件都拷过去了访问网页就可以看见了

1
http://192.168.48.128/rockylinux/8/

image-20250711231852237

假设我还有个extras源想拷过去呢?前面那个是走本地,这个可以走网络,这时候就可以用到yum仓同步工具

1
https://mirrors.aliyun.com/rockylinux/8/extras/x86_64/os/

image-20250711232003433

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#备份自己的源
mkdir -p repo.bak
mv /etc/yum.repos.d/* repo.bak/
#这是私网yum server自己用的repo
cat > /etc/yum.repos.d/qianyios.repo<<"EOF2"
[AppStream]
name=AppStream
baseurl=file:///var/www/html/rockylinux/8/AppStream/x86_64/os/
gpgkey=/etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
gpgcheck=1
enabled=1
[BaseOS]
name=BaseOS
baseurl=file:///var/www/html/rockylinux/8/BaseOS/x86_64/os/
gpgkey=/etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
gpgcheck=1
enabled=1
[extras]
name=extras
baseurl=file:///var/www/html/rockylinux/8/extras/x86_64/os/
gpgkey=/etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
gpgcheck=1
enabled=1
EOF2
#这是公网用来同步的的repo
cat > /etc/yum.repos.d/qianyios-external-rocky8.repo<<"EOF2"
[AppStream-external-rocky8]
name=AppStream-external-rocky8
baseurl=https://mirrors.aliyun.com/rockylinux/8/AppStream/x86_64/os/
gpgkey=/etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
gpgcheck=1
enabled=1
[BaseOS-external-rocky8]
name=BaseOS-external-rocky8
baseurl=https://mirrors.aliyun.com/rockylinux/8/BaseOS/x86_64/os/
gpgkey=/etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
gpgcheck=1
enabled=1
[extras-external-rocky8]
name=extras-external-rocky8
baseurl=https://mirrors.aliyun.com/rockylinux/8/extras/x86_64/os/
gpgkey=/etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
gpgcheck=1
enabled=1
EOF2
1
2
3
4
5
#CentOS 8 dnf 工具集成 REPOID是那个repo里的[]里的名字
dnf reposync --repoid=REPOID --download-metadata -p /path
dnf reposync --help #查看帮助
#CentOS 7 以前版本,reposync工具来自于yum-utils包
reposync --repoid=REPOID --download-metadata -p /path
1
2
3
4
5
6
7
8
9
10
11
12
13
#创建好对应的路径,由于AppStream和BaseOS已经手动拉过去了,但是路径不对,我们就手动移一下
cd /var/www/html/rockylinux/8
mkdir -p AppStream/x86_64/os/
mkdir -p BaseOS/x86_64/os/
mv AppStream/{Packages,repodata} AppStream/x86_64/os/
mv BaseOS/{Packages,repodata} BaseOS/x86_64/os/
#开始同步,这里最后-p 路径的就不用加extras
mkdir -p /var/www/html/rockylinux/8/
yum reposync --repoid=extras-external-rocky8 --download-metadata -p /var/www/html/rockylinux/8/
#但是这个时候他的名字是extras-external-rocky8,所以你要把他下面的内容移动到extras去,还要注意有没有x86_64/os/
mv /var/www/html/rockylinux/8/{extras-external-rocky8,extras}
mkdir -p extras/x86_64/os/
mv extras/{Packages,repodata} extras/x86_64/os/

image-20250712000955889

这就是成果

测试自己是否能创建缓存成功

1
2
3
4
5
6
7
#用的是私有repo,记得把其他的repo移走
[root@localhost 8]# yum clean all && yum makecache
75 个文件已删除
AppStream 410 MB/s | 8.7 MB 00:00
BaseOS 237 MB/s | 2.6 MB 00:00
extras 6.4 MB/s | 15 kB 00:00
元数据缓存已建立。

Centos Strem 8

远程同步

操作节点:【Centos Strem 8】

从Centos Strem 8复制到yumserver,如果你没有centos stream 8的机子,那就直接选网络同步

1
2
3
4
#自己看前面的教程实现rocky8的光盘自动挂载
#将本地光盘中的内容CP到yum server 的web目录中
scp -r /misc/cd/BaseOS 192.168.48.128:/var/www/html/centos/8-stream/
scp -r /misc/cd/AppStream 192.168.48.128:/var/www/html/centos/8-stream/

网络同步

操作节点:【yum server】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#公网
cat > /etc/yum.repos.d/qianyios-external--Centos-Strem-8.repo<<"EOF2"
[AppStream-external-Centos-Strem-8]
name=AppStream-external-Centos-Strem-8
baseurl=https://mirrors.aliyun.com/centos/8-stream/AppStream/x86_64/os/
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official
gpgcheck=1
enabled=1
[BaseOS-external-Centos-Strem-8]
name=BaseOS-external-Centos-Strem-8
baseurl=https://mirrors.aliyun.com/centos/8-stream/BaseOS/x86_64/os/
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official
gpgcheck=1
enabled=1
[extras-external-Centos-Strem-8]
name=extras-external-Centos-Strem-8
baseurl=https://mirrors.aliyun.com/centos/8-stream/extras/x86_64/os/
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official
gpgcheck=1
enabled=1
EOF2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#前面已经复制过了AppStream和BaseOS,这里就不做演示了,如果你手动之后还想网络同步,我的建议是删掉手动的文件夹再来拉去取网络的
#AppStream
yum reposync --repoid=AppStream-external-Centos-Strem-8 --download-metadata -p /var/www/html/centos/8-stream/
#BaseOS
yum reposync --repoid=BaseOS-external-Centos-Strem-8 --download-metadata -p /var/www/html/centos/8-stream/
#extras
yum reposync --repoid=extras-external-Centos-Strem-8 --download-metadata -p /var/www/html/centos/8-stream/
#注意修改名字哦
mv /var/www/html/centos/8-stream/{AppStream-external-Centos-Strem-8,AppStream}
mv /var/www/html/centos/8-stream/{BaseOS-external-Centos-Strem-8,BaseOS}
mv /var/www/html/centos/8-stream/{extras-external-Centos-Strem-8,extras}
cd /var/www/html/centos/8-stream/extras
mv Packages x86_64/os/
mv repodata x86_64/os/

image-20250712004912125

centos7

手动的我就不写了一个意思,这里我就写网络的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#公网
cat > /etc/yum.repos.d/qianyios-external-centos7.repo<<"EOF2"
[base-external-centos7]
name=BaseOS-external-centos7
baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64
gpgkey=https://mirrors.aliyun.com/centos/7/os/x86_64/RPM-GPG-KEY-CentOS-7
gpgcheck=1
enabled=1
[extras-external-centos7]
name=extras-external-centos7
baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/
gpgkey=https://mirrors.aliyun.com/centos/7/os/x86_64/RPM-GPG-KEY-CentOS-7
gpgcheck=1
enabled=1
EOF2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
mkdir -p /var/www/html/centos/7/os/x86_64/
#bash
yum reposync --repoid=base-external-centos7 --download-metadata -p /var/www/html/centos/7/
#extras
yum reposync --repoid=extras-external-centos7 --download-metadata -p /var/www/html/centos/7/
#注意修改名字哦
mv /var/www/html/centos/7/{base-external-centos7,base}
cd /var/www/html/centos/7
mv base os/x86_64/

mv /var/www/html/centos/7/{extras-external-centos7,extras}
cd /var/www/html/centos/7/extras
mv Packages x86_64/
mv repodata x86_64/

image-20250712010733973

客户端使用

操作节点:【Centos Stream 8】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#备份原有的repo
mkdir repo.bak
mv /etc/yum.repos.d/* repo.bak/

#公网
cat > /etc/yum.repos.d/qianyios-external-Centos-Strem-8.repo<<"EOF2"
[AppStream-external-Centos-Strem-8]
name=AppStream-external-Centos-Strem-8
baseurl=http://192.168.48.128/centos/8-stream/AppStream/x86_64/os/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck=1
enabled=1
[BaseOS-external-Centos-Strem-8]
name=BaseOS-external-Centos-Strem-8
baseurl=http://192.168.48.128/centos/8-stream/BaseOS/x86_64/os/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck=1
enabled=1
[extras-external-Centos-Strem-8]
name=extras-external-Centos-Strem-8
baseurl=http://192.168.48.128/centos/8-stream/extras/x86_64/os/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck=1
enabled=1
EOF2
yum clean all && yum makecache
#成功
[root@qianyi ~]# yum clean all && yum makecache 13 files removed
AppStream-external-Centos-Strem-8 205 MB/s | 7.9 MB 00:00
BaseOS-external-Centos-Strem-8 158 MB/s | 2.7 MB 00:00
extras-external-Centos-Strem-8 6.2 MB/s | 18 kB 00:00
Metadata cache created.
[root@qianyi ~]#

如果他报这个错,你要确保你的extras下的那个路径有没有repodata这个文件夹,或者看看路径对不对

image-20250712130750985

操作节点:【centos7】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#备份原有的repo
mkdir repo.bak
mv /etc/yum.repos.d/* repo.bak/

cat > /etc/yum.repos.d/qianyios-external-centos7.repo<<"EOF2"
[base-external-centos7]
name=BaseOS-external-centos7
baseurl=http://192.168.48.128/centos/7/os/x86_64/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
gpgcheck=1
enabled=1
[extras-external-centos7]
name=extras-external-centos7
baseurl=http://192.168.48.128/centos/7/extras/x86_64/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
gpgcheck=1
enabled=1
EOF2
yum clean all && yum makecache

#成功
[root@localhost ~]# yum clean all && yum makecache
Loaded plugins: fastestmirror, langpacks
Cleaning repos: base-external-centos7 extras-external-centos7
Cleaning up list of fastest mirrors
Other repos take up 102 M of disk space (use --verbose for details)
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
base-external-centos7 | 3.6 kB 00:00:00
extras-external-centos7 | 2.9 kB 00:00:00
(1/7): base-external-centos7/group_gz | 153 kB 00:00:00
(2/7): base-external-centos7/filelists_db | 3.3 MB 00:00:00
(3/7): base-external-centos7/other_db | 1.3 MB 00:00:00
(4/7): base-external-centos7/primary_db | 3.3 MB 00:00:00
(5/7): extras-external-centos7/primary_db | 253 kB 00:00:00
(6/7): extras-external-centos7/filelists_db | 305 kB 00:00:00
(7/7): extras-external-centos7/other_db | 154 kB 00:00:00
Metadata Cache Created
[root@localhost ~]#

总结

1.你要下那个源仓库,你就走到对应的路径,如果看见repodata文件夹,那就是这个路径了

image-20250712132539806

2.如果你是本地测试,拉的文件太多很大,你终止了你可能拉不到repodata,所以你可以通过光盘里的scp过去yum server

3.万事都要确定好路径喔,如果repo写错了,你就看看他那个报错的路径下有没有repodata

特别声明
千屹博客旗下的所有文章,是通过本人课堂学习和课外自学所精心整理的知识巨著
难免会有出错的地方
如果细心的你发现了小失误,可以在下方评论区告诉我,或者私信我!
非常感谢大家的热烈支持!