一直想尝试下pxe自动安装centos6和centos7,最近几天做了下实验,虽然实践的过程中碰到许多问题,但收获还是有的,把碰到的问题和收获分享下。

pxe自动安装需要三个服务,分别为dhcp、tftp、Nginx,这三个服务我都使用centos6.6安装了。其中Nginx也可以使用apache等其它web服务器,也可以使用nfs服务器,由于本人对Nginx比较熟悉,就用Nginx了。centos6和7的下载地址为:http://archive.kernel.org/centos-vault/。

还是先看效果图,最终使用pxe自动安装cento6和centos7的截图如下:

服务器上的三个服务:

centos6自动安装的截图:

centos7自动安装的截图:

下面说下安装的过程:

1: Nginx的安装就不说了,配置贴下,我是root到/var/www/html目录。

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,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实现自动安装centos6和7的更多相关文章

  1. html5简介_动力节点Java学院整理

    这篇文章主要介绍了html5简介,用于指定构建网页的元素,这些元素中的大多数都用于描述网页内容,有兴趣的可以了解一下

  2. ios – 200在xcode 7中生成DSMM警告

    解决方法我有同样的问题.Facebook表示他们已经意识到这一点并且不是高优先级,因为它不会影响应用程序.我回退到4.7.1警告问题不再存在.我不认为它会被拒绝但不能确定.

  3. xamarin.ios – Facebook iOS SDK:应用程序在启动时找不到“找不到符号:_ACFacebookAppIdKey.”仅在iOS 5中崩溃

    解决方法这是一个已修复的knownbug.目前唯一已知的解决方法是使用较旧版本的FacebookSDK.

  4. osx – 无法创建目录/ var / teamsserver

    OpenSSH_6.2p2,OSSLShim0.9.8r8Dec2011debug1:Readingconfigurationdata/etc/ssh_configdebug1:/etc/ssh_configline20:Applyingoptionsfor*debug1:Connectingto1.2.3.4[1.2.3.4]portPORT.debug1:Connectionestablished.Couldnotcreatedirectory‘/var/teamsserver/.ssh’.debug

  5. ios – 如何在Xcode 4.5中完成代码签名

    解决方法事实证明,从AppStore升级XCode并不会自动升级所有内容.转到首选项/下载,并确保安装最新的命令行工具.

  6. xcode7 – 谁在创建文件“/private/var/tmp/Untitled-*.uicatalog”?

    我正在调查为什么TeamCity构建代理程序用完了磁盘,并且在/private/var/tmp中找到了超过11,000个文件,它们都以Untitled-.uicatalog行命名.每个文件至少0.6MB.总磁盘占用空间约为4GB.这些文件可以追溯到几个月,所以他们能够重新启动.谁在创造他们?Xcode在编译至少有一个图像的xcassets目录时创建这些目录.我可以删除它们吗?

  7. ios – Client.ipa不包含文件

    从过去的几天开始,我就把这头发错了.当我尝试提交基于cordova的iOS应用程序时,我收到一个错误,即符号工具失败.这就是我在日志中的内容:以下是尝试提交到应用商店时所述错误的屏幕截图:请帮忙.解决方法我有同样的错误,因为应用程序包中错误地包含了几个静态库(libXXX.a).它们显示在主.App下的最终上传确认框(列出权利和证书)中.我的解决方案是从项目中删除对这些静态库的所有引用,在链接器标

  8. ios – 如何获得.ipa文件路径

    我的应用程序包含敏感数据,所以我想为.ipa文件生成哈希键,是否可以这样做?

  9. ios – 在设备上运行时Swift应用程序崩溃 – dyld:未加载库:@ rpath / libswiftCore.dylib

    我是ios/xcode世界的新手,并尝试在运行iOSv8.0.2的iphone5上测试一个简单的Swift应用程序.该应用程序在xcode(版本6.1(6A1052d))中成功构建,但当它尝试在iphone上运行时,它崩溃并出现以下错误:我已经尝试过大多数建议,这些建议帮助了遇到此错误的其他人,但却没有运气.使用其他团队成员的构建环境构建时,相同的应用程序工作正常.我比较了构建设置,发现它们是相同

  10. 使用Swift作为Glance后端存储

    原文链接http://thornelabs.net/2014/08/03/use-openstack-swift-as-a-backend-store-for-glance.htmlBydefault,OpenStackGlancesavesimagesandOpenStackInstancesnapshotsonthelocalfilesystemin/var/lib/glance/images

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部