制作镜像需要在桌面版本的系统中进行,本文采用的系统是Ubuntu 11.10 桌面版
1. 下载Ubuntu镜像
wget http://mirror.lupaworld.com/ubuntu-releases//oneiric/ubuntu-11.10-server-amd64.iso
2. 安装kvm-pxe
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 512 -cdrom ubuntu-11.10-server-amd64.iso -drive file=ubuntu.img-boot d -nographic -vnc :0
Note:
1. 本命令是前台进程,会占用一个终端,后续操作需要打开一个新的终端
2. 启动kvm命令可以在server版本中运行,但是安装系统的操作需要桌面图形支持
5. 用vncviewer登陆引导界面后按照屏幕的提示完成ubuntu的安装工作(安装过程和自己电脑一样,安装过程省略)。需要注意的是在分区阶段把10GB硬盘全部分成一个ext4 root分区,不要创建多个分区也不要创建swap分区
vncviewer 192.168.1.187:5900
Note:
1. 192.168.1.187是kvm启动引导系统的机器IP
2. 安装完成后退出,必要时kill掉kvm进程
6. 重启虚拟机镜像
kvm -m 512 -drivefile=ubuntu.img,if=scsi,index=0,boot=on -boot c -net nic -net user -nographic-vnc :0
7. 安装相关模板服务制作
vncviewer 192.168.1.187:5900
apt-get update
apt-get upgrade
apt-get install -y openssh-server cloud-init
70-persistent-net.rules 会自动添加其他的网络接口,需要删除这个文件避免自动添加除了 eth0 以外的接口。删除后系统基本就准备好了,关闭虚拟机:
rm -rf /etc/udev/rules.d/70-persistent-net.rules
shutdown -h now
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 云里。使用完虚拟机镜像后记得卸载(unmount):
cp /mnt/boot/initrd.img-3.0.0-12-server /home/localadmin/
cp /mnt/boot/vmlinuz-3.0.0-12-server /home/localadmin/
umount /mnt
把刚才的虚拟机镜像ubuntutemplate.img 的文件系统标志改成 ‘uec-rootfs’:
tune2fs -L uec-rootfs ubuntutemplate.img
9. 发布 Ubuntu 镜像
发布镜像需要使用上述三个文件initrd.img-3.0.0-12-server、vmlinuz-3.0.0-12-server和ubuntutemplate.img
glance add -A openstack -H 192.168.1.133 name="ubuntu-ramdisk"is_public=true container_format=ari disk_format=ari <initrd.img-3.0.0-12-server
返回一个ramdisk_id:如1
glance add -A openstack -H 192.168.1.133 name="ubuntu-kernel"is_public=true container_format=aki disk_format=aki <vmlinuz-3.0.0-12-server
返回一个kernel_id:如2
glance add -A openstack -H 192.168.1.133 name="ubuntufinal"is_public=true container_format=ami disk_format=ami kernel_id=2 ramdisk_id=1< ubuntutemplate.img
制作Red Hat Enterprise Linux 6.0 x64镜像
1. 创建一个大小10G的“硬盘”(raw格式)
kvm-img create -f raw rhel6.img 10G
2. 使用rhel-server-6.0“安装盘”和刚创建的“硬盘”引导启动系统
kvm -m 2048 -boot d -cdrom rhel-server-6.0-x86_64-dvd.iso -drivefile=rhel6.img,index=0,if=virtio,boot=on -net nic,model=virtio -usbdevicetablet -net user -nographic -vnc :0
Note:
1. 内存过小不能成功启动自定义分区功能
2. VNC的模式会发现总是有两个鼠标,而且移动很慢,这个时候只要我们在qemu启动的时候加上-usbdevice tablet就可以解决VNC下的问题了
3. 安装相关模板服务制作
系统安装完成后请选择”reboot”重启系统进入
1
2
3
1 关闭网卡重命名
echo ''>/lib/udev/rules.d/75-persistent-net-generator.rules
2 开启DHCP功能
rhel6默认是不配置网卡的,所以我们必须手工启动本功能
vi /etc/sysconfig/network-scripts/ifcfg-eth0
默认的网络配置是
DEVICE="eth0"
HWADDR=specifc macaddress
NM_CONTROLLED="yes"
ONBOOT="no"
修改为:
DEVICE="eth0"
#请注释掉HWADDR,在KVM中不一定是这个MAC地址
#HWADDR=specifc mac address
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO="dhcp"
4. 调整Red Hat Enterprise Linux镜像
因为Openstack只接受ext4文件系统格式的镜像,所以需要把上面创建的raw镜像转换成ext4镜像。下面的步骤用来找出镜像文件里面的分区起点是从哪里开始的:
losetup -f rhel6.img
losetup –a
/dev/loop0: [fb00]:24117291 (/home/localadmin/ rhel6.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 rhel6.img
losetup –a
/dev/loop0: [fb00]:24117291 (/home/localadmin/rhel6.img), offset 1048576
把这整个分区拷贝到一个新文件就是一个我们要的 ext4 文件系统镜像:
dd if=/dev/loop0 of= rhel6template.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 rhel6template.img /mnt
vi /mnt/etc/fstab
UUID=uec-rootfs / ext4 defaults 0 0
#UUID=1dc3a59e-faab-41ee-b232-3300163676bf / ext4 defaults 0 1
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
把内核(vmlinuz)和内存盘(initramfs)文件拷贝出来以便后面和虚拟机镜像一起发布到OpenStack 云里。使用完虚拟机镜像后记得卸载(unmount):
cp /mnt/boot/vmlinuz-2.6.32-71.el6.x86_64 /home/localadmin/
cp /mnt/boot/initramfs-2.6.32-71.el6.x86_64.img /home/localadmin/
umount /mnt
把刚才的虚拟机镜像 rhel6template.img的文件系统标志改成 ‘uec-rootfs’:
tune2fs -L uec-rootfs rhel6template.img
5. 发布Red Hat Enterprise Linux镜像
发布镜像需要使用上述三个文件initramfs-2.6.32-71.el6.x86_64.img、vmlinuz-2.6.32-71.el6.x86_64和rhel6template.img
glance add -A openstack -H 192.168.1.133 name="rhel6-ramdisk"is_public=true container_format=ari disk_format=ari < initramfs-2.6.32-71.el6.x86_64.img
返回一个ramdisk_id,如:5
glance add -A openstack -H 192.168.1.133 name="rhel6-kernel"is_public=true container_format=aki disk_format=aki <vmlinuz-2.6.32-71.el6.x86_64
返回一个kernel _id,如:6
glance add -A openstack -H 192.168.1.133 name="rhel6final"is_public=true container_format=ami disk_format=ami ramdisk_id=5 kernel_id=6< rhel6x86_64template.img
制作Windows 2003 Server镜像
1. Windows 2003 Server镜像下载
自行下载或者制作启动ISO镜像文件并准备正版CD-KEY
2. 创建一个大小10G的“硬盘”(raw格式)
kvm-img create -f raw win2003.img 10G
3. 下载virtio驱动
wget http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/virtio-win-0.1-15.iso
wget http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/virtio-win-1.1.16.vfd
4. 使用刚才下载的windows 2003 server“安装盘”和刚创建的“硬盘”引导启动系统,映射驱动vfd到软盘A, 开启bios启动选择菜单,启动时按住F12 ,进入光盘安装界面
kvm -m 1024 -drive file=win2003.img,cache=writeback,if=virtio,boot=on -fdavirtio-win-1.1.16.vfd -cdromWIN_2003_SP2.iso -net nic -net user -boot order=d,menu=on -usbdevice tablet-nographic -vnc :0
Note:
1. 请迅速打开一个vncviewer终端,否则会自动进入硬盘启动模式,如果不慎进入,请kill掉kvm进程,再重启kvm尝试迅速按F12
2. 安装后会自动重启,请开启远程桌面访问
5. 重启虚拟机镜像,加载virtio驱动
kvm -m 1024 -drive file=win2003.img,cache=writeback,if=virtio,boot=on-cdrom virtio-win-0.1-15.iso -net nic,model=virtio -net user -boot order=c-usbdevice tablet -nographic -vnc :0
Note:
1. 本步骤出现屏幕较慢,请耐心等待
2. 启动后进入系统需要按住Alt+Ctrl+Del,Del建议使用数字小键盘上的Del
6. 再用vnc访问,应该会提示自动安装virtio的网卡驱动
7. 修复在虚拟机启动时的错误
1
2
3
4
5
6
7
1 应用程序-特定 权限设置未将 COM 服务器应用程序的 本地 激活 权限授予用户 NT AUTHORITY\NETWORK SERVICE
开始→控制面板→管理工具→组件服务
打开 组件服务 树目录 →计算机→我的电脑→DCOM配置
右边的面板里 找到 netman 右键→属性→安全→ 启动和激活权限 →自定义→编辑 添加 network service 用户,把本地启动和本地激活勾上就可以了
2 Parallel port driver 服务启动失败
只需要在注册表HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Parport中,将“start=3”改为“start=0”
3 启动后出现第一个页面,请选择完成,经多次测试否则会出现网卡不启动的现象
8. 发布镜像
glance-H 192.168.1.133 -A openstack addname="win2003" is_public=truedisk_format=raw < win2003.img