z720.net https://z720.net z720.net: Blog Futur https://z720.net/2020/futur Wed, 01 Jan 2020 11:00:00 +0100 https://z720.net/2020/futur Vagrant: Créer des images custom - "Base boxes" Suite à mon article précédent sur Vagrant, Nous allons un peu creuser le mécanisme de création des base boxes. L'idée est d'obtenir un système de référence représentant une infrastructure, une catégorie de projets... qui puisse être personnalisée ou paramétrées pour un projet concret via le fichier Vagrantfile.

Ces base boxes peuvent être très généralistes en n'offrant qu'un système vierge ou très spécialisées en offrant un systèmes avec des applicaitons et services déjà installés et paramétrés.

Dans cet exemple, nous allons créer une simple image Ubuntu, probablement très similaire à ubuntu/trusty64 sur le dépot [Atlas]. Mais dans cette box, vous saurez exactement ce qui est installé.

Créer une image Vagrant custom Ubuntu

Le principe est le même pour les images d'autres systèmes. Posez-vous la question de la raison pour laquelle vous n’utilisez pas les images fournie par Ubuntu ou tout autre éditeur dont vous avez besoin.

Ce guide se base sur:

Résumé:

  1. Créer une VM vagrant-image
  2. Installer le système (avec un serveur SSH) avec l'utilisateur vagrant par défaut
  3. Désactiver la vérification du mot de passe pour l'élévation de privilèges de l'utilisateur vagrant (remove sudo password)
  4. Configurer l'accès SSH avec la clé Vagrant
  5. Installer les addons invités
  6. Personnalisez l'instance
  7. Mettre à jour le système
  8. Packager la box

Créer une VM

Vous pouvez utiliser n'importe quel "provider" compatible. Nous utiliserons VirtualBox comme hyperviseur, mais la procédure est similaire pour les autres:

  • Nom: vagrant-image
  • Type: Linux,
  • Version: Ubuntu64,
  • Mémoire: 512Mo (ou plus),
  • User : vagrant (Vagrant s'attend à utiliser cet utilisateur par défaut)

La taille du disque est à votre convenance selon l'usage prévu, il est préférable de prendre une taille adaptable pour réduire la taille finale de l'image au minimum en cas de partage même en interne (l'image doit être téléchargée/copiée).

Nous avons utilisé vagrant-image comme nom de machine virtuelle, vous pouvez utiliser le nom que vous voulez, mais il sera nécessaire lors de l'opération de packaging. Evitez donc les noms trop compliqués.

Installer le système

Télécharger et installer Ubuntu Server avec OpenSSH pour pouvoir accéder au système depuis l’hôte.

Autorisations et permissions d'accès

On commence par désactiver le mot de passe sudo pour l'utilisateur vagrant pouvoir exécuter des commandes par script:

Créer un fichier de configuration pour sudo:

sudo visudo -f /etc/sudoers.d/vagrant

avec le contenu suivant:

# add vagrant user
vagrant ALL=(ALL) NOPASSWD:ALL

Cette étape est importante car Vagrant s'attend à ne pas avoir à fournir de mot de passe. Cela permet à Vagrant de modifier la configuration réseau, de monter des partages et d'installer les package nécessaires de façon automatique.

Accès SSH

Ensuite on va configurer SSH avec la clé Vagrant. Cette clé ssh va permettre à vagrant la machine hôte se connecter à la machine invitée pour y exécuter les commandes.

mkdir -p /home/vagrant/.ssh
chmod 0700 /home/vagrant/.ssh
wget --no-check-certificate \
    https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub \
    -O /home/vagrant/.ssh/authorized_keys
chmod 0600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant /home/vagrant/.ssh

Dans le fichier de configuration d'OpenSSH Server /etc/ssh/sshd_config:

sudo nano /etc/ssh/sshd_config

s'assurer que le fichier utilisateur est pris en compte que la ligne suivante est présente ou n'est pas commentée :

AuthorizedKeysFile %h/.ssh/authorized_keys

On utilise la clé publiée par Vagrant (insecure car les parties privée et public sont sur Github) pour que Vagrant puisse se connecter à l'image après téléchargement, puis à la première connexion cette clé sera automatiquement remplacée par une nouvelle propre à l’utilisateur.

Ne pas oublier de redémarrer le serveur ssh s'il faut en modifier la config:

sudo service ssh restart

Installer les utilitaires VirtualBox

Pour que l'image fonctionne "bien", il faut installer les utilitaires invités sur la machine invité, après avoir ajouté l'image à la VM (Périphériques > Insérer l'image des Additions invités...)

sudo apt-get install linux-headers-generic build-essential dkms
sudo mount /dev/cdrom /mnt 
cd /mnt
sudo ./VBoxLinuxAdditions.run

Personnaliser

C'est le moment éventuel de personnaliser le système:

  • Ajouter des composants (languages, serveurs)
  • Modifier la configuration par défaut (dépots..)

C'est selon l'utilisation que vous voulez faire de cette box. Voyez dans cette personnalisation, des éléments que vous utilisez systématiquement dans ce contexte. L'objectif, c'est d'avoir un modèle correspondant à un environnemnet ou une infrastructure particulière. On peut imaginer la construction d'une base box de profiling qui soit le même système d'habitude mais avec des outils d'audit particuliers (mémoire, disque...)

Packager l'image

Vous devriez avoir maintenant un système correspondant à vos besoins, il faut maintenant packager cette image. C'est à dire créer une archive avec:

  • les fichiers associés à l'image disque qui dépendent du provider de VM
  • le fichier metadata.json qui contient notamment le provider à utiliser

Il est recommandé d'optimiser l'image disque avant de faire le package afin d'en réduire la taille.

# Remplir le disque avec des zéros
sudo dd if=/dev/zero of=/EMPTY bs=1M
sudo rm -f /EMPTY

Ensuite on peut lancer la commande vagrant package --base vagrant-image:

[vagrant-image] Attempting graceful shutdown of VM...
[vagrant-image] Forcing shutdown of VM...
[vagrant-image] Clearing any previously set forwarded ports...
[vagrant-image] Exporting VM...
[vagrant-image] Compressing package to: /current/directory/package.box

Le fichier package.box créé correspond à votre base box Vagrant, vous pouvez le partager et même le publier sur [Atlas].

Tester / Utiliser votre box

Pour utiliser cette box locale, il suffit d'en enregistrer l'emplacement dans votre Vagrant, puis d'initialiser un fichier Vagrantfile:

vagrant box add ma-base-box /chemin/vers/package.box
vagrant init ma-base-box
vagrant up

Vous pouvez normalement vous connecter à votre box:

vagrant ssh

Notes

Il est recommandé par Vagrant d'activer un mot de passe au user root, cf. Creating a Base box > Root password vagrant. Cette étape n'a pas été ajoutée.

Ce n'est pas obligatoire mais si vous partagez votre image, cela peut aider les utilisateurs à manipuler box. La convention est de donner le mot de passe vagrant:

sudo passwd root
]]>
https://z720.net/2015/vagrant-images-custom Thu, 07 May 2015 23:00:00 +0200 https://z720.net/2015/vagrant-images-custom
Vagrant Introduction

Vagrant est un outil permettant d'automatiser la construction d'un environnement de développement:

  • création d'une machine virtuelle (OS)
  • configuration des serveurs (web, application...)
  • partage de répertoires (exposition de l'environnement de travail local dans la VM pour un "live update")

Objectifs:

  • tout le monde travaille dans le même environnement, (plus d'excuse du genre "ça marche chez moi")
  • L'environnement de développement est facile à mettre en place (1 seule commande)
  • L'environnement est facile à partager (toute la configuration peut tenir dans un seul fichier)

Bref, vous avez compris, c'est tout bénéf...

Comment l'utiliser

Tout d'abord, vous devez installer l'utilitaire Vagrant et un hyperviseur de machine virtuelle (VirtualBox, VMWare...). Vagrant utilise un fichier de configuration appelé Vagrantfile pour construire l'environnement. Ce fichier est généralement placé à la racoine du projet et utlise la syntax Ruby mais ce n'est pas très important pour le moment.

Sur un projet déjà configuré (fichier Vargantfile présent)

Il suffit de lancer la commande suivante depuis le répertoire du projet:

vagrant up

Le premier lancement peut-être un peu long, car l'outil va télécharger l'image de la VM et la "provisionner" (installer les éléments nécessaires au bon fonctionnement de l'environnement) Vous devriez obtenir quelque chose comme ça:

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'local-test-ubuntu64'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: test_box_default
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if its present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
    default: /vagrant => /mon/projet 

La machine peut ensuite être arreté avec:

vagrant halt

Si vous voulez reconstruire votre environnement (changement dans la configruation, erreur de manipulation...), il suffit de le "provisionner" à nouveau:

vagrant up --provision 

Sur un nouveau projet

Il faut commencer par faire l'inventaire des éléments nécessaires pour votre environnement... Dans cette exemple, nous allons configurer un LAMP classique sous Ubuntu.

  1. Initialiser un fichier de configuration avec

    vagrant init ubuntu/trusty64
  2. Modifier le fichier Vagrantfile qui vient d'être créé pour ajouter le script d'installation des serveurs web et base de données:

    config.vm.provision "shell", inline: [
    //Pas d'écran interactif avec apt-get
        'export DEBIAN_FRONTEND=noninteractive', 
    
    // Mise à jour des dépots
        'apt-get update',  
    // Installation de Apache PHP MySQL  
        'apt-get install -y apache2 php5 php5-mysql php5-xdebug mysql-server mysql-client', 
    // Suppression des paquets après installation
        'apt-get clean -y', 
    
    // Specifié à Apache le nom de serveur
        'echo "ServerName localhost" >> /etc/apache2/apache2.conf',
    
    // Redémarrer les services     
        'service apache2 restart',
        'service mysql restart',
    
    // Créer un base de données testdb    
        'echo "DROP DATABASE IF EXISTS testdb; CREATE DATABASE testdb;" | mysql -u root',
    
    // Supprimer l'index par défaut (répertoire lié au répertorie de développement
        'rm -f /var/www/html/index.html',
    
    // Sauvegarde de la date de provision de l'environnement
        'date > /etc/vagrant_provisioned_at'
    
    ].join("\n")
  3. Mapper le port 8080 de votre machine sur le port 80 de la VM (Apache):

    config.vm.network "forwarded_port", guest: 80, host: 8080
  4. Mapper le répertoire de travail sur le Document Root d'Apache (et avec son user/group)

    config.vm.synced_folder ".", "/var/www/html", owner: "www-data", group: "www-data"
  5. Donner un nom à votre VM dans VirtualBox (Optionnel)

    config.vm.provider "virtualbox" do |v|
      v.name = "vagrant-lamp"
    end

Votre serveur web devrait être accessible sur localhost et servir le repertoire courant.

]]>
https://z720.net/2015/vagrant Mon, 04 May 2015 10:00:00 +0200 https://z720.net/2015/vagrant
White as Snow Décor surréaliste et féerique au milieu de la campagne.

C'est aussi ça d'habiter à la campagne, même si ça se mérite d'aller chercher ce cliché, il faut braver la neige.

Desert blanc

]]>
https://z720.net/2015/photo/white-as-snow Mon, 02 Feb 2015 19:00:00 +0100 https://z720.net/2015/photo/white-as-snow
Londres Quelques clichés de notre dernière virée à Londres.

IMG_3822.jpg IMG_3823.jpg IMG_3832.jpg IMG_3834.jpg IMG_3847.jpg IMG_3848.jpg

]]>
https://z720.net/2015/photo/londres Sun, 01 Feb 2015 20:30:00 +0100 https://z720.net/2015/photo/londres
Rétrospective 2014 Voici une petite retrospective de mon année 2014 en photos:

IMG_0734.jpg

IMG_2918.jpg

IMG_3039.jpg

IMG_2128.jpg

IMG_0850.jpg

IMG_3513.jpg

IMG_2284.jpg

Temple Neuf

IMG_2399.jpg

IMG_2408.jpg

IMG_2451.jpg

IMG_2482.jpg

IMG_2761.jpg

IMG_2796.jpg

IMG_2806.jpg

IMG_2884.jpg

IMG_2980.jpg

IMG_3035.jpg

IMG_3036.jpg

IMG_3448.jpg

IMG_3452.jpg

IMG_3520.jpg

IMG_3623.jpg

IMG_3691.jpg

]]>
https://z720.net/2014/retrospective Wed, 31 Dec 2014 19:00:00 +0100 https://z720.net/2014/retrospective
Devicons - The developer's iconic font Devicons Devicons preview

]]>
https://z720.net/fonts/devicons Fri, 19 Sep 2014 18:00:00 +0200 https://z720.net/fonts/devicons
Bilan Ce défi a été un vrai challenge pour ce mois d'aout mi-vacances mi-boulot. Je me rends compte que même si c'est très agréable de faire des photos, il n'est pas toujours facile de tenir ce rythme journalier.

La difficulté n'est pas toujours de trouver l'inspiration, car finalement je pouvais voir chacun des mots un peu partout autour de moi, il ne s'agit que d'interprétation : quelle histoire veut-on raconter ?

Ensuite, il s'agit de produire tous les jours de façon qualitative. Car même si prendre la photo ne peut prendre qu'un instant, il faut ensuite la publier, opération qui peut s'avérer plus longue si on veut retoucher la photo ou si on est en vadrouille.

Bref, merci Laurence et Delphine pour cette superbe idée.

Retrouvez mes participations et les participations de chacun sur Twitter ou sur Instagram avec #DCAout.

]]>
https://z720.net/2014/photo/DCAout/bilan Sun, 31 Aug 2014 23:00:00 +0200 https://z720.net/2014/photo/DCAout/bilan
Rose http://instagram.com/p/redukWvhO7

]]>
https://z720.net/2014/photo/DCAout/8-Rose Sat, 09 Aug 2014 14:00:00 +0200 https://z720.net/2014/photo/DCAout/8-Rose
Totem http://instagram.com/p/rfDD-VPhNy/

#DCAout

]]>
https://z720.net/2014/photo/DCAout/9-Totem Sat, 09 Aug 2014 07:00:00 +0200 https://z720.net/2014/photo/DCAout/9-Totem