前言:
一个是方便日常工作,另一个就是可以用来装逼!
常规装系统的办法有哪些?
光盘安装系统===>一个服务器DVD内置光驱百千块,百台服务器都配光驱就浪费了,因为一台服务器也就开始装系统能用的上,以后用的机会屈指可数。用USB外置光驱,插来插去也醉了。
U盘安装系统===>还是同样的问题,要一台一台服务器插U盘。
网络安装系统(ftp,http,nfs) ===>这个方法不错,只要服务器能联网就可以装系统了,但还是需要一台台服务器去敲键盘点鼠标。
1)对于个人:作为一名程序猿,而且是懂电脑的程序猿,祖传的泡咪咪的办法就是帮咪咪装系统,从此成为备胎之一
装系统大部分时间都浪费于下一步下一步等操作,如果同时要泡大量咪咪,广撒网捞鱼这时间是很宝贵的!不如自己带个笔记本里面装个虚拟机,做上无人值守安装系统,不管是linux还是windows都开机就搞定,这样就有了充分的时间和女神进行深入交流,而不至于浪费了宝贵的时间。
2)对于行业:自打若干年前 Red Hat 推出了 Kickstart,此后我们搞服务器的运维顿觉身价倍增。不再需要刻了光盘一台一台地安装 Linux,只要搞定 PXE、DHCP、 TFTP,还有那满屏眼花缭乱不知所云的 Kickstart 脚本,我们就可以像哈里波特一样,轻点魔棒,瞬间安装上百台服务器。这一堆花里胡哨的东西可不是一般人都能整明白的,没有大专以上学历,通不过英语四级, 根本别想玩转。总而言之,这是一份多么有前途,多么有技术含量的工作啊。
结语:有时候真相真他妈残酷这就是我开始整无人值守安装系统的初衷,知道真相的你是否会流下痛苦的眼泪?这种在很多人眼中很高大上的技术就这么被我糟蹋贬低了
1.PXE是什么
PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服 务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。
严格来说,PXE 并不是一种安装方式,而是一种引导方式。进行 PXE 安装的必要条件是在要安装的计算机中必须包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE 协议可以使计算机通过网络启动。此协议分为 Client端和 Server 端,而PXE Client则在网卡的 ROM 中。当计算机引导时,BIOS 把 PXE Client 调入内存中执行,然后由 PXE Client 将放置在远端的文件通过网络下载到本地运行。运行 PXE 协议需要设置 DHCP 服务器和 TFTP 服务器。DHCP 服务器会给 PXE Client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE Client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。此外,在 PXE Client 的 ROM 中,已经存在了 TFTP Client,那么它就可以通过 TFTP 协议到 TFTP Server 上下载所需的文件了。
详细工作流程,请参考下面这幅图:
PXE的超详细工作过程:
PXE Client向DHCP发送请求
当计算机开机时第一次登录网络的时候,发现本机上没有任何IP地址设定。PXE Client会从自己的PXE网卡启动,通过PXE BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,源IP地址是0.0.0.0,发送DHCP discover发现信息来寻找DHCP服务器,即向目标IP地址是255.255.255.255发送特定的广播信息。网络上每一台安装了TCP/IP协议的主机都会接收到这个广播信息,但只有DHCP服务器才会做出响应。DHCP服务器提供信息
DHCP服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址和其他设置的DHCP offer信息。DHCP offer提供信息包括pxelinux启动程序(TFTP)位置,以及PXE配置文件所在位置(该文件一般是放在一台TFTP服务器上)。DHCP客户机接收IP和服务器的互动
DHCP客户端接受到DHCP offer提供信息之后,选择第一个接收到的提供信息,然后以广播的方式回答一个DHCP request请求信息,该信息包含向它所选定的DHCP服务器请求IP地址的内容。当DHCP服务器收到DHCP客户端回答的DHCP request请求信息之后,便向DHCP客户端发送一个包含它所提供的IP地址和其他设置的DHCP ack确认信息,告诉DHCP客户端可以使用它提供的IP地址。然后,DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除了DHCP客户机选中的 服务器外,其他的DHCP服务器将收回曾经提供的IP地址。这是第一次初始化网络。
PXE客户端请求下载启动文件
客户端收到服务器的“回应”后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。Boot Server响应客户端请求并传送文件
当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答, 用以决定启动参数。BootROM由TFTP通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。客户端取得pxelinux.0 文件后之执行该文件,向服务器请求下载pxelinux.cfg文件。客户端pxelinux.cfg配置文件后,请求vmlinuz文件和initrd.img文件。会根据 该文件中定义的引导顺序,启动Linux安装程序的引导内核。请求下载自动应答文件
客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通 过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络(这是第二次初始化网络),并定位安装源位置。接着会读取default文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载 该文件。PXE获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件PXE模块和安装程序是相对独立的,PXE的网络配置并不能传递给安装程序,从而进行两次获取IP地址过程,但IP地址在DHCP的租期内是一样的。客户端安装操作系统
将ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。
OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。
2.kickstart是什么
许多系统管理员宁愿使用自动化的安装方法来安装红帽企业 Linux.为了满足这种需要,红帽创建了kickstart安装方法.使用kickstart,系统管理员可以创建一个文件,这个文件包含了在典型的安装过程中所遇 到的问题的答案.
Kickstart文件可以存放于单一的服务器上,在安装过程中被独立的机器所读取.这个安装方法可以支持使用单一kickstart文件在多台机器上安装红帽企业Linux,这对于网络和系统管理员来说是个理想的选择.
Kickstart给用户提供了一种自动化安装红帽企业Linux的方法,它的工作原理时在安装过程中记录典型的需要人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在安装过程中(不只局限于生成KickStart安装文件的机器)出现要填写参数的情况,安装程序首选会去查找KickStart生成的文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便需要安装着手工干预了。所以如果KickStart文件涵盖了安装过程中可能出现的所有需要填写的参数,那么安装着完全可以只告诉安装程序从何处去ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中设置重启系统,并结束安装。
3.PXE+KickStart自动部署操作系统实战
(1)系统环境准备
[root@kickstart ~]# cat /etc/redhat-release #系统版本 CentOS release 6.5 (Final) [root@kickstart ~]# uname -r #内核版本 2.6.32-431.el6.x86_64 [root@kickstart ~]# getenforce #检测selinux是否关闭(必须关闭) Disabled [root@kickstart ~]# /etc/init.d/iptables status #检测防火墙是否关闭(必须关闭) iptables: Firewall is not running. [root@kickstart ~]# ifconfig eth0|awk -F '[ :]+' 'NR==2 {print $4}' #查看IP地址 10.0.0.72 [root@kickstart ~]# hostname #查看主机名 kickstart [root@kickstart ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo --2016-05-24 22:42:45-- http://mirrors.aliyun.com/repo/epel-6.repo Resolving mirrors.aliyun.com... 115.28.122.210, 112.124.140.210 Connecting to mirrors.aliyun.com|115.28.122.210|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 1083 (1.1K) [application/octet-stream] Saving to: “/etc/yum.repos.d/epel.repo” #安装epel源顺手而为 100%[====================================================================================>] 1,083 --.-K/s in 0s
注意:
虚拟机网卡采用桥接模式,还是使用双网卡,eth0为内网网卡(10.0.0.72),eth1为外网网卡(192.168.31.72)不使用NAT模式,我们会搭建DHCP服务器,在同一局域网多个DHCP服务会有冲突,所以最好把路由器的DHCP服务关闭我搭建服务只喜欢用桥接模式,就是与众不同,不服?
(2)安装DHCP服务
1.DHCP是什么?
DHCP是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
DHCP的几个概念:
DHCP Client:DHCP客户端,通过DHCP协议请求IP地址的客户端。DHCP客户端是接口级的概念,如果一个主机有多个以太接口,则该主机上的每个接口都可以配置成一个DHCP 客户端。交换机上每个Vlan接口也可以配置成一个DHCP客户端。
DHCP Server:DHCP 服务端,负责为DHCP客户端提供IP地址,并且负责管理分配的IP地址。
DHCP Relay:DHCP中继器,DHCP客户端跨网段申请IP地址的时候,实现DHCP报文的转发功能。
DHCP Security:DHCP安全特性,实现合法用户IP地址表的管理功能
DHCP Snooping:DHCP监听,记录通过二层设备申请到IP地址的用户信息
所有客户机的IP地址设定资料都由DHCP服务器集中管理,并负责处理客户端的DHCP请求;而客户端则会使用从服务器分配下来的IP地址。
DHCP工作原理:
2).DHCP服务器IP分配方式
DHCP服务器提供三种IP分配方式:
自动分配(Automatic Allocation)
自动分配是当DHCP客户端第一次成功地从DHCP服务器端分配到一个IP地址之后,就永远使用这个地址。
动态分配(Dynamic Allocation)
动态分配是当DHCP客户端第一次从DHCP服务器分配到IP地址后,并非永久地使用该地址,每次使用完后,DHCP客户端就得释放这个IP地址,以给其他客户端使用。
手动分配
手动分配是由DHCP服务器管理员专门为客户端指定IP地址。
3).DHCP服务工作流程
DHCP客户机在启动时,会搜寻网络中是否存在DHCP服务器。如果找到,则给DHCP服务器发送一个请求。DHCP服务器接到请求后,为DHCP 客户机选择TCP/IP配置的参数,并把这些参数发送给客户端。 如果已配置冲突检测设置,则DHCP服务器在将租约中的地址提供给客户机之前会使用Ping测试作用域中每个可用地址的连通性。这可确保提供给客户的每个 IP地址都没有被使用手动TCP/IP配置的另一台非DHCP计算机使用。
根据客户端是否第一次登录网络,DHCP的工作形式会有所不同。客户端从DHCP服务器上获得IP地址的所有过程可以分为以下六个步骤:
其中新客户端的租约过程的4个步骤。
3.1) 工作过程1:发现阶段(寻找DHCP服务器)
当DHCP客户端第一次登录网络的时候,计算机发现本机上没有任何IP地址设定,将以广播方式发送DHCP Discovery发现信息来寻找DHCP服务器,即向255.255.255.255发送特定的广播信息。因为DHCP Server对应于DHCP客户端是未知的,所以DHCP 客户端发出的DHCP Discovery报文是广播包,源地址为0.0.0.0,目的地址为255.255.255.255。网络上的所有支持TCP/IP的主机都会收到该 DHCP Discovery报文,但是只有DHCP Server会响应该报文。
如果网络中存在多个DHCP Server,则多个DHCP Server均会回复该DHCP Discovery报文。
如果同一个vlan内没有DHCP Server,而该VlanIf配置了DHCP Relay功能,则该Vlanif即为DHCP中继,DHCP中继会将该DHCP报文的源IP地址修改为该Vlanif的IP地址,而目的地址则为 DHCP Relay配置的DHCP Server的IP地址。同时修改DHCP报文中,giaddress为VlanIf的IP地址。并以单播将DHCP Discovery发送到DHCP Server端。
3.2) 工作过程2:提供阶段(分配IP地址)
DHCP Server提供阶段,即为DHCP Server响应DHCP Discovery所发的DHCP Offer阶段
DHCP Server收到DHCP Discovery报文后,解析该报文请求IP地址所属的Subnet。并从dhcpd.conf文件中与之匹配的subnet中取出一个可用的IP地址 (从可用地址段选择一个IP地址后,首先发送ICMP报文来ping该IP地址,如果收到该IP地址的ICMP报文,则抛弃该IP地址,重新选择IP地址 继续进行ICMP报文测试,直到找到一个网络中没有人使用的IP地址,用以达到防治动态分配的IP地址与网络中其他设备IP地址冲突,这个IP地址冲突检 测机制,可配置),设置在DHCP Discovery报文中yiaddress字段中,表示为该客户端分配的IP地址,并且为该Lease设置该Subnet配置的Option,例如默认 leases租期,最大租期,router等信息。
DHCP从地址池中选择IP地址,以如下优先级进行选择:
1、当前已经存在的Ip Mac的对应关系
2、Client以前的IP地址
3、读取Discovery报文中的Requested Ip Address Option的值,如果存在并且IP地址可用
4、从配置的Subnet中选择IP地址:
DHCP Server解析DHCP Discovery请求的IP所属的Subnet,首先看该DHCP Discovery报文中giaddress是否有DHCP Relay,如果有,则从giaddress所述的subnet中可用IP地址段中获取,并分配IP。如果giaddress没有IP地址,则从该 DHCP Server绑定的接口的IP地址所属的网段分配IP地址。
3.3) 工作过程3:选择阶段(接受IP地址)
DHCP客户端接受到DHCP offer提供信息之后,选择第一个接收到的提供信息,然后以广播的方式回答一个DHCP request请求信息,该信息包含向它所选定的DHCP服务器请求IP地址的内容。
DHCP Client收到若干个DHCP Server响应的DHCP Offer报文后,选择其中一个DHCP Server作为目标DHCP Server。选择策略通常为选择第一个响应的DHCP Offer报文所属的DHCP Server。
然后以广播方式回答一个DHCP Request报文,该报文中包含向目标DHCP请求的IP地址等信息。之所以是以广播方式发出的,是为了通知其他DHCP Server自己将选择该DHCP Server所提供的IP地址。
3.4) 工作过程4:确认阶段(IP地址分配确认)
当DHCP服务器收到DHCP客户端回答的DHCP request请求信息之后,确认要为该DHCP Client提供的IP地址后,便向DHCP客户端发送一个包含它所提供的IP地址和其他设置的DHCP ack确认信息,告诉DHCP客户端可以使用它提供的IP地址。然后,DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除了DHCP客户机选中的 DHCP服务器外,其他的DHCP服务器将收回曾经提供的IP地址。
3.5) 工作过程5:重新登录
以后DHCP客户端每次重新登录网络时,就不需要再发送DHCP discover发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ack确认信息。如果客户端DHCP request 内的IP地址在服务器端没有被使用,DHCP服务器回复DHCP ACK继续使用IP。如果此IP地址已无法再分配给原来的DHCP客户机使用时,则DHCP服务器给DHCP客户机回答一个DHCP nack否认信息。当原来的DHCP客户机收到此DHCP nack否认信息后,它就必须重新发送DHCP discover发现信息来请求新的IP地址。
3.6) 工作过程6:更新租约
DHCP服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户机要延长其 IP租约,则必须更新其IP租约。DHCP客户机启动时和IP租约期限到达租约的50%时,DHCP客户机都会自动向DHCP服务器发送DHCP Renew更新其IP租约的信息,续约租期。
2.安装DHCP服务
[root@kickstart ~]# yum -y install dhcp #安装dhcp #修改dhcpd.conf如下 [root@kickstart ~]# egrep -v "^$|^#" /etc/dhcp/dhcpd.conf ddns-update-style none; #设置与DHCP服务相关联的DNS数据动态更新模式,实际的DHCP应用中很少用改参数,设置为none即可。 ignore client-updates; #不允许客户机更新DNS记录 allow booting; allow bootp; default-lease-time 21600; #设置默认的IP租用期限 max-lease-time 43200; #设置最大的IP租用期限 subnet 192.168.31.0 netmask 255.255.255.0 { #指定子网网段,如果有这个网段的网卡进来dhcp会从这个子网里面找IP option domain-name-servers 223.5.5.5; #设定DNS服务器 option routers 192.168.31.72; #为客户端设定默认网关 range dynamic-bootp 192.168.31.100 192.168.31.250; #可分配的起始IP到结束IP option subnet-mask 255.255.255.0; #设置netmask next-server 192.168.31.72; filename "/data/sys/kickstart/ks.cfg"; next-server 192.168.31.72; #告知客户端TFTP服务器ip filename "pxelinux.0"; #告知客户端从TFTP根目录下载pexlinux.0 } ####以下代码是为了下面监听多个网卡特意写上去的,如果你想给多个网段分配IP就像我这样干 subnet 10.0.0.0 netmask 255.255.255.0 { option routers 10.0.0.72; range dynamic-bootp 10.0.0.100 10.0.0.250; option subnet-mask 255.255.255.0; next-server 10.0.0.72; filename "pxelinux.0"; }
DHCP指定监听网卡:
经过我反复试验,另外我看到有些人的博客里面这里写的有一点小小的错误,特此说明下。
1)监听所有的网卡,默认不填就会监听所有的网卡
[root@kickstart dhcp]# vim /etc/sysconfig/dhcpd # Command line options here DHCPDARGS=
2)监听单个网卡,后面写上你想监听的网卡的名字,如想监听eth0,eth1,就填它的名字
[root@kickstart dhcp]# vim /etc/sysconfig/dhcpd # Command line options here DHCPDARGS=eth1
3)监听多个网卡,填几个就会去监听那几个网卡,以空格分开
[root@kickstart dhcp]# vim /etc/sysconfig/dhcpd # Command line options here DHCPDARGS=eth0 eth1
3.安装TFTP服务
1)TFTP简介
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。
TFTP是一个传输文件的简单协议,它基于UDP协议而实现,但是我们也不能确定有些TFTP协议是基于其它传输协议完成的。此协议设计的时候是进行小文件传输的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。传输中有三种模式:netascii,这是8位的ASCII码形式,另一种是octet,这是8位源数据类型;最后一种mail已经不再支持,它将返回的数据直接返回给用户而不是保存为文件。
2)TFTP安装
[root@kickstart ~]# yum install -y tftp-server ##修改配置文件/etc/xinetd.d/tftp disabled修改为no [root@kickstart ~]# sed -i "s/disable.*= yes/disable = no/g" /etc/xinetd.d/tftp [root@kickstart ~]# cat /etc/xinetd.d/tftp # default: off # description: The tftp server serves files using the trivial file transfer \ # protocol. The tftp protocol is often used to boot diskless \ # workstations, download configuration files to network-aware printers, \ # and to start the installation process for some operating systems. service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 } [root@kickstart ~]# /etc/init.d/xinetd start Starting xinetd: [ OK ] [root@kickstart ~]# netstat -lntup|grep 69 udp 0 0 0.0.0.0:69 0.0.0.0:* 26648/xinetd
3)TFTP安装web服务(nginx)
马丹,我就是要与众不同,大家都用httpd,我就要用nginx显示哥的与众不同因为我玩的转不怕出问题。象哥这样出色的男人,无论在什么地方,都像漆黑中的萤火虫一样,那样的鲜明,那样的出众!!我那忧郁的眼神。。。。咳咳,不吹了,进入正文!
[root@kickstart ~]# mkdir /application/tools -p [root@kickstart ~]# cd /application/tools/ [root@kickstart tools]# yum install pcre pcre-devel openssl openssl-devel -y ###上官网发现最新的稳定版是1.10.0,我去软件更新的速度太快了!令人唏嘘啊! [root@kickstart tools]# wget http://nginx.org/download/nginx-1.10.0.tar.gz --2016-05-26 02:29:39-- http://nginx.org/download/nginx-1.10.0.tar.gz Resolving nginx.org... 206.251.255.63, 95.211.80.227, 2606:7100:1:69::3f, ... Connecting to nginx.org|206.251.255.63|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 908954 (888K) [application/octet-stream] Saving to: “nginx-1.10.0.tar.gz” 100%[======================================================================================>] 908,954 12.6K/s in 90s 2016-05-26 02:31:13 (9.81 KB/s) - “nginx-1.10.0.tar.gz” saved [908954/908954] [root@kickstart tools]# tar xf nginx-1.10.0.tar.gz [root@kickstart tools]# cd nginx-1.10.0 [root@kickstart nginx-1.10.0]# useradd nginx -s /sbin/nologin -M [root@kickstart nginx-1.10.0]# ./configure --user=nginx --group=nginx --prefix=/application/nginx1.10.0 --with-http_stub_status_module --with-http_ssl_module [root@kickstart nginx-1.10.0]# make &&make install [root@kickstart nginx-1.10.0]# ln -s /application/nginx1.10.0/ /application/nginx [root@kickstart nginx-1.10.0]# cd /application/ [root@kickstart application]# ll total 8 lrwxrwxrwx 1 root root 25 May 26 02:37 nginx -> /application/nginx1.10.0/ drwxr-xr-x 6 root root 4096 May 26 02:36 nginx1.10.0 drwxr-xr-x 3 root root 4096 May 26 02:32 tools ####简单修改下配置文件 [root@kickstart conf]# grep -vE "^$|#" /application/nginx/conf/nginx.conf user nginx; worker_processes 1; error_log logs/error.log; error_log logs/error.log notice; error_log logs/error.log info; pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } [root@kickstart conf]# /application/nginx/sbin/nginx ##########启动后查看日志发现了一个报错,缺少一个favicon.ico文件,这玩意就是你现在浏览器打开百度后http字符串左边的那个小logo,你可以百度在线生成一个 2016/05/26 02:47:03 [error] 29181#0: *4 open() "/application/nginx1.10.0/html/favicon.ico" failed (2: No such file or directory), client: 192.168.31.100, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.31.72" ###然后我网上百度了下favicon.ico在线制作,做了一个然后放到了html目录里面,效果就如下,就没有出现报错了
#现在将光盘里面的东西全部拷到nginx下面的html目录下面,这次我拷的镜像是centos6.6的 [root@kickstart mnt]# mkdir /application/nginx/html/centos_6_6 [root@kickstart html]# mount /dev/cdrom /mnt/ mount: block device /dev/sr0 is write-protected, mounting read-only [root@kickstart html]# cd /mnt/ [root@kickstart mnt]# ll total 712 -r--r--r-- 2 root root 14 Oct 24 2014 CentOS_BuildTag dr-xr-xr-x 3 root root 2048 Oct 24 2014 EFI -r--r--r-- 2 root root 212 Nov 28 2013 EULA -r--r--r-- 2 root root 18009 Nov 28 2013 GPL dr-xr-xr-x 3 root root 2048 Oct 24 2014 p_w_picpaths dr-xr-xr-x 2 root root 2048 Oct 24 2014 isolinux dr-xr-xr-x 2 root root 686080 Oct 24 2014 Packages -r--r--r-- 2 root root 1354 Oct 20 2014 RELEASE-NOTES-en-US.html dr-xr-xr-x 2 root root 4096 Oct 24 2014 repodata -r--r--r-- 2 root root 1706 Nov 28 2013 RPM-GPG-KEY-CentOS-6 -r--r--r-- 2 root root 1730 Nov 28 2013 RPM-GPG-KEY-CentOS-Debug-6 -r--r--r-- 2 root root 1730 Nov 28 2013 RPM-GPG-KEY-CentOS-Security-6 -r--r--r-- 2 root root 1734 Nov 28 2013 RPM-GPG-KEY-CentOS-Testing-6 -r--r--r-- 1 root root 3380 Oct 24 2014 TRANS.TBL [root@kickstart mnt]# cp -r /mnt/* /application/nginx/html/centos_6_6/ [root@kickstart mnt]# ll /application/nginx/html/centos_6_6/ total 340 -r--r--r-- 1 root root 14 May 26 03:08 CentOS_BuildTag dr-xr-xr-x 3 root root 4096 May 26 03:08 EFI -r--r--r-- 1 root root 212 May 26 03:08 EULA -r--r--r-- 1 root root 18009 May 26 03:08 GPL dr-xr-xr-x 3 root root 4096 May 26 03:08 p_w_picpaths dr-xr-xr-x 2 root root 4096 May 26 03:08 isolinux dr-xr-xr-x 2 root root 278528 May 26 03:10 Packages -r--r--r-- 1 root root 1354 May 26 03:10 RELEASE-NOTES-en-US.html dr-xr-xr-x 2 root root 4096 May 26 03:10 repodata -r--r--r-- 1 root root 1706 May 26 03:10 RPM-GPG-KEY-CentOS-6 -r--r--r-- 1 root root 1730 May 26 03:10 RPM-GPG-KEY-CentOS-Debug-6 -r--r--r-- 1 root root 1730 May 26 03:10 RPM-GPG-KEY-CentOS-Security-6 -r--r--r-- 1 root root 1734 May 26 03:10 RPM-GPG-KEY-CentOS-Testing-6 -r--r--r-- 1 root root 3380 May 26 03:10 TRANS.TBL
这个时候用浏览器访问http://http://192.168.31.72/centos_6_6/检验配置是否正确,你会发现报错403
这个时候需要在nginx的配置文件里添加以下参数即可
46 autoindex on;
47 autoindex_exact_size on;
48 autoindex_localtime on;
然后重新访问,就发现像不像很多mirrors源网站?
4.配置pxe引导
1)PXE引导配置(bootstrap)
syslinux是一个功能强大的引导加载程序,而且兼容各种介质。它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。它的安装很简单,一旦安装syslinux好之后,sysLinux启动盘就可以引导各种基于DOS的工具,以及MS-DOS/Windows或者任何其它操作系统。不仅支持采用BIOS结构的主板,而且从6.0版也开始支持采用EFI结构的新型主板。
注意:SYSLINUX不支持NTFS文件系统,所以磁盘必须是FAT(FAT16/FAT32)文件系统
[root@kickstart mnt]# yum -y install syslinux [root@kickstart mnt]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ [root@kickstart mnt]# cp -a /application/nginx/html/centos_6_6/isolinux/* /var/lib/tftpboot/[root@kickstart mnt]# cd /var/lib/tftpboot/ [root@kickstart mnt]# cd /var/lib/tftpboot/ [root@kickstart tftpboot]# ll total 38600 -r--r--r-- 1 root root 2048 May 26 03:08 boot.cat -r--r--r-- 1 root root 84 May 26 03:08 boot.msg -r--r--r-- 1 root root 334 May 26 03:08 grub.conf -r--r--r-- 1 root root 34815427 May 26 03:08 initrd.img -r--r--r-- 1 root root 24576 May 26 03:08 isolinux.bin -r--r--r-- 1 root root 936 May 26 03:08 isolinux.cfg -r--r--r-- 1 root root 165080 May 26 03:08 memtest -rw-r--r-- 1 root root 26759 May 26 03:41 pxelinux.0 -r--r--r-- 1 root root 151230 May 26 03:08 splash.jpg -r--r--r-- 1 root root 2215 May 26 03:08 TRANS.TBL -r--r--r-- 1 root root 163728 May 26 03:08 vesamenu.c32 -r-xr-xr-x 1 root root 4152336 May 26 03:08 vmlinuz 在/var/lib/tftpboot/目录下建立一个pxelinux.cfg目录,存放客户端的配置文件。 [root@kickstart tftpboot]# pwd /var/lib/tftpboot [root@kickstart tftpboot]# mkdir pxelinux.cfg [root@kickstart tftpboot]# cp /application/nginx/html/centos_6_6/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
2)default文件解析
[root@kickstart tftpboot]# vim /var/lib/tftpboot/pxelinux.cfg/default default vesamenu.c32 # 默认加载一个菜单 #prompt 1 # 开启会显示命令行'boot: '提示符。prompt值为0时则不提示,将会直接启动'default'参数中指定的内容。 timeout 600 # timeout时间是引导时等待用户手动选择的时间,设为1可直接引导,单位为1/10秒。 display boot.msg # 菜单背景图片、标题、颜色。 menu background splash.jpg menu title Welcome to CentOS 6.6! 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 # label指定在boot:提示符下输入的关键字,比如boot:linux[ENTER],这个会启动label linux下标记的kernel和initrd.img文件。 menu label ^Install or upgrade an existing system menu default kernel vmlinuz # 指定要启动的内核。同样要注意路径,默认是/tftpboot目录 append initrd=initrd.img # 指定追加给内核的参数,initrd.img是一个用来建立仿真目录的镜像,详情请看我的centos系列启动流程和内核原理 label vesa menu label Install system with ^basic video driver kernel vmlinuz append initrd=initrd.img xdriver=vesa nomodeset label rescue menu label ^Rescue installed system kernel vmlinuz append initrd=initrd.img rescue label local menu label Boot from ^local drive localboot 0xffff label memtest86 menu label ^Memory test kernel memtest append -
5.创建ks.cfg文件
通常,我们在安装操作系统的过程中,需要大量的和服务器交互操作,为了减少这个交互过程,kickstart就诞生了。使用这种 kickstart,只需事先定义好一个Kickstart自动应答配置文件ks.cfg(通常存放在安装服务器上),并让安装程序知道该配置文件的位 置,在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了在安装过程中多次的人机交互,从而实现无人值守的自动化安装。
生成kickstart配置文件的三种方法:
方法1、 每安装好一台Centos机器,Centos安装程序都会创建一个kickstart配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安 装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。(生成的文件名字叫anaconda-ks.cfg位于 /root/anaconda-ks.cfg)
方法2、Centos提供了一个图形化的kickstart配置工具。在任何一个安装好的Linux系统上运行该工具,就可以很容易地创建你自己 的kickstart配置文件。kickstart配置工具命令为redhat-config-kickstart(RHEL3)或system- config-kickstart(RHEL4,RHEL5).网上有很多用CentOS桌面版生成ks文件的文章,如果有现成的系统就没什么可说。但没 有现成的,也没有必要去用桌面版,命令行也很简单。
方法3、阅读kickstart配置文件的手册。用任何一个文本编辑器都可以创建你自己的kickstart配置文件。
官网文档
CentOS5 : http://www.centos.org/docs/5/html/Installation_Guide-en-US/s1-kickstart2-options.html
CentOS6 : https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-kickstart2-options.html
官网自带中文版,选一下语言即可
ks.cfg文件组成大致分为3段
1.命令段:
键盘类型,语言,安装方式等系统的配置,有必选项和可选项,如果缺少某项必选项,安装时会中断并提示用户选择此项的选项
2.软件包段:
%packages
@groupname:指定安装的包组
package_name:指定安装的包
-package_name:指定不安装的包
在安装过程中默认安装的软件包,安装软件时会自动分析依赖关系。
3.脚本段(可选):
%pre:预安装脚本(由于只依赖于启动镜像,支持的命令很少)
%post:后安装脚本(基本支持所有命令)
而具体的ks.cfg文件的配置,我们只需要在已经安装好的linux的root家目录找到anaconda_ks.cfg(这个ks文件就是在安装linux后,根据用户的安装选项自动生成的)
每个项目都由关键字来识别;关键字可跟一个或多个参数;如果某选项后面跟随了一个等号(=),它后面就必须指定一个值。 关键字 含义 install(可选) 明确指定系统此次进行的是全新安装系统,而不是升级upgrade;是默认项; cdrom(可选) 以本地CD-ROM为源安装系统; harddrive (可选) 以硬盘分区中包含的镜像为源(安装树)安装新系统;当以该种方式安装系统时,即使指定clearpart --all项,源所在分区也不会被重新抹去; --partition= 指定分区 --dir= 指定包含镜像的目录 例: harddrive --partition=/dev/sdb2 --dir=/data/iso nfs (可选) 指定从NFS服务器上获取安装树; --server= 指定NFS服务器,主机名称或IP --dir= 包含安装树的目录 --opts= 可以指定挂载NFS的目录时的挂载选项 例: nfs --server=192.168.31.72 --dir=/data/iso url (可选) 指定通过FTP或HTTP从网络获取安装树; --url 指定资源位置 例: url --url ftp://: @ / url --url bootloader (必需)设定boot loader安装选项; --append= 可以指定内核参数,要指定多个参数,使用空格分隔它们。 --driveorder= 设定设备BIOS中的开机设备启动顺序 --location= 设定引导记录的位置,有效的值如下: mbr(默认值); partition(在包含内核的分区的第一个扇区安装引导装载程序)或none(不安装引导装载程序)。 例: bootloader --location=mbr --append=“rhgb quiet” --driveorder=sda,sdb bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb rhgb quiet quiet" clearpart (可选)在建立新分区前清空系统上原有的分区表,默认不删除分区; --all 擦除系统上原有所有分区; --drives 删除指定驱动器上的分区 --initlabel 初始化磁盘卷标为系统架构的默认卷标 --linux 擦除所有的linux分区 --none(default)不移除任何分区 例: clearpart --drives=hda,hdb --all --initlabel zerombr (可选)清除mbr引导信息,会同时清空系统用原有分区表 drivedisk (可选)如果使用特殊存储方式时,需要指定驱动程序盘位置以便加载存储驱动; 1. 将驱动盘拷贝到本地硬盘某分区根目录: drivedisk [ --type= ] 2. 也可以指定一个网络位置加载驱动程序盘 drivedisk --source=ftp://path/to/drive.img drivedisk --source=http://path/to/drive.img drivedisk --source=nfs:host://path/to/drive.img firewall (可选)配置系统防火墙选项; firewall -enable|--disable [ --trust ] [ --port= ] --enable 拒绝外部发起的任何主动连接; --disable 不配置任何iptables防御规则; --trust 指定完全信任网卡设备; --port 使用port:protocol格式指定可以通过防火墙的服务; 例: firewall --enable --trust eth0 --trust eth1 --port=80:tcp firewall --disabled selinux (可选)设置系统selinux状态;默认为启用并处于enforcing模式; selinux [ --disabled|–enforcing|--premissive ] 例: selinux --disabled reboot (可选) 在系统成功安装完成后默认自动重启系统(kickstart方法时); 在收到你敢装系统完成后,会提示按任意键进行重启; 在本文件中没有明确指明其他方法时就默认完成方式为reboot; 使用 reboot 选项可能会导致安装的死循环,这依赖于安装介质和方法。需要特别注意; halt (可选) 在系统成功安装完成后关机;默认为reboot; 其他选项还有shutdown、poweroff,需要使用请自行参考官方文档。 graphical (可选)默认值,在图形模式下进行kickstart方式安装; text (可选)以文本方式进行kickstart安装;默认为图形界面 key (可选) 设置一个安装码(installration number),用于获取RedHat官方的支持服务; --skip 跳过key设置,不进行设置;如果不设置可能跳转到交互模式让用户选取动作; keyboard (必需)设置键盘类型;一般设置为us; 例: keyboard us lang (必需)设置安装过程使用的语言及系统的缺省语言;文本模式安装时可能不支持某些语言(中、韩...),所以可能仍以默认的英文方式安装;默认en_us,装中文时,需要后期%packages部分装上中文支持组件; 例: lang en_US timezone (可选) 设置系统的时区; timezone [ --utc ] 例: timezone --utc Asia/Shanghai timezone Asia/Shanghai auth/authconfig (必需) 设置系统的认证方式;默认为加密但不隐藏(shadow); --enablemd5 使用MD5加密方式 --useshadow或—enableshadow 使用隐藏密码; --enablenis= 使用NIS认证方式 --nisdomain= NIS域 --nisserver= NIS服务器 还可以设置LDAP、SMB及Kerberos5认证方式,详细请参考官方文档; 例: authconfig --useshadow --enablemd5 authconfig --enableshadow --passalgo=sha512 设置密码加密方式为sha512 启用shadow文件。 rootpw (必需) 设置系统root账号的密码; rootpw [ --iscrypted ] --iscrypted 表示设置的密码为加密过的串; 例: rootpw pa4word rootpw --iscrypted $1$RPYyxobb$/LtxMNLJC7euEARg2Vu2s1 rootpw --iscrypted $6$fvyDQYgM0a7kwvth$jAhWo.26MxcNMFwnJNl6011diLKv8Ai/3QapVZhfaXExPz9wAQfrxHfx.4RWK2SPb83OB33MyYX61Xd3h1hvB/ network (可选) 配置网络信息;在网络安装(NFS/HTTP/FTP)时必须指定; --bootproto=dhcp|bootp|static 指定ip获取方式,默认为dhcp/bootp;static方法要求在kickstart文件里输入所有的网络信息。 --device= 设置安装时激活来进行系统安装的网卡设备;该参数只在kickstart文件为本地文件时有效;若kickstart配置文件在网络上,安装程序会先初始化网卡然后去寻找kickstart文件; --ip= ip设置 --gateway= 网关 --nameserver= DNS设置 --nodns 不设置DNS --netmask= 子网掩码 --hostname= 设置安装后主机名称 --onboot= 设置是否在系统启动时激活网卡 --class= 设置DHCP的class值 --noipv4 禁用该设备的ipv4功能 --noipv6 禁用该设备的ipv6功能 如将网络模式设置为静态模式,则必须在一行内写上ip,netmask、dns、gateway等信息; 例: network –bootproto=static –ip=1.1.1.1 --metmask=255.0.0.0 --gateway=1.1.1.254 --nameserver=1.1.1.2 netmask --bootproto=dhcp --device=eth0 network --onboot yes --device eth0 --mtu=1500 --bootproto static --ip 10.0.0.32 --netmask 255.255.255.0 --noipv6 --hostname openstack02 network --onboot yes --device eth1 --bootproto static --ip 192.168.31.32 --netmask 255.255.255.0 --gateway 192.168.31.1 --noipv6 --nameserver 223.5.5.5 --hostname openstack02 skipx (可选) 如果该项存在,就不对系统的X进行设置; xconfig (可选)配置X window ;如果不给出选项,在安装过程中需要手动调整设置;当然不安装X时不应该添加该项; --driver 为显卡设置X驱动 --videoram= 设置显卡的RAM大小 --defaultdesktop= 设置GNOME/KDE作为默认桌面;假定这两个桌面环境在%packages例已经安装 --startxonboot 使用图形界面登录系统 --resolution= 设置图形界面的分辨率;可用值有640*480、800*600、1024*768等;确保设置指适合于显示卡及显示器; --depth= 设置显示色深;可用值有8/16/24/32;确保设置值适合于显示设备; 例: xconfig --startxonboot --resolution=800*600 --depth=16 services (可选)设置禁用或允许列出的服务; --disabled 设置服务为禁用 --enabled 启动服务 例: services --disabled autid,cups,smartd,nfslock 服务之间用逗号隔开,不能有空格 iscsi(可选)指定额外的ISCSI设备; issci --ipaddr= ipaddr [options]. --target --port= --user= --password= part/partition (install模式必须)建立新分区; part |swap|pv.id|rdid.id options mntpoint:挂载点,是在创建普通分区时指定新分区挂载位置的项;挂载点需要格式正确 swap: 创建swap分区; raid.id: 表示创建的分区类型为raid型;必须用id号进行唯一区别; pv.id: 表示所创建的分区类型为LVM型;必须用唯一id号进行区别; --size= 设置分区的最小值,默认单位为M,但是不能写单位; --grow 让分区自动增长利用可用的剩余磁盘空间,或是增长到设置的maxsize值; --maxsize 设置分区自动增长(grow)时的最大容量值,以M为单位,但不能写单位; --onpart=/--usepart= 设置使用原有的分区; --noformat 设置不格式化指定的分区,在跟—onpart一同使用时,可以避免删除原有分区上的数据,在新安装的系统中保留使用数据; --asprimary 强制制定该分区为主分区;若指定失败,分区会失败,导致安装停止; --fstype= 新增普通分区时指定分区的类型,可以为ext2、ext3、ext4、swap、vfat及hfs; --ondisk=/--ondrive= 设定该分区创建在一个具体的磁盘上; --start 指定分区以磁盘上那个磁道开始;需要跟--ondisk参数一块使用; --end 指定分区以磁盘上那个磁道结束;需要跟上述两个参数一起使用; --recommended:让系统自行决定分区的大小;在创建swap分区时,若RAM<2G,则分区大小为2*RAM;若RAM>=2G时,分区大小为RAM+2G; --bytes-pre-inode= 指定分区格式化时inode的大小;默认值为4096 --fsoptions= 指定创建fstab文件时该分区挂载参数项; 例: part /boot --fstype=“ext3” --size=100 part swap --fstype=“swap” –size=512 part / --bytes-pre-inode=4096 --fstype=“ext4”--size=10000 part /data --onpart=/dev/sdb1 --noformat part raid.100 --size=2000 part pv.100 --size=1000 part /boot --fstype=ext4 --asprimary --size=200 part swap --asprimary --size=512 part / --fstype=ext4 --grow --asprimary --size=200 raid (可选) 设置RAID。 raid 挂载点 --level= --device= 挂载点: 选取根/时,注意尽量避免/boot在RAID内,除非为RAID1; --level= 设置RAID级别 --device= RAID设备名称,如md0,md1... --byte-pre-inode= 设置该RAID分区上inode大小;若分区文件系统类型不支持该参数,会静默忽略参数; --spares= 设置RAID的热备盘 --fstype= 设置文件系统类型 --fsoptions= 设置挂载该文件系统时自定义的一些参数,参数写入fstab文件; --useexisting 使用现有的RAID设备并且重新格式化原设备 --noformat 在使用现有的RAID设备时不格式化原有RAID设备 例:完整创建一个RAID1设备示例; part raid.10 --size=1000 --ondisk=/dev/sdb part raid.11 --size=1000 --ondisk=/dev/sdc raid /data --level=1 --device=md0 raid.10 raid.11 volgroup (可选) 创建一个LVM卷组VG; volgroup vg_name partition [options] --useexiting 使用现有的VG并且重新格式化 --noformat 使用现有的VG时不做格式化 --pesize 设置PE(physical extents)块大小 例: part pv.11 --size=2000 volgroup myvg pv.11 logvol (可选) 创建一个LVM逻辑卷LV; logvel mnt_point --vgname=vg_name --size=lv_size --name=lv_name [options] --useexiting 使用现有的LV并且重新格式化 --noformat 使用现有的LV时不做格式化 --fstype= 指定RAID分区类型 --fsoptions= 设置挂载该文件系统时自定义的一些参数,参数写入fstab文件; --byte-pre-inode= 设置该RAID分区上inode大小; --precent= 设定LV大小为VG可用空间的比例; 例: part pv.20 --size=5000 volgroup mvvg pv.20 logvol /data --vgname=myvg --size=3000 --name=mydata firstboot(可选) 负责协助配置redhat一些重要的信息。 firstboot --disable logging(可选) 设置日志级别。 logging --level=info
编写ks.cfg文件
[root@kickstart ~]# grub-crypt Password: Retype password: $6$gWnhJacx.491bO3h$CH1A5OAOw7PVqfU8b5HzOfg4Al1jw.e/8EBrnrjhfQrMZULSGf9.wgcnPTU0XELbIKVc/iziGSOuSA0Lasebq/ [root@kickstart ~]# cat /application/nginx/html/config/ks.cfg # Kickstart file automatically generated by anaconda. #version=DEVEL install url --url="http://192.168.31.72/centos_6_6/" lang en_US.UTF-8 keyboard us network --device eth0 --bootproto=dhcp --onboot=yes --noipv6 --hostname=ren --nameserver=223.5.5.5 rootpw 123456 #rootpw --iscrypted $6$kVSaWPdxFSfDq79S$JV1UqfQo0wQK6lreQ0beWgoko/RXmq.CcwL42yIbPyQEXrIWj.G6nmJymMJE.ISJwjaXy6iF7rRfhz3T.SFAC1 firewall --disabled authconfig --enableshadow --passalgo=sha512 selinux --disabled timezone Asia/Shanghai bootloader --location=mbr --driveorder=sda --append="nomodeset crashkernel=auto rhgb quiet" firstboot --disable logging --level=info zerombr # The following is the partition information you requested # Note that any partitions you deleted are not expressed # here so unless you clear all partitions first, this is # not guaranteed to work #clearpart --none #part /boot --fstype=ext4 --asprimary --size=200 #part swap --asprimary --size=512 #part / --fstype=ext4 --grow --asprimary --size=200 clearpart --all --initlabel part /boot --fstype=ext4 --asprimary --size=200 part swap --asprimary --size=1024 part / --fstype=ext4 --grow --asprimary --size=200 reboot #repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100 %packages @base @compat-libraries @core @debugging @development @dial-up @hardware-monitoring @performance @server-policy sgpio device-mapper-persistent-data systemtap-client tree lrzsz telnet nmap %post wget -O /tmp/youhua.sh http://192.168.31.72/config/youhua.sh &>/dev/null /bin/sh /tmp/youhua.sh %end
整合编辑default配置文件
[root@linux-node1 ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
default ren
prompt 0
label ren
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.31.72/config/ks.cfg ksdevice=eth1 # 告诉安装程序ks.cfg文件在哪里
# ksdevice=eth1代表当客户端有多块网卡的时候,要实现自动化需要设置从哪一块网卡开始安装,不指定的话,安装的时候系统会让你选择,那就不叫全自动化了。如果在ks.cfg文件里是使用全部都是dhcp分配ip,所有的网卡都会被分配ip,这里只是选从哪个网卡开始安装,而不是只给这个网卡进行分配ip,其他没填的就不分配IP。会给所有的网卡都分配ip的,如果你你选择dhcp方式分配ip,不是static分配
新建虚拟机进行测试
成功!
最后不要忘了将服务都加入开机自启动,不要让机器重启后服务就挂了
[root@kickstart ~]# echo "######nginx is start for kickstart by ren" >>/etc/rc.local [root@kickstart ~]# echo "/application/nginx/sbin/nginx" >>/etc/rc.local [root@kickstart ~]# chkconfig xinetd off [root@kickstart ~]# chkconfig dhcpd off [root@kickstart ~]# echo "######dhcpd is start for kickstart by ren" >>/etc/rc.local [root@kickstart ~]# echo "/etc/init.d/dhcpd start" >>/etc/rc.local [root@kickstart ~]# echo "######tftp is start for kickstart by ren" >>/etc/rc.local [root@kickstart ~]# echo "/etc/init.d/xinetd start" >>/etc/rc.local