Vytváranie vlastného obrazu s čistým CentOS 5.9 v cloude Amazon

Ako viete, v cloude Amazon sa virtuálne inštancie spúšťajú na základe obrázkov (tzv AMI). Amazon ich poskytuje veľké množstvo, využiť môžete aj verejné obrázky pripravené tretími stranami, za ktoré poskytovateľ cloudu samozrejme nenesie žiadnu zodpovednosť. Niekedy ale potrebujete čistý obraz systému s potrebnými parametrami, ktorý nie je v zozname obrázkov. Potom je jediným východiskom vytvoriť si vlastný AMI.

Popisuje oficiálna dokumentácia spôsob vytvorenie „inštancie AMI podporovaného obchodom“. Nevýhodou tohto prístupu je, že hotový obrázok bude tiež potrebné previesť na „EBS-backed AMI“

O tom, ako si vytvoriť vlastné AMI podporované EBS v cloude Amazon bez medzikrokov, sa bude diskutovať v tomto článku.

Akčný plán:

  • Pripravte prostredie
  • Nainštalujte čistý systém a vykonajte potrebné nastavenia
  • Urobte snímku disku
  • Zaregistrujte AMI

Príprava prostredia

Pre naše účely je vhodná akákoľvek inštancia akéhokoľvek tvaru, dokonca aj t1.micro. Môžete ho spustiť cez CLI:

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

Vytvorme ebs-volume, do ktorého neskôr nainštalujeme náš systém:

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

Tento príkaz nám vytvorí 10 Gb disk. Dôležité: disk musí byť v rovnakej zóne ako inštancia (v našom prípade je to us-východ-1a).
Ďalej je potrebné pripojiť disk k inštancii:

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

Teraz sa prihlásime do inštancie cez ssh, naformátujeme disk a pripojíme ho do adresára:

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

Inštalácia čistého Centos 5.9

Pred inštaláciou systému musíte vytvoriť strom adresárov, pripojiť proc a sysfs a vytvoriť minimálnu sadu zariadení:

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

Systém nainštalujeme pomocou yum a nasledujúceho konfiguračného súboru:
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 dokončení procesu inštalácie môžete rovnakým spôsobom nainštalovať všetky potrebné balíky:

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

Upravíme 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

V CentOS 5.9 stále musíte nainštalovať jadro s podporou xen:

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

Nainštalujte Grub:

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

a vygenerujte nový 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

Je veľmi dôležité zadať všetky tieto parametre a nový fstab, inak sa systém nespustí.
Ďalej musíte vytvoriť súbor menu.lst pre 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

Nakonfigurujeme sieť a 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

Získame tak fungujúcu sieť a možnosť prihlásiť sa do inštancie pomocou kľúčov. Samotný kľúč je však potrebné nejako preniesť do inštancie. Dá sa to urobiť pomocou skriptu, ktorý vezme kľúč a uloží ho do inštancie:

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

ec2-get-ssh#! / Bin / bash
# chkconfig: 2345 95 20
# názov procesu: ec2-get-ssh
# description: Zachytenie poverení verejného kľúča AWS pre používateľa EC2

#Knižnica funkcií zdroja
. /etc/rc.d/init.d/functions

# Konfigurácia zdrojovej siete
[ -r /etc/sysconfig/network ] &&. /etc/sysconfig/network

# Nahraďte nasledujúce premenné prostredia pre váš systém
export PATH=:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin

# Skontrolujte, či je sieť nakonfigurovaná
if [ "${NETWORKING}" = "nie" ]; potom
echo "Sieť nie je nakonfigurovaná."
výstup 1
fi

start () {
ak [! -d /root/.ssh ]; potom
mkdir -p /root/.ssh
chmod 700 /root/.ssh
fi
# Získajte verejný kľúč zo servera metadát pomocou HTTP
curl -f 169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/my-public-key
ak [$? -ekv 0]; potom
echo "EC2: Získať verejný kľúč zo servera metadát pomocou HTTP."
cat /tmp/my-public-key >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
rm /tmp/my-public-key
fi
}

stop() {
echo "Tu nie je čo robiť"
}

reštart() {
prestať
Začať
}

# Pozri, ako nás volali.
prípad "$ 1" v
začať)
Začať
;;
zastaviť)
prestať
;;
reštart)
reštart
;;
*)
echo $"Použitie: $0 {start|stop|restart}"
výstup 1
že C

ukončiť $?
Urobme ho spustiteľným a pridajte ho do spustenia:

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

Je tiež vhodné vypnúť Selinux alebo ho správne nakonfigurovať. V opačnom prípade sa napríklad kľúč nemusí uložiť v inštancii.
V tomto bode môžete zastaviť nastavovanie systému. Už máme pripravený čistý CentOS na prevádzku v cloude. Zostáva len odpojiť ebs disk s naším systémom a zaregistrovať ami.

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

Registrácia AMI

Ak chcete získať ami z ebs disku, musíte najprv urobiť snímku disku:

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

Najjednoduchší spôsob registrácie ami je prostredníctvom riadiacej konzoly AWS. Ak to chcete urobiť, stačí prejsť do sekcie „Snímky“ v službe EC2, vybrať ten, ktorý potrebujete (v našom prípade je to centos-snap), kliknúť naň pravým tlačidlom myši a vybrať možnosť „Vytvoriť obrázok zo snímky“
Potom v okne, ktoré sa otvorí, musíte vybrať približne nasledujúce parametre:

Vytváranie vlastného obrazu s čistým CentOS 5.9 v cloude Amazon

Ktoré ID jadra si vybrať, zistíte takto:

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 všetko. Teraz môžete spustiť inštancie.
Týmto spôsobom môžete vytvoriť obrázok s najväčšou pravdepodobnosťou pomocou akejkoľvek distribúcie Linuxu. Aspoň určite Debian (pomocou debootstrapu na inštaláciu čistého systému) a rodina Rhel.

Zdroj: hab.com

Pridať komentár