将自定义镜像导入阿里云平台或发布至云市场之前,请确保镜像满足本文提及的规范要求,并通过与ECS实例规格的适配测试。遵循阿里云镜像规范,有助于提升镜像的可用性和自定义镜像的导入效率,方便后续创建符合各类业务要求的ECS实例。本文介绍制作Linux镜像过程中需遵循的规范要求。
磁盘分区
在制作镜像过程中对磁盘分区时,需满足如下要求。
磁盘扩容
使用物理分区进行磁盘划分,根分区放在最后一个分区,否则可能会导致系统盘扩容失败。
对于支持在线扩容云盘的系统,需使用
growpart命令(需安装cloud-utils-growpart包)进行扩容。更多信息,请参见扩容分区及文件系统(Linux)。
SWAP分区
制作镜像时不要使用SWAP分区(交换分区)。
LVM管理
制作镜像时不要使用LVM管理磁盘分区。
磁盘挂载
需使用UUID方式配置fstab和grub文件。更多信息,请参见在fstab文件中配置UUID方式自动挂载数据盘和修改GRUB配置文件中的磁盘分区标识方式为UUID。
重要
如果fstab文件配置不当,可能会导致ECS重启后无法正常运行。
磁盘大小
系统磁盘最小容量为20 GiB。
设置镜像启动模式
为了适配各类启动模式的实例规格,建议您自行为本地镜像配置BIOS或UEFI启动模式,并在导入镜像时设置启动模式与镜像实际的启动模式一致。
制作本地镜像时配置启动模式的操作可参考创建虚拟机并安装操作系统。
导入镜像时设置启动模式的操作可参考导入自定义镜像。
您可以通过DescribeInstanceTypes接口返回值中的
SupportedBootModes参数值查询实例规格的启动模式。
说明
如果您本地镜像既支持BIOS也支持UEFI,您可以设置为UEFI-Preferred模式,该镜像会自动适配所有实例规格的启动模式,同时也可以降低镜像制作成本。
必备的软件和工具
安装virtio驱动
发布镜像前,需确保镜像已安装virtio驱动且已将virtio驱动添加到临时文件系统,virtio驱动可以确保镜像能在阿里云实例上正常使用。具体操作,请参见安装virtio驱动。
安装NVMe驱动
ECS的新代实例规格族(例如ecs.g8i、ecs.g7se等)支持基于NVMe协议挂载云盘,这就要求镜像安装有NVMe驱动否则实例会启动失败。为了确保您在创建该类ECS实例时能够选择到制作的镜像,建议您自行为本地镜像安装NVMe驱动,安装方法请参考如何为已有自定义镜像安装NVMe驱动。导入镜像后,请您参考修改镜像的属性和标签将镜像的NVMe驱动设置为支持。
安装cloud-init
制作镜像时需要安装cloud-init,以保证运行该镜像的ECS实例能成功完成初始化配置。具体操作,请参见安装cloud-init。建议您安装23.2.2版本的cloud-init,以支持加固模式访问元数据,保障实例元数据访问的安全性。
说明
使用cloud-init修改密码要求操作系统的内核支持
CONFIG_FW_CFG_SYSFS特性。Linux社区内核4.6版本之后默认支持该特性,CentOS的内核在3.10.0-826.el7版本之后默认支持该特性。您可以在该镜像对应的服务器内运行grep -nr CONFIG_FW_CFG_SYSFS /boot/config-$(uname -r)命令,如果回显结果中包含CONFIG_FW_CFG_SYSFS=y信息,则说明该镜像中的内核已支持CONFIG_FW_CFG_SYSFS特性。安装云助手
制作镜像时需要安装云助手。云助手是专为云服务器ECS打造的原生自动化运维工具,免密码、免登录、无需使用跳板机,即可批量执行命令(Shell、PowerShell、Bat等),实现自动化运维脚本、轮询进程、安装卸载软件、启动或停止服务、安装补丁或安全更新等任务。具体操作,请参见安装云助手Agent。
对服务器做安全防护
制作镜像过程中,推荐您使用阿里云的云安全中心对服务器做安全防护。云安全中心可以为您提供告警通知、病毒查杀、网站后门查杀、客户端自保护、镜像安全扫描等安全能力,全方位保护您的云上资产和本地服务器安全。
系统配置
配置时钟
镜像硬件时钟时区包括UTC和LocalTime,制作镜像时需要使用标准的UTC模式。配置示例如下:
cat > /etc/adjtime << EOF 0.0 0 0.0 0 UTC EOF timedatectl set-local-rtc 0更多信息,请参见Linux时间和时区说明。
配置SSHD服务
在制作镜像过程中,需要配置SSHD服务。
SSHD服务用于远程登录和管理Linux系统,使用SSH协议进行加密通信。修改
/etc/ssh/sshd_config中的配置示例如下:UseDNS no AddressFamily inet SyslogFacility AUTHPRIV PermitRootLogin yes PasswordAuthentication yes配置Chrony/NTP服务
在制作镜像过程中,建议您配置Chrony服务或者NTP服务,配置其中一个服务即可。
Chrony和NTP都是用于同步计算机时钟的工具,可以确保时钟同步,以避免时间误差导致的问题。示例命令如下:
Chrony服务
NTP服务
chrony_file=/etc/chrony.conf cat >$chrony_file <<EOF # Use Alibaba NTP server # Public NTP # Alicloud NTP server ntp.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp.aliyun.com minpoll 4 maxpoll 10 iburst server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst server ntp1.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp10.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp11.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp12.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp2.aliyun.com minpoll 4 maxpoll 10 iburst server ntp2.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp3.aliyun.com minpoll 4 maxpoll 10 iburst server ntp3.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp4.aliyun.com minpoll 4 maxpoll 10 iburst server ntp4.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp5.aliyun.com minpoll 4 maxpoll 10 iburst server ntp5.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp6.aliyun.com minpoll 4 maxpoll 10 iburst server ntp6.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp7.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp8.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp9.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst # Ignore stratum in source selection. stratumweight 0.05 # Record the rate at which the system clock gains/losses time. driftfile /var/lib/chrony/drift # Enable kernel RTC synchronization. rtcsync # In first three updates step the system clock instead of slew # if the adjustment is larger than 10 seconds. makestep 10 3 # Allow NTP client access from local network. #allow 192.168/16 # Listen for commands only on localhost. bindcmdaddress 127.0.0.1 bindcmdaddress ::1 # Disable logging of client accesses. noclientlog # Send a message to syslog if a clock adjustment is larger than 0.5 seconds. logchange 0.5 logdir /var/log/chrony #log measurements statistics tracking EOF配置MOTD服务
在制作镜像过程中,建议您配置MOTD(Message of the Day)服务。
MOTD服务是Linux系统中的一项功能,它可以在用户登录到系统后显示一条欢迎信息或者系统公告。示例命令如下:
echo -e "\nWelcome to Alibaba Cloud Elastic Compute Service ! \n" > /etc/motd关闭Firewalld服务
在制作镜像过程中,建议您关闭Firewalld服务。Firewalld是一种在Linux系统中管理防火墙规则的服务,云上有安全组做安全防护,您可以关闭防火墙。示例命令如下:
systemctl stop firewalld systemctl disable firewalld配置PIP源
如果系统存在PIP源配置,推荐使用阿里云的PIP源地址,以便从阿里云的源中获取到最新的软件包。配置
~/.pip/pip.conf文件的内容如下:[global] index-url=http://mirrors.cloud.aliyuncs.com/pypi/simple/ [install] trusted-host=mirrors.cloud.aliyuncs.com配置网络
如果您使用NetworkManager或者network网络服务,需配置
/etc/sysconfig/network-scripts/ifcfg-eth0文件内容如下:DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes其他网络服务配置,请参见配置辅助弹性网卡。
内核参数配置
配置kernelopt
在制作镜像过程中,您需要配置GRUB的kernelopt内核参数,以确保系统能够正常启动。以Debian系统为例,示例命令如下:
在
/etc/default/grub文件的GRUB_CMDLINE_LINUX=一行中,添加如下信息。x86_64架构
net.ifnames=0 console=tty0 console=ttyS0,115200n8Arm64架构
net.ifnames=0 console=tty0 console=ttyAMA0,115200n8
运行
sudo update-grub2命令,使GRUB配置生效。说明
不同操作系统GRUB配置文件路径不同,因此GRUB配置生效的命令不同。更多信息,请参见如何为已有自定义镜像安装NVMe驱动。
配置sysctl
在制作镜像过程中,建议您配置sysctl参数,便于调整和优化Linux内核的运行参数。
修改
/etc/sysctl.conf内容如下。vm.swappiness = 0 kernel.sysrq = 1 net.ipv4.neigh.default.gc_stale_time = 120 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_announce = 2 net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 1024 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_slow_start_after_idle = 0运行
sudo sysctl -p命令使内核参数修改生效。
系统安全建议
为了提升系统的安全性,导入镜像前,建议您:
锁定root账户,即使设置了root密码,也无法直接通过密码登录系统。
修改ssh PasswordAuthentication权限,禁止密码登录。
说明
如果实例初始化配置时设置了root密码,那么默认情况下SSH的
PasswordAuthentication可能会被启用。
代码示例如下:
dst=/etc/ssh/sshd_config sed -i 's/^SyslogFacility.*//' $dst sed -i 's/^PermitRootLogin.*//' $dst sed -i 's/^PasswordAuthentication.*//' $dst echo UseDNS no >> $dst echo SyslogFacility AUTHPRIV >> $dst echo PasswordAuthentication no >> $dst passwd -l root sed -i -e 's/root:[^:]*:/root:*:/g' /etc/shadow清理镜像信息
发布镜像前,各操作系统发布商可以根据自身情况进行清理历史记录以及日志等操作。