问题描述

由于部署环境有诸多限制,只能在纯内网(无法跟公网互通)环境下安装软件,所以需要把软件包下载下来放在服务器本地进行安装。

系统版本为 CentOS 8.2,使用 createrepo 命令创建 repodata 后,在进行部分软件安装时,会出现 Error: No available modular metadata for modular package 报错,详情如下图:

centos8.x-dnf-install-error-no-modular-metadata.png

为解决以上问题,需要安装 modulemd-tools 等软件来生成 modular metadata。所以可以在有网络的相同系统版本的服务器下进行操作,最后将生成好的 repo package 目录打包压缩上传到此服务器,最后配置好repo源即可。

 

安装 modular metadata 生成工具

安装相关依赖

$ sudo dnf install gcc gcc-c++ python3 python3-devel python3-createrepo_c python3-libdnf python3-libmodulemd libmodulemd

下载 modulemd-tools 源码包并安装

$ git clone https://github.com/rpm-software-management/modulemd-tools.git
$ cd modulemd-tools/repo2module/
$ sudo python3 setup.py install --user

 

创建 repodata 和 modular metadata

# 进入 packages 目录
$ sudo cd /mnt/packages

# 创建 repodata
$ sudo createrepo_c .

# 生成 modular metadata(建议在root账号下操作,否则执行时可能会报错)
$ /root/.local/bin/repo2module -s stable ./
$ modifyrepo_c --mdtype=modules modules.yaml repodata/

以上步鄹执行完成后,会在 repodata 目录下生成一个以 -modules.yaml.gz 为后缀的文件。

此时,再进行软件包安装时就已经可以正常安装了。

 

参考文档