===== Preparare immagine cloud di Debian 7.1 Wheezy (x86_64) =====
* Alvise Dorigo (INFN Padova)
* Inspirato a: [[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]]
* Adattato da: [[http://willhaley.com/blog/create-a-custom-debian-live-environment|Create a custom debian live environment]]
* Altra fonte: [[http://linuxconfig.org/howto-create-bundle-upload-and-access-custom-debian-ami-using-ubuntu|Howto CREATE BUNDLE UPLOAD and ACCESS custom Debian AMI using ubuntu]]
==== S.O. e tools necessari ====
Le successive operazioni vanno eseguite come utente root da una macchina (reale o virtuale) che esegua un S.O. Debian7
export IMAGELIBDIR=/var/lib/images
mkdir -p $IMAGELIBDIR
export IMAGENAME=$IMAGELIBDIR/Debian7.img
export MIRROR=ch
# il mirror può essere scelto dalla lista riportata qui
# http://ftp.debian.org/debian/README.mirrors.html
# cambiando opportunamente il codice paese (nell'esempio
# ho scelto ch, ma poteva essere "us", "it", "fr", etc...
# alla data di questa modifica (2013-09-19), il mirror "it" sembra non rispondere
#
export MOUNTPOINT=/mnt/chroot
apt-get install --yes debootstrap syslinux parted
==== Creare il sistema operativo minimale =====
== Creare un file immagine block device ==
dd if=/dev/zero of=$IMAGENAME count=2048 bs=1M
mkfs.ext4 -F $IMAGENAME
== Installare il S.O. ==
mkdir -p $MOUNTPOINT
mount -o loop $IMAGENAME $MOUNTPOINT
debootstrap --arch amd64 wheezy $MOUNTPOINT http://ftp.$MIRROR.debian.org/debian
== Configurare il S.O. ==
chroot $MOUNTPOINT
mount none -t proc /proc
mount -t devpts none /dev/pts
export HOME=/root
export LC_ALL=C
apt-get install dialog dbus --yes
dbus-uuidgen > /var/lib/dbus/machine-id
apt-get update --yes
apt-get install --yes makedev vim locales
cd /dev
for dev in "zero null console generic std"; do MAKEDEV $dev; done
cd
Editare il file /etc/fstab immettendo il seguente contenuto:
/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
Editare il file /etc/network/interfaces e rimuovere riferimenti all'hostname:
echo -e 'auto eth0\niface eth0 inet dhcp' >> /etc/network/interfaces
rm -f /etc/hostname
== Impostare la password di root (non obbligatorio) + customizzazione user ==
Questo step può essere tralasciato se si intende accedere all'account di root solo tramite chiave pubblica.
passwd
# Creazione opzione di un utente se richiesto:
# useradd myuser
# passwd myuser
# chsh myuser
== Installare kernel e altri tool necessari alla contestualizzazione ==
apt-get install --no-install-recommends --yes linux-image-3.2.0-4-amd64 net-tools tcpdump python-cheetah python-requests python-six python python-boto python-oauth python-configobj python-prettytable python-yaml python-software-properties wget openssh-client openssh-server gparted rsync syslinux partclone python-crypto python-m2crypto python-paramiko initramfs-tools ntp ntpdate sudo curl
== Installare i tools per la "cloudificazione" dell'immagine ==
Aggiungere il repo necessario:
echo "deb http://ftp.$MIRROR.debian.org/debian/ wheezy-backports main" >> /etc/apt/sources.list
apt-get update
Installare i cloud tools:
apt-get install --yes cloud-init cloud-utils cloud-initramfs-growroot
== Pulizia e uscita dalla sessione chroot ==
rm -f /var/lib/dbus/machine-id
apt-get clean
rm -rf /tmp/*
rm /etc/resolv.conf
umount /proc
umount /dev/pts
exit
== Estrarre kernel e initram da caricare in openstack ==
cp $MOUNTPOINT/boot/vmlinuz-3.2.0-4-amd64 .
cp $MOUNTPOINT/boot/initrd.img-3.2.0-4-amd64 .
umount -l $MOUNTPOINT
==== Importare in glance ====
glance image-create --name "Debian7-kernel" --is-public True --container-format aki --disk-format aki --file vmlinuz-3.2.0-4-amd64
ID_AKI=`glance image-list |grep Debian7-kernel|awk -F '| ' '{print $2}'`
glance image-create --name "Debian7-ramdisk" --is-public True --container-format ari --disk-format ari --file initrd.img-3.2.0-4-amd64
ID_ARI=`glance image-list |grep Debian7-ramdisk|awk -F '| ' '{print $2}'`
glance image-create --name="Debian7" --disk-format=ami --container-format=ami --is-public True --property kernel_id=$ID_AKI --property ramdisk_id=$ID_ARI < $IMAGENAME`
Nota: L'immagine così costruita una volta istanziata ha una partizione (montata in root "/") che e' resizable, nel senso che la sua dimensione eguagliera' quella specificata dal flavor col quale si è istanziata l'immagine da OpenStack.