User Tools

Site Tools


Sidebar

cn:ccr:cloud:preparazione_immagini_per_centos_5.9_e_sl5.9_con_cloud-init

Preparare immagine cloud di CentOS 5.9 (x86_64) e ScientificLinux 5.9 (x86_64)

S.O.

Eseguendo le seguenti istruzioni da un server x86_64, si installa un server x86_64 (anche se si specifica nella variabile release l'rpm i386).

CentOS 5.9 x86_64

export SO=CentOS5.9
export releaserpm=centos-release-5-9.el5.centos.1.x86_64.rpm
export releaseurl=http://mirror3.mirror.garr.it/mirrors/CentOS/5.9/os/x86_64/CentOS/$releaserpm
export gpgkey=http://mirror3.mirror.garr.it/mirrors/CentOS/5.9/os/x86_64/RPM-GPG-KEY-CentOS-5

ScientificLinux 5.9 x86_64

export SO=SL5.9
export releaserpm=sl-release-5.9-2.sl.x86_64.rpm
export releaseurl=http://mirror3.mirror.garr.it/mirrors/scientific/59/x86_64/SL/$releaserpm
export gpgkey=http://www.scientificlinux.org/documentation/gpg/RPM-GPG-KEY-sl5

Per entrambi i S.O.

export epelrpm=epel-release-5-4.noarch.rpm
export epelurl=http://dl.fedoraproject.org/pub/epel/5/x86_64/$epelrpm
export epelgpgurl=http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-5

Creare un file immagine

export IMAGELIBDIR=/var/lib/images
mkdir -p $IMAGELIBDIR
export IMAGEFILE=$IMAGELIBDIR/cloud-image.img
dd if=/dev/zero of=$IMAGEFILE bs=2048 count=1048576
mkfs.ext3 -F $IMAGEFILE

Inizializzare il db degli rpm

export CLOUD_MOUNTPOINT=/chroot
mkdir -p $CLOUD_MOUNTPOINT
mount -o loop $IMAGEFILE $CLOUD_MOUNTPOINT
mkdir -p $CLOUD_MOUNTPOINT/var/lib/rpm
rpm --rebuilddb --root=$CLOUD_MOUNTPOINT
wget $releaseurl
rpm -i --root=$CLOUD_MOUNTPOINT --nodeps $releaserpm
rm -f $releaserpm
Installare il SO
rpm --root=$CLOUD_MOUNTPOINT --import $gpgkey 
yum --installroot=$CLOUD_MOUNTPOINT install -y rpm-build yum initscripts kernel passwd dhclient openssh-clients openssh-server vim parted e2fsprogs sudo vim-enhanced hwdata
Installare il repo EPEL
rpm --import --root=$CLOUD_MOUNTPOINT $epelgpgurl
wget $epelurl
rpm -i --root=$CLOUD_MOUNTPOINT --nodeps $epelrpm
rm -f $epelrpm
Installare il tool cloud-init
yum --installroot=$CLOUD_MOUNTPOINT install -y cloud-init

Allo stesso modo si possono installare altri RPMs che si desidera siano presenti nell’immagine.

Configurare il SO
cat <<EOF >$CLOUD_MOUNTPOINT/etc/fstab
/dev/vda1   / ext4    defaults,noatime 0 0
devpts     /dev/pts  devpts  gid=5,mode=620   0 0
tmpfs      /dev/shm  tmpfs   defaults         0 0
proc       /proc     proc    defaults         0 0
sysfs      /sys      sysfs   defaults         0 0
EOF
 
cat <<EOF >$CLOUD_MOUNTPOINT/etc/sysconfig/network
NETWORKING=yes
NOZEROCONF=yes
EOF
 
cat <<EOF >$CLOUD_MOUNTPOINT/etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE="eth0"
BOOTPROTO="dhcp"
ONBOOT="yes"
TYPE="Ethernet"
EOF

Allo stesso modo si possono gestire tutti i file di configurazione che si desidera.

Preparare l’immagine per l’upload

Settare passwd di root, aggiungere utente ec2-user, modificare sudoers

chroot $CLOUD_MOUNTPOINT
export PATH=/sbin:/bin:/usr/bin:/usr/sbin
passwd -d root
echo <SECRETE> > rootpwd
passwd --stdin root < rootpwd
rm -f rootpwd
adduser ec2-user -G adm,wheel

Con visudo scommentare la riga

%wheel  ALL=(ALL)       NOPASSWD: ALL
mkinitrd --with virtio_pci --with virtio_ring --with virtio_blk --with virtio_net --with virtio_balloon --with virtio -f /boot/initramfs-$(ls /lib/modules/).img $(ls /lib/modules/)
 
exit
Copiare il kernel e il ramdisk nella directory dell’immagine
cp -v $CLOUD_MOUNTPOINT/boot/initramfs-*img $IMAGELIBDIR
 
cp -v $CLOUD_MOUNTPOINT/boot/vmlinuz* $IMAGELIBDIR
 
umount $CLOUD_MOUNTPOINT

Importare in glance

glance image-create --name "$SO-kernel" --is-public True --container-format aki --disk-format aki < $IMAGELIBDIR/vmlinuz-2.6.18-348.16.1.el5 
ID_AKI=`glance image-list |grep $SO-kernel|awk -F '| ' '{print $2}'`
 
glance image-create --name "$SO-ramdisk" --is-public True --container-format ari --disk-format ari < $IMAGELIBDIR/initramfs-2.6.18-348.16.1.el5.img
ID_ARI=`glance image-list |grep $SO-ramdisk|awk -F '| ' '{print $2}'`
 
glance add name="$SO" is_public=True container_format=ami disk_format=ami kernel_id=$ID_AKI ramdisk_id=$ID_ARI < $IMAGEFILE

NB: in Horizon le aki e le ari non vengono visualizzate. Per istanziare l’immagine si lancia la ami. NB2: Occorre la consistenza tra le tre immagini: se si vuole rendere l’immagine ami pubblica, allora lo devono essere anche la aki e la ari (anche se non vengono cmq visualizzate nella dashboard).

Altre Note

Il tutto puo’ essere facilmente scriptabile in modo da creare on demand l’immagine sempre con gli rpm e il kernel piu’ aggiornati.

cn/ccr/cloud/preparazione_immagini_per_centos_5.9_e_sl5.9_con_cloud-init.txt · Last modified: 2013/09/24 17:06 by dorigoa@infn.it