--- /dev/null
+[[!meta date="Fri, 18 Jan 2013 21:03:36 +0900"]]
+[[!meta updated="Fri, 18 Jan 2013 21:03:36 +0900"]]
+[[!tag Debian]]
+
+[[!meta title="L'installeur Debian dans un nuage, part 2."]]
+
+J'arrive enfin à créer une [[image machine de l'installeur
+Debian|installeur-debian-dans-un-nuage]] automatiquement, sans qu'aucune clé ou
+mot de passe ne transite dans le réseau ni sur le Nuage.
+
+Pour ce faire, je démarre une micro-instance avec un volume supplémentaire, et
+je lui passe un script via [[cloud-init]], qui va télécharger l'installeur
+Debian sur ce volume et éteindre la micro instance. Ensuite, j'enregistre ce
+volume comme image machine.
+
+Les images machines de l'Installeur créées ainsi peuvent être démarrées
+avec une pré-configuration pour installer Debian sur un autre volume. Je
+bute encore sur cette pré-configuration. Plus de détails dans un
+prochain article.
+
+En attandant, voici les commandes que j'utilise. Mettez-les ensembles et vous
+obtiendrez un script qui n'est pas du grand art, mais qui marche.
+
+Depuis l'ordinateur local, lancer une instance sur le Nuage. Pour le moment il
+faut utiliser une image Ubuntu en attandant que cloud-init soit installé par
+défaut sur les images Debian (http://bugs.debian.org/696595).
+
+<pre>
+HELPER_AMI=ami-7609bb77 # Ubuntu 12.04 LTS Precise amd64 EBS in Tokyo
+</pre>
+
+On passe le script debigen-install-installer-cloud (voir plus bas). L'instance
+démarre avec un volume supplémentaire de 1 GiB qui persistera après
+l'extinction de l'instance.
+
+<pre>
+HELPER_INSTANCE=$( euca-run-instances \
+ --instance-initiated-shutdown-behavior terminate \
+ --instance-type t1.micro \
+ --block-device-mapping /dev/sdb=:1:false \
+ --user-data-file debigen-install-installer-cloud \
+ $HELPER_AMI |
+ tee /dev/stderr | grep INSTANCE | awk '{print $2}')
+</pre>
+
+On attend que le démarrage soit fini
+
+<pre>
+while [ ! $(euca-describe-instances $HELPER_INSTANCE | grep INSTANCE | cut -f 6 | tee /dev/stderr) = "running" ]; do sleep 30; done
+</pre>
+
+On récupère le numéro du volume persistant.
+
+<pre>
+TARGET_VOLUME=$( euca-describe-volumes |
+ grep $HELPER_INSTANCE | grep '/dev/sdb' |
+ tee /dev/stderr | awk '{print $2}')
+</pre>
+
+On attend que le script termine l'instance.
+
+<pre>
+while [ ! $(euca-describe-instances $HELPER_INSTANCE | grep INSTANCE | cut -f 6 | tee /dev/stderr) = "terminated" ]; do sleep 30; done
+</pre>
+
+Et enfin, on enregistre une images à partir d'un instantanné du volume.
+(Notez que `PV_KERNEL=aki-44992845` est pour la région de Tôkyô.
+
+<pre>
+# PV-Grub kernels to boot the installer (hd0)
+# See from http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html
+PV_KERNEL=aki-44992845
+
+TARGET_SNAPSHOT=$( euca-create-snapshot $TARGET_VOLUME |
+ tee /dev/stderr | awk '{print $2}')
+
+while euca-describe-snapshots $TARGET_SNAPSHOT | grep -q pending ; do sleep 30 ; done
+
+INSTALLER_IMAGE=$( euca-register \
+ --name test_di \
+ --description test_of_debian_installer \
+ --snapshot $TARGET_SNAPSHOT \
+ --kernel $PV_KERNEL \
+ --architecture x86_64 |
+ tee /dev/stderr | awk '{print $2}')
+</pre>
+
+Voici le script appelé debigen-install-installer-cloud, lancé plus haut.
+
+<pre>
+#!/bin/sh -ex
+
+mke2fs -L debian-installer /dev/xvdb -F
+mount LABEL=debian-installer /mnt/
+
+cd /mnt
+
+ARCH=amd64
+DIST=squeeze
+DI_VERSION=20110106+squeeze4+b2
+MIRROR=jp
+BASEURL=http://ftp.$MIRROR.debian.org/debian/dists/$DIST/main/installer-$ARCH/$DI_VERSION/images/netboot/xen
+
+wget $BASEURL/initrd.gz $BASEURL/vmlinuz
+
+mkdir -p boot/grub
+
+cat > boot/grub/menu.lst <<__END__
+default 0
+timeout 3
+
+title Debian Installer ($DI_VERSION $ARCH)
+root (hd0)
+kernel /linux root=LABEL=debian-installer ro console=hvc0 auto=true priority=critical url=http://169.254.169.254/latest/user-data DEBIAN_FRONTEND=text
+initrd /initrd.gz
+__END__
+
+halt
+</pre>