Crea a vostra propria maghjina cù CentOS puri 5.9 in u nuvulu Amazon

Cum'è sapete, in a nuvola di Amazon l'istanze virtuali sò lanciate basatu annantu à l'imaghjini (i cusì chjamati AMI). Amazon furnisce un gran numaru di elli; pudete ancu aduprà l'imaghjini publichi preparati da terze parti, per quale u fornitore di nuvola, di sicuru, ùn hà micca rispunsabilità. Ma qualchì volta avete bisognu di una maghjina di sistema pulita cù i paràmetri necessarii, chì ùn hè micca in a lista di l'imaghjini. Allora l'unicu modu hè di fà u vostru propiu AMI.

A documentazione ufficiale descrive modu creendu una "AMI sustinuta da un magazinu di istanza". U svantaghju di stu approcciu hè chì l'imaghjini finiti duverà ancu esse cunvertiti in un "AMI supportatu da EBS".

Questu articulu discuterà cumu creà a vostra propria AMI sustinuta da EBS in u nuvulu Amazon senza passi intermedi.

Pianu di Acqua:

  • Preparate l'ambiente
  • Installa un sistema pulito è fate i paràmetri necessarii
  • Pigliate una foto di u discu
  • Registrate AMI

A preparazione di l'ambiente

Per i nostri scopi, ogni esempiu di ogni forma hè adattatu, ancu t1.micro. Pudete eseguisce via a CLI:

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

Creemu ebs-volume, induve installemu u nostru sistema dopu:

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

Stu cumanda farà un discu 10 Gb per noi. Impurtante: u discu deve esse in a stessa zona di l'istanza (in u nostru casu hè us-east-1a).
Dopu, avete bisognu di aghjunghje u discu à l'istanza:

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

Avà accede à l'istanza via ssh, formate u discu è muntemu in u cartulare:

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

Installazione pulita di Centos 5.9

Prima di installà u sistema, avete bisognu di creà un arbulu di repertoriu, muntate proc è sysfs, è creà un settore minimu di dispusitivi:

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

Stallà u sistema utilizendu yum è u schedariu di cunfigurazione seguente:
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

Dopu avè finitu u prucessu di stallazione, pudete installà tutti i pacchetti necessarii in u listessu modu:

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

Editemu 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

In CentOS 5.9 avete sempre bisognu di installà un kernel cù supportu xen:

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

Installa Grub:

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

è generà un novu 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

Hè assai impurtante di specificà tutti questi paràmetri è un novu fstab, altrimente u sistema ùn hà micca boot.
Dopu avete bisognu di creà un schedariu menu.lst per 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

Cunfiguremu a reta è 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

Cusì, averemu una reta di travagliu è a capacità di log in l'istanza cù e chjave. Ma a chjave stessu deve esse trasferitu à l'istanza in qualchì modu. Questu pò esse fattu aduprendu un script chì pigliarà a chjave è salvà nantu à l'istanza:

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

ec2-get-ssh#! / bin / bash
# chkconfig: 2345 95 20
# nome di prucessu: ec2-get-ssh
# description: Catture credenziali di chjave publica AWS per l'utilizatori EC2

Biblioteca di funzioni #Source
. /etc/rc.d/init.d/functions

# Cunfigurazione di rete di fonte
[-r /etc/sysconfig/network] &&. /etc/sysconfig/network

# Sustituite e seguenti variabili d'ambiente per u vostru sistema
export PATH=:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin

# Verificate chì a rete hè cunfigurata
if [ "${NETWORKING}" = "nè" ]; tandu
echo "A rete ùn hè micca cunfigurata".
surtite 1
fi

start () {
si [! -d /root/.ssh]; tandu
mkdir -p /root/.ssh
chmod 700 /root/.ssh
fi
# Recuperate a chjave publica da u servitore di metadati utilizendu HTTP
curl -f 169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/my-public-key
se [$? -eq 0]; tandu
echo "EC2: Recuperate a chjave publica da u servitore di metadata utilizendu HTTP".
cat /tmp/my-public-key >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
rm /tmp/my-public-key
fi
}

stop () {
ecu "Nunda da fà quì"
}

restart () {
firmà
Partendu
}

# Vede cumu avemu statu chjamatu.
casu "$ 1" in
principià)
Partendu
;;
ferma)
firmà
;;
riparte)
restituisce
;;
*)
echo $"Usu: $0 {start|stop|restart}"
surtite 1
chì C

surtite $?
Facemu eseguibile è aghjunghje à l'iniziu:

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

Hè ancu cunsigliatu di disattivà Selinux, o cunfigurà bè. Altrimenti, per esempiu, a chjave pò esse micca salvata nantu à l'istanza.
À questu puntu, pudete piantà di stallà u sistema. Avemu digià CentOS puru prontu à eseguisce in u nuvulu. Tuttu ciò chì resta hè di smontà u discu ebs cù u nostru sistema è registrà ami.

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

Registrazione AMI

Per piglià ami da un discu ebs, avete prima bisognu di piglià una snapshot di u discu:

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

U modu più faciule per registrà ami hè attraversu a Console di gestione AWS. Per fà questu, basta à andà in a sezione "Snapshots" in u serviziu EC2, selezziunate quellu chì avete bisognu (in u nostru casu hè centos-snap), cliccate right-click nantu à questu è selezziunate "Crea Image from Snapshot".
Dopu, in a finestra chì si apre, avete bisognu di selezziunà circa i seguenti parametri:

Crea a vostra propria maghjina cù CentOS puri 5.9 in u nuvulu Amazon

Pudete scopre quale ID di Kernel sceglite cusì:

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

Eccu tuttu. Avà pudete lancià istanze.
In questu modu, pudete creà una maghjina, assai prubabile, cù qualsiasi distribuzione Linux. Almenu, definitivamente Debian (usendu debootstrap per installà un sistema pulitu) è Rhel-family.

Source: www.habr.com

Add a comment