Creando tu propia imagen con CentOS 5.9 puro en la nube de Amazon

Como sabes, en la nube de Amazon se lanzan instancias virtuales en base a imágenes (las llamadas IAM). Amazon ofrece una gran cantidad de ellas, también se pueden utilizar imágenes públicas preparadas por terceros, de las que el proveedor de la nube, por supuesto, no asume ninguna responsabilidad. Pero a veces necesitas una imagen del sistema limpia con los parámetros necesarios, que no está en la lista de imágenes. Entonces la única salida es crear tu propio AMI.

La documentación oficial describe manera creando una “AMI respaldada por un almacén de instancias”. La desventaja de este enfoque es que la imagen terminada también deberá convertirse en una "AMI respaldada por EBS".

En este artículo se analizará cómo crear su propia AMI respaldada por EBS en la nube de Amazon sin pasos intermedios.

Plan de acción:

  • Preparar el ambiente
  • Instale un sistema limpio y realice los ajustes necesarios.
  • Tomar una instantánea del disco.
  • Registrar IAM

Preparando el Ambiente

Para nuestros propósitos, cualquier instancia de cualquier forma es adecuada, incluso t1.micro. Puede ejecutarlo a través de la CLI:

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

Creemos ebs-volume, donde instalaremos nuestro sistema más tarde:

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

Este comando nos creará un disco de 10 Gb. Importante: el disco debe estar en la misma zona que la instancia (en nuestro caso es us-east-1a).
A continuación, debe adjuntar el disco a la instancia:

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

Ahora iniciemos sesión en la instancia a través de ssh, formateemos el disco y lo montemos en el directorio:

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

Instalación limpia de Centos 5.9

Antes de instalar el sistema, debe crear un árbol de directorios, montar proc y sysfs y crear un conjunto 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 el sistema usando yum y el siguiente archivo 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

Después de completar el proceso de instalación, puede instalar los paquetes necesarios de la misma manera:

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ún necesitas instalar un kernel 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

y generar un nuevo 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

Es muy importante especificar todos estos parámetros y un nuevo fstab; de lo contrario, el sistema no arrancará.
A continuación necesitas crear un archivo 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

Configuremos la red y 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

Por lo tanto, obtendremos una red que funcione y la posibilidad de iniciar sesión en la instancia utilizando las claves. Pero la clave en sí debe transferirse a la instancia de alguna manera. Esto se puede hacer usando un script que tomará la clave y la guardará en la instancia:

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

ec2-obtener-ssh#! / Bin / bash
#chkconfig: 2345 95 20
# nombre del proceso: ec2-get-ssh
# descripción: Capture las credenciales de clave pública de AWS para el usuario de EC2

#Biblioteca de funciones fuente
. /etc/rc.d/init.d/funciones

# Configuración de red de origen
[ -r /etc/sysconfig/network ] &&. /etc/sysconfig/red

# Reemplace las siguientes variables de entorno para su sistema
exportar RUTA=:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin

# Verifique que la red esté configurada
si [ "${NETWORKING}" = "no" ]; entonces
echo "La red no está configurada".
salir de 1
fi

inicio () {
si [! -d /root/.ssh]; entonces
mkdir -p /root/.ssh
chmod 700 /raíz/.ssh
fi
# Recuperar la clave pública del servidor de metadatos usando HTTP
rizo -f 169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/mi-clave-pública
si [$? -ecuación 0 ]; entonces
echo "EC2: recuperar la clave pública del servidor de metadatos mediante HTTP".
cat /tmp/mi-clave-pública >> /root/.ssh/claves_autorizadas
chmod 600 /root/.ssh/claves_autorizadas
rm /tmp/mi-clave-pública
fi
}

detener() {
echo "Nada que hacer aquí"
}

Reanudar() {
detener
comienzo
}

# Mira cómo nos llamaron.
caso "$ 1" en
inicio)
comienzo
;;
parada)
detener
;;
reinicio)
reanudar
;;
*)
echo $"Uso: $0 {inicio|detener|reiniciar}"
salir de 1
esac

salir $?
Hagámoslo ejecutable y agréguelo al 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

También es recomendable desactivar Selinux, o configurarlo correctamente. De lo contrario, por ejemplo, es posible que la clave no se guarde en la instancia.
En este punto puede dejar de configurar el sistema. Ya tenemos CentOS puro listo para ejecutarse en la nube. Ya solo queda desmontar el disco ebs con nuestro sistema y registrar ami.

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

Registro IAM

Para obtener ami de un disco ebs, primero debe tomar una instantánea del disco:

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

La forma más sencilla de registrar ami es a través de la Consola de administración de AWS. Para hacer esto, solo necesita ir a la sección "Instantáneas" en el servicio EC2, seleccionar la que necesita (en nuestro caso es centos-snap), hacer clic derecho sobre ella y seleccionar "Crear imagen a partir de instantáneas".
Luego, en la ventana que se abre, debe seleccionar aproximadamente los siguientes parámetros:

Creando tu propia imagen con CentOS 5.9 puro en la nube de Amazon

Puede averiguar qué ID de kernel elegir de la siguiente 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

Eso es todo. Ahora puedes lanzar instancias.
De esta forma, podrás crear una imagen, muy probablemente, con cualquier distribución de Linux. Al menos, definitivamente Debian (usando debootstrap para instalar un sistema limpio) y la familia Rhel.

Fuente: habr.com

Añadir un comentario