
# 安装Cloud-Init（SUSE/Red Hat/CentOS/Oracle Linux/Ubuntu/Debian系列）
#### 操作背景
Cloud-Init是为云环境中虚拟机或iMetal服务器的初始化而开发的工具，作用是在使用镜像创建虚拟机或iMetal服务器时，可自定义服务器的网络配置、hostname、hosts文件，以及用户名密码等。使用镜像创建的虚拟机如需由系统生成随机密码，也需要使用此工具实现。
由于Cloud-Init安装文件需要适配不同厂商的Linux版本，当前仅支持从网络安装，因此制作Linux镜像时，需要可接入Internet。
#### 操作说明
- 以下安装Cloud-Init只是安装示例，建议从操作系统提供商的官网上下载此软件。Cloud-Init版本会随官网实时更新，在安装时，使用官网的最新版本即可。
- 在修改配置文件"/etc/cloud/cloud.cfg"时，请注意配置文件的格式（如对齐、空格）要与示例保持一致（此文件遵循yaml语法结构）。
 
- Cloud-Init安装方式分为：[采用官方提供的包源安装Cloud-Init工具（优先推荐）]、[采用官方提供的Cloud-Init源码包通过pip方式安装Cloud-Init工具]和[采用源码编译安装方法]**。**
 #### 采用官方提供的包源安装Cloud-Init工具（优先推荐）
在不同操作系统的虚拟机上安装Cloud-Init工具的方法不同，请在root用户下执行相关安装操作。
以下将介绍SUSE、CentOS、Debian和Ubuntu操作系统安装Cloud-Init工具的具体方法。其他操作系统类型，请安装并配置对应类型的Cloud-Init工具，例如，使用CoreOS操作系统时需安装并配置coreos-cloudinit。
- **SUSE操作系统**
  SUSE操作系统的Cloud-Init网络安装地址：
  [http://ftp5.gwdg.de/pub/opensuse/repositories/Cloud:/Tools/](https://ftp5.gwdg.de/pub/opensuse/repositories/Cloud:/Tools)
  [http://download.opensuse.org/repositories/Cloud:/Tools/](https://download.opensuse.org/repositories/Cloud:/Tools/)
  ![](https://support.huaweicloud.com/usermanual-clouddc/public_sys-resources/note_3.0-zh-cn.png)
  在上述提供的网络安装地址下选择相应操作系统版本的repo安装包进行安装。
  以SUSE Enterprise Linux Server 12为例，Cloud-Init工具的安装步骤如下。
  1. 执行以下命令，安装SUSE 12的网络安装源。 **zypper ar http://ftp5.gwdg.de/pub/opensuse/repositories/Cloud:/Tools/SLE_12_SP3/Cloud:Tools.repo**
     
  
  2. 执行以下命令，更新网络安装源。 **zypper refresh**
     
  
  3. 执行以下命令，安装Cloud-Init。 **zypper install cloud-init**
     
  
  4. 执行以下命令，设置Cloud-Init为开机自启动服务。
     - SUSE 11： **chkconfig cloud-init-local on; chkconfig cloud-init on; chkconfig cloud-config on; chkconfig cloud-final on**
       **service cloud-init-local status; service cloud-init status; service cloud-config status; service cloud-final status**
       
     
     - SUSE 12以及OpenSUSE 12/13/42： **systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service**
       **systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service**
       
     
     
     ![](https://support.huaweicloud.com/usermanual-clouddc/public_sys-resources/notice_3.0-zh-cn.png)
     对于SUSE和OpenSUSE操作系统，请执行以下步骤禁止动态修改名称。
     1. 执行以下命令，使用vi编辑器打开"dhcp"文件。 **vi** **etc/sysconfig/network/dhcp**
        
     
     2. 将"dhcp"文件中的"DHCLIENT_SET_HOSTNAME"的值修改为"no"。
       
   
- **CentOS操作系统**
  CentOS操作系统的Cloud-Init网络安装地址如[表1]所示。请在提供的网络安装地址下选择相应的epel-release安装包进行安装。
   表1Cloud-Init网络安装地址 
  | 操作系统类型 | 版本     | 网络安装地址                                                                     |
  |:---|:---|:---|
  | CentOS | 6系列32位 | <https://archives.fedoraproject.org/pub/archive/epel/6/i386/Packages/e/>   |
  | CentOS | 6系列64位 | <https://archives.fedoraproject.org/pub/archive/epel/6/x86_64/Packages/e/> |
  | CentOS | 7系列64位 | <https://archives.fedoraproject.org/pub/archive/epel/7/x86_64/Packages/e/> |
     
  此处以CentOS 6.5 64位为例，执行以下命令安装Cloud-Init。
  **yum install https://archives.fedoraproject.org/pub/archive/epel/6/x86_64/Packages/e/epel-release-** *xx-x* *x* **.noarch.rpm**
  **yum install cloud-init**
  ![](https://support.huaweicloud.com/usermanual-clouddc/public_sys-resources/note_3.0-zh-cn.png)
  *xx-xx*表示当前操作系统对应的epel版本号。
  
- **Debian操作系统**
  安装Cloud-Init前，请确认操作系统已经配置好对应的网络安装源地址，请查看"/etc/apt/sources.list"文件中是否已配置相关软件包安装源地址，如果没有配置相关地址源，请参考Debian官网信息配置软件包安装源。
  执行以下命令，安装Cloud-Init。
  **apt-get update**
  **apt-get install** **cloud-init**
  Debian操作系统安装完Cloud-Init后，还需要安装vlan和ifenslave服务，请执行以下命令进行安装：
  **apt-get install vlan**
  **apt-get install ifenslave**
  
- **Ubuntu操作系统**
  安装Cloud-Init前，请确认操作系统已经配置好对应的网络安装源地址，请查看"/etc/apt/sources.list"文件中是否已配置相关软件包安装源地址，如果没有配置相关地址源，请参考Ubuntu官网信息配置软件包安装源。
  执行以下命令，安装Cloud-Init。
  **apt-get update**
  **apt-get install** **cloud-init**
  Ubuntu操作系统安装完Cloud-Init后，还需要安装ssh服务、dkms工具、vlan和ifenslave服务，以及ifupdown服务，请执行以下操作进行安装：
  1. 安装ssh服务。 对于x86镜像，执行命令：
     **apt-get install openssh-client**
     **apt-get install openssh-server**
     对于ARM64镜像，执行命令：
     **apt install openssh-client**
     **apt install openssh-server**
     
  
  2. 安装dkms工具。 为了防止SDI驱动异常，Ubuntu需要安装dkms，可以使用apt-get命令在线安装。
     执行命令进行安装：**apt-get install dkms**
     待安装完成后，执行命令：**vi /usr/sbin/dkms**
     然后跳转到283行（同时按下"shift"和":"进入命令行模式，输入283并按"Enter"），修改为：
     ```
     invoke_command "$mkinitrd -f $initrd_dir/$initrd $1" "$mkinitrd" background
     ```
     
  
  3. 安装vlan和ifenslave服务。 **apt-get install vlan**
     **apt-get install ifenslave**
     
  
  4. 安装ifupdown服务。 **apt-get install ifupdown**
     
   
 
 #### 采用官方提供的Cloud-Init源码包通过pip方式安装Cloud-Init工具
以cloud-init-0.7.9版本为例，Cloud-Init工具的安装步骤如下。
1. 下载cloud-init-0.7.9.tar.gz源码包（推荐优先选用0.7.9版本），上传到虚拟机指定目录"/home/"下。 cloud-init-0.7.9.tar.gz源码包下载地址：
   <https://launchpad.net/cloud-init/trunk/0.7.9/+download/cloud-init-0.7.9.tar.gz>
   
2. 在"\~/.pip/"目录下新建pip.conf文件，编辑内容如下。
   ![](https://support.huaweicloud.com/usermanual-clouddc/public_sys-resources/note_3.0-zh-cn.png)
   "\~/.pip/"若不存在，可使用命令**mkdir \~/.pip**命令新建。
   ```
   [global]
   index-url  = https://<$mirror>/simple/
   trusted-host = <$mirror>
   ```
   ![](https://support.huaweicloud.com/usermanual-clouddc/public_sys-resources/note_3.0-zh-cn.png)
   编辑内容中**\<$mirror\>**部分可以选择公网PyPI源或教育网PyPI源进行替换。
   - 公网PyPI源：<https://pypi.python.org/>
   
   
   
   - 教育网PyPI源：<https://pypi.tuna.tsinghua.edu.cn/>
     <https://pypi.mirrors.ustc.edu.cn/>
     
     
3. 执行以下命令，安装本地下载的Cloud-Init源码包，安装过程中根据需要选择**--upgrade** 参数。
   **pip install \[--upgrade\] /home/cloud-init-0.7.9.tar.gz**
   
4. 执行命令**cloud-init -v** ，如回显如下类似信息表示安装Cloud-Init成功。
   ```
   cloud-init 0.7.9
   ```
   
5. 设置Cloud-Init相关服务为开机自启动。
   - 若操作系统是sysvinit自启动管理服务，则执行以下命令进行设置。 **chkconfig --add cloud-init-local; chkconfig --add cloud-init; chkconfig --add cloud-config; chkconfig --add cloud-final**
     **chkconfig cloud-init-local on; chkconfig cloud-init on; chkconfig cloud-config on; chkconfig cloud-final on**
     **service cloud-init-local status; service cloud-init status; service cloud-config status; service cloud-final status**
     
   
   - 若操作系统是systemd自启动管理服务，则执行以下命令进行设置。 **systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service**
     **systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service**
     
    
![](https://support.huaweicloud.com/usermanual-clouddc/public_sys-resources/notice_3.0-zh-cn.png)
采用官方提供的Cloud-Init源码包通过pip方式进行安装时要注意以下两点。
1. Cloud-Init安装时需要添加syslog用户到adm组。存在syslog用户时直接添加syslog用户到adm组。不存在syslog用户时（如CentOS和SUSE），执行下列命令创建syslog用户，添加到adm组： **useradd syslog**
   **groupadd adm**
   **usermod -g adm syslog**
   
2. 在"/etc/cloud/cloud.cfg"中system_info部分的distro要根据具体操作系统发行版本做相应修改（如根据具体操作系统发行版相应修改为：**distro: ubuntu** ，**distro: sles** ，**distro: debian** ，**distro: fedora**）。
 
 #### 采用源码编译安装方法
由于Cloud-Init配置的相关内容已在源码包编译完成，执行以下操作步骤安装Cloud-Init成功即可，无需执行Cloud-Init配置操作。官方源码编译安装方法的Cloud-Init工具Github开源地址：<https://github.com/canonical/cloud-init/>
1. 执行以下命令，下载Cloud-Init压缩包，并将其复制至新建的"/tmp/CLOUD-INIT"文件夹。
   ![](https://support.huaweicloud.com/usermanual-clouddc/public_sys-resources/note_3.0-zh-cn.png)
   0.7.6版本安装包下载地址：https://github.com/canonical/cloud-init/archive/refs/tags/0.7.6.zip
   0.7.9版本安装包下载地址：https://github.com/canonical/cloud-init/archive/refs/tags/0.7.9.zip
   
   **wget** **https://github.com/canonical/cloud-init/archive/refs/tags/0.7.9.zip**
   **mkdir /tmp/CLOUD-INIT**
   **cp **cloud-init-0.7.9.zip** /tmp/CLOUD-INIT**
   **cd /tmp/CLOUD-INIT**
   
2. 执行如下命令，解压Cloud-Init压缩包。 **unzip **cloud-init-0.7.9.zip****
   
3. 执行如下命令进入cloud-init-0.7.9文件夹。 **cd cloud-init-0.7.9**
   
4. 按照操作系统类型，执行相应的命令安装Cloud-Init安装包。
   - CentOS 6.x/SUSE 11.x： **python setup.py build**
     **python setup.py install --init-system sysvinit**
     
   
   - CentOS 7.x/SUSE 12.x/EulerOS 2.8 ARM： **python setup.py build**
     **python setup.py install --init-system systemd**
     
   
   
   ![](https://support.huaweicloud.com/usermanual-clouddc/public_sys-resources/notice_3.0-zh-cn.png)
   Cloud-Init安装时需要添加syslog用户到adm组。存在syslog用户时直接添加syslog用户到adm组。不存在syslog用户时（如CentOS和SUSE），执行下列命令创建syslog用户，添加到adm组：
   **useradd syslog**
   **groupadd adm**
   **usermod -g adm syslog**
   
5. 设置Cloud-Init相关服务为开机自启动。
   - 若操作系统是sysvinit自启动管理服务，则执行以下命令进行设置。 **chkconfig --add cloud-init-local; chkconfig --add cloud-init; chkconfig --add cloud-config; chkconfig --add cloud-final**
     **chkconfig cloud-init-local on; chkconfig cloud-init on; chkconfig cloud-config on; chkconfig cloud-final on**
     **service cloud-init-local status; service cloud-init status; service cloud-config status; service cloud-final status**
     
   
   - 若操作系统是systemd自启动管理服务，则执行以下命令进行设置。 **systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service**
     **systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service**
     
    
6. 执行如下命令检查Cloud-Init是否安装成功。 **cloud-init -v**
   **cloud-init init --local**
   回显如下类似信息所示表示安装Cloud-Init成功。
   ```
   cloud-init 0.7.9
   ```
   
 
