NetworkManager 中 Initscripts 的 ifcfg-rh 格式及其未来

NetworkManager 是一个用于在 Linux 上配置网络的守护进程。这都是关于连接配置文件的,这些配置文件由用户创建并由 NetworkManager“激活”。配置文件只是一堆带有定义的键和值的设置和配置值,可以通过 D-Bus 发送或保存到磁盘。目前存在用于此目的的两种文件格式: keyfile ifcfg-rh . 让我们来看看** ifcfg-rh 格式的历史和未来**。

关于initscripts

非常简短的历史版本是各种 Linux 发行版使用 System V“initscripts”进行系统配置和管理。例如,Fedora 变体在 github/fedora-sysv 处(未)维护。启动脚本的一部分被关注网络,并提供两个脚本的ifupifdown你和的SysV风格的初始化服务’网络’。在Fedora和RHEL,用户可以编辑文件,比如在/ etc / sysconfig / network中的脚本/的ifcfg-eth0的根据文档 。这些文件是“配置文件”,因为它们是网络接口的配置。

initscripts 的网络脚本部分实际上是一堆 shell 脚本,它们解析 ifcfg 文件(通过将它们作为 shell 脚本执行)并相应地配置网络。他们通过调用 iproute2 ip工具)来设置内核中的接口和 IP 地址。但是,脚本也可以启动ISC的dhclient的做DHCP,在这种情况下,DHCP守护程序始终在后台运行。

因此,initscripts 是一个简单的东西,可以很好地适用于它们。但它们是完成任务并退出的一次性命令。这是一个基本的限制,尽管它们在下次运行时会留下一些状态——比如 dhclient 的 PID 文件或接口上配置的 IP 地址。另一个问题是他们的 API 本质上是让用户编写一个 ifcfg 文件并重新启动。是的,您也可以手动调用ifupifdown来应用更改,但这在微妙的情况下可能无法可靠地工作。例如,如果你改变了DEVICE =名字在ifcfg文件。这是目前最多,ifdown你不知道有什么要拆除的。或致电ifup的连续两次可能会导致错误。脚本根本不知道当前状态。这样的 API 不太适合构建配置网络的应用程序,例如 GUI 或 cockpit 。提供这样的 API 是 NetworkManager 存在的原因 的主要原因。

NetworkManager 处理 ifcfg 文件

当 NetworkManager 于 2004 年左右首次推出时,initscripts 和 ifcfg 是在 Fedora Core 上配置网络的方式。因此,NetworkManager 也以 ifcfg 格式保存其连接配置文件,因为用户已经熟悉该格式并且它已经存在。Fedora/RHEL 上的 initscripts 也开始与 NetworkManager 集成。当你打电话ifup的,该脚本会检查NetworkManager的是否正在运行和管理配置文件,在这种情况下,该脚本将调用nmcli连接起来让NetworkManager的处理。这可以通过配置的密钥来防止NM_CONTROLLED =没有中的ifcfg文件。

虽然目标是 initscripts 和 NetworkManager 可以以类似的方式使用相同的 ifcfg 文件,但实际上这仅适用于简单的配置。NetworkManager 定义了大量不受 initscripts 支持的附加 shell 变量 。同样,在某些方面,initscripts 的行为与 NetworkManager 不同。例如,NetworkManager 不支持 IP 别名,并且在 ifcfg 文件中表达 Openvswitch 和 Wi-Fi 配置的方式从根本上是不兼容的。此外,并非每个 NetworkManager 配置文件都可以以 ifcfg 格式保存,在这种情况下 NetworkManager 始终使用keyfile格式。

在Fedora 29 网络的脚本包被分割出来启动脚本包。在最近的Fedora和RHEL的network-scripts中包不是默认安装的。它们被视为已弃用,但仍可用于安装。请注意,启动脚本包本身做的事情超出了网络配置和部分仍在使用。

远离 ifcfg 文件

就 NetworkManager 而言,它一直在处理 ifcfg 文件。network-scripts中无论是在使用中,该文件格式由NetworkManager的使用,沿着一侧的keyfile这在INI样式文件格式/ {等,运行,usr / lib目录} /网络管理器/系统的连接。请注意,keyfile后端是 NetworkManager 的首选格式,并且可以处理所有连接类型。因此它总是在 NetworkManager 中启用。您只能选择是否使用’的ifcfg-RH 后端除了。这是通过做 main.plugins 在设置[ NetworkManager.conf](https://developer.gnome.org/NetworkManager/stable/NetworkManager.conf.html) 。在 Fedora 34 之前,此设置的默认值为 main.plugins=ifcfg-rh,keyfile 。[从 Fedora 34 开始](https://fedoraproject.org/wiki/Changes/NetworkManager_keyfile_instead_of_ifcfg_rh)默认为 main.plugins=keyfile,ifcfg-rh 。不同之处在于,现在 NetworkManager 最好以keyfile格式写入新配置文件。这种变化是从使用远步骤的ifcfg-RH `格式。

可能需要一段时间,直到 NetworkManager 完全摆脱对 ifcfg-rh 格式的支持。难点在于这涉及磁盘上的用户配置,并且 NetworkManager 在软件包升级或升级到较新的 Fedora/RHEL 版本期间不中断很重要。为此,我们还需要编写可以将 ifcfg 文件转换为keyfile格式的迁移工具。最后,如果用户或工具依赖于查找 ifcfg 文件,则会注意到更改并可能破坏现有设置。您不急于迁移,但请注意,最终我们希望摆脱 ifcfg 文件格式。原因是维护多种格式是有开销的,不仅对于开发,而且对于需要学习两种格式的用户以及如果使用了意外格式就无法使用的工具。

ifcfg 格式示例

如果我们创建一个新的连接配置文件

nmcli connection add type ethernet con-name eth0 \
     ifname eth0 autoconnect no

那么这将生成以下ifcfg文件。

# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=a64c3983-5a14-46ef-90e4-e3ec4e57e8a5
DEVICE=eth0
ONBOOT=no

相比之下,在keyfile格式中,这看起来像

# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
uuid=fbd13bf5-01d9-4569-ba79-f2d79daf79c8
type=ethernet
autoconnect=false
interface-name=eth0
permissions=

[ethernet]
mac-address-blacklist=

[ipv4]
dns-search=
method=auto

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=auto

[proxy]

主观上,我发现 ini 样式格式更好。它还基于 glib 的 GKeyfile API,可以将这些文件解析为某种形式的字典。此外,libnm 提供了 API 来转换 [ NMConnection ](https://developer.gnome.org/libnm /stable/NMConnection.html) 实例到/从keyfile。

Ref: https://blogs.gnome.org/thaller/2021/02/02/initscripts-ifcfg-rh-format-in-networkmanager-and-its-future/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开源技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值