对于习惯了 Redhat 族系统的用户来说,使用/etc/sysconfig/network-scripts 已经非常习惯,猛然切换到 Debian 会有些不适应。
如何才能在Debian族系统中,使用Redhat中的方法配置网络呢?
其实很简单。NetworkManager就可以做到。
NetworkManager支持各个操作系统的网络配置的方式,是通过插件化的方式。对于Redhat系统来说,是ifcfg-rh插件;而对于Debian族来说,则是ifupdown插件。
所以,我们只需要让NetworkManager不使用ifupdown插件,而是使用ifcfg-rh插件,就可以实现Redhat系统里那种用/etc/sysconfig/network-scripts文件来配置网络。
步骤分两步:
在NetworkManager的配置文件里关闭/开启相应插件
NetworkManager的配置文件为/etc/NetworkManager/NetworkManager.conf,其中[main]块可以配置使用的插件。
[main]
plugins=keyfile,ifupdown
首先把这里换成
[main]
plugins=ifcfg-rh
,之后保存。
编译ifcfg-rh插件
配置里打开以后,要确定系统里有没有ifcfg-rh插件。
NetworkManager加载插件的路径为/usr/lib64/NetworkManager/$VERSION/libnm-settings-plugin-ifcfg-rh.so,其中$VERSION为当前系统的NetworkManager版本。
如果这个路径没有相应的插件so,则需要自己编译。
ifcfg-rh插件是NetworkManager内置的插件,只要下载标准的NetworkManager代码就可以编译。
对于Debian系统,可以使用如下命令下载并且完成编译:
apt build-dep network-manager
apt source network-manager
cd network-manager-*
dpkg-buildpackage -us -uc #或者 ./debian/rules binary
编译完,把src/settings/plugins/ifcfg-rh/.libs目录下面的libnm-settings-plugin-ifcfg-rh.so复制到/usr/lib64/NetworkManager/$VERSION 目录去就可以了。
增加dbus配置
此时,使用NetworkManager会有一条安全方面的告警提示,是
…… couldn't acquire D-Bus service: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Connection ":1.20" is not allowed to own the service "com.redhat.ifcfgrh1" due to security policies in the configuration file
解决办法是把network-manager源代码目录src/settings/plugins/ifcfg-rh目录下面的dbus配置文件:nm-ifcfg-rh.conf复制到/etc/dbus-1/system.d里面去。
这个文件的内容是:
<!DOCTYPE busconfig PUBLIC
"-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<policy context="default">
<allow send_destination="com.redhat.ifcfgrh1"/>
</policy>
<policy user="root">
<allow own="com.redhat.ifcfgrh1"/>
</policy>
</busconfig>