Agregue un script de análisis a una imagen de Linux que use una versión de sistema operativo no compatible con ECS y no admita cloud-init, para habilitar la configuración automática en el primer arranque.
Una imagen de Linux con una versión de sistema operativo no compatible se considera una imagen de plataforma no estándar. Estas imágenes se basan en sistemas operativos estándar, pero contienen archivos del sistema, entornos o aplicaciones que no cumplen los requisitos de la plataforma. Seleccione una de las opciones a continuación de OS Version al importar:
Others Linux: ECS no procesa las instancias creadas con este tipo de imagen. Configure manualmente la dirección IP, las rutas, la contraseña y otros parámetros después de crear la instancia.
Customized Linux: Requiere la configuración descrita en este tema antes de la importación.
Requisitos previos
La imagen debe cumplir los siguientes requisitos:
La primera partición (generalmente /dev/sda1 o /dev/vda1) tiene permisos de escritura.
-
La primera partición usa FAT32, EXT2, EXT3, EXT4 o UFS como sistema de archivos.
NotaEjecute
blkid /dev/sdXnpara comprobar el tipo de sistema de archivos. Reemplace /dev/sdXn por la ruta real de la primera partición, como /dev/sda1. -
El tamaño virtual de la imagen supera los 5 GiB.
NotaEjecute
df -h /dev/sdXnpara verificar el espacio de la partición. Reemplace /dev/sdXn por la ruta real de la primera partición, como /dev/sda1.
Procedimiento
Inicie sesión en la máquina virtual de origen como usuario root.
-
Cree un directorio llamado
aliyun_custom_imageen el directorio raíz de la primera partición.mkdir /aliyun_custom_imageEn el primer arranque, Alibaba Cloud escribe información de la instancia, como el nombre de host, la contraseña del usuario root y las direcciones de los servidores DNS, en el archivo
os.confdentro del directorioaliyun_custom_image. El sistema creaos.confautomáticamente si no existe.Contenido de ejemplo de
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 del ejemplo:
Parámetro
Descripción
hostnameNombre de host de la instancia.
passwordContraseña del usuario root.
eth0_ip_addrDirección IP de la NIC eth0.
eth0_mac_addrDirección MAC de la NIC eth0.
eth0_netmaskMáscara de subred de la NIC eth0.
eth0_gatewayDirección IP de la puerta de enlace predeterminada de eth0.
eth0_routeRutas internas para eth0. Separadas por espacios.
dns_nameserverDirecciones de servidores DNS. Separadas por espacios.
-
Cree un script de análisis, como un archivo de servicio llamado
customized-config.service, para leer y aplicar configuraciones del sistema desde el archivoos.conf.Este script se ejecuta en el primer arranque para configurar el nombre de host, la contraseña del usuario root, las direcciones de los servidores DNS y los ajustes de red.
Script de ejemplo:
#!/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 -
Habilite la ejecución del script al inicio del sistema.
Los comandos a continuación son para Ubuntu. Ajústelos según su sistema operativo.
sudo systemctl daemon-reload sudo systemctl enable customized-config.serviceNotaLas imágenes personalizadas creadas a partir de una instancia Customized Linux heredan este script de inicio. Alibaba Cloud aplica la configuración de
os.confúnicamente en el primer arranque.
Referencias
Después de configurar la imagen, seleccione Customized Linux como OS Version cuando importe la imagen personalizada.