Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So wählen Sie „Customized Linux“ aus, wenn Sie ein benutzerdefiniertes Image importieren

So wählen Sie „Customized Linux“ aus, wenn Sie ein benutzerdefiniertes Image importieren

坏嘻嘻
坏嘻嘻Original
2018-09-18 14:59:152442Durchsuche

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 :

So wählen Sie „Customized Linux“ aus, wenn Sie ein benutzerdefiniertes Image importieren

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:

So wählen Sie „Customized Linux“ aus, wenn Sie ein benutzerdefiniertes Image importieren

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 &#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

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn