原理:
步骤:
1.安装vsftpd服务
# yum install vsftpd
# rpm -ql vsftpd
/etc/logrotate.d/vsftpd /etc/pam.d/vsftpd /etc/rc.d/init.d/vsftpd /etc/vsftpd /etc/vsftpd/ftpusers /etc/vsftpd/user_list /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd_conf_migrate.sh /usr/sbin/vsftpd ... ... /var/ftp /var/ftp/pub
# service vsftpd start
# chkconfig vsftpd on
# chkconfig --list | grep vsftpd
vsftpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# mkdir /mnt/cdrom
# mount /dev/cdrom /mnt/cdrom
# cp -r /mnt/cdrom/. /var/ftp/ (把光盘上所有文件拷贝到ftp的根目录)
# du -sh /var/ftp
3.8G /var/ftp
2.安装dhcp服务并配置
# yum install dhcp
# rpm -ql dhcp
/etc/dhcp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd6.conf /etc/openldap/schema/dhcp.schema /etc/portreserve/dhcpd /etc/rc.d/init.d/dhcpd /etc/rc.d/init.d/dhcpd6 /etc/rc.d/init.d/dhcrelay /etc/rc.d/init.d/dhcrelay6 /etc/sysconfig/dhcpd /etc/sysconfig/dhcpd6 /etc/sysconfig/dhcrelay /etc/sysconfig/dhcrelay6 /usr/bin/omshell /usr/sbin/dhcpd /usr/sbin/dhcrelay /usr/share/doc/dhcp-4.1.1 /usr/share/doc/dhcp-4.1.1/3.0b1-lease-convert /usr/share/doc/dhcp-4.1.1/IANA-arp-parameters /usr/share/doc/dhcp-4.1.1/README.ldap /usr/share/doc/dhcp-4.1.1/api+protocol /usr/share/doc/dhcp-4.1.1/dhclient-tz-exithook.sh /usr/share/doc/dhcp-4.1.1/dhcpd-conf-to-ldap /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /usr/share/doc/dhcp-4.1.1/dhcpd6.conf.sample /usr/share/doc/dhcp-4.1.1/draft-ietf-dhc-ldap-schema-01.txt /usr/share/doc/dhcp-4.1.1/ms2isc /usr/share/doc/dhcp-4.1.1/ms2isc/Registry.perlmodule /usr/share/doc/dhcp-4.1.1/ms2isc/ms2isc.pl /usr/share/doc/dhcp-4.1.1/ms2isc/readme.txt /usr/share/doc/dhcp-4.1.1/sethostname.sh /usr/share/doc/dhcp-4.1.1/solaris.init /usr/share/man/man1/omshell.1.gz /usr/share/man/man5/dhcpd.conf.5.gz /usr/share/man/man5/dhcpd.leases.5.gz /usr/share/man/man8/dhcpd.8.gz /usr/share/man/man8/dhcrelay.8.gz /var/lib/dhcpd /var/lib/dhcpd/dhcpd.leases /var/lib/dhcpd/dhcpd6.leases
# vim /etc/dhcp/dhcpd.conf
该配置文件内容为空,在底行模式下读取样例文件
:r /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample
然后修改后内容如下:
option domain-name "itecs.cn"; option domain-name-servers 222.222.222.222, 114.114.114.114; default-lease-time 600; max-lease-time 7200; log-facility local7; subnet 192.168.80.0 netmask 255.255.255.0 { range dynamic-bootp 192.168.80.101 192.168.80.200; option subnet-mask 255.255.255.0; option routers 192.168.80.254; }
# service dhcpd
Usage: /etc/init.d/dhcpd {start|stop|restart|force-reload|condrestart|try-restart|configtest|status}
# service dhcpd configtest
# service dhcpd start
# chkconfig dhcpd on
3.安装tftp-server
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务,基于UDP,端口号为69。主要用于以下场景:
- 交换机或路由器升级或备份
- 无盘工作站存放boot loader
- 嵌入式开发时装载系统
- 大规模的服务安装布署
# ll /mnt/cdrom/Packages/tftp*
-r--r--r--. 2 root root 32372 May 12 2016 /mnt/cdrom/Packages/tftp-0.49-8.el6.x86_64.rpm -r--r--r--. 2 root root 40328 May 12 2016 /mnt/cdrom/Packages/tftp-server-0.49-8.el6.x86_64.rpm
# yum install tftp-server
# rpm -ql tftp-server
/etc/xinetd.d/tftp /usr/sbin/in.tftpd /usr/share/doc/tftp-server-0.49 /usr/share/doc/tftp-server-0.49/CHANGES /usr/share/doc/tftp-server-0.49/README /usr/share/doc/tftp-server-0.49/README.security /usr/share/doc/tftp-server-0.49/README.security.tftpboot /usr/share/man/man8/in.tftpd.8.gz /usr/share/man/man8/tftpd.8.gz /var/lib/tftpboot
# vim /etc/xinetd.d/tftp
# default: off # description: The tftp server serves files using the trivial file transfer \ # protocol. The tftp protocol is often used to boot diskless \ # workstations, download configuration files to network-aware printers, \ # and to start the installation process for some operating systems. service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot #指定tftp-server的根目录,参数-s指定chroot,-c指定了可以创建文件 disable = no #disable设为no表示启用该服务 per_source = 11 #每一个来源最多可以建立11个连接 cps = 100 2 #每秒连接数,达到100个就等待2秒 flags = IPv4 }
# service xinetd start
注意:tftp是被xinetd动态管理的服务,所以在安装tftp-server时作为依赖xinetd也被一起安装。启动服务也仅启动xinetd即可,无须单独启动tftp服务。
# netstat -tupln | grep 69
udp 0 0 0.0.0.0:69 0.0.0.0:* 26996/xinetd
# tail -f /var/log/messages (查看日志有无错误信息)
4.把系统引导文件、内核和驱动拷贝到tftp-server的根目录
tftp的根目录在/var/lib/tftpboot/
# yum install syslinux (通过安装该软件包获得引导文件)
# cd /var/lib/tftpboot/
# cp /usr/share/syslinux/pxelinux.0 ./
# cp /mnt/cdrom/images/pxeboot/vmlinuz ./
# cp /mnt/cdrom/images/pxeboot/initrd.img ./
引导文件在使用时还需要有相应的配置文件:
# mkdir pxelinux.cfg
# cp /mnt/cdrom/isolinux/isolinux.cfg pxelinux.cfg/default (把配置文件拷贝到新建的目录pxelinux.cfg中并改名为default)
# vim pxelinux.cfg/default
default linux prompt 1 timeout 6 display boot.msg menu background splash.jpg menu title Welcome to CentOS 6.9! menu color border 0 #ffffffff #00000000 menu color sel 7 #ffffffff #ff000000 menu color title 0 #ffffffff #00000000 menu color tabmsg 0 #ffffffff #00000000 menu color unsel 0 #ffffffff #00000000 menu color hotsel 0 #ff000000 #ffffffff menu color hotkey 7 #ffffffff #ff000000 menu color scrollbar 0 #ffffffff #00000000 label linux menu label ^Install or upgrade an existing system menu default kernel vmlinuz append ks=ftp://192.168.80.100/ks.cfg initrd=initrd.img label vesa menu label Install system with ^basic video driver kernel vmlinuz append initrd=initrd.img nomodeset label rescue menu label ^Rescue installed system kernel vmlinuz append initrd=initrd.img rescue label local menu label Boot from ^local drive localboot 0xffff label memtest86 menu label ^Memory test kernel memtest append -
dhcp服务器需要配置next-server参数才能把tftp server的IP地址告诉客户端,filename参数指定引导程序的名字。
# vim /etc/dhcp/dhcpd.conf
option domain-name "itecs.cn"; option domain-name-servers 222.222.222.222, 114.114.114.114; default-lease-time 600; max-lease-time 7200; log-facility local7; subnet 192.168.80.0 netmask 255.255.255.0 { range dynamic-bootp 192.168.80.101 192.168.80.200; option subnet-mask 255.255.255.0; option routers 192.168.80.254; next-server 192.168.80.100; filename "pxelinux.0"; }
# service dhcpd restart
5.创建Kickstart自动应答文件ks.cfg
生成ks.cfg文件需要Linux安装图形界面。菜单界面上做选择确认,在软件包等选择时,需要设置好yum源,否则这些内容不会出现。
# yum list all | grep kick
pykickstart.noarch 1.74.22-1.el6 base system-config-kickstart.noarch 2.8.6.6-1.el6 base
# yum -y install system-config-kickstart (必须在图形桌面下运行,xshell注册后具有图形功能,可以执行)
关于在xshell下运行此命令,有可能出现
Could not open display because no X server is running.
Try running 'system-config-kickstart --help' for a list of options.
baidu搜索,依然不能解决问题,但在我另一台电脑上(win10,有问题的电脑安装的是win7)运行却没有问题。
① 在Basic Configuration中:
② 在Installation Method中:
③ 在Boot Loader Options中:
④ 在Partition Informatica中:
⑤ Network Configuration中:
⑥ 在Authentication中:
⑦ 在Firewall Configuration中:
⑧ 在Display Configuration中:
⑨ 在Package Selection中:
⑩ 在Pre-Installation Script中:
在预安装脚本中不用添加脚本。
⑪ 在Post-Installation Script中:
在后安装脚本中暂时不添加脚本。
设置完成后,File->Save。文件名为ks.cfg,保存在vsftpd的根目录(/var/ftp)下。
6. 测试
创建一台新的CentOS 6 64位虚拟机(注意:在光驱的设备状态里,启动时连接复选框没有勾选),然后开启此虚拟机,稍等片刻就可以看到从网络上开始引导了。
安装完成后系统重启就可以登录了。
安装完成后2个地方需要完善:一是所有主机的主机名都为localhost.localdomain,需要统一命名;二是所有主机的IP地址都是dhcp动态获取,需要设置为静态地址,这2个设置可以通过后安装脚本完成。
7.编写后安装脚本
(1)解决主机名重名的问题
假设主机动态获取的IP地址是192.168.80.100,则主机名命名为station100,即主机名由“station”字符串和IP地址的最后一个字节组成。
# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:79:F1:B3 inet addr:192.168.80.131 Bcast:192.168.80.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe79:f1b3/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1411 errors:0 dropped:0 overruns:0 frame:0 TX packets:949 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:122384 (119.5 KiB) TX bytes:87462 (85.4 KiB)
# ifconfig eth0 | grep -i inet
inet addr:192.168.80.131 Bcast:192.168.80.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe79:f1b3/64 Scope:Link
# ifconfig eth0 | grep -i "inet\>" (词尾锚定)
inet addr:192.168.80.131 Bcast:192.168.80.255 Mask:255.255.255.0
# ifconfig eth0 | grep -i "inet\>" | awk '{print $2}'
addr:192.168.80.131
# ADDR=`ifconfig eth0 | grep -i "inet\>" | awk '{print $2}'`
# echo $ADDR
# NUM=${ADDR##*.} (进行字符串的截取,##表示从左边开始截,一直截取到最后一个点号,*表示把点号左边的扔掉,留下右边的,即得到131)
# echo $NUM
# IP=${ADDR#*:}
# echo $IP
# MASK1=`ifconfig eth0 | grep -i "inet\>" | awk '{print $4}'`
# MASK=${MASK1#*:}
# GATEWAY=`route -n | grep UG | awk '{print $2}'`
# echo $GATEWAY
改主机名要修改/etc/sysconfig/network文件
# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=localhost.localdomain
# sed -e "/HOSTNAME/c\HOSTNAME=station$NUM.itecs.cn" /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=station131.itecs.cn
(2)把网卡IP地址由DHCP动态获取改为静态地址
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0" BOOTPROTO="dhcp" HWADDR="00:0C:29:79:F1:B3" IPV6INIT="yes" MTU="1500" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" UUID="025d7cec-4f8f-4d94-ab18-55ecf90f3a97"
# NETCFG=/etc/sysconfig/network-scripts/ifcfg-eth0
# sed -e "s/dhcp/static/" $NETCFG
# sed -e "2a\IPADDR=$IP\nNETMASK=$MASK\nGATEWAY=$GATEWAY" $NETCFG
# vim f1.sh
1 #!/bin/bash 2 NETCFG=/etc/sysconfig/network-scripts/ifcfg-eth0 3 ADDR=`/sbin/ifconfig eth0 | grep -i "inet\>" | awk '{print $2}'` 4 NUM=${ADDR##*.} 5 IP=${ADDR#*:} 6 MASK1=`/sbin/ifconfig eth0 | grep -i "inet\>" | awk '{print $4}'` 7 MASK=${MASK1#*:} 8 GATEWAY=`/sbin/route -n | grep UG | awk '{print $2}'` 9 #modify hostname 10 sed -i -e "/HOSTNAME/c\HOSTNAME=station$NUM.itecs.cn" /etc/sysconfig/network 11 hostname station$NUM.itecs.cn 12 #modify ipaddress 13 . $NETCFG 14 if [ "$BOOTPROTO"="dhcp" ];then 15 sed -i -e "/BOOTPROTO/cBOOTPROTO=static\nIPADDR=$IP\nNETMASK=$MASK\nGATEWAY=$GATEWAY" $NETCFG 16 fi
重新创建ks.cfg自动应答文件,在最后添加后安装脚本:
# cat ks.cfg
#platform=x86, AMD64, or Intel EM64T #version=DEVEL # Firewall configuration firewall --disabled # Install OS instead of upgrade install # Use network installation url --url="ftp://192.168.80.99/" # Root password rootpw --iscrypted $1$pmulo95A$xS0R8IcWcjjHjH33vczop. # System authorization information auth --useshadow --passalgo=sha512 # Use text mode install text firstboot --disable # System keyboard keyboard us # System language lang en_US # SELinux configuration selinux --disabled # Installation logging level logging --level=info # Reboot after installation reboot # System timezone timezone Asia/Shanghai # Network information network --bootproto=dhcp --device=eth0 --onboot=on # System bootloader configuration bootloader --append="quiet" --location=mbr # Clear the Master Boot Record zerombr # Partition clearing information clearpart --all --initlabel # Disk partitioning information part /boot --fstype="ext4" --size=200 part swap --fstype="swap" --size=512 part / --fstype="ext4" --size=10000 %post --interpreter=/bin/bash NETCFG=/etc/sysconfig/network-scripts/ifcfg-eth0 ADDR=`/sbin/ifconfig eth0 | grep -i "inet\>" | awk '{print $2}'` NUM=${ADDR##*.} IP=${ADDR#*:} MASK1=`/sbin/ifconfig eth0 | grep -i "inet\>" | awk '{print $4}'` MASK=${MASK1#*:} GATEWAY=`/sbin/route -n | grep UG | awk '{print $2}'` #modify hostname sed -i -e "/HOSTNAME/c\HOSTNAME=station$NUM.itecs.cn" /etc/sysconfig/network hostname station$NUM.itecs.cn #modify ipaddress . $NETCFG if [ "$BOOTPROTO"="dhcp" ];then sed -i -e "/BOOTPROTO/cBOOTPROTO=static\nIPADDR=$IP\nNETMASK=$MASK\nGATEWAY=$GATEWAY" $NETCFG fi %end %packages @additional-devel @development @server-platform-devel %end
参考文献:
(4)PXE+Kickstart+DHCP+TFTP实现无人值守安装操作系统
(6)PXE详解