Wie Sie wissen, werden in der Amazon-Cloud virtuelle Instanzen auf Basis von Bildern (sog
Die offizielle Dokumentation beschreibt
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
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:
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