Loading... **CentOS 8 最大的坑莫过于安装软件包,CentOS 8 跟随上游 RHEL 8 引入了新的仓库 AppStream,这个仓库通过流式更新可以为 CentOS 带来新的版本,不会像以前那样,软件包过于陈旧。但是这样带来一个问题,如何保证用户的迁移成本,比如一些程序运行时,主板本对于大部分人来说不能轻易更新。解决问题的方法是引入模块化。模块化让软件包仓库可以同时分发相同软件的不同版本,一个模块代表一个版本,需要指定版本安装或启用对应模块即可,一个模块可以包含多个软件包以解决依赖性问题。** **当你在 CentOS 8 添加新的没有模块的软件仓库,比如 NodeJS 的官方仓库,然后准备运行**`dnf install nodejs`安装的时候,却发现软件版本没有变,并没有使用第三方软件仓库的包,这是因为模块拥有更高的优先级,而第三方软件仓库没有引入模块化或者是模块没有被启用,解决方法是禁用掉当前启用的模块或者启用新的模块。 **你可以通过**`dnf module`命令来管理模块,常用的用法: **模块列表:**`dnf module list` **安装模块:**`dnf module install <module_spec>` **卸载模块:**`dnf module uninstall <module_spec>` **启用模块:**`dnf module enable <module_spec>` **禁用模块:**`dnf module disable <module_spec>` **查看模块:**`dnf module info <module_spec>` **关于 ****module\_spec** 取值,不同的命令有些许不同,先列出模块列表,可以看到四列输出,分别是:**Name、Stream、Profiles、Summary**,除了 **Summary** 之外其他三列都有用。 **比如一个模块的 ****Name** 是 nodejs,**Stream** 是 10,可以使用`dnf module install nodejs:10`来安装这个模块,也可以使用`dnf module disable nodejs:10`禁用掉这个模块,比如上面我们需要安装最新的 NodeJS 就需要禁用掉内置的模块,模块被禁用后,模块里的软件包就不会被安装,所以当前如果没有包含 nodejs 的另一个软件仓库,禁用以后,就无法使用 dnf 安装 nodejs。 **模块不需要启用也可以直接安装** **如果有多个模块的 Name 相同,但 Stream 不同,在启用新的 Stream 之前必须禁用当前启用的 Stream。** **Profiles** 列出的是当前模块可用的配置文件,如果没有指定文件配置文件,默认安装第一个。比如 PHP 模块有三个配置文件:`common, devel, minimal`,如果安装开发环境软件包,可以使用`dnf module install php:7.2/devel`这样的格式来指定配置文件,不过在启用/禁用/查看模块的命令不能使用这样的语法。 最后修改:2024 年 03 月 04 日 © 禁止转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,就赞赏一下吧~
1 条评论
你的文章总是能给我带来欢乐,谢谢你!http://www.szheyt.com