>  기사  >  운영 및 유지보수  >  사용자 정의 이미지를 가져올 때 사용자 정의 Linux를 선택하는 방법

사용자 정의 이미지를 가져올 때 사용자 정의 Linux를 선택하는 방법

坏嘻嘻
坏嘻嘻원래의
2018-09-18 14:59:152442검색

이 글의 내용은 커스텀 이미지를 가져올 때 커스텀 이미지를 선택하는 방법에 대한 내용입니다. 필요한 친구들이 참고하시면 좋을 것 같습니다.

사용자 정의 Linux 사용자 정의 이미지

이미지 운영 체제가 Alibaba Cloud에서 지원하는 기존 플랫폼 유형에 속하지 않고 cloud-init를 설치할 수 없는 경우 사용자 정의 Linux( 사용자 정의 이미지) 사용자 정의 이미지를 가져올 때. Alibaba Cloud는 사용자 정의된 Linux 이미지를 인식할 수 없는 운영 체제 유형으로 처리하며 ECS 인스턴스의 초기 시작에 필요한 표준 구성 정보가 부족합니다. 이미지를 가져오기 전에 이 문서에 설명된 대로 사용자 정의 이미지에 구문 분석 스크립트를 추가해야 합니다. 초기 시작. 자동 구성 예.

Restrictions

Customized Linux 이미지의 첫 번째 파티션은 쓰기 가능해야 합니다.

맞춤형 Linux 이미지의 첫 번째 파티션 유형은 FAT32, EXT2, EXT3, EXT4 또는 UFS를 지원합니다.

맞춤형 Linux 이미지의 가상 파일 크기는 5GiB보다 커야 합니다.

맞춤형 Linux 이미지에는 다음과 같은 보안 요구 사항이 있습니다.

원격으로 악용될 수 있는 고위험 취약점이 없어야 합니다.

콘솔의 관리 터미널을 사용하여 인스턴스에 로그인할 때 초기 기본 비밀번호가 있는 경우 처음 로그인할 때 변경해야 합니다. 비밀번호를 변경하기 전에 인스턴스를 입력하여 작업을 수행하세요.

기본 SSH 키 쌍은 지원되지 않으며 초기 SSH 키 쌍은 Alibaba Cloud에서 무작위로 생성해야 합니다.

구성 방법

이미지의 첫 번째 파티션의 루트 디렉터리에 aliyun_custom_image 새 디렉터리를 만듭니다. .

이 맞춤형 Linux 이미지를 사용하여 생성된 인스턴스가 처음 시작되면 Alibaba Cloud는 aliyun_custom_image 디렉터리의 os.conf 파일에 인스턴스 관련 구성 정보를 작성합니다. os.conf 파일이 없으면 시스템이 자동으로 생성합니다.

이미지에 구문 분석 스크립트를 생성하여 os.conf 파일의 시스템 구성을 구문 분석합니다. 스크립팅에 대한 구문 분석 스크립트 고려 사항 및 구문 분석 스크립트 예제를 참조하세요.

os.conf 파일 예시

클래식 네트워크 유형 예시

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"
eth1_ip_addr=42.120.74.105
eth1_mac_addr=00:8c:fa:5e:14:24
eth1_netmask=255.255.255.0
eth1_gateway=42.120.74.1
eth1_route="0.0.0.0/0 42.120.74.1"
dns_nameserver="7.7.7.7 8.8.8.8"

매개변수 설명은 다음 표에 나와 있습니다.

사용자 정의 이미지를 가져올 때 사용자 정의 Linux를 선택하는 방법

개인 네트워크 VPC 유형 인스턴스

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"
#🎜 🎜# 매개변수 설명은 다음 표에 나와 있습니다.

사용자 정의 이미지를 가져올 때 사용자 정의 Linux를 선택하는 방법

스크립트 구문 분석에 대한 참고 사항#🎜 🎜##🎜🎜 #인스턴스가 처음 시작될 때 일반적인 상황에서 Alibaba Cloud는 자동으로 구성 항목의 관련 정보를 루트 디렉터리 아래 aliyun_custom_image 디렉터리의 os.conf 파일에 기록합니다. 첫 번째 파티션. 사용자 정의 Linux 이미지를 구성하려면 이미지에 사전 정의된 구문 분석 스크립트를 생성하여 os.conf 파일에서 인스턴스 구성 정보를 읽고 인스턴스 구성을 완료해야 합니다. 다음은 스크립트를 구문 분석하기 위해 충족해야 하는 조건입니다.

Start at boot: 구문 분석 스크립트는 부팅 시 자동으로 시작되도록 설정해야 합니다. 예를 들어 구문 분석 스크립트를 /etc/init.d/ 디렉터리에 저장합니다.

구성 항목 값 규칙: os.conf 파일 예제의 구성 항목에 설명된 대로 구성 항목 수와 일부 구성 항목에 대한 값 규칙은 VPC와 클래식 네트워크 인스턴스 간에 다릅니다.

구성 파일 읽기 경로: 사용자 정의 Linux 이미지에 대해 I/O 최적화 인스턴스 또는 비I/O 최적화 인스턴스를 생성할 때 첫 번째 파티션에 할당된 장치 이름은 기본적으로 다릅니다. 따라서 구문 분석 스크립트에서 첫 번째 파티션의 장치를 식별하려면 uuid 또는 label을 사용하는 것이 가장 좋습니다. 사용자 비밀번호는 Base64로 인코딩된 문자열이므로 비밀번호 설정 시 관련 처리가 필요합니다.

VPC 또는 클래식 네트워크 결정: 네트워크 유형을 결정하기 위해 스크립트를 구문 분석할 때 eth1_route 또는 기타 eth1 관련 구성 항목이 있는지 확인할 수 있습니다. 현재 인스턴스의 네트워크 유형을 파악한 후 이를 타겟 방식으로 분석하고 처리합니다.

VPC 유형 인스턴스는 os.conf 파일의 eth0_route 매개변수에서 기본 공용 네트워크 경로를 구성합니다.

Classic 네트워크 유형 인스턴스는 os.conf 파일의 eth1_route 매개변수에 기본 공용 네트워크 경로를 구성하고, 내부 네트워크 경로는 eth0_route에 구성합니다.

구성 최적화: os.conf 파일의 구성은 인스턴스의 전체 수명 주기 동안 한 번 실행될 수 있습니다. 구문 분석 스크립트가 성공적으로 실행된 후 os.conf 파일을 삭제하는 것이 좋습니다. 동시에 구문 분석 스크립트가 os.conf 파일 구성을 읽지 않으면 파일의 구성을 실행하지 않습니다.

사용자 정의 이미지 처리: 사용자 정의 Linux 이미지로 생성된 인스턴스를 기반으로 사용자 정의 이미지를 만들 때 이미지에는 이 부팅 스크립트도 포함됩니다. Alibaba Cloud는 인스턴스가 처음 시작될 때 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 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 eth1
grep -q 'eth1' $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 eth1 ${eth1_ip_addr} ${eth1_netmask} ${eth1_mac_addr}
config_route eth1 ${eth1_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 &#39;s/;/\n/&#39; | \
while read line; do
dst=$(echo $line | awk &#39;{print $1}&#39;)
gw=$(echo $line | awk &#39;{print $2}&#39;)
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

위 내용은 사용자 정의 이미지를 가져올 때 사용자 정의 Linux를 선택하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.