变化之一 Fedora Linux 36 是新安装将 不再支持 ifcfg 文件来配置网络. 这些是什么,是什么取代了它们?
一点历史
在过去的美好时光中,将 Linux 机器连接到网络很容易。 对于连接到网络的每个接口卡,系统管理员会将配置文件放到 /etc 目录中。 该配置文件将描述特定网络的寻址配置。 在 Fedora Linux,配置文件实际上是一个 shell 脚本片段,如下所示:
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet DEVICE=eth0 BOOTPROTO=dhcp
启动时执行的 shell 脚本将读取文件并应用配置。 简单的。
然而,到了 2004 年底,情况发生了变化。 从字面上看——Wi-Fi 已经无处不在。 当时的便携式计算机可以快速连接到新网络,USB 总线甚至允许有线网络适配器在系统启动和运行时进出。 网络配置变得比以往任何时候都更加动态,使得现有的网络配置工具变得不切实际。 救援来了 网络管理器. 在一个 Fedora Linux 系统,NetworkManager 使用如下配置:
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet DEVICE=eth0 BOOTPROTO=dhcp
看起来很熟悉? 它应该。 从一开始,NetworkManager 就打算使用现有的配置格式。 事实上,它最终得到了可以在 NetworkManager 的内部配置模型和发行版的原生格式之间无缝转换的插件。 在 Fedora就是前面提到的 ifcfg 文件。
让我们仔细看看它们。
Ifcfg 文件
遗留网络服务,现在是 network-scripts 包的一部分,最初定义了 ifcfg 文件格式。 随包附带一个文件,名为 系统配置文件 这非常有帮助地记录了格式。
随着 NetworkManager 越来越受欢迎,它经常发现自己需要表达老式网络服务不支持的配置。 鉴于使用 shell 脚本配置事物的性质,添加新设置没什么大不了的。 未知的通常只是默默地忽略。 NetworkManager 关于 ifcfg 文件应该是什么样子的想法在 nm-设置-ifcfg-rh(5) 手动的。
一般来说,NetworkManager 会努力编写与传统网络服务配合良好的 ifcfg 文件。 然而,有时这是不可能的。 如今,NetworkManager 支持的网络连接类型的数量大大超过了传统网络服务可以配置的数量。 . 现在使用一种新格式来表达旧格式无法表达的内容。 这包括 VPN 连接、宽带调制解调器等。
密钥文件
新格式与 NetworkManager 的原生配置模型非常相似:
$ cat /etc/NetworkManager/system-connections/VPN.ovpn [connection] id=My VPN uuid=c85a7cdb-973b-491f-998d-b09a590af10e type=vpn [vpn] ca=/etc/pki/tls/certs/vpn-ca.pem connection-type=password remote=vpn.example.com username=lkundrak service-type=org.freedesktop.NetworkManager.openvpn [ipv6] method=auto never-default=true
熟悉 Linux 系统的每个人都应该立即熟悉实际的格式。 它是“ini 文件”或“keyfile”——一组纯文本键值对,很像 ifcfg 文件使用的,分组为部分。 这 nm 设置密钥文件(5) 手册彻底记录格式。
使用这种格式的主要优点是它非常类似于 NetworkManager 关于如何表达网络配置的想法,在内部和 D-Bus API 上都使用。 在不考虑世界年轻时设计的机制的怪癖的情况下更容易扩展,而没有远见的好处。 这意味着更少的代码、更少的惊喜和更少的错误。
事实上,没有什么是 keyfile 格式不能表达 ifcfg 文件可以的。 它可以像 VPN 或调制解调器一样表达简单的有线连接。
迁移到密钥文件
传统的网络服务为我们服务了很多年,但它的时代已经过去了。 Fedora Linux 在许多版本之前都放弃了它,没有它,似乎没有理由使用 ifcfg 文件。 也就是说,对于新配置。 尽管 Fedora Linux 仍然支持 ifcfg 文件,它默认编写密钥文件已经有一段时间了。
从…开始 Fedora Linux 36,ifcfg 支持将不再存在于新安装中。 如果您仍在使用 ifcfg 文件,请不要担心 – 现有系统会继续升级。 尽管如此,您仍然可以决定卸载它并将您的配置转移到密钥文件中。 继续阅读以了解如何操作。
如果您像我一样,多年前就安装了系统,并且混合了密钥文件和 ifcfg 文件。 以下是如何检查:
$ nmcli -f TYPE,FILENAME,NAME conn TYPE FILENAME NAME ethernet /etc/sysconfig/network-scripts/ifcfg-eth0 eth0 wifi /etc/sysconfig/network-scripts/ifcfg-Guest Guest wifi /etc/NetworkManager/system-connections/Base48 Base48 vpn /etc/NetworkManager/system-connections/VPN.ovpn My VPN
这 example 显示必须始终使用密钥文件的 VPN 连接和大概在之后创建的 Wi-Fi 连接 Fedora Linux 默认切换到写入密钥文件。 还有一个使用 ifcfg 插件的以太网连接和 Wi-Fi 连接。 让我们看看如何将它们转换为密钥文件。
NetworkManager 的命令行实用程序, nmcli(1),获得了一个新的连接迁移命令,该命令可以更改连接配置文件使用的配置后端。
备份 /etc/sysconfig/network-scripts/ifcfg-* 文件是个好主意,以防出现任何问题。 备份后,您可以尝试将单个连接迁移到不同的配置后端(默认为密钥文件):
$ nmcli connection migrate eth0 Connection 'eth0' (336aba93-1cd7-4cf4-8e90-e2009db3d4d0) successfully migrated.
它奏效了吗?
$ nmcli -f TYPE,FILENAME,NAME conn TYPE FILENAME NAME ethernet /etc/NetworkManager/system-connections/eth0.nmc eth0 wifi /etc/sysconfig/network-scripts/ifcfg-Guest Guest wifi /etc/NetworkManager/system-connections/Base48 Base48 vpn /etc/NetworkManager/system-connections/VPN.ovpn My VPN
凉爽的。 我可以无缘无故地将其迁移回来吗?
$ nmcli conn migrate --plugin ifcfg-rh eth0 Connection 'eth0' (336aba93-1cd7-4cf4-8e90-e2009db3d4d0) successfully migrated.
优秀的。 在不指定更多选项的情况下,“connection migrate”命令可确保所有连接都使用密钥文件后端:
$ nmcli conn migrate Connection '336aba93-1cd7-4cf4-8e90-e2009db3d4d0' (eth0) successfully migrated. Connection '3802a9bc-6ca5-4a17-9d0b-346f7212f2d3' (Red Hat Guest) successfully migrated. Connection 'a082d5a0-5e29-4c67-8b6b-09af1b8d55a0' (Base48) successfully migrated. Connection 'c85a7cdb-973b-491f-998d-b09a590af10e' (Oh My VPN) successfully migrated.
就这样。 现在您的系统没有 ifcfg 文件,支持它们的配置后端没有用,您可以将其删除:
# dnf remove NetworkManager-initscripts-ifcfg-rh …
你的系统现在和以前一样工作,但你可以高兴,因为它现在是现代的。