Aug 032012
 

最近一直都在折腾cobbler,基本已经实现Centos 和ubuntu的全部自动化安装,刚好centos6.3发布,我就把全部的配置过程整理一步,算是对过去半年总结。

2012年8月13日:已经对文档全部校对了一次,对着文档安装了一遍,客户端安装centos,ubuntu都是没任何问题。

2012年8月21日:在新的机器重新部署一次,采用centos6.2的系统,cobbler reporsync 运行正常,基本可以肯定是centos6.3的一个bug,调整了一下dns的zone file的设置。ubuntu的部署,采用光盘的导入的包进行安装,完全没问题。把cobbler服务器同时也设置成ntp服务器,不过目前好像有点小问题。

2012年8月23日:解决了centos安装和使用过程中使用proxy。更新了centos.ks 文件,直接通过ks文件,实现通过proxy安装。并且系统装完后,也是继续通过proxy。

cobbler介绍

cobbler是Redhat支持的一个开源项目,用来部署和安装系统。所以对Redhat系列os支持是比较好的。不过对ubuntu支持是非常差的。cobbler里不少设置,只针对redhat有效,同时也由于不同发行版的安装是有差异。cobbler感觉好像和ubuntu关系比较紧张.

cobbler不仅仅是一个pxe服务器,他还可以管理dns(bind),dhcp。一般数据中心里或者生产环境,是不允许dhcp, 但是pxe,必须需要dhcp,所以我们需要根据mac地址来分配IP,这样dhcp就不会影响到网络.

目标希望实现

  1. 自动化安装:centos和ubuntu
  2. 采用内网的源:centos会启用epel的源,ubuntu会把源指向内网。
  3. IP,网络,路由,主机名,FQDN 设置

一:准备OS

Centos 6.3,采用最小化安装就可以。设置采用默认,设置固定的IP地址。

设置源

采用网易的源和EPEL的源

http://mirror.bjtu.edu.cn/fedora-epel/6/i386/repoview/epel-release.html

yum -y install wget vim-enhanced
mv /bin/vi /bin/vi.save
ln -s /usr/bin/vim /bin/vi
cd /etc/yum.repos.d/
mkdir backup
mv *.repo ./backup
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/i386/epel-release-6-7.noarch.rpm
yum list

设置hostname

 cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.1.199.12     cobbler.test.com        cobbler

关闭selinux

这个需要重启机器才能生效,所以建议修改完重启

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

这个需要重启机器才能生效,所以建议修改完重启

[root@cobbler ~]# sestatus
SELinux status:                 disabled

关闭iptables

cobbler会使用到好几个端口,为了简化,直接把iptables关闭

chkconfig ip6tables off
chkconfig iptables off
/etc/init.d/ip6tables stop
/etc/init.d/iptables stop

 

二: 安装cobbler

安装cobbler相关的包

如果希望cobbler可以管理dhcp,dns,需要把dns和dhcp都安装在同一台服务器上。如果你不管理dns,可以不需要安装bind.

yum -y install cman tftp-server dhcp cobbler cobbler-web bind pykickstart

安装debmirror

需要用debmirror来下载ubuntu 12.04的源,做本地源.目前debmirrors, 只能使用rpm包安装, 先装依赖包

yum -y install ed patch perl perl-Compress-Zlib perl-Cwd perl-Digest-MD5 \
perl-Digest-SHA1 perl-LockFile-Simple perl-libwww-perl

下载debmirrors

wget http://mirrors.sohu.com/fedora-epel/5Server/i386/debmirror-20090807-1.el5.noarch.rpm

安装

rpm -ivh debmirror-20090807-1.el5.noarch.rpm

 

三:设置cobbler

1:tftp服务和rsync服务

sed -i '/disable/c\\tdisable\t\t\t= no' /etc/xinetd.d/tftp
sed -i -e 's/\=\ yes/\=\ no/g' /etc/xinetd.d/rsync 
service xinetd restart

2: web可以登陆

sed -i 's/authn_denyall/authn_configfile/g' /etc/cobbler/modules.conf

3: 设置cobbler  web登陆,用户登陆密码

htdigest /etc/cobbler/users.digest "Cobbler" cobbler

4: 设置cobbler登陆服务器地址

sed -i 's/server: 127.0.0.1/server: 10.1.199.12/g' /etc/cobbler/settings

5:ks脚本关闭pxe,这样就不会重复安装

sed -i 's/pxe_just_once: 0/pxe_just_once: 1/g' /etc/cobbler/settings

6:TFTP服务器 IP地址

sed -i 's/next_server: 127.0.0.1/next_server: 10.1.199.12/g' /etc/cobbler/settings

7:cobbler管理rsync

sed -i 's/manage_rsync: 0/manage_rsync: 1/g' /etc/cobbler/settings

8:cobbler管理dhcp

sed -i 's/manage_dhcp: 0/manage_dhcp: 1/g' /etc/cobbler/settings

dhcp服务是有cobbler来管理 /etc/cobbler/dhcp.template

修改下面的内容就可以。注释掉 range dynamic-bootp 。不然你内网就会出现一个dhcp服务器。

subnet 10.1.199.0 netmask 255.255.255.0 {
     option routers             10.1.199.1;
     option domain-name-servers 10.1.199.12;
     option subnet-mask         255.255.255.0;
     #range dynamic-bootp        10.1.199.100 10.1.199.150;
     filename                   "/pxelinux.0";
     default-lease-time         21600;
     max-lease-time             43200;
     next-server                $next_server;
}

9:cobbler管理dns (可选)

sed -i 's/manage_dns: 0/manage_dns: 1/g' /etc/cobbler/settings

假设我们希望bind管理 chenshake.com ,反向 10.1.199.0

编辑 /etc/cobbler/settings

#manage_forward_zones: []
#manage_reverse_zones: []
manage_forward_zones: ['chenshake.com']
manage_reverse_zones: ['10.1.199']

编辑 /etc/cobbler/named.template, 只需要修改注释掉两行下的内容。

options {
          #listen-on port 53 { 127.0.0.1; };
          listen-on port 53 { 127.0.0.1;10.1.199.12; };
          directory       "/var/named";
          dump-file       "/var/named/data/cache_dump.db";
          statistics-file "/var/named/data/named_stats.txt";
          memstatistics-file "/var/named/data/named_mem_stats.txt";
          #allow-query     { localhost; };
          allow-query     { localhost;10.1.199.0/24; };
          recursion yes;
};

创建/ etc/cobbler/zone_templates/chenshake.com 文件

cp /etc/cobbler/dnsmasq.template /etc/cobbler/zone_templates/chenshake

修改成下面的内容就可以, 我这里是为了方便,增加了一个A记录和CNAME,你可以去掉。(这是为了日后测试puppet准备的,你可以作为一个参考)

\$TTL 300
@                       IN      SOA     $cobbler_server. nobody.chenshake.com. (
                                        $serial   ; Serial
                                        600         ; Refresh
                                        1800         ; Retry
                                        604800       ; Expire
                                        300          ; TTL
                                        )

                        IN      NS      $cobbler_server.

www     A       66.147.244.244
#puppet CNAME   node06
$host_record

 

10; 设置root默认密码

这个设置只针对centos有效。我默认的root密码是:root123

# openssl passwd -1 -salt 'random-phrase-here' 'root123'
$1$random-p$99lAzJZEl9uunSaThe9oM0

修改 /etc/cobbler/settings

#default_password_crypted: "$1$mF86/UHC$WvcIcX2t6crBz2onWxyac."
default_password_crypted: "$1$random-p$99lAzJZEl9uunSaThe9oM0"

 

11: 启动相关服务

dhcp服务由于没有设置,所以无法启动。后面我们会对dhcp进行设置。另外启动named的服务时候,需要等待1,2分钟,生成一个key。

chkconfig httpd on 
chkconfig cobblerd on
chkconfig named on
chkconfig dhcpd on
/etc/init.d/httpd restart
/etc/init.d/cobblerd restart
/etc/init.d/named restart

12:设置debmirror

sed -i -e 's|@dists=.*|#@dists=|'  /etc/debmirror.conf
sed -i -e 's|@arches=.*|#@arches=|'  /etc/debmirror.conf

13:启动菜单

cobbler get-loaders

 

检查cobbler

cobbler提供一个工具,检查你的设置。看到提示,就表示全部工作都已经完成。

对cobbler所有修改,需要

cobbler sync

检查

# cobbler check
No configuration problems found.  All systems go.

可以看到dns的zone文件已经生成

 # ls /var/named/
10.1.199  chenshake.com  data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves

四:web登陆

https://10.1.199.12/cobbler_web  user:cobbler  密码就是上面设置的。

cobbler

cobbler的使用,主要是集中在上面几个菜单里。这里简单解析一下。

Distros:这个其实就是发行版,类似Centos,ubuntu,suse。centos6.2和centos6.3,是不同的distros。假设我们导入一个centos6.3的iso,就是增加了一个Distros

Profiles:针对Distros的设置,一个distros,可以保护多个profiles,包括不同的kickstart文件。源的设置,都是在这里设置。

Systems:针对是每个节点,这里可以指定节点的ip地址,dns name,还有就是ipmi的用户名和密码,实现远程开机,关机。这是一个重点,日后对机器的操作,全部在sytem的菜单里操作。system里,会指定节点使用哪个profile。

Repos:这个主要是针对Redhat和Centos有效,可以管理源,并且这些源,可以在profile里添加。比较方便。需要注意的是,对于ubuntu的源,只能在kickstart 脚本里指定。

Images:这个我没用到,看说明主要是针对不能pxe的机器,采用iso启动。

Kicsstart Templates:这是核心,cobbler内置了几个ks文件,你如果导入一个centos,系统会默认关联一个ks文件,你不需要做任何设置,就可以把os自动装完。对于ubuntu,我们就需要单独创建一个preseed文件,这些文件可以通过web管理和修改。非常方便。

Snippets:这是cobbler的精华。一些常用的设置,写成一个模块,让ks文件调用。这样更加灵活。例如centos的网络固定IP地址的设置,就是通过这里实现。

 

五:Squid安装

如果多个节点同时安装,用squid可以加快速度,至少对ubuntu是非常有效的。目前centos的ks文件里,我还没搞明白如何设置squid,ubuntu的preseed文件里已经启用squid。所以我们需要安装squid。

yum -y install squid
/etc/init.d/squid restart
chkconfig squid on

六:设置apache根目录访问

我们希望直接访问IP,就可以看到源的目录,尤其对于ubuntu的源来说,这样看起来更加规范。

# cat /etc/httpd/conf.d/welcome.conf
<LocationMatch "^/+$">
 Options Indexes FollowSymLinks
    Order allow,deny
    Allow from all
</LocationMatch>

重启apache,就可以 http://ip 看到目录。实际目录是 /var/www/html/

 

参考文档

http://blog.milford.io/2012/03/getting-a-basic-cobbler-server-going-on-centos/

http://www.3u3c.com/a/qitalinuxjishu/20120318/11_2.html

  27 Responses to “CentOS 6.3 安装和配置cobbler(1)”

  1. 沙克兄 我原样做的时候(省去DNS部分)
    在 # cobbler get-loaders 的时候报错

    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 184, 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 1235, in request
    self.send_content(h, request_body)
    File “/usr/lib64/python2.6/xmlrpclib.py”, line 1349, in send_content
    connection.endheaders()
    File “/usr/lib64/python2.6/httplib.py”, line 908, in endheaders
    self._send_output()
    File “/usr/lib64/python2.6/httplib.py”, line 780, in _send_output
    self.send(msg)
    File “/usr/lib64/python2.6/httplib.py”, line 739, in send
    self.connect()
    File “/usr/lib64/python2.6/httplib.py”, line 720, in connect
    self.timeout)
    File “/usr/lib64/python2.6/socket.py”, line 567, in create_connection
    raise error, msg
    error: [Errno 113] No route to host

    httpd 和 cobblerd 都是运行状态的 selinux也关闭了啊 求教

    • 这个问题解决了 是一个IP参数写错了 可是更正后 DHCP就是起不来 继续排错中。。。

      • 从提示看,你的selnux没真正关闭。好好查查。
        httpd does not appear to be running and proxying cobbler, or SELinux is in the way. Original traceback:

        • 今天又重头装了一次 还是卡在dhcpd服务开启不了 是不是dhcp要多配一些东西?确定selinux关闭了 =。=

          • 遇到类似的问题,但我可能之前装了什么软件,将httpd的配置文件修改了什么,所以我将http和cobbler先卸载掉,然后删除/etc/httpd 和/etc/cobbler
            再重新安装就正常了;

      • [root@localhost ~]# cat /etc/hosts
        127.0.0.1 localhost localhost.localdomain

        [root@localhost ~]# getenforce
        Disabled

        [root@localhost ~]# service httpd status
        httpd (pid 3071) 正在运行…

        [root@localhost ~]# service cobblerd status
        cobblerd (pid 2984) 正在运行…

        [root@localhost ~]# service iptables status
        iptables:未运行防火墙。

        [root@localhost ~]# cobbler check
        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 184, 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 1235, in request
        self.send_content(h, request_body)
        File “/usr/lib64/python2.6/xmlrpclib.py”, line 1349, in send_content
        connection.endheaders()
        File “/usr/lib64/python2.6/httplib.py”, line 908, in endheaders
        self._send_output()
        File “/usr/lib64/python2.6/httplib.py”, line 780, in _send_output
        self.send(msg)
        File “/usr/lib64/python2.6/httplib.py”, line 739, in send
        self.connect()
        File “/usr/lib64/python2.6/httplib.py”, line 720, in connect
        self.timeout)
        File “/usr/lib64/python2.6/socket.py”, line 553, in create_connection
        for res in getaddrinfo(host, port, 0, SOCK_STREAM):
        gaierror: [Errno -2] Name or service not known

        ##############################################
        问一下是哪个参数要修改啊,我这个问题搞的我头大了??

        先谢

        • 我的也出现过这个问题,经检查是/etc/cobbler/settings下的两个server的ip设置的跟本机的ip不同导致的,如果用的是域名就必须是本机能解析的出来的域名才行。问题就这样解决了!

    • 遇到相同的问题,如何解决的?设置哪个IP参数?

      • make sure the /etc/hosts in 127.0.0.1 has localhost at it.
        127.0.0.1 localhost localhost.localdomain

        solved !

  2. 陈哥,你好

    我用cobbler 装rhel 6.3 双网卡绑定出现默认路由指向eth0问题,在google搜不出相关的问题,又不会用英文表达问题,烦请帮忙

    cobbler system add –name localhost –hostname localhost –profile rhel-server-6.3-x86_64-for-database
    cobbler system edit –name localhost –interface eth0 –mac B4:99:BA:BB:C7:8C –interface-type bond_slave –interface-master bond0 –static 1
    cobbler system edit –name localhost –interface eth1 –mac B4:99:BA:BB:C7:8E –interface-type bond_slave –interface-master bond0 –static 1
    cobbler system edit –name localhost –interface bond0 –interface-type bond –bonding-opts “miimon=100 mode=1” –ip-address 10.2.1.53 –netmask 255.255.0.0 –gateway 10.2.0.254 –static

    配置完成后,默认路由不指向bond0,现像如下

    [root@localhost ~]# route
    Kernel IP routing table
    Destination Gateway Genmask Flags Metric Ref Use Iface
    10.2.0.0 * 255.255.0.0 U 0 0 0 bond0
    10.2.0.0 * 255.255.0.0 U 1 0 0 eth1
    10.2.0.0 * 255.255.0.0 U 1 0 0 eth0
    link-local * 255.255.0.0 U 1006 0 0 bond0
    default 10.2.0.254 0.0.0.0 UG 0 0 0 eth0

  3. 在邮件组里怎么用英语问啊

    再次谢过

  4. 沙克老师,我想问下,关于cobbler批量安装操作系统以后,主机名的设定要怎么解决呢,还有就是能不能推荐点cobbler的使用指南网站。现在网上大部分都是安装文档。。。

    • 你好好看看文档,这个是可以指定的。你先把我的cobbler文档看明白。我敢说:目前中文的文档里,我这个是最全面的。我现在要搭建cobbler,我也只能参考这个文档。

      • 不好意思啊 可能是我没叙述清楚, 具体是批量安装CentOS6.3以后,每台服务器都希望把它的主机名设定成唯一的,这个在cobbler里面有这个设置么。 如果不行是不是就只能通过在后面定制post脚本的时候加上一个全局变量来改呢。。现在就想到一个这种思路~ 麻烦您了~

        • 你的问题我很清楚,我的文档应该也是有。
          cobbler system add \
          –name=node13 \
          –hostname=node13.chenshake.com \
          –dns-name=node13.chenshake.com \
          –profile=CentOS6.3-x86_64 \
          –interface=eth0 \
          –mac=00:25:90:67:CE:1A \
          –interface=eth0 \
          –ip-address=10.1.199.13 \
          –subnet=255.255.255.0 \
          –gateway=10.1.199.1 \
          –static=1 \
          –power-type=ipmilan \
          –power-user=ADMIN \
          –power-pass=ADMIN \
          –power-address=10.1.199.213

  5. 谢谢沙克老师写的文章,我得到了很大的帮助。我有一个小问题想问一下,在新的服务器时,进入蓝色的 Cobbler 安装界面时需要选择一个系统,才能安装,请问有没有一个默认的选项,默认安装一个我指定的系统。

  6. 你好:
    我想问下cobbler和puppet整合,你是怎么实现的,在%post里加入安装puppet、认证等命令?
    我看cobbler的setting文件里有块与puppet有关(与认证相关):
    puppet_auto_setup
    sign_puppet_certs_automatically
    puppetca_path
    remove_old_puppet_certs_automatically

    我想cobbler和puppet应该自带整合功能吧,网上关于整合的参考有些少。

    • 我的理解是,cobbler负责装上puppet,后续好像用脚本实现比较靠谱。

      • 好的,谢谢。
        我准备了个环境,还是想实践下。

        补鞋匠和木偶之间的那根线到底是什么,^_^

  7. 陈老师
    您好!
    您在文章中提到:
    “dhcp服务是有cobbler来管理 /etc/cobbler/dhcp.template”

    ”修改下面的内容就可以。注释掉 range dynamic-bootp 。不然你内网就会出现一个dhcp服务器。“
    “ #range dynamic-bootp 10.1.199.100 10.1.199.150; ”
    我想问下上面那段内容中,我们把DHCP服务器的地址范围注掉以后,这个服务器如何给安装的客户端分配地址呢?随机吗?再就是您说它就不是内网内的一台DHCP服务器了,那他是什么服务器,它还有DHCP的功能吗?谢谢!

    • “ #range dynamic-bootp 10.1.199.100 10.1.199.150; ”
      去掉后,指导安装的服务器也无法获取DHCP IP?

  8. 陈老师
    您好!
    我在对DELL服务器进行系统的安装的时候,发现无法找到磁盘,应该是没有加载H310的Raid卡驱动,这该如何去处理?谢谢!

    • 我也遇到此问题了,就是安装系统的时候找不到磁盘,需要加载raid卡驱动,在cobbler的ks里面加了driverdisk –source=http://192.168.1.120/dd.img 但是还是没有加载成功,陈兄帮忙指导一下。谢谢。

 Leave a Reply

(required)

(required)