===== 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.