云市場鏡像規(guī)范(Linux)
鏡像服務(wù)商ISV(Independent Software Vendor)在云市場發(fā)布鏡像前,需要確保已制作的鏡像滿足與ECS實例規(guī)格適配的規(guī)范要求,并通過與ECS實例規(guī)格的適配測試。本文為您介紹在制作Linux系統(tǒng)的云市場鏡像過程中需遵循的規(guī)范要求。
磁盤分區(qū)
您在制作云市場鏡像過程中對磁盤分區(qū)時,需滿足如下要求。
云盤擴容
使用物理分區(qū)進(jìn)行磁盤劃分,根分區(qū)放在最后一個分區(qū),否則可能會導(dǎo)致系統(tǒng)盤擴容失敗。
對于支持在線擴容云盤的系統(tǒng),需使用
growpart
命令(需安裝cloud-utils-growpart
包)進(jìn)行擴容。更多信息,請參見擴容分區(qū)和文件系統(tǒng)(Linux)。
SWAP分區(qū)
制作鏡像時不要使用SWAP分區(qū)(交換分區(qū))。
磁盤掛載
需使用UUID方式配置fstab和grub文件。更多信息,請參見在fstab文件中配置UUID方式自動掛載數(shù)據(jù)盤和如何修改Linux鏡像Grub文件中的文件磁盤標(biāo)識符為UUID。
說明如果fstab文件配置不當(dāng),可能會導(dǎo)致ECS重啟后無法正常運行。
磁盤大小
系統(tǒng)磁盤最小大小設(shè)置為20 GiB。
必備的軟件和工具
安裝virtio驅(qū)動
發(fā)布鏡像前,需確保鏡像已安裝virtio驅(qū)動且已將virtio驅(qū)動添加到臨時文件系統(tǒng),virtio驅(qū)動可以確保鏡像能夠在阿里云實例上正常使用。具體操作,請參見安裝virtio驅(qū)動。
安裝NVMe驅(qū)動
部分實例規(guī)格族支持基于NVMe協(xié)議掛載云盤(例如ecs.g7se、ecs.c7se、ecs.r7se等),如果您需要在該類實例規(guī)格族上使用鏡像啟動ECS實例,且需要保證實例穩(wěn)定運行,則需要在對應(yīng)的操作系統(tǒng)中進(jìn)行NVMe相關(guān)的配置操作。具體操作,請參見Linux自定義鏡像如何適配NVMe系統(tǒng)盤?。
安裝cloud-init
您在制作云市場鏡像時需要安裝cloud-init,以保證運行該鏡像的ECS實例能成功完成初始化配置。具體操作,請參見安裝cloud-init。
說明使用cloud-init修改密碼要求操作系統(tǒng)的內(nèi)核支持
CONFIG_FW_CFG_SYSFS
特性。Linux社區(qū)內(nèi)核4.6版本之后默認(rèn)支持該特性,CentOS的內(nèi)核在3.10.0-826.el7版本之后默認(rèn)支持該特性。您可以在該鏡像對應(yīng)的服務(wù)器內(nèi)運行grep -nr CONFIG_FW_CFG_SYSFS /boot/config-$(uname -r)
命令,如果回顯結(jié)果中包含CONFIG_FW_CFG_SYSFS=y
信息,則說明該鏡像中的內(nèi)核已支持CONFIG_FW_CFG_SYSFS
特性。安裝云助手
您在制作云市場鏡像時需要安裝云助手。云助手是專為云服務(wù)器ECS打造的原生自動化運維工具,免密碼、免登錄、無需使用跳板機,即可批量執(zhí)行命令(Shell、PowerShell、Bat等),實現(xiàn)自動化運維腳本、輪詢進(jìn)程、安裝卸載軟件、啟動或停止服務(wù)、安裝補丁或安裝安全更新等任務(wù)。具體操作,請參見安裝云助手Agent。
對服務(wù)器做安全防護(hù)
在制作云市場鏡像過程中,推薦您使用阿里云的云安全中心對服務(wù)器做安全防護(hù)。什么是云安全中心可以為您提供告警通知、病毒查殺、網(wǎng)站后門查殺、客戶端自保護(hù)、鏡像安全掃描等安全能力,全方位保護(hù)您的云上資產(chǎn)和本地服務(wù)器安全。
系統(tǒng)配置
配置時鐘
鏡像硬件時鐘時區(qū)包括UTC和LocalTime,制作云市場鏡像時需要使用標(biāo)準(zhǔn)的UTC模式。示例命令如下:
cat > $dst << EOF 0.0 0 0.0 0 UTC EOF timedatectl set-local-rtc 0
更多信息,請參見Linux時間和時區(qū)說明。
配置SSHD服務(wù)
在制作云市場鏡像過程中,需要配置SSHD服務(wù)。
SSHD服務(wù)是Linux系統(tǒng)中的一個服務(wù),用于遠(yuǎn)程登錄和管理Linux系統(tǒng)。SSHD服務(wù)通常使用SSH協(xié)議(Secure Shell)進(jìn)行加密通信,以保證遠(yuǎn)程登錄的安全性。修改
/etc/ssh/sshd_config
中的配置示例如下:UseDNS no AddressFamily inet SyslogFacility AUTHPRIV PermitRootLogin yes PasswordAuthentication yes
配置Chrony/NTP服務(wù)
在制作云市場鏡像過程中,建議您配置Chrony服務(wù)或者NTP服務(wù),配置其中一個服務(wù)即可。
Chrony和NTP都是用于同步計算機時鐘的網(wǎng)絡(luò)協(xié)議,可以確保時鐘同步,以避免時間誤差導(dǎo)致的問題。示例命令如下:
Chrony服務(wù):
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
NTP服務(wù)
ntp_conf=/etc/ntp.conf cat > $ntp_conf << EOF driftfile /var/lib/ntp/drift pidfile /var/run/ntpd.pid logfile /var/log/ntp.log # Access Control Support restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap nopeer noquery restrict 172.16.0.0 mask 255.240.0.0 nomodify notrap nopeer noquery restrict 100.64.0.0 mask 255.192.0.0 nomodify notrap nopeer noquery restrict 10.0.0.0 mask 255.0.0.0 nomodify notrap nopeer noquery # local clock server 127.127.1.0 fudge 127.127.1.0 stratum 10 restrict ntp.aliyun.com nomodify notrap nopeer noquery restrict ntp.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp1.aliyun.com nomodify notrap nopeer noquery restrict ntp1.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp10.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp11.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp12.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp2.aliyun.com nomodify notrap nopeer noquery restrict ntp2.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp3.aliyun.com nomodify notrap nopeer noquery restrict ntp3.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp4.aliyun.com nomodify notrap nopeer noquery restrict ntp4.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp5.aliyun.com nomodify notrap nopeer noquery restrict ntp5.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp6.aliyun.com nomodify notrap nopeer noquery restrict ntp6.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp7.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp8.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp9.cloud.aliyuncs.com nomodify notrap nopeer noquery server ntp.aliyun.com iburst minpoll 4 maxpoll 10 server ntp.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp1.aliyun.com iburst minpoll 4 maxpoll 10 server ntp1.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp10.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp11.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp12.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp2.aliyun.com iburst minpoll 4 maxpoll 10 server ntp2.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp3.aliyun.com iburst minpoll 4 maxpoll 10 server ntp3.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp4.aliyun.com iburst minpoll 4 maxpoll 10 server ntp4.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp5.aliyun.com iburst minpoll 4 maxpoll 10 server ntp5.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp6.aliyun.com iburst minpoll 4 maxpoll 10 server ntp6.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp7.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp8.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp9.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 EOF
配置MOTD服務(wù)
在制作云市場鏡像過程中,建議您配置MOTD(Message of the Day)服務(wù)。
MOTD服務(wù)是Linux系統(tǒng)中的一項功能,它可以在用戶登錄到系統(tǒng)后顯示一條歡迎信息或者系統(tǒng)公告。示例命令如下:
echo -e "\nWelcome to Alibaba Cloud Elastic Compute Service ! \n" > /etc/motd
關(guān)閉Firewalld服務(wù)
在制作云市場鏡像過程中,建議您關(guān)閉Firewalld服務(wù)。Firewalld是一種在Linux系統(tǒng)中管理防火墻規(guī)則的服務(wù),云上有安全組做安全防護(hù),您可以關(guān)閉防火墻。示例命令如下:
systemctl stop firewalld systemctl disable firewalld
配置PIP源
如果系統(tǒng)存在PIP源配置,一般為
~/.pip/pip.conf
文件,推薦使用阿里云的PIP源地址,便于從阿里云的源中獲取到最新的軟件包。[global] index-url=http://mirrors.cloud.aliyuncs.com/pypi/simple/ [install] trusted-host=mirrors.cloud.aliyuncs.com
配置網(wǎng)絡(luò)
如果您使用NetworkManager或者network網(wǎng)絡(luò)服務(wù),需配置
/etc/sysconfig/network-scripts/ifcfg-eth0
文件內(nèi)容如下:DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes
其他網(wǎng)絡(luò)服務(wù)配置,請參見配置輔助彈性網(wǎng)卡。
內(nèi)核參數(shù)配置
配置kernelopt
在制作云市場鏡像過程中,您需要配置GRUB的kernelopt內(nèi)核參數(shù),以確保系統(tǒng)能夠正常啟動。以Debian系統(tǒng)為例,示例命令如下:
在
/etc/default/grub
文件GRUB_CMDLINE_LINUX=
一行中,添加如下信息。x86_64架構(gòu)
net.ifnames=0 console=tty0 console=ttyS0,115200n8
ARM64架構(gòu)
net.ifnames=0 console=tty0 console=ttyAMA0,115200n8
運行
sudo update-grub2
命令,使GRUB配置生效。說明不同操作系統(tǒng)GRUB配置文件路徑不同,因此GRUB配置生效的命令不同。更多信息,請參見Linux自定義鏡像如何適配NVMe系統(tǒng)盤?中關(guān)于GRUB配置生效的操作命令。
配置sysctl
在制作云市場鏡像過程中,建議您配置sysctl參數(shù),便于調(diào)整和優(yōu)化Linux內(nèi)核的運行參數(shù)。
修改
/etc/sysctl.conf
內(nèi)容如下。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
命令使內(nèi)核參數(shù)修改生效。
清理鏡像信息
為了提高系統(tǒng)的安全性,鏡像發(fā)布前,建議您鎖定root賬戶,修改ssh PasswordAuthentication權(quán)限(實例第一次啟動如果配置密碼則會開啟該權(quán)限)。
sed -i 's/^AddressFamily.*//' $dst
sed -i 's/^SyslogFacility.*//' $dst
sed -i 's/^PermitRootLogin.*//' $dst
sed -i 's/^PasswordAuthentication.*//' $dst
echo UseDNS no >> $dst
echo AddressFamily inet >> $dst
echo SyslogFacility AUTHPRIV >> $dst
echo PermitRootLogin yes >> $dst
echo PasswordAuthentication yes >> $dst
passwd -l root
sed -i -e 's/root:[^:]*:/root:*:/g' /etc/shadow
發(fā)布鏡像前,各操作系統(tǒng)發(fā)布商可以根據(jù)自己本身情況進(jìn)行清理歷史記錄以及日志等操作。