一直想尝试下pxe自动安装centos6和centos7,最近几天作了下实验,虽然实践的过程当中碰到许多问题,但收获仍是有的,把碰到的问题和收获分享下。html
pxe自动安装须要三个服务,分别为dhcp、tftp、nginx,这三个服务我都使用centos6.6安装了。其中nginx也可使用apache等其它web服务器,也可使用nfs服务器,因为本人对nginx比较熟悉,就用nginx了。centos6和7的下载地址为:http://archive.kernel.org/centos-vault/。linux
仍是先看效果图,最终使用pxe自动安装cento6和centos7的截图以下:nginx
服务器上的三个服务:web
centos6自动安装的截图:apache
centos7自动安装的截图:centos
下面说下安装的过程:安全
1: nginx的安装就不说了,配置贴下,我是root到/var/www/html目录。bash
location / { root /var/www/html/; index index.html index.htm; }
/var/www/html须要放置的kickstart的配置和centos的安装镜像包,如图,后面讲配置的话会有说明:服务器
2: 安装dhcp服务器,直接使用yum install dhcp -y安装便可。dhcp的配置以下,dhcp上有个pxelinux.0须要等安装tftp的时候再说,另外的就是一些dhcp的配置:网络
ddns-update-style interim; ignore client-updates; allow booting; allow bootp; class "pxeclients"{ match if substring(option vendor-class-identifier,0,9) = "PXEClient"; filename "pxelinux.0"; //tftp上须要有pxelinux.0的文件 next-server 172.16.0.3; //这个为提供自动安装服务的ip } subnet 172.16.0.0 netmask 255.255.255.0 { //一个子网 option routers 172.16.0.1; option subnet-mask 255.255.255.0; option time-offset -18000; range dynamic-bootp 172.16.0.10 172.16.0.11; //可分配的ip default-lease-time 216000; max-lease-time 432000; }
3: 安装tftp服务器,tftp服务器由xinetd管理,直接使用yum install tftp-server -y安装便可。安装完后修改/etc/xinetd.d/tftp配置以下:
service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /usr/local/tftp/tftpboot //tftp的根目录,须要放pxelinux.0等 disable = no //改成no,则启动xinetd的时候就会启动tftp服务器 per_source = 11 cps = 100 2 flags = IPv4 }
接下来得安装yum instll syslinux-tftpboot -y,这个用来引导加载的,pxe自动安装须要用syslinux来引导。安装完后使用:
cp /usr/share/syslinux/pxelinux.0 /usr/share/syslinux/vesamenu.c32 /usr/local/tftp/tftpboot/把pxelinux.0和vesamenu.c32拷贝到tftp的根目录下。dhcp获取到ip地址也会获取到pxelinux.0这个引导的文件名,用它来作引导以作下一步的安装。
4: 使用yum install system-config-kickstart -y安装一下kickstart,kickstart不用开启服务,不知道为何不须要开启服务,但安装下才能支持kickstart自动安装。到这里服务基本已经安装好了,如下讲下配置,须要配置把这些服务串在一块儿。
5: pxe的启动配置为:/usr/local/tftp/tftpboot/pxelinux.cfg/default(pxelinux.cfg须要本身建立),这个配置比较简单,最重要的是指明kickstart经过http去获取下来,这边使用到nginx服务器,配置以下:
default vesamenu.c32 prompt 1 timeout 100 //表明10s后启动安装 menu background splash.jpg menu title Welcome to Install System label Auto_CentOS menu label Auto Install CentOS6 kernel centos/vmlinuz append initrd=centos/initrd.img ks=http://172.16.0.3/ks.cfg #指明ks.cfg去哪里获取 label Auto_CentOS7 menu label Auto Install CentOS7 kernel centos7/vmlinuz append initrd=centos7/initrd.img inst.ks=http://172.16.0.3/ks7.cfg devfs=nomount inst.repo=http://172.16.0.3/centosimage7/ nomodeset inst.stage2=http://172.16.0.3/centosimage7/ #centos7的自动安装和centos6的安装有点区别,须要inst.ks和inst.repo。 label rescue menu label Resuce menu default kernel centos/vmlinuz append initrd=centos/initrd.img
为何要加prompt 1和menu default是为安全,prompt 1会把安装停留在boot,按回车会到另外救援模式,预防别的机器从网络启动把磁盘给格式化了。
还有一个配置须要注意,就是kernel centos/vmliuz这个文件去哪里读取呢?这个就须要把即将要使用的centos6和centos7的镜像mount到/var/www/html下,我这里使用的是最小化的版本,挂载命令以下:
mount -o loop /usr/local/src/CentOS-6.6-x86_64-minimal.iso /var/www/html/centosimage mount -o loop /usr/local/src/CentOS-7-x86_64-Minimal-1511.iso /var/www/html/centosimage7
挂载后把vmlinuz和initrd.img拷贝到tftp的目录下,命令以下(centos和centos7的目录须要自建):
cp /var/www/html/centosimage/isolinux/vmlinuz /var/www/html/centosimage/isolinux/initrd.img /usr/local/tftp/tftpboot/centos/ cp /var/www/html/centosimage7/isolinux/vmlinuz /var/www/html/centosimage7/isolinux/initrd.img /usr/local/tftp/tftpboot/centos7/
6: kickstart的配置,这个配置也是kickstart自动安装的配置核心了,因为pxe是去读取http://172.16.0.3/ks.cfg和http://172.16.0.3/ks7.cfg,所以这两个文件得在/var/www/html下。
其中/var/www/html/ks.cfg的配置以下,日常手动安装须要设置密码,键盘模式,语言,时区,磁盘分区都在配置中可看到:
firewall --disabled install rootpw 123456 #密码这里就简单设置了,通常须要md5后的密码配置在这里。 auth --useshadow --passalgo=sha512 url --url http://172.16.0.3/centosimage #这里使用http去获取一些安装包,前面咱们已经挂载到/var/www/html下,可直接获取 #graphical text firstboot --disable keyboard us lang zh_CN selinux --disabled logging --level=info reboot timezone Africa/Abidjan network --bootproto=dhcp --device=eth0 --onboot=on bootloader --location=mbr zerombr clearpart --all --initlabel #格式化磁盘 part / --asprimary --fstype="ext4" --size=2000 #/分配2G,默认使用M为单位。 part /boot --fstype="ext4" --size=200 part swap --fstype="swap" --size=512 part /data --fstype="ext4" --grow --size=1 #--grow表明剩下的空间所有给/data,这里的--size=1好像没什么用
另外centos7的配置文件也差很少,/var/www/html/ks7.cfg的配置以下:
firewall --disabled install rootpw 123456 auth --useshadow --passalgo=sha512 #graphical text firstboot --disable keyboard us lang zh_CN selinux --disabled logging --level=debug zerombr reboot timezone Africa/Abidjan network --bootproto=dhcp --device=enp0s8 --onboot=on --noipv6 bootloader --location=mbr clearpart --all --initlabel part / --asprimary --fstype="ext4" --size=5000 part /boot --fstype="ext4" --size=200 part swap --fstype="swap" --size=512 part /data --fstype="ext4" --grow --size=1 url --url http://172.16.0.3/centosimage7 %packages %end #这个得有,否则在安装centos7的时候会被中断。我使用的mini的包,就不用指定,只有base的。
软件安装和配置完就启动服务,启动三个服务的命令以下:
/etc/init.d/dhcpd restart
/etc/init.d/xinetd restart
/usr/local/nginx/sbin/nginx
服务启动完成后,使用virtual box新建个虚拟机,而后添加一个磁盘,使用网络启动便可自动安装。
安装完后使用磁盘启动就能够看到系统了,内存得稍微放大点,否则安装会不成功,1G内存对于cento6和centos7的安装够的。下面讲下实验过程当中遇到的问题。
问题1,安装centos6的时候总是提示硬件不支持,要敲个回车才能继续安装。
后来找到缘由了,是由于一开始使用的是centos6.3,多是centos6.3的内核有点老,致使有些硬件不支持,后来换成使用centos6.6的iso就行了。注意:是这两个文件/usr/local/tftp/tftpboot/centos/vmlinuz和/usr/local/tftp/tftpboot/centos/initrd.img,这两个文件必定要用centos6.6里面的。centos6.6里面的vmlinuz和initrd.img也可用来安装centos6.3的,我试过没问题,也就是/var/www/html/centosimage/里面的能够是centos6.3版本的。
问题2,安装centos7的时候报了个磁盘不够用的状况,一开始ks7.cfg根盘的配置是part / --asprimary --fstype="ext4" --size=1000。如图:
报错是比较明显的,因为centos7安装比较大,须要1861M的空间的,一开始我设置的1000M,还一直定位不出问题,改了不少配置,后续才想起根分区设置的1G不够用。
Kickstart自动安装Centos七、Centos6教程地址:https://edu.51cto.com/sd/50426