您好,登錄后才能下訂單哦!
導(dǎo)入自定義鏡像時(shí)選擇Customized Linux的方法?這個(gè)問(wèn)題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過(guò)這個(gè)問(wèn)題能讓你收獲頗深。下面是小編給大家?guī)?lái)的參考內(nèi)容,讓我們一起來(lái)看看吧!
定制 Linux 自定義鏡像
當(dāng)您的鏡像操作系統(tǒng)不在阿里云所支持的已有平臺(tái)類型中,亦不能安裝 cloud-init 時(shí),您可以在導(dǎo)入自定義鏡像時(shí)選擇 Customized Linux(定制版鏡像)。阿里云將定制版 Linux 鏡像當(dāng)作無(wú)法識(shí)別的操作系統(tǒng)類型,缺少初次啟動(dòng)ECS實(shí)例時(shí)所必要的標(biāo)準(zhǔn)配置信息,需要您導(dǎo)入鏡像前根據(jù)本文描述在定制版鏡像中添加解析腳本,便于初次啟動(dòng)時(shí)自動(dòng)化配置實(shí)例。
限制條件
Customized Linux 鏡像的第一個(gè)分區(qū)必須可以被寫入。
Customized Linux 鏡像的第一個(gè)分區(qū)類型支持 FAT32、EXT2、EXT3、EXT4 或 UFS。
Customized Linux 鏡像的虛擬文件大小必須大于 5 GiB。
Customized Linux 鏡像有如下安全要求:
不能存在可被遠(yuǎn)程利用的高危漏洞。
使用控制臺(tái)的 管理終端 登錄實(shí)例時(shí),如果存在初始默認(rèn)密碼,必須在首次登錄時(shí)修改,修改密碼之前不允許進(jìn)入實(shí)例做任何操作。
不支持默認(rèn) SSH 密鑰對(duì),初始 SSH 密鑰對(duì)必須由阿里云隨機(jī)生成。
配置方法
在鏡像的第一個(gè)分區(qū)的根目錄下新建目錄 aliyun_custom_image。
使用該 Customized Linux 鏡像所創(chuàng)建的實(shí)例初次啟動(dòng)時(shí),阿里云會(huì)在 aliyun_custom_image 目錄的 os.conf 文件中寫入實(shí)例相關(guān)配置信息。如果不存在 os.conf 文件,系統(tǒng)則自動(dòng)創(chuàng)建。
在鏡像中創(chuàng)建一份解析腳本,用以解析 os.conf 文件的系統(tǒng)配置。參閱 解析腳本注意事項(xiàng) 和 解析腳本示例編寫腳本。
os.conf 文件示例
經(jīng)典網(wǎng)絡(luò)類型實(shí)例
hostname=iZ23r29djmjZ password=cXdlcjEyMzQK eth0_ip_addr=10.171.254.123 eth0_mac_addr=00:8c:fa:5e:14:23 eth0_netmask=255.255.255.0 eth0_gateway=10.171.254.1 eth0_route="10.0.0.0/8 10.171.254.1;172.16.0.0/12 10.171.254.1" eth2_ip_addr=42.120.74.105 eth2_mac_addr=00:8c:fa:5e:14:24 eth2_netmask=255.255.255.0 eth2_gateway=42.120.74.1 eth2_route="0.0.0.0/0 42.120.74.1" dns_nameserver="7.7.7.7 8.8.8.8"
參數(shù)說(shuō)明如下表所示:
專有網(wǎng)絡(luò) VPC 類型實(shí)例
hostname=iZ23r29djmjZ password=cXdlcjEyMzQK eth0_ip_addr=10.171.254.123 eth0_mac_addr=00:8c:fa:5e:14:23 eth0_netmask=255.255.255.0 eth0_gateway=10.171.254.1 eth0_route="0.0.0.0/0 10.171.254.1" dns_nameserver="7.7.7.7 8.8.8.8"
參數(shù)說(shuō)明如下表所示:
解析腳本注意事項(xiàng)
實(shí)例初次啟動(dòng)時(shí),正常情況下阿里云自動(dòng)將配置項(xiàng)的相關(guān)信息寫入第一個(gè)分區(qū)的根目錄下 aliyun_custom_image 目錄的 os.conf 文件中。配置 Customized Linux 鏡像必須要在鏡像中創(chuàng)建預(yù)定義解析腳本,用以從 os.conf 文件中讀取實(shí)例配置信息并完成實(shí)例配置。以下為解析腳本需要滿足的條件。
開機(jī)啟動(dòng):解析腳本需要設(shè)置成開機(jī)自啟動(dòng),例如,將解析腳本存放在 /etc/init.d/ 目錄下。
配置項(xiàng)取值規(guī)則:如 os.conf 文件示例 的配置項(xiàng)所述,VPC 與經(jīng)典網(wǎng)絡(luò)實(shí)例的配置項(xiàng)數(shù)量和部分配置項(xiàng)的取值規(guī)則均有所不同。
配置文件讀取路徑:Customized Linux 鏡像在創(chuàng)建 I/O 優(yōu)化實(shí)例或非 I/O 優(yōu)化實(shí)例時(shí),為第一個(gè)分區(qū)所分配的設(shè)備名默認(rèn)不一樣。所以在解析腳本中最好可以用 uuid 或 label 識(shí)別第一個(gè)分區(qū)的設(shè)備。用戶密碼為 Base64 編碼的字符串,設(shè)置密碼時(shí)需要做相關(guān)處理。
判斷 VPC 或經(jīng)典網(wǎng)絡(luò):解析腳本判斷該網(wǎng)絡(luò)類型時(shí),可以查看是否存在 eth2_route 或其他 eth2 相關(guān)的配置項(xiàng)。判斷出當(dāng)前實(shí)例的網(wǎng)絡(luò)類型后再有針對(duì)性地解析和處理。
VPC 類型實(shí)例在 os.conf 文件的 eth0_route 參數(shù)中配置默認(rèn)公網(wǎng)路由。
經(jīng)典網(wǎng)絡(luò)類型實(shí)例在 os.conf 文件的 eth2_route 參數(shù)中配置默認(rèn)公網(wǎng)路由,內(nèi)網(wǎng)路由配置在 eth0_route 中。
配置優(yōu)化:os.conf 文件中的配置在實(shí)例的整個(gè)生命周期中執(zhí)行一次即可,解析腳本執(zhí)行成功后建議刪除 os.conf 文件。同時(shí)解析腳本如果沒有讀取到 os.conf 文件配置,則不執(zhí)行文件中的配置。
自定義鏡像處理:根據(jù) Customized Linux 鏡像創(chuàng)建的實(shí)例再制作自定義鏡像時(shí),鏡像中也會(huì)包含這個(gè)開機(jī)啟動(dòng)腳本。阿里云會(huì)在實(shí)例第一次啟動(dòng)時(shí)寫入 os.conf 配置,解析腳本在檢測(cè)到該配置時(shí)即可執(zhí)行相關(guān)配置。
修改相關(guān)配置時(shí)的處理:當(dāng)實(shí)例的配置信息通過(guò)阿里云的控制臺(tái)或 API 發(fā)生變更時(shí),阿里云將相關(guān)信息寫入到 os.conf 文件中,解析腳本將被再次執(zhí)行從而下發(fā)這些更改。
解析腳本示例
以下為以 CentOS 操作系統(tǒng)為例的解析腳本示例,僅供參考,您需要根據(jù)實(shí)際的操作系統(tǒng)類型調(diào)整腳本內(nèi)容。在使用腳本前,務(wù)必在鏡像中調(diào)試腳本,并保證調(diào)試通過(guò)。
#!/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 INFO first_partition_dir='/boot/' os_conf_dir=${first_partition_dir}/aliyun_custom_image os_conf_file=${os_conf_dir}/os.conf load_os_conf() { if [[ -f $os_conf_file ]]; then . $os_conf_file return 0 else return 1 fi } cleanup() { # ensure $os_conf_file is deleted, to avoid repeating config system rm $os_conf_file >& /dev/null # ensure $os_conf_dir is exitst mkdir -p $os_conf_dir } config_password() { if [[ -n $password ]]; then password=$(echo $password | base64 -d) if [[ $? == 0 && -n $password ]]; then echo "root:$password" | chpasswd fi fi } config_hostname() { if [[ -n $hostname ]]; then sed -i "s/^HOSTNAME=.*/HOSTNAME=$hostname/" /etc/sysconfig/network hostname $hostname 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 } is_classic_network() { # vpc: eth0 # classic: eth0 eth2 grep -q 'eth2' $os_conf_file } config_network() { /etc/init.d/network stop config_interface eth0 ${eth0_ip_addr} ${eth0_netmask} ${eth0_mac_addr} config_route eth0 ${eth0_route} if is_classic_network ; then config_interface eth2 ${eth2_ip_addr} ${eth2_netmask} ${eth2_mac_addr} config_route eth2 ${eth2_route} fi /etc/init.d/network start } config_interface() { local interface=$1 local ip=$2 local netmask=$3 local mac=$4 inteface_cfg="/etc/sysconfig/network-scripts/ifcfg-${interface}" cat << EOF > $inteface_cfg DEVICE=$interface IPADDR=$ip NETMASK=$netmask HWADDR=$mac ONBOOT=yes BOOTPROTO=static EOF } config_default_gateway() { local gateway=$1 sed -i "s/^GATEWAY=.*/GATEWAY=$gateway/" /etc/sysconfig/network } config_route() { local interface=$1 local route=$2 route_conf=/etc/sysconfig/network-scripts/route-${interface} > $route_conf echo $route | sed 's/;/\n/' | \ while read line; do dst=$(echo $line | awk '{print $1}') gw=$(echo $line | awk '{print $2}') if ! grep -q "$dst" $route_conf 2> /dev/null; then echo "$dst via $gw dev $interface" >> $route_conf fi if [[ "$dst" == "0.0.0.0/0" ]]; then config_default_gateway $gw fi done } ################## sysvinit service portal #################### start() { if load_os_conf ; then config_password config_network config_hostname config_dns cleanup return 0 else echo "not load $os_conf_file" return 0 fi } RETVAL=0 case "$1" in start) start RETVAL=$? ;; *) echo "Usage: $0 {start}" RETVAL=3 ;; esac exit $RETVAL
感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)導(dǎo)入自定義鏡像時(shí)選擇Customized Linux的方法大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。