Posts tagged ‘Gentoo’

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 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.

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.

Crypter Chiffrer ses données, ça permet de protéger ses données. C’est surtout pratique pour viagra documents très personnels, ou confidentiels de bureau, que vous baladez sur une clé USB ou sur un ordinateur portable.

Truecrypt : un logiciel complet

Truecrypt est un logiciel qui vous permet de chiffrer vos données sous Windows, Mac OS et Linux. Et ce qui est top, c’est que ce chiffrement est compatible entre tous ces systèmes d’exploitation : vous pourrez utiliser par exemple la même clé USB chiffrée sur Linux ou sous Windows, entre différents ordinateurs ou en multiboot.

Cas pratique : multiboot windows et linux

Comme précisé ci-dessus, vous pouvez utiliser les mêmes fichiers sous Windows et sous Linux. Vous pouvez donc créer un Y:\ sous windows, et monter le système de fichier sous linux dans /media/crypt par exemple.

Voici les différentes utilisations que vous pouvez en faire :

  • Partage de média : partagez vos photos, vos vidéos, votre musique sur un disque dur chiffré et partagé entre linux et windows
  • Sauvegardez vos données importantes : conservez vos clés de sécurité (des impôts par exemple), vos scans de carte d’identité, votre compta, vos fichiers (|Open|Libre)Office  sur votre ordinateur. Si vous le perdez (dans le cas d’un portable, c’est plus probable que dans le cas d’un fixe !), alors vos données seront inaccessibles aux voleurs.
  • Dans le cas de Windows, utilisez les applications portables ! Ainsi, sauvegardez vos emails et vos données de surf sur le disque chiffré, en utilisant les versions portables de Firefox et Thunderbird.

Installation et configuration

Installer truecrypt sous Windows

Pour installer truecrypt, vous pouvez consulter le tutorial présenté sur le site de truecrypt, mais le logiciel est assez facile à dompter : si vous avez un doute, dites que vous voulez créer un fichier sur une partition existante, et ne pas utiliser une partition entière.

Ensuite, montez votre fichier chiffré, puis faites « sauvegarder les volumes favoris ». Ensuite, modifiez les préférences de l’application et cochez « monter les disques favoris au démarrage ».

Installer truecrypt sous linux

Sous linux, utilisez l’utilitaire de votre distribution pour installer truecrypt, ou téléchargez directement une archive pour votre distribution sur le site officiel. Dans le cas de gentoo, si vous avez des difficultés pour l’installer, n’hésitez pas à laisser un commentaire ! Mais sachez que Truecrypt utilise FUSE pour gérer le montage du filesystem et des modules noyau pour le chiffrement (Twofish, Serpent, Sha*, MD5*, RMD*, AES…) en fonction de ce que vous aurez choisi lors de la création du fichier chiffré.

Pour monter automatiquement au démarrage de KDE, vous pouvez utiliser le fichier suivant, qui va vous demander un mot de passe puis monter le fichier chiffré (adaptez-le à vos besoins !). Vous pouvez ensuite dire à KDE de le lancer à chaque ouverture de session.
Télécharger le script : http://blog.cyril.me/wp-content/uploads/2011/02/tc-mount.txt

Chiffrer une clé USB

Vous pouvez voir comment installer truecrypt sur une clé USB, pour ensuite pouvoir vous ballader avec vos données sur une clé USB en toute sécurité.

Attention : le chiffrement d’une clé USB va supprimer tout son contenu ! Sauvegardez d’abord vos données, créez le disque chiffré puis recopiez vos fichiers.

Plus d’infos sur l’installation sur une clé USB sur le site de truecrypt : installer truecrypt sur une clé USB.

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, …)

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 ».

Problème du jour : je voulais faire développer des photos sur fnacphoto.com. Je me connecte, je choisis « Commande expresse » et là : il me faut un plugin java pour uploader mes photos. Le problème : je n’ai pas de plugin java avec mon Firefox…

Je vous propose donc 3 possibilités pour pouvoir faire tourner les applets java, pour uploader vos photos 😉 :

Utiliser konqueror

L’avantage d’utiliser konqueror, c’est que ce dernier fait directement appel à la machine virtuelle java sans passer par un plugin. Il suffit donc juste d’avoir installé une Machine Virtuelle java. Pour installer la machine virtuelle de sun :

emerge sun-jdk

Utiliser Firefox en mode 32 bits

Autre possibilité (et c’est celle que j’ai utilisée), vous pouvez aller sur votre site avec un Firefox en 32 bits. Vous pouvez télécharger les versions binaires de firefox sur le ftp de mozilla. Téléchargez la version de firefox qui correspond à votre installation. Installez aussi une version 32 bits du plugin java pour Firefox :

USE="nsplugin" emerge emul-linux-x86-java

Sélectionnez le bon plugin java avec la commande eselect (tapez eselect java-nsplugin pour voir comment manipuler les différentes versions de java). Lancez enfin Firefox 32 bits, et le tour est joué.

Installer manuellement le plugin 64 bits

C’est sans aucun doute la meilleure façon de procéder, mais aussi la plus compliquée pour le néophite. Sun a sorti une version 64 bits du plugin pour Firefox.

Il suffit alors de télécharger cette version, et de l’exécuter (sh nomdufichier.bin). Je conseille de décompresser (ou de déplacer si c’est déjà fait) dans le répertoire /opt/.

Enfin, pour que le plugin soit reconnu par eselect, il faut un peu bidouiller dans le répertoire /usr/share/java-config-2.

Enregistrez le fichier sun-jre-1.6, puis en tant que root, copier-le vers le répertoire /usr/share/java-config-2/vm. Faites ensuite un lien symbolique du plugin vers le dossier /usr/share/java-config-2/system/

cp sun-jre-1.6 /usr/share/java-config-2/vm
ln -s /opt/sun-jre-1.6.0.12/lib/amd64/libnpjp2 \
  /usr/share/java-config-2/nsplugin

Vérifiez alors que le plugin est bien installé en tapant about:plugins dans Firefox.