cobbler安装系统后网卡名称及网络配置问题

通过cobbler可以实现半自动化安装系统(因为需要手动选择菜单,安装对应的系统,默认local安装),但是安装centos7系统,有三个问题;*

1,在ks文件上设置了--bootproto=static --device=ens33 --onboot=yes --ip= --netmask --gateway= --ipv6=auto --activate,当系统安装好后查看网卡配置信息时,仍然时dhcp模式,并且IP,掩码,网关并没有配置;怎么可以通过设定的ks文件自动配置网卡信息?
2,在ks文件上配置的网卡名称--device=ens33,系统安装后,通过ifconfig看到的配置网卡名称仍然是eth0,但是网卡的配置文件名称(/etc/sysconfig/network-scripts/ifcfg-)是ens33,配置文件NAME=ens33,DEVICE=ens33(我不想用eth0作为网卡名称,我像让系统自己自动命名的网卡名称)。(ifconfig查看的网卡名称和网卡配置信息不一致!)因为ifconfig查看到的网卡是eth0和网卡配置文件名及配置文件内网卡名称ens33不同,导致配置/etc/sysconfig/network-scripts/ifcfg-ens33配置信息,重启网卡后不生效,需要将网卡配置文件名和配置文件的DEVICE、NAME,ens33改为eth0 ,并且关闭/卸载NetworkManager后,才可以通过/etc/sysconfig/network-scripts/ifcfg-eth0配置网卡,就是说比较麻烦,怎么才可以自动识别centos7的网卡名称信息,而不是手动输入指定网卡名称。cobbler默认好像就是eth0。
3,cobbler改变默认启动项(不是local)后,服务器启动后会无限的安装系统,通过什么方式可以实现,开机就从网络中安装系统,系统安装后,直接从local启动服务器,而不是在无人参与的情况下无限制的做系统?下面是ks文件信息。希望您能帮我解惑,越详细越好。
总结:目前我可以通过cobbler做系统,但是主要就是网卡(网络)部分出现问题,网卡名称我想用系统自动分配的名称,而不是、不是、不是(重要的话说三遍)类似eth0、eth1命名,我想让我所设置的,做完系统就是我想要的,就跟用系统盘做的一样,如果是多网卡怎么配置。可以把我下面的ks文件修改一下或者重新做一个也行。还有一个问题,我通过配置/var/lib/tftpboot/pxelinux.cfg/default文件可以设置默认选择的启动菜单。但是做完系统后,仍然还会选择默认菜单,出现重复做系统的情况。用什么办法可以实现,从开机自动选择系统菜单做系统,系统做完重启之后,实现本地(local)开机,而不是再次选择默认的系统菜单。



install
keyboard 'us'
#rootpw --iscrypted="$1$random-p$hWuOLQDqdHnV5/VQDgxS60" 
rootpw --plaintext zzzaaa
url --url="$tree"
lang en_US
auth  --useshadow  --passalgo=sha512
text
reboot
firstboot --disable

selinux --disabled
firewall --disabled
#network --bootproto=dhcp  --device=eth0 --onboot=yes --ipv6=auto --activate
network  --bootproto=static --device=ens33 --gateway=192.168.3.1 --ip=192.168.3.111 --nameserver=8.8.8.8 --netmask=255.255.255.0 --ipv6=auto --activate
#$SNIPPET('network_config')
network  --hostname=cobbler
timezone Asia/Shanghai

bootloader --append="net.ifnames=0" --location=mbr
zerombr
clearpart --all --initlabel

part /boot --fstype="xfs" --size=500
part / --fstype="xfs" --grow --size=1
part swap --fstype="swap" --size=4000
#part /data --fstype="xfs" --size=10000

%packages
@^minimal
autofs
vim-enhanced
yum-utils
bash-completion
net-tools
%end

%post --interpreter=/bin/bash
%end


```

参考GPT和自己的思路:
问题一
在ks文件中设置了网络配置参数,但是在安装后并没有生效,这可能是由于Kickstart引导镜像(initrd)中缺少网络驱动程序的原因。您可以尝试将所需的驱动程序添加到initrd中,以便在安装过程中使用。

步骤如下:

将所需的驱动程序文件(例如驱动程序文件的.ko文件)上传到Cobbler服务器的/var/lib/cobbler/kickstarts/目录中。

打开/var/lib/cobbler/kickstarts/centos7.ks文件。

在文件开头添加以下内容:

%pre
# Load necessary network driver modules.
# Substitute the driver module name and path according to your actual situation.
modprobe -v e1000e
# Check whether the module is loaded successfully
lsmod | grep e1000e
%end


在这里,我们使用modprobe命令加载一个名为e1000e的网络驱动程序模块,并使用lsmod命令验证是否已成功加载该模块。您需要将此内容更改为与您的实际情况相匹配的内容。

重新生成Kickstart引导镜像:

cobbler distro edit --name=centos7 --kopts='ksdevice=bootif lang=en_US keymap=us ip=dhcp inst.ks=http://cobbler.example.com/cblr/svc/op/ks/profile/centos7' --kopts-post='net.ifnames=0 biosdevname=0' --kopts-post-uninstall='net.ifnames=0 biosdevname=0' --breed=redhat --name=centos7 --arch=x86_64


在这里,我们使用cobbler distro edit命令为名为centos7的操作系统分发配置Kickstart引导选项。我们添加了--kopts-post='net.ifnames=0 biosdevname=0'参数以确保在安装后使用传统的网络接口名称(例如eth0)而不是预测性的接口名称(例如ens33)。

然后使用以下命令重新生成initrd:

cobbler distro edit --name=centos7 --kopts='ksdevice=bootif lang=en_US keymap=us ip=dhcp inst.ks=http://cobbler.example.com/cblr/svc/op/ks/profile/centos7' --kopts-post='net.ifnames=0 biosdevname=0' --kopts-post-uninstall='net.ifnames=0 biosdevname=0' --breed=redhat --name=centos7 --arch=x86_64 --initrd=/tmp/newinitrd.img


在这里,我们使用--initrd=/tmp/newinitrd.img参数指定新的initrd位置。

然后将生成的新initrd文件复制到TFTP根目录中:

cp /var/www/cobbler/ks_mirror/centos7-x86_64/images/pxeboot/initrd.img /var/lib/tftpboot/images/centos7-x86_64/newinitrd.img

然后,在Cobbler服务器上执行以下命令,重新导入CentOS 7的ISO镜像,以便Cobbler能够使用新的initrd文件:

cobbler import --name=centos7 --arch=x86_64 --path=/mnt/centos7 --breed=redhat


最后,重新启动Cobbler服务以使更改生效:

systemctl restart cobblerd
systemctl restart httpd

问题二
在ks文件上配置的网卡名称--device=ens33,但系统安装后,通过ifconfig看到的配置网卡名称仍然是eth0,这是因为 CentOS 7 引入了新的命名规则,使用基于持久性的网络接口命名方案 Predictable Network Interface Names。这种命名规则与旧的命名规则不同,主要是基于驱动程序和设备路径来命名网络接口,因此在 CentOS 7 中默认的网卡命名可能与 ks 文件中指定的名称不同。您可以通过在 ks 文件中设置 net.ifnames=0 选项,禁用这种命名规则,使其采用传统的网卡命名方式(例如 eth0、eth1 等)。修改 ks 文件中 network 部分的配置为:

network --bootproto=static --device=eth0 --ip=192.168.1.10 --netmask=255.255.255.0 --gateway=192.168.1.1 --nameserver=8.8.8.8 --noipv6 --hostname=test.example.com --activate --onboot=yes --netmask=255.255.255.0 --noipv6 --defroute

问题三
默认情况下,Cobbler 会在启动时显示一个菜单,允许用户选择从哪个镜像进行安装。如果您希望系统直接从网络安装系统并避免这个菜单,请编辑 /etc/cobbler/settings 并将 manage_dhcp 选项设置为 1,以启用 DHCP 服务。然后,在 Cobbler Web UI 中选择您要部署的系统并转到“ PXE 设置”选项卡。在“ PXE 其他设置”字段中,设置 kickstart_filename 选项为 “cobbler/systems/.ks”。在 .ks 文件中,将启动菜单隐藏并将系统默认引导到本地磁盘。例如:
在ks文件的开头添加以下内容

ignoredisk --only-use=sda
bootloader --location=mbr --driveorder=sda --append="rhgb quiet"

然后添加以下内容,隐藏菜单并将系统默认引导到本地磁盘
(以下代码应该替换为原来在ks文件中的menu命令)

%post
sed -i 's/^timeout 600/timeout 1/g' /boot/grub2/grub.cfg
sed -i 's/^#?GRUB_DEFAULT=saved/GRUB_DEFAULT=0/g' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
%end

请注意,这里将隐藏启动菜单,并默认将系统引导到本地磁盘。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
1.网络配置问题:
检查一下 ifcfg-ens33 文件,确保其中包含了类似下面的内容:

BOOTPROTO=static
IPADDR=192.168.3.111
NETMASK=255.255.255.0
GATEWAY=192.168.3.1


如果文件中没有这些信息,可以考虑添加这些内容,然后重启网络服务:

systemctl restart network


如果还是没有生效,可以检查一下 ifcfg-ens33 文件的权限和所有权,确保文件所有者是 root 用户,文件权限为 644。
·
2.网卡名称问题:
在 CentOS 7 中,由于引入了 Predictable Network Interface Names,网卡名称可能会被自动分配为类似 ens33 的名字,而不是以前的 eth0。在 cobbler 安装系统时,可以在 Kickstart 文件中指定 net.ifnames=0 biosdevname=0,以确保使用传统的网卡命名方案。您的 bootloader 配置已经包含了这个选项。
要使用 ens33 作为网卡名称,您需要在 Kickstart 文件中指定 net.ifnames=0 biosdevname=0 选项,并且您的系统中不能安装 NetworkManager 软件包。在网络配置中指定的 --device=ens33 参数只是一个提示,实际的网卡名称可能会被自动分配为其他的名称。
·
3.自动启动问题:
要在安装完成后从本地磁盘启动系统,您需要在 Kickstart 文件中包含以下内容:

bootloader --location=mbr --driveorder=sda --append="net.ifnames=0 biosdevname=0"


这将在系统安装完成后将 GRUB 安装到磁盘的 MBR(Master Boot Record)中,并将启动顺序设置为首先从硬盘引导。--append="net.ifnames=0 biosdevname=0" 部分同样用于禁用预测性网络接口命名。
·
另外,您还需要在 cobbler 中将系统的默认启动项设置为 local,可以通过 cobbler system edit --name=hostname --kopts='net.ifnames=0 biosdevname=0' 命令来实现,其中 hostname 为系统的主机名。这将为您的系统设置一个内核选项,以便在启动时禁用预测性网络接口命名。
·
最后,确保在系统安装完成后立即删除 ks.cfg 文件,否则系统将在每次启动时自动执行 Kickstart 文件,导致无限安装系统。可以使用以下命令删除 ks.cfg 文件:

rm -f /root/anaconda-ks.cfg


参考GPT和自己的思路,在ks文件中设置静态IP地址
首先,确保您的ks文件中正确设置了网络参数,以便进行静态IP地址配置。您可以通过以下方式来检查您的ks文件中是否正确设置了静态IP地址:

network  --bootproto=static --device=ens33 --gateway=192.168.3.1 --ip=192.168.3.111 --nameserver=8.8.8.8 --netmask=255.255.255.0 --ipv6=auto --activate

确认是否有拼写错误,例如IP地址,网关和掩码。如果没有任何错误,则应该可以自动配置静态IP地址。

2.配置自定义网络接口名
对于CentOS 7及更高版本,网络接口名称已更改为可预测的设备名称,这意味着您无法像以前一样使用eth0,eth1等名称,而必须使用可预测的设备名称,例如ens33,enp0s3等等。 为了自定义网络接口名称,请在ks文件中使用以下命令:

network --device=<your_interface_name> --bootproto=<dhcp/static> --ip=<your_ip_address> --netmask=<your_netmask> --gateway=<your_gateway> --nameserver=<your_nameserver> --hostname=<your_hostname> --onboot=<yes/no> --ipv6=<auto/enabled/disabled> --noipv4

3.修改默认启动项
您可以通过在ks文件中设置以下命令来更改默认启动项:

bootloader --append="inst.stage2=hd:LABEL=<your_label> inst.sshd"

在这里,您可以使用您自己的镜像标签替换,这样当系统重新启动时,它将使用您指定的启动设备。如果您希望系统安装后不重复安装,您需要在Cobbler服务器上更改系统的启动顺序。具体来说,您需要将系统的启动顺序更改为首先启动从硬盘启动,然后才能启动从网络启动。这样,当您重新启动系统时,它将首先尝试从硬盘启动,而不是从网络启动。

基于最新版ChatGPT4的回答,望采纳!!!有其他问题也可以询问我哦、”(最新版更智能,功能更加强大)

根据您提供的 ks 文件和描述的问题,以下是针对您提出的问题的建议:

  1. 网卡配置问题

在您的 ks 文件中,network 部分的语法存在问题。您需要在 --ip=--netmask=--gateway= 后面提供相应的值。例如:

bashCopy code
network --bootproto=static --device=ens33 --onboot=yes --ip=192.168.1.100 --netmask=255.255.255.0 --gateway=192.168.1.1 --ipv6=auto --activate

将这些值替换为您需要的 IP、子网掩码和网关。

  1. 网卡名称问题

CentOS 7 使用了一种新的网卡命名规则,它不再使用传统的 eth0、eth1 等命名。为了禁用这个特性并使用传统的 eth0、eth1 等命名,您可以在 bootloader 部分添加 net.ifnames=0biosdevname=0。如下所示:

bashCopy code
bootloader --append="net.ifnames=0 biosdevname=0" --location=mbr

此外,您需要将 ks 文件中的所有网络设备名称从 ens33 更改为 eth0,以确保与传统的命名规则一致。

  1. 防止无限制系统安装问题

要防止无限制的系统安装,您可以在安装完成后使用 %post 部分更改默认的启动项。在 %post 部分添加以下命令:

bashCopy code
%post --interpreter=/bin/bash
grub2-set-default 1
%end

这会将默认的启动项设置为第二个菜单项,通常是本地硬盘上的操作系统。这样,在网络安装完成后,服务器将从本地硬盘启动而不是无限制地进行系统安装。

根据您的需求修改 ks 文件后,问题应该得到解决。希望这些信息对您有所帮助!

以下答案由GPT-3.5大模型与博主波罗歌共同编写:

  1. 网络配置问题

在ks文件中设置network信息是无法自动配置网卡信息的,因为这个信息只有在系统启动的时候才能生效。为了自动配置网卡地址,你可以使用prepost脚本,在安装系统前和安装后对网卡进行配置。

首先,在ks文件中添加以下内容,指定prepost脚本:

%pre
# 在系统启动前备份network配置文件
cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33.bak

%end

%post
# 配置网卡信息
cat <<EOF >/etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens33
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
ONBOOT=yes
IPADDR=192.168.3.111
NETMASK=255.255.255.0
GATEWAY=192.168.3.1
DNS1=8.8.8.8
EOF

# 重启网络服务
systemctl restart network
%end

上面的脚本会将原来的/etc/sysconfig/network-scripts/ifcfg-ens33文件备份一份,并在安装完成后将ens33网卡的配置文件重新写入服务器。注意,UUID字段需要使用你自己网卡的UUID。

  1. 网卡名称问题

在CentOS 7中,网卡名称使用了新的命名规则,因此可能与ks文件中指定的不同。为了让系统自动识别网卡名称,可以使用以下方法:

# 在ks文件中添加以下内容
%post
# 获取网卡名称
NIC_NAME=$(ls /sys/class/net | grep '^e')

# 在grub2配置文件中设置网卡名称
grub2-set-default "CentOS Linux (3.10.0-514.6.1.el7.$(uname -i)) 7 (Core)"
sed -i "s/rd.driver.pre=.*$/& biosdevname=0 net.ifnames=0/" /etc/default/grub

# 重写网卡配置文件
cat <<EOF >/etc/sysconfig/network-scripts/ifcfg-$NIC_NAME
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=$NIC_NAME
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
ONBOOT=yes
IPADDR=192.168.3.111
NETMASK=255.255.255.0
GATEWAY=192.168.3.1
DNS1=8.8.8.8
EOF

# 重启网络服务
systemctl restart network
%end

这里是在ks文件中使用的post脚本,它会自动查找服务器上的网卡名称并在grub2配置文件中设置网卡名称。然后,它会重写配置文件并重启网络服务。

  1. 改变默认启动项问题

为了实现从网络启动安装系统,你需要创建一个PXE服务器,并在服务器上配置DHCP和TFTP服务。安装系统时,服务器会自动从我们的PXE服务器下载操作系统文件并重新启动到网络安装环境。在这里我们不会详细介绍这个过程,如果您需要帮助,可以参考这个 链接

如果您已经有一个可以通过PXE引导的服务器,并希望可以在安装完成后启动到本地系统,可以使用以下方法:

# 在ks文件中添加以下内容
%post
# 设置默认启动项为本地系统
grub2-set-default 0

# 重写grub2配置文件
cat <<EOF >/etc/default/grub
GRUB_TIMEOUT=5
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/centos-swap rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
EOF

# 重启grub2服务
grub2-mkconfig -o /boot/grub2/grub.cfg
%end

这里是在ks文件中使用的post脚本,它会将默认启动项设置为本地系统,并将grub2配置文件重新设置为默认值。

希望这个回答可以帮到你。
如果我的回答解决了您的问题,

img