示例:Ubuntu 镜像


这个示例安装Ubuntu 14.04 (Trusty Tahr) 版本镜像。创建其他版本的Ubuntu镜像,注意下面安装过程的标记不同的地方。


 下载一个 Ubuntu 安装 ISO



由于我们的目标是制作一个最小化的可用基础镜像,本示例使用网络安装 ISO。Ubuntu 14.04 64位版本的网络安装 ISO 位于



 开始安装



使用在之前示例中讲解的 virt-manager 或者 virt-install 命令。如果你使用virt-install

假设你的虚拟机名称是 trusty ,当你使用 virsh

如果你使用 virt-manager



# qemu-img create -f qcow2 /tmp/trusty.qcow2 10G # virt-install --virt-type kvm --name trusty --ram 1024 \ --cdrom=/data/isos/trusty-64-mini.iso \ --disk /tmp/trusty.qcow2,format=qcow2 \ --network network=default \ --graphics vnc,listen=0.0.0.0 --noautoconsole \ --os-type=linux --os-variant=ubuntutrusty


 安装步骤



在安装初始启动菜单中,选择 Install





 主机名


安装程序要求填入主机名。默认的 (ubuntu) 即可。后面我们将安装 cloud-init 包,cloud-init 包将在将来使用镜像创建新虚拟机启动的时候设置主机名。


 选择镜像站点


选择默认的镜像站点即可。


 安装步骤


安装过程中,使用默认的选项即可,当提示输入用户名时,使用默认的 (ubuntu) 即可。


 磁盘分区


目前有几个分区选项。默认的安装程序使用 LVM 分区,将创建三个分区 (/boot/, swap),使用默认的即可。作为可选的,你也可以创建单个 ext4 分区,挂载 "/"。

如果你不太确定如何分区,我们推荐你使用安装程序默认的分区方案,因为目前也没有任何方案完全优于其他分区方案。


 自动更新


Ubuntu 安装程序询问你如何设置系统更新。这个选项依赖于你的使用环境,如果将来创建的虚拟机能链接到因特网,我们推荐 "Install security updates automatically"。


 软件选择:OpenSSH 服务


选择 "OpenSSH server" 以便在 OpenStack 中启动虚拟机时你能 SSH 登陆到虚拟机。



 安装 GRUB 引导程序


当提示安装 GRUB 引导程序到硬盘主启动记录时,选择 "Yes"。



关于配置Grub的详细信息,请参考 “确认镜像输出启动日志到控制台”一节.


 卸载 CD-ROM 并重启


剩下的步骤中,选择默认的值即可。当安装完成时,你会看到提示移除 CD-ROM。




注意

在 Ubuntu 14.04中有一个已知bug;当你选择 "Continue", 虚拟机将关机,即使它显示它将重启。


使用 virsh 弹出光驱时,libvirt 要求你挂一个空磁盘在光驱相同的位置。在之前盘符是 hdc 。你可以使用 virsh dumpxml vm-image


# virsh dumpxml trusty<domain type='kvm'> <name>trusty</name>... <disk type='block' device='cdrom'> <driver name='qemu' type='raw'/> <target dev='hdc' bus='ide'/> <readonly/> <address type='drive' controller='0' bus='1' target='0' unit='0'/> </disk> ... </domain>


在宿主机上以 root 用户运行以下命令暂停虚拟机,弹出磁盘然后恢复虚拟机。如果你使用 virt-manager ,你需要在图形界面完成这个过程。


# virsh start trusty --paused# virsh attach-disk --type cdrom --mode readonly trusty "" hdc# virsh resume trusty



注意

Installation complete


 登陆到新创建的镜像内


当你安装后首次启动时,虚拟机将会询问你认证工具,你只需要选择 'Exit'。然后使用你设置的root密码以root用户登录。


 安装 cloud-init


cloud-init

安装 cloud-init


# apt-get install cloud-init


在创建 Ubuntu 镜像时,cloud-init

运行 dpkg-reconfigure 命令设置镜像 cloud-init 软件包使用的元数据源。当屏幕出现提示时,选择 EC2 数据源。


# dpkg-reconfigure cloud-init


不同的发行版保存的账户不同,在基于 Ubuntu 的虚拟机,账户是 ubuntu ,基于 Fedora 的虚拟机,账户是 ec2-user 。

你可以编辑 /etc/cloud/cloud.cfg 文件添加一行修改 cloud-init 使用的账户名,例如,添加以下这行到配置文件,来配置 cloud-init 存放公钥到admin账户。


user: admin


 关闭虚拟机


在虚拟机内,以root用户运行:


# /sbin/shutdown -h now


 清理(删除 MAC 地址相关信息)


操作系统会在/etc/sysconfig/network-scripts/ifcfg-eth0 和 /etc/udev/rules.d/70-persistent-net.rules 这类文件记录下网卡MAC地址,但是,虚拟机的网卡MAC地址在每次虚拟机创建的时候都会不同,因此这些信息必须从配置文件删除掉。

目前有 virt-sysprep


# virt-sysprep -d trusty


 删除 libvirt 虚拟机域


现在你可以上传虚拟机镜像到镜像服务了,所以不再需要 libvirt 来管理虚拟机镜像,使用 virsh undefine vm-image


# virsh undefine trusty


 镜像准备完成


前面你使用 qemu-img create 命令创建的镜像已经准备好可以上传了,你可以上传 /tmp/trusty.qcow2 文件到 Openstack 镜像服务。