Com sabeu, al núvol d'Amazon es llancen instàncies virtuals basades en imatges (l'anomenada
La documentació oficial descriu
En aquest article es parlarà de com crear la vostra pròpia AMI recolzada per EBS al núvol d'Amazon sense passos intermedis.
Pla d'acció:
- Preparar l'entorn
- Instal·leu un sistema net i feu els paràmetres necessaris
- Feu una instantània del disc
- Registre AMI
Preparant el Medi Ambient
Per als nostres propòsits, qualsevol instància de qualsevol forma és adequada, fins i tot t1.micro. Podeu executar-lo mitjançant la CLI:
aws ec2 run-instances --image-id ami-1624987f --max-count 1 --min-count 1 --key-name mel --instance-type t1.micro
Creem ebs-volume, on instal·larem el nostre sistema més tard:
aws ec2 create-volume --availability-zone us-east-1a --size 10
Aquesta ordre ens farà un disc de 10 Gb. Important: el disc ha d'estar a la mateixa zona que la instància (en el nostre cas és us-east-1a).
A continuació, heu d'adjuntar el disc a la instància:
aws ec2 attach-volume --instance-id i-2bc0925b --volume-id vol-08ab3079 --device /dev/xvdf
Ara iniciem sessió a la instància mitjançant ssh, formem el disc i muntem-lo al directori:
mkfs.ext3 /dev/xvdf
mkdir /mnt/centos-image
mount /dev/xvdf /mnt/centos-image
cd !$
Instal·lació net Centos 5.9
Abans d'instal·lar el sistema, heu de crear un arbre de directoris, muntar proc i sysfs i crear un conjunt mínim de dispositius:
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
Instal·larem el sistema amb yum i el següent fitxer de configuració:
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
Després de completar el procés d'instal·lació, podeu instal·lar els paquets necessaris de la mateixa manera:
yum -c ~/yum-centos.conf --installroot=/mnt/centos-image/ install $packet_name
Editem 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
A CentOS 5.9 encara necessiteu instal·lar un nucli amb suport xen:
yum -c ~/yum-centos.conf --installroot=/mnt/centos-image/ -y install kernel-xen
Instal·leu Grub:
chroot /mnt/centos-image/ grub-install /dev/xvdf
i genereu un nou 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
És molt important especificar tots aquests paràmetres i un nou fstab, en cas contrari el sistema no arrencarà.
A continuació, heu de crear un fitxer menu.lst per a 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
Configurem la xarxa 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
Així, obtindrem una xarxa que funcioni i la possibilitat d'iniciar sessió a la instància mitjançant les claus. Però la clau en si s'ha de transferir a la instància d'alguna manera. Això es pot fer mitjançant un script que agafarà la clau i la desarà a la instància:
vi /mnt/centos5img/etc/init.d/ec2-get-ssh
ec2-get-ssh#! / Bin / bash
# chkconfig: 2345 95 20
# nom del procés: ec2-get-ssh
# descripció: captura les credencials de la clau pública d'AWS per a l'usuari EC2
Biblioteca de funcions #Source
. /etc/rc.d/init.d/functions
# Configuració de xarxa d'origen
[ -r /etc/sysconfig/network ] &&. /etc/sysconfig/network
# Substituïu les variables d'entorn següents per al vostre sistema
exportar PATH=:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
# Comproveu que la xarxa estigui configurada
if [ "${NETWORKING}" = "no" ]; aleshores
echo "La xarxa no està configurada."
exit 1
fi
començar () {
si [! -d /root/.ssh]; aleshores
mkdir -p /root/.ssh
chmod 700 /root/.ssh
fi
# Recupereu la clau pública del servidor de metadades mitjançant HTTP
rínxol -f
si [$? -eq 0]; aleshores
echo "EC2: recupera la clau pública del servidor de metadades mitjançant HTTP".
cat /tmp/my-public-key >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
rm /tmp/my-public-key
fi
}
Atura() {
echo "No hi ha res a fer aquí"
}
reinicia() {
aturar
Començar
}
# Mira com ens van trucar.
cas "$1" a
començar)
Començar
;;
Atura)
aturar
;;
reinicia)
reprendre
;;
*)
echo $"Ús: $0 {inici|aturar|reiniciar}"
exit 1
esac
èxit $?
Fem-lo executable i l'afegim a l'inici:
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
També és recomanable desactivar Selinux, o configurar-lo correctament. En cas contrari, per exemple, és possible que la clau no es desi a la instància.
En aquest punt, podeu deixar de configurar el sistema. Ja tenim CentOS pur a punt per funcionar al núvol. Només queda desmuntar el disc ebs amb el nostre sistema i registrar ami.
umount /mnt/centos-image/proc/
umount /mnt/centos-image/sys/
umount /mnt/centos-image/
Registre AMI
Per obtenir ami des d'un disc ebs, primer heu de fer una instantània del disc:
aws ec2 create-snapshot --volume-id vol-0b4bd07a --description centos-snap
La manera més senzilla de registrar ami és mitjançant la Consola de gestió d'AWS. Per fer-ho, només cal que aneu a la secció "Instantània" del servei EC2, seleccioneu la que necessiteu (en el nostre cas és centos-snap), feu-hi clic amb el botó dret i seleccioneu "Crea una imatge des de la instantània".
Aleshores, a la finestra que s'obre, heu de seleccionar aproximadament els paràmetres següents:
Podeu esbrinar quin ID del nucli triar de la següent manera:
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
Això és tot. Ara podeu llançar instàncies.
D'aquesta manera, podeu crear una imatge, molt probablement, amb qualsevol distribució de Linux. Almenys, definitivament Debian (utilitzant debootstrap per instal·lar un sistema net) i la família Rhel.
Font: www.habr.com