分类: 电脑技术
作者: admin

Cobbler自动化部署linux操作系统

之前安装操作系统,使用的是kickstart,如果是两年或更早以前你用这个,还会显得很高端,现在如果还在使用kickstart,就有点落伍了。简单总结了下kickstart的缺点:

1、不能夸网段安装,每个网段都得部署一个网络安装源;

2、安全性太差,如果你把服务器第一启动顺序设置为从网络启动,那么每次重启服务器,你的系统可能就要重新安装了,不设置第一启动为网络的话,每次重装就必须得进机房接上显示器,等待着F12的出现(DELL服务器是开机时按F12从网络引导,其他服务器不太清楚,开机都会有提示的)而这个等待的过程是相当痛苦无聊的。即使你不把服务器第一启动项设置为从网络启动,一旦你的系统挂了,无法正确引导了,那么正好这时你的DHCP也开着,那么你的噩运也就降临了!

3、Kickstart的模板文件功能单一,无法对新系统做过多初始化配置。

以上仅是简单列了三点,将cobbler结合IPMI使用,功能还是相当强大的,对运维人员来说,基本上不需要进机房了。

安装前简单介绍下cobbler。

Cobbler介绍

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

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

目标

1、自动化安装centos和ubuntu

2、IP,主机名自动配置

3、网络安装,无风险

准备服务器

一台普通PC机就可以,我的环境安装的是centos6.2_x86_64,最小化安装,没什么特别的要求,配置个固定IP就OK。

设置源

采用网易的源和USTC的源:

 

  1. yum -y install wget vim-enhanced  
  2.   
  3. mv /bin/vi /bin/vi.save  
  4.   
  5. ln -s /usr/bin/vim /bin/vi  
  6.   
  7. cd /etc/yum.repos.d/  
  8.   
  9. mkdir backup  
  10.   
  11. mv *.repo ./backup  
  12.   
  13. wget http://mirrors.163.com/.help/CentOS6-Base-163.repo  
  14.   
  15. rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-7.noarch.rpm  
  16.   
  17. yum list  


设置hostname

 

 

  1. cat /etc/hosts  
  2.   
  3. 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4  
  4.   
  5. ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6  
  6.   
  7. 192.168.80.8     cobbler.test.com          

 

cobbler关闭selinux

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

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

 

  1. [root@cobbler ~]# sestatus  
  2.   
  3. SELinux status:                 disabled  

 

关闭iptables

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

 

  1. chkconfig ip6tables off  
  2.   
  3. chkconfig iptables off  
  4.   
  5. /etc/init.d/ip6tables stop  
  6.   
  7. /etc/init.d/iptables stop  


安装cobbler

1、安装cobbler相关的包

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

 

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


 

2、安装debmirror

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

 

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

 

下载debmirrors

 

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


安装

 

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


设置cobbler

1、tftp服务和rsync服务

 

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


2、web可以登陆

 

 

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


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

 

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


 

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

 

  1. sed -i 's/server: 127.0.0.1/server: 192.168.80.8/g' /etc/cobbler/settings  


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

 

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


6、TFTP服务器 IP地址

 

  1. sed -i 's/next_server: 127.0.0.1/next_server: 192.168.80.8/g' /etc/cobbler/settings  


7、cobbler管理rsync

 

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


8、cobbler管理dhcp

 

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


 

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

 

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

 

 

  1. subnet 192.168.80.0 netmask 255.255.255.0 {  
  2.   
  3.      option routers             192.168.80.1;  
  4.   
  5.      option domain-name-servers  192.168.80.8;  
  6.   
  7.      option subnet-mask         255.255.255.0;  
  8.   
  9.      #range dynamic-bootp        192.168.80.100 192.168.80.150;  
  10.   
  11.      filename                   "/pxelinux.0";  
  12.   
  13.      default-lease-time         21600;  
  14.   
  15.      max-lease-time             43200;  
  16.   
  17.      next-server                $next_server;  
  18.   
  19. }  

 

注意:这里你可以设置多个DHCP地址范围,然后在交换机上做DHCP中继,即可实现跨网段安装了,我的环境已经实现!

9、设置root默认密码

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

 

  1. # openssl passwd -1 -salt 'random-phrase-here' 'hadop'  
  2.   
  3. $1$random-p$99lAzJZEl9uunSaThe9oM0修改 /etc/cobbler/settings  
  4.   
  5.    
  6.   
  7. #default_password_crypted: "$1$mF86/UHC$WvcIcX2t6crBz2onWxyac."  
  8.   
  9. default_password_crypted: "$1$random-p$99lAzJZEl9uunSaThe9oM0"   

 

 

10、 启动相关服务

 

  1. chkconfig httpd on   
  2.   
  3. chkconfig cobblerd on  
  4.   
  5. chkconfig dhcpd on  
  6.   
  7. /etc/init.d/httpd restart  
  8.   
  9. /etc/init.d/cobblerd restart  


11、设置debmirror

 

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


12、启动菜单

 

  1. cobbler get-loaders   


检查cobbler

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

cobbler所有修改,需要cobbler sync检查

 

 

  1. # cobbler check  
  2.   
  3. No configuration problems found.  All systems go.  


web登陆

登录:https://192.168.80.8/cobbler_web/

user: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。

 

 

  1. yum -y install squid  
  2.   
  3. /etc/init.d/squid restart  
  4.   
  5. chkconfig squid on  


 

设置apache根目录访问

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

 

 

  1. # cat /etc/httpd/conf.d/welcome.conf  
  2.   
  3. <LocationMatch "^/+$">  
  4.   
  5.  Options Indexes FollowSymLinks  
  6.   
  7.     Order allow,deny  
  8.   
  9.     Allow from all  
  10.   
  11. </LocationMatch>  


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

安装Centos系统

我的环境里部署了centos5.6,centos6.2和centos6.4三个版本,这里选择centos6.2为列来说明下,其他版本操作相同。

1、导入centos 6.3 iso

加载iso

 

  1. mount -t auto -o loop /root/CentOS-6.2-x86_64-bin-DVD1.iso /mnt   


估计是由于centos里光盘信息比较多,所以导入的时候,会同时创建一个distro,profile。并且还设置的repo。不过这个repo,只包括DVD1,如果希望包括DVD2,还需要做设置才行。

 

 

  1. # cobbler import --path=/mnt --name=CentOS6.2 --arch=x86_64  
  2.   
  3. task started: 2013-05-06_140452_import  
  4.   
  5. task started (id=Media import, time=Mon Aug  6 14:04:52 2012)  
  6.   
  7. Found a redhat compatible signature: Packages  
  8.   
  9. adding distros  
  10.   
  11. creating new distro: CentOS6.2-x86_64  
  12.   
  13. creating new profile: CentOS6.2-x86_64  
  14.   
  15. associating repos  
  16.   
  17. traversing distro CentOS6.2-x86_64  
  18.   
  19. descent into /var/www/cobbler/ks_mirror/CentOS6.2-x86_64  
  20.   
  21. processing repo at : /var/www/cobbler/ks_mirror/CentOS6.2-x86_64  
  22.   
  23. need to process repo/comps: /var/www/cobbler/ks_mirror/CentOS6.2-x86_64  
  24.   
  25. looking for /var/www/cobbler/ks_mirror/CentOS6.2-x86_64/repodata/*comps*.xml  
  26.   
  27. running: createrepo -c cache -s sha --groupfile /var/www/cobbler/ks_mirror/CentOS6.2-x86_64/repodata/0dae8d32824acd9dbdf7ed72f628152dd00b85e4bd802e6b46e4d7b78c1042a3-c6-x86_64-comps.xml /var/www/cobbler/ks_mirror/CentOS6.2-x86_64  
  28.   
  29. 1878/3848 - Packages/libipa_hbac-1.8.0-32.el6.i686.rpm                            
  30.   
  31. iso-8859-1 encoding on Ville Skytt<ville.skytta@iki.fi> - 2.8.2-2  
  32.   
  33.    
  34.   
  35. 3848/3848 - Packages/gpm-1.20.6-12.el6.x86_64.rpm                                 
  36.   
  37. Saving Primary metadata  
  38.   
  39. Saving file lists metadata  
  40.   
  41. Saving other metadata  
  42.   
  43.    
  44.   
  45. received on stderr:   
  46.   
  47. associating kickstarts  
  48.   
  49. *** TASK COMPLETE ***  


2、设置profile kickstart文件

profile默认是采用 /var/lib/cobbler/kickstarts/sample.ks  作为ks文件。

 

可以考虑使用我的ks文件来替换:centos.ks

 

 

  1. cd /var/lib/cobbler/kickstarts  
  2.   
  3. wget http://192.168.80.8/centos.ks  

 

 

  1. cobbler profile edit --name=CentOS6.2-x86_64 --kickstart=/var/lib/cobbler/kickstarts/centos.ks  


注意,我的centos.ks 文件,默认已经是采用proxy,所以你一定要安装好squid。

这个时候,你可以通过下面命令查看修改的界面

 

 

  1. cobbler profile report  


 

3、命令行添加一个客户机

我是采用DELL的机器。我已经启用了IPMI。对于cobbler来说,必须启用ipmi,才能发挥它的优势。

 

IPMI IP:192.168.80.120

user:root

pass:calvin

 

 

  1. cobbler system  add \  
  2.   
  3. --name=node12 \  
  4.   
  5. --hostname=cobbler-test  \  
  6.   
  7. --profile=CentOS6.2-x86_64 \  
  8.   
  9. --interface=eth0 \  
  10.   
  11. --mac=00:25:90:67:CE:1A \  
  12.   
  13. --interface=eth0 \  
  14.   
  15. --ip-address=192.168.80.20 \  
  16.   
  17. --subnet=255.255.255.0 \  
  18.   
  19. --gateway=192.168.80.1 \  
  20.   
  21. --static=1 \  
  22.   
  23. --power-type=ipmilan \  
  24.   
  25. --power-user=root \  
  26.   
  27. --power-pass=calvin \  
  28.   
  29. --power-address=192.168.80.120  


这些添加,其实都是可以在web完成,不过web比较繁琐,所以命令行下更加方便。

cobbler所有设置和修改,都需要通过cobbler sync来生效,你会看到重启name,dhcp服务。

 

cobbler sync查看添加节点的情况

 

 

  1. cobbler system report --name=cobbler-test  


我们需要留意的一个参数是:netboot-enabled,当cobbler装完客户端后,这个参数会自动变成0,如果我们希望重装,就需要修改成1.

 

 

  1. cobbler system edit --namecobbler-test  --netboot-enabled=1  


 

所有的修改,一定要记住,需要cobbler sync才能生效。

 

安装客户端

 

设置远程机器pxe启动:有些服务器支持下次启动pxe启动,可以运行这个命令,让机器下次是从pxe启动:

 

  1. ipmitool -I lan -H 192.168.80.120 -U root -P calvin chassis bootdev pxe  


 

重启远程机器:

有两个办法重启远程机器

 

 

  1. cobbler system reboot --namecobbler-test   
  2.   
  3. ipmitool -I lan -H 192.168.80.120 -U root -P calvin chassis power reset  


当系统启动后,会从pxe启动,装完os后,会自动修改 netboot-enabled=0。

 

4、web操作

 

1)netboot enable

 

 

这里我们可以选择将节点解锁。

2)sysnc

web界面,也可以实现cobbler sync

 

3)重启远程机器

 

这些操作,都是可以批量操作。让远程机器重启。目前web还无法实现让远程机器下次从pxe启动。

 

 

到这里已经可以顺利完成系统的安装了!关于centos的源的一些设置以及同步网络源这里就不详细说了,因为centos我用的不多,主要还是ubuntu的系统,在ubuntu里面再详细说明。

安装ubuntu

Cobbler上安装ubuntu就没centos那么简单了,网上也很少有完整的资料,这里还是参照沙克的blog,顺利完成了安装。这里我顺利完成了ubuntu12.04和ubuntu11.04的部署,下面以ubuntu12.04为例。

1、导入ISO

经过测试,是可以直接使用ubuntu 12.04的导入的iso,作为安装源,完成安装。

 

 

  1. mount -t auto -o loop /root/ubuntu-12.04-server-amd64.iso /mnt  

 

  1. # cobbler import --path=/mnt --name=ubuntu12.04  
  2.   
  3. task started: 2013-05-08_101200_import  
  4.   
  5. task started (id=Media import, time=Wed Aug  8 10:12:00 2012)  
  6.   
  7. Found a debian/ubuntu compatible signature: pool  
  8.   
  9. adding distros  
  10.   
  11. avoiding symlink loop  
  12.   
  13. creating new distro: ubuntu12.04-x86_64  
  14.   
  15. creating new profile: ubuntu12.04-x86_64  
  16.   
  17. avoiding symlink loop  
  18.   
  19. skipping import, as distro name already exists: ubuntu12.04-x86_64  
  20.   
  21. avoiding symlink loop  
  22.   
  23. avoiding symlink loop  
  24.   
  25. associating repos  
  26.   
  27. traversing distro ubuntu12.04-x86_64  
  28.   
  29. descent into /var/www/cobbler/ks_mirror/ubuntu12.04  
  30.   
  31. associating kickstarts  
  32.   
  33. skipping /var/www/cobbler/ks_mirror/ubuntu12.04/dists/stable  
  34.   
  35. skipping /var/www/cobbler/ks_mirror/ubuntu12.04/dists/precise  
  36.   
  37. skipping /var/www/cobbler/ks_mirror/ubuntu12.04/dists/unstable  
  38.   
  39. *** TASK COMPLETE ***  


2、对于ubuntu来说,就没那么幸运,导入的distro和profile,是有问题的

 

 

  1. cobbler distro report --name=ubuntu12.04-x86_64  
  2.   
  3. cobbler profile report --name=ubuntu12.04-x86_642:修改distro  


 

默认的是错误,一定要修改。

 

 

  1. cobbler distro edit --name=ubuntu12.04-x86_64 \  
  2.   
  3. --kernel=/var/www/cobbler/ks_mirror/ubuntu12.04/install/netboot/ubuntu-installer/amd64/linux \  
  4.   
  5. --initrd=/var/www/cobbler/ks_mirror/ubuntu12.04/install/netboot/ubuntu-installer/amd64/initrd.gz  --os-version=precise  


3、脚本

我根据ubuntu的Maas,提取了他的pressed文件,修改了一下,可以直接下载使用:ubuntu.preseed

 

这个preseed文件的分区,大家可以调整。里面有两种分区的方案,我注释掉了默认的分区方案。

 

 

  1. cd /var/lib/cobbler/kickstarts  
  2.   
  3. wget http://192.168.80.8/ubuntu.preseed  


由于ubuntu.preseed文件,用到几个snippets,所以需要创建

 

 

  1. Vi  /var/lib/cobbler/snippets/orchestra_disable_pxe  
  2.   
  3.    
  4.   
  5. wget "http://$http_server:$http_port/cblr/svc/op/nopxe/system/$system_name" -O /dev/null \  
  6.   
  7.    
  8.   
  9. vi /var/lib/cobbler/snippets/orchestra_proxy  
  10.   
  11.    
  12.   
  13. # Point apt to orchestra-provisioning-server's squid  
  14.   
  15. d-i     mirror/country string manual  
  16.   
  17. d-i     mirror/http/hostname string $http_server  
  18.   
  19. d-i     apt-setup/security_host string $http_server  
  20.   
  21. d-i     apt-setup/security_path string /ubuntu  
  22.   
  23. d-i     mirror/http/directory string /ubuntu  
  24.   
  25. d-i     mirror/http/proxy string http://@@server@@:3128/设置静态IP地址  


 

由于cobbler没有提供脚本来设置静态IP,所以这个需要自己想办法. static.sh 脚本 ,注意,这个脚本,有一个地方你是需要修改,就是你的网段。我的网段是192.168.80.0,你改成你的网段才可以。

 

 

  1. mkdir /var/www/html/post  
  2.   
  3. cd /var/www/html/post  
  4.   
  5. wget http:// 192.168.80.8/static.sh_.txt  

 

我的ubuntu.preseed 已经调用了这个脚本。

 

 

 

4、设置proflie

增加kernel option,关联ubuntu preseed

 

 

  1. cobbler profile edit --name=ubuntu12.04-x86_64 \  
  2.   
  3. --kopts="log_port=514 priority=critical locale=en_US log_host=192.168.80.8 netcfg/choose_interface=auto " \  
  4.   
  5. --kickstart=/var/lib/cobbler/kickstarts/ubuntu.preseed  


5、设置安装源

这里直接使用导入的光盘作为源,安装的时候会到/var/www/html/ubuntu目录下寻找系统安装文件,因为在orchestra_proxy文件里我们指定了系统安装是mirror的存放位置是apache根目录下的ubuntu目录,所以我们需要做个软连接:

 

  1. ln -s /var/www/cobbler/ks_mirror/ubuntu12.04 /var/www/html/ubuntu  


这样就可以顺利完成安装。

当然这样系统镜像也会作为你的本地源的默认路径,系统安装包里的软件肯定是有限的,只能安装一些基本的软件,彻底的解决办法,就是同步一个ubuntu 12.04的本地源。这是一个体力活,全部的ubuntu 12.04 的源,一共135G,同步时间,根据你的网络而定 ,我现在已经同步完了。

具体同步方法后面再介绍。

我将同步来的源存放在 /home/ubuntu 下。需要链接到web可以访问的目录

 

 

  1. ln -s /home/ubuntu /var/www/html/ubuntu  


当然这样,就和上面的连接冲突了,这样就会使用网络同步的源来安装系统,这样也是完全可行的,但是考虑到为了保持系统版本的一致性,最好还是使用光盘镜像文件来安装,因为源我会定期进行更新。方法也很简单,修改下orchestra_proxy里的参数就行了。

6、安装客户端

这个就和centos基本是一样。唯一的区别就是需要指定ubuntu

 

  1. cobbler system  add \  
  2.   
  3. --name=node15 \  
  4.   
  5. --hostname=node15 \  
  6.   
  7. --profile=ubuntu12.04-x86_64 \  
  8.   
  9. --interface=eth0 \  
  10.   
  11. --mac=00:25:90:67:CE:28 \  
  12.   
  13. --interface=eth0 \  
  14.   
  15. --ip-address=192.168.80.120 \  
  16.   
  17. --subnet=255.255.255.0 \  
  18.   
  19. --gateway=192.168.80.1 \  
  20.   
  21. --static=1 \  
  22.   
  23. --power-type=ipmilan \  
  24.   
  25. --power-user=root \  
  26.   
  27. --power-pass=calvin \  
  28.   
  29. --power-address=192.168.80.120  


 

这样一个节点就添加成功了,我们可以将这个命令写在一个脚本文件里,需要添加节点的时候运行一下就可以了,非常方便!