今天成功远程安装了15台刀片服务器,完全采用cobbler自动化安装,一个多小时搞定,主要每台服务器还需要配置raid,耽误了不少时间。磁盘阵列这东西还真得一个个进阵列管理界面一个一个折腾,目前还没发现什么方便快捷的工具,好在可以使用远程控制台,方便多了!远离机房,珍爱生命!
我的cobbler服务器也是前段时间才部署完成,130多G的ubuntu12.04源也下载下来了,今天试用了下还是不错的,速度很快。基本上已经是目前最新的源了,后面加个计划任务,定期同步更新下,保持最新状态!
之前安装操作系统,使用的是kickstart,如果是两年或更早以前你用这个,还会显得很高端,现在如果还在使用kickstart,就有点落伍了。简单总结了下kickstart的缺点:
1、不能夸网段安装,每个网段都得部署一个网络安装源;
2、安全性太差,如果你把服务器第一启动顺序设置为从网络启动,那么每次重启服务器,你的系统可能就要重新安装了,不设置第一启动为网络的话,每次重装就必须得进机房接上显示器,等待着F12的出现(DELL服务器是开机时按F12从网络引导,其他服务器不太清楚,开机都会有提示的)而这个等待的过程是相当痛苦无聊的。即使你不把服务器第一启动项设置为从网络启动,一旦你的系统挂了,无法正确引导了,那么正好这时你的DHCP也开着,那么你的噩运也就降临了!
3、Kickstart的模板文件功能单一,无法对新系统做过多初始化配置。
以上仅是简单列了三点,将cobbler结合IPMI使用,功能还是相当强大的,对运维人员来说,基本上不需要进机房了。
安装前简单介绍下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、IP,主机名自动配置
3、网络安装,无风险
一台普通PC机就可以,我的环境安装的是centos6.2_x86_64,最小化安装,没什么特别的要求,配置个固定IP就OK。
采用网易的源和USTC的源:
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/x86_64/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 192.168.80.8 cobbler.test.com
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
这个需要重启机器才能生效,所以建议修改完重启.
[root@cobbler ~]# sestatus SELinux status: disabled
cobbler会使用到好几个端口,为了简化,直接把iptables关闭:
chkconfig ip6tables off chkconfig iptables off /etc/init.d/ip6tables stop /etc/init.d/iptables stop
安装cobbler
1、安装cobbler相关的包
如果希望cobbler可以管理dhcp,dns,需要把dns和dhcp都安装在同一台服务器上。如果你不管理dns,可以不需要安装bind.
yum -y install cman tftp-server dhcp cobbler cobbler-web bind pykickstart
2、安装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/x86_64/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: 192.168.80.8/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: 192.168.80.8/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 192.168.80.0 netmask 255.255.255.0 { option routers 192.168.80.1; option domain-name-servers 192.168.80.8; option subnet-mask 255.255.255.0; #range dynamic-bootp 192.168.80.100 192.168.80.150; filename "/pxelinux.0"; default-lease-time 21600; max-lease-time 43200; next-server $next_server; }
注意:这里你可以设置多个DHCP地址范围,然后在交换机上做DHCP中继,即可实现跨网段安装了,我的环境已经实现!
9、设置root默认密码
这个设置只针对centos有效。我默认的root密码是:hadoop
# openssl passwd -1 -salt 'random-phrase-here' 'hadop' $1$random-p$99lAzJZEl9uunSaThe9oM0修改 /etc/cobbler/settings #default_password_crypted: "$1$mF86/UHC$WvcIcX2t6crBz2onWxyac." default_password_crypted: "$1$random-p$99lAzJZEl9uunSaThe9oM0"
10、 启动相关服务
chkconfig httpd on chkconfig cobblerd on chkconfig dhcpd on /etc/init.d/httpd restart /etc/init.d/cobblerd restart
11、设置debmirror
sed -i -e 's|@dists=.*|#@dists=|' /etc/debmirror.conf sed -i -e 's|@arches=.*|#@arches=|' /etc/debmirror.conf
12、启动菜单
cobbler get-loaders
检查cobbler
cobbler提供一个工具,检查你的设置。看到提示,就表示全部工作都已经完成。
对cobbler所有修改,需要cobbler sync检查
# cobbler check 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可以加快速度,至少对ubuntu是非常有效的。目前centos的ks文件里,我还没搞明白如何设置squid,ubuntu的preseed文件里已经启用squid。所以我们需要安装squid。
yum -y install squid /etc/init.d/squid restart chkconfig squid on
我们希望直接访问IP,就可以看到源的目录,尤其对于ubuntu的源来说,这样看起来更加规范。
# cat /etc/httpd/conf.d/welcome.conf <LocationMatch "^/+$"> Options Indexes FollowSymLinks Order allow,deny Allow from all </LocationMatch>
重启apache,就可以 http://192.168.80.8 看到目录。实际目录是 /var/www/html/
我的环境里部署了centos5.6,centos6.2和centos6.4三个版本,这里选择centos6.2为列来说明下,其他版本操作相同。
1、导入centos 6.3 iso
加载iso
mount -t auto -o loop /root/CentOS-6.2-x86_64-bin-DVD1.iso /mnt
估计是由于centos里光盘信息比较多,所以导入的时候,会同时创建一个distro,profile。并且还设置的repo。不过这个repo,只包括DVD1,如果希望包括DVD2,还需要做设置才行。
# cobbler import --path=/mnt --name=CentOS6.2 --arch=x86_64 task started: 2013-05-06_140452_import task started (id=Media import, time=Mon Aug 6 14:04:52 2012) Found a redhat compatible signature: Packages adding distros creating new distro: CentOS6.2-x86_64 creating new profile: CentOS6.2-x86_64 associating repos traversing distro CentOS6.2-x86_64 descent into /var/www/cobbler/ks_mirror/CentOS6.2-x86_64 processing repo at : /var/www/cobbler/ks_mirror/CentOS6.2-x86_64 need to process repo/comps: /var/www/cobbler/ks_mirror/CentOS6.2-x86_64 looking for /var/www/cobbler/ks_mirror/CentOS6.2-x86_64/repodata/*comps*.xml 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 1878/3848 - Packages/libipa_hbac-1.8.0-32.el6.i686.rpm iso-8859-1 encoding on Ville Skytt<[email protected]> - 2.8.2-2 3848/3848 - Packages/gpm-1.20.6-12.el6.x86_64.rpm Saving Primary metadata Saving file lists metadata Saving other metadata received on stderr: associating kickstarts *** TASK COMPLETE ***
2、设置profile kickstart文件
profile默认是采用 /var/lib/cobbler/kickstarts/sample.ks 作为ks文件。
可以考虑使用我的ks文件来替换:centos.ks
cd /var/lib/cobbler/kickstarts wget http://192.168.80.8/centos.ks
cobbler profile edit --name=CentOS6.2-x86_64 --kickstart=/var/lib/cobbler/kickstarts/centos.ks
注意,我的centos.ks 文件,默认已经是采用proxy,所以你一定要安装好squid。
这个时候,你可以通过下面命令查看修改的界面
cobbler profile report
3、命令行添加一个客户机
我是采用DELL的机器。我已经启用了IPMI。对于cobbler来说,必须启用ipmi,才能发挥它的优势。
IPMI IP:192.168.80.120
user:root
pass:calvin
cobbler system add \ --name=node12 \ --hostname=cobbler-test \ --profile=CentOS6.2-x86_64 \ --interface=eth0 \ --mac=00:25:90:67:CE:1A \ --interface=eth0 \ --ip-address=192.168.80.20 \ --subnet=255.255.255.0 \ --gateway=192.168.80.1 \ --static=1 \ --power-type=ipmilan \ --power-user=root \ --power-pass=calvin \ --power-address=192.168.80.120
这些添加,其实都是可以在web完成,不过web比较繁琐,所以命令行下更加方便。
cobbler所有设置和修改,都需要通过cobbler sync来生效,你会看到重启name,dhcp服务。
cobbler sync查看添加节点的情况
cobbler system report --name=cobbler-test
我们需要留意的一个参数是:netboot-enabled,当cobbler装完客户端后,这个参数会自动变成0,如果我们希望重装,就需要修改成1.
cobbler system edit --name= cobbler-test --netboot-enabled=1
所有的修改,一定要记住,需要cobbler sync才能生效。
安装客户端
设置远程机器pxe启动:有些服务器支持下次启动pxe启动,可以运行这个命令,让机器下次是从pxe启动:
ipmitool -I lan -H 192.168.80.120 -U root -P calvin chassis bootdev pxe
重启远程机器:
有两个办法重启远程机器
cobbler system reboot --name= cobbler-test 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里面再详细说明。
Cobbler上安装ubuntu就没centos那么简单了,网上也很少有完整的资料,这里还是参照沙克的blog,顺利完成了安装。这里我顺利完成了ubuntu12.04和ubuntu11.04的部署,下面以ubuntu12.04为例。
1、导入ISO
经过测试,是可以直接使用ubuntu 12.04的导入的iso,作为安装源,完成安装。
mount -t auto -o loop /root/ubuntu-12.04-server-amd64.iso /mnt
# cobbler import --path=/mnt --name=ubuntu12.04 task started: 2013-05-08_101200_import task started (id=Media import, time=Wed Aug 8 10:12:00 2012) Found a debian/ubuntu compatible signature: pool adding distros avoiding symlink loop creating new distro: ubuntu12.04-x86_64 creating new profile: ubuntu12.04-x86_64 avoiding symlink loop skipping import, as distro name already exists: ubuntu12.04-x86_64 avoiding symlink loop avoiding symlink loop associating repos traversing distro ubuntu12.04-x86_64 descent into /var/www/cobbler/ks_mirror/ubuntu12.04 associating kickstarts skipping /var/www/cobbler/ks_mirror/ubuntu12.04/dists/stable skipping /var/www/cobbler/ks_mirror/ubuntu12.04/dists/precise skipping /var/www/cobbler/ks_mirror/ubuntu12.04/dists/unstable *** TASK COMPLETE ***
2、对于ubuntu来说,就没那么幸运,导入的distro和profile,是有问题的
cobbler distro report --name=ubuntu12.04-x86_64 cobbler profile report --name=ubuntu12.04-x86_642:修改distro
默认的是错误,一定要修改。
cobbler distro edit --name=ubuntu12.04-x86_64 \ --kernel=/var/www/cobbler/ks_mirror/ubuntu12.04/install/netboot/ubuntu-installer/amd64/linux \ --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文件的分区,大家可以调整。里面有两种分区的方案,我注释掉了默认的分区方案。
cd /var/lib/cobbler/kickstarts wget http://192.168.80.8/ubuntu.preseed
由于ubuntu.preseed文件,用到几个snippets,所以需要创建
Vi /var/lib/cobbler/snippets/orchestra_disable_pxe wget "http://$http_server:$http_port/cblr/svc/op/nopxe/system/$system_name" -O /dev/null \ vi /var/lib/cobbler/snippets/orchestra_proxy # Point apt to orchestra-provisioning-server's squid d-i mirror/country string manual d-i mirror/http/hostname string $http_server d-i apt-setup/security_host string $http_server d-i apt-setup/security_path string /ubuntu d-i mirror/http/directory string /ubuntu d-i mirror/http/proxy string http://@@server@@:3128/设置静态IP地址
由于cobbler没有提供脚本来设置静态IP,所以这个需要自己想办法. static.sh 脚本 ,注意,这个脚本,有一个地方你是需要修改,就是你的网段。我的网段是192.168.80.0,你改成你的网段才可以。
mkdir /var/www/html/post cd /var/www/html/post wget http:// 192.168.80.8/static.sh_.txt
我的ubuntu.preseed 已经调用了这个脚本。
4、设置proflie
增加kernel option,关联ubuntu preseed
cobbler profile edit --name=ubuntu12.04-x86_64 \ --kopts="log_port=514 priority=critical locale=en_US log_host=192.168.80.8 netcfg/choose_interface=auto " \ --kickstart=/var/lib/cobbler/kickstarts/ubuntu.preseed
5、设置安装源
这里直接使用导入的光盘作为源,安装的时候会到/var/www/html/ubuntu目录下寻找系统安装文件,因为在orchestra_proxy文件里我们指定了系统安装是mirror的存放位置是apache根目录下的ubuntu目录,所以我们需要做个软连接:
ln -s /var/www/cobbler/ks_mirror/ubuntu12.04 /var/www/html/ubuntu
这样就可以顺利完成安装。
当然这样系统镜像也会作为你的本地源的默认路径,系统安装包里的软件肯定是有限的,只能安装一些基本的软件,彻底的解决办法,就是同步一个ubuntu 12.04的本地源。这是一个体力活,全部的ubuntu 12.04 的源,一共135G,同步时间,根据你的网络而定 ,我现在已经同步完了。
具体同步方法后面再介绍。
我将同步来的源存放在 /home/ubuntu 下。需要链接到web可以访问的目录
ln -s /home/ubuntu /var/www/html/ubuntu
当然这样,就和上面的连接冲突了,这样就会使用网络同步的源来安装系统,这样也是完全可行的,但是考虑到为了保持系统版本的一致性,最好还是使用光盘镜像文件来安装,因为源我会定期进行更新。方法也很简单,修改下orchestra_proxy里的参数就行了。
6、安装客户端
这个就和centos基本是一样。唯一的区别就是需要指定ubuntu
cobbler system add \ --name=node15 \ --hostname=node15 \ --profile=ubuntu12.04-x86_64 \ --interface=eth0 \ --mac=00:25:90:67:CE:28 \ --interface=eth0 \ --ip-address=192.168.80.120 \ --subnet=255.255.255.0 \ --gateway=192.168.80.1 \ --static=1 \ --power-type=ipmilan \ --power-user=root \ --power-pass=calvin \ --power-address=192.168.80.120
这样一个节点就添加成功了,我们可以将这个命令写在一个脚本文件里,需要添加节点的时候运行一下就可以了,非常方便!