设为首页 收藏本站
查看: 1265|回复: 0

[经验分享] pxe安装centos系统

[复制链接]

尚未签到

发表于 2018-4-27 09:15:11 | 显示全部楼层 |阅读模式
  环境:
  系统: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 ~]# 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端口是否打开,没问题我们用客户机测试一下。
DSC0000.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  
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

  可惜都是英文的 DSC0001.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文件安装完成,也就算安装完成了。
DSC0002.png

  在这里倒数第二行可以看到为什么要在pxelinux.cfg/default里面放菜单。 pxelinux.0默认读取的文件就是这个。
DSC0003.png

DSC0004.png

DSC0005.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/images/pxeboot/initrd.img initrd.7.img
cp /mnt/cdrom1/images/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文件,开始安装过程。

  我们来测试一下:
DSC0006.png

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

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

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

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

  二、使用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  启动测试:

  

DSC00010.png

DSC00011.png

DSC00012.png

  正常安装完成。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上面的差不多。
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与内核了。

DSC00013.png

DSC00014.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
DSC00015.png

DSC00016.png

  

  这就完成了。现在是在虚拟机中做的, 在实际环境中可能又会有各种各样的毛病。 而且有时候可能要安装多个版本的系统,如ubuntu, fedora...... 。这时就要使用cobbler来安装。
  cobbler其实是pxe的二次封装,一些文件或配置可以自动生成,使用起来很方便。
  用这种简单的菜单再用vesamenu.c32,发现很有意思。而且使用起来也没有什么问题。
DSC00017.png

  谢谢浏览。 DSC00018.gif
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-452540-1-1.html 上篇帖子: CentOS最小安装后的优化 下篇帖子: Centos+Serync+inotify实时同步数据文件(二)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表