现在的位置: 首页 > Linux > 正文

无人值守安装linux系统(pxe+dhcp+ftp+tftp)

时间:2013年11月09日 | 分类:Linux | 评论: 3 条 | 浏览:2,577 次

在我们实际工作中,特别是企业处于快速发展期,服务器可能面临批量上线时,面对那么多服务器,如何实现快速安装操作系统,并及时完成任务,无人值守安装,可以很好的解决这个问题。

一、无人值守安装原理图及其简述:

图片如下:

pxe

安装顺序如下:

(1)、PXE Client向DHCP发送请求,请求分配IP地址 [前提:网卡支持pxe,其次,在bios设置开机网络启动]

(2)、DHCP服务器提收到客户端的请求,验证是否来至合法的PXE Client的请求,如果通过的话,为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置

(3)、客户端收到回应后,向服务器(TFTP服务器)请求下载启动文件:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件

(4)、当服务器(TFTP服务器)收到客户端的请求后,向客户端传送启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default),default文件下载完成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核

(5)、向(FTP服务器)请求下载自动应答文件:ks.cfg

(6)、客户端根据ks.cfg的配置,安装操作系统

二、PXE + KickStart安装的条件:

(1)、一台支持PXE网卡的主机

(2)、DHCP 服务器:用来给客户机分配IP

(3)、TFTP 服务器:用来存放PXE的相关文件(pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img)

(4)、FTP 服务器:用来存放系统安装文件

(5)、kickstart生成的ks.cfg配置文件

三、无人值守安装案例:

1.环境:red hat linux 6.3(tftp+ftp+dhcp+pxe+kickstart)

  1. [root@rhel1 kongzhong]# uname -a  
  2. Linux rhel1.kongzhong.com 2.6.32-279.el6.x86_64 #1 SMP Wed Jun 13 18:24:36 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux  

2.步骤如下:

(1).切换到root用户,关闭防火墙,清空策略,关闭开机启动,关闭selinux

  1. [kongzhong@rhel1 ~]$ sudo su  
  2. [root@rhel1 kongzhong]# iptables -F  
  3. [root@rhel1 kongzhong]# /etc/init.d/iptables stop  
  4. [root@rhel1 kongzhong]# chkconfig iptables off  
  5. [root@rhel1 kongzhong]# vim /etc/selinux/config  
  6. SELINUX=permissive  

(2).安装tftp、vsftp、dhcp、xinetd、system-config-kickstart等软件

  1. [root@rhel1 kongzhong]# yum -y install dhcp vsftpd xinetd tftp-server pykickstart system-config-kickstart  
  2.   
  3. # 启动ftp,并设置为开机启动。具体配置,请参看以前的一篇配置yum仓库的文章,有讲解  
  4. [root@rhel1 /]# /etc/init.d/vsftpd start  
  5. Starting vsftpd for vsftpd: [ OK ]  
  6. [root@rhel1 /]# chkconfig vsftpd on  
  7.   
  8. # 配置dhcp服务器  
  9. [root@rhel1 /]# vim /etc/dhcp/dhcpd.conf  
  10. ddns-update-style interim;  
  11. #authoritative;  
  12. ignore client-updates;  
  13. subnet 192.168.1.0 netmask 255.255.255.0 {  
  14. range 192.168.1.101 192.168.1.200;  
  15. default-lease-time 21600;  
  16. max-lease-time 43200;  
  17. option domain-name-servers 192.168.1.1;  
  18. option routers 192.168.1.1;  
  19. option subnet-mask 255.255.255.0;  
  20. option nis-domain "kongzhong.com";  
  21. option time-offset -18000;  
  22. # tftp server 指定tftp-server服务器的IP地址  
  23. next-server 192.168.1.11;  
  24. # pxe 得到IP以后的引导文件  
  25. filename "pxelinux.0";  
  26. }  
  27.   
  28. # 启动dhcp服务器,并设置为开机启动  
  29. [root@rhel1 /]# /etc/init.d/dhcpd start  
  30. Starting dhcpd: [ OK ]  
  31. [root@rhel1 /]# chkconfig dhcpd on  
  32.   
  33. # 编辑tftp的配置文件  
  34. [root@rhel1 /]# vim /etc/xinetd.d/tftp  
  35. # default: off  
  36. # description: The tftp server serves files using the trivial file transfer \  
  37. # protocol. The tftp protocol is often used to boot diskless \  
  38. # workstations, download configuration files to network-aware printers, \  
  39. # and to start the installation process for some operating systems.  
  40. service tftp  
  41. {  
  42. socket_type = dgram  
  43. protocol = udp  
  44. wait = yes  
  45. user = root  
  46. server = /usr/sbin/in.tftpd  
  47. server_args = -s /var/lib/tftpboot # 这个路径可以不修改,也可以写你自己指定的目录  
  48. disable = no # 这里的yes改为no  
  49. per_source = 11  
  50. cps = 100 2  
  51. flags = IPv4  
  52. }  
  53.   
  54. # 启动超级守护进程  
  55. [root@rhel1 /]# service xinetd start  
  56. Starting xinetd: [ OK ]  
  57. [root@rhel1 /]# chkconfig xinetd on  

(3).复制需要用到相关文件

  1. # 挂载镜像,复制镜像  
  2. # 我的镜像已经复制到ftp的共享目录下[这里看不明白的,请看yum仓库搭建的文章]  
  3. [root@rhel1 images]# cd /var/ftp/rhel6/images/pxeboot/  
  4. [root@rhel1 pxeboot]# ll  
  5. total 33632  
  6. -r--r--r--. 1 root root 30442765 Nov 1 22:51 initrd.img  
  7. -r--r--r--. 1 root root 441 Nov 1 22:51 TRANS.TBL  
  8. -r-xr-xr-x. 1 root root 3986992 Nov 1 22:51 vmlinuz  
  9. # 将上面路径中的initrd.img和vmlinuz文件 复制到/var/lib/tftpboot/目录下  
  10. [root@rhel1 pxeboot]# cp initrd.img vmlinuz /var/lib/tftpboot/  
  11.   
  12. # 找到pxelinux.0驱动文件,并把它复制到/var/ftp/tftpboot/目录下  
  13. [root@rhel1 /]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/  
  14.   
  15. # 显示刚才复制的情况,下面这些文件都不能少  
  16. [root@rhel1 /]# cd /var/lib/tftpboot/  
  17. [root@rhel1 tftpboot]# ll  
  18. total 33656  
  19. -r--r--r--. 1 root root 30442765 Nov 6 21:34 initrd.img  
  20. -rw-r--r--. 1 root root 26828 Nov 6 21:39 pxelinux.0  
  21. -r-xr-xr-x. 1 root root 3986992 Nov 6 21:34 vmlinuz  
  22.   
  23. # 建立 pxelinux.cfg 目录[这个目录是必须的]  
  24. [root@rhel1 tftpboot]# mkdir pxelinux.cfg  
  25.   
  26. # 复制 /var/ftp/rhel6/isolinux/下 模板文件(isolinux.cfg),到 /var/lib/tftpboot/pxelinux.cfg/目录下,并改名为default  
  27. [root@rhel1 tftpboot]# cp /var/ftp/rhel6/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default  
  28. [root@rhel1 pxelinux.cfg]# chmod 755 default # 修改文件权限  
  29.   
  30. # 编辑刚才配置文件,未见内容如下:  
  31. [root@rhel1 pxelinux.cfg]# vim default  
  32. default rhel6 # 默认启动哪个系统[即用户输入的指令]  
  33. prompt 1 # 是否显示 boot:[1:表示显示]  
  34. timeout 600 # 默认等待时间  
  35. display boot.msg  
  36. # 标签,rhel6是指一个标签  
  37. label rhel6  
  38. kernel vmlinuz  
  39. append initrd=initrd.img ks=ftp://192.168.1.11/rhel6/ks.cfg # 指定ks.cfg文件的位置  
  40. # 标签,文本安装  
  41. label rhel6-text  
  42. kernel vmlinuz  
  43. append initrd=initrd.img text  
  44. # 标签,硬盘启动  
  45. label local  
  46. localboot 1  

(4).生成ks.cfg文件,使用system-config-kickstart 生成图形化界面,具体根据界面选择,这里就不详述,仅给出ks.cfg文件

  1. [root@rhel1 pxelinux.cfg]# system-config-kickstart # 在图形化界面,生成自动安装文件:ks.cfg  
  2. # 复制ks.cfg文件到 ftp共享目录下: /var/ftp/rhel6/  
  3. [root@rhel1 pxelinux.cfg]# cp ks.cfg /var/ftp/rhel6/  
  4.   
  5. # 下面看一下ks.cfg的详细配置:  
  6. [root@rhel1 pxelinux.cfg]# vim /var/ftp/rhel6/  
  7. #platform=x86, AMD64, or Intel EM64T  
  8. #version=DEVEL  
  9. # Firewall configuration  
  10. firewall --disabled  
  11. # Install OS instead of upgrade  
  12. install  
  13. # Use network installation  
  14. url --url="ftp://192.168.1.11/rhel6"  
  15. # Root password  
  16. rootpw --iscrypted $1$NxE8YVhk$x9N62YgtEkdC.WpgZve8f.  
  17. # System authorization information  
  18. auth --useshadow --passalgo=sha512  
  19. # Use text mode install  
  20. text  
  21. firstboot --disable  
  22. # System keyboard  
  23. keyboard us  
  24. # System language  
  25. lang en_US  
  26. # SELinux configuration  
  27. selinux --disabled  
  28. # Installation logging level  
  29. logging --level=info  
  30. # Reboot after installation  
  31. reboot  
  32. # System timezone  
  33. timezone Asia/Shanghai  
  34. # Network information  
  35. network --bootproto=dhcp --device=eth0 --onboot=on  
  36. # System bootloader configuration  
  37. bootloader --location=mbr  
  38. # Clear the Master Boot Record  
  39. zerombr  
  40. # Partition clearing information  
  41. clearpart --all --initlabel  
  42. # Disk partitioning information  
  43. part /boot --fstype="ext4" --size=200  
  44. part swap --fstype="swap" --size=1000  
  45. part / --fstype="ext4" --size=20700  
  46.   
  47. %post --interpreter=/bin/bash  
  48. # 安装完成后,执行的脚本  
  49. #!/bin/bash  
  50. # 创建用户,设置密码,设置固定ip地址,设置hostname,设置开机启动方式,  
  51. /usr/sbin/useradd kongzhong  
  52. /bin/echo kongzhong|passwd --stdin kongzhong  
  53. ADDRESS=`/sbin/ifconfig eth0|grep -i "inet\>" |awk '{print $2}'`  
  54. NUM=${ADDRESS##*.}  
  55. NETADDRESS=`/sbin/ifconfig eth0|grep -i "inet\>" |awk '{print $2}'|awk -F: '{print $2}'`  
  56. sed -i -e "s/HOSTNAME.*/HOSTNAME=client$NUM.kongzhong.com/g" /etc/sysconfig/network  
  57. sed -i -e "s/127.0.0.1.*/127.0.0.1 client$NUM.kongzhong.com localhost localhost.localdomain/g" /etc/hosts  
  58. sed -i -e "s/BOOTPROTO.*/BOOTPROTO=static\nIPADDR=$NETADDRESS\nNETMASK=255.255.255.0\nGATEWAY=192.168.1.1\nDNS1=192.168.1.1\n/g" /etc/sysconfig/network-scripts/ifcfg-eth0  
  59. sed -i -e "s/id:3:initdefault/id:5:initdefault/g" /etc/inittab  
  60. # 临时获取root权限,配置yum源  
  61. /bin/chmod 755 /etc/sudoers  
  62. cat >> /etc/sudoers << EOF   
  63. kongzhong ALL=(ALL) NOPASSWD:ALL   
  64. EOF   
  65. /bin/chmod 440 /etc/sudoers   
  66. # 配置yum源  
  67. rm -rf /etc/yum.repos.d/*   
  68. cat >> /etc/yum.repos.d/test.repo << EOF  
  69. [other]  
  70. name=other  
  71. baseurl=ftp://192.168.1.11/rhel6/other  
  72. enabled=1  
  73. gpgcheck=0  
  74. [HighAvailability]  
  75. name=HighAvailability  
  76. baseurl=ftp://192.168.1.11/rhel6/HighAvailability  
  77. enabled=1  
  78. gpgcheck=0  
  79. [LoadBalancer]  
  80. name=LoadBalancer  
  81. baseurl=ftp://192.168.1.11/rhel6/LoadBalancer  
  82. enabled=1  
  83. gpgcheck=0  
  84. [Server]  
  85. name=Server  
  86. baseurl=ftp://192.168.1.11/rhel6/Server  
  87. enabled=1  
  88. gpgcheck=0  
  89. [ResilientStorage]  
  90. name=ResilientStorage  
  91. baseurl=ftp://192.168.1.11/rhel6/ResilientStorage  
  92. enabled=1  
  93. gpgcheck=0  
  94. EOF  
  95. %end  
  96.   
  97. %packages  
  98. @base  
  99. @basic-desktop  
  100. @client-mgmt-tools  
  101. @compat-libraries  
  102. @console-internet  
  103. @fonts  
  104. @general-desktop  
  105. @graphical-admin-tools  
  106. @input-methods  
  107. @internet-browser  
  108. @virtualization  
  109. @virtualization-client  
  110. @virtualization-platform  
  111. @virtualization-tools  
  112. @x11  
  113. %end  

(5).现在可以重新检查一下,tftp,ftp,dhcp,xinetd是否开启,并设置开机启动;

iptable和selinux是否关闭,这个一定要关闭,不然会有问题,目前没找到解决方案,如果有朋友有好的建议,可以联系我;

如果一切都没有问题,现在就可以找机器测试了。

 

×