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.
+mot de passe ne transite par le réseau ni dans le Nuage, et sans utiliser les
+`ec2-api-tools`, qui ne sont pas libre. Merci à Eucalyptus pour avoir
+implémenté l'API `--instance-initiated-shutdown-behavior` dans [[!debpkg
+euca2ools]] 2.2.
-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.
+En résumé, 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.
+Ces images machines de l'Installeur sont faites pour être pré-configurées via
+les [métadonnées d'instance](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html)
+pour installer Debian sur un autre volume. Je bute encore sur cette
+pré-configuration. Plus de détails dans un prochain article. En attendant,
+voici les commandes que j'utilise.
-En attendant, 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. J'utilise une
+image Ubuntu en attendant que [[!debbug 696595]] sont réglé et que cloud-init
+soit installé par défaut sur les images Debian.
-Depuis l'ordinateur local, lancer une instance sur le Nuage. Pour le moment il
-faut utiliser une image Ubuntu en attendant que cloud-init soit installé par
-défaut sur les images Debian (http://bugs.debian.org/696595).
+ HELPER_AMI=ami-7609bb77 # Ubuntu 12.04 LTS Precise amd64 EBS in (Asie Nord-Est)
-<pre>
-HELPER_AMI=ami-7609bb77 # Ubuntu 12.04 LTS Precise amd64 EBS in Tôkyô
-</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.
+On démarre l'instance avec un volume supplémentaire de 1 GiB qui persistera
+après l'extinction de l'instance (`/dev/sdb=:1:false`). On lui passe le script
+`debigen-install-installer-cloud` (voir plus bas).
HELPER_INSTANCE=$( euca-run-instances \
--instance-initiated-shutdown-behavior terminate \
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>
+ while [ ! $(euca-describe-instances $HELPER_INSTANCE | grep INSTANCE | cut -f 6 | tee /dev/stderr) = "running" ]
+ do sleep 30
+ done
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>
+ TARGET_VOLUME=$( euca-describe-volumes |
+ grep $HELPER_INSTANCE | grep '/dev/sdb' |
+ tee /dev/stderr | awk '{print $2}')
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 instantané 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
+ while [ ! $(euca-describe-instances $HELPER_INSTANCE | grep INSTANCE | cut -f 6 | tee /dev/stderr) = "terminated" ]
+ do sleep 30
+ done
-TARGET_SNAPSHOT=$( euca-create-snapshot $TARGET_VOLUME |
- tee /dev/stderr | awk '{print $2}')
+Et enfin, on enregistre une image à partir d'un instantané du volume.
-while euca-describe-snapshots $TARGET_SNAPSHOT | grep -q pending ; do sleep 30 ; done
-
-INSTALLER_IMAGE=$( euca-register \
+ PV_KERNEL=aki-44992845 # Démarre PV-Grub sur hd0 (Asie Nord-Est)
+
+ 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
+
+ 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>
+ --architecture x86_64
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 /vmlinuz 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>
+ #!/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 /vmlinuz 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