Jump to: navigation, search

Difference between revisions of "Main Page/cobbler"

(Created page with "关键技术点: 1、制作livecd 介绍:livecd是redhat体系提供的一种镜像格式,制作的iso可以直接启动,当然也可以安装到硬盘上。现在cent...")
 
 
(35 intermediate revisions by the same user not shown)
Line 1: Line 1:
关键技术点:
+
其他功能
1、制作livecd
+
1、使用远程桌面软件直接连接虚拟机
介绍:livecd是redhat体系提供的一种镜像格式,制作的iso可以直接启动,当然也可以安装到硬盘上。现在centos、fedora每个版本发布的repo都包含了已编译出的livecd iso。例如CentOS-6.4-x86_64-LiveCD.iso。也可以到其官方网站下载
+
(1)设置虚拟机远程连接协议
步骤:
+
模板页面->选择模板编辑->图像下拉框选择连接方式,vnc协议或者spice协议
(1)执行以下命令,安装redhat openstack rdo的yum文件。注意根据需要安装的openstack版本选择合适的rpm包
+
(2)登录服务器,使用virsh dumpxml 虚拟机id查看远程连接的ip地址和端口
yum install -y http://rdo.fedorapeople.org/openstack/openstack-grizzly/rdo-release-grizzly-2.noarch.rpm
+
(3)使用远程桌面软件,输入虚拟机的远程协议ip地址和端口,即可远程连接虚拟机
(2)制作ks文件:可以在互联网上找一个标准的centos的ks文件作为模板,然后进行修改,将openstack的rpm包信息添加到ks文件中,则出iso时会自动安装openstack的rpm包
+
远程桌面软件地址请参见xxx
(3)安装livecd-tools rpm包
 
(4)执行以下命令出iso
 
livecd-creator --config=centos-livecd-minimal.ks --fslabel=openstack-LiveCD -d --shell
 
困难:
 
实际操作过程中,碰到的最大困难是一开始找了个裁剪了的centos ks文件,结果制作的包含openstack的iso,安装后因为缺一些rpm包,出现各种莫名奇妙问题。最后解决办法是先制作一个非裁剪的centos os,然后在openstack可以正常运行前提下,再做系统裁剪瘦身
 
相关参考:
 
https://fedoraproject.org/wiki/How_to_create_and_use_a_Live_CD/zh-cn
 
http://www.centos.org/docs/5/html/Installation_Guide-en-US/s1-kickstart2-file.html
 
http://jgershater.ulitzer.com/node/2701636?page=0,1
 
  
2、写作脚本,将livcd安装到OS中,流程及所用到系统命令如下:
 
# 找到livecd中文件系统所挂载的设备,例如ext3fs.img挂载到了/dev/loop3上
 
losetup -a |grep ext3fs.img
 
# 将img拷贝到目的磁盘分区中,例如/dev/vda1
 
cat /dev/loop3 /dev/vda1
 
# 安装bootloader,用的是extlinux,这样下次就可以从硬盘启动了
 
cat /usr/share/syslinux/mbr.bin > dev/vda #写入mbr
 
blkid -o value -s UUID /dev/vda1 #生成分区的uuid
 
mkdir /mnt/tmp #生成临时目录
 
mount /dev/vda1 /mnt/tmp #将根分区mount到临时目录
 
extlinux -i /mnt/tmp/boot/ #使用extlinux工具制作启动目录
 
extlinux --clear-once /mnt/tmp/boot/
 
cp -rf /dev/.initramfs/live/isolinux/* /mnt/tmp/boot/
 
mv /mnt/tmp/boot/isolinux.cfg /mnt/tmp/boot/extlinux.conf
 
sed -i 's/live:CDLABEL=.* /UUID=uuid /' /mnt/tmp/boot/extlinux.conf #uuid是上面生成的
 
sed -i 's/ ro / /' /mnt/tmp/boot/extlinux.conf
 
sed -i 's/ rd.live.image / /' /mnt/tmp/boot/extlinux.conf
 
umount /dev/vda1
 
到此,重启服务器就可以从硬盘启动了
 
相关参考:
 
http://www.syslinux.org/wiki/index.php/EXTLINUX
 
http://molinux.blog.51cto.com/2536040/548247
 
  
3、配置pxe服务器,通过pxe方式批量安装openstack节点
+
D:\git\kimchi-openstack\kimchi-openstack\src\kimchi\osinfo.py:43
介绍:在网上看到有许多相关的集成部署工具,例如xcat、cobbler,其支持的功能大同小异。本次考虑使用cobbler。
+
'modern_update': dict(common_spec, disk_bus='scsi',
步骤:
+
                                        nic_model='virtio',
1、cobbler网上资料较多,参考网上资料即可完成cobbler的基本搭建
+
                              sound_model='ich6')
2、将livecd iso部署到cobbler中作为repo
+
 
注:livce本身是不支持pxe加载的,为支持此功能,需先使用livecd-iso-to-pxeboot工具,将iso生成vmlinuz和initrd0.img文件,然后将这两个文件部署到cobbler中。
+
if distro in modern_version_bases[arch]:
核心思想是将livced中的内存文件系统制作成ramdisk文件,就可以通过pxe流程引导启动到内存文件系统了
+
        if LooseVersion(version) >= LooseVersion(
相关命令如下:
+
                modern_version_bases[arch][distro]):
iso="openstack"
+
            if arch == 'x86':
livecd-iso-to-pxeboot $iso.iso
+
                params.update(template_specs[arch]['modern_update'])
cobbler distro add --name=$iso --kernel=/var/www/html/iso/$iso/tftpboot/vmlinuz0 --initrd=/var/www/html/iso/$iso/tftpboot/initrd0.img
+
            else:
cobbler distro edit --name=$iso --kopts='root=live:/'$iso.iso' rootfstype=auto rootflags=ro !text !lang !ksdevice installserverip='$serverIp
+
                params.update(template_specs[arch]['modern'])
cobbler profile add --name=$iso --distro=$iso
+
        else:
到此,就可以通过pxe加载openstack的livced iso中。加载完毕后,可以手工执行以上介绍“将livcd安装到OS中”脚本将系统安装到硬盘中。也可以在制作iso时写入系统自启动命令自动执行安装脚本
+
            params.update(template_specs[arch]['old'])
3、cobbler默认pxe引导方式是tftp,tftp是不可靠协议,而现在制作的ramdisk文件有200多MB,如果并发安装多个主机,很可能出现引导慢或者断连的情况。在网上遍历一把,发现可以用ipxe来替代pxe。ipxe的核心理念是用http协议代替tftp协议来下载vmlinuz和initrd0.img
+
 
这里遇到很多问题,记录如下:
+
                                'window': '0'},
(1)cobbler是否支持gpxe,经网上搜索,collber已经支持gpxe,对应配置项如下:
 
    sed -i "s/^enable_gpxe:.*/enable_gpxe: 1/g" /etc/cobbler/settings
 
(1)pxe安装虚拟机正常,但是安装服务器则一直进入不到http下载vmlinuz和initrd0.img的流程。
 
    结果:定位发现服务器的网卡不支持gpxe
 
(2)有的网卡能支持gpxe、有的不支持,怎样的配置能够自动判断支持情况并选择用gpxe还是pxe呢
 
    结果:可以在cat /etc/dhcp/dhcpd.conf 写if...else进行逻辑判断,如果是ipxe/gpxe则返回http形式的vmlinuz和initrd0.img路径,否则返回undionly.kpxe这个pxe引导文件
 
    例子如下:
 
host generic_735135b1-d72f-47f2-9f1d-13c63e75dc9c {
 
hardware ethernet 00:16:6D:AD:86:33;
 
if exists user-class and option user-class = "iPXE" {
 
    filename "http://186.100.8.248/cblr/svc/op/gpxe/system/735135b1-d72f-47f2-9f1d-13c63e75dc9c";
 
} else if exists user-class and option user-class = "gPXE" {
 
    filename "http://186.100.8.248/cblr/svc/op/gpxe/system/735135b1-d72f-47f2-9f1d-13c63e75dc9c";
 
} else {
 
    filename "undionly.kpxe";
 
}
 
next-server    186.100.8.248;
 
}
 
如果是ipxe、gxe则调用collber的脚本,产生http下载vmlinuz和initrd0.img的配置信息,例子如下:
 
#!gpxe
 
kernel http://186.100.8.248:80/cobbler/images/allinone/vmlinuz0
 
imgargs vmlinuz0  rootflags=ro root=live:/allinone.iso installserverip=186.100.8.248 rootfstype=auto kssendmac  ks=http://186.100.8.248/cblr/svc/op/ks/system/735135b1-d72f-47f2-9f1d-13c63e75dc9c
 
initrd http://186.100.8.248:80/cobbler/images/allinone/initrd0.img
 
boot
 
相关参考:
 
http://www.ibm.com/developerworks/cn/linux/l-cobbler/
 

Latest revision as of 11:18, 21 October 2014

其他功能 1、使用远程桌面软件直接连接虚拟机 (1)设置虚拟机远程连接协议 模板页面->选择模板编辑->图像下拉框选择连接方式,vnc协议或者spice协议 (2)登录服务器,使用virsh dumpxml 虚拟机id查看远程连接的ip地址和端口 (3)使用远程桌面软件,输入虚拟机的远程协议ip地址和端口,即可远程连接虚拟机 远程桌面软件地址请参见xxx


D:\git\kimchi-openstack\kimchi-openstack\src\kimchi\osinfo.py:43 'modern_update': dict(common_spec, disk_bus='scsi',

                                        nic_model='virtio',
                             sound_model='ich6')

if distro in modern_version_bases[arch]:

       if LooseVersion(version) >= LooseVersion(
               modern_version_bases[arch][distro]):
           if arch == 'x86':
               params.update(template_specs[arch]['modern_update'])
           else:
               params.update(template_specs[arch]['modern'])
       else:
           params.update(template_specs[arch]['old'])
                               'window': '0'},