Catégories
Open-source Planet-libre

Support de présentation de Docker

A l’occasion de la commission open-source de la Telecom Valley, j’ai eu le plaisir de faire un talk sur le sujet à la mode du moment: Docker ou la virtualisation par conteneurs (j’en avais déjà parlé sur ce blog dans un précédent billet).

Au vu des questions et débats qui ont suivi la présentation, je ne doute pas de l’explosion des cas d’usage sur le sujet dans les prochains mois !

Et vous chers lecteurs, ou en êtes vous dans vos projets autours de l’écosystème Docker ? En phase de test ? De production ?

Partagez avec nous vos XP sur le sujet !

Catégories
Open-source Planet-libre Systeme

Voici Glances 2.1 qui pointe son nez

La nouvelle version de Glances vient d’être publiée. En voici les nouveautés.

Comment installer Glances 2.1 ?

La première solution et la plus simple est d’utiliser le script d’autoinstall (uniquement fonctionnel pour certaines distribution GNU/Linux):

curl -L http://bit.ly/glances | /bin/bash

ou alors en consultant la documentation.

Amélioration de l’affichage des processus

Cette version de Glances apporte les fonctionnalités suivantes pour l’affichage des processus dans Glances:

  • possibilité d‘appliquer un filtre (sous la forme d’une expression régulière) sur le nom et la ligne de commande des processus à afficher. Pour cela, il suffit d’appuyer sur la touche ENTREE puis de saisir le filtre. Par exemple, le filtre firefox va afficher le ou les processus du navigateur Firefox tandis que le filtre .*firefox.* va afficher tous les programmes ou le mot clé Firefox apparaît dans la ligne de commande (à noter que cette nouvelle fonction est, pour l’instant, uniquement disponible dans le mode standalone de Glances).Sélection_229
  • informations complémentaire pour le ‘top process’ (le processus que Glances juge le plus consommateur de ressources): CPU affinity, extended memory information (shared, text, lib, datat, dirty, swap), openned threads/files and TCP/UDP network sessions, IO nice level (à noter que cette nouvelle fonction est, pour l’instant, uniquement disponible dans le mode standalone de Glances).Sélection_230
  • optimisation du nombre de processus surveillés par Glances: dans les anciennes versions, Glances recupérait l’ensemble des statisiques pour tous les processus (même ceux qui n’étaient pas affichés). Dans cette version le nombre de processus est configurable via la clé de configuration max_processes du fichier de configuration (par défaut top 10) .Cette version apporte donc un gain de footprint CPU d’environ 15% à 30%:Sélection_235Ainsi, pour augmenter à 20 le nombre de processus affiché, il suffit d’éditer le fichier de configuration de la manière suivante:
    [processlist]
    # Maximum number of processes to show in the UI
    # Note: Only limit number of showed processes (not the one returned by the API)
    # Default is 20 processes (Top 20)
    max_processes=20
    

    Note: si aucune configuration n’est faite alors Glances affichera tous les processus.

  • il est maintenant possible de basculer entre l’affichage actuel du nom du processus (qui affiche le nom court ou la ligne de commande complète selon la place disponible) et un mode ou uniquement le nom court est affiché. Pour cela, on peut utiliser le tag –process-short-name au niveau de la ligne de commande ou bien la touche ‘/’ pendant le fonctionnement de Glances.Mode shortname:
    Sélection_233 Mode standard:Sélection_232

 

Alias pour le nom des disques, interfaces réseau et sensors

Les noms des disques (sda par exemple sous Linux), des interfaces réseau (eth0, wlan0) et des sensors (temp1) n’est pas forcement très parlant pour un humain normalement constitué (!geek). Glances permet donc de configurer des alias qui seront affichés en lieu et place des noms « barbares ». La définition se fait dans le fichier de configuration:

[network]
# WLAN0 alias name
wlan0_alias=Wireless

[diskio]
# Alias for sda1
sda1_alias=IntDisk

[sensors]
# Sensors alias
temp1_alias=Motherboard 0
temp2_alias=Motherboard 1
core 0_alias=CPU Core 0
core 1_alias=CPU Core 1

Rien de bien compliqué. On doit utiliser la syntaxe: <nom barbare>_alias = <nom humain>.

Sélection_234

Cette fonction est surtout utile pour les utilisateurs de Windows ou les noms sont vraiment… comment dire… Windowsiens…

API RESTFull pour le serveur Web

Le serveur HTTP intégrant l’interface Web (option -w) disponible dans Glances depuis la version 2.0 ne disposait pas d’une API RESFull. C’est maintenant le cas. Il est donc possible à partir d’une application tierce de faire des requêtes du type suivant:

http://<serverglances>:61209/api/v2/mem

qui donnera une réponse HTTP avec un code 200 et:

{"available": 5071183872, "used": 3255848960, "cached": 1827352576, "percent": 39.1, "free": 5071183872, "inactive": 1388982272, "active": 3679604736, "total": 8327032832, "buffers": 477982720}

La documentation complète de l’API est disponible sur la page suivante dans le Wiki.

Fonction expérimentale de génération de graphes

J’ai ajouté dans cette version une fonction expérimentale (uniquement disponible dans le mode standalone de Glances) qui sera améliorée dans les prochaines versions en cas de demande de la part des utilisateurs. L’objectif de cette fonction est de générer des graphiques des statistiques (CPU, LOAD et MEM) quand l’utilisateur clique sur la touche ‘g’.  Concrètement, Glances va mémoriser les statistiques et les « grapher » en utilisant la librairy Matplotlib (qui doit être présente sur votre système).

Les graphes sont générés dans le répertoire /tmp:

ll /tmp/glances*.png
-rw-rw-r-- 1 nicolargo nicolargo 22911 août  31 16:09 /tmp/glances_cpu.png
-rw-rw-r-- 1 nicolargo nicolargo 19962 août  31 16:09 /tmp/glances_load.png
-rw-rw-r-- 1 nicolargo nicolargo 12059 août  31 16:09 /tmp/glances_mem.png

glances_mem glances_load glances_cpuEn appuyant sur la touche ‘r’, l’utilisateur peut ré-initialiser l’historique et donc repartir avec un nouveau graphe (attention pour l’instant les graphes sont écrasés à chaque appui sur le bouton ‘g’).

Des logs et un mode debug

Il manquait à Glances un vrai mode débug avec un fichier de log permettant de facilement identifier les problèmes d’utilisation et d’exécution de ce logiciel. C’est maintenant chose faite avec cette version 2.1 ou un gros travail a été fait sur la généralisation des message de logs standards et debug (en utilisant l’option -d au niveau de la ligne de commande).

Le fichier de log de Glances est disponible dans le fichier /tmp/glances.log, en voici un extrait en mode normal (sans le -d):

2014-08-31 15:52:00,312 -- INFO -- Start Glances 2.1_RC7
2014-08-31 15:52:00,312 -- INFO -- CPython 2.7.6 and PSutil 2.1.1 detected
2014-08-31 15:52:00,316 -- INFO -- Read configuration file ./conf/glances-test.conf
2014-08-31 15:52:00,316 -- INFO -- Start standalone mode
2014-08-31 15:52:10,465 -- INFO -- Set process filter to firefox
2014-08-31 15:52:15,180 -- INFO -- Stop Glances

et en mode debug (-d):

2014-08-31 15:52:47,185 -- INFO -- Start Glances 2.1_RC7
2014-08-31 15:52:47,185 -- INFO -- CPython 2.7.6 and PSutil 2.1.1 detected
2014-08-31 15:52:47,190 -- INFO -- Read configuration file ./conf/glances-test.conf
2014-08-31 15:52:47,190 -- INFO -- Start standalone mode
2014-08-31 15:52:47,218 -- DEBUG -- Available plugins list: ['load', 'core', 'uptime', 'fs', 'monitor', 'percpu', 'mem', 'cpu', 'help', 'system', 'alert', 'psutilversion', 'memswap', 'diskio', 'hddtemp', 'processcount', 'batpercent', 'now', 'processlist', 'sensors', 'network']
2014-08-31 15:52:47,219 -- DEBUG -- Monitor plugin configuration detected in the configuration file
2014-08-31 15:52:47,220 -- DEBUG -- Limit maximum displayed processes to 20
2014-08-31 15:52:47,220 -- DEBUG -- Extended stats for top process is enabled (default behavor)
2014-08-31 15:52:53,140 -- DEBUG -- User enters the following process filter patern: firefox 
2014-08-31 15:52:53,140 -- INFO -- Set process filter to firefox
2014-08-31 15:52:53,140 -- DEBUG -- Process filter regular expression compilation OK: firefox
2014-08-31 15:52:57,344 -- INFO -- Stop Glances

Cette nouvelle fonction permettra, je l’espère, de facilité les rapports de bugs remontés dans GitHub.

Et pour finir…

En plus des corrections de bugs et amélioration diverses et variés, Glances 2.1 permet un affichage optimisé pour les tordus d’entre vous utilisant un fond blanc pour leur terminal (option –theme-white) ainsi que le support des routeurs Cisco et des serveurs VMWare ESXi pour le fallback SNMP en mode client/serveur.

Comme d’habitude, les bugs/demandes de fonctions sont à remonter dans GitHub en suivant cette procédure.

Merci à vous !

Catégories
Open-source Planet-libre Systeme

Glances version 2.0 est là

Après plusieurs mois de travail, la nouvelle version majeure de Glances vient d’être publié. L’objectif de ce billet est de faire une rapide présentation des nouveautés, un article plus complet est disponible sur LinuxFR.

Pour ceux d’entre vous qui ne connaissent pas encore Glances, c’est un logiciel permettant de superviser le plus simplement possible ses machines en disposant sur une seule et unique page (terminal ou interface Web) les informations importantes (CPU, mémoire, charge, processus…).

Il peut être utilisé dans des configurations différentes:

  • standalone: superviser la machine sur laquelle on se trouve à partir d’une interface Curse
  • client/serveur: superviser une machine distante à partir d’une interface Curse
  • serveur Web: superviser une machine distante à partir d’un navigateur Internet
  • API: accès aux statistique via une API XML/RPC

screenshot-wide

Comment installer cette nouvelle version ?

Le plus simple est de passer par le gestionnaire de paquet de Python (PiPy).

Pour une installation complète avec toutes les dépendances:

sudo pip install glances pysnmp bottle batinfo https://bitbucket.org/gleb_zhulik/py3sensors/get/tip.tar.gz

Note: selon votre configuration, il est peut être  nécessaire d’installer certains pré-requis avant de faire cette installation. Par exemple sur un système Debian/Ubuntu:

sudo apt-get install -y python-dev python-pip lm-sensors

Pour la mise à jour d’une version existante et l’installation des dépendances:

sudo pip install pysnmp bottle batinfo https://bitbucket.org/gleb_zhulik/py3sensors/get/tip.tar.gz
sudo pip install --upgrade glances

Les nouveautés…

Au niveau du code

La plus grande nouveauté n’est pas visible car c’est un refactoring complet du code avec notamment l’utilisation d’un système de plugins. Toutes les statistiques collectées par Glances sont des plugins. Le principal avantage de cette architecture est une rapidité de développement accrue pour les nouvelles fonctionnalités par rapport à la version précédente. Chaque plugin hérite de méthodes communes permettant de factoriser le code.

Cette version a été développée en suivant le workfow Git Flow et les prochains correctifs et nouvelles fonctions devront respecter ce processus (j’ai ajouté une page sur le sujet dans le Wiki).

Interface Curse

L’interface standalone a été optimisée pour afficher le maximum d’informations de la manière la plus lisible et dans un minimum d’espace. L’objectif principal et le but de Glance étant que le problème de performance d’une machine saute aux yeux.

Interface Web

A la suite de pas mal de demandes, Glances v2.0 intègre maintenant un mode serveur Web qui permet d’accéder simplement au statistique depuis n’importe quel navigateur Internet à travers une page HTML5/CSS3 (plus ou moins « Responsive Web Design » mais je suis pas un pro sur le sujet).

Pour lancer le mode serveur Web:

# glances -w

Bottle v0.12.7 server starting up (using WSGIRefServer())...
Listening on http://0.0.0.0:61208/
Hit Ctrl-C to quit.

Par exemple sur ma tablette Nexus 5, cela donne cela:

screenshot-web2

Le mode fallback SNMP

Dans le cas ou il n’est pas possible de lancer un serveur Glances sur une machine (problème de droit ou « appliance »), il est maintenant possible d’accéder à certaines statistiques via le protocole SNMP (limitation actuelle au mode SNMP v2/2c).

Quand vous lancez Glances en mode client, il va d’abord essayer de détecter un serveur Glances puis essayer le protocole SNMP:

# glances -c localhost

Info: Connection to Glances server failed. Trying fallback to SNMP...

C’est pour l’instant une fonction expérimentale qui ne fonctionne pas avec tous les agents SNMP. Des évolutions sont prévues dans les prochaines version et je suis à la recherche de contributeurs sur ce point (notamment pour un accès aux statistiques des machines Cisco et autres équipementiers réseau).

Sélection_213

Amélioration du fichier de configuration

Si vous utilisiez un fichier de configuration (notamment pour fixer vos propres limites au niveau des statistiques), il va falloir l’adapter pour cette nouvelle version. Un fichier par défaut se trouve sous GNU/Linux dans  /etc/glances/glances.conf. Je vous conseille de vous inspirer de ce fichier: https://github.com/nicolargo/glances/blob/master/conf/glances-monitor.conf.

Conclusion

En attendant que vous lisiez le billet sur LinuxFr, j’espère que cette mise en bouche vous a convaincu d’essayer cette nouvelle version.

J’attends vos avis avec impatiente !

Catégories
Developpement Open-source Planet-libre Reseau Systeme

Virtualisation légère avec Docker

Dans le petit monde des DevOps, la solution de virtualisation Docker a le vent en poupe. Nous allons dans ce billet essayer de décrypter ce qui ce cache derrière ce nouvel outil et proposer un tutoriel sur l’installation et les premiers pas pour une utilisation souple et efficace.Sélection_178

C’est quoi donc ?

Docker est un logiciel open-source (sous licence Apache 2.0) et un service en ligne optionnel (Docker.io) permettant de gérer des conteneurs (« dockers »).

Contrairement aux machines virtuelles classiques qui comprennent un système hôte (« guest OS ») et les librairies/applications, les conteneurs ne contiennent, au maximum, que les applications/librairies.

 Sélection_179

Quand je dis au maximum c’est qu’une copie d’un conteneur qui ne change que la partie application ne contiendra que les différences par rapport au conteneur initial.

Sélection_181

Le système hôte est ainsi géré directement par le Docker Engine (en vert dans le premier schéma). On a ainsi une mutualisation qui permet de lancer les conteneurs de manière très rapide: le temps de lancement d’un conteneur est presque le même que le temps de lancement des applications qu’il contient. En effet, le système d’exploitation est déjà lancé. Donc pas de phase de démarrage ni d’initialisation de cette couche. Il faut quand même avoir à l’esprit que même si l’on est pas dans une machine virtuelle, on dispose tout de même d’un environnement isolé (processus, système de fichier, ports réseau). L’utilisateur n’a qu’à se préoccuper que de ce qu’il veut virtualiser (les applications/services) et ne s’occupe pas du reste.

L’autre gros avantage de cette technologie est la portabilité. En effet, il est tout à fait possible de concevoir un conteneur sur son PC portable puis ensuite de le déployer sur son infrastructure de production physique ou virtuelle. La taille des conteneurs étant relativement réduite, on peut donc imaginer un workflow de déploiement basée sur un repo central (type Git) et des Docker Engine installés sur les machines qui font elle même tourner des conteneurs. Il n’y a pas vraiment de limite au nombre de conteneurs qu’une machine puisse faire tourner. La limite vient de l’occupation mémoire/CPU/réseau de vos applications.

Si vous avez encore des questions sur la différence entre Docker et VM, je vous conseille la lecture de cette question sur StackOverflow: « How is Docker.io different from a normal virtual-machine ?« .

Installation de Docker

Note (merci à @jb_barth pour le commentaire): jusqu’à la version 0.9, Docker se basait sur la technologie LXC (« Linux Containers ») du noyau Linux et ne fonctionnait donc que sur des distributions GNU/Linux avec un noyau >= 2.6.24. La dépendance stricte à LXC a sauté depuis la v0.9.0, le driver par défaut est maintenant libcontainer, une lib pur go produite par le projet pour accéder de façon propre aux APIs dispos dans le kernel. C’est ce qui a permis de supporter des noyaux aussi vieux d’ailleurs, au début c’était >= 3.8

Voici les étapes à suivre pour installer Docker sur une distribution Ubuntu 14.04 LTS. A noter, pour les miséreux développeurs sous Windows ou Mac OS, il est est toujours possible de faire tourner une VM Ubuntu (par exemple avec VirtualBox) et de suivre cette installation.

Docker est directement disponible dans les repositories d’Ubuntu, donc un simple:

sudo apt-get install docker.io
sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker

suffit pour effectuer l’installation complète de Docker sur notre machine comprenant:

  • le Docker Engine (ou service Docker)
  • le Docker Client (permettant de discuter avec le Docker Engine)

Cependant si vous souhaiter travailler avec une version plus ressente il faut utiliser les commandes suivantes:

sudo apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
sudo sh -c "echo deb https://apt.dockerproject.org/repo ubuntu-trusty main \ > /etc/apt/sources.list.d/docker.list"
sudo apt-get update
sudo apt-get purge lxc-docker*
sudo apt-get install docker-engine

Comme les conteneurs vont utiliser les serveurs DNS de la machine hôte, il est nécessaire de configurer les adresses des serveurs DNS dans le fichier /etc/default/docker.io (par exemple avec les serveurs OpenDNS):

$ vi /etc/default/docker.io

# Use DOCKER_OPTS to modify the daemon startup options.
DOCKER_OPTS="-dns 208.67.220.220 -dns 208.67.220.222"

Pour que la configuration soit prise en compte, il faut relancer le service Docker avec la commande:

sudo service docker restart

Un petit ps permet de voir que le service est bien lancé:

0.0   0.1  563M 9.65M   733 root         0 S  0:00.46     0     0 /usr/bin/docker.io -d -dns 208.67.220.220 -dns 208.67.220.222

Récupération des images système

Nous allons commencer par récupérer des images qui vont servir de de bases à notre conteneur. Une liste assez conséquente d’images sont disponibles sur le site officiel du projet. Vous pouvez ainsi récupérer celle qui est le plus proche de l’environnement que vous recherché. Un moteur de recherche est disponible à l’adresse https://index.docker.io/ pour trouver des images conçues par les développeurs du projet et par des contributeurs.

On retrouve ainsi des distributions GNU/Linux minimales comme Ubuntu, CentOS, BusyBox pour ne siter que les images officiellement supportées par le projet Docker.io (il existe également des repos non officiels avec Fedora, RH, Arch…).

Petit mention spéciale pour les images BusyBox qui sont vraiment très légère (moins de 10 Mo) pour un système fonctionnel !

Même si il est possible de directement télécharger l’image au lancement du conteneur, je préfère avoir sur ma machine les images des différentes versions de l’OS que j’utilise le plus: Ubuntu.

Pour récupérer l’ensemble des images du repo Ubuntu qui contient les versio  minimale d’Ubuntu de la version 10.04 à 14.04), il faut saisir la commande suivante:

$ sudo docker pull ubuntu

74fe38d11401: Pulling dependent layers
316b678ddf48: Pulling dependent layers
3db9c44f4520: Pulling dependent layers
5e019ab7bf6d: Pulling dependent layers
99ec81b80c55: Pulling dependent layers
a7cf8ae4e998: Pulling dependent layers
511136ea3c5a: Download complete
e2aa6665d371: Downloading [==>                                                ] 2.027 MB/40.16 MB 6m14s

Note: le téléchargement initial des images peut prendre un peu de temps selon la vitesse de votre liaison Internet.

Il est également possible de faire de même avec les autres distributions citées ci-dessus:

$ sudo docker pull centos

$ sudo docker pull busybox

Une fois le téléchargement terminé, on peut demandé à Docker un status de son état actuel:

$ sudo docker info
Containers: 64
Images: 46
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 174
Execution Driver: native-0.1
Kernel Version: 3.13.0-24-generic
WARNING: No swap limit support

ainsi que la liste des images disponibles:

$ sudo docker images
REPOSITORY          TAG                   IMAGE ID            CREATED             VIRTUAL SIZE
busybox             buildroot-2013.08.1   352f47ad2ecf        17 hours ago        2.489 MB
busybox             ubuntu-14.04          6a95c08a9391        17 hours ago        5.609 MB
busybox             ubuntu-12.04          1720a1681f1c        17 hours ago        5.455 MB
busybox             buildroot-2014.02     f66342b343ae        17 hours ago        2.433 MB
busybox             latest                f66342b343ae        17 hours ago        2.433 MB
ubuntu              glances_develop       a483f92d9ab3        24 hours ago        556.8 MB
ubuntu              14.04_nicolargo       8574cc29575e        28 hours ago        440.8 MB
ubuntu              13.10                 5e019ab7bf6d        4 weeks ago         180 MB
ubuntu              saucy                 5e019ab7bf6d        4 weeks ago         180 MB
ubuntu              12.04                 74fe38d11401        4 weeks ago         209.6 MB
ubuntu              precise               74fe38d11401        4 weeks ago         209.6 MB
ubuntu              12.10                 a7cf8ae4e998        4 weeks ago         171.3 MB
ubuntu              quantal               a7cf8ae4e998        4 weeks ago         171.3 MB
ubuntu              14.04                 99ec81b80c55        4 weeks ago         266 MB
ubuntu              latest                99ec81b80c55        4 weeks ago         266 MB
ubuntu              trusty                99ec81b80c55        4 weeks ago         266 MB
ubuntu              13.04                 316b678ddf48        4 weeks ago         169.4 MB
ubuntu              raring                316b678ddf48        4 weeks ago         169.4 MB
ubuntu              lucid                 3db9c44f4520        5 weeks ago         183 MB
ubuntu              10.04                 3db9c44f4520        5 weeks ago         183 MB
centos              centos6               0b443ba03958        6 weeks ago         297.6 MB
centos              6.4                   539c0211cd76        14 months ago       300.6 MB
centos              latest                539c0211cd76        14 months ago       300.6 MB

Comme alternative du moteur de recherche https://index.docker.io/, il est bien sûr possible d’utiliser la ligne de commande. Par exemple pour trouver toutes les images Ubuntu disponibles sur le repo central:

sudo docker search ubuntu | less

A noter qu’il est tout à fait possible, si vous ne trouvez pas votre bonheur de concevoir « from scratch » votre propre image système en suivant cette documentation sur le site officiel (la procédure se base sur DebootStrap).

Création de son premier conteneur

Bon assez de préliminaires, nous allons maintenant pourvoir créer notre premier conteneur qui va se limiter à exécuter la commande ‘ls’ (si c’est pas du conteneur de compétition):

$ sudo docker run ubuntu:latest /bin/ls -alF

total 8280
drwxr-xr-x  46 root root    4096 May 28 06:50 ./
drwxr-xr-x  46 root root    4096 May 28 06:50 ../
-rw-r--r--   1 root root     102 May 28 06:50 .dockerenv
-rwx------   1 root root 8394118 May 27 15:37 .dockerinit*
drwxr-xr-x   2 root root    4096 Apr 16 20:36 bin/
drwxr-xr-x   2 root root    4096 Apr 10 22:12 boot/
drwxr-xr-x   4 root root    4096 May 28 06:50 dev/
drwxr-xr-x  64 root root    4096 May 28 06:50 etc/
drwxr-xr-x   2 root root    4096 Apr 10 22:12 home/
drwxr-xr-x  12 root root    4096 Apr 16 20:36 lib/
drwxr-xr-x   2 root root    4096 Apr 16 20:35 lib64/
drwxr-xr-x   2 root root    4096 Apr 16 20:35 media/
drwxr-xr-x   2 root root    4096 Apr 10 22:12 mnt/
drwxr-xr-x   2 root root    4096 Apr 16 20:35 opt/
dr-xr-xr-x 236 root root       0 May 28 06:50 proc/
drwx------   2 root root    4096 Apr 16 20:36 root/
drwxr-xr-x   7 root root    4096 Apr 16 20:36 run/
drwxr-xr-x   2 root root    4096 Apr 24 16:17 sbin/
drwxr-xr-x   2 root root    4096 Apr 16 20:35 srv/
dr-xr-xr-x  13 root root       0 May 28 06:50 sys/
drwxrwxrwt   2 root root    4096 Apr 24 16:17 tmp/
drwxr-xr-x  11 root root    4096 Apr 16 20:35 usr/
drwxr-xr-x  14 root root    4096 Apr 16 20:36 var/

Arrêtons-nous un peu sur la commande: sudo docker.io run ubuntu:latest /bin/ls -alF

On demande donc le lancement (run) d’un conteneur basée sur la dernière version d’Ubuntu (ubuntu:latest qui est un lien vers l’image minimale de la version 14.04) qui va exécuter la commande ls (/bin/ls -alF). Comme vous pouvez le voir dans le résultat de la commande, on est dans un environnement isolé avec son propre système de fichier.

Première constatation, la vitesse d’exécution de notre environnement virtuel est vraiment impressionnante. Sur une petit commande,on peut voir que l’overhead de lancement du conteneur est négligeable:

$ time sudo docker run ubuntu:latest ls -alF /
...
real	0m0.331s
user	0m0.014s
sys	0m0.012s

$ time ls -alF /
...
real	0m0.007s
user	0m0.003s
sys	0m0.004s

Puis un conteneur persistant

Passons maintenant à la création d’un conteneur persistant, c’est à dire un conteneur  qui va faire tourner une tache pendant un temps indéterminé (je prends par exemple un pin infini vers le site Google).

$ sudo docker run -d ubuntu:latest ping www.google.fr
7404bfa4beca4ba97459c96f8d93242c4fba6ecf2c5b11d18c09acd2fce9991e

Noter le -d dans la ligne de commande pour détacher le conteneur et ainsi lui permettre de tourner en tache de fond.

En retour on obtient le numéro d’identifiant unique du conteneur qui va nous permettre de le contrôler.

On commence donc par vérifier qu’il tourne bien:

$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS               NAMES
7404bfa4beca        ubuntu:14.04        ping www.google.fr   3 minutes ago       Up 3 minutes                            mad_lumiere         

On peut ainsi, l’arrêter:

sudo docker stop 7404bfa4beca

Le démarrer:

sudo docker start 7404bfa4beca

Le redémarrer (l’équivalent d’un stop/start):

sudo docker restart 7404bfa4beca

Lui envoyer des signaux:

sudo docker kill 7404bfa4beca

Ensute on supprime le conteneur avec la séquence stop/rm:

sudo docker stop 7404bfa4beca

sudo docker rm 7404bfa4beca

Un Shell dans un conteneur

Pour accéder à un shell dans le conteneur, il faut utiliser les options suivantes dans la ligne de commande:

  • -t: Allocate a pseudo-tty
  • -i: Keep STDIN open even if not attached
$ sudo docker run -i -t ubuntu:latest bash
root@bb89ed6cdd3c:/#

Structurer la création des conteneurs avec les Dockerfiles

Les Dockerfiles sont des fichiers textes décrivant les différentes étapes pour la création d’un conteneur. Idéalement, ce sont ces fichiers que vous aller gérer en configuration et que vous aller partager avec les différentes personnes utilisatrices de votre projet. Pour illustrer mes dires, je vais prendre l’exemple d’un dockerfile qui va permettre aux contributeurs du projet Glances de tester simplement la branche de développement du logiciel.

En gros, le dockfile doit:

  1. utiliser un OS de base (Ubuntu 14.04 LTS)
  2. installer les pré-requis système
  3. télécharger la dernière version de Glances sous Github

Le dockfile glances_develop_install correspondant est alors le suivant:

# Install Glances Development branch
#
# $ sudo docker build -t ubuntu:glances_develop - < glances_develop_install
#
# VERSION 1.0

# Use the ubuntu base image provided by dotCloud
FROM ubuntu
MAINTAINER Nicolargo, nicolas@nicolargo.com

# Make sure the package repository is up to date
RUN apt-get -y update

# Install prerequirement
RUN apt-get install -y python-dev python-pip git lm-sensors
RUN pip install psutil bottle batinfo https://bitbucket.org/gleb_zhulik/py3sensors/get/tip.tar.gz

# Patch for current Docker version
RUN ln -s /proc/mounts /etc/mtab

# Install Glances from the Pipy repository
RUN git clone -b develop https://github.com/nicolargo/glances.git

Voyons un peu en détail le contenu du fichier.  On commence donc par définir l’OS de base:

FROM ubuntu

On peut bien sûr utiliser l’image/tag que l’on souhaite.

Ensuite on passe aux commandes que l’on souhaite exécuter:

RUN apt-get -y update

RUN apt-get install -y python-dev python-pip git lm-sensors

RUN pip install psutil bottle batinfo https://bitbucket.org/gleb_zhulik/py3sensors/get/tip.tar.gz

RUN ln -s /proc/mounts /etc/mtab

RUN git clone -b develop https://github.com/nicolargo/glances.git

Rien de bien compliqué, il suffit de faire précéder la commande Unix par le mot clé RUN…

Il ne reste plus qu’à lancer la construction du conteneur et son exportation vers une nouvelle image (nommé ubuntu:glances_develop) à partir de la ligne de commande:

sudo docker build -t ubuntu:glances_develop - < glances_develop_install

ou alors directement depuis un repos (par exemple GitHub) ou vos Dockers files sont gérés en configuration:

sudo docker build -t ubuntu:glances_develop https://raw.githubusercontent.com/nicolargo/dockersfiles/master/glances_develop_install

On vérifie ensuite que l’image a bien été créée:

$ sudo docker images | grep glances
ubuntu glances_develop a483f92d9ab3 31 hours ago 556.8 MB

Puis on lance Glances depuis ce conteneur (en le metant à jour par un pull avant le lancement):

sudo docker run -i -t --entrypoint /bin/bash ubuntu:glances_develop -c "cd glances ; git pull origin develop ; python -m glances"

Et hop c’est magique:

Glances in a docker

Un des trucs fun avec Docker c’est que si l’on souhaite modifier un conteneur en ajoutant par exemple l’installation d’un nouveau logiciel, il suffit de modifier le Docker file puis de refaire la commande de build. L’installation ne se fera que par delta par rapport au premier conteneur.

Controler la CPU et la mémoire de ses conteneurs

Une fonction intéressante de Docker est sa capacité de contraindre un conteneur en terme de CPU et de MEM. Par exemple on peut limiter le conteneur à 512 Mo de RAM et donner un priorité moins forte en terme de CPU à ce conteneur par rapport aux autres. Il faut cependant que le hôte qu héberge Docker soit compatible avec ces options ce qui n’est pas mon cas:

$ sudo docker run -m 512m -i -t --entrypoint /bin/bash ubuntu:glances_develop -c "cd glances ; git pull origin develop ; python -m glances"

WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.

Pour activer ces options sous Ubuntu, il faut modifier la configuration du Kernel via GRUB. Pour cela, il est nécessaire de suivre cette procédure.

Conclusion

L’approche est vraiment différente des solutions de virtualisation classiques mais si vous cherchez un outil simple pour valider vos applications Linux dans un environnement controlé alors Docker est définitivement une solution à envisager. Sa souplesse et sa légéreté en font une solution idéale à embarquer sur son PC portable ou à mettre en production sur son infrastructure.

Je vous conseille de vous plonger dans la documentation officielle qui est vraiment complète et très bien faite.

Des expériences à nous faire partager sur l’utilisation de Docker ?

Quelques références:

Catégories
Open-source Planet-libre

Les idées et les logiciels libres

Si la nature a rendu une chose moins propre que toutes les autres à la propriété exclusive, c’est l’action de la puissance pensante appelée une idée, qu’un individu possède seulement tant qu’il la garde pour soi; dès l’instant où elle est divulguée, elle s’impose à la possession de tous et celui qui la reçoit ne peut s’en défaire. Ce qui en fait aussi sa particularité est que personne ne la possède moins, car chacun la possède en entier. Celui qui reçoit une idée de moi, l’ajoute à son savoir sans diminuer le mien; de même que celui qui allume sa torche au feu de la mienne, reçoit la lumière sans me plonger dans les ténèbres.

Thomas Jefferson

capture_164

Découvert lors du visionnage du TEDx 2012 de Cédric Villani.

Catégories
Blog Open-source Planet-libre Web

Installation de NGinx avec PageSpeed sous Debian

Tous ceux qui se sont intéressés à l’optimisation du référence de leur site dans la sainte base de donnée de Google le savent bien, le temps de chargement des pages est un des facteurs clé pour en établir le classement. Google ne s’en cache plus depuis longtemps et propose toute une batterie d’outil pour identifier et optimiser la vitesse d’affichage de votre site.

Nous allons dans ce billet nous intéresser à l’optimisation de la couche basse de votre site, c’est à dire sans modification du contenu des pages, en mettant en place le module PageSpeed sur le serveur Web NGinx. J’ai utilisé un serveur sous Debian mais vous pouvez appliquer ceci, moyennant quelques adaptations, sur d’autres systèmes d’exploitations.

capture_158

PageSpeed Module ? Kesako ?

Google a  regroupé sous l’acronyme PageSpeed, un ensemble d’outils pour aider les Webmasters à optimiser leurs sites. Un des ces outil est nommé PageSpeed Module. C’est un module optionnel disponible pour les serveurs Web Apache et NGinx.

Une fois installé et configuré, ce module va, de manière dynamique et transparente, effectuer un ensemble d’optimisations lors de la mise à disposition de vos pages à vos utilisateurs. Chaque optimisation est mise en place sous la forme d’un filtre qui vont par exemple changer dynamiquement le contenu HTML de vos pages, trouver des emplacements de javascripts plus rapide ou bien optimiser les images. Comme, nous le verrons plus loin, la liste des filtres est bien sûr paramétrable au niveau des fichiers de  configuration de NGinx.

La liste complète des filtres fournis en standard par Google est disponible sur cette page.

Trêve de long discours, passons maintenant à l’installation et à la configuration de PageSpeed Module avec un serveur NGinx.

Installation de NGinx + PageSpeed Module

Vous savez tout le bien que je pense du serveur Web NGinx. J’ai donc profité de ce billet pour mettre à jour mon script d’installation automatique de NGinx afin d’y intégrer le module PageSpeed. Ainsi pour les plus pressés d’entre-vous, il suffit de télécharge ce script et de le lancer à partir d’un compte administrateur pour avoir une configuration NGinx + PageSpeed.

capture_159

Pour les autres, les plus curieux, nous allons détailler l’installation dans la suite de ce paragraphe.

On commence donc par se créer un répertoire de travail:

mkdir ~/install-nginx-pagespeed
cd ~/install-nginx-pagespeed/

Puis on télécharge les deux archives nécessaires:

wget https://github.com/pagespeed/ngx_pagespeed/archive/release-1.7.30.3-beta.zip
wget https://dl.google.com/dl/page-speed/psol/1.7.30.3.tar.gz

On décompresse le tout:

unzip release-1.7.30.3-beta.zip
cd ngx_pagespeed-release-1.7.30.3-beta/
tar zxvf ../1.7.30.3.tar.gz
cd ..

A ce stade, le répertoire ngx_pagespeed-release-1.7.30.3-beta contient donc le module PageSpeed prêt à être intégré aux sources de NGinx.

On récupère donc les sources de ce dernier:

wget http://nginx.org/download/nginx-1.4.4.tar.gz

On décompresse puis on installe:

tar zxvf nginx-1.4.4.tar.gz
cd nginx-1.4.4/
./configure --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --http-log-path=/var/log/nginx/access.log --with-http_dav_module --http-client-body-temp-path=/var/lib/nginx/body --with-http_ssl_module --http-proxy-temp-path=/var/lib/nginx/proxy --with-http_stub_status_module --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --with-debug --with-http_flv_module --with-http_realip_module --with-http_mp4_module --add-module=../ngx_pagespeed-release-1.7.30.3-beta
make

Enfin on installe la nouvelle version de NGinx contenant le module PageSpeed sur son système (attention cela va écraser votre installation existante mais pas les fichiers de configurations).

sudo make install

On relance NGinx pour prendre en compte la nouvelle installation.

sudo service nginx restart

On a donc un beau NGinx avec le module PageSpeed disponible. Par défaut, ce module n’est pas activé. Il faut donc passer à l’étape suivant: la configuration du module.

Configuration du module PageSpeed pour NGinx

C’est assez simple car tout est localisé dans la section server (ou http dans la cas d’une mutualisation avec plusieurs hôtes virtuels) des fichiers de configuration de NGinx. On commence donc par identifier cette section puis d’y ajouter les lignes suivantes pour activer le module PageSpeed en mode « pass through » (ce mode permet de choisir de manière exhaustive les filtres à appliquer):

server {
        ...

	# PageSpeed
        # enable ngx_pagespeed
        pagespeed on;
        pagespeed FileCachePath /var/ngx_pagespeed_cache;
        # Ensure requests for pagespeed optimized resources go to the pagespeed handler
        # and no extraneous headers get set.
        location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
                add_header "" "";
        }
        location ~ "^/ngx_pagespeed_static/" { }
        location ~ "^/ngx_pagespeed_beacon$" { }
        location /ngx_pagespeed_statistics { allow 127.0.0.1; deny all; }
        location /ngx_pagespeed_global_statistics { allow 127.0.0.1; deny all; }
        location /ngx_pagespeed_message { allow 127.0.0.1; deny all; }

       ...
}

Ces lignes permettent:

  1. d’activer pagespeed (pagespeed on)
  2. de configurer le répertoire utiliser par PageSpeed pour cacher ses informations (FileCachePath)
  3. de s’assurer que les requêtes vers PageSpeed ne sont pas perturbées (location)

Pour le cache on utilise le répertoire /var/ngx_pagespeed_cache qu’il faut créer et configurer au niveau des droits pour que NGinx puisse y accéder (dans mon cas, le processus NGinx est lancé avec l’utilisateur www-data).

sudo mkdir /var/ngx_pagespeed_cache
sudo chown www-data:www-data /var/ngx_pagespeed_cache

Ensuite à la suite des autres lignes de la section server (ou http) on active les filtres souhaités. Voici un exemple des filtres que j’utilise sur mon serveur hébergeant ce blog:

server {
        ...

        # enable collapse whitespace filter
        pagespeed EnableFilters collapse_whitespace;

        # enable JavaScript library offload
        pagespeed EnableFilters canonicalize_javascript_libraries;

        # combine multiple CSS files into one
        pagespeed EnableFilters combine_css;

        # combine multiple JavaScript files into one
        pagespeed EnableFilters combine_javascript;

        # remove tags with default attributes
        pagespeed EnableFilters elide_attributes;

        # improve resource cacheability
        pagespeed EnableFilters extend_cache;

        # flatten CSS files by replacing @import with the imported file
        pagespeed EnableFilters flatten_css_imports;
        pagespeed CssFlattenMaxBytes 5120;

        # defer the loading of images which are not visible to the client
        pagespeed EnableFilters lazyload_images;

        # enable JavaScript minification
        pagespeed EnableFilters rewrite_javascript;

        # enable image optimization
        pagespeed EnableFilters rewrite_images;

        # pre-solve DNS lookup
        pagespeed EnableFilters insert_dns_prefetch;

        # rewrite CSS to load page-rendering CSS rules first.
        pagespeed EnableFilters prioritize_critical_css;

	# make Google analytics async
	pagespeed EnableFilters make_google_analytics_async;
}

Test et validation

Il existe tout un tas d’outils pour tester la vitesse de chargement de vos pages. J’utilise personnellement GTMetrix et  PageSpeed Insights. On peut ainsi facilement quantifier le gain de l’utilisation du module PageSpeed sur son site.

Il est clair que le module PageSpeed n’aura pas le même impact sur les les sites ayant pris en compte les problématiques de SEO et d’optimisation du chargement dès leurs conceptions que sur les autres. Mais au vu du faible overhead CPU et mémoire de ce module, je vous conseille de l’intégrer de base dans vos serveurs Web.

Utilisez-vous ce module (ou son pendant pour Apache ?) pour l’hébergement de vos sites ? Quels sont les filtres que vous mettez en place ?

Sources ayant servi à la rédaction de ce billet:

Catégories
Developpement Open-source Planet-libre Reseau Systeme

Glances 1.7.4 est dans les bacs !

Nouvelle version pour Glances, l’outil de supervision système que je développe avec d’autres contributeurs depuis maintenant quelques années. On commence par le traditionnel screenshot du client en mode console:

capture_154

 

Installation et mise à jour

L’installation de Glances sur votre machine (Linux, Mac ou même Windows) se fait via la ligne de commande:

pip install glances

La mise à jour n’est pas plus compliquée:

pip install --upgrade glances

 Au chapitre des nouveautés

On commence par la modification de l’affichage de la ligne résumant l’état des processus. On a séparé la notion de  ‘tasks’ et de ‘threads’:

capture_155

Une nouvelle statistique au niveau de la CPU des machines GNU/Linux est affiché et disponible via l’API: la steal qui peut être utile de surveiller notamment si votre machine est virtuelle (plus d’information sur la mémoire steal en lisant ce très bon billet sur le sujet).

capture_157

On a également ajouté l’information d’uptime (temps écoulé depuis le dernier redémarrage de la machine). Cette information est disponible en haut à droite dans l’interface et bien évidement comme toutes les statistiques via l’API (methode getUptime).

capture_156

Il est maintenant possible, via le fichier de configuration de Glances de cacher certains disques ou interfaces réseau:

[iodisk]
# Define the list of hidden disks (comma separeted)
hide=sda2,sda5

[network]
# Define the list of hidden network interfaces (comma separeted)
hide=lo

Vous serez également heureux d’apprendre que Glances 1.7.4 consomme environ 10% de moins de CPU que la version précédente. En effet, certaines statistiques qui ne nécessite pas un rafraîchissement très fréquent sont maintenant mis en cache.

Enfin, un certain nombre de bugs ont été corrigés (voir la liste exhaustive ici).

Un grand merci aux contributeurs (Alessio en tête), aux packagers (qui vont avoir un peu de boulot) et aux bêta-testeurs !

En route pour la version Glances 2.0 (re-factoring complet, gestion par plugins…) !

Catégories
Developpement Open-source Planet-libre

Tu fais quoi ?

Un premier billet en forme d’excuse pour les lecteurs de ce blog.

En effet, depuis quelques temps, je ne suis pas très actif sur ce site. Le (vrai) boulot et la (vraie) vie ne me laissent que trop peu de loisirs. J’ai donc fait le choix de privilégier mes autres activités dans le domaine des logiciels libres.

En tête de gondole, Glances va bientôt sortir en version 1.7.4. Je suis d’ailleurs à la recherche de bêta testeurs de la version RC notamment sur les systèmes d’exploitation BSD, Mac OS et Windows (suivre cette procédure pour l’installer sur votre système sans impacter la version de Glances existante).

glances-1.7.4

Ensuite, le script Python SxxExx permet de récupérer via la ligne de commande les torrents de vos séries préférés (juste les torrents hein, car télécharger les séries est interdit par Monsieur Hadopi… paix à son âme). En gros, l’idée est de pouvoir lancer des recherches (seulement sur Piracy Bay pour l’instant) en fonction du nom de la série, de la saison, de l’épisode.

Voici quelques exemples:

$ sxxexx -t homeland -s 3 -e 10

Homeland S3E10 name is "Good Night"
Title:   Homeland S03E10 HDTV x264-ASAP [eztv]
Seeders: 3567
Magnet:  magnet:?xt=urn:btih:522b99e066bf97753a9c0
$ sxxexx.py -t "Breaking bad" -s 5 -a

Breaking Bad has 16 episodes in season 5
*******************************************************************************
Title:   Breaking Bad - The Complete Season 5 [BDRip-HDTV] + EXTRAS
Seeders: 2097
Magnet:  magnet:?xt=urn:btih:82eb1fbb413038dd551eb8c5d4f6a891ff2d190f&dn=Breaking+Bad+-+The+Complete+Season+5+%5BBDRip-HDTV%5D+%2B+EXTRAS&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.istole.it%3A6969&tr=udp%3A%2F%2Ftracker.ccc.de%3A80&tr=udp%3A%2F%2Fopen.demonii.com%3A1337
*******************************************************************************
Title:   Breaking Bad S05E16 REPACK HDTV x264-ASAP[ettv]
Seeders: 1928
Magnet:  magnet:?xt=urn:btih:24d076e1c0f041977346e7bbf4277ceccf1086b0&dn=Breaking+Bad+S05E16+REPACK+HDTV+x264-ASAP%5Bettv%5D&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.istole.it%3A6969&tr=udp%3A%2F%2Ftracker.ccc.de%3A80&tr=udp%3A%2F%2Fopen.demonii.com%3A1337
*******************************************************************************
...
$ sxxexx -t "how i met your mother" -s 9 -e 9 -d

How I Met Your Mother S9E9 name is "Platonish"
Title:   How I Met Your Mother S09E09 HDTV x264-2HD [eztv]
Seeders: 3631
Magnet:  magnet:?xt=urn:btih:11633c741fe5e0a0774c2222cfa6c05

J’utilise ce script en parallèle d’un autre projet libre: Witsub. Ce dernier permet de rechercher, également en ligne de commande (« fuck the gui ») les sous-titres des séries téléchargés.

 

Je participe également à d’autre développements. Je vous invite à suivre mon activité sur Github et à consulter la liste de mes repositories.

 

 

Catégories
Developpement Open-source Planet-libre

Utilisation des CTags avec Sublime Text

capture_147CTags est un outil pour les développeurs permettant de construire un index des fonctions et classes utilisées. Cela permet donc à un éditeur de texte compatible avec CTags de ce déplacer rapidement et sans « parsing » inutile dans l’arborescence de votre projet. On peut ainsi, à l’aide d’une simple combinaison de touches, aller directement à la définition d’une fonction.

Nous allons dans ce billet voir comment installer et configurer CTags avec l’éditeur de texte Sublime Text 3 dans un environnement Debian/Ubuntu.

Note: la procédure est grosso modo la même pour d’autres éditeurs comme Vim , Emacs ou GEdit.

Installation de CTags

CTags est disponible dans les dépôts de toutes les distributions. Sous Ubuntu, une simple ligne de commande:

sudo apt-get install ctags

devrait suffire pour installer une version stable de CTags.

Note: Pour installer CTags à partir des sources, toutes les informations se trouvent sur le site officiel.

Création de l’index pour votre projet

Il existe de nombreuses manières pour construire les fichiers index CTags. La plus simple est de se rendre dans le répertoire de votre projet (par exemple ~/dev/monprojet) puis de saisir la commande suivante:

cd ~/dev/monprojet
ctags -R -f .tags

On demande donc au logiciel ctags de générer le fichier index nommé .tags (option -f .tags) à effectuant un parsing récursif (option -R) de l’arborescence de votre projet.

Ce fichier doit être régénéré à chaque ajout de fonction ou de classe. Cela se fait par une combinaison de touche dans SublimeText mais peut aussi être automatisé par un hook après un commit Git.

Installation du plugin Ctags dans Sublime Text

Je pars sur le principe ou votre Sublime Text est installé avec le plugin Package Manager (si ce n’est pas le cas, suivre cette procédure).

Une fois Sublime Text lancé, on commence par appuyer sur la combinaison de touche SHIFT+CTRL+P puis de saisir le mot clé Install Package. La liste des plugins disponibles va se charger, on cherche ensuite le plugin CTags et on l’installe.

Utilisation de CTags dans Sublime Text

Au démarrage de Sublime Text dans le répertorie de votre projet (~/dev/monprojet) , le fichier index de Ctags (.tags)  va automatiquement être chargé. Il ne vous reste plus qu’à utiliser les combinaisons de touches suivantes pour naviguer dans les classes et fonctions de votre code source:

Commande Key Binding
Générer / Re-générer le fichier index Ctags CTRL+t, CTRL+r
Aller à la définition de la fonction/classe CTRL+t, CTRL+t
Revenir en arrière CRTL+t, CTRL+b
Affiche la liste des fonctions/classes (fichier en cours) ALT+s
Affiche la liste des fonctions/classes (tous les fichiers du projet) ALT+SHIFT+s

Conclusion

L’utilisation des CTags apporte un gain de productivité non négligeable lors du développement logiciel. Le fait d’avoir une base commune et ouverte (le fichier .tags étant à plat et au format texte) permet de passer d’un éditeur à un autre sans perte de fonctionnalité.

Utilisez-vous les Ctags ? Si oui comment.

Partagez cela avec nous !

Catégories
Hardware Open-source Planet-libre

Ma shortlist d’Ultrabooks sous GNU/Linux

dellxps

Je cherche à remplacer mon bon vieux PC laptop personnel qui commence un peu à dater (Fujitsu Lifebook S Series de 2009). L’utilisation que je fais de ce PC est assez varié: Surf sur le Web, blogging, développement, traitement d’image (photo)…

A partir de mon expérience sur le Fujitsu, les caractéristiques minimales sont les suivantes (par ordre décroissant d’importance):

  • composant compatible avec les distributions GNU/Linux (Ubuntu pour mon cas)
  • écran avec une résolution Full HD avec une diagonale minimale de 13″
  • 8 Go de RAM
  • disque dur système SSD car une fois que l’on y a goûté, il est impossible de revenir en arrière
  • processeur i5 ou supérieur
  • qu’il ne soit pas trop moche car il traîne souvent dans mon salon et pas trop lourd car je l’emporte avec moi en voyage et déplacement
  • un clavier AZERTY normal (donc ce qui met hors jeu des Apple MacBook Pro…)
  • un prix autour des 1200€

Comme vous pouvez le voir, ces caractéristiques collent parfaitement avec les laptop de type ultrabook.

J’ai donc commencé à chercher sur le net des informations sur les machines pouvant coller à mes besoins. De manière assez surprenante, la liste n’est pas si grande que cela. En effet, à l’heure actuelle (décembre 2013), beaucoup d’Ultrabooks ne proposent qu’une résolution « HD Ready »  (1366×778 pixels) ou d’une mémoire trop juste (4 Go).

Ainsi, ma shortlist  initiale se compose d’une dizaine de machines: CLIQUEZ ICI pour consulter ma liste sur Google Drive.

Voici, par ordre alphabétique, les ultrabooks qui sortent du lot par rapport à mes besoins/goûts.

Clevo W840SU 14″

Proposé par le site Anglais PCSpecialist, ce laptop n’est pas à proprement parler un ultrabook mais dispose d’une configuration paramétrable, d’un port Ethernet (oui madame !) et de composant de qualité. Il peut de plus être commandé sans OS Windows, d’ou un prix de vente assez concurrentiel (moins de 1200 € pour une configuration musclée).

Le seul problème pour moi est le design général qui n’est pas vraiment glamour.

cosmos

 

 

Dell XPS 13 Dev

La deuxième machine est beaucoup plus connue car elle avait fait le buzz au moment de sa commercialisation. Imaginer un ultrabook design, doté d’une configuration musclée pour les développeurs sous Ubuntu (au moins on est sûr de la compatibilité) !

Vous en avez rêvé ? Dell a essayé de le faire avec son XPS 13 Dev Edition.

Au niveau du look, rien à dire, c’est une belle machine que l’on a pas honte de sortir en public. Au chapitre des points négatifs: pas de port Ethernet et un prix qui grimpe à plus de 1300€ avec la livraison.

dellxps2

 

Lenovo Ideapad Yoga 2 Pro 59386559

Quoi ? Un IBM (enfin Lenovo) dans cette sélection ? Et oui, l’Ideapad Yoga 2 est une bien belle machine avec notamment une dalle HD avec une résolution de 3200×1800 pixels, un design très sympa (si on aime le orange) et une configuration qui tient la route pour 1200€.

Il est par contre très difficile de le trouver en France et la compatibilité avec Linux demande quelques manipulations.

lenovo

 

MOUNTAIN Portátil LightU T744G

Enfin, pour finir cette sélection, nous allons aller du coté de l’Espagne ou l’intégrateur Mountain propose des PC et laptops à configurer et compatible avec Ubuntu (il propose même d’installer nativement l’OS avant de vous l’expédier).

La configuration est bonne, le design plus sexy que le Clevo Anglais mais le prix grimpe à plus de 1300€.

capture_145

 

Conclusion

Je ne suis pas encore fixé sur mon choix final. Pour l’instant, le Montain, le Dell et le Lenovo tiennent la corde.

Avez-vous d’autres pistes ?