Der Inhalt dieses Artikels befasst sich mit der Auswahl eines benutzerdefinierten Bildes beim Importieren. Ich hoffe, dass er für Freunde in Not hilfreich ist.
Benutzerdefiniertes Linux-Image anpassen
Wenn Ihr Image-Betriebssystem nicht zu den vorhandenen Plattformtypen gehört, die von Alibaba Cloud unterstützt werden, und cloud-init nicht installiert werden kann, können Sie das benutzerdefinierte Image importieren. Wählen Sie Angepasstes Linux ( angepasstes Versionsbild). Alibaba Cloud behandelt das angepasste Linux-Image als unbekannten Betriebssystemtyp und es fehlen die Standardkonfigurationsinformationen, die für den ersten Start einer ECS-Instanz erforderlich sind. Zur Vereinfachung müssen Sie dem angepassten Image wie in diesem Artikel beschrieben ein Parsing-Skript hinzufügen Beispiele für die Erstinbetriebnahme.
Einschränkungen
Die erste Partition des angepassten Linux-Images muss beschreibbar sein.
Der erste Partitionstyp des benutzerdefinierten Linux-Images unterstützt FAT32, EXT2, EXT3, EXT4 oder UFS.
Benutzerdefinierte Linux-Images müssen eine virtuelle Dateigröße von mehr als 5 GiB haben.
Angepasste Linux-Images unterliegen den folgenden Sicherheitsanforderungen:
Es dürfen keine Schwachstellen mit hohem Risiko vorhanden sein, die aus der Ferne ausgenutzt werden können.
Wenn Sie sich über das Verwaltungsterminal der Konsole bei einer Instanz anmelden und ein anfängliches Standardkennwort vorhanden ist, muss dieses bei der ersten Anmeldung geändert werden Instanz, um alle Vorgänge auszuführen, bevor das Passwort geändert wird.
Das Standard-SSH-Schlüsselpaar wird nicht unterstützt und das anfängliche SSH-Schlüsselpaar muss zufällig von Alibaba Cloud generiert werden.
Konfigurationsmethode
Erstellen Sie ein neues Verzeichnis aliyun_custom_image im Stammverzeichnis der ersten Partition des Images.
Wenn eine mit diesem angepassten Linux-Image erstellte Instanz zum ersten Mal gestartet wird, schreibt Alibaba Cloud instanzbezogene Konfigurationsinformationen in die Datei os.conf im Verzeichnis aliyun_custom_image. Wenn die Datei os.conf nicht vorhanden ist, erstellt das System sie automatisch.
Erstellen Sie im Image ein Parsing-Skript, um die Systemkonfiguration der Datei os.conf zu analysieren. Informationen zur Skripterstellung finden Sie unter „Überlegungen zu Parse-Skripts“ und „Beispiele zu Parse-Skripts“.
Beispiel für eine os.conf-Datei
Klassische Netzwerktypinstanz
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"
Die Parameterbeschreibung ist in der folgenden Tabelle dargestellt :
VPC-Typinstanz
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"
Die Parameterbeschreibung ist in der folgenden Tabelle dargestellt:
Hinweise zum Parsen von Skripten
Wenn die Instanz zum ersten Mal gestartet wird, schreibt Alibaba Cloud unter normalen Umständen automatisch die relevanten Informationen der Konfiguration Elemente im Stammverzeichnis der ersten Partition In der Datei os.conf des Verzeichnisses aliyun_custom_image unter dem Verzeichnis. Um ein benutzerdefiniertes Linux-Image zu konfigurieren, müssen Sie im Image ein vordefiniertes Parsing-Skript erstellen, um die Instanzkonfigurationsinformationen aus der Datei os.conf zu lesen und die Instanzkonfiguration abzuschließen. Im Folgenden sind die Bedingungen aufgeführt, die zum Parsen des Skripts erfüllt sein müssen.
Beim Booten starten: Das Parsing-Skript muss so eingestellt werden, dass es automatisch beim Booten startet. Speichern Sie das Parsing-Skript beispielsweise im Verzeichnis /etc/init.d/.
Wertregeln für Konfigurationselemente: Wie in den Konfigurationselementen im Beispiel der os.conf-Datei beschrieben, unterscheiden sich die Anzahl der Konfigurationselemente und die Wertregeln für einige Konfigurationselemente zwischen VPC- und klassischen Netzwerkinstanzen.
Lesepfad der Konfigurationsdatei: Beim Erstellen einer E/A-optimierten Instanz oder einer nicht E/A-optimierten Instanz für ein angepasstes Linux-Image ist der der ersten Partition zugewiesene Gerätename standardmäßig unterschiedlich. Daher ist es am besten, uuid oder label zu verwenden, um das Gerät der ersten Partition im Parsing-Skript zu identifizieren. Das Benutzerkennwort ist eine Base64-codierte Zeichenfolge und die entsprechende Verarbeitung muss beim Festlegen des Kennworts durchgeführt werden.
VPC oder klassisches Netzwerk bestimmen: Beim Parsen des Skripts zur Bestimmung des Netzwerktyps können Sie prüfen, ob eth1_route oder andere eth1-bezogene Konfigurationselemente vorhanden sind. Ermitteln Sie den Netzwerktyp der aktuellen Instanz und analysieren und verarbeiten Sie ihn anschließend gezielt.
Instanzen vom Typ VPC konfigurieren die standardmäßige öffentliche Netzwerkroute im Parameter eth0_route der Datei os.conf.
Instanzen des klassischen Netzwerktyps konfigurieren die standardmäßige öffentliche Netzwerkroute im Parameter eth1_route der Datei os.conf, und die interne Netzwerkroute wird in eth0_route konfiguriert.
Konfigurationsoptimierung: Die Konfiguration in der os.conf-Datei kann einmal während des gesamten Lebenszyklus der Instanz ausgeführt werden. Es wird empfohlen, die os.conf-Datei nach erfolgreicher Ausführung des Parsing-Skripts zu löschen. Wenn das Parsing-Skript gleichzeitig die Konfiguration der Datei os.conf nicht liest, führt es die Konfiguration in der Datei nicht aus.
Benutzerdefinierte Image-Verarbeitung: Wenn Sie ein benutzerdefiniertes Image basierend auf einer Instanz erstellen, die von einem benutzerdefinierten Linux-Image erstellt wurde, enthält das Image auch dieses Boot-Skript. Alibaba Cloud schreibt die os.conf-Konfiguration, wenn die Instanz zum ersten Mal gestartet wird, und das Analyseskript kann die entsprechende Konfiguration ausführen, wenn es die Konfiguration erkennt.
修改相关配置时的处理:当实例的配置信息通过阿里云的控制台或 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 '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
Das obige ist der detaillierte Inhalt vonSo wählen Sie „Customized Linux' aus, wenn Sie ein benutzerdefiniertes Image importieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!