Créer une base box Debian sous Virtualbox pour Vagrant
14 Jan 2014
Une liste impressionante de base box existent déjà sur www.vagrantbox.es. Toutefois, je n’ai pas trouvé celle qui me convient.
J’ai donc décidé de créer la mienne et pour cela la documentation de Vagrant explique parfaitement comment créer une base box.
Mon installation :
- Mac OSX 10.9.3
- Virtualbox 4.3.12
- Vagrant 1.6.3
Avant toute chose, téléchargeons l’image iso d’une Debian 7 (Wheezy) (AMD64).
Ensuite, grâce à Virtualbox, créons la machine virtuelle qui servira à créer notre base box :
- Nom : my-first-base-box
- Mémoire : 512 MB
- Espace disque : 50 GB (dynamiquement alloué)
- Type : VMDK
La mémoire pourra être redéfinie dans votre Vagrantfile
mais attribuez lui une valeur par défaut raisonnable. Concernant l’espace disque, définissez une place assez importante pour que l’utilisateur de la base box ne soit pas bridé. Le fait de l’allouer dynamiquement permettra de ne consommer réellement que ce qui est utilisé.
Démarrons notre machine virtuelle, sélectionnons l’iso précédemment téléchargée et installons Debian :
- Hostname : vagrantbox
- Domain : vagrant.com
- Mot de passe root : vagrant
- Nouvel utilisateur :
- Nom complet : vagrant
- Identifiant : vagrant
- Mot de passe : vagrant
- Partionnement :
- Utilisation du disque complet
- Tout dans une seule partition
- Logiciels :
- Utilitaires standard du système
Selon la documentation, le mot de passe root, le nouvel utilisateur ainsi que son mot de passe doivent être égal à “vagrant” obligatoirement.
Nous devons maintenant préparer l’environnement pour Vagrant.
Première étape, notre utilisateur vagrant
doit être un sudoer sans mot de passe,
1
2
$ apt-get install sudo
$ visudo
Remplacer le contenu par :
1
2
3
4
5
6
7
8
9
10
Defaults env_keep="SSH_AUTH_SOCK"
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# User privilege specification
root ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%admin ALL=(ALL) ALL
%admin ALL=NOPASSWD: ALL
Ajoutons l’utilisateur vagrant
au groupe admin
,
1
2
$ groupadd admin
$ usermod -a -G admin vagrant
Nous devons ensuite mettre en place les ajouts spécifiques à Virtualbox dans la machine virtuelle,
1
2
3
4
5
6
$ apt-get autoremove virtualbox-ose-guest-dkms virtualbox-ose-guest-utils virtualbox-ose-guest-x11
$ apt-get install linux-headers-$(uname -r) build-essential
$ wget -cq http://dlc.sun.com.edgesuite.net/virtualbox/4.3.12/VBoxGuestAdditions_4.3.12.iso
$ mount -o loop,ro VBoxGuestAdditions_4.3.12.iso /mnt
$ /mnt/VBoxLinuxAdditions.run --nox11
$ umount /mnt
Ces ajouts servent à optimiser les performances, la stabilité du système, monter des dossiers partagés…
Un serveur SSH doit également être configuré pour que Vagrant puisse se connecter via la commande vagrant ssh
,
1
2
3
4
5
6
7
8
9
10
$ apt-get install openssh-server openssh-client
$ echo 'UseDNS no' >> /etc/ssh/sshd_config
# On désactive les DNS au niveau de la configuration du
# serveur SSH améliorer la rapidité de connexion
$ su vagrant
$ cd ~
$ mkdir .ssh
$ wget --no-check-certificate -O .ssh/authorized_keys https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys
Vagrant est capable de provisionner une machine virtuelle grâce à Chef. Il n’est plus nécessaire de l’installer lors de la création de la base box.
Il est même préférable de passer par le plugin vagrant omnibus.
Sur le host (qui dispose de vagrant),
1
$ vagrant plugin install vagrant-omnibus
Voici un exemple de Vagrantfile
utilisant omnibus pour installer la dernière version de chef,
1
2
3
4
5
6
7
8
9
Vagrant.configure("2") do |config|
config.vm.define "my-first-vm" do |mfv|
mfv.vm.box = "my-first-base-box"
mfv.vm.hostname = "my-first-vm"
mfv.omnibus.chef_version = :latest
end
end
Notre machine virtuelle est prête. Il ne nous reste plus qu’à faire du ménage et à l’éteindre,
1
2
$ sudo apt-get clean
$ sudo poweroff
Créons la base box,
1
2
3
$ vagrant package --base my-first-base-box
# coffee time!
$ mv package.box my-first-base-box.box
Testons maintenant cette fameuse base box,
1
2
3
4
5
6
$ vagrant box add my-first-base-box my-first-base-box.box
# coffee time!
$ mkdir test
$ cd test
$ vagrant init my-first-base-box
$ vagrant up