文章结构
1. 前言 2. cobbler安装 3. 系统定制 4. 参考链接
前言:
给电脑装过系统的同学都知道,不论是从U盘、光驱或者其他设备装系统,都需要先在BIOS里设置开机启动项(或用开机快捷键设置)。从上大学到现在,我帮同学装系统少说也有上百次,但是还从来没有使用从网卡启动安装过,虽然以前也注意到,但一直不知道那是个什么玩意,见图(1)。前段时间在实习公司做Openstack的自动化安装与部署工作,才有幸接触到,原来这是一种从网卡远程启动的技术!
图1 BIOS启动项界面
要从网卡启动,首先你的网卡要支持PXE(Preboot eXecution Environment,预启动环境),而PXE客户端存在于网卡的ROM中。PXE是由Intel开发,提供了一种由网卡启动计算机的机制,工作于Client/Server模式。通常有一台主机作为PXE的server端,并开通了PXE远程启动所依赖的DHCP、TFTP等服务,客户机在通过网卡启动的过程中,会先向server端发出DHCP请求,从PXE服务器获得IP地址、网关及TFTP服务器信息后,然后通过TFTP协议(网卡ROM中已包含TFTP客户端)自动下载用于引导操作系统的引导文件(boot loader)到本地内存中(不同的操作系统架构使用不同的PXE引导文件,后文会继续提到),再通过此软件加载操作系统的启动文件,开始安装操作系统。
在实践操作中,以CentOS6.5为例,上文中提到的PXE引导文件为/var/tftboot/pxelinux.0,而要完成某种定制安装,需要新建/var/tftboot/pxtlinux文件夹,并在此文件夹下自定义*.cfg文件来完成操作系统的定制(如:语言,时区,密码,分区,网络配置,安装包选择,安装完系统的后续操作等),另外还要在此目录下新建一个名为default的文件,指定系统定制文件*.cfg的位置等。这么一连串的操作和系统定制显然非常繁琐,只会增加运维人员的负担!Redhat推出了kickstart和cobbler两个软件,专门用来完成操作系统的定制与自动化部署安装,其中cobbler更是集成了kickstart,功能更为强大!
下面就一步步从安装cobbler开始学习!
cobbler安装:
0. 环境:Vmware虚拟环境 CentOS6.5-x86_64 (basic-server)
IP:192.168.10.160 HOSTNAME:cobbler.test.com
注:需要关闭Vmware自带的DHCP服务;
1. 系统更新
yum -y update
2. 软件包安装:
yum –y install httpd tftp-server xinetd dhcp cobbler bind puppet puppet–server facter
注:(a) http用于PXE客户端从服务端下载安装操作系统所需的文件;(b) cobbler可以完成puppet的安装和给puppet客户端的签名认证;(c) 也可安装cobbler-web,提供了web界面,操作更容易。
3. 修改配置文件及启动服务:
(1) 关闭SELinux
sed -i ‘s/SELINUX=.*/SELINUX=disabled/g‘ /etc/selinux/config # 重启生效,setenforce 0 临时生效
(2) 设置cobbler server IP:vim /etc/cobblet/settings
1 server: set your cobbler ip here, e.g. 192.168.10.160 2 next_server: set your cobbler ip here, e.g. 192.168.10.160
(3) 设置DHCP:
a. vim /etc/cobbler/settings
manage_dhcp: 1
b. vim /etc/cobbler/dhcp.template,此文件是cobbler管理dhcp的模板
1 ddns-update-style interim; 2 3 allow booting; 4 allow bootp; 5 6 ignore client-updates; 7 set vendorclass = option vendor-class-identifier; 8 9 option pxe-system-type code 93 = unsigned integer 16; 10 11 subnet 192.168.10.0 netmask 255.255.255.0 { # 修改为cobbler所在主机的网段 12 option routers 192.168.10.5; # 路由 13 option domain-name-servers 192.168.10.160; # DNS server 14 option subnet-mask 255.255.255.0; # netmast 15 range dynamic-bootp 192.168.10.161 192.168.10.170; # DHCP服务分配的IP范围 16 default-lease-time 21600; 17 max-lease-time 43200; 18 next-server $next_server; 19 class "pxeclients" { 20 match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; 21 if option pxe-system-type = 00:06 { 22 filename "grub/grub-x86.efi"; 23 } else if option pxe-system-type = 00:07 { 24 filename "grub/grub-x86_64.efi"; 25 } else { 26 filename "pxelinux.0"; 27 } 28 } 29 30 }
(4) 设置DNS:
a. vim /etc/cobbler/settings
manage_dns: 1 bind_master: 192.168.10.160 manage_forward_zones: [test.com] manage_reverse_zones: [192.168.10]
b. DNS查询:vim /etc/cobbler/named.template
1 listen-on port 53 { any; } 2 allow-query { any; }
(5) 设置ntp服务:vim /etc/ntp.conf
1 server 192.168.10.160 2 fudge 192.168.10.160 stratum 10
(6) 防火墙设置
如iptables开启,需开放udp 53/67/69,tcp 80/443/25151/8140端口;
(7) 更改系统默认密码 (可选):vim /etc/cobbler/settings
default_password_crypted: "$1$mF86/UHC$WvcIcX2t6crBz2onWxyac." # 默认为"cobbler"
用 openssl passwd -1 重设密码;
(8) 设置tftp:vim /etc/xinetd.d/tftp
将disable 项设置成 no;
(9) 下载get-loaders (即前文中提到的引导文件)
cobbler get-loaders # 自动下载loaders文件在/var/lib/cobbler/loaders/目录下
其中README文件注明了不同系统架构所需的引导文件:
1 The requirements for netbooting each are as follows: 2 3 x86/x86_64 require syslinux (pxelinux.0), and menu.c32 4 ppc/ppc64 use yaboot 5 ia64 uses elilo
(10) 配置puppet:
a. vim /etc/cobbler/setting
1 puppet_auto_setup: 1 2 sign_puppet_certs_automatically: 1 3 remove_ols_puppet_cert_automatically: 1
b. 修改puppet的配置文件: vim /etc/puppet/puppet.conf
1 [main] 2 logdir = /var/log/puppet 3 rundir = /var/run/puppet 4 ssldir = $vardir/ssl 5 6 [agent] 7 classfile = $vardir/classes.txt 8 localconfig = $vardir/localconfig 9 server = cobbler.test.com 10 certname = cobbler.test.com 11 12 [master] 13 certname = cobbler.test.com 14 autosign = /etc/puppet/autosign.conf # 自动认证配置文件
新建自动认证文件:
touch /etc/puppet/autosign.conf echo "*.test.com" >> /etc/puppet/autosign.conf # 假设cobbler部署的节点主机名为:*.test.com
(11) 启动服务
1 /etc/init.d/puppetmaster start 2 chkconfig puppetmaster on 3 4 service cobblerd start 5 chkconfig cobblerd on 6 7 service httpd start 8 chkconfig httpd on 9 10 service xinetd start 11 chkconfig xinetd on
# cobbler sync会自动启动named和dhcpd
(12) cobbler 设置信息同步
cobbler sync
(13) cobbler 检查
cobbler check
注:如果前面临时关闭selinux,那么selinux错误提示可不用管;其他例如:端口设置,debmirror,cman,pykickstart等不需要的也可以不用管;
到此:cobbler安装完成!
系统定制
1. 导入镜像 :镜像目录 /mnt/ CentOS-6.5-x86_64-bin-DVD1.iso
1 mkdir -p /mnt/centos6.5 2 mount -o loop /mnt/ CentOS-6.5-x86_64-bin-DVD1.iso /mnt/centos6.5/ # 挂载 3 cobbler import --path=/mnt/centos6.5/ --name=centos6.5
注:导入过程可能需要几分钟,可查看/var/www/cobbler/ks_mirror/centos5.5/目录文件生成情况或通过浏览器查看;
2. 信息查看
1 cobbler report # 信息查看 2 cobbler distro list # 查看导入distro列表,默认生成有一个与distro同名的profile 3 cobbler profile list # 查看profile列表
cobbler的系统结构:distro-->profile-->system,可以根据导入的distro定制profile,然后再由profile定制system;
3. 定制kickstart文件和SINPPET文件
例如:需要部署三类节点,控制节点、计算节点和存储节点,可分别定制以下三个ks文件(可通过图形界面软件system-config-kickstart很方便地定义)
Centos6.5-control.ks Centos6.5-compute.ks Centos6.5-storage.ks
定制的ks文件放置于 /var/lib/cobbler/kickstart/*ks,自定义的Snippet文件放置于 /var/lib/cobbler/snippet/下;
可以在ks文件中引用自定义的SNIPPET,这样不至于所有代码片段写在一起组成一个庞大的ks文件!最后系统调用的ks文件会从SNIPPETS中逐个去解析(复制);
4. 定制cobbler profile
(1) 控制节点profile
1 cobbler profile add --name=centos6.5-control --kickstart=2 /var/lib/cobbler/kickstarts/centos6.5-control.ks --distro=centos6.5-x86_64
(2) 计算节点profile
1 cobbler profile add --name=centos6.5-compute --kickstart=2 /var/lib/cobbler/kickstarts/centos6.5-compute.ks --distro=centos6.5-x86_64
(3) 存储节点profile
1 cobbler profile add --name=centos6.5-storage --kickstart=2 /var/lib/cobbler/kickstarts/centos6.5-storage.ks --distro=centos6.5-x86_64
(4) 查看profile:cobbler profile list
1 [[email protected] ~]cobbler profile list 2 centos6.5-compute 3 centos6.5-control 4 centos6.5-storage5 centos6.5-x86_64
5. 定制系统
(1) 硬件发现
依次开启所有需要部署的节点,从PXE启动,会提示从DHCP服务器获取到IP;
节点的网络相关信息(主要:IP和对应的MAC地址)保存在/var/lib/dhcpd/dhcpd.leases;
(2) 系统定制
cobbler system add --name=node1 --mac=00:24:E8:64:24:59 --ip-address=192.168.10.161 --subnet=255.255.255.0 --gateway=192.168.10.5 --interface=eth0 --static=1 --if-gateway=192.168.10.5 --profile=centos6.5-control --name-servers-search=test.com --dns-name=node1.test.com --hostname=node1.test.com --netboot-enabled=true --name-servers=192.168.10.160
其中name和mac不能重复,mac是唯一指定到节点的凭证。--dns-name比较关键,cobbler会把 dns-name和ip写入DNS记录中,用于DNS解析;
(3) 重启所有节点,安装系统,并完成puppet注册(可在cobbler节点查看);
参考链接:
[1] http://zh.wikipedia.org/wiki/预启动执行环境
[2] 张子凡,OpenStack部署实践,人民邮电出版社,2014
[3] http://docs.fedoraproject.org/en-US/Fedora/17/html/Installation_Guide/s1-netboot-pxe-config.html
[4] http://www.cobblerd.org/manuals/2.6.0/
[5] http://fedoraproject.org/wiki/Anaconda/Kickstart