1. 为什么需要私有yum仓库
在银河麒麟V10 SP2服务器环境中,很多企业都会遇到一个共同的痛点:生产服务器通常不允许直接连接互联网,这就导致无法使用官方的yum源来安装软件。想象一下,每次需要安装一个简单的nginx,都得手动下载源码包、解决各种依赖关系,这种体验就像是在用老式拨号上网下载高清电影一样痛苦。
我遇到过最夸张的情况是,为了安装一个中间件,运维同事花了整整三天时间手动解决依赖关系。这就是为什么我们需要搭建私有yum仓库——它相当于在企业内网建立了一个"软件超市",所有服务器都可以从这里快速获取所需的软件包和依赖项。
私有yum仓库带来的好处远不止节省时间这么简单。首先,它能确保所有服务器使用的软件版本完全一致,避免了"在我机器上能跑"的经典问题。其次,通过集中管理软件包,我们可以严格控制软件来源,大大提升了系统安全性。最重要的是,一旦搭建完成,后续新增服务器只需要简单配置就能立即使用,真正实现了"一次搭建,全网受益"的运维理念。
2. 环境准备与基础规划
2.1 硬件与系统要求
在开始之前,我们需要确保准备工作的万无一失。根据我的经验,建议使用至少100GB可用空间的服务器作为yum源主机。虽然基础仓库可能只需要20GB左右,但预留空间可以为后续扩展留有余地。我们曾经有个项目因为空间估算不足,导致同步中途失败,不得不从头再来。
系统方面,银河麒麟V10 SP2的aarch64版本是我们的主战场。这里有个容易忽略的细节:如果内网中有不同架构的服务器(比如同时存在x86和arm),就需要为每种架构单独准备仓库。我曾经踩过这个坑,在x86机器上同步的仓库给arm服务器用,结果当然是各种报错。
2.2 网络拓扑规划
理想的部署方案是准备一台可以临时连接外网的"跳板机"用于初始同步,然后将数据完整迁移到内网服务器。如果实在没有这样的条件,也可以考虑在其他环境同步好后,通过移动硬盘等方式将数据导入。这里要特别注意保持目录结构完整,我们团队曾经因为压缩包解压路径错误,导致整个下午都在排查为什么yum找不到软件包。
3. 获取官方软件仓库数据
3.1 理解银河麒麟的仓库结构
银河麒麟V10 SP2的官方仓库主要分为两个重要部分:ks10-adv-os(基础系统软件)和ks10-adv-updates(更新补丁)。根据我的实测,对于大多数场景,只需要同步ks10-adv-os就足够了。updates仓库不仅体积庞大(可能超过50GB),而且其中的软件更新可能会引入兼容性问题。
查看默认的repo配置是个好习惯:
vim /etc/yum.repos.d/kylin_aarch64.repo你会看到类似这样的配置:
[ks10-adv-os] name = Kylin Linux Advanced Server 10 - Os baseurl = https://update.cs2c.com.cn/NS/V10/V10SP2/os/adv/lic/base/aarch64/ enabled = 1 gpgcheck = 03.2 使用reposync同步仓库
创建存储目录是第一步,但要注意权限问题:
mkdir -p /data/repo chmod -R 755 /data同步命令看似简单,但有很多隐藏的技巧:
reposync --repoid ks10-adv-os -p /data/repo/ --download-metadata --norepopath这里的--download-metadata可以避免后续手动创建元数据的麻烦,而--norepopath则让文件直接存放在/data/repo下,而不是多一层ks10-adv-os目录。这个技巧是我们团队经过多次实践总结出来的最优方案。
同步过程可能会很漫长(视网络情况可能需要数小时),建议使用screen或tmux保持会话。我曾经因为SSH断连导致同步中断,不得不重新开始。
4. 构建仓库元数据
4.1 安装createrepo工具
虽然现代版本的reposync可以下载元数据,但手动创建仍然是必备技能:
yum install -y createrepo4.2 生成repodata
元数据是yum仓库的灵魂,它包含了所有软件包的依赖关系和属性信息。执行以下命令生成元数据:
createrepo -o /data/repo/ -v /data/repo/ --update这里的--update参数特别有用,它允许增量更新而不是每次都重新生成全部元数据。当仓库中有新软件包加入时,这个参数可以节省大量时间。
生成完成后,你应该能在/data/repo目录下看到repodata文件夹。检查其中的文件数量是个好习惯:
ls -l /data/repo/repodata/ | wc -l正常情况下应该能看到4-6个文件。如果数量异常少,可能是生成过程出了问题。
5. 配置本地yum源
5.1 准备仓库文件
将同步好的仓库文件打包迁移到内网服务器:
tar -zcvf kylin_repo.tar.gz /data/repo/在内网服务器解压时,保持路径一致非常重要:
mkdir -p /data tar -zxvf kylin_repo.tar.gz -C /5.2 配置repo文件
修改或创建repo配置文件:
vim /etc/yum.repos.d/kylin_local.repo内容如下:
[kylin-local] name = Kylin Local Repository baseurl = file:///data/repo enabled = 1 gpgcheck = 0 priority = 1这里的priority参数特别有用,它可以确保系统优先使用本地仓库而不是可能存在的其他仓库。
5.3 验证配置
执行以下命令验证配置是否正确:
yum clean all yum makecache yum repolist你应该能在输出中看到新配置的仓库。如果遇到问题,可以尝试添加--debug参数查看详细错误信息。
6. 通过HTTP发布yum仓库
6.1 使用Nginx搭建仓库服务
虽然httpd也能胜任,但我更推荐Nginx,它的性能更好,配置也更灵活。安装Nginx:
yum install -y nginx配置Nginx(/etc/nginx/nginx.conf):
server { listen 8080; server_name localhost; location /repo { alias /data/repo; autoindex on; autoindex_exact_size off; autoindex_localtime on; # 重要:设置正确的MIME类型 types { application/x-rpm .rpm; text/xml .xml; text/plain .txt; } } }这个配置有几个关键点:使用alias而不是root可以更灵活地控制路径;设置正确的MIME类型可以避免yum客户端下载文件时报错;autoindex相关参数让浏览器访问时能看到文件列表。
6.2 防火墙配置
开放端口并启动服务:
firewall-cmd --permanent --add-port=8080/tcp firewall-cmd --reload systemctl enable --now nginx验证服务是否正常:
curl http://localhost:8080/repo/你应该能看到仓库文件的列表。如果看不到,检查SELinux状态:
setsebool -P httpd_read_user_content 17. 客户端配置与使用技巧
7.1 配置客户端repo文件
在其他服务器上创建repo文件:
vim /etc/yum.repos.d/kylin_network.repo内容如下:
[kylin-network] name = Kylin Network Repository baseurl = http://yum-server-ip:8080/repo enabled = 1 gpgcheck = 07.2 高级使用技巧
仓库优先级:当有多个仓库时,合理设置priority可以避免依赖混乱:
priority=1数字越小优先级越高。
排除特定软件包:
exclude=package_name*定时同步:可以设置cron任务定期同步官方仓库:
0 3 * * * /usr/bin/reposync --repoid ks10-adv-os -p /data/repo/ --download-metadata --norepopath空间监控:添加监控检查仓库磁盘空间,避免因空间不足导致服务中断。
8. 常见问题排查
8.1 软件包找不到
如果yum报告找不到软件包,首先检查:
yum list | grep package_name如果能看到软件包但无法安装,尝试:
yum --disablerepo=* --enablerepo=kylin-network install package_name8.2 元数据损坏
有时repodata可能会损坏,解决方法:
rm -rf /data/repo/repodata createrepo -o /data/repo/ /data/repo/8.3 性能优化
对于大型仓库,可以考虑启用Nginx的gzip压缩:
gzip on; gzip_types application/xml text/plain application/x-rpm;9. 安全加固建议
访问控制:在Nginx配置中添加基础认证:
auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/.htpasswd;HTTPS加密:使用自签名证书启用HTTPS:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl.key -out /etc/nginx/ssl.crt仓库校验:虽然我们禁用了gpgcheck,但在生产环境中建议配置正确的GPG密钥验证软件包完整性。
日志监控:定期检查Nginx访问日志,发现异常下载行为:
tail -f /var/log/nginx/access.log | grep "\.rpm"
在实际项目中,我们团队发现私有yum仓库的稳定性直接影响整个运维效率。曾经因为一次仓库服务异常导致数十台服务器无法正常部署,从那以后我们建立了完善的监控机制。建议至少监控仓库服务的端口可用性、磁盘空间和同步任务状态。