User Tools

Site Tools


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

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
cn:ccr:cloud:preparazione_immagini_per_centos_5.9_e_sl5.9_con_cloud-init [2013/09/24 13:28]
dorigoa@infn.it [Creare un file immagine]
cn:ccr:cloud:preparazione_immagini_per_centos_5.9_e_sl5.9_con_cloud-init [2013/09/24 17:06] (current)
dorigoa@infn.it
Line 1: Line 1:
 +===== 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 ===
 +<code bash>
 +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
 +</​code>​
 +
 +=== ScientificLinux 5.9 x86_64 ===
 +<code bash>
 +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
 +</​code>​
 +
 +=== Per entrambi i S.O. ===
 +<code bash>
 +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
 +</​code>​
 +==== Creare un file immagine =====
 +<code bash>
 +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
 +</​code>​
 +
 +Inizializzare il db degli rpm
 +<code bash>
 +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
 +</​code>​
 +
 +==Installare il SO==
 +<code bash>
 +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
 +</​code>​
 +
 +==Installare il repo EPEL===
 +<code bash>
 +rpm --import --root=$CLOUD_MOUNTPOINT $epelgpgurl
 +wget $epelurl
 +rpm -i --root=$CLOUD_MOUNTPOINT --nodeps $epelrpm
 +rm -f $epelrpm
 +</​code>​
 +
 +== Installare il tool cloud-init ==
 +<code bash>
 +yum --installroot=$CLOUD_MOUNTPOINT install -y cloud-init
 +</​code>​
 +
 +Allo stesso modo si possono installare altri RPMs che si desidera siano presenti nell’immagine.
 +
 +==Configurare il SO==
 +<code bash>
 +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
 +</​code>​
 +
 +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
 +<code bash>
 +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
 +</​code>​
 +
 +Con visudo scommentare la riga
 +<code bash>
 +%wheel ​ ALL=(ALL) ​      ​NOPASSWD:​ ALL
 +</​code>​
 +
 +<code bash>
 +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
 +</​code>​
 +
 +== Copiare il kernel e il ramdisk nella directory dell’immagine ==
 +<code bash>
 +cp -v $CLOUD_MOUNTPOINT/​boot/​initramfs-*img $IMAGELIBDIR
 +
 +cp -v $CLOUD_MOUNTPOINT/​boot/​vmlinuz* $IMAGELIBDIR
 +
 +umount $CLOUD_MOUNTPOINT
 +</​code>​
 +==== Importare in glance ====
 +<code bash>
 +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
 +
 +</​code>​
 +**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