通过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 文件和描述的问题,以下是针对您提出的问题的建议:
在您的 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、子网掩码和网关。
CentOS 7 使用了一种新的网卡命名规则,它不再使用传统的 eth0、eth1 等命名。为了禁用这个特性并使用传统的 eth0、eth1 等命名,您可以在 bootloader 部分添加 net.ifnames=0
和 biosdevname=0
。如下所示:
bashCopy code
bootloader --append="net.ifnames=0 biosdevname=0" --location=mbr
此外,您需要将 ks 文件中的所有网络设备名称从 ens33
更改为 eth0
,以确保与传统的命名规则一致。
要防止无限制的系统安装,您可以在安装完成后使用 %post 部分更改默认的启动项。在 %post 部分添加以下命令:
bashCopy code
%post --interpreter=/bin/bash
grub2-set-default 1
%end
这会将默认的启动项设置为第二个菜单项,通常是本地硬盘上的操作系统。这样,在网络安装完成后,服务器将从本地硬盘启动而不是无限制地进行系统安装。
根据您的需求修改 ks 文件后,问题应该得到解决。希望这些信息对您有所帮助!
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
在ks文件中设置network信息是无法自动配置网卡信息的,因为这个信息只有在系统启动的时候才能生效。为了自动配置网卡地址,你可以使用pre
和post
脚本,在安装系统前和安装后对网卡进行配置。
首先,在ks文件中添加以下内容,指定pre
和post
脚本:
%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。
在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
配置文件中设置网卡名称。然后,它会重写配置文件并重启网络服务。
为了实现从网络启动安装系统,你需要创建一个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
配置文件重新设置为默认值。
希望这个回答可以帮到你。
如果我的回答解决了您的问题,