我正在使用 PXE 安装我的 Linux 操作系统,并且我想使用变量或文件来自动化我的过程。我需要知道如何从另一个文件导入 IP 地址并将其作为参数添加到 pxe ksnew.cfg 文件中。例如,如果我有这个 nfs 命令:
nfs --server=10.0.0.110
在 ksnew.cfg 文件中,我想将其替换为:
nfs --server=$ip
并从其他文件导入 $ip (我有许多服务器,它们使用不同的 IP)。
有办法做到这一点吗?还有其他方法可以解决我的问题吗?
谢谢
答案1
我的 kickstart 有点生疏,尽管您应该能够嵌入一些创建文件的 shell 脚本,然后可以由您的 kickstart 处理这些文件。
让我们假设以下代码片段:
%include /tmp/pre_network
firewall --disabled
%include /tmp/install_url
[ ... ]
%pre
#!/bin/sh
exec </dev/tty8 >/dev/tty8
chvt 8
#set the following vars with whatever logic applies in your case, ...
REMOTENFS=10.2.3.4
REMOTEPROXY=10.2.5.4
#//
echo "network --bootproto=dhcp --hostname=pxe.localdomain --noipv6" >/tmp/pre_network
if test "$REMOTENFS"; then
echo "nfs --server $REMOTENFS" >/tmp/pre_network
elif test "$REMOTEPROXY"; then
echo "url --url=http://mirror.centos.org/centos/7/os/x86_64/ --proxy=http://$REMOTE_PROXY:3128
else
echo "url --url=http://mirror.centos.org/centos/7/os/x86_64/
fi >/tmp/install_url
clear
chvt 1
%end
[ ... ]
最终,您将编辑该文件,%pre
以便它查找您的本地 IP、DHCP 推送的域名、curl
Web 服务或其他任何内容,...推断您的 nfs 服务器远程。
由于您询问如何从 kickstart 运行 sed 命令,请注意您还可以编写脚本来完成安装:
%post
#!/bin/sh
exec </dev/tty8 >/dev/tty8
chvt 8
sed -i 's|.*|myhostname|' /mnt/sysimage/etc/hostname
chvt 1
%end
答案2
sed -i "/nfs/s/=.*//g" ksnew.cfg file ;while read line; do sed "s/$/='$line'/g" ksnew.cfg file ; done <Inputfile_consists_of_ip's
ksnew.cfg 文件===> 配置文件
Inputfile_consists_of_ip's===> 文件由 IPS 列表组成
Inputfile_consists_of_ip 包含以下内容
10.10.10.11
11.1.1.2
3.3.3.5
所以输出将是
nfs --server==10.10.10.11
nfs --server==11.1.1.2
nfs --server==3.3.3.5