Adicione um script de análise a uma imagem Linux que utilize uma versão de sistema operacional não suportada pelo ECS e incompatível com cloud-init. Isso permite a configuração automática na primeira inicialização.
Uma imagem Linux com versão de sistema operacional não suportada é tratada como imagem de plataforma não padrão. Essas imagens baseiam-se em sistemas operacionais padrão, mas possuem arquivos de sistema, ambientes ou aplicações que não atendem aos requisitos da plataforma. Ao importar, selecione uma das seguintes opções de OS Version:
Others Linux: O ECS não processa instâncias criadas a partir deste tipo de imagem. É necessário configurar manualmente o endereço IP, rotas, senha e outras definições após a criação da instância.
Customized Linux: Exige a configuração descrita neste tópico antes da importação.
Pré-requisitos
A imagem deve atender aos seguintes requisitos:
A primeira partição (geralmente /dev/sda1 ou /dev/vda1) possui permissões de escrita.
-
O sistema de arquivos da primeira partição é FAT32, EXT2, EXT3, EXT4 ou UFS.
NotaExecute
blkid /dev/sdXnpara verificar o tipo de sistema de arquivos. Substitua /dev/sdXn pelo caminho real da primeira partição, como /dev/sda1. -
O tamanho virtual da imagem excede 5 GiB.
NotaExecute
df -h /dev/sdXnpara verificar o espaço da partição. Substitua /dev/sdXn pelo caminho real da primeira partição, como /dev/sda1.
A imagem também precisa cumprir estes requisitos de segurança:
Não há vulnerabilidades de alto risco exploráveis remotamente na imagem.
Ao fazer login em uma instância pelo terminal de gerenciamento (VNC), altere a senha padrão no primeiro acesso antes de realizar qualquer operação.
O par de chaves SSH inicial deve ser gerado pela Alibaba Cloud. Pares de chaves SSH padrão não são suportados.
Procedimento
Faça login na máquina virtual de source como usuário root.
-
Crie um diretório chamado
aliyun_custom_imageno diretório raiz da primeira partição.mkdir /aliyun_custom_imageNa primeira inicialização, a Alibaba Cloud grava informações da instância, como hostname, senha do usuário root e endereços de servidor DNS, no arquivo
os.confdentro do diretórioaliyun_custom_image. O sistema cria o arquivoos.confautomaticamente caso ele não exista.Exemplo de conteúdo do arquivo
os.conf:hostname=<yourHostName> password=<yourPassword> eth0_ip_addr=10.0.0.2 eth0_mac_addr=00:xx:xx:xx:xx:23 eth0_netmask=255.255.255.0 eth0_gateway=10.0.0.1 eth0_route="0.0.0.0/0 10.0.0.1" dns_nameserver="7.7.X.X 8.8.8.8"Parâmetros do exemplo:
Parâmetro
Descrição
hostnameHostname da instância.
passwordSenha do usuário root.
eth0_ip_addrEndereço IP da NIC eth0.
eth0_mac_addrEndereço MAC da NIC eth0.
eth0_netmaskMáscara de sub-rede da NIC eth0.
eth0_gatewayEndereço IP do gateway padrão da eth0.
eth0_routeRotas internas para eth0. Separadas por espaço.
dns_nameserverEndereços dos servidores DNS. Separados por espaço.
-
Crie um script de análise, como um arquivo de serviço chamado customized-config.service, para ler e aplicar as configurações do sistema a partir do arquivo
os.conf.Este script executa na primeira inicialização para definir o hostname, a senha do usuário root, os endereços de servidor DNS e as configurações de rede.
Script de exemplo:
#!/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 exists 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 interface_cfg="/etc/sysconfig/network-scripts/ifcfg-${interface}" cat << EOF > $interface_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 -
Ative a execução do script na inicialização do sistema.
Os comandos abaixo aplicam-se ao Ubuntu. Adapte-os conforme seu sistema operacional.
sudo systemctl daemon-reload sudo systemctl enable customized-config.serviceNotaImagens personalizadas criadas a partir de uma instância Customized Linux herdam este script de inicialização. A Alibaba Cloud aplica as configurações do
os.confapenas na primeira inicialização.
Referências
Após concluir a configuração, selecione Customized Linux como OS Version ao importar a imagem personalizada.