Tworzenie własnego obrazu za pomocą czystego CentOS 5.9 w chmurze Amazon

Jak wiadomo, w chmurze Amazon uruchamiane są wirtualne instancje na podstawie obrazów (tzw AMI). Amazon udostępnia ich dużą ilość, można też skorzystać z publicznych obrazów przygotowanych przez osoby trzecie, za co dostawca chmury oczywiście nie ponosi żadnej odpowiedzialności. Czasami jednak potrzebny jest czysty obraz systemu z niezbędnymi parametrami, którego nie ma na liście obrazów. Wtedy jedynym wyjściem jest stworzenie własnego AMI.

Oficjalna dokumentacja opisuje sposób utworzenie „AMI opartego na sklepie z instancjami”. Wadą tego podejścia jest to, że gotowy obraz będzie również musiał zostać przekonwertowany na „AMI wspierany przez EBS”

Jak stworzyć własny AMI wspierany przez EBS w chmurze Amazon bez etapów pośrednich, zostanie omówione w tym artykule.

Plan działania:

  • Przygotuj środowisko
  • Zainstaluj czysty system i dokonaj niezbędnych ustawień
  • Zrób zrzut ekranu dysku
  • Zarejestruj się

Przygotowanie środowiska

Dla naszych celów odpowiednie jest dowolne wystąpienie dowolnego kształtu, nawet t1.micro. Można go uruchomić poprzez CLI:

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

Stwórzmy ebs-volume, w którym później zainstalujemy nasz system:

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

To polecenie utworzy dla nas dysk 10 Gb. Ważne: dysk musi znajdować się w tej samej strefie co instancja (w naszym przypadku jest to us-east-1a).
Następnie musisz podłączyć dysk do instancji:

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

Zalogujmy się teraz do instancji przez ssh, sformatujmy dysk i zamontujmy go w katalogu:

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

Instalowanie czystego Centosa 5.9

Przed instalacją systemu należy utworzyć drzewo katalogów, zamontować proc i sysfs oraz utworzyć minimalny zestaw urządzeń:

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

System zainstalujemy za pomocą yum i następującego pliku konfiguracyjnego:
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

Po zakończeniu procesu instalacji możesz zainstalować niezbędne pakiety w ten sam sposób:

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

Edytujmy 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

W CentOS 5.9 nadal musisz zainstalować jądro z obsługą xen:

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

Zainstaluj Gruba:

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

i wygeneruj nowy 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

Bardzo ważne jest określenie wszystkich tych parametrów i nowego pliku fstab, w przeciwnym razie system nie uruchomi się.
Następnie musisz utworzyć plik menu.lst dla Gruba:

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

Skonfigurujmy sieć i 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

Tym samym otrzymamy działającą sieć i możliwość zalogowania się do instancji za pomocą kluczy. Ale sam klucz trzeba w jakiś sposób przenieść do instancji. Można to zrobić za pomocą skryptu, który pobierze klucz i zapisze go w instancji:

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

ec2-get-ssh#! / bin / bash
# chkconfig: 2345 95 20
# nazwa procesu: ec2-get-ssh
# opis: Przechwyć dane uwierzytelniające klucza publicznego AWS dla użytkownika EC2

#Biblioteka funkcji źródłowych
. /etc/rc.d/init.d/functions

# Źródło konfiguracji sieci
[ -r /etc/sysconfig/network] &&. /etc/sysconfig/network

# Zamień następujące zmienne środowiskowe dla swojego systemu
eksport PATH=:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin

# Sprawdź, czy sieć jest skonfigurowana
if [ "${NETWORKING}" = "nie" ]; Następnie
echo "Sieć nie jest skonfigurowana."
wyjście 1
fi

początek () {
Jeśli [! -d /root/.ssh ]; Następnie
mkdir -p /root/.ssh
chmod 700 /root/.ssh
fi
# Pobierz klucz publiczny z serwera metadanych za pomocą protokołu HTTP
zwijanie -f 169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/mój-klucz-publiczny
jeśli [$? -równ. 0]; Następnie
echo "EC2: Pobierz klucz publiczny z serwera metadanych przy użyciu protokołu HTTP."
cat /tmp/my-public-key >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
rm /tmp/mój-klucz-publiczny
fi
}

zatrzymać() {
echo „Tutaj nie ma nic do roboty”
}

uruchom ponownie() {
Zatrzymaj się
początek
}

# Zobacz jak nas nazywano.
sprawa „$ 1” w
początek)
początek
;;
zatrzymać)
Zatrzymaj się
;;
restart)
restart
;;
*)
echo $"Użycie: $0 {start|stop|restart}"
wyjście 1
to C

wyjść $?
Uczyńmy go wykonywalnym i dodajmy do uruchamiania:

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

Wskazane jest również wyłączenie Selinuksa lub jego poprawna konfiguracja. W przeciwnym razie klucz może nie zostać zapisany na instancji.
W tym momencie możesz zakończyć konfigurowanie systemu. Mamy już czysty CentOS gotowy do działania w chmurze. Pozostaje tylko odmontować dysk ebs w naszym systemie i zarejestrować ami.

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

Rejestracja AMI

Aby pobrać ami z dysku ebs, musisz najpierw zrobić migawkę dysku:

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

Najprostszym sposobem rejestracji ami jest konsola zarządzania AWS. Aby to zrobić, wystarczy przejść do sekcji „Migawki” w usłudze EC2, wybrać tę, której potrzebujesz (w naszym przypadku jest to centos-snap), kliknąć ją prawym przyciskiem myszy i wybrać „Utwórz obraz ze migawki”
Następnie w oknie, które zostanie otwarte, musisz wybrać w przybliżeniu następujące parametry:

Tworzenie własnego obrazu za pomocą czystego CentOS 5.9 w chmurze Amazon

Możesz dowiedzieć się, który identyfikator jądra wybrać w ten sposób:

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

To wszystko. Teraz możesz uruchomić instancje.
W ten sposób możesz utworzyć obraz najprawdopodobniej z dowolną dystrybucją Linuksa. Przynajmniej na pewno Debian (używający debootstrap do zainstalowania czystego systemu) i rodzina Rhel.

Źródło: www.habr.com

Dodaj komentarz