使用镜像检测工具检测并修复镜像

将自定义镜像导入阿里云平台前,建议您使用镜像检测工具sersi检测镜像是否符合导入条件,并针对异常镜像进行修复,确保自定义镜像的质量,以便在阿里云平台上顺利部署功能齐全、兼容性良好的ECS实例。本文为您介绍如何使用sersi工具检测并修复镜像。

sersi工具介绍

sersi工具是阿里云平台推出的镜像检测修复工具。sersi工具在检测并修复镜像过程中,自动完成以下任务:

  • 扫描镜像中的系统及服务配置并输出检测报告,检测报告中会详细描述镜像系统信息以及检测出的异常信息。

  • 结合异常信息自动生成相应的修复脚本,执行修复命令修复镜像。

使用限制

不支持FreeBSD、Fedora CoreOS以及Windows Server系统。

操作步骤

步骤1:检测镜像

  1. 使用root用户登录制作镜像的虚拟机。

  2. 依次运行以下命令,下载并解压sersi工具。

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/imagecheck/sersi.tar.gz
    tar -xf sersi.tar.gz

    如果您的虚拟机可以访问公网,您也可以通过浏览器下载sersi工具

  3. 执行以下命令,运行检测工具。

    ./main.sh  --target=image  --diagnostic

    检测工具主要检查以下配置项:

    检测项说明

    检测项

    等级

    检测项说明

    不合规影响

    Virtio

    检测镜像中是否安装virtio驱动。

    阿里云ECS通常为基于KVM的虚拟机,因此依赖镜像中安装虚拟磁盘的virtio驱动。

    ECS启动异常。

    Nvme

    检测镜像中是否安装NVMe驱动。

    ECS部分规格使用NVMe协议云盘,例如ecs.g7se,要求镜像包含NVMe驱动。NVMe相比SCSI、virtio-blk等传统驱动协议速度更快、传输带宽更高,因此建议您在镜像中安装NVMe驱动,以支持相关实例规格。更多信息,请参见NVMe协议概述

    无法使用NVMe协议云盘的实例规格,例如ecs.g7se。

    Fstab

    检测/etc/fstab配置是否正常。

    错误的配置会导致系统启动异常,例如配置的挂载设备信息不存在、设备UUID错误等。

    系统启动异常。

    Grub

    检测grub配置文件是否正常。

    grub引导内核的加载和启动,是系统的重要配置。错误的配置将导致系统启动异常,建议您检查系统中的配置文件是否正确,例如grub文件中不要使用设备名来指定启动分区,如root=/dev/sda1,在不同的环境中设备名称可能发生变化,建议您使用UUID来指定启动分区。

    系统启动异常。

    Dhcp

    检测网络配置是否为DHCP。

    建议您为网络设备配置DHCP的方式,static静态方式会导致网络配置失败,连接异常。我们还建议您在grub内核启动参数中增加配置选项net.ifnames=0来禁用内核网络接口重命名行为,使网卡名称为eth0。

    系统网络异常。

    Selinux

    检测是否禁用SELinux,阿里云建议您关闭SELinux。

    无法正常启动ECS实例。

    OnlineResizeFS

    检测镜像是否支持在线扩容文件系统。

    例如您的镜像虚拟磁盘空间大小为10 GB,您购买ECS实例的系统盘为100 GB,如果您安装了cloud-init、growpart等组件,相关组件在实例初始化时会将根分区及文件系统扩容,扩容至您系统盘的大小100 GB。更多信息,请参见扩容分区和文件系统(Linux)

    实例根分区无法扩容。

    CloudInit

    检测是否安装cloud-init服务。

    cloud-init能在ECS实例启动阶段完成系统初始化配置,包括NTP、软件源、主机名和SSH密钥对等,同时执行实例自定义数据(User data)脚本。

    系统初始化配置缺失。

    DiskUsage

    检测磁盘空间使用率是否正常。

    您可以执行df -h命令来检查您磁盘空间的使用率,确保有充足空间。

    系统启动异常。

    InodeUsage

    检测磁盘inode使用率是否正常。

    您可以执行df -i命令来检查磁盘inode的使用率。

    系统启动异常。

    SystemFileAttribute

    检测系统中关键配置文件的文件属性是否正常。

    实例启动异常、功能异常。

    CriticalUser

    检测系统中关键用户(例如root)是否存在。

    关键用户的缺失会导致系统启动异常,实例功能使用异常,例如无法使用用户名和密码远程连接ECS实例。

    实例启动异常、功能异常。

    QemuGuestAgent

    检测系统中是否安装qemu-guest-agent。

    该软件是运行在虚拟机上,和宿主机交互通信,会导致ECS所需要的部分服务不可用,实例功能不全。

    实例功能异常。

    SshConfig

    检测sshd服务的配置文件(通常是/etc/ssh/sshd_config)是否正常。

    sshd配置文件异常会导致sshd服务启动失败,进而导致SSH连接ECS失败,因此检查sshd配置文件的正确性和有效性非常重要。通常您可以执行以下命令:

    • 执行sudo sshd -T命令展示您所有的sshd配置选项。

    • 执行sudo sshd -t 命令验证sshd配置文件的合法性;若合法,则没有信息输出。

    实例SSH连接失败。

    Firewall

    检测防火墙服务是否开启。

    阿里云建议您关闭系统中的防火墙服务,使用ECS安全组统一管理您云上实例的出入流量。更多信息,请参见安全组概述

    系统防火墙应用可能导致您访问实例失败。

    LibDirectory

    在RedHat系列Linux系统中,/lib/lib64通常为一个链接文件,指向/usr/lib/usr/lib64,请不要随意修改该链接文件,否则可能导致系统异常。

    系统功能异常。

    SupportMocInstanceTypes

    检测镜像是否支持阿里云ECS神龙规格。

    阿里云最新的ECS实例通常为神龙规格,例如ecs.g6、ecs.g7等,如果镜像的系统和内核版本过低,在相关规格上启动会有异常。具体的实例规格信息,请参见实例规格族

    不能使用ecs.g6、ecs.g7等神龙规格族。

    CloudAssistant

    检测镜像是否安装云助手。

    云助手是专为云服务器ECS打造的原生自动化运维工具,阿里云建议您为镜像安装云助手服务,实现云上ECS高效运维。更多信息,请参见云助手概述

    云上运维不便。

    SecurityCenterAgent

    检测是否安装云安全中心Agent。

    安装云安全中心的Agent插件后,您的服务器才能受到云安全中心的保护。

    无法识别实例中的漏洞问题,缺少云安全中心的保护。

    等待检测工具检测完成,检测结果类似如下信息。

    检测结果示例

    ------------------------------------------------------------
    
                OS: Alibaba Cloud Linux 3   Kernel: 5.10.134-16.3.al8.x86_64 
                Arch: x86_64       RTC-Mode: utc       Boot-Mode: UEFI
            
    ------------------------------------------------------------
    Image Check Result
    Virtio                                                                                 [OK]
    Nvme                                                                                   [OK]
    Fstab                                                                                  [OK]
    Grub                                                                                   [OK]
    Dhcp                                                                                   [OK]
    Selinux                                                                                [OK]
    OnlineResizeFS                                                                         [OK]
    CloudAssistant                                                                         [OK]
    CloudInit                                                                              [OK]
    SecurityCenterAgent                                                                    [OK]
    SupportMocInstanceTypes                                                                [OK]
    DiskUsage                                                                              [OK]
    InodeUsage                                                                             [OK]
    SystemFileAttribute                                                                    [OK]
    CriticalUser                                                                           [OK]
    QemuGuestAgent                                                                         [OK]
    SshConfig                                                                              [OK]
    Firewall                                                                               [OK]
    
             Total case Count                18
                Successes:                   18
                Failures:                    0
                Warnings:                    0
            
    ------------------------------------------------------------

    检测工具会根据检测项的等级给出OKFAILEDWARNING检测结果。

    • OK:检测项均符合要求。

    • FAILED:检测项不符合要求,使用该自定义镜像创建的ECS实例会出现无法正常启动、网络异常等严重问题,建议您参考步骤2:修复镜像,修复报错项后再导入镜像。

    • WARNING:检测项不符合要求,使用该自定义镜像创建的ECS实例缺少云安全中心保护、无法使用云助手自动化运维等问题,建议您参考步骤2:修复镜像,修复报错项后再导入镜像,以提高您云上的运维效率。

步骤2:修复镜像

执行以下命令,自动修复镜像。

./main.sh --target=image --run <case> [--debug] [--dry-run] [-y]

上述命令涉及的参数说明如下表所示, 请您根据实际情况进行配置:

参数

是否必选

说明

run <case>

表示运行需要修复的检测项目。当前支持的检测项有cloudinitvirtionvmefstabgrubdhcpselinuxgrowpartaegisassistfirewallsshdfileattributeqemuguestagent

  • 全部检测并修复:./main.sh --target=image --run all

  • 只针对某一项进行检测并修复,例如检测镜像是否安装cloud-init:./main.sh --target=image --run cloudinit

  • 同时针对多项检测,各检测项之间需要空格分隔,例如:./main.sh --target=image --run cloudinit virtio assist

[--debug]

添加该参数表示增加debug日志打印。

[--dry-run]

  • 添加该参数表示只打印修复脚本,不执行修复脚本。

  • 不添加该参数表示直接执行修复脚本。

[-y]

  • 添加该参数表示执行修复脚本时不进行交互确认。

  • 不添加该参数表示执行修复脚本时进行交互确认,需要输入y确认执行。

重要

sersi工具修复镜像时执行的脚本无法回滚,对系统的修改无法撤销,因此强烈建议您:

  • 先添加[--dry-run]参数,仅查看修复脚本,不执行修复脚本,sersi工具会将修复脚本保存至cache目录中,您可以查看或调试。确保无误后,无需添加[--dry-run]参数即可执行修复脚本,进行修复操作。

  • 先不要添加-y参数,表示进行交互确认后再执行修复脚本,避免修复脚本导致的意外更改或数据丢失。

修复命令示例

说明

对于不支持通过sersi工具自动修复的检测项,您也可以手动进行修复。

检测项

工具自动修复

工具修复命令

手动修复方法

Virtio

工具在dracut配置文件中增加virtio驱动配置,重新生成带有virtio驱动的initrd文件。

./main.sh --target=image --run virtio --debug --dry-run

安装virtio驱动

Nvme

工具在dracut配置文件中增加NVMe驱动配置,重新生成带有NVMe驱动的initrd文件。同时会在grub配置中增加nvmenvme_core内核模块的timeout参数,提高NVMe I/O处理的可靠性。

重要

修复完成后,需要您手动重启系统才能生效。

./main.sh --target=image --run nvme --debug

如何为已有自定义镜像安装NVMe驱动?

Fstab

工具会注释/etc/fstab异常的挂载项。

./main.sh --target=image --run fstab --debug

如何正确配置/etc/fstab,请参见在fstab文件中配置UUID方式自动挂载数据盘

Grub

工具会修改grub中rootdevice为正确值。

./main.sh --target=image --run grub --debug

如何为镜像生成正确的配置grub文件,请参见Linux实例的grub启动配置错误

Dhcp

工具会配置网络服务配置文件,配置文件中网卡设备命名是eth0,设置dhcp=true等。同时在grub中添加内核启动参数 biosdevname=0 net.ifnames=0,确保网卡设备命名为eth0。

重要

修复完成后,需要您手动重启系统才能生效。

./main.sh --target=image --run dhcp --debug

如何设置镜像网络配置模式为DHCP,请参见如何在Linux镜像中配置网络为DHCP

Selinux

工具会修改配置文件/etc/selinux/config模式为 disabled,同时在grub中添加内核启动参数 selinux=0关闭selinux。

重要

修复完成后,需要您手动重启系统才能生效。

./main.sh --target=image --run selinux --debug

如何关闭SELinux,请参见开启或关闭SELinux

OnlineResizeFS

工具会在系统中配置growpart脚本,实例支持根分区扩容。

./main.sh --target=image --run growpart --debug

  • 安装cloud-init

  • 安装growpart工具。工具安装方法请参见安装cloud-init文档中在创建实例时对系统盘进行扩容,但在实例内部发现根分区大小并没有自动扩容,如何处理?问题的操作。

CloudInit

工具会为系统临时配置软件仓库源,通过系统中的包管理器安装cloud-init软件包,并设置cloud-init配置文件,设置数据源为阿里云。

./main.sh --target=image --run cloudinit --debug

安装cloud-init

DiskUsage

不支持,只能通过手动修复。

不涉及

手动删除不必要文件。

InodeUsage

不支持,只能通过手动修复。

不涉及

手动删除不必要文件。

SystemFileAttribute

支持。

工具会删除检测出来的异常文件的属性。

./main.sh --target=image --run fileattribute --debug

不要使用chattr命令锁定/etc/shadow等文件。

CriticalUser

不支持,只能通过手动修复。

不涉及

保留root账号。

QemuGuestAgent

支持。

工具会卸载qemu-guestos-agent。

./main.sh --target=image --run qemuguestagent --debug

卸载qemu-guestos-agent。

SshConfig

支持。

工具会开启sshd中的密码认证和root用户登录。

./main.sh --target=image --run sshd --debug

检查sshd配置文件。

Firewall

支持。

工具会关闭防火墙服务。

./main.sh --target=image --run firewalld --debug

关闭系统防火墙服务。

LibDirectory

不支持,只能通过手动修复。

不涉及

链接文件/lib/lib64的指向位置不能为绝对路径,修改指向位置为相对路径。

SupportMocInstanceTypes

不支持,只能通过手动修复。

不涉及

不支持神龙规格的系统通常是已经EOL不再维护的低版本系统,阿里云建议您尽早更新升级,使用各发行厂商正在维护更新的操作系统版本。

CloudAssistant

支持。

工具会安装云助手。

./main.sh --target=image --run assist --debug

安装云助手Agent

SecurityCenterAgent

支持。

工具会安装阿里云云安全中心客户端。

./main.sh --target=image --run aegis --debug

安装Agent

修复结果示例

2024-07-19 17:20:54,480 root [INFO]: sersi run finished, print summary report
2024-07-19 17:20:54,480 root [INFO]: casename: cloudinit                            NO_FOUND_RISK
2024-07-19 17:20:54,480 root [INFO]: casename: virtio                               OK
2024-07-19 17:20:54,480 root [INFO]: casename: nvme                                 OK_Need_Reboot
2024-07-19 17:20:54,480 root [INFO]: casename: fstab                                NO_FOUND_RISK
2024-07-19 17:20:54,480 root [INFO]: casename: grub                                 NO_FOUND_RISK
2024-07-19 17:20:54,480 root [INFO]: casename: dhcp                                 NO_FOUND_RISK
2024-07-19 17:20:54,480 root [INFO]: casename: selinux                              NO_FOUND_RISK
2024-07-19 17:20:54,480 root [INFO]: casename: growpart                             NO_FOUND_RISK
2024-07-19 17:20:54,480 root [INFO]: casename: aegis                                NO_FOUND_RISK
2024-07-19 17:20:54,480 root [INFO]: casename: assist                               DRY_RUN
2024-07-19 17:20:54,480 root [INFO]: casename: firewall                             NO_FOUND_RISK
2024-07-19 17:20:54,480 root [INFO]: casename: sshd                                 NO_FOUND_RISK
2024-07-19 17:20:54,480 root [INFO]: casename: systemfileattribute                  NO_FOUND_RISK
2024-07-19 17:20:54,480 root [INFO]: casename: qemu_guest_agent                     FAILED

修复结束后,工具会根据修复情况生成以下修复结果:

  • OK:表示该项修复成功。

  • NO_FOUND_RISK:表示检测镜像中未找到该项的异常。

  • OK_Need_Reboot:表示该项修复完成需重启系统才能生效。

  • DRY_RUN:表示找到该项的异常并通过dry-run模式运行仅打印修复脚本,但未执行修复。

  • FAILED:表示该项修复失败。

相关文档

  • 通过工具检测镜像符合规范后,您可以获取Linux镜像文件,并将镜像文件导入阿里云平台。

  • 您也可以在镜像导入阿里云平台时,通过镜像检测功能检测镜像配置是否正常,并通过系统运维管理 OOS(CloudOps Orchestration Service)进行一键修复。更多信息,请参见导入自定义镜像镜像检测概述