为保证运行该镜像的云服务器DC2能成功完成初始化配置,建议您在制作Linux类型自定义镜像时,在源服务器上安装cloud-init以及virtio。本文介绍安装社区版cloud-init的操作步骤。
安装cloud-init
在云环境的虚拟机的创建过程中,需要cloud-init工具对虚拟机进行初始化配置,因此要使用自定义镜像,一定要确保原系统中已安装cloud-init, 如未安装,请执行以下步骤。
使用Python3安装cloud-init,本文介绍操作系统为Centos7.6,使用python3.7。
1.安装依赖包
yum install zlib-devel bzip2-devel libffi-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make -y |
2.下载Python源码包
|
3.解压并安装
|
4.创建软链
mv /usr/bin/python /usr/bin/python.bak ln -s /usr/local/bin/python3 /usr/bin/python ln -s /usr/local/bin/pip3 /usr/bin/pip |
5.确认python为python3.7
|
6.Yum依赖python2,修改yum依赖
|
7.下载cloud-init源码包
wget -P /usr/local https: //launchpad.net/cloud-init/trunk/17.1/+download/cloud-init-17.1.tar.gz |
8.解压并安装
|
注:根据不同操作系统,安装过程中可能会提示缺少相关模块或库文件,使用pip或yum安装即可。
10.安装 cloud-utils 组件
yum install cloud-utils-growpart –y |
11.安装cloud-init
python setup.py build python setup.py install --init-system systemd |
12.设置cloud-init命令软链
ln -s /usr/local/bin/cloud-init /usr/bin/cloud-init |
13.将 /lib/systemd/system/cloud-init-local.service 文件替换为如下内容:
|
14.将 /lib/systemd/system/cloud-init.service 文件替换为以下内容:
|
15.设置 cloud-init 服务开机自启动
systemctl enable cloud-init-local.service systemctl start cloud-init-local.service systemctl enable cloud-init.service systemctl start cloud-init.service systemctl enable cloud-config.service systemctl start cloud-config.service systemctl enable cloud- final .service systemctl start cloud- final .service |
注:执行完此步骤后请确认密码登录验证方式是否开启。
vim /etc/ssh/sshd_config |
安装virtio
1.检查服务器内核是否以后virtio模块:
grep -i virtio /boot/config-$(uname -r) |
(1)如果没有VIRTIO_BLK及VIRTIO_NET的信息说明该操作系统没有virtio内核模块,需要编译安装virtio驱动。如果看到以下输出:
(2)如果CONFIG_VIRTIO_BLK 参数和CONFIG_VIRTIO_NET 参数取值为 y,说明virtio已经被编译到内核中,并不是以模块形式存在,跳过后续步骤,virtio安装可以结束。
(3)如果CONFIG_VIRTIO_BLKm 参数和CONFIG_VIRTIO_NET 参数取值为 m,执行以下步骤。
2.确认virtio驱动是否包含在内存文件系统initramfs或者initrd中,根据不通操作系统执行以下命令:
(1)CentOS 6/CentOS 7/RedHat 6/RedHat 7 操作系统:
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio |
(2)RedHat 5/CentOS 5 操作系统:
|
(3)Debian/Ubuntu 操作系统:
lsinitramfs /boot/initrd.img-$(uname -r) | grep virtio |
如果输出如下图:
说明initramfs已经包含了virtio_blk驱动,以及其所依赖的virtio.ko、virtio_pci.ko和virtio_ring.ko,如果输出为空,则需要根据不同操作系统,执行以下步骤修复内存文件系统:
(1)CentOS 6/CentOS 7/RedHat 6/RedHat 7 操作系统:
cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak mkinitrd -f --with=virtio_blk --with=virtio_pci /boot/initramfs-$(uname -r).img\ $(uname -r) |
(2)RedHat 5/CentOS 5 操作系统:
cp /boot/initrd-$(uname -r).img /boot/initrd-$(uname -r).img.bak mkinitrd -f --with=virtio_blk --with=virtio_pci /boot/initrd-$(uname -r).img $(uname -r) |
(3) Debian/Ubuntu 操作系统
|
至此,cloud-init和virtio安装完毕,可以将自定义镜像导入滴滴云。