news 2026/4/25 14:53:58

构建银河麒麟V10 SP2离线环境下的高效私有yum仓库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
构建银河麒麟V10 SP2离线环境下的高效私有yum仓库

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 = 0

3.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 createrepo

4.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 1

7. 客户端配置与使用技巧

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 = 0

7.2 高级使用技巧

  1. 仓库优先级:当有多个仓库时,合理设置priority可以避免依赖混乱:

    priority=1

    数字越小优先级越高。

  2. 排除特定软件包

    exclude=package_name*
  3. 定时同步:可以设置cron任务定期同步官方仓库:

    0 3 * * * /usr/bin/reposync --repoid ks10-adv-os -p /data/repo/ --download-metadata --norepopath
  4. 空间监控:添加监控检查仓库磁盘空间,避免因空间不足导致服务中断。

8. 常见问题排查

8.1 软件包找不到

如果yum报告找不到软件包,首先检查:

yum list | grep package_name

如果能看到软件包但无法安装,尝试:

yum --disablerepo=* --enablerepo=kylin-network install package_name

8.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. 安全加固建议

  1. 访问控制:在Nginx配置中添加基础认证:

    auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/.htpasswd;
  2. HTTPS加密:使用自签名证书启用HTTPS:

    openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl.key -out /etc/nginx/ssl.crt
  3. 仓库校验:虽然我们禁用了gpgcheck,但在生产环境中建议配置正确的GPG密钥验证软件包完整性。

  4. 日志监控:定期检查Nginx访问日志,发现异常下载行为:

    tail -f /var/log/nginx/access.log | grep "\.rpm"

在实际项目中,我们团队发现私有yum仓库的稳定性直接影响整个运维效率。曾经因为一次仓库服务异常导致数十台服务器无法正常部署,从那以后我们建立了完善的监控机制。建议至少监控仓库服务的端口可用性、磁盘空间和同步任务状态。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 14:53:28

Zotero SciPDF:3分钟实现学术文献PDF自动下载的终极解决方案

Zotero SciPDF:3分钟实现学术文献PDF自动下载的终极解决方案 【免费下载链接】zotero-scipdf Download PDF from Sci-Hub automatically For Zotero7 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-scipdf 在学术研究的海洋中,文献管理是每…

作者头像 李华
网站建设 2026/4/25 14:51:38

PyMICAPS:气象工作者的终极Python可视化解决方案

PyMICAPS:气象工作者的终极Python可视化解决方案 【免费下载链接】PyMICAPS 气象数据可视化,用matplotlib和basemap绘制micaps数据 项目地址: https://gitcode.com/gh_mirrors/py/PyMICAPS 你是否曾为气象数据的复杂可视化而烦恼?面对…

作者头像 李华
网站建设 2026/4/25 14:49:27

Spyder 6.0:重新定义Python科学计算开发体验的技术架构演进

Spyder 6.0:重新定义Python科学计算开发体验的技术架构演进 【免费下载链接】spyder Official repository for Spyder - The Scientific Python Development Environment 项目地址: https://gitcode.com/gh_mirrors/sp/spyder 作为科学Python开发领域的标志性…

作者头像 李华
网站建设 2026/4/25 14:48:22

Ryujinx模拟器:5个新手必知的高效使用技巧与避坑指南

Ryujinx模拟器:5个新手必知的高效使用技巧与避坑指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 你是否想在电脑上畅玩Switch游戏,却被复杂的模拟器配置搞得…

作者头像 李华