柴少鹏的官方网站 技术在分享中进步,水平在学习中升华

Centos 6.4 Cobbler服务器简单搭建(一)

       前面的文章http://blog.51niux.com/?id=28   已经讲述了如何PXE 来批量安装服务器操作系统,现在普遍用Cobbler我也在用,所以就写篇博客来记录一下。

       简单讲述一下为什么我们要用cobbler当然主要就是为了省事,机器批量上架几十台如果直接发到机房,让机房人员光盘安装显然不太好,直接让他们按下F12就选择一下要安装的系统就搞定了,如果十几台先拉到公司再发走呢,搞个交换机网线插好,笔记本一放,建立成一个小局域网,也省去了很多重复的操作时间,我们现在要有一部分服务器要进行Centos6到7的升级操作,也得用是吧,所以如果公司是集群服务器搞个cobbler还是很爽的嘛。这都不是什么新鲜的技术了,就不多废话了。

        实体服务器的操作和虚拟机的操作是一样的,就是按下F12选择PXE安装方式,然后就会弹出一个选择界面,选择我们要安装的版本名称就可以了,但是实体服务器有点要注意的是,如果服务器比如在机房是升级改造后的,原来的网线口已经不使用了,现在用的是光纤口,就要选择下光纤口来启动。如下面的截图(一台DELL R410现在使用的是光纤,就要选择一下,不同的机器可能有些不同这个根据自己的情况调试下就行了):

blob.png

我们测试的cobbler服务器操作系统为Centos 6.4 IP地址为:192.168.50.140,虚拟机用的是vmware,我公司开着dhcp服务器呢所以选择的是NAT模式,如果公司没有开dhcp服务,你也可以选择桥接模式。

博文来自:www.51niux.com

一、Cobbler介绍

      Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows。该工具使用python开发,小巧轻便(才15k行python代码),使用简单的命令即可完成PXE网络安装环境的配置,同时还可以管理DHCP、DNS、以及yum仓库、构造系统ISO镜像。

      Cobbler支持命令行管理,web界面管理,还提供了API接口,可以方便二次开发使用。

      Cobbler客户端Koan支持虚拟机安装和操作系统重新安装,使重装系统更便捷。

Cobbler集成的服务:

PXE 服务

DHCP服务管理

DNS服务管理

HTTP服务管理

TFTP服务管理

Kickstart服务

yum仓库管理

电源管理


下载源码以及查看文档地址:http://cobbler.github.io

#cobbler源码安装包做成rpm包总共有三个rpm包,如下图:

图片.png

#在你没有人按F12来选择网络启动安装的时候,可以使用koan工具来在有系统的情况下将所要连接的安装服务器什么的都设置好,然后系统重启之后就会自动走网络安装而不需要人为的按F12。

cobbler服务端的操作(比如我们想让192.168.1.54这台机器开机通过网络安装的方式重新安装操作系统):
# cobbler profile list 
   Centos-7.2-basic   #可见只有一个列表
# cobbler system add --name=192.168.1.54 --profile=Centos-7.2-basic --mac=00:8c:fa:50:22:56 --ip-address=192.168.1.54 --subnet=255.255.255.0 --gateway=192.168.1.254 --name-servers=114.114.114.114 --static=1 
客户端的操作:
# yum install koan -y
# koan --server=192.168.1.166 --list=profiles  #查看一下分配给自己的配置文件,下面是结果
- looking for Cobbler at http://192.168.1.166:80/cobbler_api
Centos-7.2-basic
# koan --replace-self --server=192.168.1.166 --profile=Centos-7.2-basic  #指定cobbler服务器和配置文件重新安装操作系统,下面会有一些结果查看下是否报错
# reboot  #不报错就重启操作系统就可以安装了,安装成功后就是最上面服务端配置的IP地址

二、 Cobbler的安装流程 

(1).需要安装系统的客户端主机的网卡支持网络安装,也就是支持以PXE模式启动。

(2).客户端主机需要有一个IP地址来与Cobbler Server进行通信,这时网络中必须要有一个主机能自动分配IP。DHCP就是一个能为客户端主机自动分配IP地址的服务,DHCP就是安装在Cobbler Server主机上。
(3).客户端得到IP地址后,需要提供一个引导程序pxelinux.0(类似于grub) 此文件由syslinux程序提供,所以需要安装syslinux并且能加载内核及内核镜像文件(vmlinuz与initrd.img),客户端可以通过TFTP协议到TFTP Server上下载内核及内核镜像文件(vmlinuz与initrd.img),所以需要一个TFTP 服务,TFTP也是安装在Cobbler Server主机上,客户端只是知道可以用TFTP协议下载文件,但是TFTP Server的IP是那个,这个还得需要DHCP服务器指名告诉客户端那个是TFTP Server(所以我们在配置DHCP模板时指定next-server,同时指定了filename,这里的filename就是指定的pxelinux.0引导程序),而TFTP服务需要超级进程进行管理,此进程是xinetd,因此需要在Cobbler Server上安装xinet服务。

(4).客户端完全自动化部署操作系统,则需要一个kickstart文件,默认使用的是/var/lib/cobbler/kickstarts/default.ks文件,我们也可以自己自定义一个kickstart文件,自定义kickstart文件可以自己手动的编写,也可以用system-config-kickstart工具进行生成,如果需要则可以在Cobbler Server上安装system-config-kickstart工具生成一个kickstart文件。
(5).已经有了kickstart文件,需要在kickstart文件中指定一个参数,告诉客户端以什么方式安装(http/ftp/nfs等),这里的参数指的就是到哪里去找安装源(安装源就是指安装系统所需的软件),这样的方式可以是nfs,ftp,http等,选择其一即可,Cobbler Server在此选择以http方式提供安装源。

博文来自:www.51niux.com

三、Cobbler服务器的部署

(1). 安装第三方epel源

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm #如果博客过久了可能贴出来的源链接已经不对了,可以网页登陆此链接一点点排查

如果是Centos7的操作系统可以执行:rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

(2). yum安装相关软件包

# yum install -y ed patch perl perl-Compress-Zlib perl-Digest-SHA1 perl-LockFile-Simple perl-libwww-perl

# yum install cobbler fence-agents pykickstart httpd rsync tftp-server xinetd dhcp -y

注:如果你yum的时候,提示Error: Cannot retrieve repository metadata (repomd.xml) for repository: epel. Please verify its path and try again之类的,如果你的网络没问题,那就执行下面的命令:

sed -i 's@#baseurl@baseurl@g' /etc/yum.repos.d/epel.repo

sed -i 's@mirrorlist@#mirrorlist@g' /etc/yum.repos.d/epel.repo 

(3). 启动相关服务并添加开机启动项

/etc/init.d/httpd start

/etc/init.d/cobblerd start

/sbin/chkconfig httpd on

/sbin/chkconfig dhcpd on

/sbin/chkconfig xinetd on

/sbin/chkconfig tftp on

/sbin/chkconfig cobblerd on

(4). cobbler检查并处理相关错误

# cobbler check #检查cobbler有何问题

问题:

httpd does not appear to be running and proxying cobbler, or SELinux is in the way. Original traceback:

Traceback (most recent call last):

  File "/usr/lib/python2.6/site-packages/cobbler/cli.py", line 252, in check_setup

    s.ping()

  File "/usr/lib64/python2.6/xmlrpclib.py", line 1199, in __call__

    return self.__send(self.__name, args)

  File "/usr/lib64/python2.6/xmlrpclib.py", line 1489, in __request

    verbose=self.__verbose

  File "/usr/lib64/python2.6/xmlrpclib.py", line 1243, in request

    headers

ProtocolError: <ProtocolError for 127.0.0.1:80/cobbler_api: 503 Service Temporarily Unavailable>

解决办法:

sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config 

setenforce 0

/etc/init.d/cobblerd restart  #要重启,不重启的话会报错:xmlrpclib.Fault: <Fault 1: "<class 'cobbler.cexceptions.CX'>:'login failed'">


# cobbler check #再次查看

The following are potential configuration items that you may want to fix:

1 : The 'server' field in /etc/cobbler/settings must be set to something other than localhost, or kickstarting features will not work.  This should be a resolvable hostname or IP for the boot server as reachable by all machines that will use it.

2 : For PXE to be functional, the 'next_server' field in /etc/cobbler/settings must be set to something other than 127.0.0.1, and should match the IP of the boot server on the PXE network.

3 : SELinux is enabled. Please review the following wiki page for details on ensuring cobbler works correctly in your SELinux environment:

    https://github.com/cobbler/cobbler/wiki/Selinux

4 : some network boot-loaders are missing from /var/lib/cobbler/loaders, you may run 'cobbler get-loaders' to download them, or, if you only want to handle x86/x86_64 netbooting, you may ensure that you have installed a *recent* version of the syslinux package installed and can ignore this message entirely.  Files in this directory, should you want to support all architectures, should include pxelinux.0, menu.c32, elilo.efi, and yaboot. The 'cobbler get-loaders' command is the easiest way to resolve these requirements.

5 : change 'disable' to 'no' in /etc/xinetd.d/rsync

6 : file /etc/xinetd.d/rsync does not exist

7 : since iptables may be running, ensure 69, 80/443, and 25151 are unblocked

8 : debmirror package is not installed, it will be required to manage debian deployments and repositories

9 : The default password used by the sample templates for newly installed machines (default_password_crypted in /etc/cobbler/settings) is still set to 'cobbler' and should be changed, try: "openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'" to generate new one

Restart cobblerd and then run 'cobbler sync' to apply changes.

解决报错方法:

 第一、二个错误:

sed -i "s#127.0.0.1#`ifconfig|grep "inet"|egrep -v '127.0.0.1'|grep -o  "[0-9]\{2,3\}.[0-9]\{2,3\}.[0-9]\{2,3\}.[0-9]\{1,3\}"|grep -v "255.255.255"|head -1`#g" /etc/cobbler/settings

第三个错误:

sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config 

setenforce 0

reboot 

第四个错误:

 cobbler get-loaders

第五个错误:

# sed -i 's#no#yes#' /etc/xinetd.d/tftp

# sed -i 's#yes#no#' /etc/xinetd.d/rsync

# /etc/init.d/xinetd restart

第六个错误:

不用理会,不需要rsync同步ISO文件

第七个错误:

/etc/init.d/iptables stop

chkconfig  iptables off

第八个错误:

不用理会dibian系统少安装包的

第九个错误:

openssl passwd -1 -salt chaishao 123456 #生产一个以chaishao为填充字符串,填充到以123456生成的密码

$1$chaishao$aVIYggu/HFWxLqA0T4pL31  #这是生成的密码,去替换默认自带的密码

vi /etc/cobbler/settings #修改cobbler配置文件

default_password_crypted: "$1$chaishao$aVIYggu/HFWxLqA0T4pL31" #将新生成的密码进行替换

/etc/init.d/cobblerd restart  #要重启服务


# cobbler check #再次查看,就剩忽略不解决的那两个错误了

The following are potential configuration items that you may want to fix:

1 : file /etc/xinetd.d/rsync does not exist

2 : debmirror package is not installed, it will be required to manage debian deployments and repositories

Restart cobblerd and then run 'cobbler sync' to apply changes.

博文来自:www.51niux.com

(4). 相关服务的配置

配置dhcp服务:

vi /etc/dhcp/dhcpd.conf

authoritative;  #指定当一个客户端试图获得一个不是该DHCP服务器分配的IP信息,DHCP将发送一个拒绝消息,而不会等待请求超时。当请求被拒绝,客户端会重新向当前DHCP发送IP请求获得新地址。

当网络中有其他的DHCP服务器时,加上此参数可以忽略其他DHCP服务器。

next-server 192.168.50.140;   #这里PXE服务器的IP地址

filename "pxelinux.0"; #pexlinux 使用

subnet 192.168.50.0 netmask 255.255.255.0 {  

option routers 192.168.50.1;  #网关地址

option subnet-mask 255.255.255.0;  #子网掩码

option domain-name-servers 223.5.5.5,223.6.6.6;  #dns服务器地址

range dynamic-bootp 192.168.50.150 192.168.50.180;  #动态分配的ip范围,如果只对指定mac的服务器分配ip的话,这里就可以注释掉

default-lease-time 600;  #租约时长

max-lease-time 7200;  #最大租约时长

host 192.168.50.152 {  

hardware ethernet  00:0C:29:95:AC:89;  #指定mac地址

fixed-address 192.168.50.152;  #分配ip地址

}

}

挂载镜像并生成版本库:

如果服务在本地我们就光盘挂载镜像,如果服务器在远程,我们就把光盘文件传输到cobbler服务器上面进行挂载,我这里光盘挂载的形式吧。

# mkdir /mnt/centos7.2 创建我要挂载的目录,因为要做多库所以创建版本对称的目录

# mount /dev/cdrom  /mnt/centos7.2  挂载光盘镜像

# cobbler import --path=/mnt/centos7.2 --name=Centos7.2  #导入系统镜像到/var/www/cobbler/ks_mirror/下面,一个名称叫做Centos7.2的目录下面

creating new profile: Centos7.2-x86_64  #这是导入过程

associating repos

checking for rsync repo(s)

checking for rhn repo(s)

checking for yum repo(s)

starting descent into /var/www/cobbler/ks_mirror/Centos7.2 for Centos7.2-x86_64

processing repo at : /var/www/cobbler/ks_mirror/Centos7.2

need to process repo/comps: /var/www/cobbler/ks_mirror/Centos7.2

looking for /var/www/cobbler/ks_mirror/Centos7.2/repodata/*comps*.xml

Keeping repodata as-is :/var/www/cobbler/ks_mirror/Centos7.2/repodata

*** TASK COMPLETE ***

# cobbler distro list  #查看一下我们的版本库列表

   Centos7.2-x86_64   #有一个叫做 Centos7.2-x86_64的版本库

[root@localhost centos7.2]# cobbler distro report  #report详细查看一下库信息

Name                           : Centos7.2-x86_64  

Architecture                   : x86_64

TFTP Boot Files                : {}

Breed                          : redhat

Initrd                         : /var/www/cobbler/ks_mirror/Centos7.2/images/pxeboot/initrd.img  #通过路径可以看出是我们新创建的

Kernel                         : /var/www/cobbler/ks_mirror/Centos7.2/images/pxeboot/vmlinuz

Kernel Options                 : {}

Kernel Options (Post Install)  : {}

Kickstart Metadata             : {'tree': 'http://@@http_server@@/cblr/links/Centos7.2-x86_64'}


# cobbler profile list #查看配置文件列表

   Centos7.2-x86_64  

# cobbler profile report #查看配置的详细信息

Name                           : Centos7.2-x86_64

Kickstart                      : /var/lib/cobbler/kickstarts/sample_end.ks  #其他显示信息我都删除掉了,主要看这里,要加载的ks文件,我们可以直接对这个ks文件进行更改,也可以将profile删除掉重新创建一个profile


# cobbler profile remove --name=Centos7.2-x86_64  #删除掉此profile

# cobbler profile list  #查看一下已经为空

# vi /var/lib/cobbler/kickstarts/centos7-basic-ks.cfg  我们自己创建一个ks文件

autostep --autoscreenshot

install

url --url=http://192.168.50.140/cobbler/ks_mirror/Centos7.2

text

skipx

auth --enableshadow --passalgo=sha512

bootloader --location=mbr

firewall --disabled

firstboot --disabled

keyboard us

lang zh_CN.UTF-8

logging --level=info

network  --bootproto dhcp  --onboot yes --noipv6 

rootpw --iscrypted  $6$jT2bigC7piHmVQzg$T/rLlxlG76vxp.ZgQbv033SQULcSLrsjjFRJnfHVQeFANqG8JpyWhoVOTS4g8SwRNc08dJS7CPI35ONCPGsTS/

timezone --utc Asia/Shanghai

zerombr

clearpart --all --initlabel

ignoredisk --only-use=sda

part /boot --fstype="ext4" --size=200

part pv.01 --fstype="lvmpv" --grow --size=1    #这里写了一个默认做LVM的。之前的pxe无人值守安装写的是一个不加lvm的。

volgroup rootvg --pesize=4096 pv.01

logvol swap  --size=8192 --name=swaplv --vgname=rootvg

logvol /  --fstype="ext4" --size=20480 --name=rootlv --vgname=rootvg

logvol /home  --fstype="ext4" --grow --size=1 --name=homelv --vgname=rootvg

reboot

%packages

@^minimal

@core

kexec-tools

%end


注:

https://access.redhat.com/documentation/en/red-hat-enterprise-linux/ #这里可以选择不同版本的文档进行查看

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Installation_Guide/sect-kickstart-syntax.html#sect-kickstart-commands #这是7的ks部分的说明,可以查看参数说明等。

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-kickstart2-options.html #这是6的ks

# cobbler profile add --name=Centos-7.2-basic --distro=Centos7.2-x86_64 --kickstart=/var/lib/cobbler/kickstarts/centos7-basic-ks.cfg  #生成一个名称为Centos-7.2-basic的配置,加载的库为Centos7.2-x86_64,加载的ks文件为/var/lib/cobbler/kickstarts/centos7-basic-ks.cfg

# cobbler profile list  #查看一些配置列表已经发生了变化

   Centos-7.2-basic

# cobbler sync  #同步一下

#虚拟机开机按住F12进行PXE安装

blob.png

#上面这个界面你只有20秒,要选择我们做好的配置版本按回车,不然就要重启再F12,再来一次

后面就开始安装了,注意看提示信息进行调试就可以了。

blob.png

主要看上图这个地方,看客户端与服务器有没有连接上。上图为正常的已经连接上并开始进行一些配置了。

blob.png

上图为我们未连接上服务器,这时候首先就要看看自己的dhcp服务是不是配置的有问题,如果没问题再看看自己客户端哪里出现了问题,到这里就已经没有必要再继续了。

#tail -f /var/log/cobbler/cobbler.log  #可以通过这个日志查看报错信息,看看到底哪里出问题了。当然如果没问题的话也可以看安装信息,不过都是字典的形式。

当然后面也会有出问题的地方,第一次调试的时候这些输出信息都要看嘛,后面调试通了就简单了!

注一:如果我们想给cobbler安装设置密码来增强安全性呢?

第一步:创建操作密码:

# openssl passwd -1 -salt 51niux 51niux.com  #51niux实际为密码的里面要多加的字符串,51niux.com才是我们设置的密码。
$1$51niux$D0XbtCkHPlrUXijSw458o0
第二步:编辑文件pxedefault:

# vim /etc/cobbler/pxe/pxedefault.template

DEFAULT menu
PROMPT 0
MENU TITLE 51niux Install Centos System
  #这一条为修改的内容,我们让其按照我们的格式显示,取代http://cobbler.github.io

MENU MASTER  PASSWD $1$51niux$D0XbtCkHPlrUXijSw458o0  #这一条是我们添加的内容,添加主界面需要通过密码51niux.com来验证
TIMEOUT 200
TOTALTIMEOUT 6000
ONTIMEOUT $pxe_timeout_profile
LABEL local
        MENU LABEL (local)
        MENU DEFAULT
        LOCALBOOT -1
$pxe_menu_items
MENU end

第三步:配置pxeprofile:

#cat /etc/cobbler/pxe/pxeprofile.template
LABEL $profile_name
        MENU PASSWD
   #为新增加的一行
        kernel $kernel_path
        $menu_label
        $append_line
        ipappend 2

第四步:检查、同步配置使其生效

#cobbler check

#cobbler sync

#/etc/init.d/cobblerd restart

第五步:PXE装机选择版本查看效果:

图片.png

注二:如何在安装服务器的同时进行一些必要的操作,如更改yum源,修改主机名等?

#cat /var/lib/cobbler/kickstarts/centos7-basic-ks.cfg  #只截取部分内容,只从reboot开始,上面的就不截取了。

reboot 
%packages   #这个就是再起下面安装必要的包组,然后以格式就是%packages开头以%end结尾
@^minimal
@core
kexec-tools
%end
%post
#Let's log post-install
echo "nameserver 223.5.5.5" >> /etc/resolv.conf

oklogdir=/tmp/oklog     #可以设置变量,这就相当于写shell脚本了
errlogdir=/tmp/errlog
tooldir=/opt/tools
[ ! -d $oklogdir ] && mkdir $oklogdir -p
[ ! -d $errlogdir ] && mkdir $errlogdir -p
[ ! -d $tooldir ] && mkdir $tooldir -p

cd /etc/yum.repos.d  #这里是更改yum源文件操作,改为我们搭建的yum源
[ -d CentOS ] || mkdir CentOS && mv -f CentOS-* CentOS
/bin/curl -O 192.168.1.101/yumrepo/CentOS-Base7.repo >/etc/yum.repos.d/CentOS-Base.repo

cd $tooldir  #这是从file服务器上面,将优化的包下载下来
yum install wget -y
[ ! -f youhua.tar.gz ] && wget 192.168.1.102/system_chushi/youhua.tar.gz
tar zxf $tooldir/youhua.tar.gz

groupadd yunwei -g 600 && useradd yunwei -g 600 -u 600  #创建运维的管理账号以及kaifa的账户
useradd kaifa -g 601 -u 600 && echo "51niux.com"|passwd --stdin kaifa

cd $tools  #安装一些必要包组,这里建议不要安装太多的包,这样会大大加大系统安装的时间,只将一些必要的安装包下载下来为安装监控软件,自动化管理工具做准备便可以了。
yum install -y  net-tools nmap procps sysstat telnet lrzsz openssh-clients ftp lftp sos gcc gcc-c++ python-devel \
glib2-devel openssl-devel zlib-devel pcre-devel ntp net-snmp* puppet

%end

#到这里就好说了你看上面有更改文件,下载东西,yum安装软件等操作,因为安装系统的时候dhcp是跟服务器的mac地址绑定的所以我们在安装服务器的时候就可以把主机名(有一个服务器专门用来维系主机名与IP的列表,将这个文件下载下来查看自己的IP对应的主机名)设置成,然后可以创建对应的用户,可以更改我们的yum源服务器,就可以yum类似于puppet,salt之类的软件客户端,然后呢就可以配置管理工具的客户端,然后自动化安装工具已经做好了当如salt客户端有重启操作的时候就下载top.sls文件,然后top.sls文件里面已经定义了初始优化的操作,这时候系统安装完毕就会重启操作系统,然后就可以进行对应的优化操作了。等等等等根据需求来吧。

作者:忙碌的柴少 分类:系统无人值守安装 浏览:2717 评论:0
留言列表
发表评论
来宾的头像