User Tools

Site Tools


cn:ccr:cloud:preparazione_immagini_per_debian_7.1_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_debian_7.1_con_cloud-init [2013/09/19 09:08]
dorigoa@infn.it [Importare in glance]
cn:ccr:cloud:preparazione_immagini_per_debian_7.1_con_cloud-init [2013/09/27 10:09] (current)
dorigoa@infn.it
Line 1: Line 1:
 +===== 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
 +
 +<code bash>
 +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
 +</​code>​
 +==== Creare il sistema operativo minimale =====
 +
 +== Creare un file immagine block device ==
 +<code bash>
 +dd if=/​dev/​zero of=$IMAGENAME count=2048 bs=1M
 +mkfs.ext4 -F $IMAGENAME
 +</​code>​
 +
 +== Installare il S.O. ==
 +<code bash>
 +mkdir -p $MOUNTPOINT
 +mount -o loop $IMAGENAME $MOUNTPOINT
 +debootstrap --arch amd64 wheezy $MOUNTPOINT http://​ftp.$MIRROR.debian.org/​debian
 +</​code>​
 +
 +== Configurare il S.O. ==
 +<code bash>
 +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
 +</​code>​
 +Editare il file /etc/fstab immettendo il seguente contenuto:
 +<code bash>
 +/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
 +</​code>​
 +
 +Editare il file /​etc/​network/​interfaces e rimuovere riferimenti all'​hostname:​
 +<code bash>
 +echo -e 'auto eth0\niface eth0 inet dhcp' >> /​etc/​network/​interfaces
 +rm -f /​etc/​hostname
 +</​code>​
 +
 +== 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.
 +<code bash>
 +passwd
 +# Creazione opzione di un utente se richiesto:
 +# useradd myuser
 +# passwd myuser
 +# chsh myuser
 +</​code>​
 +
 +== Installare kernel e altri tool necessari alla contestualizzazione ==
 +<code bash>
 +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
 +</​code>​
 +
 +== Installare i tools per la "​cloudificazione"​ dell'​immagine ==
 +Aggiungere il repo necessario:
 +<code bash>
 +echo "deb http://​ftp.$MIRROR.debian.org/​debian/​ wheezy-backports main" >> /​etc/​apt/​sources.list
 +apt-get update
 +</​code>​
 +Installare i cloud tools:
 +<code bash>
 +apt-get install --yes cloud-init cloud-utils cloud-initramfs-growroot ​
 +</​code>​
 +
 +== Pulizia e uscita dalla sessione chroot ==
 +<code bash>
 +rm -f /​var/​lib/​dbus/​machine-id
 +apt-get clean
 +rm -rf /tmp/*
 +rm /​etc/​resolv.conf
 +umount /proc
 +umount /dev/pts
 +exit
 +</​code>​
 +
 +== Estrarre kernel e initram da caricare in openstack ==
 +<code bash>
 +cp $MOUNTPOINT/​boot/​vmlinuz-3.2.0-4-amd64 .
 +cp $MOUNTPOINT/​boot/​initrd.img-3.2.0-4-amd64 .
 +umount -l $MOUNTPOINT
 +</​code>​
 +==== Importare in glance ====
 +<code bash>
 +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`
 +</​code>​
 +
 +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.
cn/ccr/cloud/preparazione_immagini_per_debian_7.1_con_cloud-init.txt · Last modified: 2013/09/27 10:09 by dorigoa@infn.it