如何自定义云镜像
很好奇云计算的镜像是怎么打出来的,而且只有100多M,有时间需要新开一个本地的开发虚拟机,不想下载iso重装系统,那么,去官网下载一个镜像吧
下面,我们敲一系列命令,完成自定义镜像的制作:
# 挂载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.