pxe安装centos系统,pxe安装centos2、客户机自动从tf


环境:

系统: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服务器下载程序开始安装。

注意:centos7字符界面安装的时候最好不要小于1G的内存。不然可能会有稀奇古怪的问题。图形界面安装要更多的内存。

一、使用centos6.7自带的引导文件。

安装centos6.7.

1、安装配置dhcp、tftp与httpd服务。

[root@localhost~]#yuminstallhttpdtftp-servertftpdhcp-y

配置dhcpd。配置目录/etc/dhcp/。 复制dhcp配置样例文件:

[root@localhostdhcp]#cp/usr/share/doc/dhcp-4.2.5/dhcpd.conf.exampledhcpd.conf

cp:overwrite‘dhcpd.conf’?y

配置结果:

#optiondomain-name"star.com";#指定搜索域,在我们这里用不到,注释了。

#optiondomain-name-servers192.168.40.100;#DNS

default-lease-time3600;#默认租约

max-lease-time7200;#最长租约

log-facilitylocal5;#日志。要在/etc/rsyslog.conf中添加local5日志设施。也可以默认不用修改。

subnet192.168.40.0netmask255.255.255.0{#添加作用域。

range192.168.40.10192.168.40.20;#地址池

filename"pxelinux.0";#客户端要去找的文件。

next-server192.168.40.100;#客户端去哪里找filename的文件。

}

#hostnode1{#如果作地址保留,或只是为单台主机安装系统。就只设置这个。

#hardwareethernet0:0:c0:5d:bd:95;#

#filename"pxelinux.0";

#next-server192.168.40.100;

#}

启动的时候如果有问题,可以一直启动dhcpd,会显示哪些行有错误。

启动完成 ss -unl查找67端口是否打开,没问题我们用客户机测试一下。

看起来工作正常。

启动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

text

firstboot--disable

keyboardus

langen_US

selinux--disabled

reboot

timezoneAsia/Shanghai

bootloader--append="rhgbcrashkernel=autoquiet"--location=mbr--driveorder="sda"

zerombr

clearpart--all

part/boot--fstype="ext4"--size=200

partpv.008--size=61440

volgroupvg0--pesize=8192pv.008

logvol/--fstype=ext4--name=root--vgname=vg0--size=20480

logvolswap--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文件。

文件放在httpd服务器的主目录里。 anaconda支持http协议,不用再使用tftp了。

1

2

[root@localhost~]#ls/var/www/html

centos6centos6.cfg

同时ks文件中所指定的url就是仓库的位置,我这里就在相同目录的centos6下面。

设置引导菜单。

vim /var/lib/tftpboot/pxelinux.cfg/default

defaultvesamenu.c32

#prompt1

timeout20

menubackgroundsplash.jpg

menutitleWelcometoCentOS6.7!

menucolorborder0#ffffffff#00000000

menucolorsel7#ffffffff#ff000000

menucolortitle0#ffffffff#00000000

menucolortabmsg0#ffffffff#00000000

menucolorunsel0#ffffffff#00000000

menucolorhotsel0#ff000000#ffffffff

menucolorhotkey7#ffffffff#ff000000

menucolorscrollbar0#ffffffff#00000000

labellinux

menulabel^InstallCentOS6

menudefault

kernelvmlinuz

appendinitrd=initrd.imgks=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

timezoneAsia/Shanghai

url--url="http://192.168.40.100/centos7"

langzh_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

partswap--fstype="swap"--size=2048

part/usr--fstype="xfs"--size=20480

part/--fstype="xfs"--size=20480

%packages

@base

@core

%end

来看一下现在的httpd的根目录:

[root@localhosthtml]#ls

centos6centos6.cfgcentos7centos7.cfg

复制一下内核文件 : 当前目录在tftp根目录。

cp/mnt/cdrom1/images/pxeboot/initrd.imginitrd.7.img

cp/mnt/cdrom1/images/pxeboot/vmlinuzvmlinuz.7

[root@localhosttftpboot]#ls

initrd.7.imginitrd.imgpxelinux.0pxelinux.cfgsplash.jpgvesamenu.c32vmlinuzvmlinuz.7

注意:不要复制成centos6的内核了。

修改启动菜单。

defaultvesamenu.c32

timeout100#时间改长了一点,现在是10秒。

menubackgroundsplash.jpg

menutitleWelcometoCentOS6.7!

menucolorborder0#ffffffff#00000000

menucolorsel7#ffffffff#ff000000

menucolortitle0#ffffffff#00000000

menucolortabmsg0#ffffffff#00000000

menucolorunsel0#ffffffff#00000000

menucolorhotsel0#ff000000#ffffffff

menucolorhotkey7#ffffffff#ff000000

menucolorscrollbar0#ffffffff#00000000

labellinux

menulabel^InstallCentOS6

menudefault

kernelvmlinuz

appendinitrd=initrd.imgks=http://192.168.40.100/centos6.cfg

labellinux

menulabel^InstallCentOS7

kernelvmlinuz.7

appendinitrd=initrd.7.imgks=http://192.168.40.100/centos7.cfg

~

也就是多了4行用于centos7的菜单。menu default是用于默认启动的。

我们来缕一下,dhcp发送启动引导文件。客户机收到文件启动引导,开始加载第二阶段。成功以后,会开始加载内核文件,内核文件再启动anaconda。anaconda加载ks文件,开始安装过程。

我们来测试一下:

看起来工作正常。重新进入6也工作正常 。 下面是7的。

这个product.img下载失败没有影响,光盘里面也没有这个文件。

格式化成功,并开始安装程序了,我们也可以看到一共469个包。

这里时间有点长,耐心等一下。 结果也正常。重启进入系统。这个方块是因为ks文件中的lang指定的是CN, 注释掉lang就可以正常显示了。

二、使用centos7的引导文件。

使用centos7的引导文件也是一样,不过刚才试的时候出了点问题,而现在又好了,有点奇怪,不知道好用不。

复制centos7光盘isolinux下的vesamenu.c32到tftp根目录,覆盖原来centos6的。

复制centos7光盘的isolinux.cfg到pxelinux.cfg/default

我这里的内容,基本上也就是把内核传递参数那里改一下就可以了。 这个文件有好多颜色控制。我这里就不删除了,格式基本也没有变化,用centos6带的那个菜单文件也可以用。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

defaultvesamenu.c32

timeout600

menuclear

menubackgroundsplash.png

menutitleCentOS7

menuvshift8

menurows18

menumargin8

#menuhidden

menuhelpmsgrow15

menutabmsgrow13

#BorderArea

menucolorborder*#00000000#00000000none

#Selecteditem

menucolorsel0#ffffffff#00000000none

#Titlebar

menucolortitle0#ff7ba3d0#00000000none

#Press[Tab]message

menucolortabmsg0#ff3a6496#00000000none

#Unselectedmenuitem

menucolorunsel0#84b8ffff#00000000none

#Selectedhotkey

menucolorhotsel0#84b8ffff#00000000none

#Unselectedhotkey

menucolorhotkey0#ffffffff#00000000none

#Helptext

menucolorhelp0#ffffffff#00000000none

#Ascrollbarofsometype?Notsure.

menucolorscrollbar0#ffffffff#ff355594none

#Timeoutmsg

menucolortimeout0#ffffffff#00000000none

menucolortimeout_msg0#ffffffff#00000000none

#Commandprompttext

menucolorcmdmark0#84b8ffff#00000000none

menucolorcmdline0#ffffffff#00000000none

#Donotdisplaytheactualmenuunlesstheuserpressesakey.Allthatisdisplayedisatimeoutmessage.

menutabmsgPressTabforfullconfigurationoptionsonmenuitems.

menuseparator#insertanemptyline

menuseparator#insertanemptyline

labellinux

menulabel^InstallCentOS7

kernelvmlinuz.7

appendinitrd=initrd.7.imgks=http://192.168.40.100/centos7.cfg

labelcheck

menulabelinstallCentOS6

menudefault

kernelvmlinuz

appendinitrd=initrd.imgks=http://192.168.40.100/centos6.cfg

menuend

启动测试:

正常安装完成。centos6测试了下,也正常。

三、使用第三方的引导文件。

我们还可以用syslinux包里带的一些引导文件。

cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk}

上面这几个文件,用到的也就menu.c32文件,其它另外的两个c32文件不知道是干什么用的,另外memdisk好像是一个内核文件。

menu.c32是字符界面的窗口, 我们上面用的vesamenu.c32是图形的。

我这里只用menu.c32和一个菜单文件就可以用了。

菜单文件还是那个default,只不过要自己定了。与centos6上面的差不多。

1

2

3

4

5

6

7

8

9

defaultmenu.c32#启动menu.c32

prompt5

timeout30

MENUTITLECentOS7PXEMenu

LABELlinux

MENULABELInstallCentOS7x86_64

KERNELvmlinuz.7

APPENDinitrd=initrd.7.imgks=http://192.168.40.100/centos7.cfg

我现在的tftp目录:

initrd.7.img initrd.img menu.c32 pxelinux.0 pxelinux.cfgvmlinuzvmlinuz.7


当然可以忽略centos6的initrd与内核了。

工作正常。 不过用它安装centos6的时候有时候会在选择键盘的那里要手动。也不知道是不是刚才设置有问题,现在倒是自动安装了。

加上6以后:

现在的菜单文件:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

defaultmenu.c32

prompt5

timeout30

MENUTITLECentOS7PXEMenu

LABELlinux

MENULABELInstallCentOS7x86_64

KERNELvmlinuz.7

APPENDinitrd=initrd.7.imgks=http://192.168.40.100/centos7.cfg

LABELlinux

MENULABELInstallCentOS6x86_64

KERNELvmlinuz

APPENDinitrd=initrd.imgks=http://192.168.40.100/centos6.cfg

这就完成了。现在是在虚拟机中做的, 在实际环境中可能又会有各种各样的毛病。 而且有时候可能要安装多个版本的系统,如ubuntu, fedora...... 。这时就要使用cobbler来安装。

cobbler其实是pxe的二次封装,一些文件或配置可以自动生成,使用起来很方便。

用这种简单的菜单再用vesamenu.c32,发现很有意思。而且使用起来也没有什么问题。

谢谢浏览。

相关内容

    暂无相关文章