Archive for the ‘Gentoo’ Category

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

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.