Archive for the ‘Gentoo’ Category

Avec Gentoo et les ebuilds, rien de plus facile que de tester de nouvelles versions.

Installation de PHP 7.1

Voici la manipulation rapide :

  • créez votre overlay local (si ce n’est pas déjà fait !) ;
  • créez le répertoire dev-php/php et mettez-y le dossier files/ que vous trouverez dans le /usr/portage/dev-php/php ;
  • copiez également ce ficher (j’ai juste modifier le nom et l’url de téléchargement présents dans le fichier php-7.0.7.ebuild) : wget -P . http://cyril.me/dl/php-7.1.0_alpha1.ebuild
  • tapez la commande ebuild php-7.1.0_alpha1.ebuild digest merge.

Configuration de FPM

Modifiez le fichier php-fpm.ini de php7.1 en apportant les modifications suivantes (faîtes attention au listen également si vous faîtes tourner plusieurs fpm) :

  1. pid = run/php-fpm-php7.1.pid

Ensuite, créez le fichier dans init.d de pour cette version :

ln -s php-fpm /etc/init.d/php-fpm-php7.1

et c’est parti !

/etc/init.d/php-fpm-php7.1 start

php7.1.0_alpha1

Update du 03.04.2013 : nginx-1.3.15 est maintenant directement fourni avec SPDY module.

Nginx est un très bon logiciel alternatif à apache ou lighttpd. Voici comment utiliser le protocole SPDY avec Nginx.

SPDY : c’est quoi ?

SPDY est un protocole Web qui vient entre le SSL et le HTTP. Le but est d’accélérer le téléchargement des données.

  1. Le premier moyen d’accélérer la connexion est de faire du multiplexage, c’est à dire de faire passer plusieurs flux HTTP en parrallèle au travers de la même connexion. Ainsi, une seule connexion est requise.
  2. Le deuxième moyen est de compresser les données qui ne le sont pas, notamment les entêtes HTTP.

Attention toutefois : SPDY n’est compatible que pour des URLs sécurisées (HTTPS) : « we believe that the long-term future of the web depends on a secure network connection » ( « nous pensons que le futur du web va s’appuyer sur une connexion réseau sécurisée »).

Enfin, SPDY est déjà compatible avec Chrome et Safari, et c’est déjà pas mal ! Voici ce lien pour une liste des navigateurs compatibles à jour.

Conséquenses sur le développement

Le protocole SPDY permet de s’affranchir de certaines règles qui permettent d’afficher plus rapidement une page web :

  1. « moins » besoin de multiplier les noms de domaine des serveurs de fichiers statiques ;
  2. pas besoin de faire de Sprites CSS, car le principe du sprite est d’utiliser la même connexion pour télécharger plusieurs images, mais en combinant toutes les images dans une seule.

Installer nginx-1.3.9 avec SPDY sous gentoo

Voici l’overlay à installer 🙂 (ou bien récupérez juste l’ebuild et le patch !)

https://github.com/paxal/nginx-spdy

En savoir plus

Update 20.01.2013 : L’ebuild de la version nginx-1.3.11 avec spdy est disponible

Update 03.04.2013 : L’ebuild de la verstion nginx-1.3.15 avec spdy est désormais disponible sur le repository officiel de gentoo

« Mazette ! », comme peuvent dire certains ! Que de complications pour avoir accès à certaines fonctionnalités sur des Debian/Ubuntu ! (ci-après dénommées Debian tout court…)

J’ai récemment passé un serveur de Gentoo à Debian et voici les différentes difficultés que j’ai pu rencontrer…

Compilation avec des USE-flags incompatibles

Sur Gentoo, la vie est belle : j’ai besoin de telle fonctionnalité plutôt que de telle autre, je fais mon choix, puis j’emerge le programme. Tandis que sous debian… ah la la… obligé de compiler manuellement pour avoir les bons paramètres dans le ./configure. Résultat : une version compilée à la main, mais dans un répertoire dans un coin, qui ne profitera pas des nouvelles mises à jour.

J’en ai donc fait l’expérience avec PHP et le support des imageps*, ainsi qu’avec tinyproxy qui ne supporte pas la méthode Bind puisque compilé avec un mode « transparent » par défaut. Certes, il y a toujours moyen de contourner le problème du bind avec des règles de sécurité réseau, mais je fais quoi pour mon PHP ? J’ai les deux versions de script avec imageps* et imagettf*, et la version TTF n’est pas à mon goût au niveau de l’antialiasing de la police…

Init configurable

Pas le peine de lancer lighttpd alors que je ne l’ai même pas configuré ! Que se passe-t-il si le logiciel que se lance automatiquement fait planter ma machine à chaque fois (pas pratique d’utiliser le mode rescue pour ce genre de problème !) ou si la version du paquet contient des failles de sécurité ?

Gentoo : un monde imparfait…

Bon par contre, je les connais les problèmes avec Gentoo : configurer son boot (bootloader et kernel), mais avec de l’habitude ça passe plutôt bien ; ou encore attendre pas mal de temps pour compiler un programme genre LibreOffice (-bin ?) ou chromium (google-chrome ?).

J’ai aussi rencontrer des problèmes de stabilité dans certains programmes comme mysql-server ou lighttpd, et là je dois avouer que Debian m’a bien aidé !

Bon, j’arrête de troller…

Voici comment mettre en pause un processus sous linux, et comment le redémarrer.

kill, ne me tue pas !

La commande kill permet d’envoyer des signaux à un processus, par exemple pour lui dire de s’arrêter :
kill $pid

On peut préciser à la commande kill le signal que l’on souhaite envoyer. Par exemple, pour tuer un processus récalcitrant à s’arrêter, on peut envoyer le signal 9 SIGKILL :
kill -9 $pid

Stop and restart

Pour dire à un processus de s’arrêter temporairement, puis de redémarrer, il faut envoyer les signaux SIGSTOP pour l’arrêter, et SIGCONT pour lui dire de continuer :

kill -SIGSTOP $pid # Stop
kill -SIGCONT $pid # Start

Astuce : si vous ne voulez pas recopier le numéro du processus et que vous préférez utiliser le nom de l’exécutable, utilisez la commande killall.

Ceci est un autre petit memo sur les iptables. Ici, nous allons voir comment rediriger toutes les requêtes sortantes vers un port local de notre machine. Le but est de proposer une solution pour accéder à des services qui se trouvent derrière un firewall, alors que l’on possède par exemple une connexion ssh.

Ce memo complète le précédent sur la redirection de paquets qui nous sont destinés.

Petit rappel : mise en place du NAT

Pour créer une passerelle, il faut activer le transfert de paquet et la translation d’adresses :

sysctl net.ipv4.ip_forward=1
iptables -A POSTROUTING -o eth0 -j MASQUERADE

Mise en place d’un tunnel transparent

On procède ici en deux étapes : d’abord la création du tunnel en tant que tel :

ssh -L port_local:ip_destination:port_destination user@host

port_local : c’est le port de notre machine sur lequel le service sera disponible
ip_destination : c’est l’ip (ou le nom dns) de la machine à laquelle nous voulons avoir accès
port_destination : c’est le port de la machine à laquelle nous voulons avoir accès
user@host : ce sont les utilisateurs et la machine sur laquelle nous allons nous connecter pour accéder à notre destination finale

Ensuite, nous allons automatiser la redirection des paquets avec iptables :

iptables -t nat -A OUTPUT -d $ip_destination -p tcp \
  --dport $port_destination -j REDIRECT --to-ports $port_local
iptables -t nat -A PREROUTING -d $ip_destination -p tcp \
  --dport $port_destination -j REDIRECT --to-ports $port_local

La première ligne est pour nous : elle permet à la machine elle-même d’accéder dorénavant au nouveau service comme d’habitude.
La deuxième ligne est pour le nat à proprement parler : elle permet de rediriger automatiquement les paquets des machines qui nous utilisent comme passerelle.

Plus d’informations sur le fonctionnement des iptables : iptables tutorial, très complet.

J’ai lu pas mal d’articles sur comment créer un cluster de session en PHP, afin de pouvoir utiliser plusieurs serveurs web en front tout en conservant les sessions entres les différents serveurs. Finalement, je vais expliquer la solution de repcached.

Memcached

Memcached est un serveur qui sert à enregistrer et redélivrer des valeurs diverses et variées directement dans la RAM d’un ordinateur.

Avantages : la rapidité d’éxecution des commandes et le support dans PHP en installant une simple extension PECL.
Inconvénient : perte des données en cas de reboot

Dans notre cas, pour stocker des sessions, c’est parfait : un accès rapide à des données, et plusieurs serveurs peuvent accéder à cette base de donnée en même temps.

Repcached

Repcached permet de pallier l’inconvénient de memcached : il s’agit simplement d’un patch qui permet de gérer la réplication entre deux serveurs. En effet, toute commande d’écriture sur un serveur est directement reportée sur l’autre serveur. Ainsi, si l’un des deux tombe, l’autre est à jour et peut prendre le relai. De plus, lors du reboot, toutes les données seront automatiquement récupérées auprès du premier serveur.

Cette solution permet du coup de gérer la redondance de l’information.

Puis-je mettre plus de 2 serveurs ?
Certainement, mais je ne sais pas trop comment… On pourrait mettre 3 serveurs en cycle, mais si l’un tombe, la chaîne est rompue. Il faudrait automatiquement adapter le routage des paquets non plus vers le serveur qui est tombé, mais vers le serveur survivant (en redirigeant les paquets par iptables par exemple).

Installation sous Gentoo

J’ai mis à disposition le serveur memcached 1.2.8 avec repcached 2.2 en ebuild à disposition ici :
http://cyril.me/ebuild/net-misc/memcached/

Cet ebuild se base sur la version 2.1-1.2.6 disponible dans l’overlay wolf32o1.

Ceci est un petit mémo sur la méthode pour transférer des paquets sous linux avec iptables.

1. Autoriser votre ordinateur à transférer des packets

Vous devez activer dans un premier temps le transfert de paquets par votre ordinateur. En root, exécutez la commande suivante :

# sysctl net.ipv4.ip_forward=1

Si vous souhaitez que ce paramètre soit activé par défaut au démarrage de votre ordinateur, éditez le fichier /etc/sysctl.conf, qui sera utilisé au boot pour remettre les paramètres à jour.

2. Faire du NAT avec iptables (translation d’adresse)

Le NAT consiste à autoriser qu’un ordinateur utilise le votre comme passerelle vers internet. Par exemple, vous avez une clé 3G ou un accès simple à Internet : mettez-vous en réseau avec l’autre ordinateur (avec des IPs fixes, un câble réseau ou un wifi en ad-hoc). Ensuite, autorisez le NAT de la manière suivante (remplacez eth0 par l’interface de votre connexion Internet).

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

3. Forwarder des paquets

Pour forwarder les paquets qui arrivent sur un port vers un autre, utilisez iptables ! L’exemple suivant montre comment router les paquets UDP port 31234 vers une autre IP (on aurait aussi pu changer le port de destination pour en mettre un différent).

# iptables -t nat -A PREROUTING -p udp --dport 31234 -j DNAT --to 10.0.0.2:31234

Exemple d’utilisation : transférer des paquets RSTP (comme ceux de la TV Freebox) vers un autre ordinateur.

Manipuler des PDFs

Admettons que vous ayez deux fichiers PDF que vous souhaitiez regrouper en un seul fichier (par exemple les recto et verso de votre carte d’identité). Pour ce faire, voici un petit outil bien pratique : pdftk.

Bien que l’utilisation de ce programme est un peu compliquée, il n’en reste pas moins bien pratique !
$ pdftk recto.pdf verso.pdf cat output combine.pdf

Convertir des JPG en PDF

Je me suis mis à scanner ce matin un document, directement sur une clé USB (c’est plus pratique avec Linux que de commencer à chercher comment installer les drivers de scan 😉 ). Je me suis récupéré, à ma grande surprise, des fichiers JPEG au lieu d’un PDF tant attendu !

Pas de soucis : avec convert de imagemagick, vous pouvez convertir chaque JPG en PDF :
$ for f in *.jpg; do echo Converting $f; convert $f $f.pdf; done

Ensuite, utilisez pdftk pour concaténer les fichiers PDF ainsi créés.

Installation des outils : les outils présentés ici sont disponibles dans la majorité des distributions (ubuntu, gentoo, …)

Vous avez sans doute entendu parlé de Guitar Hero : ce jeu de simulation de musique vous fais croire que vous jouez de la guitare comme un dieu. Soyons bien clairs : c’est pas le même topo avec une vraie guitare. Mais là n’est pas le sujet de ce post.

Frets on fire

Frets on fire est la version Open Source du jeu Guitar Hero. Loin de proposer le même design, il propose en revanche le même principe que Guitar Hero pour la guitare : les touches défilent, à vous de les taper au bon moment. Pour ce faire, prenez votre clavier (sans fil si possible) à l’envers, utilisez la touche [ENTER] pour gratter les cordes, et les touches [F1] à [F5] pour les frets.

Frets on fire est codé en utilisant la librairie SDL, et comme la majorité des logiciels codés avec cette librairie, il est compatible Windows / Mac OS X / Linux.

Linux et la Wiimote

Sous linux, il est possible d’utiliser la wiimote comme manette. La manipulation n’est pas très difficile.

  1. Configuration du noyau : il suffit d’activer le driver « User level driver support » dans Drivers -> Input device support -> Miscellaneous devices.
  2. Installation logiciel : il vous suffit d’installer le logiciel cwiid (Homepage de cwiid).

Assurez-vous maintenant que le module uinput est loadé (modprobe uinput). Une fois le logiciel installé, lancez (en root si vous n’avez pas les droits en user normal) la commande wmgui. C’est une interface qui permet de détecter si vous avez réussi à connecter votre wiimote à votre PC. Si votre Wii est allumée, éteignez-là, elle risque d’interférer avec votre PC et vous ne réussirez pas à connecter votre wiimote. Cliquez sur File -> Connect et suivez les instructions à l’écran pour connecter votre Wiimote.

Capture d'écran de wmgui

Capture d'écran de wmgui

Une fois que vous avez réussi à connecter votre wiimote, vous pourrez voir que vous pouvez activer des leds, faire fonctionner le vibreur, etc.

Et la Guitare Wii

La guitare utilise la manette pour se connecter au PC, donc si vous avez connecté la manette, vous avez connecté la guitare. Il ne reste plus qu’à configurer votre PC pour que se dernier comprenne la guitare.

Dans le logiciel cwiid, il est aussi fourni un utilitaire wminput, qui permet de transcrire les touches de la wiimote en touches du clavier. Une fois les bons réglages effectués, vous pourrez utiliser votre guitare Wii.

Les fichiers de configuration pour wminput sont stockés dans /etc/cwiid/wminput. Enregistrer le fichier wiiguitar dans ce repertoire ou celui de votre distribution si différent, et lancer wminput comme suite :

# modprobe uinput
# wminput -c wiiguitar

Là, appuyez sur les boutons 1 et 2 de votre wiimote, et le tour est joué : votre guitare wii vous sert de clavier. Lancez Frets on fire, et jouez !

Note : la majorité des opérateurs de téléphonie mobile interdise dans leur forfait d’utiliser le mobile comme modem Internet.

Principe de fonctionnement

Le principe est simple : vous avez un ordinateur, et vous êtes en vacances (au ski, à la mer, …) et vous n’avez pas votre connexion ADSL. Vous avez un ordinateur, pratique à utiliser, qui n’a pas d’internet, et un téléphone mobile, un peu limité, mais qui peut se connecter. L’idée est donc d’utiliser la connexion internet du téléphone pour surfer sur son PC.

L’utilitaire de partage de connexion internet

Dans Windows Mobile, il y a une application nommée « Partage de connexion« . Dans cet utilitaire, vous choisissez la couche réseau à utiliser entre le téléphone et l’ordinateur, et la connexion à utiliser pour se connecter à internet. Afin d’éviter une configuration complexe du bluetooth, je conseille d’utiliser le cable de connexion USB fourni. Ca a aussi l’avantage de recharger le téléphone pendant cette utilisation.

Lorsque vous tapotez sur « Connecter », le téléphone se connecte à internet, et dans le cas de l’USB, il passe en mode « carte réseau USB ». Il prend une adresse IP (192.168.0.1 par défaut) et lance un serveur DHCP. Lorsque le PC va chercher à se connecter au téléphone, il va récupérer une IP (192.168.0.2), et aussi les DNS : aucune configuration manuelle des paramètres IP n’est nécessaire.

Note sur la carte réseau du PC : sous Windows, si vous avez installé le logiciel de synchronisation, vous devriez normalement avoir la carte réseau. Sous linux, il faut compiler le module rndis_host (Device Drivers => Network => Usb adaptaters => Multi-purpose USB networking framework => RNDIS host).

Accès au web

Pas si vite, malheureux ! Vous avez essayé de vous connecter avec Firefox ou IE et ça ne marche pas ? C’est normal ! Votre opérateur bloque sans doute les connexions internet qui ne sont pas identifiées comme « mobile ». Il suffit donc de leurrer votre opérateur en changeant le User-Agent. Pour ce faire, on peut par exemple utiliser le User-Agent switcher, extension Firefox. Il suffit de configurer un profil avec comme User-Agent celui de votre SPA : « SAMSUNG-SGH-i900/1.0 Opera 9.5 ».