===== Preparare immagine cloud di CentOS 5.9 (x86_64) e ScientificLinux 5.9 (x86_64) ===== * Alvise Dorigo (INFN Padova), Marco Caberletti (INFN-CNAF), Paolo Veronesi (INFN-CNAF) * Adattato da: [[http://wiki.infn.it/cn/ccr/cloud/preparazione_immagini_per_centos_6.4_e_sl6.4_con_cloud-init|Preparazione immagini per CentOS 6.4 e SL 6.4 con cloud-init]] ==== 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 <$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 <$CLOUD_MOUNTPOINT/etc/sysconfig/network NETWORKING=yes NOZEROCONF=yes EOF cat <$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 > 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.