云服务器 强制导入镜像

如果用户的 Linux 镜像无法 安装 cloud-init,可以使用强制导入镜像功能完成导入。但由于强制导入的镜像没有安装 cloud-init,腾讯云无法初始化配置云服务器。因此,用户需要根据腾讯云提供的配置文件,自行设置脚本来配置云服务器。这篇档将指导用户在强制导入镜像的前提下进行配置。

相关产品
云服务器 产品页,含版本规格、价格与购买入口。

一、操作场景

腾讯云提供了包含配置信息的 cdrom 设备供用户自行配置。用户需要挂载 cdrom,读取 mount_point/qcloud_action/os.conf 的信息进行配置。如果用户有使用其他配置数据、UserData 的需要,可以直接读取 mount_point/ 下的文件。

二、os.conf 配置文件

os.conf 的基本内容如下:

hostname=VM_10_20_xxxxpassword=GRSgae1fw9frsG.rfrFeth0_ip_addr=10.104.62.201eth0_mac_addr=52:54:00:E1:96:EBeth0_netmask=255.255.192.0eth0_gateway=10.104.0.1dns_nameserver="10.138.224.65 10.182.20.26 10.182.24.12"

注意:以上信息仅参数名有参考意义,参数值仅作示例。

os.conf 中各个参数的意义如下:

参数名称 参数意义
hostname 主机名
password 加密过的密码
eth0_ip_addr eth0 网卡的局域网 IP
eth0_mac_addr eth0 网卡的 MAC 地址
eth0_netmask eth0 网卡的子网掩码
eth0_gateway eth0 网卡的网关
dns_nameserver DNS 解析服务器

三、限制条件

·镜像仍需要满足 导入镜像 中关于 Linux 镜像导入的镜像的限制(cloud-init 除外)。

·导入镜像的系统分区未满。

·导入的镜像不能存在可以被远程利用的漏洞。

·建议用户用强制导入镜像创建实例成功后立即修改密码。

四、注意事项

配置脚本解析需注意以下事项:

·配置脚本需要在开机时自动执行,因此需要根据操作系统类型实现该要求。

·配置脚本需要挂载 /dev/cdrom 设备,并读取该设备挂载点下的 qcloud_action/os.conf 文件,获取配置信息。

可以使用 mount 命令挂载 /dev/cdrom 设备,例如:mount /dev/cdrom /mnt/cdrom。

·腾讯云将加密后的密码放置在 cdrom 中,用户可以使用 chpasswd -e 命令设置密码。
为了避免特殊字符导致的问题,建议先将密码放置到文件中,然后使用 chpasswd -e < passwd_file 的方式设置密码。

关于密码处理方式:建议将加密后的密码放置到一个文件中,例如 passwd_file,然后使用 chpasswd -e < passwd_file 的方式设置密码。这样做的好处是可以避免特殊字符导致的问题,同时也可以方便地修改密码。当然,也可以直接在脚本中使用 chpasswd -e 命令设置密码,但需要注意特殊字符的处理。

·使用强制导入镜像制作的实例再制作镜像时,需要保证脚本依然会被执行,以保证实例正确配置。也可以在该实例中安装 cloud-init。

五、操作步骤

注意:腾讯云提供一份基于 CentOS 的示例脚本,用户可以根据示例脚本创建针对自己镜像的配置脚本。创建过程中,需要注意以下几点:

1. 根据以下脚本示例,创建 os_config 脚本。
用户可根据实际情况修改 os_config 脚本。

#!/bin/bash### BEGIN INIT INFO# Provides: os-config# Required-Start: $local_fs $network $named $remote_fs# Required-Stop:# Should-Stop:# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: config of os-init job# Description: run the config phase without cloud-init### END INIT INFO###################user settings#####################cdrom_path=`blkid -L config-2`load_os_config() { mount_path=$(mktemp -d /mnt/tmp.XXXX) mount /dev/cdrom $mount_path if [[ -f $mount_path/qcloud_action/os.conf ]]; then . $mount_path/qcloud_action/os.conf if [[ -n $password ]]; then passwd_file=$(mktemp /mnt/pass.XXXX) passwd_line=$(grep password $mount_path/qcloud_action/os.conf) echo root:${passwd_line#*=} > $passwd_file fi return 0 else return 1 fi}cleanup() { umount /dev/cdrom if [[ -f $passwd_file ]]; then echo $passwd_file rm -f $passwd_file fi if [[ -d $mount_path ]]; then echo $mount_path rm -rf $mount_path fi}config_password() { if [[ -f $passwd_file ]]; then chpasswd -e < $passwd_file fi}config_hostname(){ if [[ -n $hostname ]]; then sed -i "/^HOSTNAME=.*/d" /etc/sysconfig/network echo "HOSTNAME=$hostname" >> /etc/sysconfig/network fi}config_dns() { if [[ -n $dns_nameserver ]]; then dns_conf=/etc/resolv.conf sed -i '/^nameserver.*/d' $dns_conf for i in $dns_nameserver; do echo "nameserver $i" >> $dns_conf done fi}config_network() { /etc/init.d/network stop cat << EOF > /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0IPADDR=$eth0_ip_addrNETMASK=$eth0_netmaskHWADDR=$eth0_mac_addrONBOOT=yesGATEWAY=$eth0_gatewayBOOTPROTO=staticEOF if [[ -n $hostname ]]; then sed -i "/^${eth0_ip_addr}.*/d" /etc/hosts echo "${eth0_ip_addr} $hostname" >> /etc/hosts fi /etc/init.d/network start}config_gateway() { sed -i "s/^GATEWAY=.*/GATEWAY=$eth0_gateway" /etc/sysconfig/network}###################init#####################start() { if load_os_config ; then config_password config_hostname config_dns config_network cleanup exit 0 else echo "mount ${cdrom_path} failed" exit 1 fi}RETVAL=0case "$1" in start) start RETVAL=$? ;; *) echo "Usage: $0 {start}" RETVAL=3 ;;esacexit $RETVAL

2. 将 os_config 脚本放置到 /etc/init.d/ 目录下,并执行以下命令。

chmod +x /etc/init.d/os_configchkconfig –add os_config

3. 执行以下命令,检查 os_config 是否已经被添加到启动服务中。

chkconfig –list

注意:用户需要自行保证脚本执行正确,如果镜像导入后遇到无法通过 SSH 连接实例,没有网络连接等问题,请尝试通过控制台连接到实例,重新执行脚本,排查问题。如仍然无法处理,请联系 客服。

赞 (0)
上一篇 4天前
下一篇 4天前