CentOS 8 正式发布有一段时间了,但是各大云服务商的镜像也就这段时间才准备好,比如阿里云前段时间才有 CentOS 8 的系统镜像。
作为一个爱尝鲜的人,小山第一时间把服务器迁移到了 CentOS 8,之前刚发布的时候只在虚拟机体验过,也没怎么折腾,但是真正到了生产环境,坑还是很多的。
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
这样的格式来指定配置文件,不过在启用/禁用/查看模块的命令不能使用这样的语法。
希望这个教程可以帮到正在使用 CentOS 8 的小伙伴,之后我还会带来一些关于 CentOS 8 的文章,如果你有其他关于 CentOS 8 的问题,欢迎加入 QQ 群与我交流。
微信扫描二维码关注我们
如果觉得文章有帮助到你,可以点击下方的打赏按钮赞助下服务器费用。
文章评论
yum 跟 dnf 有什么区别
@LOGI dnf 属于 yum 的下一代版本,弥补 yum 的不足之处,带来一些新的功能,dnf 的后端实际上还是 yum。