zoukankan      html  css  js  c++  java
  • (转)Linux的PXE与UEFI PXE远程安装系统

    Linux的PXE与UEFI PXE远程安装系统

    原文链接:http://control.blog.sina.com.cn/admin/article/article_add.php

    在Linux中有多种的安装方式:HD、USB、CDROM、PXE及远程管理卡等。在我们的系统运维的生涯中,经常要安装操作系统,然而我们维护的机器不是一两台而已,一般的企业服务器数量都在几十、几百、几千、甚至上万台。这么多的机器,如果人工的一台一台去安装,那我们这些运维人员,可能要把大部分时间都花费在了安装系统上,所以,我们一般都会建立一个PXE服务器,通过网络来批量部署系统。

    随着计算机产品的更新换代以及IT企业的发展,一个公司的计算机型号种类越来越多,硬盘也不一样,那么我们维护的手段也需要与时俱进。本文主要介绍硬件环境差异比较大的情况下,如何搭建一机多用的PXE服务器,下面以CentOS-6.4-x86_64版本为例,进行服务器的配置。

    一、普通机器的PXE系统部署

    实现自动获取IP网络安装linux是这样的:客启端PXE网卡启动-->通过Bootp协议广播dhcp请求-->DHCP服务器-->获取IP,TFTP服务器地址-->从TFTP上下载 pxelinux.0以及系统内核文件vmlinuz、initrd.img-->启动系统-->(到指定url去下载ks.cfg文件-->根据ks.cfg文件去NFS/HTTP/FTP服务器自动下载软件包)安装系统-->完成安装。

    主要使用的使用到的服务,FTP server用来发布linux系统的安装树(也可以使用NFS、HTTP或HTTPS),DHCP server为客户端分配ip并提供TFTP服务器地址及PXE启动文件位置,TFTP server为客户端提供引导文件。三个服务可以安装在同一台服务器上,也可以安装在三台服务器上。

    1、安装配置FTP server

    
    
    1. [root@pxe ~]# yum install vsftpd 
    2. [root@pxe ~]# chkconfig vsftpd on 
    3. [root@pxe ~]# service vsftpd start 

    vsftpd的默认配置文件在/etc/vsftpd/vsftpd.conf,共享目录在/var/ftp/pub/下,不用做什么修改就可以直接使用了。安装好后要把系统盘镜像的全部文件复制到这里,或挂载到这个目录下,我就是把光盘镜像挂载到了这里,因为还有个ks.cfg文件要发到这里,所以我在这里有建立了mirror目录,将系统镜像挂载到了/var/ftp/pub/mirror/下。

    2、安装配置DHCP server

    
    
    1. [root@pxe ~]# yum install dhcp 

    编辑配置文件,这里是很重要的。

    
    
    1. [root@pxe ~]# vim /etc/dhcp/dhcpd.conf 
    2. default-lease-time 600; 
    3. max-lease-time 7200; 
    4. ddns-update-style none; 
    5. subnet 10.12.190.0 netmask 255.255.255.0 
    6. range dynamic-bootp 10.12.190.100 10.12.190.120; 
    7. option routers 10.12.190.254; 
    8. option subnet-mask 255.255.255.0; 
    9. filename "pxelinux.0";          //如果不是在TFTP根目录下,要写上目录 
    10. next-server 10.12.190.140;      //tftp服务器地址 

    3、安装配置TFTP server

    ①安装TFTP,然后编辑配置文件,开启开启服务,默认的数据目录/var/lib/tftpboot

    
    
    1. [root@pxe ~]# yum install tftp-server 
    2. [root@pxe ~]# vim /etc/xinetd.d/tftp 
    3. service tftp 
    4. socket_type             dgram 
    5. protocol                udp 
    6. wait                    yes 
    7. user                    root 
    8. server                  /usr/sbin/in.tftpd 
    9. server_args             -s /tftpboot   //这个可以自己修改 
    10. disable                 no          //将yes改成no是启用 
    11. per_source              11 
    12. cps                     100 
    13. flags                   IPv4 
    14. [root@pxe ~]# service xinetd restart 

    ②将pxelinux.0拷贝到tftpboot目录下

    
    
    1. [root@pxe ~]# cp /usr/share/syslinux/pxelinux.0 /tftpboot  //如果找不到这个文件,要安装syslinux软件包 

    ③将启动文件从光盘中找到,并复制到该目录下:

    
    
    1. [root@pxe ~]# ll /tftpboot/ 

    总用量 36084:

    
    
    1. -rwxrw-rw- root root 32491856 3月   2013 initrd.img      //这是一个初始化文件,一个最小的系统镜像 
    2. -rwxrw-rw- root root    26828 12月  22:57 pxelinux.0    //这文件是为legcay启动,它是legcay的启动镜像, 
    3. drwxrwxrwx root root     4096 1月  28 12:14 pxelinux.cfg  //该文件夹下放的是启动菜单,手动创建 
    4. -rwxrw-rw- root root   151230 3月   2013 splash.jpg     //背景图片,可以不要 
    5. -rwxrw-rw- root root   162860 3月   2013 vesamenu.c32  //legacy BIOS引导菜单工具,可以从光盘或 /usr/share/syslinux/ 中找到 
    6. -rwxrw-rw- root root  4043888 3月   2013 vmlinuz       //内核文件 

    ④在pxelinux.cfg目录下,建立默认文件,该文件可以使用光盘中的isolinux.cfg文件来当模板,这个启动菜单很重要

    
    
    1. [root@pxe ~]# vim /tftpboot/pxelinux.cfg/default 
    2. default vesamenu.c32 
    3. timeout 30 
    4. menu background splash.jpg 
    5. menu title Welcome to PXE CentOS-6.4-x86_64! 
    6. menu color border #ffffffff #00000000 
    7. menu color sel #ffffffff #ff000000 
    8. menu color title #ffffffff #00000000 
    9. menu color tabmsg #ffffffff #00000000 
    10. menu color unsel #ffffffff #00000000 
    11. menu color hotsel #ff000000 #ffffffff 
    12. menu color hotkey #ffffffff #ff000000 
    13. menu color scrollbar #ffffffff #00000000 
    14. label linux 
    15. menu label Install or upgrade CentOS-6.4-x86_64 an existing system from to Network 
    16. kernel vmlinuz 
    17. append initrdinitrd=initrd.img ksdevice=eth0 repo=ftp://10.12.190.187/pub/mirror ip=dhcp 
    18. label linux 
    19. menu label Install CentOS-6.4-x86_64 use kisckstart file 
    20. menu default 
    21. kernel vmlinuz 
    22. append initrdinitrd=initrd.img ip=10.12.190.183 netmask=255.255.255.0 gateway=10.12.13.254 dns=202.106.0.20 ksdevice=eth0  ks=ftp://10.12.190.187/pub/ks.cfg 
    23. label rescue 
    24. menu label ^Rescue installed system 
    25. kernel vmlinuz 
    26. append initrdinitrd=initrd.img rescue ksdevice=eth0 repo=ftp://10.12.190.187/pub/mirror ip=dhcp 
    27. label local 
    28. menu label Boot from ^local drive 
    29. localboot 0xffff 

    以上参数可以接在kernel后边,也可以接在initrd.img后边,都不影响。

    ksdevice= 是为了指定使用哪块网卡,因为机器有多块网卡,无人值守会卡在这里。

     

    repo= 是指定安装镜像的url,如果没有,就会提示要一下画面,那就需要手工处理了。

    ip= 可以指定网卡自动获取ip,还是使用固定ip,如果使用固定ip,系统将把这个ip写入到配置文件中去。

    ks= 是指定ks.cfg文件的url,ks.cfg是个应答文件,可以替我们处理所有安装时,所有需要手工设置的内容,该文件可以直接编辑系统中的/home/anaconda-ks.cfg文件,或者在图形化下使用system-config-kickstart包来编辑一个,非常好用。

    有的时候,可能需要手工来处里某一台机器,还要跑到那台机器前吗?当然不需要,安装的时候也可以使用vnc来远程操作的。机器不一样,用途也不一样,有的时候不能完全自动,也需要我们手工做些改动。

    ⑤允许远程访问安装系统

    在另一个系统上显示图形或字符安装界面,这时就可以使用vnc服务,这是操作系统本身就支持的功能,vnc选项启动VNC服务,vncpassword选项用来设置一个远程访问的密码,VNC密码必须至少6个字符,不设置密码去掉vncpassword选项也可以。使用方法很简单,可以写在PXE的引导菜单中,添加在kernel或initrd.img后边,或是在出现菜单画面时,按Tab键,编辑某一行,在最后边加入vnc vncpassword=123456字段,或是按Esa键,在命令行里直接输入linux vnc vncpassword=123456就可以了,U盘安装,光盘装都有效。

    假设远程机器ip是10.12.190.181.,被安装机器的ip是10.12.190.101

    (1)正向连接方式:

    
    
    1. linux vnc ip=10.12.190.101 netmask=255.255.255.0 gateway=10.12.190.254 vncpassword=123456 

    指定被安装机器的ip是10.12.190.181 网关是10.12.190.254 掩码是24, vnc连接的密码是123456

    由远程vnc客户端,连入被安装机器进行安装,之后的操作就和平时一样了。在安装系统上将显示如下信息:

    vnc连接地址为10.12.190.101:1

    (2)反向连接方式:

    在远程启动vnc的被动连接:vncviewer.exe -listen,当客户端安装过程启动后,远程端的vnc会自动连接

    
    
    1. linux vnc vncconnect=10.12.190.181 vncpassword=123456 

    vnc会自动反向联接10.12.190.181,如果远程机器开启vnc监听,在10次超时15秒后,会变成主动方式连接,在安装系统上将显示如下信息:

    以上2种方式,如果IP是DHCP自动获取的话,使用反向连接方式比较好,这样,无需知道安装系统的客户端获取的IP是多少,也可以建立连接。

    ⑥另一种安装菜单的写法:

    
    
    1. label linux 
    2. menu label Install or upgrade CentOS-6.4-x86_64 an existing system from to Network 
    3. kernel /vmlinuz ksdevice=eth0 repo=ftp://10.12.190.187/pub/mirror ip=dhcp 
    4. initrd /initrd.img 
    5. label linux 
    6. menu label Install CentOS-6.4-x86_64 use kisckstart file 
    7. menu default 
    8. kernel /vmlinuz ip=10.12.190.183 netmask=255.255.255.0 gateway=10.12.13.254 dns=202.106.0.20 ksdevice=eth0  ks=ftp://10.12.190.187/pub/ks.cfg 
    9. initrd /initrd.img 

    以上就是普通PXE安装系统的所有操作方法,现在就可以使用了。

    二、UEFI PXE的系统部署

    对于使用UEFI来启动的机器来说,上述方法已经完全无效了,根本无法顺利的安装系统了,如果想顺利的安装系统,必须首先加载UEFI驱动才可以。UEFI PXE和上边的方法区别就在于TFTPserver所提供的系统启动必须文件,和DHCP server的设置, 所使用到的服务还是这几个。

    1、TFTP server的配置

    配置文件与上边一样,只是目录中的文件要更换一下,这次要从系统盘中提取三个文件。

    将光盘中的efiboot.img挂在到系统中:

    
    
    1. [root@pxe ~]# mount -o loop efiboot.img /mnt 
    2. [root@pxe ~]# ll /mnt/EFI/BOOT/ 
    3. total 250 
    4. -rwxr-xr-x root root    411 Mar   2013 BOOTX64.conf     //为grub的配置文件,用于显示引导菜单 
    5. -rwxr-xr-x root root 251274 Mar   2013 BOOTX64.efi          //UEFI的启动镜像 
    6. -rwxr-xr-x root root   1341 Mar   2013 splash.xpm.gz        //UEFI启动菜单工具 
    7. [root@pxe ~]# cp /mnt/EFI/BOOT/* /tftpboot/ 

    BOOTX64.efi就是我们开机所需要的,这三个文件也可也直接使用光盘中EFI目录下的文件。

    2、DHCP server配置

    DHCP重点是要修改一下/etc/dhcp/dhcpd.conf文件,把开机前引导改成BOOTX64.efi,之前我们指定的是pxelinux.0这个文件。

    
    
    1. [root@pxe ~]# vim /etc/dhcp/dhcpd.conf 
    2. default-lease-time 600; 
    3. max-lease-time 7200; 
    4. ddns-update-style none; 
    5. subnet 10.12.190.0 netmask 255.255.255.0 
    6. range dynamic-bootp 10.12.190.100 10.12.190.120; 
    7. option routers 10.12.190.254; 
    8. option subnet-mask 255.255.255.0; 
    9. filename "BOOTX64.efi"; 
    10. next-server 10.12.190.140; 

    3、创建开机启动菜单

    
    
    1. [root@pxe ~]# vim /tftpboot/efidefault 
    2. default=0 
    3. timeout=15 
    4. splashimage=(nd)/splash.xpm.gz 
    5. title Install CentOS-6.4-x86_64 (UEFI) 
    6. root (nd) 
    7. kernel  /vmlinuz method=ftp://10.12.190.187/pub/mirror/ ip=10.12.16.100 netmask=255.255.255.0 gateway=10.12.16.1 lang=en_US keymap=us ksdevice=eth0 vnc vncpassword=123456 
    8. initrd /initrd.img 
    9. title Install CentOS-6.4-x86_64 use Kickstart File 
    10. root (nd) 
    11. kernel /vmlinuz ks=ftp://10.12.190.187/pub/ks.cfg ksdevice=eth0 ip=dhcp 
    12. initrd /initrd.img 
    13. title Rescue installed system 
    14. root (nd) 
    15. kernel /vmlinuz rescue method=ftp://10.12.190.187/pub/mirror 
    16. initrd /initrd.img 

    注意这个菜单只能这样编写,选项参数都要加在kernel行后边,不然无法加载,使用的参数和普通的PXE是一样的,编辑好之后就可以使用了。

    选择一个菜单后,等待的时间比较长,当你看到这是小企鹅时,UEFI驱动已经加载上了,说明你TFTP server和DHCP server设置都没有问题。

    如果你看到上面的错误信息,说明是的你的菜单写得有问题,initrd /initrd.img要另起一行,不能与kernel同行。

    UEFI安装系统时,也可以使用vnc远程安装,但硬盘的分区表必须是GPT格式的,如果你的硬盘不是这种格式的,那就需要多一步操作了,使用parted命令去修改。遗憾的是vnc没有提供Ctrl+Alt+F1~F6快捷键,让你切换到一个字符终端去操作。不过也不是没有办法,我们可以在救援模式下连上vnc,这样输入命令操作就行了。

    parted命令的使用,请参考此文档

    三、混合模式

    一般情况下,我们的机房里,2种类型的服务都会有,可能还会有安腾架构的机器,不会是统一型号的。这样的话,每次都要去修改DHCP server服务,比较麻烦,将这些不同的机器划分不同的vlan里,每个vlan里都做个DHCP服务器,这样有点太浪费资源了。所以就要用个更好的方法,一台服务器同时提供多种系统安装,而要安装系统的客户端机器,会自己从服务器下载属于自己的引导文件。

    1、TFTP server配置

    在/tftpboot/目录下,不同平台需要的文件是不一样的,可以直接把它们全都放在TFTP的根目录下,但这样管理不太方便,所以我将普通PXE的引导文件放在/tftpboot/Legacy/下,将UEFI的引导文件放在/tftpboot/UEFI下,其他平台的也这样操作就可以了。

    2、DHCP server配置

    想要实现混合模式,最关键的就是DHCP的配置文件了

    
    
    1. [root@pxe ~]# vim /etc/dhcp/dhcpd.conf 
    2. default-lease-time 600; 
    3. max-lease-time 7200; 
    4. ddns-update-style none; 
    5. option space PXE; 
    6. option PXE.mtftp-ip    code 1 ip-address; 
    7. option PXE.mtftp-cport code 2 unsigned integer 16; 
    8. option PXE.mtftp-sport code 3 unsigned integer 16; 
    9. option PXE.mtftp-tmout code 4 unsigned integer 8; 
    10. option PXE.mtftp-delay code 5 unsigned integer 8; 
    11. option arch code 93 unsigned integer 16; 
    12. subnet 10.12.190.0 netmask 255.255.255.0 
    13. option routers 10.12.190.254; 
    14. range 10.12.190.10 10.12.190.20; 
    15. class "pxeclients" 
    16. match if substring (option vendor-class-identifier, 0, 9) "PXEClient"; 
    17. next-server 10.12.190.181; 
    18. if option arch 00:02 
    19. filename "ia64/elilo.efi"; 
    20. else if option arch 00:06 
    21. filename "X86PC/bootia32.efi"; 
    22. else if option arch 00:07 
    23. filename "UEFI/BOOTX64.efi"; 
    24. else 
    25. filename "Legacy/pxelinux.0"; 

    这里不再详细解释每行的含义,具体可以参考相关资料。这里很重要的一点是根据客户端信息进行判断来指定服务器为客户端提供哪些信息。

    启动文件名称(如果客户端使用EFI,启动名称为bootia32.efi和boottx64.efi,如果客户端使用Legacy BIOS启动,名称为pxelinux.0),其它服务部分没有什么变化,FTP服务不需要做什么更改。

    至此,我们就大功告成了,所有的准备工作就都完成了,现在就可以使用这个多平台的PXE进行批量部署了。

  • 相关阅读:
    组合数据类型练习
    Python基础综合练习
    编译原理
    词法分析
    大数据概述
    C语言文法分析 <源函数> → <外部声明> | <源程序> <外部声明> <外部声明> → <函数定义> | <定义> <函数定义> → <类型标识符> <声明部分语句> <标识符类型> → <无类型> | <字符> | <整型> | <浮点型> <声明> <指针直接声明> | <直接
    熟悉常用的Linux操作
    附加进程调试
    关于SQL语句中的nolock
    用SVN完成分支的合并
  • 原文地址:https://www.cnblogs.com/lixuebin/p/10814282.html
Copyright © 2011-2022 走看看