![CentOS 7 - 通配符接口脚本?](https://linux22.com/image/92587/CentOS%207%20-%20%E9%80%9A%E9%85%8D%E7%AC%A6%E6%8E%A5%E5%8F%A3%E8%84%9A%E6%9C%AC%EF%BC%9F.png)
CentOS 7 是否有内置机制可以使用经典网络脚本配置网络接口,同时允许在设备名称中使用通配符?
大致如下:
/etc/sysconfig/network-scripts/ifcfg-*
...将适用于每个检测到的设备。
这里的用例是我正在构建一个 CentOS 7 映像,该映像将在各种硬件上使用。某些硬件具有多个 NIC,其他硬件则具有单个 NIC。因此,当映像第一次启动时,任何预先配置的脚本不一定与/etc/sysconfig/network-scripts/
当前设备名称匹配。
实际的 ifcfg 脚本和网络并不陌生,它是一个简单的 IPv4/DHCP 网络。
我试图避免的一些事情(如果可能的话):
- 网络管理员。
- 更改 udev 的默认接口名称。
预配置是这里的主要目标。谢谢!
答案1
我不认为有任何通配符方法可以做到这一点,但您可能有一个运行的 init 脚本或 systemd 单元前查找/sys/class//net
(或执行ip link
)并为找到的每个接口的网络初始化可以创建(如果丢失)必要的 ifcfg- 文件。
就像是
#!/bin/bash
create_dev()
{
dev=$1
echo IPV6INIT=yes
echo IPV6_AUTOCONF=yes
echo BOOTPROTO=dhcp
echo DEVICE=$dev
echo ONBOOT=yes
}
for dev in *
do
CFG=/etc/sysconfig/network-scripts/ifcfg-$dev
if [ ! -e $CFG ]
then
create_dev $dev > $CFG
fi
done
对于包装器来说可能就足够了。然后,您需要创建必要的单元或初始化脚本,以确保它在启动过程中足够早地运行。
答案2
虽然 Stephen Harris 的答案是一个不错的解决方案,但它故意避免使用网络管理器,而网络管理器现在是传统 Linux 发行版的标准。虽然传统的初始化脚本目前仍适用于网络设备,但对它们的支持正在逐步取消,取而代之的是网络管理器。这就是为什么它是默认值的原因。
我强烈建议您习惯网络管理器,因为传统的初始化脚本将来将会消失(在几乎所有常见的发行版中)。在这种情况下,您可以轻松地利用它来发挥自己的优势。
网络经理将要尝试使用默认 DHCP 设置启动新接口(默认情况下,正常情况下)。他们nmcli con show
立即被列在下面。网络管理器将自动为您生成 ifcfg-* 文件。如果您在环境中使用 DHCP,则这不会成为问题。如果您使用静态,则需要做更多的工作。
看man nmcli-examples
。