環境:html
系統:centos7.1node
平臺:VirtualBox虛擬機linux
所安裝的系統:centos6.七、centos7.1redis
大致的過程:ubuntu
一、由dhcp爲客戶機分配地址,並提供客戶機啓動所需的文件和tftp服務器地址。vim
二、客戶機自動從tftp下載bootloader第一階段所需的文件。pxelinux.0文件centos
三、自動開始從tftp下載bootloader第二階段所需的文件(提供窗口菜單,並啓動相應內核和傳遞參數)。服務器
isolinux.cfg ,splash.jpg,esamenu.c32,vmlinuz,initrd.img。網絡
四、內核運行以後,啓動anaconda安裝程序並加載kickstart文件,從http服務器下載程序開始安裝。app
注意:centos7字符界面安裝的時候最好不要小於1G的內存。否則可能會有稀奇古怪的問題。圖形界面安裝要更多的內存。
1、使用centos6.7自帶的引導文件。
安裝centos6.7.
一、安裝配置dhcp、tftp與httpd服務。
[root@localhost ~]# yum install httpd tftp-server tftp dhcp -y
配置dhcpd。配置目錄/etc/dhcp/。 複製dhcp配置樣例文件:
[root@localhost dhcp]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example dhcpd.conf cp: overwrite ‘dhcpd.conf’? y
配置結果:
#option domain-name "star.com"; #指定搜索域,在咱們這裏用不到,註釋了。 #option domain-name-servers 192.168.40.100; #DNS default-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端口是否打開,沒問題咱們用客戶機測試一下。
看起來工做正常。
啓動tftpd,在centos7裏面,systemd就已經有xinetd的特性了,不用再來使用xinetd啓動tftp。咱們只要啓動socket就能夠, 主程序systemd會帶爲啓動。
systemctl start tftpd.socket , 啓動並查看69/UDP是否開啓。
啓動httpd。默認配置就能夠了。
二、複製所需文件啓動安裝。
安裝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/p_w_picpaths/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 text firstboot --disable keyboard us lang en_US selinux --disabled reboot timezone Asia/Shanghai bootloader --append="rhgb crashkernel=auto quiet" --location=mbr --driveorder="sda" zerombr clearpart --all part /boot --fstype="ext4" --size=200 part pv.008 --size=61440 volgroup vg0 --pesize=8192 pv.008 logvol / --fstype=ext4 --name=root --vgname=vg0 --size=20480 logvol swap --name=swap --vgname=vg0 --size=2048 logvol /usr --fstype=ext4 --name=usr --vgname=vg0 --size=10240 logvol /var --fstype=ext4 --name=var --vgname=vg0 --size=20480 %packages @base @core %end
這個文件中有的內容也不是很清楚, 直接複製馬哥的,本身給簡化了一下。能夠安裝system-config-kickstart程序來設置ks文件。
6.The KickStart config file. 說明ks文件的,有示例。或者:
文件放在httpd服務器的主目錄裏。 anaconda支持http協議,不用再使用tftp了。
[root@localhost ~]# ls /var/www/html centos6 centos6.cfg
同時ks文件中所指定的url就是倉庫的位置,我這裏就在相同目錄的centos6下面。
設置引導菜單。
vim /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32 #加載vesamenu.c32程序 #prompt 1 timeout 20 #超時2秒 menu background splash.jpg #背影圖片 menu title Welcome to CentOS 6.7! #主標題 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 #這個是一個菜單項的總稱,在boot:後面手動輸入這個名稱,就表示執行這個菜單項,與選擇菜單功能同樣。 menu label ^Install CentOS6 #顯示的菜單項 menu default #若是有多個label,默認選擇這個 kernel vmlinuz #內核文件 append initrd=initrd.img ks=http://192.168.40.100/centos6.cfg #傳遞給內核的參數
把用不到的都刪除了。 而且添加參數ks。 就是從哪裏下載ks文件。
如今咱們引導的第一階段和第二階段看起來都完成了。內核若是加載順利,並啓動anaconda,而後再成功下載ks文件,anaconda若是能夠順利的按着ks文件安裝完成,也就算安裝完成了。
在這裏倒數第二行能夠看到爲何要在pxelinux.cfg/default裏面放菜單。 pxelinux.0默認讀取的文件就是這個。
開始安裝了。結果也正常。
安裝centos7.1。
我的覺得在通常狀況下,第一二階段的引導與系統版本的關係並非必須。起碼在同是centos系統的6和7版本之間還能夠通用。
那麼即然上面咱們的引導都作好了,這裏也就只剩複製一下內核文件,添加啓動菜單,ks文件與軟件倉庫了。
注意:centos7安裝的時候最好不要小於1G的內存。否則可能有稀奇古怪的問題。
ks文件:
install keyboard --vckeymap=cn --xlayouts='cn' reboot rootpw --iscrypted $6$3hHx9zVZ$ShB3kPo0UeHpetxNXEJr2GynXg2rcg2lgCflfTbuxN1yfUbrUmBJu3P/ncD/X467M1jN2yxiNWnBExozzjafg1 timezone Asia/Shanghai url --url="http://192.168.40.100/centos7" lang zh_CN firewall --disabled network --bootproto=dhcp --device=eth0 auth --useshadow --passalgo=sha512 text firstboot --disable selinux --permissive ignoredisk --only-use=sda bootloader --location=mbr --boot-drive=sda zerombr clearpart --all --initlabel part /boot --asprimary --fstype="xfs" --size=512 part swap --fstype="swap" --size=2048 part /usr --fstype="xfs" --size=20480 part / --fstype="xfs" --size=20480 %packages @base @core %end
來看一下如今的httpd的根目錄:
[root@localhost html]# ls centos6 centos6.cfg centos7 centos7.cfg
複製一下內核文件 : 當前目錄在tftp根目錄。
cp /mnt/cdrom1/p_w_picpaths/pxeboot/initrd.img initrd.7.img cp /mnt/cdrom1/p_w_picpaths/pxeboot/vmlinuz vmlinuz.7 [root@localhost tftpboot]# ls initrd.7.img initrd.img pxelinux.0 pxelinux.cfg splash.jpg vesamenu.c32 vmlinuz vmlinuz.7
注意:不要複製成centos6的內核了。
修改啓動菜單。
default vesamenu.c32 timeout 100 #時間改長了一點,如今是10秒。 menu background splash.jpg menu title Welcome to CentOS 6.7! 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 CentOS6 menu default kernel vmlinuz append initrd=initrd.img ks=http://192.168.40.100/centos6.cfg label 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文件,開始安裝過程。
咱們來測試一下:
看起來工做正常。從新進入6也工做正常 。 下面是7的。
這個product.img下載失敗沒有影響,光盤裏面也沒有這個文件。
格式化成功,並開始安裝程序了,咱們也能夠看到一共469個包。
這裏時間有點長,耐心等一下。 結果也正常。重啓進入系統。這個方塊是由於ks文件中的lang指定的是CN, 註釋掉lang就能夠正常顯示了。
2、使用centos7的引導文件。
使用centos7的引導文件也是同樣,不過剛纔試的時候出了點問題,而如今又好了,有點奇怪,不知道好用不。
複製centos7光盤isolinux下的vesamenu.c32到tftp根目錄,覆蓋原來centos6的。
複製centos7光盤的isolinux.cfg到pxelinux.cfg/default
我這裏的內容,基本上也就是把內核傳遞參數那裏改一下就能夠了。 這個文件有好多顏色控制。我這裏就不刪除了,格式基本也沒有變化,用centos6帶的那個菜單文件也能夠用。
default vesamenu.c32 timeout 600 menu clear menu background splash.png menu title CentOS 7 menu vshift 8 menu rows 18 menu margin 8 #menu hidden menu helpmsgrow 15 menu tabmsgrow 13 # Border Area menu color border * #00000000 #00000000 none # Selected item menu color sel 0 #ffffffff #00000000 none # Title bar menu color title 0 #ff7ba3d0 #00000000 none # Press [Tab] message menu color tabmsg 0 #ff3a6496 #00000000 none # Unselected menu item menu color unsel 0 #84b8ffff #00000000 none # Selected hotkey menu color hotsel 0 #84b8ffff #00000000 none # Unselected hotkey menu color hotkey 0 #ffffffff #00000000 none # Help text menu color help 0 #ffffffff #00000000 none # A scrollbar of some type? Not sure. menu color scrollbar 0 #ffffffff #ff355594 none # Timeout msg menu color timeout 0 #ffffffff #00000000 none menu color timeout_msg 0 #ffffffff #00000000 none # Command prompt text menu color cmdmark 0 #84b8ffff #00000000 none menu color cmdline 0 #ffffffff #00000000 none # Do not display the actual menu unless the user presses a key. All that is displayed is a timeout message. menu tabmsg Press Tab for full configuration options on menu items. menu separator # insert an empty line menu separator # insert an empty line label linux menu label ^Install CentOS 7 kernel vmlinuz.7 append initrd=initrd.7.img ks=http://192.168.40.100/centos7.cfg label check menu label install CentOS 6 menu default kernel vmlinuz append initrd=initrd.img ks=http://192.168.40.100/centos6.cfg menu end
啓動測試:
正常安裝完成。centos6測試了下,也正常。
3、使用第三方的引導文件。
咱們還能夠用syslinux包裏帶的一些引導文件。
cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk}
上面這幾個文件,用到的也就menu.c32文件,其它另外的兩個c32文件不知道是幹什麼用的,另外memdisk好像是一個內核文件。
menu.c32是字符界面的窗口, 咱們上面用的vesamenu.c32是圖形的。
我這裏只用menu.c32和一個菜單文件就能夠用了。
菜單文件仍是那個default,只不過要本身定了。與centos6上面的差很少。
default menu.c32 #啓動menu.c32 prompt 5 timeout 30 MENU TITLE CentOS 7 PXE Menu LABEL linux MENU LABEL Install CentOS 7 x86_64 KERNEL vmlinuz.7 APPEND 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與內核了。
工做正常。 不過用它安裝centos6的時候有時候會在選擇鍵盤的那裏要手動。也不知道是否是剛纔設置有問題,如今卻是自動安裝了。
加上6之後:
如今的菜單文件:
default menu.c32 prompt 5 timeout 30 MENU TITLE CentOS 7 PXE Menu LABEL linux MENU LABEL Install CentOS 7 x86_64 KERNEL vmlinuz.7 APPEND initrd=initrd.7.img ks=http://192.168.40.100/centos7.cfg LABEL linux MENU LABEL Install CentOS 6 x86_64 KERNEL vmlinuz APPEND initrd=initrd.img ks=http://192.168.40.100/centos6.cfg
這就完成了。如今是在虛擬機中作的, 在實際環境中可能又會有各類各樣的毛病。 並且有時候可能要安裝多個版本的系統,如ubuntu, fedora...... 。這時就要使用cobbler來安裝。
cobbler實際上是pxe的二次封裝,一些文件或配置能夠自動生成,使用起來很方便。
用這種簡單的菜單再用vesamenu.c32,發現頗有意思。並且使用起來也沒有什麼問題。