Bildiğiniz gibi Amazon bulutunda sanal örnekler görüntülere dayalı olarak başlatılır (sözde ). Amazon bunlardan çok sayıda sağlar; üçüncü taraflarca hazırlanan ve elbette bulut sağlayıcının herhangi bir sorumluluk taşımadığı genel görselleri de kullanabilirsiniz. Ancak bazen gerekli parametrelere sahip, görüntüler listesinde olmayan temiz bir sistem görüntüsüne ihtiyacınız vardır. O zaman tek çıkış yolu kendi AMI'nizi oluşturmaktır.
Resmi belgeler açıklamaktadır "örnek deposu destekli bir AMI" oluşturmak. Bu yaklaşımın dezavantajı, bitmiş görüntünün aynı zamanda "EBS destekli AMI"ya dönüştürülmesi gerekmesidir.
Bu makalede, ara adımlar olmadan Amazon bulutunda kendi EBS destekli AMI'nızı nasıl oluşturacağınız tartışılacaktır.
Eylem Planı
- Ortamı hazırlayın
- Temiz bir sistem kurun ve gerekli ayarları yapın
- Diskin anlık görüntüsünü alın
- AMI'yi kaydedin
Ortamın Hazırlanması
Bizim amaçlarımız açısından, herhangi bir şeklin herhangi bir örneği uygundur, hatta t1.micro bile. CLI aracılığıyla çalıştırabilirsiniz:
aws ec2 run-instances --image-id ami-1624987f --max-count 1 --min-count 1 --key-name mel --instance-type t1.micro
Daha sonra sistemimizi kuracağımız ebs-volume'u oluşturalım:
aws ec2 create-volume --availability-zone us-east-1a --size 10
Bu komut bize 10 Gb'lik bir disk oluşturacaktır. Önemli: Disk, örnekle aynı bölgede olmalıdır (bizim durumumuzda us-east-1a'dır).
Daha sonra diski örneğe eklemeniz gerekir:
aws ec2 attach-volume --instance-id i-2bc0925b --volume-id vol-08ab3079 --device /dev/xvdf
Şimdi ssh ile örneğe giriş yapalım, diski formatlayalım ve dizine bağlayalım:
mkfs.ext3 /dev/xvdf
mkdir /mnt/centos-image
mount /dev/xvdf /mnt/centos-image
cd !$
Temiz Centos 5.9 kurulumu
Sistemi kurmadan önce bir dizin ağacı oluşturmanız, proc ve sysfs'yi bağlamanız ve minimum cihaz kümesi oluşturmanız gerekir:
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
Sistemi yum ve aşağıdaki yapılandırma dosyasını kullanarak kuracağız:
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
Kurulum işlemini tamamladıktan sonra gerekli paketleri aynı şekilde kurabilirsiniz:
yum -c ~/yum-centos.conf --installroot=/mnt/centos-image/ install $packet_name
Fstab'ı düzenleyelim:
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'da hala xen destekli bir çekirdek yüklemeniz gerekiyor:
yum -c ~/yum-centos.conf --installroot=/mnt/centos-image/ -y install kernel-xen
Grub'u yükleyin:
chroot /mnt/centos-image/ grub-install /dev/xvdf
ve yeni bir initrd oluşturun:
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
Tüm bu parametrelerin ve yeni bir fstab'ın belirtilmesi çok önemlidir, aksi takdirde sistem önyükleme yapmayacaktır.
Daha sonra grub için bir menu.lst dosyası oluşturmanız gerekir:
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
Ağı ve sshd'yi yapılandıralım:
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
Böylece çalışan bir ağ ve anahtarları kullanarak örneğe giriş yapma olanağı elde edeceğiz. Ancak anahtarın kendisinin bir şekilde örneğe aktarılması gerekiyor. Bu, anahtarı alıp örneğe kaydedecek bir komut dosyası kullanılarak yapılabilir:
vi /mnt/centos5img/etc/init.d/ec2-get-ssh
ec2-get-ssh#! / Bin / bash
#chkconfig: 2345 95 20
# işlem adı: ec2-get-ssh
# açıklama: EC2 kullanıcısı için AWS ortak anahtar kimlik bilgilerini yakalayın
#Kaynak işlev kitaplığı
. /etc/rc.d/init.d/işlevler
# Kaynak ağ yapılandırması
[ -r /etc/sysconfig/network ] &&. /etc/sysconfig/network
# Sisteminiz için aşağıdaki ortam değişkenlerini değiştirin
dışa aktarma YOLU=:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
# Ağ bağlantısının yapılandırıldığını kontrol edin
if [ "${AĞ BAĞLANTISI}" = "hayır" ]; Daha sonra
echo "Ağ iletişimi yapılandırılmadı."
çıkış 1
fi
start () {
eğer [! -d /kök/.ssh ]; Daha sonra
mkdir -p /root/.ssh
chmod 700 /root/.ssh
fi
# HTTP kullanarak meta veri sunucusundan genel anahtarı alın
kıvrılma -f > /tmp/genel-anahtarım
eğer [$? -eq 0 ]; Daha sonra
echo "EC2: HTTP kullanarak meta veri sunucusundan genel anahtarı alın."
cat /tmp/my-public-key >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
rm /tmp/genel-anahtarım
fi
}
Dur() {
echo "Burada yapılacak bir şey yok"
}
tekrar başlat() {
durdurmak
başlama
}
# Bakın nasıl çağrıldık.
durumda "$ 1"
başlangıç)
başlama
;;
durdur)
durdurmak
;;
yeniden başlatın)
yeniden
;;
*)
echo $"Kullanım: $0 {başlat|durdur|yeniden başlat}"
çıkış 1
esac
çıkış $?
Çalıştırılabilir hale getirelim ve başlangıca ekleyelim:
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
Ayrıca Selinux'u devre dışı bırakmanız veya doğru şekilde yapılandırmanız da önerilir. Aksi halde örneğin anahtar örneğe kaydedilmeyebilir.
Bu noktada sistem kurulumunu durdurabilirsiniz. Bulutta çalışmaya hazır saf CentOS'umuz zaten var. Geriye kalan tek şey ebs diskinin sistemimizle olan bağlantısını kesmek ve ami'yi kaydetmek.
umount /mnt/centos-image/proc/
umount /mnt/centos-image/sys/
umount /mnt/centos-image/
AMI kaydı
Bir ebs diskten ami almak için öncelikle diskin anlık görüntüsünü almanız gerekir:
aws ec2 create-snapshot --volume-id vol-0b4bd07a --description centos-snap
Ami'yi kaydetmenin en kolay yolu AWS Management Console'u kullanmaktır. Bunu yapmak için, EC2 hizmetindeki "Anlık Görüntüler" bölümüne gitmeniz, ihtiyacınız olanı seçmeniz (bizim durumumuzda bu centos-snap), üzerine sağ tıklamanız ve "Anlık Görüntüden Görüntü Oluştur" u seçmeniz yeterli.
Ardından açılan pencerede yaklaşık olarak aşağıdaki parametreleri seçmeniz gerekir:

Hangi Çekirdek Kimliğini seçeceğinizi aşağıdaki şekilde öğrenebilirsiniz:
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
Bu kadar. Artık örnekleri başlatabilirsiniz.
Bu şekilde büyük olasılıkla herhangi bir Linux dağıtımıyla bir görüntü oluşturabilirsiniz. En azından kesinlikle Debian (temiz bir sistem kurmak için debootstrap kullanıyor) ve Rhel ailesi.
Kaynak: habr.com
