Installer scp et sftp sur les NAS Synology

Eh oui, encore une bizarrerie du linux-like de Synology : pas de scp ni de sftp par défaut. Ces deux softs faisant quand même partie de la base des utilitaires indispensables, voilà comment les installer sans tout casser.

Tout d’abord, installez les paquets zlib et openssl :

ipkg install zlib openssl

Pour installer scp et sftp il faut faire un peu attention : il y a une version spécifique de ssh installée sur les NAS Synology, c’est pourquoi il ne faut pas installer directement le paquet openssh par ipkg.

Commencez par créer un répertoire de travail :

mkdir /volume1/tmp
cd /volume1/tmp

Téléchargez le paquet openssh (sans l’installer!) :

ipkg download openssh

Extrayez les fichiers contenus dans le paquet openssh :

tar -xzf openssh*.ipk
tar -xzf data.tar.gz

Copiez les exécutables scp et sftp dans /bin :

cp /volume1/tmp/opt/bin/openssh-scp /bin
cp /volume1/tmp/opt/bin/sftp /bin

Renommez openssh-scp :

mv /bin/openssh-scp /bin/scp

Créez le lien symbolique suivant (essayez sans, mais chez moi c’était nécessaire) :

ln -s /usr/syno/bin/ssh /opt/bin/ssh

Supprimez votre dossier de travail :

rm -rf /volume1/tmp

Et c’est tout!

Article rédigé d’après cet article, avec quelques mises à jour. Merci à son auteur.

Le ssh pour tous les utilisateurs sur les NAS Synology

Deuxième article sur mon NAS Synology DS411j, cette fois ci simplement pour passer outre une limitation mise en place par Synology : l’accès en ssh est réservé à l’utilisateur root (ou admin).

Cette limitation a sans doute du être mise en place dans un souci de simplicité pour le grand public, limitant ainsi l’accès au propriétaire du NAS, qui est supposé savoir ce qu’il fait s’il a activé l’accès ssh.

Cependant, cette limitation pose 2 problèmes :
– Tout d’abord, il est déconseillé d’activer l’accès ssh en root à une machine GNU/Linux, pour des raisons de sécurité. Cette limitation va complètement à l’encontre de ce principe élémentaire.
– En plus, dans l’optique de l’utilisation de rsync sur le protocole ssh, ce que je veux mettre en place pour mon futur système de sauvegarde (ça fera l’objet d’un autre article), il faut absolument que chaque utilisateur ait un accès ssh au NAS

La procédure n’est pas très compliquée, mais il faut faire attention à ce que l’on fait car on peut très vite tout casser (et ne plus pouvoir se connecter en ssh du tout par exemple…).

1) Créer un utilisateur ordinaire depuis l’interface web du NAS.

Appelons le julien dans la suite. Je l’ai configuré pour appartenir au groupe « users ».

2) Se connecter en root au NAS.

Il faut bien sûr activer le service ssh au préalable, par l’interface web du NAS. Je conseille d’également activer le telnet pour la durée des manipulations décrites ici, cela permettra un accès de secours au NAS si on casse le SSH…
Pour se connecter en ssh, c’est comme toujours, depuis un terminal Linux :

ssh root@ip.de.votre.nas

Le mot de passe est le même que celui de l’administrateur dans l’interface web.

3) Créer le profil de l’utilisateur.

Je conseille la création d’un dossier /volume1/users/ avec dans ce dossier un dossier par utilisateur « standard », qui permettra de mettre tout ce qui est administration des utilisateurs dans ce dossier et non pas dans /volume1/homes/ car ce dossier sera accessible directement par le navigateur de fichier de l’interface web (FileStation). Les fichiers « d’administration » de l’utilisateur (le .profile en l’occurrence) y seront visibles. Cependant, si vous préférez, vous pouvez vous passer de ce nouveau dossier et utiliser /volume1/homes/.
Ensuite, il faut créer (dans le dossier /volume1/users/julien donc) le fichier .profile de julien, sur la base de celui de root.
C’est parti :

mkdir /volume1/users
mkdir /volume1/users/julien
cp /root/.profile /volume1/users/julien
chown -R julien:users /volume1/users/julien/
vi /volume1/users/julien/.profile

Changer la ligne suivante :

HOME=/root

Par celle-ci :

HOME=/volume1/homes/julien

4) Adapter le fichier /etc/passwd.

Sauvegarder le fichier /etc/passwd original et adapter sa copie :

cp /etc/passwd /etc/passwd.sauv
vi /etc/passwd

Modifier la ligne suivante (elle peut varier légèrement chez vous) :

julien:x:1026:100::/var/services/homes/julien:/sbin/nologin

Pour cette ligne là :

julien:x:1026:100::/volume1/users/julien:/bin/sh

Le dossier « /volume1/users/julien » indique le dossier dans lequel se placer quand l’utilisateur se connecte. C’est aussi dans ce dossier que sera cherché le fichier .profile, pensez donc à adapter ce dossier si vous avez mis votre .profile ailleurs.

5.a) Configurer la lecture du .profile du nouvel utilisateur

Ici, il y a 2 cas de figures.

– Vous avez choisi de n’avoir qu’un seul dossier pour l’utilisateur (/volume1/homes/julien à priori) et le fait de voir le fichier .profile trainer dans l’interface de FileStation ne vous gène pas : passez à l’étape 6).

– Vous avez choisi de suivre ma configuration, avec un dossier « technique » (/volume1/users/julien), dans lequel vous avez mis le .profile, et un dossier « utilisateur » (/volume1/homes/julien) : il faut bidouiller un peu pour s’en sortir. Si vous voulez juste appliquer ce que je dis sans trop comprendre le problème, passez au 5.b).

Sinon je vous explique le problème : il faut que le fichier .profile ne soit pas dans le dossier de connexion de l’utilisateur (configuré dans le /etc/passwd). En effet, FileStation utilise le dossier configuré dans /etc/passwd comme dossier « racine » pour l’utilisateur et on fini par tourner en rond :

– soit on a /volume1/users/julien/ dans /etc/passwd et lors de la connexion en ssh tout se passe bien, le fichier .profile est pris en compte mais dans FileStation on se retrouve aussi dans ce dossier /volume1/users/julien/ alors qu’on voulait être dans /volume1/homes/julien/ (et en plus on voit le fichier .profile du coup ^^ )

– soit on a /volume1/homes/julien/ dans /etc/passwd et on est au bon endroit dans FileStation, mais à la connexion en ssh le .profile sera cherché dans /volume1/homes/julien/, ne sera pas trouvé, et le profile par défaut sera appliqué. On sera bien connecté dans /volume1/homes/julien/ mais la variable $HOME vaudra par exemple « /root », ce qui fait que lorsqu’on passe la commande suivante, on n’a pas vraiment le résultat espéré :

julien@linux:~$ ssh julien@ip.de.votre.nas
julien@ip.de.votre.nas\'s password:


BusyBox v1.16.1 (2010-10-23 01:00:23 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

Discovery> pwd
/volume1/homes/julien
Discovery> cd
Discovery> pwd
/root
Discovery>

Inattendu hein? :p
L’astuce consiste en fait à modifier le fichier de profile par défaut : /etc/profile. J’explique cela dans le paragraphe suivant.

5.b) Modifier le fichier /etc/profile

Au final, nous voulons donc avoir le dossier /volume1/homes/julien/ comme dossier de connexion par défaut, aussi bien pour le ssh que pour FileStation, tout en prenant en compte le fichier de profile /volume1/users/julien/.profile.
Cela se fait en modifiant le fichier /etc/profile de la manière suivante (ajout des 3 dernières lignes) :

#/etc/profile: system-wide .profile file for ash.
PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin:/usr/local/bin:/usr/local/sbin"
umask 022
#This fixes the backspace when telnetting in.
#if [ "$TERM" != "linux" ]; then
#        stty erase
#fi
PGDATA=/var/service/pgsql
export PATH PGDATA
HOME=/root
export HOME
TERM=${TERM:-cons25}
export TERM
PAGER=more
export PAGER
PS1="`hostname`> "
alias dir="ls -al"
alias ll="ls -la"
ulimit -c unlimited
PATH=/opt/bin:/opt/sbin:$PATH
if [ -f "/volume1/users/$USER/.profile" ]; then
. "/volume1/users/$USER/.profile"
fi

6) Vérifier la bonne configuration de l’utilisateur.

Exécuter les commandes suivantes :

NAS> whoami
root
NAS> cd /
NAS> pwd
/
NAS> su - julien


BusyBox v1.16.1 (2010-10-23 01:00:23 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

NAS> whoami
julien
NAS> pwd
/volume1/users/julien
NAS> echo $HOME
/volume1/homes/julien
NAS> cd
NAS> pwd
/volume1/homes/julien
NAS> exit
NAS> pwd
/
NAS>

Le résultat de toutes ces commandes est très important. La seule chose qui doit changer chez vous est « julien ». Vous remarquerez que comme le dossier de connexion configuré (/volume1/users/julien) est différent de la valeur attribuée à la variable $HOME à l’étape 3 (/volume1/homes/julien), la commande cd ne nous met pas dans notre répertoire de connexion, mais bien dans notre home. Vous pouvez bien sur mettre un autre dossier dans $HOME à l’étape 3 (comme le dossier /volume1/users/julien, je ne l’ai pas fait parce que je veux garder ce dossier strictement administratif).

7) Configurer sshd.

Commencer par sauvegarder la configuration originale :

cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.sauv

Puis adapter la configuration à votre convenance. Les points essentiels sont les suivants :
– Changer la ligne « #Protocol 2,1″ pour « Protocol 2″ (désactivation de ssh v1) si ce n’est pas fait
– Changer la ligne « #PermitRootLogin yes » pour « PermitRootLogin no » pour interdire la connexion en ssh de root (conseillé d’un point de vue sécurité, je ne l’ai pas fait pour des raisons pratiques pour le moment)

Vous pouvez également adapter les 2 lignes suivantes en fonction de ce qui vous parait raisonnable d’un point de vue sécurité :
– « #LoginGraceTime 2m » (par défaut, 2 minutes) : Le serveur se déconnecte après ce délai si l’utilisateur ne s’est pas connecté. Si la valeur est 0, il n’y a aucune limite de temps.
– « #MaxAuthTries 6″ (par défaut, 6 essais) : Nombre maximum d’essais de mot de passe pour la connexion.
– Pour les autre options : « man ssh » dans google =)

8) Redémarrer le démon sshd.

Avant de redémarrer sshd, je vous conseille encore une fois d’activer (provisoirement si vous voulez) le telnet sur votre NAS.
Le démon sshd peut être redémarré de plusieurs manières. La plus simple est de désactiver puis de réactiver le service ssh dans l’interface web. Déconnectez vous avant de faire ça. Sinon, vous pouvez utiliser la commande suivante :

/usr/syno/etc.defaults/rc.d/S95sshd.sh

Ou alors, plus brutal, vous pouvez éteindre et rallumer votre NAS.

9) Tester que ça fonctionne!

Se connecter en tant que julien pour voir si ça fonctionne, depuis votre poste Linux :

ssh julien@ip.de.votre.nas

Si vous avez bien tout suivi, ça devrait fonctionner. Sinon, vous pouvez toujours tenter de me poser une question, je ferai ce que je peux pour vous aider…

Attention

J’ai vu sur le net que le fait de modifier les caractéristique des utilisateurs pour lesquels on a activé le ssh par l’interface web remettait la configuration par défaut et que du coup le ssh ne fonctionnait plus. Si c’est le cas, il vous suffit de ré-appliquer la procédure ci-dessus, ça devrait fonctionner. Au pire, faites les manips en vous connectant via telnet en root. Cela dit, je n’ai pas encore essayé ceci. Synology a peut-être corrigé ce problème maintenant.

Sources utilisées pour cet article

http://bernhard.hensler.net/blog/synology-enable-ssh-user-login-other-than-root/
http://www.delafond.org/traducmanfr/man/man1/ssh.1.html
http://unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1

Un ERP simple pour les Juniors-Entreprise: Ordo

Cela fait maintenant un an et demi que je suis membre de la Junior-Entreprise IARISS, dans mon école, l’ENSISA. Une Junior-Entreprise est une micro-entreprise tenue et développée uniquement par des étudiants. Nous réalisons des études dans le domaine de l’informatique (site web, applicatif, réseaux …), et maintenant automatique et textile. D’abord responsable informatique, je suis maintenant trésorier de cette structure.

Pendant tout ce temps où j’ai aidé à développer la structure, j’ai pu me rendre compte des problèmes organisationnels, des défauts dans la gestion autant de l’information que de l’humain.

Voici donc introduit Ordo, un ERP simple qui répond aux besoins spécifiques des Juniors-Entreprises. Il comprend:

  • Une gestion des membres de l’association, de leurs informations, de leurs mots de passe et de leurs documents
  • Un générateur de carte de visite
  • Une gestion des prospects et des contacts commerciaux
  • Une gestion des projets, avec une vérification qualitative (bon document, au bon moment …)

Ce projet est la fusion et le développement de projet développé précédemment (gestion commerciale et cartes de visites) par Théophile Helleboid, ancien président de IARISS, et moi-même.

Comme un travail ne se fait jamais bien du premier coup, l’ERP a encore quelques soucis. Il est cependant dans un état suffisant pour être utilisé en interne, à IARISS. Je continuerai dans les prochains temps à corriger les quelques défauts de jeunesse.

Trêve de blabla, voici quelques captures d’écran de l’application !




L’application, vous l’avez vu, est un site web. Derrière le capot, on trouve le framework Symfony.

Bien entendu, j’ai placé l’ERP sous license libre (GPLv3) ! Le code est disponible sur Github. Si par le plus grand des hasards, vous voulez l’utiliser, faites moi un signe, ça risque de me faire plaisir =)

NAS Synology : go root n00b!! (et faites un truc utile tant qu’à faire)

J’ai fini par craquer, et je me suis acheté un nouveau jouet : un NAS Synology DS411j \o/
Voilà la bête (la photo est plus moche que toutes celles que vous trouverez sur le net mais c’est moi qu’a fait!) :
DS411j

Bref. Tout ça pour dire que je suis vraiment pas déçu de l’engin. Silencieux (ou pourrait dormir à coté je pense), compact pour un 4 baies, et surtout niveau fonctionnalités, c’est un festival. Voici donc un premier article dédié au DS411j, sachant que bien sûr tout ce que je dis dois s’appliquer à n’importe quel NAS Synology à priori. Il y en aura surement d’autres, au fur et à mesure que je casserai bidouillerai des trucs. Dans cet article :
– accès root en SSH au NAS
– installation d’un gestionnaire de paquets : ipkg
– utilisation de base d’ipkg et exemple d’installation de quelques logiciels

Accès root en SSH :

Pour commencer, il faut activer le SSH dans le panneau de configuration du NAS. Ca se passe dans Panneau de configuration -> Terminal, cochez la case « Activer le service SSH ». Le SSH sera alors actif pour l’utilisateur « admin » (celui créé à l’initialisation du NAS) et pour l’utilisateur « root ». Le mot de passe de root est le même que celui que vous avez mis pour admin. Il est sans doute possible d’utiliser le SSH avec d’autres utilisateurs, mais j’ai pas tout compris à la gestion des utilisateurs encore, donc pour le moment ça sera root. De toutes façons, on en a besoin pour la suite.
C’est tout, le SSH est activé.

Installation d’un gestionnaire de paquets : ipkg

Le seul manque que j’ai remarqué pour le moment est l’absence d’un gestionnaire de paquet installé de base. Mais comme il est possible (et pas trop compliqué) d’en mettre un, pour les quelques geek qui s’en serviront, c’est pas très gênant.
Apparemment, le gestionnaire de paquets « officiel » de Synology est ipkg. Son utilisation ressemble beaucoup à l’apt-get de Debian. Il est peut-être possible d’en installer un autre, mais ça doit être un peu (beaucoup?) plus compliqué. Le processus d’installation d’ipkg est donné sur le wiki de Synology, mais je vous en fait une version française.
– Vérifiez quel type de CPU est installé sur votre NAS : ici
– Connectez vous en SSH (utilisateur root) à votre NAS
– Téléchargez le bootstrap (script d’installation d’ipkg) qui correspond à votre CPU : ici. Conseil, faites le avec wget. Par exemple, pour le DS411j :

wget http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unst
able/syno-mvkw-bootstrap_1.2-7_arm.xsh

– Exécutez le script que vous venez de télécharger. Exemple, pour les CPU de type ARM :

sh syno-mvkw-bootstrap_1.2-7_arm.xsh

– Enjoy !

Utilisation de base d’ipkg et exemple d’installation de quelques logiciels

2 commandes de base, qui sont les mêmes que pour apt-get :
– Mise à jour de la table répertoriant les paquets disponibles :

ipkg update

– Mise à jour de tous les paquets ipkg installés sur votre NAS dans leur dernière version
Et pour installer un paquet, c’est encore comme apt-get :

ipkg install <nom du paquet>

Deux exemples :
– Parce que ça peut servir ^^ (ça aurait pu y être de base d’ailleurs…) :

ipkg install man

– Parce que vi c’est bien, et vim c’est mieux :

ipkg install vim

Conclusion (provisoire!)

Le premier truc qui me vient à l’esprit : franchement, il est bien cool ce NAS. Si vous hésitez entre plusieurs marques, je recommande donc sans aucune hésitation Synology (après le modèle à vous de voir ce dont vous avez besoin, les fonctionnalités sont globalement les mêmes sur tous). Et la suite est plus que prometteuse ! To be continued !

Faire fonctionner Office 2007 sous Ubuntu 10.10

Les alternatives libres à la suite Office de Microsoft, comme OpenOffice, sont de plus en plus avancées et performantes et elles gèrent de mieux en mieux la plupart des formats propriétaires de Microsoft. Malgré ça, on peut avoir besoin d’installer la suite Office.

Voici comment faire pour installer et faire fonctionner la suite Microsoft Office 2007 sous Ubuntu 10.10. Puisqu’il n’existe pas de version de la suite d’Office compatible nativement avec Linux, il faut utiliser un outil capable d’exécuter des programmes compilés pour Windows sous Linux. Le plus connu de ces outils est Wine, que je vais utiliser ici.

Il existe des méthodes pour faire fonctionner Office avec PlayOnLinux. Je déconseille ces méthodes, elles n’ont pas (ou mal) fonctionné chez moi.

La démarche décrite ici devrait être semblable pour d’autres versions d’Office et d’Ubuntu (de Linux plus généralement) mais il est probable qu’il y ai tout de même quelques différences.

Tout d’abord, installer la dernière version de Wine :

sudo add-apt-repository ppa:ubuntu-wine/ppa
sudo apt-get update
sudo apt-get install wine1.3

Ensuite, il faut paramétrer Wine pour fonctionner en mode « Windows XP ». Aller dans Applications -> Wine -> Configurer Wine -> Onglet Application et vérifier qu’il y a bien « Windows XP » dans le champ « Version de Windows » (si ce n’est pas le cas, mettez-le).
ConfWine

On peut maintenant passer à l’étape d’installation d’Office. Insérez votre CD d’Office dans votre lecteur, faites un clic droit sur le fichier « SETUP.EXE » -> Ouvrir avec Wine.

L’installation se déroule alors tout à fait normalement. Pensez à n’installer que les composants dont vous avez besoin. Je n’ai testé que Word, Excel et Powerpoint. Il est possible que certains autres composants ne fonctionnent pas correctement.

Pour faire fonctionner Powerpoint, il reste une manip’ à faire : allez dans Applications -> Wine -> Configurer Wine -> Onglet Bibliothèques. Cherchez « riched20″ dans la liste « Nouveau remplacement pour » et cliquez sur « Ajouter ». Ensuite, sélectionnez « riched20″, cliquez sur « Modifier » et choisissez « native Windows ».
ConfWine2

Et voilà! Word, Excel et Powerpoint devraient fonctionner correctement :
word

Pour associer certains types de fichiers (comme les docx, les xlsx et les pptx, que OpenOffice a des fois du mal à ouvrir) à Office, faites clic droit sur un fichier -> Ouvrir avec -> Autre application -> choisissez l’application voulue. Les composants Office apparaissent plusieurs fois. Le 1er fonctionne chez moi. Cochez la case « Mémoriser cette application….. » et cliquez sur « Ouvrir ».
ouvriravec

Le fait que les composants Office apparaissent plusieurs fois est un bug connu. Une méthode pour le contourner est disponible ici.

Sources :
webupd8.org
help.ubuntu.com
doc.ubuntu-fr.org

Gérez et publiez vos collections avec GCstar !

En cherchant un moyen de répertorier mes CD je suis tombé sur un logiciel vraiment très bon : GCstar.
C’est bien sûr un logiciel libre, et il a pour but de vous aider à gérer toutes vos collections, aussi variées soient-elles. Un certain nombre de collections sont prédéfinies (films, BD, CD, livres, musique, …) mais vous pourrez définir vous-même un nouveau type de collection si besoin.
GCstar est annoncé pour fonctionner aussi bien sous Linux que sous Windows et MacOS mais je n’ai essayé que la version Linux.

La grande force de GCstar est son moteur de recherche intégré, basé sur des plugins (très simples d’ailleurs). Pour les CD, cela vous permet par exemple de ne rentrer que le titre d’un CD que vous voulez ajouter à la bibliothèque, et GCstar va chercher toutes les informations (artiste, chansons, pochette, durée..) qu’il trouve sur des sites que vous aurez défini (Amazon par exemple). C’est en fait la définition de ces sites qui se fait par l’ajout de plugins.

La publication en ligne de votre collection n’est pas gérée directement par GCstar, mais il existe un outil tout fait et près à l’emploi pour ça : GCweb
Il y a même une démo de l’outil ici.

Puisque c’est pour cela que je l’ai choisi, je vais détailler les étapes permettant d’ajouter vos CD à votre bibliothèque et la mise en ligne de votre collection.
Un résumé de la démarche :
– Installer GCstar (sans blague….)
– Créer une nouvelle collection
– Ajouter le plugin de recherche des informations sur Amazon
– Ajouter vos CD
– Envoyer les fichiers de GCstar sur votre serveur web
– Mettre en place GCweb
– Enjoy

– Installer GCstar
Ca se fait très simplement via la Logithèque Ubuntu pour ceux qui sont sur Ubuntu, pour les autres tout est expliqué sur le site de GCstar

– Créer une nouvelle collection
Pareil, rien de sorcier. Sélectionnez « Collection musicale » (astuce : sauf si vous voulez faire une autre collection hein :D ) et c’est parti.

– Ajouter le plugin de recherche des informations sur Amazon
Par défaut, GCstar inclut la recherche sur Discogs et Musicbrainz. Si ça vous suffit vous pouvez sauter cette étape, mais j’ai l’impression que Amazon est quand même plus complet. Donc pour Amazon, c’est sur le forum de GCstar que ça se passe. Pour ceux qui n’ont pas envie de créer un compte pour accéder aux pièces jointes du forum, j’ai fait une copie ici. Il suffit d’ajouter les fichiers contenus dans cette archive dans le dossier /lib/GCPlugins/GCmusics/. Sous Ubuntu, le chemin complet est /usr/share/gcstar/lib/GCPlugins/GCmusics/.
Vous l’aurez compris, les plugins pour les autres types de collection se trouveront dans /lib/GCPlugins/XXXX.

– Ajouter des CD
Là rien de bien sorcier. Pour choisir vos méthodes de recherche des informations, allez dans Configuration/Préférences/Internet, c’est le menu « Sites où récupérer les fiches ». Pour ajouter un CD, cliquez sur « Ajouter », entrez le titre, l’auteur dans la barre de recherche (là où il y a marqué « Nouvel album ») et cliquez sur « Télécharger ». Une liste des résultats de la recherche apparait, choisissez celui qui vous convient et validez.

– Envoyer les fichiers de GCstar sur votre serveur web
Envoyez le fichier .gcs et le dossier _pictures (sous Ubuntu dans /home/votre_user par défaut) dans le dossier « collections » de l’arborescence de GCweb. Vous pourrez mettre à jour ces fichiers plus tard, si vous complétez votre collection (il faudra simplement envoyer les nouveaux fichiers sur le serveur).

– Mettre en place GCweb
Il vous faudra avant tout un serveur web fonctionnel. GCweb n’a pas de restriction pour un serveur web en particulier, mais il faut que le serveur gère le PHP5 et qu’il ait la librairie GD2 ou supérieure. Un serveur web sous Linux est conseillé pour les tris par date, qui risquent de ne pas fonctionner sur une autre plateforme.
Pour la démarche : il suffit d’envoyer le contenu de l’archive sur votre serveur web. Avec un navigateur, allez ensuite à l’adresse de votre serveur, à l’emplacement où vous avez mis les fichiers de GCweb. Vous aurez une page de configuration. Remplissez les champs en fonction de vos préférences et de votre configuration.
Une fois que votre configuration vous satisfait, allez à l’adresse de votre serveur web. Normalement, votre collection est en ligne. Il est conseillé de carrément supprimer le fichier config.php (que vous avez renommé pendant l’étape de configuration de GCweb) pour éviter que quelqu’un s’en serve. Gardez-en une copie quelque part, mais pas à un endroit accessible depuis internet.

-Enjoy !
Si vous avez des questions, n’hésitez pas à aller sur le forum de GCstar. Vous pouvez aussi m’en poser dans les commentaires, j’essayerai d’y répondre.

14 années de développement de Gimp

Le développement d’un logiciel tel que Gimp se fait sur de longues années, et par un nombre conséquent de personne. Pour vous donner une idée de la chose, j’ai fais une vidéo des changements intervenu sur le dépôt de code depuis 14 ans.

Une précision cependant, les 2 premières années du développement ne sont pas sur la vidéo car les logs ne sont pas disponible dans Git.

Cette vidéo a été faite avec le logiciel Gource, très sympathique au demeurant =)

Compiler Gimp avec LLVM/Clang et analyse statique

Clang, qui utilise l’infrastructure de LLVM, est un compilateur pour la famille de langage du C. Son but est d’offrir une alternative moderne à GCC. Avec Clang arrive notamment un très sympathique analyseur statique du code source. Nous allons appliquer ça à Gimp.

Pour ça, j’ai lâchement copié et adapté la procédure donné par Campbell Barton, de la team Blender. (http://wiki.blender.org/index.php/User:Ideasman42/BlenderClang).

Voici ce que ça donne à la sauce Gimp:

Etape 1: compiler LLVM/Clang

J’ai d’abord essayé avec la version fournis dans ArchLinux, mais Clang s’arrêtait avec une fatal error. Ça se passe bien mieux avec la version de développement. Pour la récupérer, le script de Campbell Barton fonctionne très bien.

Etape 2: configurer la compilation de Gimp

Déjà, il faut ajouter les binaires de LLVM dans le PATH:

export PATH=$PATH:/opt/llvm/bin

La seule différence avec une compilation classique, c’est qu’on demande explicitement le compilateur de CLang:

CC=ccc-analyzer ./autogen.sh --prefix=/opt/gimp/

Etape 3: compiler

Si vous voulez juste compiler, la procédure ne change pas.

make -j3

Si vous voulez lancer en même temps une analyse statique, il faut utiliser scan-build:

scan-build -o clang make -j3

Attention, une compilation avec analyse statique prend pas mal de temps (3h40 avec mon Core 2 Duo E4500).

Etape 4: profit !

L’analyseur statique de LLVM va probablement trouver tout un tas de bug dans le code. Il y a bien sûr des faux positifs, mais c’est dans l’ensemble remarquablement bien fait ! Vous trouverez le résultat de l’analyse de master que j’ai fait aujourd’hui ici: http://pellelatarte.fr/dawa/gimp-llvm/

Refactorisation et évolution de l’outil Cage

Hello,

Un article rapide pour vous dire que j’ai commencé un refactoring du code de l’outil cage de Gimp. C’est une étape nécessaire pour atteindre une bonne qualité de fonctionnement et une bonne base pour implémenter de nouvelle choses. Cela passe ici par une réécriture de la gestion de l’interface avec une machine à états (comme décrit ici il y a quelques jours),  des changements dans les structures de données, de la documentation, et pas mal de petites simplifications et corrections.

Pour l’avenir, une sélection multiple des points de la cage devrait arriver rapidement dans la branche soc-2010-cage-2. Ce mode d’édition fonctionnera de manière similaire à celui de l’outil chemin.

Un mode d’édition proportionnelle similaire à ce qu’on peut trouver dans Blender devrait voir le jour également.

Si ça se trouve, je vais finir par être satisfait de mon boulot un jour … =)

Implémenter une machine à état

Si vous avez déjà fait de la programmation événementielle (typiquement, les interfaces graphiques avec tout leurs boutons, qui sont activés n’importe quand), vous avez du tomber sur le problème du code à mettre derrière. Le problème est de gérer tous les cas possibles, sans zone de cas indéterminé, et donc sans bugs.

J’ai récemment réécris la gestion de l’interface de de mon outil de déformation par cage pour Gimp, sous forme de machine à état. Cette approche est à mon avis la plus simple a mettre en œuvre, et présente pas mal d’avantage:

  • On voit très facilement si tout les cas sont gérés
  • S’implémente de façon très simple, presque mécanique
  • Facile à maintenir et à étendre

La première étape est de dessiner un diagramme UML d’état. Voici le diagramme que nous allons implémenter:
State Chart UML
3 états et 6 transitions, c’est un automate relativement simple, mais déjà pas facile à implémenter si on ne suis pas cette approche.

Une fois qu’on a ce diagramme, toute la phase de réflexion pour savoir comment va marcher notre système est terminée. J’ai ici implémenté ce système en Java. On commence par définir un enum qui contient tous les états possibles du système:

public class StateMachine {

  private enum State {STATE1, STATE2, STATE3};

Une variable pour stocker l’état actuel:

  private State state;

L’état initial est défini dans le constructeur:

  public StateMachine() {
    this.state = State.STATE1;
  }

Le traitement sur les évènements se fait avec un switch case:

  public void event1() {
    switch(this.state) {
    case STATE1:
      //Action
      this.state = State.STATE2;
      break;
    default:
      //Nothing
      break;
    }
  }
 
  public void event2() {
    switch(this.state) {
    case STATE1:
      //Action
      this.state = State.STATE3;
      break;
    case STATE2:
      //Action
      this.state = State.STATE3;
      break;
    case STATE3:
      //Action
      this.state = State.STATE2;
      break;
    }
  }

  public void event3() {
    switch(this.state) {
    case STATE1:
      //Action
      this.state = State.STATE1;
      break;
    case STATE3:
      //Action
      this.state = State.STATE1;
      break;
    default:
      //Nothing
      break;
    }
  }
}

Et c’est tout ! Ça juste marche =)

ps: J’ai crée le diagramme UML avec PlantUML, très simple à utiliser et encore plus avec le plugin Eclipse !