如何自定义云镜像

云镜像制作方法

Posted by devin on June 26, 2018

如何自定义云镜像

很好奇云计算的镜像是怎么打出来的,而且只有100多M,有时间需要新开一个本地的开发虚拟机,不想下载iso重装系统,那么,去官网下载一个镜像

ubuntu-cloud-img

下面,我们敲一系列命令,完成自定义镜像的制作:

# 挂载qcow2镜像
qemu-nbd -c /dev/nbd0 ubuntu18_04_amd64.qcow2
mkdir -p /mnt/ubuntu1804/
mount /dev/nbd0p1 /mnt/ubuntu1804/
# chroot到镜像根目录
chroot /mnt/ubuntu1804/
# 更改root密码
passwd root
123456
123456
# 删除cloud-init软件包
apt remove cloud-init
# 更改grub conf, 去掉console=ttyS0这个选项
# console=ttyS0
# umount

umount /mnt/ubuntu1804/
qemu-nbd -d /dev/nbd0
# qcow2转换为vmdk格式
qemu-img covert -f qcow2 -O vmdk ubuntu18_04_amd64.qcow2 	ubuntu18_04_amd64.vmdk

下面,咱们逐个解释上述脚本的内容:

首先,下载一个qcow2的镜像

准备qemu-img工具,怎么安装qemu-img请自行Google。

挂载qcow2镜像,需要检查内核是否支持nbd(centos 6.5内核貌似没有打开nbd)

[root@jay-linux kvm_demo]# grep NBD /boot/config-*
CONFIG_BLK_DEV_NBD=m
[root@jay-linux kvm_demo]# 
[root@jay-linux kvm_demo]# modprobe nbd max_part=16
[root@jay-linux kvm_demo]# lsmod | grep nbd
nbd                     7593  0

qemu-nbd工具是:QEMU Disk Network Block Device Server,可以用”qemu-nbd –help”命令查看其帮助信息。

确认内核支持nbd后,就可以挂载qcow2镜像了

qemu-nbd -c /dev/nbd0 ubuntu18_04_amd64.qcow2

后面,像普通block设备那样使用刚才映射好的网络块设备的分区即可。

[root@jay-linux mnt]# mkdir -p /mnt/ubuntu1804/
[root@jay-linux mnt]# mount /dev/nbd0p1 /mnt/ubuntu1804/ 
[root@jay-linux mnt]# cd /mnt/ubuntu1804/ 
[root@jay-linux mnt]# ls
bin   cgroup  etc   lib    lost+found  misc  net  proc  sbin     srv  tmp  var
boot  dev     home  lib64  media       mnt   opt  root  selinux  sys  usr

接下来,chroot到镜像目录下,就跟操作本地OS一样随便操作了

由于云镜像默认安装了cloud-init服务,启动的时候,会请求169.254.169.254地址去拉取metadata信息,至于为什么会是这个地址,请参考这篇文章,当然,我们不需要这个地址,直接卸载cloud-init吧

One more thing,请修改/boot/grub/grub.cfg,默认云镜像会有一个console=ttyS0选项,这个选项可能会导致虚机无法启动,例如使用vmware、vbox虚拟机启动时,删掉就可以了。

对了,别忘了修改root密码,默认密码我也不知道。。

enjoy it.

参考文档