Ajoutez un script d'analyse à une image Linux utilisant une version du système d'exploitation non prise en charge par ECS et incompatible avec cloud-init, afin de permettre une configuration automatique au premier démarrage.
Une image Linux dont la version du système d'exploitation n'est pas prise en charge est considérée comme une image de plateforme non standard. Ces images reposent sur des systèmes d'exploitation standards, mais leurs fichiers système, environnements ou applications ne répondent pas aux exigences de la plateforme. Lors de l'importation, sélectionnez l'une des options suivantes pour le champ OS Version :
Others Linux : ECS ne traite pas les instances créées à partir de ce type d'image. Vous devez configurer manuellement l'adresse IP, les routes, le mot de passe et les autres paramètres après la création de l'instance.
Customized Linux : Requiert la configuration décrite dans cette rubrique avant l'importation.
Prérequis
L'image doit répondre aux exigences suivantes :
La première partition (généralement /dev/sda1 ou /dev/vda1) dispose des autorisations d'écriture.
-
La première partition utilise FAT32, EXT2, EXT3, EXT4 ou UFS comme système de fichiers.
RemarqueExécutez
blkid /dev/sdXnpour vérifier le type de système de fichiers. Remplacez /dev/sdXn par le chemin réel de la première partition, par exemple /dev/sda1. -
La taille virtuelle de l'image dépasse 5 GiB.
RemarqueExécutez
df -h /dev/sdXnpour vérifier l'espace de la partition. Remplacez /dev/sdXn par le chemin réel de la première partition, par exemple /dev/sda1.
Procédure
Connectez-vous à la machine virtuelle source en tant qu'utilisateur root.
-
Créez un répertoire nommé
aliyun_custom_imagedans le répertoire racine de la première partition.mkdir /aliyun_custom_imageLors du premier démarrage, Alibaba Cloud écrit les informations de l'instance, telles que le nom d'hôte, le mot de passe de l'utilisateur root et les adresses des serveurs DNS, dans le fichier
os.confsitué dans le répertoirealiyun_custom_image. Le système crée automatiquementos.confs'il n'existe pas.Exemple de contenu du fichier
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"Paramètres de l'exemple :
Parameter
Description
hostnameNom d'hôte de l'instance.
passwordMot de passe de l'utilisateur root.
eth0_ip_addrAdresse IP de la carte réseau eth0.
eth0_mac_addrAdresse MAC de la carte réseau eth0.
eth0_netmaskMasque de sous-réseau de la carte réseau eth0.
eth0_gatewayAdresse IP de la passerelle par défaut d'eth0.
eth0_routeRoutes internes pour eth0. Séparées par des espaces.
dns_nameserverAdresses des serveurs DNS. Séparées par des espaces.
-
Créez un script d'analyse, tel qu'un fichier de service nommé customized-config.service, pour lire et appliquer les configurations système à partir du fichier
os.conf.Ce script s'exécute au premier démarrage pour configurer le nom d'hôte, le mot de passe de l'utilisateur root, les adresses des serveurs DNS et les paramètres réseau.
Exemple de script :
#!/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 -
Activez le script pour qu'il s'exécute au démarrage du système.
Les commandes suivantes sont destinées à Ubuntu. Adaptez-les à votre système d'exploitation.
sudo systemctl daemon-reload sudo systemctl enable customized-config.serviceRemarqueLes images personnalisées créées à partir d'une instance Customized Linux héritent de ce script de démarrage. Alibaba Cloud applique les paramètres
os.confuniquement lors du premier démarrage.
Références
Après la configuration, sélectionnez Customized Linux comme version du système d'exploitation lorsque vous importez l'image personnalisée.