Όπως γνωρίζετε, στο cloud του Amazon εκκινούνται εικονικές περιπτώσεις με βάση εικόνες (το λεγόμενο
Η επίσημη τεκμηρίωση περιγράφει
Πώς να δημιουργήσετε το δικό σας AMI που υποστηρίζεται από EBS στο cloud του Amazon χωρίς ενδιάμεσα βήματα θα συζητηθεί σε αυτό το άρθρο.
Σχέδιο δράσης:
- Προετοιμάστε το περιβάλλον
- Εγκαταστήστε ένα καθαρό σύστημα και κάντε τις απαραίτητες ρυθμίσεις
- Τραβήξτε ένα στιγμιότυπο του δίσκου
- Εγγραφή AMI
Προετοιμασία του Περιβάλλοντος
Για τους σκοπούς μας, κάθε παράδειγμα οποιουδήποτε σχήματος είναι κατάλληλο, ακόμα και το t1.micro. Μπορείτε να το εκτελέσετε μέσω του CLI:
aws ec2 run-instances --image-id ami-1624987f --max-count 1 --min-count 1 --key-name mel --instance-type t1.micro
Ας δημιουργήσουμε το ebs-volume, όπου θα εγκαταστήσουμε το σύστημά μας αργότερα:
aws ec2 create-volume --availability-zone us-east-1a --size 10
Αυτή η εντολή θα δημιουργήσει έναν δίσκο 10 Gb για εμάς. Σημαντικό: ο δίσκος πρέπει να βρίσκεται στην ίδια ζώνη με το στιγμιότυπο (στην περίπτωσή μας είναι us-east-1a).
Στη συνέχεια, πρέπει να επισυνάψετε το δίσκο στο παράδειγμα:
aws ec2 attach-volume --instance-id i-2bc0925b --volume-id vol-08ab3079 --device /dev/xvdf
Τώρα ας συνδεθούμε στην παρουσία μέσω ssh, διαμορφώνουμε τον δίσκο και τον προσαρτούμε στον κατάλογο:
mkfs.ext3 /dev/xvdf
mkdir /mnt/centos-image
mount /dev/xvdf /mnt/centos-image
cd !$
Εγκατάσταση καθαρού Centos 5.9
Πριν εγκαταστήσετε το σύστημα, πρέπει να δημιουργήσετε ένα δέντρο καταλόγου, να προσαρτήσετε το proc και το sysfs και να δημιουργήσετε ένα ελάχιστο σύνολο συσκευών:
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
Θα εγκαταστήσουμε το σύστημα χρησιμοποιώντας το yum και το ακόλουθο αρχείο ρυθμίσεων:
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
Αφού ολοκληρώσετε τη διαδικασία εγκατάστασης, μπορείτε να εγκαταστήσετε όλα τα απαραίτητα πακέτα με τον ίδιο τρόπο:
yum -c ~/yum-centos.conf --installroot=/mnt/centos-image/ install $packet_name
Ας επεξεργαστούμε το fstab:
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
Στο CentOS 5.9 πρέπει ακόμα να εγκαταστήσετε έναν πυρήνα με υποστήριξη xen:
yum -c ~/yum-centos.conf --installroot=/mnt/centos-image/ -y install kernel-xen
Εγκαταστήστε το Grub:
chroot /mnt/centos-image/ grub-install /dev/xvdf
και δημιουργήστε ένα νέο initrd:
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
Είναι πολύ σημαντικό να καθορίσετε όλες αυτές τις παραμέτρους και ένα νέο fstab, διαφορετικά το σύστημα δεν θα εκκινήσει.
Στη συνέχεια, πρέπει να δημιουργήσετε ένα αρχείο menu.lst για το grub:
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
Ας ρυθμίσουμε το δίκτυο και το sshd:
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
Έτσι, θα έχουμε ένα λειτουργικό δίκτυο και τη δυνατότητα σύνδεσης στην παρουσία χρησιμοποιώντας τα κλειδιά. Αλλά το ίδιο το κλειδί πρέπει να μεταφερθεί με κάποιο τρόπο στο στιγμιότυπο. Αυτό μπορεί να γίνει χρησιμοποιώντας ένα σενάριο που θα πάρει το κλειδί και θα το αποθηκεύσει στο παράδειγμα:
vi /mnt/centos5img/etc/init.d/ec2-get-ssh
ec2-get-ssh#! / bin / bash
# chkconfig: 2345 95 20
# όνομα διεργασίας: ec2-get-ssh
# περιγραφή: Λήψη διαπιστευτηρίων δημόσιου κλειδιού AWS για χρήστη EC2
Βιβλιοθήκη συναρτήσεων #Source
. /etc/rc.d/init.d/functions
# Διαμόρφωση δικτύου πηγής
[ -r /etc/sysconfig/network ] &&. /etc/sysconfig/network
# Αντικαταστήστε τις ακόλουθες μεταβλητές περιβάλλοντος για το σύστημά σας
εξαγωγή PATH=:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
# Ελέγξτε ότι η δικτύωση έχει διαμορφωθεί
if [ "${NETWORKING}" = "όχι" ]; έπειτα
echo "Η δικτύωση δεν έχει ρυθμιστεί."
έξοδος 1
fi
έναρξη () {
αν [! -d /root/.ssh ]; έπειτα
mkdir -p /root/.ssh
chmod 700 /root/.ssh
fi
# Ανάκτηση δημόσιου κλειδιού από διακομιστή μεταδεδομένων χρησιμοποιώντας HTTP
μπούκλα -στ
αν [$? -ισ 0]; έπειτα
echo "EC2: Ανάκτηση δημόσιου κλειδιού από διακομιστή μεταδεδομένων χρησιμοποιώντας HTTP."
cat /tmp/my-public-key >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
rm /tmp/my-public-key
fi
}
να σταματήσει() {
echo "Τίποτα να κάνω εδώ"
}
επανεκκίνηση() {
στάση
Εκκίνηση
}
# Δείτε πώς μας φώναζαν.
περίπτωση "$1" σε
αρχή)
Εκκίνηση
;;
να σταματήσει)
στάση
;;
επανεκκίνηση)
επανεκκίνηση
;;
*)
echo $"Χρήση: $0 {start|stop|restart}"
έξοδος 1
ότι Γ
έξοδος $;
Ας το κάνουμε εκτελέσιμο και ας το προσθέσουμε στην εκκίνηση:
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
Συνιστάται επίσης να απενεργοποιήσετε το Selinux ή να το ρυθμίσετε σωστά. Διαφορετικά, για παράδειγμα, το κλειδί ενδέχεται να μην αποθηκευτεί στην παρουσία.
Σε αυτό το σημείο μπορείτε να σταματήσετε τη ρύθμιση του συστήματος. Έχουμε ήδη καθαρό CentOS έτοιμο για εκτέλεση στο cloud. Το μόνο που μένει είναι να αποπροσαρτήσουμε τον δίσκο ebs με το σύστημά μας και να καταχωρήσουμε το ami.
umount /mnt/centos-image/proc/
umount /mnt/centos-image/sys/
umount /mnt/centos-image/
Εγγραφή AMI
Για να λάβετε ami από έναν δίσκο ebs, πρέπει πρώτα να τραβήξετε ένα στιγμιότυπο του δίσκου:
aws ec2 create-snapshot --volume-id vol-0b4bd07a --description centos-snap
Ο ευκολότερος τρόπος εγγραφής του ami είναι μέσω της Κονσόλας Διαχείρισης AWS. Για να το κάνετε αυτό, απλά πρέπει να μεταβείτε στην ενότητα "Στιγμιότυπα" στην υπηρεσία EC2, να επιλέξετε αυτό που χρειάζεστε (στην περίπτωσή μας είναι το centos-snap), κάντε δεξί κλικ πάνω του και επιλέξτε "Δημιουργία εικόνας από στιγμιότυπο"
Στη συνέχεια, στο παράθυρο που ανοίγει, πρέπει να επιλέξετε περίπου τις ακόλουθες παραμέτρους:
Μπορείτε να μάθετε ποιο αναγνωριστικό πυρήνα να επιλέξετε ως εξής:
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
Αυτό είναι όλο. Τώρα μπορείτε να εκκινήσετε παρουσίες.
Με αυτόν τον τρόπο, μπορείτε να δημιουργήσετε μια εικόνα, πιθανότατα, με οποιαδήποτε διανομή Linux. Τουλάχιστον, σίγουρα το Debian (χρησιμοποιώντας το debootstrap για να εγκαταστήσετε ένα καθαρό σύστημα) και το Rhel-family.
Πηγή: www.habr.com