Como sabedes, na nube de Amazon lánzanse instancias virtuais baseadas en imaxes (as chamadas
Descríbese a documentación oficial
Neste artigo comentarase como crear a túa propia AMI apoiada por EBS na nube de Amazon sen pasos intermedios.
Plan de Acción:
- Preparar o medio ambiente
- Instale un sistema limpo e realice os axustes necesarios
- Fai unha instantánea do disco
- Rexistrarse AMI
Preparando o Medio Ambiente
Para os nosos propósitos, calquera instancia de calquera forma é adecuada, incluso t1.micro. Pode executalo a través da CLI:
aws ec2 run-instances --image-id ami-1624987f --max-count 1 --min-count 1 --key-name mel --instance-type t1.micro
Imos crear ebs-volume, onde instalaremos o noso sistema máis tarde:
aws ec2 create-volume --availability-zone us-east-1a --size 10
Este comando creará un disco de 10 Gb para nós. Importante: o disco debe estar na mesma zona que a instancia (no noso caso é us-east-1a).
A continuación, cómpre anexar o disco á instancia:
aws ec2 attach-volume --instance-id i-2bc0925b --volume-id vol-08ab3079 --device /dev/xvdf
Agora imos iniciar sesión na instancia a través de ssh, formatear o disco e montámolo no directorio:
mkfs.ext3 /dev/xvdf
mkdir /mnt/centos-image
mount /dev/xvdf /mnt/centos-image
cd !$
Instalación limpa Centos 5.9
Antes de instalar o sistema, cómpre crear unha árbore de directorios, montar proc e sysfs e crear un conxunto mínimo de dispositivos:
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
Instalaremos o sistema usando yum e o seguinte ficheiro de configuración:
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
Despois de completar o proceso de instalación, pode instalar os paquetes necesarios do mesmo xeito:
yum -c ~/yum-centos.conf --installroot=/mnt/centos-image/ install $packet_name
Editemos 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
En CentOS 5.9 aínda necesitas instalar un núcleo con soporte xen:
yum -c ~/yum-centos.conf --installroot=/mnt/centos-image/ -y install kernel-xen
Instalar Grub:
chroot /mnt/centos-image/ grub-install /dev/xvdf
e xera un novo 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
É moi importante especificar todos estes parámetros e un novo fstab, se non, o sistema non arrancará.
A continuación, debes crear un ficheiro menu.lst para 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
Imos configurar a rede e o 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
Así, conseguiremos unha rede que funcione e a posibilidade de iniciar sesión na instancia usando as claves. Pero a chave en si debe ser transferida á instancia dalgún xeito. Isto pódese facer mediante un script que tomará a clave e gardará na instancia:
vi /mnt/centos5img/etc/init.d/ec2-get-ssh
ec2-get-ssh#! / bin / bash
# chkconfig: 2345 95 20
# nome do proceso: ec2-get-ssh
# descrición: captura as credenciais de clave pública de AWS para o usuario EC2
#Biblioteca de funcións fonte
. /etc/rc.d/init.d/functions
# Configuración da rede de orixe
[ -r /etc/sysconfig/network ] &&. /etc/sysconfig/network
# Substitúe as seguintes variables de ambiente para o seu sistema
exportar PATH=:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
# Comproba que a rede está configurada
if [ "${NETWORKING}" = "non" ]; entón
echo "A rede non está configurada."
saída 1
fi
start () {
se [! -d /root/.ssh ]; entón
mkdir -p /root/.ssh
chmod 700 /root/.ssh
fi
# Recuperar a clave pública do servidor de metadatos mediante HTTP
rizo -f
se [$? -eq 0]; entón
echo "EC2: Recuperar a clave pública do servidor de metadatos mediante HTTP."
cat /tmp/my-public-key >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
rm /tmp/my-public-key
fi
}
parar() {
echo "Nada que facer aquí"
}
reiniciar () {
deixar
Comezar
}
# Mira como nos chamaban.
caso "$1" en
comezar)
Comezar
;;
parar)
deixar
;;
reiniciar)
reiniciar
;;
*)
echo $"Uso: $0 {iniciar|parar|reiniciar}"
saída 1
que C
saír de $?
Imos facelo executable e engadímolo ao inicio:
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
Tamén é recomendable desactivar Selinux, ou configuralo correctamente. En caso contrario, por exemplo, é posible que a chave non se garde na instancia.
Neste punto pode deixar de configurar o sistema. Xa temos CentOS puro listo para funcionar na nube. Só queda desmontar o disco ebs co noso sistema e rexistrar ami.
umount /mnt/centos-image/proc/
umount /mnt/centos-image/sys/
umount /mnt/centos-image/
Rexistro AMI
Para obter ami dun disco ebs, primeiro cómpre facer unha instantánea do disco:
aws ec2 create-snapshot --volume-id vol-0b4bd07a --description centos-snap
A forma máis sinxela de rexistrar ami é a través da Consola de xestión de AWS. Para iso, só tes que ir á sección "Instantáneas" do servizo EC2, seleccionar a que necesitas (no noso caso é centos-snap), facer clic co botón dereito sobre ela e seleccionar "Crear imaxe desde Snapshot"
A continuación, na xanela que se abre, cómpre seleccionar aproximadamente os seguintes parámetros:
Podes saber que ID do núcleo escoller do seguinte xeito:
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
Iso é todo. Agora podes lanzar instancias.
Deste xeito, podes crear unha imaxe, moi probablemente, con calquera distribución de Linux. Polo menos, definitivamente Debian (usando debootstrap para instalar un sistema limpo) e a familia Rhel.
Fonte: www.habr.com