tencent cloud

文档反馈

Linux 系统安装 cloud-init

最后更新时间:2024-01-08 09:37:00

    操作场景

    Cloud-init 主要提供实例首次初始化时自定义配置的能力。如果导入的镜像没有安装 cloud-init 服务,基于该镜像启动的实例将无法被正常初始化,导致该镜像正常导入失败。本文档指导您安装 cloud-init 服务。 安装 cloud-init 推荐以下三种方式:

    前提条件

    安装 cloud-init 的服务器可正常访问外网。

    操作步骤

    下载 cloud-init 二进制包
    手工下载 cloud-init 源码包方式
    使用软件源上的 cloud-init 包方式
    说明:
    cloud-init 依赖于 qcloud-python, qcloud-python 是腾讯云重新编译打包的软件包,是单独的 python 环境,仅用于 cloud-init 运行环境,安装在 /usr/local/qcloud/python 目录下,与系统中默认的 python 不相冲突。
    cloud-init 是腾讯云基于社区20.1版本研发的,适配腾讯云运行环境的专属 cloud-init。
    cloud-init 二制包支持如下 OS:
    类型
    OS
    版本
    x86_64
    arm64
    qcloud-python
    cloud-init
    qcloud-python
    cloud-init
    rpm
    CentOS
    7
    8
    Fedora
    36
    NA
    NA
    Kylin
    20sp1
    openSUSE
    15.4
    NA
    NA
    deb
    Debian
    11
    10
    NA
    NA
    9
    NA
    NA
    8
    NA
    NA
    Ubuntu
    22.04
    NA
    NA
    20.04
    18.04
    16.04
    NA
    NA

    下载 cloud-init 二进制包

    1. 下载上述安装包。
    2. 如果系统中已经有 cloud-init,请排查并执行如下命令,清理残留。
    rm -rf /var/lib/cloud
    rm -rf /etc/cloud
    rm -rf /usr/local/bin/cloud*
    3. 根据操作系统,执行如下命令:
    deb 系列,执行以下命令:
    dpkg -i *.deb
    rpm 系列, 执行如下命令:
    rpm -ivh *.rpm
    4. 查询版本是否正确安装。
    cloud-init qcloud -v
    /usr/bin/cloud-init qcloud 0011
    5. 重启后生效。

    下载 cloud-init 源码包

    说明:
    在正常安装的情况下,cloud-init-20.1.0011 版本与腾讯云的兼容性最佳,可以保证使用该镜像创建的云服务器的所有配置项都可以正常初始化。建议选择 cloud-init-20.1.0011.tar.gz 安装版本。您也可以 点此获取 其他版本的 cloud-init 源码包。本文以 cloud-init-20.1.0011 版本为例。
    执行以下命令,下载 cloud-init 源码包。
    wget https://gerryguan-1306210569.cos.ap-chongqing.myqcloud.com/cloud-init/src/cloud-init-20.1.0011.tar.gz

    安装 cloud-init

    1. 执行以下命令,解压 cloud-init 安装包。
    说明:
    如果您使用的操作系统为 Ubuntu,请切换至 root 账号。
    tar -zxvf cloud-init-20.1.0011.tar.gz
    2. 执行以下命令,进入已解压的 cloud-init 安装包目录(即进入 cloud-init-20.1.0011 目录)。
    cd cloud-init
    3. 根据操作系统版本,安装 Python-pip。
    CentOS 6/7系列,执行以下命令:
    yum install python3-pip -y
    Ubuntu 系列,执行以下命令:
    apt-get -y install python3-pip
    若在安装时,出现无法安装或找不到安装包的错误,可参考 解决无法安装 Python-pip 问题 进行处理。
    4. 执行以下命令,升级 pip。
    python3 -m pip install --upgrade pip
    5. 执行以下命令,安装依赖包。
    注意:
    Cloud-init 依赖组件 requests 2.20.0版本后,已弃用 Python2.6。如果镜像环境的 Python 解释器为 Python2.6及以下,在安装 cloud-init 依赖包之前,请执行 pip install 'requests<2.20.0' 命令,安装 requests 2.20.0 版本以下的版本。
    pip3 install -r requirements.txt
    6. 根据操作系统版本,安装 cloud-utils 组件。
    CentOS 6系列,执行以下命令:
    yum install cloud-utils-growpart dracut-modules-growroot -y
    dracut -f
    CentOS 7系列,执行以下命令:
    yum install cloud-utils-growpart -y
    Ubuntu 系列,执行以下命令:
    apt-get install cloud-guest-utils -y
    7. 执行以下命令,安装 cloud-init。
    python3 setup.py build
    python3 setup.py install --init-system systemd
    注意:
    --init-system 的可选参数有:(systemd, sysvinit, sysvinit_deb, sysvinit_freebsd, sysvinit_openrc, sysvinit_suse, upstart) [default: None]。请根据当前操作系统使用的自启动服务管理方式,进行选择。若选择错误,cloud-init 服务会无法开机自启动。
    centos6 及以下系统请选择 sysvinit,centos7 及以上系统请选择 systemd。本文以 systemd 自启动服务管理为例。

    修改 cloud-init 配置文件

    1. 根据不同操作系统,下载 cloud.cfg。
    点此下载 Ubuntu 操作系统的 cloud.cfg。
    点此下载 CentOS 操作系统的 cloud.cfg。
    2. /etc/cloud/cloud.cfg 的内容替换为已下载的 cloud.cfg 文件内容。

    添加 syslog 用户

    执行以下命令,添加 syslog 用户。
    useradd syslog

    设置 cloud-init 服务开机自启动

    若操作系统是 systemd 自启动管理服务,则执行以下命令进行设置。
    说明:
    您可执行 strings /sbin/init | grep "/lib/system" 命令,若有返回信息,则操作系统是 systemd 自启动管理服务。
    针对 Ubuntu 或 Debian 操作系统,需执行以下命令。
    ln -s /usr/local/bin/cloud-init /usr/bin/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
    systemctl status cloud-init-local.service
    systemctl status cloud-init.service
    systemctl status cloud-config.service
    systemctl status cloud-final.service
    针对 CentOS 和 Redhat 操作系统,需执行以下命令。 将 /lib/systemd/system/cloud-init-local.service 文件替换为如下内容:
    [Unit]
    Description=Initial cloud-init job (pre-networking)
    Wants=network-pre.target
    After=systemd-remount-fs.service
    Before=NetworkManager.service
    Before=network-pre.target
    Before=shutdown.target
    Conflicts=shutdown.target
    RequiresMountsFor=/var/lib/cloud
    [Service]
    Type=oneshot
    ExecStart=/usr/bin/cloud-init init --local
    ExecStart=/bin/touch /run/cloud-init/network-config-ready
    RemainAfterExit=yes
    TimeoutSec=0
    # Output needs to appear in instance console output
    StandardOutput=journal+console
    [Install]
    WantedBy=cloud-init.target
    将 /lib/systemd/system/cloud-init.service 文件替换为以下内容:
    [Unit]
    Description=Initial cloud-init job (metadata service crawler)
    Wants=cloud-init-local.service
    Wants=sshd-keygen.service
    Wants=sshd.service
    After=cloud-init-local.service
    After=systemd-networkd-wait-online.service
    After=networking.service
    After=systemd-hostnamed.service
    Before=network-online.target
    Before=sshd-keygen.service
    Before=sshd.service
    Before=systemd-user-sessions.service
    Conflicts=shutdown.target
    [Service]
    Type=oneshot
    ExecStart=/usr/bin/cloud-init init
    RemainAfterExit=yes
    TimeoutSec=0
    # Output needs to appear in instance console output
    StandardOutput=journal+console
    [Install]
    WantedBy=cloud-init.target
    若操作系统是 sysvinit 自启动管理服务,则执行以下命令进行设置。
    说明:
    您可执行 strings /sbin/init | grep "sysvinit" 命令,若有返回信息,则操作系统是 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

    安装 cloud-init

    执行以下命令,安装 cloud-init。
    apt-get/yum install cloud-init
    说明:
    通过 apt-get 或 yum 命令安装的 cloud-init 默认为当前操作系统配置的软件源中默认的 cloud-init 版本。使用该方式安装的镜像创建的实例可能会存在部分配置项初始化不符合预期的情况,建议使用 手工下载 cloud-init 源码包方式 进行安装。

    修改 cloud-init 配置文件

    1. 根据不同操作系统,下载 cloud.cfg。
    点此下载 Ubuntu 操作系统的 cloud.cfg。
    点此下载 CentOS 操作系统的 cloud.cfg。
    2. /etc/cloud/cloud.cfg 的内容替换为已下载的 cloud.cfg 文件内容。

    相关操作

    注意:
    以下操作执行完成后,请勿重启服务器,否则需重新执行下以下操作。
    1. 执行以下命令,检查 cloud-init 相关配置是否成功。
    cloud-init init --local
    返回类似如下信息,则说明已成功配置 cloud-init。
    Cloud-init v. 20.1.0011 running 'init-local' at Fri, 01 Apr 2022 01:26:11 +0000. Up 38.70 seconds.
    2. 执行以下命令,删除 cloudinit 的缓存记录。
    rm -rf /var/lib/cloud
    3. 针对 Ubuntu 或 Debian 操作系统,需执行以下命令。
    rm -rf /etc/network/interfaces.d/50-cloud-init.cfg
    4. 针对 Ubuntu 或 Debian 操作系统,需将 /etc/network/interfaces 修改为以下内容:
    # This file describes the network interfaces available on your system
    # and how to activate them. For more information, see interfaces(5).
    source /etc/network/interfaces.d/*

    附录

    解决无法安装 Python-pip 问题

    若在安装 Python-pip 出现无此安装包或无法安装的错误,可对应实际使用的操作系统,参考以下步骤进行解决:
    CentOS 6/7系列
    Ubuntu 系列
    1. 执行以下命令,设置 EPEL 存储库。
    yum install epel-release -y
    2. 执行以下命令,安装 Python-pip。
    yum install python3-pip -y
    1. 执行以下命令,清除缓存。
    apt-get clean all
    1. 执行以下命令,更新软件包列表。
    apt-get update -y
    2. 执行以下命令,安装 Python-pip。
    apt-get -y install python3-pip
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持