原理:
步驟:
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詳解