pxe安裝centos系統

環境: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端口是否打開,沒問題咱們用客戶機測試一下。

wKiom1bLGlbg8h2AAAAnFnT1E3k963.png

看起來工做正常。


啓動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文件。

http://www.mit.edu/afs.new/athena/system/rhlinux/redhat-6.2-docs/HOWTOS/other-formats/pdf/KickStart-HOWTO.pdf

6.The KickStart config file.    說明ks文件的,有示例。或者:

https://www.redhat.com/promo/summit/2010/presentations/summit/decoding-the-code/wed/cshabazi-530-more/MORE-Kickstart-Tips-and-Tricks.pdf

惋惜都是英文的j_0008.gif


文件放在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文件安裝完成,也就算安裝完成了。

wKiom1bLKSry2UeOAAAwinC155E974.png

在這裏倒數第二行能夠看到爲何要在pxelinux.cfg/default裏面放菜單。 pxelinux.0默認讀取的文件就是這個。

wKiom1bLKKGDDt92AAPhodutgEk737.png

wKiom1bLKQiwyBzwAAAI0ZinmcE597.png

wKiom1bLKUKRpXVwAAAM8a8ODiA840.png

開始安裝了。結果也正常。


安裝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文件,開始安裝過程。

咱們來測試一下:

wKioL1bLyvOjdhTHAAL5PMvi3RM146.png

看起來工做正常。從新進入6也工做正常 。 下面是7的。

wKiom1bL_LjBqbX3AAAYOJY1Vg8762.png

這個product.img下載失敗沒有影響,光盤裏面也沒有這個文件。

wKioL1bLwL-CelJFAAAPjTm8mTU936.png

格式化成功,並開始安裝程序了,咱們也能夠看到一共469個包。

wKiom1bLwUaDRjqXAAAFw-Ld3W0710.png

這裏時間有點長,耐心等一下。 結果也正常。重啓進入系統。這個方塊是由於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

啓動測試:


wKiom1bMA87Robf4AAAHT209czY592.png

wKioL1bMBPfjhmQ3AAAVFlM2D54884.png

wKiom1bMBIqQGF9uAAARrHSL9v8732.png

正常安裝完成。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與內核了。

wKioL1bL1cmyyv3qAAAGRWOaes0045.png

wKiom1bL1bSy1p-BAAAR_VmYmmY070.png

工做正常。 不過用它安裝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

wKiom1bL2JngRx-LAAAQKe3HwIc088.png

wKioL1bL2QeTl7EFAAANCA2X5pw251.png



這就完成了。如今是在虛擬機中作的, 在實際環境中可能又會有各類各樣的毛病。 並且有時候可能要安裝多個版本的系統,如ubuntu, fedora...... 。這時就要使用cobbler來安裝。

cobbler實際上是pxe的二次封裝,一些文件或配置能夠自動生成,使用起來很方便。


用這種簡單的菜單再用vesamenu.c32,發現頗有意思。並且使用起來也沒有什麼問題。

wKioL1bMCAOxx2IwAABbVPC_vyc181.png


謝謝瀏覽。j_0003.gif

相關文章
相關標籤/搜索