Kreiranje vlastite slike sa čistim CentOS-om 5.9 u Amazon oblaku

Kao što znate, u oblaku Amazon virtuelne instance se pokreću na osnovu slika (tzv AMI). Amazon ih nudi veliki broj, a možete koristiti i javne slike koje su pripremile treće strane, za koje provajder u oblaku, naravno, ne snosi nikakvu odgovornost. Ali ponekad vam je potrebna čista slika sistema sa potrebnim parametrima, koja nije na listi slika. Tada je jedini izlaz da napravite sopstveni AMI.

Zvanična dokumentacija opisuje način kreiranje „AMI-ja koji podržava instancu“. Nedostatak ovog pristupa je što će gotova slika takođe morati da se konvertuje u „EBS-backed AMI“

Kako da kreirate sopstveni AMI podržan od EBS-a u Amazon oblaku bez međukoraka, biće objašnjeno u ovom članku.

Akcioni plan:

  • Pripremite okolinu
  • Instalirajte čist sistem i izvršite potrebna podešavanja
  • Napravite snimak diska
  • Registrujte AMI

Priprema okoline

Za naše potrebe, svaki primjerak bilo kojeg oblika je prikladan, čak i t1.micro. Možete ga pokrenuti preko CLI:

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

Kreirajmo ebs-volume, gdje ćemo kasnije instalirati naš sistem:

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

Ova komanda će nam napraviti disk od 10 Gb. Važno: disk mora biti u istoj zoni kao instanca (u našem slučaju to je us-east-1a).
Zatim morate priključiti disk na instancu:

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

Sada se prijavite na instancu putem ssh-a, formatirajte disk i montirajte ga u direktorij:

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

Instaliranje čistog Centosa 5.9

Prije instaliranja sistema, potrebno je kreirati stablo direktorija, montirati proc i sysfs i kreirati minimalni skup uređaja:

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

Sistem ćemo instalirati koristeći yum i sljedeći konfiguracijski fajl:
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

Nakon završetka procesa instalacije, možete instalirati sve potrebne pakete na isti način:

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

Uredimo 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

U CentOS 5.9 i dalje morate instalirati kernel sa podrškom za xen:

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

Instalirajte Grub:

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

i generirajte novi 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

Veoma je važno navesti sve ove parametre i novi fstab, inače se sistem neće pokrenuti.
Zatim morate kreirati menu.lst fajl za 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

Konfigurirajmo mrežu 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

Tako ćemo dobiti radnu mrežu i mogućnost prijavljivanja u instancu pomoću ključeva. Ali sam ključ treba nekako prenijeti u instancu. To se može učiniti pomoću skripte koja će uzeti ključ i spremiti ga na instancu:

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

ec2-get-ssh#! / bin / bash
# chkconfig: 2345 95 20
# ime procesa: ec2-get-ssh
# opis: Snimite akreditive AWS javnog ključa za EC2 korisnika

#Izvorna biblioteka funkcija
. /etc/rc.d/init.d/functions

# Izvorna mrežna konfiguracija
[ -r /etc/sysconfig/network] &&. /etc/sysconfig/network

# Zamijenite sljedeće varijable okruženja za vaš sistem
izvoz PATH=:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin

# Provjerite da li je umrežavanje konfigurirano
if [ "${NETWORKING}" = "ne" ]; onda
echo "Umrežavanje nije konfigurirano."
izlaz 1
fi

start () {
ako [! -d /root/.ssh ]; onda
mkdir -p /root/.ssh
chmod 700 /root/.ssh
fi
# Preuzmi javni ključ sa servera metapodataka koristeći HTTP
curl -f 169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/moj-javni-ključ
ako [$? -eq 0 ]; onda
echo "EC2: Preuzmi javni ključ sa servera metapodataka koristeći HTTP."
mačka /tmp/my-public-key >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
rm /tmp/moj-javni-ključ
fi
}

stop() {
echo "Ovdje nema šta raditi"
}

restart() {
stani
start
}

# Vidite kako su nas zvali.
slučaj "$ 1" u
početak)
start
;;
stani)
stani
;;
ponovo pokreni)
Restart
;;
*)
echo $"Upotreba: $0 {start|stop|restart}"
izlaz 1
da je C

izlaz $?
Napravimo ga izvršnim i dodajmo ga u startup:

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

Također je preporučljivo onemogućiti Selinux ili ga ispravno konfigurirati. U suprotnom, na primjer, ključ možda neće biti sačuvan na instanci.
U ovom trenutku možete prekinuti postavljanje sistema. Već imamo čisti CentOS spreman za rad u oblaku. Sve što ostaje je da demontirate ebs disk sa našim sistemom i registrujete ami.

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

AMI registracija

Da biste dobili ami sa ebs diska, prvo morate napraviti snimak diska:

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

Najlakši način da registrujete ami je preko AWS konzole za upravljanje. Da biste to učinili, samo trebate otići u odjeljak "Snapshots" u EC2 servisu, odabrati onaj koji vam je potreban (u našem slučaju to je centos-snap), kliknite desnim klikom na njega i odaberite "Create Image from Snapshot"
Zatim, u prozoru koji se otvori, morate odabrati otprilike sljedeće parametre:

Kreiranje vlastite slike sa čistim CentOS-om 5.9 u Amazon oblaku

Možete saznati koji ID kernela odabrati na sljedeći način:

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 je sve. Sada možete pokrenuti instance.
Na ovaj način možete kreirati sliku, najvjerovatnije, sa bilo kojom Linux distribucijom. Barem, definitivno Debian (koristeći debootstrap za instaliranje čistog sistema) i Rhel-familija.

izvor: www.habr.com

Dodajte komentar