Criando sua própria imagem com CentOS 5.9 puro na nuvem Amazon

Como você sabe, na nuvem Amazon as instâncias virtuais são lançadas com base em imagens (as chamadas AMI). A Amazon fornece um grande número deles; você também pode usar imagens públicas preparadas por terceiros, pelas quais o provedor de nuvem, é claro, não tem qualquer responsabilidade. Mas às vezes você precisa de uma imagem de sistema limpa com os parâmetros necessários, que não está na lista de imagens. Então a única saída é fazer sua própria AMI.

A documentação oficial descreve processo criando uma “AMI baseada em armazenamento de instância”. A desvantagem desta abordagem é que a imagem finalizada também precisará ser convertida em uma “AMI apoiada por EBS”

Como criar sua própria AMI apoiada por EBS na nuvem Amazon sem etapas intermediárias será discutido neste artigo.

Plano de ação:

  • Prepare o ambiente
  • Instale um sistema limpo e faça as configurações necessárias
  • Tire um instantâneo do disco
  • Registrar AMI

Preparando o Ambiente

Para nossos propósitos, qualquer instância de qualquer formato é adequada, até mesmo t1.micro. Você pode executá-lo através da CLI:

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

Vamos criar o ebs-volume, onde instalaremos nosso sistema posteriormente:

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

Este comando criará um disco de 10 Gb para nós. Importante: o disco deve estar na mesma zona da instância (no nosso caso é us-east-1a).
Em seguida, você precisa anexar o disco à instância:

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

Agora vamos fazer login na instância via ssh, formatar o disco e montá-lo no diretório:

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

Instalando Centos 5.9 limpo

Antes de instalar o sistema, você precisa criar uma árvore de diretórios, montar proc e sysfs e criar um 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 o sistema usando yum e o seguinte arquivo de configuração:
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

Após concluir o processo de instalação, você poderá instalar quaisquer pacotes necessários da mesma maneira:

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

Vamos editar o 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

No CentOS 5.9 você ainda precisa instalar um kernel com suporte xen:

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

Instale o Grub:

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

e gere um 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

É muito importante especificar todos esses parâmetros e um novo fstab, caso contrário o sistema não inicializará.
Em seguida, você precisa criar um arquivo menu.lst para o 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

Vamos 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

Assim, obteremos uma rede funcional e a capacidade de fazer login na instância usando as chaves. Mas a própria chave precisa ser transferida de alguma forma para a instância. Isso pode ser feito usando um script que pegará a chave e a salvará na instância:

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

ec2-get-ssh#! / Bin / bash
#chkconfig: 2345 95 20
# nome do processo: ec2-get-ssh
# description: Capturar credenciais de chave pública da AWS para usuário EC2

#Biblioteca de funções de origem
. /etc/rc.d/init.d/functions

# Configuração de rede de origem
[ -r /etc/sysconfig/network ] &&. /etc/sysconfig/rede

# Substitua as seguintes variáveis ​​de ambiente para seu sistema
exportar PATH=:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin

# Verifique se a rede está configurada
if [ "${NETWORKING}" = "não"]; então
echo "A rede não está configurada."
sair 1
fi

start () {
se [! -d /root/.ssh]; então
mkdir -p /root/.ssh
chmod 700 /root/.ssh
fi
# Recupera a chave pública do servidor de metadados usando HTTP
enrolar -f 169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/minha-chave-pública
se [$? -eq 0]; então
echo "EC2: Recuperar chave pública do servidor de metadados usando HTTP."
cat /tmp/my-public-key >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
rm /tmp/minha-chave pública
fi
}

Pare() {
echo "Nada para fazer aqui"
}

reiniciar() {
Pare
começo
}

# Veja como fomos chamados.
caso "$ 1" em
começar)
começo
;;
Pare)
Pare
;;
reinicialização)
restart
;;
*)
echo $"Uso: $0 {iniciar|parar|reiniciar}"
sair 1
esac

sair $?
Vamos torná-lo executável e adicioná-lo à inicialização:

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ém é aconselhável desabilitar o Selinux ou configurá-lo corretamente. Caso contrário, por exemplo, a chave poderá não ser salva na instância.
Neste ponto você pode parar de configurar o sistema. Já temos CentOS puro pronto para rodar na nuvem. Resta desmontar o disco ebs do nosso sistema e registrar ami.

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

Registro AMI

Para obter o ami de um disco ebs, primeiro você precisa tirar um instantâneo do disco:

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

A maneira mais fácil de registrar o ami é por meio do AWS Management Console. Para fazer isso, basta ir até a seção “Snapshots” do serviço EC2, selecionar o que você precisa (no nosso caso é centos-snap), clicar com o botão direito sobre ele e selecionar “Criar imagem do instantâneo”
Então, na janela que se abre, você precisa selecionar aproximadamente os seguintes parâmetros:

Criando sua própria imagem com CentOS 5.9 puro na nuvem Amazon

Você pode descobrir qual ID de kernel escolher da seguinte maneira:

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

Isso é tudo. Agora você pode iniciar instâncias.
Desta forma, você pode criar uma imagem, provavelmente, de qualquer distribuição Linux. Pelo menos, definitivamente Debian (usando debootstrap para instalar um sistema limpo) e família Rhel.

Fonte: habr.com

Adicionar um comentário