红联Linux门户
Linux帮助

OpenStack制作Ubuntu镜像

发布时间:2015-05-01 10:39:47来源:linux网站作者:nibaojin

1. 下载对应需求的Ubuntu镜像


2. 安装kvm-pxe(此步骤因为在搭建openstack环境应该已经下载,故应该可以省略)

apt-get install kvm-pxe

Note:用于解决出现:failed to find romfile “pxe-rtf8138.bin”错误


3. 创建一个大小10G的“硬盘”(raw格式)

kvm-img create -f raw ubuntu.img 10G


4. 使用刚才下载的ubuntu“安装盘”和刚创建的“硬盘”引导启动系统,为了简单起见,本文使用kvm虚拟技术,避开xen繁琐的配置。-vnc参数代表撕开vnc访问,以便可以使用其他机器远程登陆到这个引导界面进行安装操作:

kvm -m 1024 -cdrom ubuntu-11.10-server-amd64.iso -drive file=ubuntu.img -boot d -nographic -vnc :5

Note:

1. 本命令是前台进程,会占用一个终端,后续操作需要打开一个新的终端

2. 启动kvm命令可以在server版本中运行,但是安装系统的操作需要桌面图形支持

3. 如果提示端口3被占用,访问拒绝,那么继续向后调整到端口4,5直到不提示错误

状态是上面一行命令保持不动,此时继续执行下面操作


5. 用vncviewer登陆引导界面后按照屏幕的提示完成ubuntu的安装工作(安装过程和自己电脑一样,安装过程省略)。需要注意的是在分区阶段把10GB硬盘全部分成一个ext4分分区,并挂在到/下,不要创建多个分区也不要创建swap分区

vncviewer 192.168.1.198:5905

Note:

1. 192.168.1.198是本机IP

2. 安装完成后退出,必要时kill掉kvm进程

3. 5905的数字3对应之前的vnc:5,如果修改,则二者应该保持一致。


6. 重启虚拟机镜像

kvm -m 1024 -drive file=ubuntu.img -boot c -net nic -net user -nographic -vnc :5

主意:2048代表虚拟机内存大小,如果真机内存较大的情况下,建议将该值调整到1024或者2048,这样可以保证较为流畅的操作


7. 安装相关模板服务制作

vncviewer 192.168.1.198:5905进入模板系统

(因为vnc内对ctrl+alt+t组合键不能识别,故不能通过快捷键在虚拟机内直接调用终端,所以需要手动点击左上角ubuntu图标,在搜索一栏输入终端,并启动终端),然后执行如下三行

apt-get update

apt-get upgrade


8. 调整Ubuntu镜像

因为Openstack只接受ext4文件系统格式的镜像,所以需要把上面创建的raw镜像转换成ext4镜像。下面的步骤用来找出镜像文件里面的分区起点是从哪里开始的:

losetup -f ubuntu.img

losetup -a

会提示如下信息

/dev/loop0: [fb00]:24117291 (/home/localadmin/ubuntu.img)

fdisk -l /dev/loop0

提示如下信息

Disk /dev/loop0: 10.7 GB, 10737418240 bytes

255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x000502e6

Device Boot Start End Blocks Id System

/dev/loop0p1 * 2048 20969471 10483712 83 Linux

上面最后一行显示分区是从扇区(sector)2048开始的,每个扇区是512个字节,所以是从2048 x 512 = 1048576个字节开始的。记住这个1048576,下面会用到。

卸载 loop 后重新从1048576字节开始挂载:

losetup -d /dev/loop0

losetup -f -o 1048576 ubuntu.img

losetup -a

提示信息:/dev/loop0: [fb00]:24117291 (/home/localadmin/ubuntu.img), offset 1048576

把这整个分区拷贝到一个新文件就是一个我们要的 ext4文件系统镜像:

dd if=/dev/loop0 of=ubuntutemplate.img

会提示:

20969472+0 records in

20969472+0 records out

10736369664 bytes (11 GB) copied, 107.455 s, 99.9 MB/s

用完 loop 后记得卸载:

losetup -d /dev/loop0

挂载(mount)刚创建的 ext4文件系统镜像,并修改分区加载表(/etc/fstab),注释或删除以前的,加上 UUID=uec-rootfs一行:

mount -o loop ubuntutemplate.img /mnt

vi /mnt/etc/fstab

注释掉原有行

#UUID=1dc3a59e-faab-41ee-b232-3300163676bf / ext4 errors=remount-ro 0 1

然后添加

UUID=uec-rootfs / ext4 defaults 0 0

保存退出

把内核(vmlinuz)和内存盘(initrd)文件拷贝出来以便后面和虚拟机镜像一起发布到OpenStack云里。这个最好是手动进入/mnt/boot目录里查看initrd和vmlinuz这两个文件,因为不同版本ubuntu对应最后的标示不一样,如server版本ubuntu,则两个文件名分别都已server结尾,如果是desktop版本的,则会以generic结尾,笔者因为使用desktop版本制作,情况属于后者,至于拷贝到哪里,要看你img文件在哪里,笔者是直接放在了/root/目录下

使用完虚拟机镜像后记得卸载(unmount):

cp /mnt/boot/initrd.img-3.2.0-29-generic /root/

cp /mnt/boot/vmlinuz-3.2.0-29-generic/root/

umount /mnt

把刚才的虚拟机镜像 ubuntutemplate.img的文件系统标志改成 ‘uec-rootfs’:

tune2fs -L uec-rootfs ubuntutemplate.img


9. 发布 Ubuntu 镜像

发布镜像需要使用上述三个文件initrd.img-3.2.0-29-generic、vmlinuz-3.2.0-29-generic和ubuntutemplate.img

glance add name="ubuntu-ramdisk" is_public=true container_format=ari disk_format=ari < initrd.img-3.0.0-12-server

返回一个ramdisk_id(一大长串那个):

glance add name="ubuntu-kernel" is_public=true container_format=aki disk_format=aki < vmlinuz-3.0.0-12-server

返回一个kernel_id:(一大长串那个)

glance add name="ubuntufinal" is_public=true container_format=ami disk_format=ami kernel_id=图2的idramdisk_id=图1的id < ubuntutemplate.img

三个文件分别上传完毕之后,打开dashboard利用ubuntutemplate启动实例即可

建议给实例选择机器配置时选择多核高内存的选项,以保证实例的流畅运行。


相关文章:
Ubuntu 12.04(“Precise Pangolin”)安装OpenStack Essex:http://www.linuxdiyf.com/linux/3883.html

VMware-Ubuntu中安装Openstack:http://www.linuxdiyf.com/linux/1052.html

CentOS下一键安装OpenStack:http://www.linuxdiyf.com/linux/11447.html

制作OpenStack用的CentOS 6.5镜像:http://www.linuxdiyf.com/linux/10408.html