PROJET AUTOBLOG


Idleman

source: Idleman

⇐ retour index

[Billet invité] Un petit pense bête pour le hacking du raspi

jeudi 25 avril 2013 à 16:31

Article rédigé par le lecteur Sébastien DELPORTE

Voici un document de deux images pense bête pour ceux qui veulent faire des montages électroniques avec le RaspberryPi :


Pense bête raspberry PI 01


Pense bête raspberry PI 02

Source :

https://docs.google.com/file/d/0B23BvTk93HRYQU1NYTBENTNvTXM/edit

Bonne lecture

 

Raspberry PI ~ 19 : Optimisation, trucs & Astuces

dimanche 21 avril 2013 à 16:05

Ce post est le dix-neuvième d’une liste de tutoriels sur le raspberry PI, cliquez ici pour accéder au sommaire ! :D

Amis de l’électronique, passez votre chemin, nous ne parlerons cette fois ci que de pure informatique, et pas de haut niveau en plus Tire la langue, cela dit ça peux intéresser plus d’un idlenaute donc je vous conseille de gratter un peu cet article quitte à vous taper une lecture en diagonale de ce véritable « pavé du dimanche ».

Je me suis rendu compte que j’ai oublié de préciser pleins de trucs et astuces “génériques” applicables au raspberry parce que ça me paraissait évident, mais au fil des commentaires et des mails qui m’ont été adressés je me suis dit que ça valait peut être la peine de faire un ptit billet pour éclaircir quelques points Sourire

(et puis ça me laisse un peu de temps pour bidouiller d’autres prototypes).

Les points abordés :

  1. Accéder à la console du RPI sans écran/clavier branché à celui ci
  2. Déporter le bureau virtuel du raspberry PI sur votre ordinateur (toujours sans écran)
  3. Optimiser le serveur http en remplaçant Apache2 par lighttpd
  4. Transformer le raspberry PI en seedbox (serveur multimédia avec client torrent intégré, le tout accessible sur le réseau et stocké sur un disque dur externe si il vous plait)
  5. Quelques manip pour personnaliser un peu la tronche du raspberry PI (nom, message d’arrivée etc…)

Accéder à la console du raspberry PI sans écran

Depuis le début des tuto, vous aurez peut être constaté que j’utilise uniquement le mode console et non le bureau graphique, en effet je n’ai pas d’écran pour le raspberry et j’y accède depuis mon ordinateur portable ce qui me permet de trimballer le RPI et d’y accéder depuis n’importe quel PC sans trainer un écran 19 pouces, un clavier, et une souris derrière moi Rire.

Ceci est possible grâce à la communication SSH, pour faire court et grossier : votre raspberry pi comprend un serveur nommé : SSH, auquel vous pouvez vous connecter depuis un client SSH depuis n’importe quel PC, une fois connecté, vous aurez accès au terminal comme si vous étiez sur le rapsberry PI

image

Pour vous connecter a cette console, il vous suffit de télécharger et d’installer le programme gratuit Putty, puis de rentrer l’ip locale de votre raspberry PI et cliquer sur “Open”

image

Pour obtenir l’ip réseaux du raspberry PI, vous pouvez regarder sur le panel de votre box (les pc qui y sont connecté), ou brancher temporairement un écran au raspberry pi et taper la commande ifconfig, l’ip suis le libellé “inet addr”

image

Notez que cette IP peux changer (bien que votre box essaye généralement de conserver des ip “favorites” par machines), vous pouvez donc la fixer une bonne fois pour toute avec la manip suivante qui permet de passer d’une ip dite “dynamique” à une ip “statique” :

 

Tapez dans la console :

sudo nano /etc/network/interfaces

Et remplacez

iface eth0 inet dhcp

par

iface eth0 inet static
    address 192.168.1.x
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
    gateway 192.168.1.1

Il vous faudra remplacer le libellé de “adress” par votre ip réseaux actuelle ainsi que

netmask : Vous pouvez le trouver dans la valeur “Mask” du ifconfig

broadcast : Vous pouvez le trouver dans la valeur “Bcast” du ifconfig

gateway : C’est l’ip de votre routeur/box, vous pouvez la trouver dans le panel admin de votre box sous le libellé (serveur DHCP le plus souvent)

Enregistrez et redémarrez, votre ip sera fixe et toujours accessible depuis Putty.

Attention !! Notez bien que lorsque vous fixez cette ip, elle ne peux plus s’adapter dynamiquement à un autre réseau, aussi si vous trimballez votre rpi autre part, pensez à remettre l’ip en dynamique.

Déporter le bureau virtuel du raspberry PI sur votre ordinateur (toujours sans écran)

Si vous n’aimez pas trop la ligne de commande ou que vous souhaitez faire une manip sur le bureau virtuel du raspberry pi sans avoir d’écran, vous pouvez installer un serveur dit “VNC” qui permet de déporter l’affichage du raspberry Pi, sur un autre pc, vous avez donc un écran dans un autre ^^ :

image

Il existe de nombreux serveurs VNC disponibles, mais le moins contraignant à installer est tightvncserver.

Pour l’installer, tapez la ligne de commande

sudo apt-get install tightvncserver

Il vous faudra alors lancer le serveur avec la commande

tightvncserver

Et ce à chaque fois que vous voudrez l’utiliser, vous pouvez bien entendu vous débrouiller pour lancer cette commande au démarrage via un service ou un cron ou autre…

Au premier lancement il vas vous demander un mot de passe pour se connecter au bureau distant, si vous n’êtes pas trop dingue, vous mettrez le même que celui de votre compte raspberry PI Sourire

Lorsqu’il demande si vous voulez de la lecture seule, répondez n (non)

Would you like to enter a view-only password (y/n)?

Le serveur est lancé et configuré :

image

 

Notez que le serveur est lancé par défaut sur le port “2” qu’il faudra retenir, ainsi que l’adresse ip de votre raspberry (cf partie connexion à la ligne de commande)

Il vous faut maintenant un client de connexion VNC sur la machine ou vous souhaitez déporter l’affichage du raspberry PI, realVNC est gratuit, simple, performant et dispo pour linux, mac , et windows: http://www.realvnc.com/download/viewer/

installez et lancez realVnc puis entrez l’adresse ip réseau de votre rapsberry PI, suivis de votre port (par défaut 2) les deux séparés par “:”

image

Et cliquez sur “connect”

nb : de mémoire, un warning vas vous avertir que la connexion n’est pas sécurisée, cliquez sur le bouton continue (à moins que ça vous froisse que ca ne soit pas sécurisé évidemment Tire la langue, chez vous ça ne change pas grand chose, mais évitez de vous connecter depuis un lieu public ou du boulot)

le client vous demande alors le mot de passe que vous avez donné au serveur VNC lors de son installation :

image

Vous arrivez ensuite sur votre bureau distant et pouvez interagir avec comme vous le souhaitez Sourire

 

Optimiser le serveur http en remplaçant apache par lighthttpd

On a vu dans le tuto ~ 04 : Configurer en serveur comment mettre en place un serveur dit “http” pouvant héberger des sites web sur le rapsberry PI.

Nous avions choisis le serveur Apache qui et le plus populaire, mais aussi le plus vieux et le plus lourd de ce qui se fait en ce moment.

Apache fait beaucoup d’entrées fichiers ce qui peut à long terme abimer la carte SD de votre raspberry PI, il est donc plus intéressant de se tourner vers des serveurs plus léger comme Nginx ou lighttpd

Les deux sont très rapides, légers et peu gourmands en ressources, et n’en déplaisent aux fanatiques de l’un ou de l’autre : ils sont relativement équivalent.

Parce qu’il faut faire un choix, et parce qu’il s’est avéré moins chiant à installer, j’ai choisis lighttpd * les pro-nginx vous pouvez huer *.

lighttpd à surtout un gros avantage pour moi : il est beaucoup plus simple de le relier à PHP que nginx (c’est du vécu, j’ai fait 4/5 tutos sur nginx, aucun n’était d’accord avec l’autre, et certains parlaient même d’installer lighttpd en premier puis de le désinstaller afin d’avoir les prérequis pour nginx… bref)

Donc si vous avez apache, commencez par le désinstaller correctement sinon il fera interférence avec lighttpd par la suite. Attention cependant apache peut être très chiant a désinstaller, le mieux reste encore de repartir d’un raspian vierge si vous le pouvez, sinon je vous laisse vous amuser comme je l’ai fait à tester tout plein de manip pour vous débarasser de l’outrecuidant correctement.

Installez ensuite lighttpd

sudo apt-get install lighttpd

Puis les pré-requis pour avoir php5 er le relier a lighhtpd

sudo apt-get install php5-common php5-cgi php5
sudo lighty-enable-mod fastcgi-php

Redémarrez le serveur http

sudo service lighttpd force-reload

A ce moment la si vous avez des erreurs types “port 80 busy” un truc du style, c’est que vous avez mal désinstallé apache et qu’il tourne encore, ou qu’un autre serveur http est déjà en place.

Et enfin réattribuez les bons droits sur les bons dossiers pour que lighttpd puisse faire son boulot

sudo chown www-data:www-data /var/www
sudo usermod -a -G www-data pi

Si tout s’est bien passé vous devriez pouvoir vous connecter via un navigateur à l’ip de votre rapsberry PI et voir la page d’accueil par défaut de lighttpd

image

 

Pour ce qui est de la base de données, je vous conseille également de désinstaller MySQL (si vous n’avez installé aucune appli qui tourne avec évidemment) et de le remplacer par SQLite qui est un peu moins gourmand et épargnera votre raspberry PI également :

sudo apt-get install sqlite3
sudo apt-get install libsqlite3-0 libsqlite3-dev
sudo apt-get install php5-sqlite

Utiliser le raspberry PI comme une seedbox

Une seedbox est un serveur dédié au téléchargement illégal de fichiers vidéos/audio/multimédia etc…

Il est très simple de transformer le raspberry pi en seedbox afin de pouvoir faire les choses suivantes :

Prêt à manger du beurre par les trous de nez? Envoyons le Pathé !

Premièrement on update parce que ça ne fait jamais de mal avant une installation :

sudo apt-get update

puis on installe un paquet qui nous sera indispensable par la suite :

sudo apt-get install ntfs-3g

Puis, on trouve un disque dur assez balèze (genre 2To) et on le branche au port USB du raspberry PI. La rapidité de transmission est un plus, mais ce qu’il vous faut c’est surtout :

on vas créer une sorte de “lecteur permanent” dans le dossier “media” sur lequel on pointera notre client de torrents.

sudo mkdir -p /media/disque2To

On configure les droits pour que le client torrent puisse écrire dans ce lecteur

sudo chmod -R 777 /media/disque2To

Attendez quelques secondes le temps que le rpi détecte le disque dur puis tapez

sudo blkid

Une liste de périphériques s’affichent, retenez le champs UUID pour le périphérique ayant le LABEL qui correspond à votre disque dur (mon disque dur 2To s’appelle IdleBox)

image

Maintenant qu’on connais l’identifiant unique de notre disque dur, on vas spécifier au rpi de lier à chaques démarrage cette id au dossier qu’on à créé spécialement pour lui (/media/disque2To).

On édite pour ça le fichier /etc/fstab

sudo nano /etc/fstab

et on y ajoute la ligne

UUID=F21843B31843759F       /media/disque2To ntfs-3g   defaults       0       2

Evidemment l’UUID doit être modifié en fonction de votre UUID à vous.

image

Puis on sauvegarde et on reboot

sudo reboot

A ce stade la normalement le contenu de votre disque dur est monté et est disponible via le dossier /media/disque2To, vous pouvez vérifier qu’il contient bien votre fichier test.txt avec la commande.

cd /media/disque2To && ls

image

(oui moi j’ai un peu plus de bordel qu’un simple fichier test.txt mais le principe reste la Tire la langue)

Cette phase est très délicate, le système ou le disque dur font souvent la sourde oreille, vérifiez donc bien que vous avez vos fichiers dans /media/disque2To sans quoi la suite du tuto ne fonctionnera pas.

En cas d’erreur vérifiez bien :

Si l’erreur persiste, essayez de trouver l’erreur au démarrage du rapsberry PI, généralement il vous indique d’ou viens la couille avec un gros “FAILED” rouge.

Bien !! Le plus dur est fait !! Rire

Maintenant on vas faire en sorte que le disque dur (accessible depuis le dossier /media/disque2To si vous avez bien suivis) soit également disponible en partage, c’est à dire que les autres PC de votre réseau local puissent y accéder !

Pour cela, il vous faudra installer un serveur de partage sur votre rapsberry PI, le plus connus (et le seul que je connais d’ailleurs) est samba !

On installe donc samba (et avec le sourire siouplé !)

sudo apt-get install samba

Il est possible qu’il soit déjà installé, chez moi il l’était mais c’est peut être parce que j’avais fait la manip précédemment, dans tous les cas la commande ne vous fera pas de mal Sourire.

maintenant que samba est installé il vas falloir partager le dossier /media/disque2To sur le réseau.

Pour ça, on commence par editer le fichier de configuration de samba :

sudo nano /etc/samba/smb.conf

Cherchez la ligne

# security = user

et placez en dessous :

security = share

image

De cette manière vous ouvrez un peu votre serveur de partage aux utilisateurs autres que les utilisateurs interne du rpi

Puis cherchez le bloc [print$] …

Et placez en dessous le bloc :

[disque2To]
comment = Disque multimedia
path = /media/disque2To
browseable = yes
guest ok = yes
writeable = yes
public = yes
create mask = 0777
directory mask = 0777

image

Enfin redémarrez samba

sudo service samba restart

Et remettez un ptit coup de permission sur votre dossier partagé pour être sûr.

chmod 777 –R /media/disque2To

Vous devriez maintenant voir le partage depuis vos autres PC, par exemple depuis mon windows Seven :

image

Vérifiez bien que vous avez la permission d’entrer et d’écrire dans le disque.

nb : Il est possible que ce sale bataw de windows vous demande un login/mot de passe alors que nous avons tout fait pour justement ne rien avoir à mettre.

il vous faudra alors taper:

login : WORKGROUP\votre login windows

mdp : votre mot de passe windows

Cochez la case ‘se souvenir’ histoire de ne plus être emmerdé par la suite.

Bien !! Maintenant que nous avons un disque dur monté et partagé sur le réseau !! Il vas falloir le remplir avec vos films de vacances légalement téléchargés via un logiciel de torrent !

Le must pour moi en matière de logiciel de torrent c’est transmission : léger, simple, ergonomique, dispose d’une jolie interface web et facilement configurable

sudo apt-get install transmission-daemon

Transmission vas utiliser deux dossier sur votre disque dur, un dossier pour stocker les fichiers temporaires de téléchargements, et un dossier pour stocker les fichiers finaux, on vas donc créer ces deux dossiers

sudo mkdir /media/disque2To/downloaded /media/disque2To/pending

downloaded : dossier qui contiendra vos films de vacances terminés
pending : dossier qui contiendra vos films de vacances en cours de téléchargement

On place ensuite l’utilisateur “pi” dans le groupe de transmission

sudo usermod -a -G debian-transmission pi

Et on place les deux dossiers précédemment créé dans ce groupe aussi (c’est la fête du slip pour gérer les permissions)

chgrp debian-transmission /media/disque2To/downloaded /media/disque2To/pending

Enfin (et c’est la dernière manip concernant les permissions) on donne un droit 770 sur les deux dossiers

chmod -R 770 /media/disque2To/downloaded /media/disque2To/pending

On édite le fichier de configuration de transmission pour lui filer nos deux dossiers et régler quelques autres configs rigolotes :

sudo nano /etc/transmission-daemon/settings.json

Trouvez les lignes qui correspondent à ça :

« download-dir »: » /un/chemin/pourri » ,
« incomplete-dir »: » /un/autre/chemin/pourri » ,
« incomplete-dir-enabled »: false,
« rpc-password »: « un mot de passe crypté super long type {EBIBEIUBSIBSIBSIUB… »,
« rpc-username »: »transmission »,
« rpc-whitelist « : « 127.0.0.1″,

et remplissez les avec les bonnes valeurs

« download-dir »: » /media/disque2To/downloaded » ,
« incomplete-dir »: » /media/disque2To/pending » ,
« incomplete-dir-enabled »: true,
« rpc-password »: « mon mot de passe »,
« rpc-username »: »mon pseudo »,
« rpc-whitelist « : « 127.0.0.1,*.*.*.* »,

Evidemment les lignes ne sont pas toutes collées les unes sous les autres, il vous faudra les chercher Sourire (je vous avais pas dit que je vous vendrais du bonheur ?)

nb : Notez que j’ai placé la clause *.*.*.* dans rpc-whitelist, celle ci indique que toutes les adresses ip ont le droit de se connecter à votre seedbox (si elles connaissent le user/mot de passe bien entendu), ceci vous permet de vous connecter de partout dans le monde à votre seedbox (il faudra penser à débloquer le port 9091 de votre routeur/box si vous souhaitez y acceder de l’extérieur quand même mais bon…) si vous voulez que transmission n’accepte que les ip réseau locale, vous pouvez mettre 192.168.*.* à la place.

Enregistrez le bouzin et relancez le service

sudo service transmission-daemon reload

Votre Seedbox est fin prête !!

Pour télécharger de nouveaux films de vacances via des fichiers torrents vous n’avez plus qu’a vous connecter via un navigateur à votre seedbox à l’adresse :

http://ip.du.raspberry.pi:9091

ip.du.raspberry.pi : L’ip réseau de votre raspberry PI (ou son ip WEb si vous y accédez depuis un autre endroit que votre réseau locale)

9091: port par défaut de transmission (vous pouvez le modifier dans le setting.json, moi j’ai mis 666 pour le fun Tire la langue)

A la connexion transmission vous demandera les login et mot de passe entré dans le settings.json:

image

Et paf vous atterrissez sur votre client torrent :

Vos fichiers une fois téléchargés apparaitront dans le dossier downloaded de votre disque dur, lui même disponible en partagé depuis tout votre réseau locale.

test

Merci à Tom Canac qui à généreusement partagé ses pistes avec moi afin que nous arrivions à quelque chose de concret sur ce point Sourire

 

[Bonus] Personnaliser un peu le raspberry PI

 

Changer le nom du raspberry PI

Par défaut le rpi s’appelle raspberrypi ce qui est laid nous en conviendront on à donc cette ligne qui précède toutes nos commande:

pi@raspberrypi: ~#

Pour changer ce nom il faut éditer les fichiers /etc/hostname et /etc/hosts, dans ces deux fichiers, remplacez le nom raspberrypi par le nom que vous souhaitez, puis sauvegardez, fermez et redémarrez le raspberry PI, j’ai appelé le mien pib0x ‘(je sais… mais j’avais pas d’idées, ne me jugez pas T_T)

image

Mettre un message d’accueil

Lors de l’ouverture d’une console sur votre rpi, vous avez un message par défaut de toute beauté qui s’affiche :

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

Type ‘startx’ to launch a graphical session

On vas changer ça par quelque chose d’un peu plus yorkmouth !!

Pour cela il faut éditer le fichier /etc/motd et remplacer le message par ce que vous souhaitez puis sauvegarder et rebooter (encore et toujours)!! Personnellement je vous conseille un message en ascii ça claque toujours

image

Pas besoin de vous prendre la tête des jours à faire l’ascii vous même, des services existent pour ça, suivez le guide

Je repasserais certainement sur ce tuto pour ajouter de petites astuces de temps en temps, aussi pensez à venir lorgner quand vous avez une minute Sourire

Bien à vous mes bichons baltais!

Idle

 

Le bordel de l’info #26

vendredi 12 avril 2013 à 20:32

Salut bande de pneus low cost non équilibrés ! Vous en avez d’la chance !!  l’heure ou je suis juste complément bourré et ou je tape frénétiquement n’importe quoi sur ce blog, vous êtes peinards, dans votre lapin nain ou sous un sumo allemand à vous payer un 52em demi de bordel de l’info (ben oui… 26*2…laissez tomber T_T)

  1. Une nouvelle console qui accepte les anciennes cartouches NES, SNES, Genesis, Famicon et game boy advance…Rire
  2. LoremPixel permet l’inclusion facile d’images d’exemples à la taille que vous souhaitez, en couleur ou en noir et blanc, et respectant un certain style, avec le simple code <img src= »http://lorempixel.com/400/200″ />, partiques pour les maquettes Sourire (via le warrior)
  3. Un court métrage sympa qui donne envie de balancer son androphone par la fenêtre, notez que la série black mirror (3 épisodes seulement, casting, époque et histoire toujours différente mais thème orienté bienfait/méfaits de la technologie sur l’homme) sur le même thème est à voir d’urgence si vous aimez ce genre d’anticipations technologiques dramatique.
  4. Mais à quand le PQ Watch histoire qu’on en finisse une fois pour toute avec les derniers moment d’intimité qu’on partageait avec la réalité Rire !! J’ai parfois l’impression que la technologie n’évolue pas dans le bon sens…
  5. Ubuntu for mobile, Jolla, Tizen, Firefox Os, BlackBerry 10, les Os pour mobiles se multiplient en 2014, faites votre choix, j’ai déjà fait le mien Tire la langue
  6. “Le Google qui me passionnait était une société high tech qui poussait ses employés à innover. Le Google que j’ai quitté était une société publicitaire concentrée uniquement sur l’aspect financier.”  – James Whittaker (Développeur Google)
  7. Tiens en parlant de google, un petit article sur ses raisons économiques de vouloir tuer le RSS, continuez comme ça les gars, ça me permet d’écouler plus facilement mon petit agrégateur RSS gratuit Leed Tire la langue
  8. Seb souhaite envoyer ses fonds de placard sur github, j’ai envie de dire +1 : et si on partageait tous un grand placard pour ce genre de projets ? Tire la langue
  9. Les utilisateurs anglais de Greader se tournent vers “la meilleur alternative” à celui ci : Feedly… donc la meilleur alternative à un service qui les a foutus dans la merde est … un autre service T_T, pire ! Ce service demande pour se connecter (au moment ou je vous écrit c’est toujours vrai ) : un compte google !! Je ne sais plus si je dois rire ou pleurer devant la bêtise et le manque de jugeote des Mouternautes (mix moutons/internautes, j’improvise), c’est à vous faire perdre définitivement l’espoir d’un futur web totalement libre.
  10. Pirater un distributeur de canettes avec un mètre ruban, fallait y penser mais franchement ça n’a pas l’air simple ^^, perso je préfère construire mon robot pour faire le boulot Sourire
  11. J’ignorais qu’il était si simple de modifier un mot de passe d’un utilisateur sans le connaitre sous Windows… et après les pros Windows viennent me bassiner avec le linux qui serait trop permissif, jvous jure Tire la langue (bon je suis assez neutre avec les Os (sauf un avis bien tranché sur macOs), mais on trouve toujours des gens qui veulent quand même lancer le débat).
  12. Hé hé hé, super sympa le site sur les papertoys, c’est fou le nombre de couilloneries qu’on peut faire avec une simple feuille A4 et une imprimante correcte (via korben)
  13. Un aquarium vivant en ASCII (via seb)
  14. Si quelqu’un sait ou je peux trouver un autocollant comme ça je suis preneur Rire (via seb, again)
  15. Plus ils sont fluides, plus ils me font flipper…heureusement qu’il a un nom ridicule ce robot :D
  16. Il y a vraiment de belles choses à faire avec un arduino, un peu de carton et beaucoup de patience.
  17. Un petit utilitaire de plus pour cracker le mot de passe d’un .rar en bruteforce ou par dictionnaire
  18. Vous avez loupé les gags d’avril de la blogosphères ? Pas de soucis, le warrior du dimanche vous à fait un ptit récap !! J’ai loupé le premier avril cette année, je me rattraperais l’an prochain promis Sourire
  19. Le hollandais volant ouvre un blog dédié à ses articles scientifiques, ça promet :)
  20. Un petit éditeur de texte WYSIWYG adapté pour l’excellent librairie CSS/JS Boostrap, à tester rapidement :)
  21. Medoo : un framework PHP d’un seul fichier permettant de gérer des bases MySQL, MSSQL, PostgreSQL, SQLite et plus en toute simplicité :)
  22. Ça fait quelques mois que seb nous en rebat les oreilles, le warrior s’y est mis aussi j’ai donc pris le temps de parcourir le tumblr : les joies du code… et c’est simplement: une tuerie, bien qu’il faille être dév à mon sens pour apprécier ces gifs comme il se doit

Tiens d’ailleurs en parlant de Seb !! Bon anniversaire vieux machin !! (ok j’ai 3 jours de retard mais pour moi c’est une performance), tous mes veux de bonheur et de longévité à ce dinosaure du web qui à inspiré, dépatouillé voir sauvé les âmes de milliers d’internautes et de blogueurs à travers le web (moi compris évidemment) Sourire et sans lequel ce blog ne serait resté qu’un bloc note personnel :)

seb

Petite initiation aux moteurs de templates : Quoi, Pourquoi et Comment

mercredi 3 avril 2013 à 18:44

Voila plusieurs années que je me promets de toucher un mot au sujet des moteurs de Template et de leurs applications, je profite de votre air éveillé et taquin de ce début de soirée pour placer le sujet (ce sera chose faite).

Une grossière présentation

Pour faire simple, un moteur de Template est une technique de programmation populaire qui permet de séparer distinctement l’interface graphique du reste de votre application.

Notez que par interface graphique j’entends toute la partie visuelle, la GUI, l’Interface, l’IHM, le skin, le visage, la moumoute, appelez ça comme vous voulez, ça n’en restera pas moins la partie qui constitue la communication visuelle avec l’utilisateur on ne parle donc pas uniquement du design mais aussi de la structure, de l’ergonomie, des animations etc…

Typiquement, un Template de projet web contiendra tous les fichiers html (structure),css et images (style/design) et JavaScript (animations).

Ainsi dans un projet web par exemple, le moteur de Template vous permettra d’avoir un fichier purement html/css/javascript d’un coté, et un fichier purement php/asp/java/… de l’autre vous dissociez donc d’un coté la vue (l’aspect visuel html/css etc..) des contrôleurs (le traitement pur des données via php/asp/java/ etc..)

Pourquoi?

Pourquoi utiliser cette technique me direz vous ? Ça peut de prime abord paraitre contraignant, inutile de dupliquer des fichiers pour rien.

Vous l’aurez compris de très nombreux avantages s’offre à vous avec ce modèle de développement.

Mais, ça fonctionne comment au juste ?

Eh bien typiquement ça dépend un peu du moteur de Template utilisé, mais généralement ça reste très simple :

Au lieu de créer une page index.php contenant tout votre code, vous allez placer votre code php dans une page index.php et votre html dans une page index.html
Puis à la fin du php vous signalerez que vous souhaitez lier cette page de traitement à la vue index.html :) .

Attends, attends !! Mais il va forcement y avoir un problème là : comment je vais faire pour afficher mes variables dans l’index.html?

Encore une fois, cela dépendra du moteur de Template utilisé, mais en gros, les variables seront toutes disponibles dans l’index.html via des balises « spéciales ».

Oulah, ça m’a l’air compliqué ton truc !!

Meuhnaaann ! Tu vas voir ça gère la cacahuète, le meilleur reste encore de mettre la main à la pâte pour comprendre les enjeux et les gains du Template, alors allons y gaiement bande de moules ! :D

Alors quel moteur de template choisir ?

En réalité je ne vais pas être très objectif là-dessus ^^, bien que le plus populaire (du fait de son grand âge surtout) soit le moteur de template Smarty, nous utiliseront ici le moteur RainTPL.

image

Vas falloir t’expliquer Idle, tu t’en sortiras pas comme ça :D !!

Bon okay okay, vous l’aurez voulu, zallez vous taper une autre liste pour la peine :

Je ne pense pas me tromper en affirmant qu’il va vite devenir la référence du Template, pour moi c’est déjà le cas, et je ne suis pas le seul à le clamer haut et fort.

(voila pour la p’tite explication :p)

Notez que parmi les développeurs, il y à quelques aigris qui critiquent vivement les systèmes de templates, si on ôte à ceux-ci ceux qui cachent leur ignorance derrière le dédain, on
peux retrouver quelques raisons fallacieuses type :

‘Moi je n’utilise pas de Template parce que c’est moins rapide que du php pur et dur’.

… (j’ai sortis mes petits point désapprobateurs, je vais me fâcher tout rouge !!)

C’est complètement faux, en effet RainTPL à l’instar de 99% des moteurs de Template utilise un système de cache en générant les php finaux sous formes de fichiers php générés, donc au final c’est du php simple, sauf que c’est totalement invisible pour nous (et tant mieux)

Bon arrêtons la papote et mettons les mains dans l’cambouis !

Téléchargeons rainTpl sur le site officiel : http://www.raintpl.com/Download/

On va créer un ptit projet de test avec une page index.php pour le traitement, et une page index.html pour la vue.

Dans l’archive de rainTPL, seul le fichier inc/rain.tpl.class.php nous intéresse, c’est la librairie en elle même, le reste sont des fioritures (on jette Tire la langue), dans mon exemple je met donc ce fichier que j’ai renommé rainTpl.php au même niveau que l’index.php et l’index.html

Voila le code de chacune:

index.php

image

index.html

image

(oui j’ai mis un peu de style, le time new roman me file des crises d’épilepsie)

Si pour une raison vraiment étrange votre copier coller ne fonctionne pas sur les screenshots (:D), vous pouvez trouver les sources directe ICI (bande de fainéants).

Toujours est il que vous obtenez un, ô combien magnifique, premier Template fonctionnel :

image

A retenir

Vous noterez donc deux fonctions (méthodes) importantes pour la partie traitement(index.php) :

assign(nom variable, valeur variable) : permet de déclarer une variable qui sera utilisable dans la vue, on peut lui fournir n’importe quoi : un objet, un tableau, un entier, une chaine, un furet, il en fera de l’or…

draw(nom de la vue) : permet de définir la vue qui sera attachée au traitement, de cette manière on peut par exemple attacher une vue erreur en cas d’erreur ou la vue index quand tout se passe bien (ok ok je vous embrouille, dites vous juste que ça permet de donner le html à afficher).

Coté vue (index.html) les balises “spéciales” dont je vous parlais et qui sont à connaitre sont au nombre de 4 :

{$variable} : affiche une variable (comme si vous aviez fait un ‘echo $variable’)

{if= »condition »}{/if} : affiche selon une condition (équivalent de if(condition){consequence} en php)

{loop= »array »}{/loop} : permet de parcourir un tableau (équivalent de foreach($array){ } en php)

{include= »template »} : permet d’inclure une vue dans une autre (pratique pour inclure les header et footer que l’on retrouve partout dans l’application).

Vous ave évidemment  d’autres balises à dispo avec un ptit exemple pour chacune dans la doc.

Quelques conseils pour avoir une structure correcte

RainTPL est assez permissif par rapport à la structure de votre projet, il suffit de lui indiquer des chemins, ce qui bon et mauvais à la fois car si il autorise une plus grande souplesse et n’interfère pas avec l’architecture projet, il n’incite pas non plus à instaurer une bonne structure.

Dans ce domaine, je pense que personne n’a le droit d’imposer une structure en argüant comme je l’ai maintes fois entendu que “c’est ce qu’il faut faire », mais puisque qu’ici c’est moi le patron (Tire la langue) je vais au moins me permettre de vous proposer une structure de projet avec rainTPL, que j’utilise pour Leed, DropCenter et bien d’autres projets pro/perso :

image

J’ai profité de la structure pour vous mettre deux templates que vous pouvez switcher en modifiant la constante DEFAULT_THEME dans le fichier configuration.php quelques exemple de lecture de variables, de tableau d’objets, d’utilisation de condition etc.. avec RainTPL
Vous pouvez télécharger cette structure et les exemples RainTPL qu’elle contient ICI.

On a bien deux Templates (légèrement fait à l’arrache) pour les mêmes traitements / control de données, il est donc possible d’en switcher sans toucher à quoique ce soit d’autre que la constante DEFAULT_THEME.

imageimage

Et sinon, dois je utiliser les templates tout le temps et pour n’importe quel projet ?

Bien sûr que non, il est évident qu’un petit script de deux pages contenant chacune trois lignes n’a pas réellement besoin d’un gestionnaire de Template,
cela dit pour les moyen et gros projets je vous encourage vivement a partir d’instinct sur un moteur Template.

Si vous n’en voyez pas l’utilité sur le moment,vous la verrez certainement par la suite, votre projet sera toujours plus simple à maintenir, évoluer, fusionner, embellir par la suite.

De plus cela vous obligera à tendre vers l’architecture MVC donc la redoutable efficacité n’est plus à prouver (bien qu’il y ai aussi des contestataires à ce sujet, mais bon on trouve de tous les avis sur le web il faut faire avec) et rainTPL est si discret que ça n’en alourdira pas votre projet pour autant.

Je sais que le sujet est entendu pour la plupart des développeurs de ce blog, mais si je suis parvenu à convertir un nouveau lecteur au “templarisme” et surtout à l’excellent RainTPL, je m’en satisferais !

Templatement votre,

Idle

Installez votre synchronisateur de contacts chez vous avec Baikal

samedi 23 mars 2013 à 16:28

Lorsque l’on devient un véritable technophile bassement matérialiste, on se met à accumuler tout un tas d’engins électroniques : Téléphone portable, Tablette, Pc, Mac, montres, lunettes ou strings panthères connectés etc…

Qu’on toutes ces machines en communs ? Les contacts!

Qu’il s’agisse des adresse email sur votre messagerie de pc portable/fixe/mac/ultra portable… ou encore des numéro de téléphones sur votre androïde phone/iphone/windows phone, tablettes etc… ils y en à partout c’est un besoin fondamental pour les appli de partage d’information avec un tiers (toutes les appli quoi ^^).

Ca devient alors très vite contraignant d’organiser tout ce beau monde, de synchroniser et de mettre à jour tous les appareils sans doublons, crises de nerfs, pertes d’infos, de temps et de cheveux.

C’est pourquoi il peut être intéressant d’utiliser un synchronisateur de contacts tels qu’en propose google, apple, windows, à ceci près que nous allons l’installer sur notre propre serveur/hébergeur gratuitement, ceci nous permettra :

Oui MAIS !! Aujourd’hui les solutions de synchronisation de contacts type cardDav (format standard de carte de contact)/calDav (format standard de calendrier) gratuites, propres, stables et installables sur votre serveur/hébergement ça ne coure pas les rues.

Evidemment il y a des solutions type owncloud mais encore peu matures donc relativement boguées/peu stables, auxquelles je ne fais pas tout à fait confiance de mon côté.

En revanche un utilisateur m’a récemment fait découvrir Baikal qui, bien qu’il ne soit pas très vieux et utilise la même librairie qu’owncloud (sabreDAV, une excellente librairie pour gérer les standard calDav, webDav, calDav au passage), il se contente de faire le minimum (pas de gestion de fichiers) et il le fait donc très bien Sourire.

Baikal permet de gérer simplement la synchronisation, la centralisation et le stockage de vos contacts (ainsi que de votre calendrier si vous le souhaitez) et ce à l’aide d’un format standard et très accessible quel que soit votre appareil/système d’exploitation.

image

Le script reste relativement simple, il peux gérer plusieurs utilisateurs ayant chacun plusieurs carnet d’adresses / calendrier et propose une petite dashboard de statistiques.

image

Ce script sous licence GPL a l’avantage d’avoir été créé avec la librairie js/css boostrap qui rend l’application très jolies et responsive (adaptable tout écran tablettes, smartphone, pc etc…).

Il est installable avec une base de donnée SQL lite (simple fichier) ou avec une base MySQL au choix.

Il est à noter tout de même deux gros points faibles pour l’application :

  1. A actuelle, impossible de gérer vos contact directement depuis l’interface web, il faudra passer par un client (votre carnet d’adresse de portable, votre cardnet de messagerie pc ou autre) pour ajouter/supprimer/modifier les contacts, sans être bloquant c’est un peu déstabilisant de ne pas avoir de visuel direct des contacts sur l’interface web.
    La liaison du script à d’autres machine n’est pas forcement très claire (nous allons  tenter d’y remédier partiellement dans ce tuto Tire la langue).

Voyons un peu comment installer tout ça Sourire.

Installation

image

image

L’installation de Baïkal est maintenant terminée, notez qu’on vous demandera peut être à un moment de donner des permissions sur certaines dossiers de l’application, il vous faudra donc utiliser la commande “chmod –R 777 /chemin/vers/le/dossier/baikal” si vous êtes sur un serveur, ou passer par un programme de gestion de droits ftp comme fileZilla si vous êtes sur un hébergement simple sans accès à la ligne de commande.

image

Création d’un utilisateur

Afin de créer des carnets d’adresse, il vas falloir en premier lieu créer un utilisateur lié à ce carnet (car baikal est multi utilisateurs), on clique donc sur “start using baikal”, on s’identifie avec le mot de passe Admin qu’on à rentré à l’utilisation et on arrive sur l’interface

image

Un clic sur l’onglet “users and ressources” nous amène sur la page de gestions des utilisateurs et des carnets/calendriers, on clic sur le bouton  image Pour ajouter un nouvel utilisateur :

image

retenez bien le “username” et le “password” que vous tapez, ce sont les identifiants qui vous servirons par la suite à connecter vos machines aux carnets d’adresses et calendriers créés.

nb : Gardez le username le plus simple possible, évitez les majuscules, accents, caractères spéciaux etc…

Création d’un carnet d’adresses/calendrier pour l’utilisateur

Une fois l’utilisateur créé, une barre image apparait, cliquez sur l’un ou sur l’autre pour créer un calendrier ou un carnet d’adresses pour l’utilisateur.

Par défaut vous avez déjà un carnet d’adresse et un calendrier créées pour cet utilisateurs, ils ont tout deux pour identifiants le nom “default” dont nous nous servirons plus tard, si vous créez de nouveaux carnets/calendriers, retenez bien l’identifiants que vous leurs attribuez.

Utilisation avec la messagerie thunderbird

Je ne peux pas vous donner l’installation pour toutes les messageries existantes, mais je vous donne un exemple avec (selon moi) la meilleur d’entre toute : thunderbird Sourire, si vous n’avez pas cette messagerie installez la, il vous la faut, le processus est sensiblement identique aussi je vous conseille de suivre cette partie.

Synchroniser les contacts

Thunderbird ne gère pas les formats cardDav par défaut, il vas donc falloir télécharger et installer l’extension gratuit “SOGo Connector” sur votre Thunderbird, le redémarrer puis cliquer sur l’onglet “outils—>carnet d’adresses” et dans la fenêtre qui s’ouvre “Fichier—>nouveau—>carnet d’adresse distant”

image

Puis taper l’adresse de votre carnet d’adresse, dans mon cas j’ai gardé celui par défaut :

image

C’est cette adresse qui est très mal spécifié dans la doc et dans le panel de baikal, aussi faites très attentions à l’adresse et aux spécifications suivantes :

http://127.0.0.1/baikal-flat/card.php/addressbooks/idleman/default/

http://127.0.0.1/baikal-flat/  Adresse vers votre panel web baikal

card.php/addressbooks/: chemin obligatoire vers les carnets d’adresses (ne pas changer)

idleman/: Nom de l’utilisateur créé précédemment (le fameux username)

default/: Identifiant du carnet d’adresse ciblé (ou à gardé celui par défaut dont l’identifiant était default).

nb: le “/” en fin d’adresse est obligatoire.

A la prochaine synchro, thunderbird vous demandera de spécifier le username et le password de l’utilisateur que vous avez créé afin de le conserver en mémoire

Tout les contacts que vous mettrez dans ce carnet d’adresse thunderbird seront alors automatiquement synchronisés avec le carnet baikal et réciproquement.

Pour être sûr que ça fonctionne, créez un contact dans le carnet thunderbird, puis retournez voir sur le panel web baikal si vous avez un ou plusieurs contacts, c’est que ça à fonctionné :

image

Notez bien que la synchro peux mettre un peu de temps, vous pouvez faire clic droit sur le carnet d’adresse et “synchroniser” pour forcer la synchro.

Synchroniser le calendrier

Encore une fois, Thunderbird ne possède pas de calendrier natifs, il faut donc ajouter le plugin “lightning” qui vas ajouter un calendrier à votre messagerie, redémarrez votre thunderbird, cliquez sur l’onglet agenda puis dans les agendas de gauche clic droit—>Nouvel agenda—>Sur le Réseau

image

Sélectionnez “CalDav” et rentrez l’adresse de votre calendrier baikal

image

Cette adresse aussi est très mal spécifié dans la doc et dans le panel de baikal, aussi faites très attentions à l’adresse et aux spécifications suivantes :

http://127.0.0.1/baikal-flat/cal.php/calendars/idleman/default/

http://127.0.0.1/baikal-flat/ Adresse vers votre panel web baikal

cal.php/calendars/: chemin obligatoire vers les calendriers (ne pas changer)

idleman/: Nom de l’utilisateur créé précédemment (le fameux username)

default/: Identifiant du calendrier ciblé (ou à gardé celui par défaut dont l’identifiant était default).

nb: le “/” en fin d’adresse est obligatoire.

Vous pouvez cocher “prise en charge du mode hors connexion” historie d’avoir accès a vos évènements même lorsque la connexion internet est coupée.

A la prochaine synchro, thunderbird vous demandera de spécifier le username et le password de l’utilisateur que vous avez créé afin de le conserver en mémoire

Utilisation sur un téléphone android

Sur un téléphone android le mieux est encore d’installer l’application “CardDAV-Sync free beta” qui en dépit de son nom inquiétant fonctionne plutôt bien Sourire

Rentrez la même adresse que pour les contacts de thunderbird  http://127.0.0.1/baikal-flat/card.php/addressbooks/idleman/default/ (avec les changements qui s’imposent)

http://127.0.0.1/baikal-flat/ Adresse vers votre panel web baikal

card.php/addressbooks/: chemin obligatoire vers les carnets d’adresses (ne pas changer)

idleman/: Nom de l’utilisateur créé précédemment (le fameux username)

default/: Identifiant du carnet d’adresse ciblé (ou à gardé celui par défaut dont l’identifiant était default).

Pensez à décocher la case “Use SSL” (à moins que votre baikal ne soit installé avec un https) et à spécifier le username et le password de l’utilisateur que vous avez créé

Utilisation sur un apple, iphone…

Toutes les infos disponibles ici : https://github.com/jeromeschneider/Baikal/blob/master/INSTALL.md#5—connecting-your-caldav–carddav-client-to-bakal

nb : sur Mac OS X 10.8 et Calendar (ex-iCal) l’adresse pour le CalDAV  il semble qu’il faille dans certains cas utiliser « principals » au lieu de « calendars ».
Soit en adresse serveur : toto.com
Server path : /baikal/cal.php/principals/toto

Utilisation avec la messagerie web RoundCube

Pour synchroniser vos contacts avec roundcube vous devrez installer le plugin Roundcube-CardDAV qui fonctionne très bien :)

  1. Téléchargez le plugin et décompressez le dans le répertoire « plugins » de votre roundcube, renommez le dossier carddav pour plus de simplicité
  2. Renommez le fichier plugins/carddav/config.inc.php.dist en plugins/carddav/config.inc.php
  3. Dans la même base MySQL que roundcube, exécutez le sql contenu dans le fichier plugins/carddav/SQL/mysql.sql
  4. Activez le plugin en ajoutant ‘carddav’ dans le tableau « $rcmail_config['plugins'] » du fichier /config/main.inc.php (L379 par la)

Le plugin est maintenant correctement installé, loguez vous sur roundcube puis allez dans l’onglet « Préférences » puis le menu de gauche « Carddav » et renseignez les infos du formulaire:CaptureLabel : Nom du carnet d’adresse affiché sur rouncube (mettez ce que vous voulez)

Serveur : Adresse du carnet baikal

Cette adresse aussi est très mal spécifié dans la doc et dans le panel de baikal, aussi faites très attentions à l’adresse et aux spécifications suivantes :

http://127.0.0.1/baikal-flat/card.php/addressbooks/idleman/default/

http://127.0.0.1/baikal-flat/ Adresse vers votre panel web baikal

card.php/addressbooks/: chemin obligatoire vers les calendriers (ne pas changer)

idleman/: Nom de l’utilisateur créé précédemment (le fameux username)

default/: Identifiant du calendrier ciblé (ou à gardé celui par défaut dont l’identifiant était default).

nb: le “/” en fin d’adresse est obligatoire.

Utilisateur : login de l’utilisateur lié à ce carnet sous baikal

Mot de passe : mot de passe de l’utilisateur lié à ce carnet sous baikal

Cliquez sur enregistrer, attendez quelques secondes puis allez dans vos carnet d’adresse : it works !!

Capture

Notez que si vous souhaitez que ça synchronise régulierement, il vous faudra mettre en place un CRON (tâche planifiée) qui exécutera le php /chemin/vers/roundcube/plugins/carddav/cronjob/synchronize.php

Pour ceci lancez une console sur votre serveur web puis tapez :

crontab -e

et ajoutez la ligne

0 4 * * * php /var/www/roundcube/plugins/carddav/cronjob/synchronize.php

Au fichier de crontab ouvert, en remplaçant la partie en gras pa le chemin de votre rouncube puis sauvegardez.

Notez que le cron que je propose synchronise une fois par jour à 4h00 du mat (peut de chance que vous soyez en train de modifier vos contacts à cette heure la, si vous avez « pécho des 06 en boites » normalement c’était quelques heures plus tôt, à 4h00 vous êtes en train de vomir votre vodka sur un parcmètre donc tout vas bien).

Notez que vous devez avoir le paquet php5-cli pour pouvoir executer le php en ligne de commande comme ça, si ça ne marche pas pensez donc à l’installer via la commande sudo apt-get install php5-cli

Si vous souhaitez participer

Je vous encourage à participer au code, aux retours de bugs etc du projet via sa page github : https://github.com/jeromeschneider/Baikal

 

Une alternative qui à l’air franchement sympa

Je tiens à mettre valeur le commentaire de nono sur une alternative qui à l’air également super convaincante : Radical :

Je me permets de vous faire découvrir Radicale qui est l’équivalent de Baikal, mais en plus simple et plus robuste.

Plus simple parce qu’il n’y a même pas d’interface web (pas franchement utile pour une appli de type web-service).

Plus robuste parce qu’elle n’utilise pas de base de données (sqlite), mais uniquement un stockage en fichier plat, ce qui est très logique vu que les données à stocker ne sont que faiblement relationnelles.

Et enfin, cerise sur le gateau, Radical permet de créer des collections (de contacts ou d’évènement) publiques (donc accessibles à tous), privées (donc accessibles uniquement aux personnes authentifiées, ou personnelles (donc accessibles uniquement à par son propriétaire).

Cela permet donc de partager (sommairement) des contacts ou des évènements.

Et comment on crée une collection ? En accédant à son adresse, tout simplement.

Radicale, le plus KISS des caldav/carddav server…

 - nono