Erstellen Sie Ihr eigenes Image mit purem CentOS 5.9 in der Amazon Cloud

Wie Sie wissen, werden in der Amazon-Cloud virtuelle Instanzen auf Basis von Bildern (sog AMI). Amazon stellt eine große Anzahl davon zur Verfügung; Sie können auch öffentliche Bilder verwenden, die von Dritten erstellt wurden, für die der Cloud-Anbieter natürlich keine Verantwortung trägt. Manchmal benötigen Sie jedoch ein sauberes Systemabbild mit den erforderlichen Parametern, das nicht in der Abbildliste enthalten ist. Dann besteht der einzige Ausweg darin, Ihr eigenes AMI zu erstellen.

Die offizielle Dokumentation beschreibt Prozess Erstellen eines „Instanzspeicher-gestützten AMI“. Der Nachteil dieses Ansatzes besteht darin, dass das fertige Image auch in ein „EBS-gestütztes AMI“ konvertiert werden muss.

Wie Sie ohne Zwischenschritte Ihr eigenes EBS-gestütztes AMI in der Amazon-Cloud erstellen, erfahren Sie in diesem Artikel.

Aktionsplan:

  • Bereiten Sie die Umgebung vor
  • Installieren Sie ein sauberes System und nehmen Sie die notwendigen Einstellungen vor
  • Machen Sie einen Snapshot der Festplatte
  • Registrieren Sie AMI

Umgebung vorbereiten

Für unsere Zwecke ist jede Instanz beliebiger Form geeignet, sogar t1.micro. Sie können es über die CLI ausführen:

aws ec2 run-instances --image-id ami-1624987f --max-count 1 --min-count 1 --key-name mel --instance-type t1.micro

Lassen Sie uns ein ebs-Volume erstellen, in dem wir später unser System installieren werden:

aws ec2 create-volume --availability-zone us-east-1a --size 10

Dieser Befehl erstellt für uns eine 10-GB-Festplatte. Wichtig: Die Festplatte muss sich in derselben Zone wie die Instanz befinden (in unserem Fall ist es us-east-1a).
Als nächstes müssen Sie die Festplatte an die Instanz anhängen:

aws ec2 attach-volume --instance-id i-2bc0925b --volume-id vol-08ab3079 --device /dev/xvdf

Melden wir uns nun per SSH bei der Instanz an, formatieren die Festplatte und mounten sie im Verzeichnis:

mkfs.ext3 /dev/xvdf
mkdir /mnt/centos-image
mount /dev/xvdf /mnt/centos-image
cd !$

Installieren von sauberem Centos 5.9

Vor der Installation des Systems müssen Sie einen Verzeichnisbaum erstellen, proc und sysfs mounten und einen Mindestsatz an Geräten erstellen:

mkdir centos-image/{boot,tmp,dev,sys,proc,etc,var}
mount -t proc none /mnt/centos-image/proc/
mount -t sysfs none /mnt/centos-image/sys/
for i in console null zero ; do /sbin/MAKEDEV -d /mnt/centos-image/dev -x $i ; done

Wir werden das System mit yum und der folgenden Konfigurationsdatei installieren:
yum-centos.conf

[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
exclude=*-debuginfo
gpgcheck=0
obsoletes=1
reposdir=/dev/null

[base]
name=CentOS-5.9 - Base
mirrorlist=http://mirrorlist.centos.org/?release=5.9&arch=x86_64&repo=os
#baseurl=http://mirror.centos.org/centos/5.9/os/x86_64/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

[updates]
name=CentOS-5.9 - Updates
mirrorlist=http://mirrorlist.centos.org/?release=5.9&arch=x86_64&repo=updates
#baseurl=http://mirror.centos.org/centos/5.9/updates/x86_64/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

[extras]
name=CentOS-5.9 - Extras
mirrorlist=http://mirrorlist.centos.org/?release=5.9&arch=x86_64&repo=extras
#baseurl=http://mirror.centos.org/centos/5.9/extras/x86_64/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-5

[centosplus]
name=CentOS-5.9 - Plus
mirrorlist=http://mirrorlist.centos.org/?release=5.9&arch=x86_64&repo=centosplus
#baseurl=http://mirror.centos.org/centos/5.9/centosplus/x86_64/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-5

[contrib]
name=CentOS-5.9 - Contrib
mirrorlist=http://mirrorlist.centos.org/?release=5.9&arch=x86_64&repo=contrib
#baseurl=http://mirror.centos.org/centos/5.9/contrib/x86_64/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-5

yum -c ~/yum-centos.conf --installroot=/mnt/centos-image/ -y groupinstall Base

Nach Abschluss des Installationsvorgangs können Sie alle erforderlichen Pakete auf die gleiche Weise installieren:

yum -c ~/yum-centos.conf --installroot=/mnt/centos-image/ install $packet_name

Lassen Sie uns fstab bearbeiten:

vi /mnt/centos-image

/dev/xvda1  /      ext3    defaults        0 0
none       /dev/pts  devpts  gid=5,mode=620  0 0
none       /dev/shm  tmpfs   defaults        0 0
none       /proc     proc    defaults        0 0
none       /sys      sysfs   defaults        0 0

In CentOS 5.9 müssen Sie noch einen Kernel mit Xen-Unterstützung installieren:

yum -c ~/yum-centos.conf --installroot=/mnt/centos-image/ -y install kernel-xen

Grub installieren:

chroot /mnt/centos-image/ grub-install /dev/xvdf

und eine neue initrd generieren:

chroot /mnt/centos-image/
cd boot/
mkinitrd --omit-scsi-modules --with=xennet --with=xenblk --fstab=/etc/fstab --preload=xenblk initrd-2.6.18-348.1.1.el5xen.img 2.6.18-348.1.1.el5xen

Es ist sehr wichtig, alle diese Parameter und eine neue fstab anzugeben, sonst bootet das System nicht.
Als nächstes müssen Sie eine menu.lst-Datei für Grub erstellen:

default=0
timeout=5
hiddenmenu
title CentOS_5.9_(x86_64)
        root (hd0)
        kernel /boot/vmlinuz-2.6.18-348.1.1.el5xen ro root=/dev/xvda1
        initrd /boot/initrd-2.6.18-348.1.1.el5xen.img

Lassen Sie uns das Netzwerk und SSHD konfigurieren:

vi etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes
DEVICE=eth0
BOOTPROTO=dhcp
TYPE=Ethernet
USERCTL=yes
PEERDNS=yes
IPV6INIT=no

vi etc/sysconfig/network
NETWORKING=yes

chroot /mnt/centos5img/ chkconfig --level 2345 network on

vi /mnt/centos5img/etc/ssh/sshd_config
...
UseDNS no
PermitRootLogin without-password

Dadurch erhalten wir ein funktionierendes Netzwerk und die Möglichkeit, uns mit den Schlüsseln bei der Instanz anzumelden. Aber der Schlüssel selbst muss irgendwie an die Instanz übertragen werden. Dies kann mithilfe eines Skripts erfolgen, das den Schlüssel übernimmt und auf der Instanz speichert:

vi /mnt/centos5img/etc/init.d/ec2-get-ssh

ec2-get-ssh#! / Bin / bash
# chkconfig: 2345 95 20
# Prozessname: ec2-get-ssh
# Beschreibung: Erfassen Sie die Anmeldeinformationen des öffentlichen AWS-Schlüssels für den EC2-Benutzer

#Quellfunktionsbibliothek
. /etc/rc.d/init.d/functions

# Quellnetzwerkkonfiguration
[ -r /etc/sysconfig/network ] &&. /etc/sysconfig/network

# Ersetzen Sie die folgenden Umgebungsvariablen für Ihr System
export PATH=:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin

# Überprüfen Sie, ob das Netzwerk konfiguriert ist
if [ "${NETWORKING}" = "no" ]; Dann
echo „Netzwerk ist nicht konfiguriert.“
Beenden Sie 1
fi

start () {
Wenn [! -d /root/.ssh ]; Dann
mkdir -p /root/.ssh
chmod 700 /root/.ssh
fi
# Rufen Sie den öffentlichen Schlüssel über HTTP vom Metadatenserver ab
Curl -f 169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/mein-öffentlicher-schlüssel
wenn [$? -eq 0 ]; Dann
echo „EC2: Öffentlichen Schlüssel vom Metadatenserver über HTTP abrufen.“
cat /tmp/my-public-key >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
rm /tmp/mein-öffentlicher-schlüssel
fi
}

halt() {
echo „Hier gibt es nichts zu tun“
}

Neustart() {
halt
Anfang
}

# Sehen Sie, wie wir genannt wurden.
Fall "$ 1" in
Anfang)
Anfang
;;
halt)
halt
;;
Neustart)
Wiederaufnahme
;;
*)
echo $"Verwendung: $0 {start|stop|restart}"
Beenden Sie 1
esac

$ verlassen?
Machen wir es ausführbar und fügen es zum Start hinzu:

chmod +x /mnt/centos-image/etc/init.d/ec2-get-ssh
/usr/sbin/chroot /mnt/centos-image/ /sbin/chkconfig --level 34 ec2-get-ssh on

Es empfiehlt sich außerdem, Selinux zu deaktivieren bzw. richtig zu konfigurieren. Andernfalls kann es beispielsweise passieren, dass der Schlüssel nicht auf der Instanz gespeichert wird.
An dieser Stelle können Sie die Einrichtung des Systems beenden. Wir haben bereits reines CentOS, das in der Cloud ausgeführt werden kann. Jetzt müssen Sie nur noch die EBS-Festplatte mit unserem System aushängen und AMI registrieren.

umount /mnt/centos-image/proc/
umount /mnt/centos-image/sys/
umount /mnt/centos-image/

AMI-Registrierung

Um AMI von einer EBS-Festplatte zu erhalten, müssen Sie zunächst einen Snapshot der Festplatte erstellen:

aws ec2 create-snapshot --volume-id vol-0b4bd07a --description centos-snap

Der einfachste Weg, ami zu registrieren, ist über die AWS-Managementkonsole. Dazu müssen Sie nur zum Abschnitt „Snapshots“ im EC2-Dienst gehen, den gewünschten auswählen (in unserem Fall „centos-snap“), mit der rechten Maustaste darauf klicken und „Image aus Snapshot erstellen“ auswählen.
Anschließend müssen Sie im sich öffnenden Fenster ungefähr die folgenden Parameter auswählen:

Erstellen Sie Ihr eigenes Image mit purem CentOS 5.9 in der Amazon Cloud

Welche Kernel-ID Sie wählen sollten, können Sie wie folgt herausfinden:

aws ec2 describe-images --owner amazon --region us-east-1 --output text | grep "/pv-grub-hd0.*-x86_64" | awk '{print $7}' | grep aki
aki-88aa75e1
aki-b4aa75dd

Das ist alles. Jetzt können Sie Instanzen starten.
Auf diese Weise können Sie höchstwahrscheinlich mit jeder Linux-Distribution ein Image erstellen. Zumindest definitiv Debian (mit Debootstrap ein sauberes System installieren) und die Rhel-Familie.

Source: habr.com

Kommentar hinzufügen