最近项目中需要在服务器搭建本地离线yum仓库,并且需要兼容centos7和centos8,踩了不少坑,总结一下经验。
第一步 下载rpm包centos7、8下载rpm包方式一样。如下载ansible软件包至本地/opt/package/repo/目录。 示例: 方式一: yum install --downloadonly --downloaddir=/opt/package/repo/ ansible
方式二: yum -y install yum-utils yumdownloader --destdir=/opt/package/repo/ ansbile 注意:第一种不会下载已经安装了的软件包,因此推荐使用第二种方式下载。
第二步 创建repodata centos7使用用createrepo来创建repository仓库,如果系统里没有该命令的话需要先进行createrepo的安装。
yum -y install createrepocd /opt/package/repo/createrepo ./上述命令执行成功后会在该目录下创建一个repodata目录
centos8除了需要创建repodata 还需要创建modular metadata,如果只有repodata就会报错:No available modular metadata for modular package
安装modular metadata生成工具yum install createrepoyum install python3-devel python3 gcc yum install python3-createrepo_c libmodulemdgit clone https://github.com/rpm-software-management/modulemd-tools.git cd modulemd-tools/repo2module/ python3 setup.py install --user 创建repodata 和 modular metadata cd /opt/package/repo/createrepo .//root/.local/bin/repo2module -s stable -d . modules.yamlmodifyrepo_c --mdtype=modules modules.yaml repodata/上述命令执行成功后会在该目录下创建一个repodata目录和一个modules.yaml文件
安装文件服务 提供本机软件包目录访问 以使用nginx为例。 yum install nginx 安装完成后修改/etc/nginx/nginx.conf文件,修改端口号为9999、将根目录指向本地/opt/package/repo/目录 重启nginx服务 访问 curl http://本机ip:9999/ 成功
配置yum源 创建centos-local.repo文件写入以下内容
[centos-local]name=centos-localbaseurl=http://本机ip:9999/ gpgcheck=0enabled=1mv /etc/yum.repos.d /etc/yum.repos.d_bakmkdir /etc/yum.repos.dcp centos-local.repo /etc/yum.repos.d/使用yum repolist可查看yum源仓库是否创建成功
成功后可以使用yum install离线安装软件包了。