標籤:pxe
環境:
系統:centos7.1
平台:VirtualBox虛擬機器
所安裝的系統:centos6.7、centos7.1
大體的過程:
1、由dhcp為客戶機分配地址,並提供客戶機啟動所需的檔案和tftp伺服器位址。
2、客戶機自動從tftp下載bootloader第一階段所需的檔案。pxelinux.0檔案
3、自動開始從tftp下載bootloader第二階段所需的檔案(提供視窗菜單,並啟動相應核心和傳遞參數)。
isolinux.cfg ,splash.jpg,esamenu.c32,vmlinuz,initrd.img。
4、核心運行之後,啟動anaconda安裝程式並載入kickstart檔案,從http伺服器下載程式開始安裝。
一、安裝centos6.7.
1、安裝配置dhcp、tftp與httpd服務。
[[email protected] ~]# yum install httpd tftp-server tftp dhcp -y
配置dhcpd。配置目錄/etc/dhcp/。 複製dhcp配置範例檔案:
[[email protected] dhcp]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example dhcpd.confcp: overwrite ‘dhcpd.conf’? y
配置結果:
#option domain-name "star.com"; #指定搜尋域,在我們這裡用不到,注釋了。#option domain-name-servers 192.168.40.100; #DNSdefault-lease-time 3600; # 預設租約max-lease-time 7200; #最長租約log-facility local5; #日誌。 要在/etc/rsyslog.conf中添加local5日誌設施。也可以預設不用修改。subnet 192.168.40.0 netmask 255.255.255.0 { #添加範圍。 range 192.168.40.10 192.168.40.20; #位址集區 filename "pxelinux.0"; #用戶端要去找的檔案。 next-server 192.168.40.100; #用戶端去哪裡找filename的檔案。}#host node1 { #如果作位址保留區,或只是為單台主機安裝系統。就只設定這個。# hardware ethernet 0:0:c0:5d:bd:95; ## filename "pxelinux.0";# next-server 192.168.40.100;#}
啟動的時候如果有問題,可以一直啟動dhcpd,會顯示哪些行有錯誤。
啟動完成 ss -unl尋找67連接埠是否開啟,沒問題我們用客戶機測試一下。
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M02/7B/52/wKiom1bLGlbg8h2AAAAnFnT1E3k963.png" title="dhcp.png" alt="wKiom1bLGlbg8h2AAAAnFnT1E3k963.png" />
看起來工作正常。
啟動tftpd,在centos7裡面,systemd就已經有xinetd的特性了,不用再來使用xinetd啟動tftp。我們只要啟動socket就可以, 主程式systemd會帶為啟動。
systemctl start tftpd.socket , 啟動並查看69/UDP是否開啟。
啟動httpd。預設配置就可以了。
2、複製所需檔案啟動安裝。
安裝syslinux。 這個程式裡面是一堆的bootloader檔案。其中也包括pxe網路的bootloader。相當於是grub的第一階段引導。
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ #pxelinux.0就是syslinux產生的。cp /mnt/cdrom/isolinux/{splash.jpg,vesamenu.c32} /var/lib/tftpboot/ #centos6光碟片中的檔案。用來產生引導視窗,並通過設定檔載入對應核心和傳遞參數。相當於是grub的第二階段所需的檔案。 cp /mnt/cdrom/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/ #用於pxe引導的核心與initrd檔案, 不過我這裡用md5sum發現光碟片裡正常的核心與initrd檔案與pxe目錄裡面的一樣,centos7也是。mkdir /var/lib/tftpboot/pxelinux.cfg/ #這個裡面就是要放vesamenu.c32的設定檔。cp /mnt/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
這裡的pxelinux.0載入完成以後,它就會再從相同位置載入第二階段所需的檔案。第二階段再載入核心與initrd。
那麼現在用於引導的第一和第二階段就已經好了。就剩在配置菜單中為核心傳遞ks參數。不過在此之前我們就先來提供ks檔案與軟體倉庫,軟體倉庫這裡就用光碟片了。
傳遞給核心的ks參數是anacoda程式要用的,也是自動安裝的關鍵。
我這裡的ks檔案內容:
firewall --disabled install url --url=" rootpw --iscrypted $6$3hHx9zVZ$ShB3kPo0UeHpetxNXEJr2GynXg2rcg2lgCflfTbuxN1yfUbrUmBJu3P/ncD/X467M1jN2yxiNWnBExozzjafg1 textfirstboot --disablekeyboard uslang en_USselinux --disabledreboottimezone Asia/Shanghaibootloader --append="rhgb crashkernel=auto quiet" --location=mbr --driveorder="sda"zerombr clearpart --all part /boot --fstype="ext4" --size=200part pv.008 --size=61440volgroup vg0 --pesize=8192 pv.008logvol / --fstype=ext4 --name=root --vgname=vg0 --size=20480logvol swap --name=swap --vgname=vg0 --size=2048logvol /usr --fstype=ext4 --name=usr --vgname=vg0 --size=10240logvol /var --fstype=ext4 --name=var --vgname=vg0 --size=20480%packages@base@core%end
這個檔案中有的內容也不是很清楚, 直接複製馬哥的,自己給簡化了一下。可以安裝system-config-kickstart程式來設定ks檔案。
檔案放在httpd伺服器的主目錄裡。 anaconda支援http協議,不用再使用tftp了。
[[email protected] ~]# ls /var/www/htmlcentos6 centos6.cfg
同時ks檔案中所指定的url就是倉庫的位置,我這裡就在相同目錄的centos6下面。
設定引導菜單。
vim /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32#prompt 1timeout 20menu background splash.jpgmenu title Welcome to CentOS 6.7!menu color border 0 #ffffffff #00000000menu color sel 7 #ffffffff #ff000000menu color title 0 #ffffffff #00000000menu color tabmsg 0 #ffffffff #00000000menu color unsel 0 #ffffffff #00000000menu color hotsel 0 #ff000000 #ffffffffmenu color hotkey 7 #ffffffff #ff000000menu color scrollbar 0 #ffffffff #00000000label linux menu label ^Install CentOS6 menu default kernel vmlinuz append initrd=initrd.img ks=http://192.168.40.100/centos6.cfg
把用不到的都刪除了。 並且添加參數ks。 就是從哪裡下載ks檔案。
現在我們引導的第一階段和第二階段看起來都完成了。核心如果載入順利,並啟動anaconda,然後再成功下載ks檔案,anaconda如果可以順利的按著ks檔案安裝完成,也就算安裝完成了。
650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/7B/52/wKiom1bLKSry2UeOAAAwinC155E974.png" title="dhcp5.png" alt="wKiom1bLKSry2UeOAAAwinC155E974.png" />
在這裡倒數第二行可以看到為什麼要在pxelinux.cfg/default裡面放菜單。 pxelinux.0預設讀取的檔案就是這個。
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M02/7B/52/wKiom1bLKKGDDt92AAPhodutgEk737.png" title="dhcp1.png" alt="wKiom1bLKKGDDt92AAPhodutgEk737.png" />
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M01/7B/52/wKiom1bLKQiwyBzwAAAI0ZinmcE597.png" style="float:none;" title="dhcp2.png" alt="wKiom1bLKQiwyBzwAAAI0ZinmcE597.png" />
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/7B/52/wKiom1bLKUKRpXVwAAAM8a8ODiA840.png" title="dhcp4.png" alt="wKiom1bLKUKRpXVwAAAM8a8ODiA840.png" />
開始安裝了。結果也正常。
二、安裝centos7.1。
個人以為在一般情況下,第一二階段的引導與系統版本的關係並不是必須。起碼在同是centos系統的6和7版本之間還可以通用。
那麼即然上面我們的引導都做好了,這裡也就只剩複製一下核心檔案,添加啟動菜單,ks檔案與軟體倉庫了。
ks檔案:
installkeyboard --vckeymap=cn --xlayouts=‘cn‘rebootrootpw --iscrypted $6$3hHx9zVZ$ShB3kPo0UeHpetxNXEJr2GynXg2rcg2lgCflfTbuxN1yfUbrUmBJu3P/ncD/X467M1jN2yxiNWnBExozzjafg1timezone Asia/Shanghaiurl --url="http://192.168.40.100/centos7"lang zh_CNfirewall --disablednetwork --bootproto=dhcp --device=eth0auth --useshadow --passalgo=sha512textfirstboot --disableselinux --permissiveignoredisk --only-use=sdabootloader --location=mbr --boot-drive=sdazerombrclearpart --all --initlabelpart /boot --asprimary --fstype="xfs" --size=512part swap --fstype="swap" --size=2048part /usr --fstype="xfs" --size=20480part / --fstype="xfs" --size=20480%packages@base@core%end
來看一下現在的httpd的根目錄:
[[email protected] html]# lscentos6 centos6.cfg centos7 centos7.cfg
複製一下核心檔案 : 目前的目錄在tftp根目錄。
cp /mnt/cdrom1/images/pxeboot/initrd.img initrd.7.imgcp /mnt/cdrom1/images/pxeboot/vmlinuz vmlinuz.7[[email protected] tftpboot]# lsinitrd.7.img initrd.img pxelinux.0 pxelinux.cfg splash.jpg vesamenu.c32 vmlinuz vmlinuz.7
注意:不要複製成centos6的核心了。
修改啟動菜單。
default vesamenu.c32timeout 100 #時間改長了一點,現在是10秒。menu background splash.jpgmenu title Welcome to CentOS 6.7!menu color border 0 #ffffffff #00000000menu color sel 7 #ffffffff #ff000000menu color title 0 #ffffffff #00000000menu color tabmsg 0 #ffffffff #00000000menu color unsel 0 #ffffffff #00000000menu color hotsel 0 #ff000000 #ffffffffmenu color hotkey 7 #ffffffff #ff000000menu color scrollbar 0 #ffffffff #00000000label linux menu label ^Install CentOS6 menu default kernel vmlinuz append initrd=initrd.img ks=http://192.168.40.100/centos6.cfglabel linux menu label ^Install CentOS7 kernel vmlinuz.7 append initrd=initrd.7.img ks=http://192.168.40.100/centos7.cfg~
也就是多了4行用於centos7的菜單。menu default是用於預設啟動的。
我們來縷一下,dhcp發送啟動引導檔案。客戶機收到檔案啟動引導,開始載入第二階段。成功以後,會開始載入核心檔案,核心檔案再啟動anaconda。anaconda載入ks檔案,開始安裝過程。
我們來測試一下:
650) this.width=650;" src="http://s4.51cto.com/wyfs02/M00/7B/54/wKioL1bLyvOjdhTHAAL5PMvi3RM146.png" title="dhcp_2.png" alt="wKioL1bLyvOjdhTHAAL5PMvi3RM146.png" />
看起來工作正常。重新進入6也工作正常 。 下面是7的。
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/7B/54/wKioL1bLwL-CelJFAAAPjTm8mTU936.png" title="dhcp9.png" alt="wKioL1bLwL-CelJFAAAPjTm8mTU936.png" />
格式化成功,並開始安裝程式了,我們也可以看到一共469個包。
650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/7B/54/wKiom1bLwUaDRjqXAAAFw-Ld3W0710.png" title="dhcp10.png" alt="wKiom1bLwUaDRjqXAAAFw-Ld3W0710.png" />
這裡時間有點長,耐心等一下。 結果也正常。重啟進入系統。
不知道為什麼用centos7光碟片裡面的引導檔案就會有問題。可能是傳遞核心參數的方式不一樣吧。這裡就不是很瞭解了。朋友們有興趣可以試一下,vesamenu.c32檔案和isolinux.cfg菜單檔案。
那麼即然7的引導不好用,有時候只是想安裝7,而又沒有6的光碟片。 可以用syslinux包裡帶的一些檔案。
cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk}
上面這幾個檔案,用到的也就menu.c32檔案,其它另外的兩個c32檔案不知道是幹什麼用的,另外memdisk好像是一個核心檔案。
我這裡只用menu.c32和一個菜單檔案就可以用了。
菜單檔案還是那個default,只不過要自己定了。與centos6上面的差不多。
default menu.c32 #啟動menu.c32prompt 5timeout 30MENU TITLE CentOS 7 PXE MenuLABEL linuxMENU LABEL Install CentOS 7 x86_64KERNEL vmlinuz.7APPEND initrd=initrd.7.img ks=http://192.168.40.100/centos7.cfg
我現在的tftp目錄:
initrd.7.img initrd.img menu.c32 pxelinux.0 pxelinux.cfg vmlinuz vmlinuz.7
當然可以忽略centos6的initrd與核心了。
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M01/7B/55/wKioL1bL1cmyyv3qAAAGRWOaes0045.png" title="dhcp_4.png" alt="wKioL1bL1cmyyv3qAAAGRWOaes0045.png" />
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M02/7B/56/wKiom1bL1bSy1p-BAAAR_VmYmmY070.png" title="dhcp_5.png" alt="wKiom1bL1bSy1p-BAAAR_VmYmmY070.png" />
工作正常。 不過用它安裝centos6的時候有時候會在選擇鍵盤的那裡要手動。也不知道是不是剛才設定有問題,現在倒是自動安裝了。
加上6以後:
現在的菜單檔案:
default menu.c32prompt 5timeout 30MENU TITLE CentOS 7 PXE MenuLABEL linuxMENU LABEL Install CentOS 7 x86_64KERNEL vmlinuz.7APPEND initrd=initrd.7.img ks=http://192.168.40.100/centos7.cfgLABEL linuxMENU LABEL Install CentOS 6 x86_64KERNEL vmlinuzAPPEND initrd=initrd.img ks=http://192.168.40.100/centos6.cfg
650) this.width=650;" src="http://s1.51cto.com/wyfs02/M00/7B/56/wKiom1bL2JngRx-LAAAQKe3HwIc088.png" style="float:none;" title="dhcp_8.png" alt="wKiom1bL2JngRx-LAAAQKe3HwIc088.png" />
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M02/7B/55/wKioL1bL2QeTl7EFAAANCA2X5pw251.png" style="float:none;" title="dhcp_10.png" alt="wKioL1bL2QeTl7EFAAANCA2X5pw251.png" />
這就完成了。現在是在虛擬機器中做的, 在實際環境中可能又會有各種各樣的毛病。 而且有時候可能要安裝多個版本的系統,如ubuntu, fedora...... 。這時就要使用cobbler來安裝。
cobbler其實是pxe的二次封裝,一些檔案或配置可以自動產生,使用起來很方便。
謝謝瀏覽。650) this.width=650;" src="http://img.baidu.com/hi/jx2/j_0003.gif" alt="j_0003.gif" />
本文出自 “大蕃茄” 部落格,請務必保留此出處http://fanqie.blog.51cto.com/9382669/1744240
pxe安裝centos系統