如何导入自定义镜像时选择 Customized Linux(定制版镜像)

本篇文章给大家带来的内容是关于如何导入自定义镜像时选择定制版镜像,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

定制 Linux 自定义镜像

当您的镜像操作系统不在阿里云所支持的已有平台类型中,亦不能安装 cloud-init 时,您可以在导入自定义镜像时选择 Customized Linux(定制版镜像)。阿里云将定制版 Linux 镜像当作无法识别的操作系统类型,缺少初次启动ECS实例时所必要的标准配置信息,需要您导入镜像前根据本文描述在定制版镜像中添加解析脚本,便于初次启动时自动化配置实例。

限制条件

Customized Linux 镜像的第一个分区必须可以被写入。

Customized Linux 镜像的第一个分区类型支持 FAT32、EXT2、EXT3、EXT4 或 UFS。

Customized Linux 镜像的虚拟文件大小必须大于 5 GiB。

Customized Linux 镜像有如下安全要求:

不能存在可被远程利用的高危漏洞。

使用控制台的 管理终端 登录实例时,如果存在初始默认密码,必须在首次登录时修改,修改密码之前不允许进入实例做任何操作。

不支持默认 SSH 密钥对,初始 SSH 密钥对必须由阿里云随机生成。

配置方法

在镜像的第一个分区的根目录下新建目录 aliyun_custom_image。

使用该 Customized Linux 镜像所创建的实例初次启动时,阿里云会在 aliyun_custom_image 目录的 os.conf 文件中写入实例相关配置信息。如果不存在 os.conf 文件,系统则自动创建。

在镜像中创建一份解析脚本,用以解析 os.conf 文件的系统配置。参阅 解析脚本注意事项 和 解析脚本示例编写脚本。

os.conf 文件示例

经典网络类型实例

hostname=iZ23r29djmjZpassword=cXdlcjEyMzQKeth0_ip_addr=10.171.254.123eth0_mac_addr=00:8c:fa:5e:14:23eth0_netmask=255.255.255.0eth0_gateway=10.171.254.1eth0_route="10.0.0.0/8 10.171.254.1;172.16.0.0/12 10.171.254.1"eth1_ip_addr=42.120.74.105eth1_mac_addr=00:8c:fa:5e:14:24eth1_netmask=255.255.255.0eth1_gateway=42.120.74.1eth1_route="0.0.0.0/0 42.120.74.1"dns_nameserver="7.7.7.7 8.8.8.8"

参数说明如下表所示:

微信截图_20180918145545.png

专有网络 VPC 类型实例

hostname=iZ23r29djmjZpassword=cXdlcjEyMzQKeth0_ip_addr=10.171.254.123eth0_mac_addr=00:8c:fa:5e:14:23eth0_netmask=255.255.255.0eth0_gateway=10.171.254.1eth0_route="0.0.0.0/0 10.171.254.1"dns_nameserver="7.7.7.7 8.8.8.8"

参数说明如下表所示:

微信截图_20180918145636.png

解析脚本注意事项

实例初次启动时,正常情况下阿里云自动将配置项的相关信息写入第一个分区的根目录下 aliyun_custom_image 目录的 os.conf 文件中。配置 Customized Linux 镜像必须要在镜像中创建预定义解析脚本,用以从 os.conf 文件中读取实例配置信息并完成实例配置。以下为解析脚本需要满足的条件。

开机启动:解析脚本需要设置成开机自启动,例如,将解析脚本存放在 /etc/init.d/ 目录下。

配置项取值规则:如 os.conf 文件示例 的配置项所述,VPC 与经典网络实例的配置项数量和部分配置项的取值规则均有所不同。

配置文件读取路径:Customized Linux 镜像在创建 I/O 优化实例或非 I/O 优化实例时,为第一个分区所分配的设备名默认不一样。所以在解析脚本中最好可以用 uuid 或 label 识别第一个分区的设备。用户密码为 Base64 编码的字符串,设置密码时需要做相关处理。

判断 VPC 或经典网络:解析脚本判断该网络类型时,可以查看是否存在 eth1_route 或其他 eth1 相关的配置项。判断出当前实例的网络类型后再有针对性地解析和处理。

VPC 类型实例在 os.conf 文件的 eth0_route 参数中配置默认公网路由。

经典网络类型实例在 os.conf 文件的 eth1_route 参数中配置默认公网路由,内网路由配置在 eth0_route 中。

配置优化:os.conf 文件中的配置在实例的整个生命周期中执行一次即可,解析脚本执行成功后建议删除 os.conf 文件。同时解析脚本如果没有读取到 os.conf 文件配置,则不执行文件中的配置。

自定义镜像处理:根据 Customized Linux 镜像创建的实例再制作自定义镜像时,镜像中也会包含这个开机启动脚本。阿里云会在实例第一次启动时写入 os.conf 配置,解析脚本在检测到该配置时即可执行相关配置。

修改相关配置时的处理:当实例的配置信息通过阿里云的控制台或 API 发生变更时,阿里云将相关信息写入到 os.conf 文件中,解析脚本将被再次执行从而下发这些更改。

解析脚本示例

以下为以 CentOS 操作系统为例的解析脚本示例,仅供参考,您需要根据实际的操作系统类型调整脚本内容。在使用脚本前,务必在镜像中调试脚本,并保证调试通过。

#!/bin/bash### BEGIN INIT INFO# Provides:          os-conf# 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: The initial os-conf job, config the system.### END INIT INFOfirst_partition_dir='/boot/'os_conf_dir=${first_partition_dir}/aliyun_custom_imageos_conf_file=${os_conf_dir}/os.confload_os_conf() {if [[ -f $os_conf_file ]]; then. $os_conf_filereturn 0elsereturn 1fi}cleanup() {# ensure $os_conf_file is deleted, to avoid repeating config systemrm $os_conf_file >& /dev/null# ensure $os_conf_dir is exitstmkdir -p $os_conf_dir}config_password() {if [[ -n $password ]]; thenpassword=$(echo $password | base64 -d)if [[ $? == 0 && -n $password ]]; thenecho "root:$password" | chpasswdfifi}config_hostname() {if [[ -n $hostname ]]; thensed -i "s/^HOSTNAME=.*/HOSTNAME=$hostname/" /etc/sysconfig/networkhostname $hostnamefi}config_dns() {if [[ -n $dns_nameserver ]]; thendns_conf=/etc/resolv.confsed -i '/^nameserver.*/d' $dns_conffor i in $dns_nameserver; doecho "nameserver $i" >> $dns_confdonefi}is_classic_network() {# vpc: eth0# classic: eth0 eth1grep -q 'eth1' $os_conf_file}config_network() {/etc/init.d/network stopconfig_interface eth0 ${eth0_ip_addr} ${eth0_netmask} ${eth0_mac_addr}config_route eth0 ${eth0_route}if is_classic_network ; thenconfig_interface eth1 ${eth1_ip_addr} ${eth1_netmask} ${eth1_mac_addr}config_route eth1 ${eth1_route}fi/etc/init.d/network start}config_interface() {local interface=$1local ip=$2local netmask=$3local mac=$4inteface_cfg="/etc/sysconfig/network-scripts/ifcfg-${interface}"cat < $inteface_cfgDEVICE=$interfaceIPADDR=$ipNETMASK=$netmaskHWADDR=$macONBOOT=yesBOOTPROTO=staticEOF}config_default_gateway() {local gateway=$1sed -i "s/^GATEWAY=.*/GATEWAY=$gateway/" /etc/sysconfig/network}config_route() {local interface=$1local route=$2route_conf=/etc/sysconfig/network-scripts/route-${interface}> $route_confecho $route | sed 's/;/n/' | while read line; dodst=$(echo $line | awk '{print $1}')gw=$(echo $line | awk '{print $2}')if ! grep -q "$dst" $route_conf 2> /dev/null; thenecho "$dst via $gw dev $interface" >> $route_conffiif [[ "$dst" == "0.0.0.0/0" ]]; thenconfig_default_gateway $gwfidone}################## sysvinit service portal ####################start() {if load_os_conf ; thenconfig_passwordconfig_networkconfig_hostnameconfig_dnscleanupreturn 0elseecho "not load $os_conf_file"return 0fi}RETVAL=0case "$1" in    start)        start        RETVAL=$?    ;;    *)        echo "Usage: $0 {start}"        RETVAL=3    ;;esacexit $RETVAL

以上就是如何导入自定义镜像时选择 Customized Linux(定制版镜像)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/180590.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何使用Hyperf框架进行地理位置服务
上一篇 2026年9月2日 17:00:15
下一篇 2026年9月2日 17:04:24

相关推荐

  • Java javac 命令与当前工作目录解析

    在Java编译环境中,javac命令的“当前目录”指的是命令被执行的物理位置,而非源文件所在的目录。理解这一概念对于正确配置和管理Java项目的编译路径至关重要,特别是当默认的classpath设置为.时,它决定了编译器查找类文件的起点。 1. javac 命令与当前工作目录的定义 在操作系统中,当…

    2026年9月23日
    100
  • Bash Shell 中单引号和双引号的区别

    Bash Shell 中单引号和双引号的区别Bash Shell 中单引号和双引号的区别Bash Shell 中单引号和双引号的区别Bash Shell 中单引号和双引号的区别

    在 linux 命令行中,引号是处理文件名中的空格和特殊字符的常用工具。引号在 shell 脚本中具有“特殊功能”,可能让初学者感到困惑。让我们详细探讨不同类型的引号字符及其在 shell 脚本中的用法。 有四种不同类型的引号字符: 单引号 ‘双引号 “反斜杠 反引号 ` 除…

    2026年9月23日 用户投稿
    500
  • Linux中如何查看服务日志?journalctl与syslog使用指南

    Linux中如何查看服务日志?journalctl与syslog使用指南Linux中如何查看服务日志?journalctl与syslog使用指南Linux中如何查看服务日志?journalctl与syslog使用指南Linux中如何查看服务日志?journalctl与syslog使用指南

    排查linux服务问题时,首选journalctl或syslog类系统查看日志。journalctl适用于systemd系统,可查看内核消息、服务启动输出等,支持按时间、单元、优先级过滤;syslog适用于传统系统,需服务主动发送日志,支持集中管理。掌握两者使用能有效定位问题。 在Linux系统中排…

    2026年9月23日 用户投稿
    100
  • Reflection AI 完成 20 亿美元融资,打造“开放智能”

    美国人工智能初创企业 reflection ai 宣布成功募集 20 亿美元资金,其中英伟达领衔投资 8 亿美元,推动公司估值跃升至 80 亿美元。这家成立仅一年的科技新星,致力于打造“人人可及的前沿开放智能(open intelligence)”。 Reflection AI 表示,已集结一支由顶…

    2026年9月23日
    500
  • [272]如何把Python脚本导出为exe程序

    [272]如何把Python脚本导出为exe程序[272]如何把Python脚本导出为exe程序[272]如何把Python脚本导出为exe程序[272]如何把Python脚本导出为exe程序

    文章目录:一. PyInstaller简介二. PyInstaller在Windows下的安装三. 打包四. 小实例(Windows下) 附加:pyinstaller简介 PyInstaller能够将Python脚本打包成可执行程序,使得在没有Python环境的机器上也可以运行这些程序。 PyIns…

    2026年9月23日 用户投稿
    100
  • VSCode搭建Flutter开发环境(移动开发,完整配置指南)

    本文详细指导如何在VSCode中搭建高效的Flutter开发环境,包括安装JDK、配置JAVA_HOME、安装Android Studio并设置ANDROID_HOME、安装VSCode及Flutter和Dart插件、配置FLUTTER_HOME环境变量,通过flutter doctor检查并解决A…

    2026年9月23日
    100
  • 渗透测试|利用curl回传文件

    在处理低权限shell回传文件的问题时,如果无法使用scp命令且无法安装sshpass,可以考虑使用curl命令进行文件传输。以下是详细的伪原创内容: 至少我们曾经在一起过。 来自:一言 var xhr = new XMLHttpRequest();xhr.open(‘get’, ‘https://…

    2026年9月23日
    200
  • VSCode如何配置Scala开发环境 VSCode搭建Scala项目的完整教程

    首先安装jdk 11或17并正确配置java_home和path环境变量;2. 通过包管理器或官网安装sbt,用于项目构建与依赖管理;3. 在vscode中安装scala (metals)插件,以获得代码补全、错误检查等语言服务;4. 使用sbt new scala/scala-seed.g8创建项…

    2026年9月23日
    100
  • 无代码调整聚类热图分支顺序

    无代码调整聚类热图分支顺序无代码调整聚类热图分支顺序无代码调整聚类热图分支顺序无代码调整聚类热图分支顺序

    聚类热图的分支结构会因不同的聚类算法和距离计算方式而有所不同。在保持分支结构不变的前提下,我们有时需要调整热图分支的顺序,以满足特定的需求。这就是文章聚类热图如何按自己的意愿调整分支顺序的出发点。 现在,这种功能已经移植到BIC平台,具体操作如下: 使用之前的绘图数据: 采用默认的绘图参数: 生成的…

    2026年9月23日 用户投稿
    300
  • Java中ConnectException连接异常的解决方法

    答案:Java中ConnectException通常因服务未启动、网络不通或配置错误导致,需检查服务状态、IP端口配置及防火墙设置,并合理设置连接超时与重试机制。 Java中出现ConnectException通常表示应用程序尝试连接到远程服务器时失败,最常见的原因是目标主机拒绝连接或网络不通。这个…

    2026年9月23日
    200
  • VSCode高效配置Elixir:Phoenix框架、中文提示、模式匹配

    要高效配置vscode支持elixir开发,必须安装elixirls扩展并确保elixir和erlang环境正确;elixirls提供代码补全、跳转、格式化和调试功能,配合手动设置.heex、.leex文件关联为html可优化phoenix框架开发体验;通过安装中文语言包、设置files.encod…

    2026年9月23日
    200
  • 鸿蒙3.0将删除谷歌代码,只是为让国产系统更纯粹

    鸿蒙3.0将删除谷歌代码,只是为让国产系统更纯粹鸿蒙3.0将删除谷歌代码,只是为让国产系统更纯粹鸿蒙3.0将删除谷歌代码,只是为让国产系统更纯粹鸿蒙3.0将删除谷歌代码,只是为让国产系统更纯粹

    作为“聚光灯下诞生的国产系统”,华为鸿蒙系统自诞生之日起就引发了激烈的争论。尽管鸿蒙系统已升级至3.0版本,但关于“鸿蒙系统是否是安卓套壳”的讨论依然是焦点。不过,这可能并不是问题的核心。 鸿蒙系统是套壳吗?对于如今的国内科技企业来说,开发一个系统并不困难。然而,为什么最终存活下来的只有MIUI、F…

    2026年9月23日 用户投稿
    100
  • 分享一个服务器一键测试脚本

    superbench是一个测试linux服务器性能的脚本,让你快速方便了解一台服务器的综合性能,支持硬件基本信息、流媒体解锁检测、磁盘io检测、cpu性能测试、以及国内和国外网络测速、网络路由追踪。 以上就是分享一个服务器一键测试脚本的详细内容,更多请关注创想鸟其它相关文章!

    2026年9月22日
    200
  • Linus Torvalds 批评 Rust 代码格式化工具:称其“完全疯狂”

    近日,linux创始人linus torvalds在linux内核邮件列表中对rust语言的代码格式化工具rustfmt提出了尖锐批评,称其行为“完全疯狂”。 他提到,在Rust代码中,类似use crate::xyz;这样的导入语句,在经过自动格式化后经常被合并为一行,导致原本清晰的结构变得混乱,…

    用户投稿 2026年9月22日
    300
  • 解决TCPDF保存文件权限问题的完整指南

    本文旨在解决使用tcpdf在%ignore_a_1%中生成pdf并保存到服务器(’f’模式)时遇到的“permission denied”错误,尤其是在macos环境下。核心问题通常源于不正确的服务器文件路径或目标文件夹缺乏写入权限。教程将详细阐述如何构建正确的绝对文件路径,…

    2026年9月22日
    300
  • LINUX如何安全地关闭系统_LINUX正确的关机与重启命令

    使用shutdown命令可安全关机,如sudo shutdown -h now立即关机,或+5表示5分钟后关机,-c取消计划;2. poweroff立即断电;3. halt停止系统运行,加–poweroff关闭电源;4. reboot重启系统,也可用shutdown -r +3延迟重启;…

    2026年9月22日
    100
  • MySQL服务无法启动怎么办?常见解决方法

    MySQL服务无法启动怎么办?常见解决方法MySQL服务无法启动怎么办?常见解决方法MySQL服务无法启动怎么办?常见解决方法MySQL服务无法启动怎么办?常见解决方法

    mysql服务无法启动常见原因包括配置错误、端口占用、数据文件损坏或权限问题。解决方法如下:1. 查看错误日志,定位问题根源;2. 检查配置文件是否存在语法错误或路径问题;3. 确认端口(如3306)未被占用;4. 核查数据目录的权限与完整性;5. 必要时修复或重置数据目录,甚至重新安装mysql。…

    2026年9月22日 用户投稿
    100
  • Linux内核13-进程切换

    进程切换,也称为任务切换、上下文切换或任务调度,本文将探讨linux内核中进程切换的实现。我们首先理解几个关键概念。 1.1 硬件上下文 每个进程都有自己的地址空间,但所有进程共享CPU寄存器。因此,在恢复进程执行前,内核必须确保挂起时的寄存器值被重新加载到CPU寄存器中。 这些需要加载到CPU寄存…

    2026年9月22日
    300
  • 如何修改MySQL的默认端口号?

    如何修改MySQL的默认端口号?如何修改MySQL的默认端口号?如何修改MySQL的默认端口号?如何修改MySQL的默认端口号?

    修改mysql默认端口号需编辑配置文件,核心步骤为:1.定位my.cnf或my.ini文件;2.在[mysqld]段落中修改或添加port参数;3.保存后重启mysql服务。更改端口主要出于避免冲突、提升安全性和适应网络策略考虑。连接时需在客户端工具或代码中指定新端口,如命令行加-p参数、编程语言连…

    2026年9月22日 用户投稿
    1300
  • 在 Linux 中如何强制停止进程?kill 和 killall 命令有什么区别?

    在日常工作中,您可能会遇到两个用于在 linux 中强制结束程序的命令:kill和killall。虽然许多 linux 用户熟悉kill命令,但使用killall命令的人相对较少。尽管这两个命令名称相似且目的相同(终止进程),但它们在使用方式和效果上有显著区别。 那么,kill和killall之间有…

    2026年9月22日
    200

发表回复

登录后才能评论
关注微信