pxe安装KS文件--实现优化IP分配

本文介绍了一种使用Kickstart文件自动安装CentOS并进行系统配置的方法。通过viks.cfg文件详细配置了网络参数、分区方案、用户管理及系统优化等。此外还提供了自动设置静态IP地址的脚本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vi ks.cfg #编辑

# Kickstart file automatically generated by anaconda.

install

url --url=http://192.168.21.128/os/

lang en_US.UTF-8

zerombr yes

key --skip

keyboard us

network --device eth0 --bootproto dhcp --onboot on

#network --device eth0 --bootproto static --ip 192.168.21.250 --netmask 255.255.255.0 --gateway 192.168.21.2 --nameserver 8.8.8.8 --hostname CentOS5.10

rootpw --iscrypted $1$QqobZZ1g$rYnrawi9kYlEeUuq1vcRS/

firewall --enabled --port=22:tcp

authconfig --enableshadow --enablemd5

selinux --disabled

timezone Asia/Shanghai

bootloader --location=mbr --driveorder=sda

# The following is the partition information you requested

# Note that any partitions you deleted are not expressed

# here so unless you clear all partitions first, this is

# not guaranteed to work

#clearpart --linux

clearpart --all --initlabel

part / --bytes-per-inode=4096 --fstype="ext3" --size=2048

part /boot --bytes-per-inode=4096 --fstype="ext3" --size=128

part swap --bytes-per-inode=4096 --fstype="swap" --size=500

part /data --bytes-per-inode=4096 --fstype="ext3" --grow --size=1

reboot

%packages

ntp

expect

@base

@core

@dialup

@editors

@text-internet

keyutils

trousers

fipscheck

device-mapper-multipath

%post

#同步系统时间

ntpdate cn.pool.ntp.org

hwclock --systohc

echo -e "0 1 * * * root /usr/sbin/ntpdate cn.pool.ntp.org > /dev/null" >> /etc/crontab

service crond restart

#添加用户组

groupadd maintain

groupadd develop

mkdir -p /home/maintain

mkdir -p /home/develop

#添加用户

useradd -g maintain user01 -d /home/maintain/user01 -m

echo "123456"|passwd user01 --stdin

useradd -g maintain user02 -d /home/maintain/user02 -m

echo "123456"|passwd user02 --stdin

useradd -g maintain user03 -d /home/maintain/user03 -m

echo "123456"|passwd user03 --stdin

useradd -g maintain user04 -d /home/maintain/user04 -m

echo "123456"|passwd user04 --stdin

#禁止root用户直接登录系统

sed -i "s/#PermitRootLogin yes/PermitRootLogin no/g" '/etc/ssh/sshd_config'

service sshd restart

#禁止开机启动的服务

chkconfig acpid off

chkconfig atd off

chkconfig autofs off

chkconfig bluetooth off

chkconfig cpuspeed off

chkconfig firstboot off

chkconfig gpm off

chkconfig haldaemon off

chkconfig hidd off

chkconfig ip6tables off

chkconfig isdn off

chkconfig messagebus off

chkconfig nfslock off

chkconfig pcscd off

chkconfig portmap off

chkconfig rpcgssd off

chkconfig rpcidmapd off

chkconfig yum-updatesd off

chkconfig sendmail off

#允许开机启动的服务

chkconfig crond on

chkconfig kudzu on

chkconfig network on

chkconfig readahead_early on

chkconfig sshd on

chkconfig syslog on

#禁止使用Ctrl+Alt+Del快捷键重启服务器

sed -i "s/ca::ctrlaltdel:\/sbin\/shutdown -t3 -r now/#ca::ctrlaltdel:\/sbin\/shutdown -t3 -r now/g" '/etc/inittab'

telinit q

#优化系统内核

echo -e "ulimit -c unlimited" >> /etc/profile

echo -e "ulimit -s unlimited" >> /etc/profile

echo -e "ulimit -SHn 65535" >> /etc/profile

source /etc/profile

sed -i "s/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g" '/etc/sysctl.conf'

echo -e "net.core.somaxconn = 262144" >> /etc/sysctl.conf

echo -e "net.core.netdev_max_backlog = 262144" >> /etc/sysctl.conf

echo -e "net.core.wmem_default = 8388608" >> /etc/sysctl.conf

echo -e "net.core.rmem_default = 8388608" >> /etc/sysctl.conf

echo -e "net.core.rmem_max = 16777216" >> /etc/sysctl.conf

echo -e "net.core.wmem_max = 16777216" >> /etc/sysctl.conf

echo -e "net.ipv4.netfilter.ip_conntrack_max = 131072" >> /etc/sysctl.conf

echo -e "net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180" >> /etc/sysctl.conf

echo -e "net.ipv4.route.gc_timeout = 20" >> /etc/sysctl.conf

echo -e "net.ipv4.ip_conntrack_max = 819200" >> /etc/sysctl.conf

echo -e "net.ipv4.ip_local_port_range = 10024 65535" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_retries2 = 5" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_fin_timeout = 30" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_syn_retries = 1" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_synack_retries = 1" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_timestamps = 0" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_tw_recycle = 1" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_tw_len = 1" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_keepalive_time = 120" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_keepalive_probes = 3" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_keepalive_intvl = 15" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_max_tw_buckets = 36000" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_max_orphans = 3276800" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_max_syn_backlog = 262144" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_wmem = 8192 131072 16777216" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_rmem = 32768 131072 16777216" >> /etc/sysctl.conf

echo -e "net.ipv4.tcp_mem = 94500000 915000000 927000000" >> /etc/sysctl.conf

/sbin/sysctl -p

#执行外部脚本

cd /root

wget http://192.168.21.128/autoip.sh

sh /root/autoip.sh

:wq! #保存退出



添加脚本,自动设置Linux系统静态IP地址、DNS、网关、计算机名称

cd /var/www/html

vi autoip.sh #编辑

#!/bin/sh

ROUTE=$(route -n|grep "^0.0.0.0"|awk '{print $2}')

BROADCAST=$(/sbin/ifconfig eth0|grep -i bcast|awk '{print $3}'|awk -F":" '{print $2}')

HWADDR=$(/sbin/ifconfig eth0|grep -i HWaddr|awk '{print $5}')

IPADDR=$(/sbin/ifconfig eth0|grep "inet addr"|awk '{print $2}'|awk -F":" '{print $2}')

NETMASK=$(/sbin/ifconfig eth0|grep "inet addr"|awk '{print $4}'|awk -F":" '{print $2}')

cat >/etc/sysconfig/network-scripts/ifcfg-eth0<<EOF

DEVICE=eth0

BOOTPROTO=static

BROADCAST=$BROADCAST

HWADDR=$HWADDR

IPADDR=$IPADDR

NETMASK=$NETMASK

GATEWAY=$ROUTE

ONBOOT=yes

EOF

IPADDR1=$(echo $IPADDR|awk -F"." '{print $4}')

cat >/etc/sysconfig/network-scripts/ifcfg-eth1<<EOF

DEVICE=eth1

BOOTPROTO=static

BROADCAST=10.0.0.255

HWADDR=$(/sbin/ifconfig eth1|grep -i HWaddr|awk '{print $5}')

IPADDR=10.0.0.$IPADDR1

NETMASK=255.255.255.0

ONBOOT=yes

EOF

HOSTNAME=OsYunWei_HZ_$(echo $IPADDR|awk -F"." '{print $4}')

cat >/etc/sysconfig/network<<EOF

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=$HOSTNAME

GATEWAY=$ROUTE

EOF

echo "127.0.0.1 $HOSTNAME" >> /etc/hosts

hostname=$HOSTNAME

echo "nameserver 8.8.8.8" > /etc/resolv.conf

echo "nameserver 8.8.4.4" >> /etc/resolv.conf

:wq! #保存退出

<think>好的,我现在需要帮助用户解决如何使用PXE批量安装Linux操作系统的问题。首先,我应该回顾用户提供的引用内容,确保理解PXE的基本流程和相关组件。引用中提到PXE需要DHCP、TFTP服务器,以及Kickstart来实现无人值守安装。用户可能希望得到一步步的指导,所以需要把步骤分解清楚。 首先,要确认用户是否有足够的背景知识,比如是否了解PXE的工作原理。不过根据用户的问题,他们可能已经知道一些基础,所以直接进入实施步骤比较合适。需要确保每个步骤都清晰,比如配置DHCP服务器、设置TFTP服务、准备启动文件等。接下来,检查引用中的关键点。引用1提到pxelinux.0文件的重要性,引用2和3详细说明了DHCP和TFTP的配置,以及Kickstart的使用。我需要将这些信息整合成一个连贯的流程。可能还需要注意一些细节,比如客户机的BIOS设置、TFTP目录结构、启动文件的复制等。然后,考虑用户可能的疑问或常见错误。例如,TFTP权限问题、DHCP配置错误、启动文件路径不正确等。在步骤中加入这些注意事项会帮助用户避免常见陷阱。此外,引用3提到了复制文件和生成default文件,这部分需要详细说明,确保用户不会遗漏。 最后,生成相关问题,应该围绕PXE优化、故障排除和应用场景展开。比如如何优化安装速度、如何处理网络启动失败的情况,或者如何扩展到其他Linux发行版。这些问题可以帮助用户进一步探索PXE的应用。 现在需要将整个流程结构化,分步骤说明,并确保每个部分都引用正确的来源。同时保持语言简洁,避免技术术语过多,但又要足够详细,让用户能够按照步骤操作。可能还需要验证步骤之间的逻辑,比如先配置DHCP,再设置TFTP,然后准备启动文件和Kickstart应答文件,最后测试客户机启动。这样的流程是否合理?另外,用户可能需要了解如何验证每个步骤是否成功,比如检查服务状态、测试TFTP文件下载等。可以在步骤中加入这些验证点,帮助用户确认配置正确。总结下来,回答的结构应该是:概述步骤,分步详细说明,注意事项,以及相关问题。确保引用正确,比如在配置DHCP时引用引用3,在Kickstart部分引用引用2。同时,代码块和命令示例要准确,比如dhcpd.conf的配置片段,以及Kickstart文件的生成命令。</think>### 如何使用PXE实现Linux操作系统的批量安装 #### 一、核心原理 PXE(预启动执行环境)通过结合DHCP、TFTP和HTTP/FTP/NFS服务实现网络引导安装。客户端从DHCP获取IP地址和引导文件路径,通过TFTP下载启动文件,最后从文件服务器获取系统镜像和自动化应答文件完成安装[^1][^2][^3]。 #### 二、具体实现步骤 1. **DHCP服务配置** ```bash yum install dhcp -y vim /etc/dhcp/dhcpd.conf ``` 配置文件示例: ```conf subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.200; option routers 192.168.1.1; next-server 192.168.1.10; # TFTP服务器IP filename "pxelinux.0"; # 引导文件路径 } systemctl enable --now dhcpd # 启动服务[^3] ``` 2. **TFTP服务部署** ```bash yum install tftp-server syslinux -y cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ cp /mnt/isolinux/* /var/lib/tftpboot/ # 复制ISO中的启动文件 mkdir /var/lib/tftpboot/pxelinux.cfg cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default[^3] ``` 3. **文件服务器搭建(以HTTP为例)** ```bash yum install httpd -y mkdir /var/www/html/centos7 mount -o loop CentOS-7-x86_64-DVD.iso /var/www/html/centos7 systemctl enable --now httpd ``` 4. **Kickstart无人值守配置** ```bash yum install system-config-kickstart -y system-config-kickstart > ks.cfg # 生成应答文件 cp ks.cfg /var/www/html/ ``` 在`/var/lib/tftpboot/pxelinux.cfg/default`中添加: ```text label auto kernel vmlinuz append initrd=initrd.img ks=http://192.168.1.10/ks.cfg[^2] ``` #### 三、客户机验证 1. 设置BIOS/UEFI为网络引导优先 2. 客户端启动后自动加载安装程序,全过程无需交互 3. 通过控制台查看批量部署进度 #### 四、常见问题排查 1. **TFTP超时错误** 检查`/var/lib/tftpboot`目录权限是否为755,确认防火墙放行UDP 69端口 2. **DHCP分配异常** 使用`tcpdump -i eth0 port 67`抓包验证DHCP交互过程 3. **Kickstart验证失败** 在客户端启动时按`Esc`键,添加`ksvalidator`参数调试应答文件 $$ \text{部署成功率} = \frac{\text{成功节点数}}{\text{总节点数}} \times 100\% $$
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值