更新时间:2023-05-05 GMT+08:00

安装Cloud-Init FAQ

为了保证使用私有镜像创建的新云服务器可以自定义配置(例如修改云服务器密码),请在创建私有镜像前安装Cloud-Init工具。

安装Cloud-Init相关操作请参考:安装Cloud-Init工具

配置Cloud-Init相关操作请参考:配置Cloud-Init工具

本节列举了安装Cloud-Init的常见问题及解决方法。

Ubuntu 16.04/CentOS 7:Cloud-Init设置自启动失败

  • 问题描述:

    安装Cloud-Init后,执行以下命令设置Cloud-Init为开机自启动时,提示失败:

    systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

    回显信息如下所示:

    图1 设置Cloud-Init自启动失败
  • 解决方法:
    1. 执行以下命令回退配置

      systemctl unmask cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

    2. 执行以下命令,重新设置Cloud-Init为开机自启动

      systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

    3. 执行以下命令,检查Cloud-Init服务状态

      systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

      回显信息如下所示,提示failed且所有服务的状态都是inactive。

      图2 检查Cloud-Init服务状态
      图3 检查Cloud-Init服务状态

      原因是系统查询Cloud-Init的地址指向/usr/bin/,但是实际安装路径指定的是/usr/local/bin,因此出现了上述错误。

    4. 执行以下命令,将cloud-init复制至usr/bin目录下。

      cp /usr/local/cloud-init /usr/bin/

    5. 执行以下命令,重启Cloud-Init。

      systemctl restart cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

      图4 重启Cloud-Init
    6. 执行以下命令,检查Cloud-Init服务状态。

      systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

Ubuntu 14.04:未安装chkconfig和systemctl

  • 问题描述:

    未安装chkconfig

  • 解决方法:

    执行以下命令安装chkconfig:

    apt-get update

    apt-get install sysv-rc-conf

    cp /usr/sbin/sysv-rc-conf /usr/sbin/chkconfig

    安装完成后,执行以下命令查看版本号。

    cloud-init -v

    如果回显信息如下所示:

    -bash:/usr/bin/cloud-init:not found this command

    解决方法:执行以下命令将cloud-init复制至usr/bin目录下。

    cp /usr/local/bin/cloud-init /usr/bin/

Debian 9.5:查看版本号失败和Cloud-Init设置开启自启动失败

  1. Cloud-Init安装完成后,执行以下命令查看版本号。

    cloud-init -v

    回显信息如下所示:

    -bash:/usr/bin/cloud-init:not found this command

    解决方法:执行命令cp /usr/local/bin/cloud-init /usr/bin/,将cloud-init复制至usr/bin目录下。

  2. 执行命令cloud-init init --local

    回显信息如下所示:

    图5 设置Cloud-Init自启动回显信息

    原因分析:未安装gcc导致无法编译。

    解决方法:

    执行以下命令安装gcc后重新安装Cloud-Init。

    yum -y install gcc

  3. 执行以下命令设置Cloud-Init为开机自启动时提示失败:

    systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

    回显信息提示如下所示:

    图6 设置Cloud-Init自启动提示失败

    解决方法:

    1. 执行以下命令回退配置

      systemctl unmask cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

    2. 执行以下命令,重新设置Cloud-Init为开机自启动

      systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

    3. 执行以下命令,重启Cloud-Init

      systemctl restart cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

      然后执行命令systemctl status查看服务状态。回显信息如下所示:

      图7 查看服务状态

CentOS 7/Fedora 28操作系统:安装Cloud-Init时提示未安装所需的C编译器

  • 问题描述

    Cloud-Init安装完成后,执行以下命令:

    cloud-init init --local

    回显信息出现以下警告:

    /usr/lib/python2.5/site-packages/Cheetah/Compiler.py:1532: UserWarning: 
    You don't have the C version of NameMapper installed! I'm disabling Cheetah's useStackFrames option as it is painfully slow with the Python version of NameMapper. You should get a copy of Cheetah with the compiled C version of NameMapper.
      "\nYou don't have the C version of NameMapper installed!
  • 原因分析

    出现该警告是因为在安装Cloud-Init时,需要编译C版本的NameMapper,但是该系统没有预装gcc,因此无法编译,这才导致C版本的NameMapper缺失。

  • 处理方法

    执行以下命令安装gcc:

    yum -y install gcc

    然后再重新安装Cloud-Init。

CentOS 7/Fedora操作系统:Cloud-Init安装成功,使用镜像创建的云服务器无法使用新密码登录

  • 问题描述

    Cloud-Init安装成功后,生成镜像并申请云服务器,启动新的云服务器,发现新密码无效。使用旧密码登录进去后发现,网卡没有启动:

    图8 网卡未启动
  • 解决方法

    登录创建镜像前的云服务器,打开dhcp配置文件“/etc/sysconfig/network-scripts/ifcfg-ethX”,注释HWADDR这一项。