Adım adım slackware amazon AMI hazırlama 16-06-2014

One may find the english version of the document at this link: http://www.kahverengi.com/EN/article/amazon-ec22/slackware-custom-amazon-ami-from-scratch.html

Özet:

Amazon EC2 leri ilk incelemeye başladığımda Slackware imajının olmadığını görmek beni biraz hayal kırıklığına uğratmıştı. Sonraları araya başka bir sürü iş girince bu konuyu unuttum. Yakın tarihte tekrar incelediğimde bu konuda değişen bir şey olmadığını gördüm. Dahası İnternette araştırdığımda bu işlemin nasıl yapıldığını anlatan güncel bir örnek te bulamadım. Gerçi farklı sürümler için yardım bilgileri mevcuttu. Hatta Slackware için imaj oluşturma v.s. bilgileri de mevcuttu. Ama maalesef Slackware Amazon AMI imaj hazırlama ile ilgili bir bilgi yoktu. En azından ben bulamadım diyelim.  Ben de bu işlemi kendim yapmaya karar verdim. Aşağıda Slackware Amazon AMI imajı oluşturmak için adım adım neler yapılması gerektiğini yazdım. Aşağıdaki adımların tümümün gerekli olduğunu iddia edemem ama tümünü tek tek atlamadan yapmak çalışır bir AMI oluşturmak için yeterli olacaktır.

Gerekenler:

Linux çalışma makinesi; Slackware 13.1 yükleme dosyaları (yani DVD veya ISO olabilir),  Amazon AWS hesabı, çalışır durumda Amazon API and AMI araçları

Adımlar:

1. Çalışma ortamını hazırla

# mkdir /tmp/amiworks

2.  İşletim sisteminin yükleneceği alanı oluştur

Yaklaşık 8Gb büyüklüğünde imaj dosyası oluştur

# dd if=/dev/zero of=/tmp/amiworks/img-slackware bs=16M count=$((64*8))

Bu imajın üzerine dosya yapısı yarat

# mke2fs -F -j /tmp/amiworks/img-slackware

Eşleme(bağlama) noktası yarat ve bu noktayla imajı eşle (bağla)

# mkdir /tmp/amiworks/fs-slackware
# mount -o loop /tmp/amiworks/img-slackware /tmp/amiworks/fs-slackware

Bağladığımız döngü bağlantısını (loop device)   bölümle (partition). İşlemin etkinleşmesi için yeniden bağla

# fdisk /dev/loop0
    n
    p
    1
    [Enter]
    [Enter]
    w
# mount -o remount /tmp/amiworks/fs-slackware

3. Slackware kurulumu

Yükleme ortamını (DVD) bilgisayarınıza koyabilir yada yükleme iso dosyasını bağlama noktasına bağlayabilirsiniz. (Ben ilk seçeneği kullandım. DVD nin olduğu yerde Slackware dizinine gittim. )

# cd [path to SlackDVD]/slackware

ROOT yolunu değiştirip (bu adım son derece önemli. Bu adımda hata yaparsanız üzerinde çalıştığınız sistemi kullanılmaz hale getirebilirsiniz.)  gereken paketleri yukarıda yarattığımız imaj dosyasının üzerine kurmaya başla. Yüklenecek paket grupları için "full install" seçilmeli. A: Gereken paket grupları: a ap d f k l n t tcl and x. Bazıları gereksiz görünebilir ancak xen kernelinin ve dom0 scriptinin sorunsuzca yüklenmesi için ben bu şekilde ilerledim. Zamanım olsa sadece zorunlu olan paketleri filtreleye bilirdim. Ama uğraşamadım (Belki gelecekte tekrar bu noktaya döner ve filtreleme yaparım).

# export ROOT=/tmp/amiworks/fs-slackware/
# for i in `ls -F1 | grep /`; do cd $i && ./install-packages && cd ..; done
... ... ...

grup  ön-yükleyiciyi kur ve imaj ortamından çık.

# cd ../extra/grub
# installpkg grub-0.97-i486-9.txz
# cd
# unset ROOT

 

4. xen kernel kurulumu

Çalışma ortamını hazırla

# mkdir /tmp/amiworks/xen-kernel
# cd /tmp/amiworks/xen-kernel

xen kernel'ını kurmadan önce tüm gerekli dosyaları internetten indirmemiz ve kuruluma hazır hale getirmemiz gerekiyor. Gereken dosyalar: 13.1 için xen paketi slackbuild.org adresinden edinilebilir. acpica paketi de (ki bu paket xen kernel için gerekli bir uygulamadır) slackbuild.org  adresinden indirilebilir.
Ayrıca dom0 kurulum scriptinin çalışması için gereken dosyalar.
Bu aşamada herhangi bir kurulumu gerçekleştirmeyelim. Kurulum işlemlerini sonraki adımlarda direk imajın üzerinde yapacağız. Bunun nedeni çalışma makinesi ile imajın üzerine kurulu işletim sistemler ve sürümleri farklı olabilir. Örneğin ben imaj için 13.1 kullanıyorken kendi çalışma makinemde 14.0 kurulu.

# wget http://slackbuilds.org/slackbuilds/13.1/development/acpica.tar.gz
# tar zxvf acpica.tar.gz
# cd acpica
# wget http://www.acpica.org/download/acpica-unix-20100915.tar.gz
# cd ../
# wget http://slackbuilds.org/slackbuilds/13.1/system/xen.tar.gz
# tar zxvf xen.tar.gz
# cd xen
# wget http://bits.xensource.com/oss-xen/release/4.0.1/xen-4.0.1.tar.gz

Şimdi de dom0 için gereken iki adet dosyayı indirelim (dom0 klasörünün içindeki readme dosyasında hangi dosyaların hangi adreslerden indirilebileceği yazıyor.)

# cd dom0/
# wget http://gentoo-xen-kernel.googlecode.com/files/xen-patches-2.6.34-6.tar.bz2
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.34.7.tar.bz2
# cd /tmp

Tüm bu dosyaları bir bütün olarak imaja aktaralım.

# mv /tmp/amiworks/xen-kernel/ /tmp/amiworks/fs-slackware/tmp/

chroot ile çalışılacak dizini değiştirelim. PATH çevre değişkenini güncelleyelim.

# chroot /tmp/amiworks/fs-slackware/ /bin/bash
# PATH=/usr/share/texmf/bin:$PATH

Artık xen paketini kurabiliriz

# cd /tmp/xen-kernel/acpica
# ./acpica.SlackBuild
# installpkg /tmp/acpica-20100915-i486-1_SBo.tgz
# cd ../xen
# ./xen.SlackBuild
# installpkg /tmp/xen-4.0.1-i486-1_SBo.tgz

Şimdi dom0 kurulum scriptini çalıştıralım.

# cd dom0/
# tar -C /usr/src/ -jxf linux-2.6.34.7.tar.bz2
# BOOTLOADER=grub sh ./kernel-xen.sh

5. Kurulum sonrası işlemler.

root şifresini belirleyelim az önce değiştirdiğimiz çalışma dizininden çıkalım.

# passwd root
# exit

imaj üzerindeki /etc/rc.d/rc.inet1 dosyasını açalım ve  DHCP nin aktif olduğundan emin olalım (USE_DHCP[0]="YES" olmalı. Sadece bu yeterli.)

/etc/ altında fstab isimli dosya yaratalım ve aşağıdaki satırları bu dosyaya kopyalayalım.

/dev/sda1 / ext3 defaults 1 1
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
/dev/sda2 /mnt ext3 defaults 0 0
/dev/sda3 swap swap defaults 0 0 

İmaj üzerindeki tüm geçici çalışma dosyalarını temizleyelim.

# rm -r /tmp/amiworks/fs-slackware/tmp/xen*
# rm /tmp/amiworks/fs-slackware/tmp/acpica-20100915-i486-1_SBo.tgz 
# rm -r /tmp/amiworks/fs-slackware/tmp/SBo/
# umount -d /tmp/amiworks/fs-slackware/

6. Amazon imajının hazırlanması

Bu adımdaki işlemleri için amazon ec2 ami ve api araçlarına ihtiyaç vardır. Ayrıca amazon AWS hesabınızın olması gerekmektedir. Hesap numarası şu şekilde kullanılmalı 111222333444 yani orijinal hesap numarasının aralarındaki çizgileri kaldırarak kullanmak gerekiyor. private key ve certificate dosyalarına da ihtiyaç var ki bunlarda AWS hesabınızı yönettiğiniz web ekranlarından temin edilebilir. ( access credential menüsü).

# ec2-bundle-image -i /tmp/amiworks/img-slackware -k pk-privatekeyfile.pem -c cert-certificatefile.pem -u 111111111111
      specify a value for arch [unknown]:

Yukarıdaki komut sizden arch tipini beritmenizi ister. Ben i386 yazıp dedim.(i686 da denebilir.Ama ben denemedim)

Hazırlanan dosyaları Amazon AWS ye aktarmadan önce  S3 servisinde bir bucket yaratılması gerekiyor (klasör yaratmak gibi). Benim yaratıp kullandığım bucket in ismi "slackware-images". access ve secret key leri yine AWS yönetim panelinizden edinebilirsiniz. En sonunda da aktarılan imaj register edilir. (imaj dosyalarının AWS ye aktarılması son derece uzun sürüyor. Dile kolay 8Gb dosya aktarılıyor)

# ec2-upload-bundle -b slackware-images -m /tmp/img-slackware.manifest.xml -a -s
# ec2-register slackware-images/img-slackware.manifest.xml -n slackware-13.1-v.1

Çalışma dosyalarını temizle

# rm -r /tmp/amiworks

Böylece Amazon AMI imajını yaratmış,  AWS ye yüklemiş ve kayıt ettirmiş olduk. Artık bu imajı kullanarak yeni bir instance yaratabiliriz.

Not: Bu imajı kullanarak yeni bir instance yaratırken herhangi bir aki kerneli kullanamazsınız. Ben "aki-f5cbe081" isimli kerneli kullandım. Diğerlerinin hepsini denemedim ama iki üç tanesi çalışmadı.

Son Sözler

Umarım bu yazılanlar size faydalı olur. Düşünceleriniz paylaşmanız beni memnun eder. Eposta adresim: soydaner{at]kahverengi[dot]com.

Bu yukarıda hazırladığım imajı yakın zamanda public hale getirip AWS EC2 de yayınlamayı düşünüyorum. Ama lütfen şunu unutmayın ki bu imaj sadece keyfi amaçla yapılmıştır yani gerçek üretim ortamı için kulanılmaya henüz uygun değildir.

Kaynaklar

-  Building a root Slackware filesystem from scratch for the User-Mode Linux through loopback devices 

-  Bundling Amazon S3-Backed Linux/UNIX AMIs From a Loopback