dimanche 22 février 2015

Linux Mint: Améliorer votre réseau domestique Linux avec Avahi (Zeroconf)

IntroductionPetit article qui ravira les utilisateurs Debian, Ubuntu et notre bien aimé Linux Mint.
Avoir plusieurs machines Linux sur un réseau domestique, c'est franchement sympa. Partage de fichier, commande à distance en ssh, etc c'est vachement cool.
Par contre, il y a quand même un truc vachement énervant, c'est quand il faut localiser les autres machines sur le reseau alors que l'on a un service DHCP. A moins d'opter pour une IP fixe, c'est pas franchement cool de découvrir l'adresse IP du jour du PC de Madame pour y faire un

ssh utilisateur@192.168.1.adresse_du_jour
Harf!!!

Heureusement, il y a Ahavi (Zeroconf) qui permet d'avoir un service de découverte sur le réseau domestique sans se prendre la tête à partir du nom de la machine.

Ainsi, le ssh pourri avec l'adresse_ip_du_jour devient

ssh utilisateur@nom_de_la_machine.local

Là, ce devient cool... sauf si le nom de la machine à atteindre est à coucher dehors comme "acer-xya123-maison-z". Il sera toujours temps de changer le nom de la machine plus tard pour rendre les choses plus agréables.

Avahi (Zeroconf) sur Linux... kaseko?!?!
Avahi exécute un service mDNS plus DNS-SD: il s'agit d'un DNS multicast + service de découverte DNS. Le DNS Multicast signifie que chaque hôte (ordinateur) stocke ses propres enregistrement DNS. Une adresse multicast (224.0.0.251) est utilisé par les clients qui désirent obtenir l'adresse IP d'un hôte donné (à partir de son hostname), et l'hôte répond à la requête du client avec sont adresse IP. DNS-SD utilise la même technologies, mais en plus des informations DNS habituelle, les hôtes publient également des informations sur les services disponibles: l'hote annone donc les services qu'il fournit et comment contacter ces services. Le but de tout cela est de permettre la connexion sur un hôte et ses services sans nécessiter la configuration de la part d'un utilisateur: ce procédé est connu comme "Zeroconf sharing" ("partage Zeroconf" en français, Zeroconf signifiant "sans configuration"). Ce type de service logiciel est idéal pour les personnes n'étant pas l'aise avec la configuration manuelle -- ou qui n'ont pas envie de se prendre la tête!

ATTENTION
Il va de soi qu'il ne faut pas installer ce type de service sur les machines d'un reséau accessible depuis Internet. Cela offrirait beaucoup de trop d'informations et de facilité pour les fouineurs opportunistes voulant s'offrir une petite séance de cracking.

A vrai dire, comme il n'y a pas beaucoup de soft Linux qui utilise vraiment mDNS. Apple à fait un usage plutôt intensif de celui-ci: leur logiciel s'appele Bonjour (aussi disponible sur le Pi), et prend en charge la configuration des imprimantes, partage de musique via iTunes, partage de photo via iPhoto, Skype, iChat et toute une série d'autres services logiciels.
Cependant, en terme d’implémentation technique, Avahi est une excellent brique logicielle capable de réaliser/faire tout ce que Bonjour fait. Il se dit sur le Net que les équipes de développements Debian/Ubuntu essayent de donner un petit coup de pouce à mDNS en incluant avahi. Du coup, les amoureux de Mint en profite aussi.
Autant dire que c'est de la balle... ça marche comme sur des roulettes.

Quels services Avahi peut rendre à votre Linux box?
Pour commencer, adresser vos machines par leur nom plutôt que leur adresse IP. Une autre utilisation est le partage de la musique en réseau. En particulier, si certaines de vos musiques sont sur votre pc portables, elles apparaissent et disparaissent du réseau en fonction des déplacements de votre machine sur le réseau... shutdown et boot. La découverte automatique de musique est un service vraiment très pratique. C'est la même technologie que celle utilisée par Apple et iTune.

Si vous êtes intéressé par le partage de musique avec les machines apple, je pense que vous devriez consulter l'article suivant Avahi (Zeroconf) on Linux: What is it Good For? (Hélas, il n'y a pas que Microsoft qui prend des libertés vis-à-vis des standards).

Installer Avahi

sudo apt-get install avahi-daemon avahi-discover libnss-mdns

Vérifier le statut du service

sudo service avahi-daemon status

Si Avahi n'était pas démarré, vous pourriez utiliser

sudo service avahi-daemon start

scanner le réseau pour découvrir les services disponibles

avahi-browse -at | grep IPv4


Exemple de résultat offert par avahi-browse

Il est également possible de résoudre facilement l'IP avec l'option "r"

avahi-browse -atr

Une fois la machine identifiée, vous pouvez facilement utiliser des services tels que ssh

ssh NomUtilisateur@Acer-Aspire-xxx.local

Hé hop c'est parti

Ce n'est pas tout, d'autres services sont plus facilement accessibles
  • Ping ping hostname.local
  • Samba nautilus smb://hostname.local 
  • SSH nautilus ssh://hostname.local 
  • Imprimante distante ipp://hostname.local:631/printers/printer_name 
Outil graphique

L'outil avahi-discover affiche le résultat des découvertes dans une fenêtre de votre environnement graphique.
Outils très pratique.

Si avahi-discover n'est pas encore installé, vous pouvez facilement le faire en vous pliant d'un petit apt-get install

sudo apt-get install avahi-discover

Pour lancer l'outil, vous pouvez utiliser la commande suivante depuis un terminal (ou le menu de mint)

avahi-discover

Changer le nom du PC Linux
Maintenant, il ne faut pas oublier qu'avoir un nom de pc (hostname) compréhensible et facilement utilisable sur le réseau et en ligne de commande.
Petit conseil:
  • rendez le hostname simple et facilement compréhensible.
  • Utilisez exclusivement des minuscules (sous Linux, "Bonbon" et "bonbon" ce n'est pas pareil... autant s'éviter les erreurs et l'usage de la touche shift ;-) ).
  • Utilisez exclusivement des "-" en séparateur de mot.
  • Un petit truc bien pratique dans le milieu domestique, c'est d'identifier le propriétaire et le type de machine (à la maison, il arrive souvent qu'une même personne dispose de plusieurs machines).
    Exemples: didier-laptop , didier-desktop, greg-pi
Changer le Hostname
Bref, pour changer le nom d'une machine sur le réseau, vous pouvez suivre ce tutoriel pour Linux Mint (et aussi pour les autres dérivés de Debian).


Ressources

jeudi 19 février 2015

Python: Librairies Tierces de références

Sam & Max, malgré leur style un peu "cru" écrivent des articles de qualités.
Ce n'est pas la première fois que j'arrive sur le site et le fait d'y venir et revenir est quand même significatif de la qualité du contenu.
Je reprends ici deux articles très utiles pour les plus curieux d'entre-nous... il s'agit d'outils pour l'aide au développement en Python (pas besoin de réinventer la roue, ni dépenser un temps considérable en recherche si d'autres nous proposent déjà ce qu'ils ont trouvé et testé)
Merci les gars.

vendredi 13 février 2015

Etendre la portée du Wifi de sa BBox 2 avec TP-Link Range Extender TL-WA750RE

Voici un petit article qui en aidera certainement plus d'un.
Nous avons plusieurs machines sur une BeBox qui sert de serveur DHCP et un portable dans le stock pour les opérations diverses.
Comme il y a beaucoup de métal, la portée du Modem Belgacom est forcément limité... d'où l'idée d'utiliser un Ranger Extender pour augmenter la portée du WiFi.

Le produit sélectionné est le TL-WA750RE de TP-Link... qui fonctionne parfaitement si ont ne tombe pas dans quelques pièges... et il y a de quoi s'arracher les cheveux!
Les quelques pièges:
  • Le mode d'emploi se limite juste à sélection du réseau WiFi à étendre MAIS le travail ne s'arrête pas là!
  • Ne comptez pas sur Windows pour vous simplifier la vie!
    Pour réaliser l'opération complète, il fait redémarrer le TP-Link Range extender... ce qui aura pour effet de changer de réseau (on passe d'un range d'addresse 192.168.0.x à 192.168.1.x).
    Figurez vous que notre charmant Windows sur son HP Pavillon (qui dispose de sa propre couche logicielle de gestion WiFi) s'est totalement emmêler les pinceaux... un vrai cauchemar. Allez savoir si la cause est Windows ou le soft propriétaire de Hp (où les deux).
    Pour conclure la configuration, j'ai sorti mon bon vieux portable sous Linux Mint... stable et prévisible l'opération m'a pris 15 min là ou j'avais déjà perdu deux heures avec Windows sans comprendre ce qui se passait!
  • Il faudra assigner une adresse IP statique au range extender (pour se simplifier la vie)
  • La BBox de Belgacom à déjà un serveur DHCP... il faudra donc désactiver celui du range extender (sinon le reseau ne sait plus qui est patron!)
Toutes ces réponses, je les aient partiellement trouvée dans une vidéo publiée par radhacomputer.

Le quick setup
Ce qu'il est important de savoir ici, c'est que toute cette phase de configuration se passe en 192.168.0.254 permettant d'accéder à tplinkextender.net Hors votre réseau domestique (BBox 2) est en 192.168.1.x . Il faudra donc poursuivre la configuration après le Quick Setup.... et cela, ce n'est pas une info que l'on trouve facilement sur le Net.
 

1 Brancher
Branchez le TP-Link comme indiqué (ou faite un Reset d'usine avec le bouton en dessous) et suivez les instructions du manuel pour vous connecter sur le réseau wifi du Range Extender.(tplinkextender.net).
Jusque là, pas de problème. Le login / mot de passe par défaut est admin/admin

2 Quick Setup
Commencez la phase de configuration rapide.
A l'étape suivante, laissez bien "Range Extender" et "United Kingdom" comme pays.

Même si nous sommes en Belgique.... la configuration Belge ne m'a causé que des ennuis! La seule fois où j'ai laissé "United Kingdom", tout s'est passé à merveille (allez savoir pourquoi?!?)

A la suite de quoi, le Range Extender recherche les réseaux WiFi disponible.

Sélectionnez votre Reseau Wifi (ici, il s'appelle TP-LINK, le votre pourrait s'appeler "MySweetHome" ou "BBOX-42578" ). Pour sélectionner le réseau WiFi, cliquer sur la checkbox dans la liste puis pressez le bouton "Next".
Il vous restera à saisir le mot de passe de votre réseau WiFi (rien d'autre à modifier).
Note: Si votre WiFi n'est pas protéger par un mot de passe, nous vous encourageons vivement à le faire!
Ensuite, vous aurez une page de résumé de votre configuration...
Pressez simplement le bouton "Finish" pour conclure la phase Quick Setup.
Le TP-Link range extender va alors redémarrer....

C'est maintenant que les choses intéressantes commence... ce que la doc ne dit pas. Pour compliquer ma vie, c'est également là que Windows et mon HP Pavillon (stack WiFi développé par HP) ne savaient plus où mettre de la tête. Dans le genre cauchemar où on ne sait absolument pas ce qu'il se passe, c'était pas mal.... heureusement, j'avais mon super petit portable avec Linux Mint (c'est la deuxième fois en deux jours que Linux me sort d'un pétrin mortel... j'aime Linux Mint!).

Poursuivre la configuration après redémarrage
Après ce premier redémarrage, il faut toujours vous connecter sur le réseau Wifi du tplinkextender (soit avec tplinkextender.net ou 192.168.0.254 ).
Vous allez donc être invité à vous reconnecter sur l'interface d'Administration du TP-Link extender.
Pour l'heure, vous n'avez toujours pas changé le login d'administration, cela devrait toujours être admin / admin.

1) Changer la configuration réseau!
Après redémarrage et connexion, vous vous rendez dans l'administration du réseau où il faut impérativement changer les informations!
Si vous prêtez attention à l'écran ci-dessous, nous sommes actuellement en 192.168.0.254 et nous allons passer en 192.168.1.x pour être sur le même réseau que notre B-Box2
Comme vous pouvez le constater sur l'image ci-dessous...
Nous allons:
  1. Passer en adresse IP Statique sur le même réseau que notre BeBox.
    Ici l'adresse IP 192.168.1.55
    Le point 55 devrait normalement être disponible (non assignée par le serveur DHCP de la BeBox). Vous pourriez choisir 192.168.1.215 si cela était plus confortable pour vous, le but est de savoir sur quelle adresse IP is sera possible d'atteindre l'interface d'administration du TP-Link Extender.
  2. Changer le masque du sous réseau pour qu'il soit à 255.255.255.0
  3. Indiquer notre BeBox 2 comme Gateway par défaut, soit 192.168.1.1 de sorte que tout le traffic internet soit redirigé vers la BeBox.
Ceci fait, vous devriez avoir une configuration comme celle-ci:
 Le fait de changer cette configuration redémarrage le TP-Link extender. Soyons donc patient.

2) Relogin mais en 192.168.1.55 :-)
Après redémarrage, nous somme ré-invité à nous logger sur l'interface d'Administration du TP-Link Extender.
Mais cette fois (voyer le message), nous somme sur le même réseau que celui de notre BeBox (soit 192.168.1.x) et bien entendu, avec l'adresse IP Fixe que nous avons choisie (soit 192.168.1.55)
Le login / mot de passe reste toujours admin / admin.

3) Vérification des paramètre WiFi
Allez dans la section Wireless Setting, vous devriez maintenant retrouver la paramétrage par défaut (plus aucune modification nécessaire).
Vous y retrouvez le nom de votre réseau WiFi domestique à étendre dans Root AP (ici TP-Link mais le votre pourrait certainement s'appeler "MySweetHome" ou "BBOX-42578").
Cette fois-ci, je suis resté en région "United Kingdom" même en Belgique (je deviens superstitieux). 

Dans la section Wireless Security, assurez-vous que "Group Key Update Period" est à 0 (c'est normalement le cas).
Le Wireless Password (test1234) doit être celui de votre réseau WiFi domestique (celui du WiFi de votre BeBox donc).

4) Paramètres DHCP
Un autre point important, c'est la configuration DHCP!!
Pour commence, votre BeBox (dont nous étendons la portée WiFi) à déjà un serveur DHCP.
Nous n'avons pas besoin que le TP-Link Extender vienne mettre la zizanie sur le réseau en distribuant ses propres adresse IP avec son propre serveur DHCP! Nous allons donc le désactiver.
 Voici les modifications à faire (et ne pas oublier):
  1. Désactivé la serveur DHCP du Tp-Link Extender
  2. Placer Lease Time à 2880 (pas utile si vous désactiver le DHCP... mais si un jour vous vouliez l'activer, ce sera utile)
  3. Default Gateway : 192.168.1.1 (tout rediriger vers la BeBox)
  4. Default Domain: 255.255.255.0 (employer le bon masque pour rester sur le même reseau que la BeBox)
  5. Primary DNS: 192.168.1.1 (c'est également notre BeBox qui résout les noms de domaine!)
  6. Secondary DNS: uniquement si vous connaissez celui de votre fournisseur d'accès internet. Pas utile dans notre cas.
La modification de ces paramètres nécessite, encore une fois, un redémarrage du TP-Link Extender
5) Surveiller la reconnexion
Après ce dernier reboot, vous pouvez vous reconnecter et vérifier le "status" du TP-Link.
Cela peut prendre un peut de temps, mais il finira par retrouver votre réseau Domestique BBox puis l'étendre.
Cliquer sur "statut" pour rafraichir la page, soyez patient et ne stressez pas inutilement votre TP-Link Range Extender en cliquant trop souvent sur le bouton (une fois toutes les 30 sec c'est bien assez court)
En cours de connexion

Connecté :-)
Sécuriser votre réseau
Votre TP-Link Range extender à une adresse IP Fixe et un login  mot de passe (admin / admin) connu de tous.
Au minimum, vous devez changez votre mot de passe sur l'interface d'administration de votre TP-Link Range extender.

jeudi 12 février 2015

Qu'y a t'il sous le capot de ma Be-Box2

Cela fait un moment que j'ai envie de m'intéresser à ce qu'il y a sous la capot de ma BeBox-2 et de Belgacom TV.

C'est ainsi que je trouve un peut par hasard le Wiki de YobiWiki spécialement dédier au Modem BBox-2. Une source d'information intéressante!

C'est comme cela que l'on apprend que notre BeBox est en fait un Sagem F@st 3464 (lien invalide) (avec une boite différente), exécutant une version customisée de Jungo Openrg (System Linux ultra leger). Une fois connecté en telnet (user: admin, mot de passe: le serial number de la BeBox) nous avons même accès a BusyBox (via la commade shell)
Quelques autres références:
  • Belgacom Be Box 2 (ZooBaB, anglais)
    Il y a entre autre un Hack pour y brancher une console série (un tty)

dimanche 8 février 2015

Imprimante Zebra USB, ZPL, CUPS et Python

Dans l'article précédent "Imprimante Zebra USB, ZPL et CUPS", nous avions vu comment:
  1. Créer un fichier de démonstration demo.zpl (cfr le projet PythonPcl de MCHobby)
  2. Comment configurer une "Printer Queue" en RAW.
  3. Utilise l'utilitaire "lp" pour envoyer le contenu du fichier zpl vers la Zebra.
Si vous n'avez pas encore lu cette article, je vous conseille vivement d'aller y faire un tour. Car la configuration de la queue en RAW est capital pour le bon fonctionnement.

Maintenant, ce qui serait bien, c'est de pouvoir déclencher cette tâche d'impression à partir de Python :-)

Rappelons que le but est de contrôler l'impression des étiquettes à coller à l'aide du langage de contrôle d'impression ZPL (Zebra Print Language) 

Python et Cups
Normalement, vous trouverez CUPS installer sur la plupart des distributions Linux.
Si cela n'était pas le cas, vous pouvez encoder la commande suivante:

sudo apt-get install python-cups python-pip python-dev

L'installation de python-pip n'est vraiment pas indispensable mais c'est un utilitaire très utile.

Lister les imprimantes Cups
Le petit script suivant permet de lister les imprimantes CUPS disponible sur le système.

import cups
conn = cups.Connection()
printers = conn.getPrinters()

for printer in printers:
     print printer, printers[printer]["device-uri"]

ce qui produit le résultat suivant:
GG-P3010 socket://192.168.1.225:9116
zebra-raw usb://Zebra%20Technologies/ZTC%20LP%202824%20Plus?serial=36J141701319
HP-P3010 hp:/net/HP_LaserJet_P3010_Series?zc=NPI188F5A

Comme vous pouvez le noter, nous retrouvons la file d'impression (printer queue) zebra-raw que nous avons créé dans l'article précédent.

Imprimer le fichier demo.zpl
Cette fois, utilisons le cups sous Python pour envoyer le fichier zpl sur la Zebra.

import cups
conn = cups.Connection()

conn.printFile( "zebra-raw", '/home/dom/PythonPcl/test/test-printer/zebra/demo.zpl', 'zebra demo', {} )

et voila! Pour information, la fonction printFile retourne un entier identifiant la job d'impression.

Imprimante Zebra USB, ZPL et CUPS - Damned CUPS!!!

Voici un petit bout d'histoire autour d'un imprimante Zebra USB branchée sur une machine Linux (Linux Mint Mate 17) et d'un acharné qui voulait envoyer du ZPL sur sa Zebra.

L'imprimante à étiquette Zebra, ZPL et Linux
Chez MCHobby (shop.mchobby.be) nous utilisons Linux Mint pour toutes nos tâches et développements.
Ainsi, pour améliorer et accélérer notre étiquetage à partir des infos de notre PrestaShop, nous avons branché une Zebra LP 2824 USB sur notre ordinateur.

Comme nous développons nos propres petits outils PrestaShop en Python (cfr Lcd Order Track et PrestaConsole), nous pourrions facilement créer nos étiquettes à la demande. 

Revenons à nos moutons...

Ensuite, nous avons essayer d'envoyer des commandes ZPL vers l'imprimante. Les commandes ZPL permettent de contrôler directement l'imprimante et le contenu à imprimer.

Fichier de démo et agaceries CUPS
Comme suggéré dans la documentation technique de Zebra, nous avons créé un petit petit fichier de démonstration demo.zpl

^XA
^FO100,50^ADN,36,20^FDxxx^FS
^XZ
 
Ce fichier fût créé à l'aide de Geany (un excellent éditeur de code), avec LF (LineFeed) comme séparateur de ligne et un encodage de fichier en UTF-8.

Ensuite, j'ai essayé d'envoyer le fichier directement vers l'imprimante à l'aide de:

  cat demo.zpl > /dev/usb/lp0

pour continuellement recevoir le message d'erreur

  /dev/usb/lp0: Permission denied

Cette erreur étant provoquée par le système de gestion des impressions (CUPS).

Je ne pouvais pas adresser directement le périphérique à cause de CUPS... mais je ne pouvais pas retirer CUPS car nous l'utilisons pour d'autres impressions (par exemple notre imprimante réseau HP3015).

Sacré nom de Dieu de CUPS!
Cette simple tâche d'envoyer un fichier brute (RAW comme disent les anglais) sur notre Zebra fût l'une des tâches les plus complexes à réaliser.
CUPS n'était pas vraiment en cause... c'est plutôt mon manque de connaissance de la gestion des imprimantes CUPS qui est en cause.

Ce que nous devons faire, c'est installer la Zebra comme une imprimante RAW  et non comme une Zebra! 

Installer la Zebra en RAW dans CUPS
Pour commencer,
Branchez votre Zebra USB puis ouvrez le gestionnaire d'imprimante.
Sur Linux Mint, il ressemble à ceci...

Cliquez sur le bouton "+" pour ajouter une imprimante.

A ce stade, vous pouvez sélectionner votre Zebra USB et passer à l'étape suivant.
Attention, c'est à partir ICI qu'il faudra faire le bon choix!!
Pour commencer, sélectionnez l'imprimante Generique (même si Zebra et la bonne imprimante existe dans la liste, c'est une imprimante générique qu'il faut installer)

Ensuite, vous sélectionnez le pilote "Raw Queue" (file d'impression Raw/brute):


De la sorte, tous les fichiers envoyés cette queue d'impression Zebra sera redirigé directement vers l'imprimante sans aucun traitement intermédiaire!

Point final très important... il faut nommer la file d'impression de façon intelligible!
Nous avons remplacé le nom proposé par "zebra-raw". Ce sera bien plus pratique par la suite. Nous vous conseillons vivement de simplifier le nom court.
 
Voila, quand c'est fini, vous vous trouvez vers avec une nouvelle imprimante (Printer queue / File d'impression) nommée zebra-raw et n'utilisant pas de pilote d'imprimante interprétant les données que vous voulez envoyer vers la Zebra


Chouette, c'est enfin prêt!
 
Envoyer le fichier demo.zpl vers la Zebra
Comme vous l'avez vu ci-dessus, nous avons crée une queue de traitement "zebra-raw" pour notre Zebra LP 2824 Plus.

A la suite de cela, il a été possible d'envoyer des données brutes (RAW) contenant des commandes ZPL directement sur l'imprimante à l'aide de l'utilitaire lp:

lp -d zebra-raw demo.zpl


Et voila, maintenant, cela fonctionne parfaitement!

Il nous reste plus qu'a attaquer la file d'impression/printer queue en Python et mon bonheur sera complet...