Posts tagged ‘Linux’

« 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 un petit moyen de tester si un certificat ssl est valide, et s’il le restera encore pendant un certain temps…

Openssl s_client et openssl x509

Openssl donne deux outils qui vont nous servir.

1. Le premier permet de se connecter à un serveur pour envoyer des requêtes

openssl s_client -connect www.openssl.org:443

Cette commande va se connecter au server www.openssl.org sur le port 443 en utilisant le protocole SSL. Vous pourrez ensuite communiquer avec le serveur en HTTP :

GET / HTTP/1.0
Host : www.openssl.org

et le serveur va vous renvoyer la page. On peut aussi utiliser cette technique sur d’autres ports et d’autres protocoles, comme pour le SMTPs, le POPs, etc.

2. Le deuxième permet d’avoir des informations sur le certificat : est-il valide ? Quelle est sa date d’expiration ? Il suffit de piper la première commande avec la deuxième :

echo | openssl s_client -connect www.openssl.org:443 | openssl x509 -noout -enddate

Quelques astuces avec openssl

  • Si openssl vous sort qu’un certificat dans la chaîne n’est pas valide, donnez-lui le chemin vers le dossier contenant les certificats racines, par exemple -CApath /etc/ssl/certs
  • Si vous voulez éviter d’avoir les erreurs de la première commande en sortie, envoyez-les vers /dev/null : openssl s_client -connect www.openssl.org:443 2> /dev/null
  • Si vous voulez connaitres les différentes options de openssl s_client ou de openssl x509, essayez man ssl-s_client ou man ssl-x509

Petit bonus : le script PHP qui teste si un certificat expire bientôt

  1. $args = 'www.openssl.org:443';
  2. $command =
  3.   'date +%s -d "$(LANG=C openssl s_client -connect '
  4.   .escapeshellarg($args)
  5.   .' -CApath /etc/ssl/certs/ < /dev/null 2>/dev/null | openssl x509 -noout -text -enddate | tail -n1 | cut -d= -f2)"';
  6.  
  7. exec($command, $output);
  8.  
  9. $time = array_shift($output);
  10. if(!is_numeric($time) || $time == 0)
  11. {
  12.   // Erreur : impossible de tester la validité du certificat : pourquoi ?
  13. }
  14. else
  15. {
  16.   // On va avoir le nombre de jour restant
  17.   $nDaysLeft = floor(($time - time())/86400);
  18. }
  19.  

Articles sources

Tester la date de fin d’un certificat : http://www.brandonhutchinson.com/When_does_my_certificate_expire%3F.html
Tester la validité du certificat avec les certificats racines : http://stackoverflow.com/questions/4103472/ssl-handshake-fails-with-a-verisign-chain-certificate-that-contains-two-ca-si

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.

L’astuce du jour : voici comment faire des modifications de contenu en pipe ou sur des fichiers comme avec sed, mais avec la puissance des expressions régulières de perl.

En pipe (y en a marre des foo/bar !) :
perl -pe 'undef $/; s/Truc/Machin/i;'

Avec des fichiers :
perl -pe 'undef $/; s/Truc/Machin/i;' -i fichier

Exemple avec wget et un feed xml

Pour récupérer la date de dernière mise à jour d’un flux RSS :
wget -q -O - http://blog.cyril.me/feed/ | grep lastB | perl -pe 'undef $/; s/.*>(.*?)<.*/\1/'

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 voulez faire la somme d’entiers sur votre console ?
Voici la commande à utiliser :
awk 'BEGIN{sum=0} {sum+=$1} END{print sum}'

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 : Ce billet est là juste pour recherches expérimentales autour du partage de Connexion Internet, et des différentes possibilités que cette dernière apporte.

Principe de fonctionnement

Ce billet est une extension du billet précédent (Utiliser son SPA comme modem). En utilisant le partage de connexion, vous pouvez avoir aussi accès à la TV. Cela dépend tout de même de l’opérateur. Si vous êtes chez SFR, il suffit de se connecter au portail WAP de SFR et d’accéder aux pages concernées.

Configuration requise

Pour pouvoir regarder la TV, il vous faut :

  • Une connexion internet qui passe par votre mobile ;
  • Un forfait qui permet de regarder la TV, pour éviter de payer du hors forfait lors de vos tests ;
  • Une extension Firefox permettant de lire le WAP (par exemple XHTML Mobile Profiler) ;
  • VLC pour lire les flux RTSP.

Une fois que vous avez réuni tous ces éléments, il suffit d’aller sur le site de SFR par exemple : http://wap.sdp.sfr.fr/. Ensuite, allez dans la partie du site qui concerne la TV, choisissez une chaine. Il suffit alors de copier l’adresse du lien et de l’ouvrir avec VLC. (Ce lien n’est valable qu’un certain temps, vous ne pouvez pas l’ajouter à une playlist)

Enjoy !