Installer symfony sur ubuntu 8.04

Ne pas utiliser apt, la version qu’il installe va générer des erreurs.

PHP Fatal error: Uncaught Error: Call to undefined method Composer\Package\RootPackage::getConfig() in /home/manu/.config/composer/vendor/fxp/composer-asset-plugin/Config/ConfigBuilder.php:111
Stack trace:
#0 /home/manu/.config/composer/vendor/fxp/composer-asset-plugin/Config/ConfigBuilder.php(74): Fxp\Composer\AssetPlugin\Config\ConfigBuilder::getConfigBase(Object(Composer\Composer), Object(Composer\IO\ConsoleIO))
#1 /home/manu/.config/composer/vendor/fxp/composer-asset-plugin/FxpAssetPlugin.php(82): Fxp\Composer\AssetPlugin\Config\ConfigBuilder::build(Object(Composer\Composer), Object(Composer\IO\ConsoleIO))
#2 /usr/share/php/Composer/Plugin/PluginManager.php(215): Fxp\Composer\AssetPlugin\FxpAssetPlugin->activate(Object(Composer\Composer), Object(Composer\IO\ConsoleIO))
#3 /usr/share/php/Composer/Plugin/PluginManager.php(188): Composer\Plugin\PluginManager->addPlugin(Object(Fxp\Composer\AssetPlugin\FxpAssetPlugin))
#4 /usr/share/php/Composer/Plugin/PluginManager.php(240): Composer\Plugin\PluginManager->registerPackage(Obje in /home/manu/.config/composer/vendor/fxp/composer-asset-plugin/Config/ConfigBuilder.php on line 111

Si vous l’avez déjà installée, supprimez la avec

sudo apt-get remove composer

ensuite, tapez la commande suivante dans un terminal:

curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/bin --filename=composer

Et ça fonctionne

SSHplus: le SSHmenu pour unity

S’il est un outil dont je ne pourrais me passer et qui freinait considérablement mon passage à unity, c’est bien sshmenu. Une fois paramétré, j’ai sous la main en quelques clics l’accès ssh aux machines que je gère.

Autant lorsqu’on n’en a que quelques unes ça peut rester gérable à la main, autant quand on en a plus d’une trentaine, c’est impensable de ne pas utiliser un outil dédié.

Malheureusement, sshmenu ne fonctionne pas avec unity. Heureusement, il existe un autre logiciel qui permet de faire la même chose et même plus, c’est SSHplus.

Le seul petit point négatif, c’est que le paramétrage se fait pour l’instant en éditant le fichier de configuration, pas avec une interface graphique. Gageons cependant que ce n’est qu’une question de temps avant que ce ne soit corrigé.

Les fonctionalités

  • Lance SSH, rdesktop, et presque n’importe quelle commande ou application
  • Compatible avec le menu de configuration de sshmenu
  • Supporte les dossiers imbriqués (mais pas encore ceux importés depuis sshmenu)

Je n’ai pas testé l’import depuis le fichier de configuration de sshmenu puisque j’en ai profité pour faire du rangement dans mes entrées, et j’ai réécrit le fichier de configuration, ce qui m’a permis de me faire la main sur son fonctionnement.

Installer SSHplus

  • Téléchargez la dernière version sur le repo github
  • Copiez le dans /usr/local/bin
  • Ajoutez lui les droits en exécution par un chmod +x /usr/local/bin/sshplus.py
  • Lancez sshplus.py ou mettez le dans vos applications au démarrage
  • Éditez le fichier de configuration ~/.sshplus comme indiqué ci dessous

La configuration

Quelques infos rapides avant de commencer:

  • Les lignes commençant par le caractère # sont ignorées (commentaires). Ne placez pas de commentaire à la suite de lignes indiquant des commandes
  • Les espaces en début de ligne sont ignorés. Vous pouvez indenter pour que le fichier soit plus clair
  • Les lignes vides sont ignorées (il n’y en a pas dans mon fichier d’exemple à cause de wordpress qui ne sais plus reconnaitre la fin du code)
  • L’instruction sep ajoute un séparateur dans le menu

Les instructions du fichier de configuration ~/.sshplus

C’est très simple, elles se présentent sous la forme NOM | COMMANDE | ARGUMENTS. Ainsi, pour ouvrir un terminal avec la commande « top », il suffit d’ajouter l’instruction suivante:

Afficher top|gnome-terminal|-x top

Pour lancer firefox sur le site des astuces d’absolacom:

Astuces d'Absolacom|firefox|http://astuces.absolacom.com

Accéder à un dossier local (la structure est la même utilisée dans le fichier ~/.gtk-bookmarks)

Dossier temporaire|nautilus|file:///tmp

ou distant

Dossier distant|nautilus|sftp://manu@192.168.10.214

A partir de là, vous voyez que c’est simple de faire ce qu’on veut. Ne reste plus qu’à savoir quoi y mettre, mais si on ne trie pas, c’est vite le bazar et il est impossible de s’y retrouver.

Menus et Sous menus

On peut heureusement créer des sous menus de façon aussi simple: il suffit d’utiliser l’instruction folder:label pour donner un nom à votre dossier, et l’instruction folder: pour remonter d’un niveau et « fermer votre dossier ».

Exemple de fichier de configuration

Je vous donne ci dessous un exemple de fichier de configuration ((fichier fourni par le développeur et adapté par mes soins)). Attention, rien n’est fonctionnel dans le sens ou les adresses et les identifiants sont fantaisistes. A vous d’adapter à votre besoin.

# Lanceurs d'application dans un dossier
folder:Applications
Show top|gnome-terminal|-x top
Dossier distant|nautilus|sftp://manu@192.168.10.214
# Un sous dossier
folder:Absolacom
Astuces d'Absolacom|firefox|http://astuces.absolacom.com
folder:
folder:
#sep ajoute un séparateur
sep
# label: Ajoute un label aux menus
label:Connexions SSH
SSH server1|gnome-terminal|-x ssh root@google.com
SSH server2|gnome-terminal|-x ssh -p 456 manu@192.168.10.23
sep
# Utilise rdesktop pour se connecter à des postes windows
label:Connexions RDesktop
Win-Server 1|rdesktop|-T “Win-Server 1″ 1.2.3.4
Win-Server 3 (with many arguments)|rdesktop|-g 1320×680 -T “Win-Server 3″ -x l -P -r sound:local 1.2.3.6
sep
label:Connexions Putty
# PuTTY
PuTTY-Session 1|putty|-load SavedSession1
PuTTY-Session 2|putty|-load SavedSession2
#Si un fichier de connexion sshmenu est présent, il sera ajouté automatiquement

Comme vous le voyez, c’est simple d’usage et tellement pratique.

Edit du 24/08/12

Je modifie cet article pour apporter deux petites informations.

Tout d’abord, si vous mettez un underscore dans le nom de votre raccourci, vous pourrez avoir un accès rapide en appuyant sur la lettre correspondante. Par exemple, prenons la ligne PuTTY-Session 2|putty|-load SavedSession2 du fichier ci dessus, si je la note Pu_TTY-Session 2|putty|-load SavedSession2 dans mon fichier de configuration, je pourrais lancer ce raccourci en appuyant sur la touche « T ». Pas primordial, mais pratique, d’autant que je n’ai trouvé cette info nulle part, mais en bidouillant.

Ensuite, j’ai eu besoin de transformer un fichier de conf de sshmenu vers sshplus avec des dizaines d’entrées. Impossible d’utiliser le fichier d’origine dans sshplus, il ne me le prenait pas. Étant donné qu’il n’était pas question que je refasse tout à la main dans le cas présent, j’ai écrit un petit programme python pour le convertir. Il fonctionne comme suit en ligne de commande:

  • Sans argument, il va chercher le fichier ~/.sshmenu. S’il ne le trouve pas, le programme s’arrête.
  • En précisant sur la ligne de commande le chemin vers le fichier à transformer on peut préciser le fichier à utiliser. S’il ne le trouve pas, le programme s’arrête.
  • Le résultat converti est affiché dans le terminal. Une fois validé, on peut le rediriger vers un fichier (en général ~/.sshplus)
  • Le programme essaye de récupérer l’organisation des sous dossiers de sshmenu, mais il a des soucis avec les sous-sous-sous-…dossiers. Au pire, il ne vous restera plus qu’à placer les « folder: » au bon endroit. C’est plus rapide que de le faire manuellement quand on a beaucoup d’entrées.

Téléchargez le fichier sshmenu2sshplus , renommez le en « .py » ((wordpress ne me laisse pas les monter en py)), rendez le exécutable et lancez le en lui précisant l’emplacement vers votre fichier .sshmenu, et redirigez la sortie vers votre fichier sshplus. Par exemple:

./sshmenu2sshplus.py /tmp/.sshmenu >> ~/.sshplus

[Dolibarr 3.0] Avoir le montant des factures/devis sur les boites d’accueil

Note importante avant de commencer:

  • Je ne suis pas un expert du PHP et de ses subtilités. Pas plus que du code de Dolibarr. Donc on peut sans doute faire plus simple/ plus propre/ plus beau/ plus court/ plus clinquant/ plus rapide/ …
  • Ça fonctionne. Je ne demandais rien d’autre au code. Et ça fonctionne comme je le veux.
  • Ça n’a été testé que sur dolibarr-3.0.0 stable depuis avril 2011. Aucune garantie que ça fonctionne pour vous ou sur votre installation. Prenez les précautions d’usage avant de tout casser (sauvegarde des fichiers, BDD, travail sur une installation de test, etc)
  • Aucune assistance ne sera donnée. Les astuces ci dessous vous sont données brutes. Ensuite, voyez sur les forums de PHP ou de Dolibarr pour le reste. Ce n’est pas un manque de volonté de vous aider, mais un manque de compétence avoué. Je bricole en PHP, mais ce n’est pas mon métier.

Mise à jour:
Sur Dolibarr 3.6 (je ne sais pas pour les autres versions) les fichiers à modifier se trouvent dans /htdocs/core/boxes.
Le reste des modifications est identique.

Genèse

Lorsque j’ai un client au téléphone, ou par  courrier, il n’utilise jamais le numéro de devis ou de facture. Ça n’est pas naturel pour lui. En général, on me donne le montant. Exemple: « oublions le devis de 2412.35, mais on va faire celui de 1200. J’ai envoyé la facture de 360 à la compta, …. »

Ça a du vous arriver, si vous êtes dans la même situation professionnelle que moi.

Sauf qu’avec Dolibarr, quand vous avez la liste des documents sur le tableau de bord, vous n’avez pas sous les yeux tous les devis et toutes les factures. En effet, il faut aller sur la fiche client pour voir les détails de chaque document (les 4 derniers).

Tout va bien client par client. Mais j’ai des clients qui font gérer leur secrétariat par la même société, donc j’ai un seul interlocuteur pour plusieurs clients, et il est plus difficile de sauter d’un client à l’autre.

Et puis ce petit hack permet de diminuer le nombre de clics pour arriver sur la bonne facture ou sur le bon devis.

Pour les propositions commerciales (devis):

Modifier le fichier htdocs/includes/boxes/box_propales.php

ligne 73: modifier de

$sql.= " p.rowid, p.ref, p.fk_statut, p.datep as dp, p.datec, p.fin_validite, p.date_cloture";

à

$sql.= " p.rowid, p.ref, p.fk_statut, p.datep as dp, p.datec, p.fin_validite, p.date_cloture, p.total";

ensuite, à partir de la ligne 121, modifier comme suit (ajout d’un bloc de code et renumérotation des suivants):


$this->info_box_contents[$i][4] = array('td' => 'align="right"',
'text' => dol_trunc(number_format($objp->total, 2, ',', ' '),40)."€",
'url' => DOL_URL_ROOT."/comm/propal.php?id=".$objp->rowid);

$this->info_box_contents[$i][5] = array('td' => 'align="right"',
'text' =>dol_print_date($datec,'day'));

$this->info_box_contents[$i][6] = array('td' => 'align="right" width="18"',
'text' => $propalstatic->
LibStatut($objp->fk_statut,3));

Les dernières factures client modifiées:

Modifier le fichier htdocs/includes/boxes/box_factures.php ligne 75: modifier de

$sql = "SELECT f.rowid as facid, f.facnumber, f.type, f.amount, f.datef as df";

à

$sql = "SELECT f.rowid as facid, f.facnumber, f.type, f.amount, f.datef as df, f.total_ttc";

à partir de la ligne 128, modifier comme suit (ajout du premier bloc et renumérotation des blocs suivants):

$this->info_box_contents[$i][4] = array('td' => 'align="right"',
'text' => dol_trunc(number_format($objp->total_ttc, 2, ',', ' '),40)."€",
'url' => DOL_URL_ROOT."/compta/facture.php?facid=".$objp->facid);

$this->info_box_contents[$i][5] = array('td' => 'align="right"',
'text' => dol_print_date($datec,'day'),);

$this->info_box_contents[$i][6] = array('td' => 'align="right" width="18"',
'text' => $facturestatic->LibStatut($objp->paye,$objp->fk_statut,3));

Les dernières factures client impayées

Même chose que ci dessus, à adapter au fichier htdocs/includes/boxes/box_factures_imp.php

Résultat

N’utilisant pas dolibarr pour les factures fournisseurs, si vous voulez faire la même chose, il vous suffit de modifier les fichiers adéquats dans le dossier htdocs/includes/boxes/ de votre instalation dolibarr

Le total des factures

Maintenant qu’on a les montants de chaque facture, ce serait bien d’en avoir le total, en particulier pour les factures client impayées. C’est quand même pratique de savoir « l’argent qu’on a dehors » quand l’argent qu’on a dedans vient à manquer.

Attention: Le total ne sera calculé que sur la limite d’affichage des factures dans la boite d’information. Si vous avez choisi d’afficher 10 factures seulement dans cette boite, même si vous avez 50 factures impayées, le total sera effectué sur les 10 factures seulement affichées!

On va modifier à nouveau le fichier htdocs/includes/boxes/box_factures_imp.php .

On ajoute ligne 41 une variable qui va cumuler le total à chaque facture rencontrée

var $impayes;

Dans le bloc de code qu’on a ajouté pour avoir le montant, on ajoute une ligne (la dernière ci dessous, j’ai mis tout le bloc de code pour repérage facile dans le code)

$this->info_box_contents[$i][4] = array('td' => 'align="right"',
'text' => dol_trunc(number_format($objp->total_ttc, 2, ',', ' '),40),
'text2' => " €",
'url' => DOL_URL_ROOT."/compta/facture.php?facid=".$objp->facid);
$impayes += number_format($objp->total_ttc, 2, '.', ' ');

Cette ligne va cumuler le total des factures, et il ne reste plus qu’à afficher le total en bas du bloc des factures. Afin d’être logique, le total sera sous la colonne des montants. Il faudra donc donner des éléments vides à l’array de construction pour placer le total au bon endroit. Ce qui se fait avec le code suivant:

.....
$i++;
}
// code à ajouter ///////
$this->info_box_contents[$i][0] = array('td' => 'align="left" width="16"',);

$this->info_box_contents[$i][1] = array('td' => 'align="left"',);

$this->info_box_contents[$i][2] = array('td' => 'align="left" width="16"',);

$this->info_box_contents[$i][3] = array('td' => 'align="left"',);

$this->info_box_contents[$i][4] = array('td' => 'align="right"',
'text' => dol_trunc($impayes,40),
'text2' => " €",);
// fin de code à ajouter /////
if ($num==0) $this->info_box_contents[$i][0] = array('td' => 'align="center"','text'=>$langs->trans("NoUnpaidCustomerBills"));
.....

Repérez vous grâce à la ligne $i++ pour placer le reste après, avant la ligne if ($num==0) …

Résultat final

Conclusion

J’utilise ces modifications depuis plusieurs jours sans aucun soucis, et j’avoue que c’est bien plus pratique que l’affichage de base de Dolibarr.
Notez que vous devrez ré-appliquer ces modifications après chaque mise à jour de Dolibarr.

Vous pouvez aussi télécharger les fichiers modifiés que je met à votre disposition et les copier dans votre installation de Dolibarr.

Installer un serveur LAMP avec Ubuntu

Un serveur LAMP signifie Linux Apache Mysql Php. Il est possible d’installer et configurer chacun des services manuellement, mais il existe une autre façon plus simple et moins connue de faire tout ceci en une seule fois.

Dans un terminal, entrez ceci:

sudo tasksel install lamp-server

Et c’est tout!

Ou alors:

sudo tasksel

tasksel

Et sélectionnez LAMP server, ou tout autre service que vous désirez installer.

Utilisation de Bazaar

Bazaar est un gestionnaire de version. L’un de ses avantages est qu’il permet d’utiliser les protocoles ssh ou ftp, ce qui signifie qu’il n’est pas nécessaire de monter un « serveur » bazaar pour l’utiliser; il suffit d’un serveur où vous pouvez vous connecter en ssh.

Classement des dossiers

L’organisation des dossiers est laissée à votre goût, mais pour simplifier les explications, voici l’organisation que nous allons adopter sur le serveur:

  • Un dossier à la racine nommé bzr qui contiendra les divers projets à versionner
  • Un dossier par projet dans le dossier /bzr (projet1 et projet2 )
  • Les droits en lecture/écriture pour les membres du groupe projets sur le dossier /bzr (récursivement)
addgroup projets              # ajout d'un groupe projets
adduser manu projets        # ajout de l'utilisateur au groupe projets
mkdir -p /bzr/projet1         # création du dossier du premier projet
mkdir -p /bzr/projet2         # création du dossier du deuxième projet
chgrp -R projets /bzr         # attribution du groupe projet à tous les fichiers du répertoire /bzr
chmod -R g+rw /bzr          # attribution des droits en lecture/écriture à tous les fichiers pour les membres du groupe projets

Il n’est pas nécessaire d’installer bazaar sur le serveur, mais il est nécessaire que l’accès par ssh fonctionne, avec ou sans mot de passe.

Sur les clients

Mise en place du projet sur le serveur

Ce sont les clients (qui vont modifier le code des projets) qui doivent installer le logiciel bazaar

apt-get install bzr python-paramiko

Les préférences de bazaar (limitées) se trouvent dans Système/Préférences/Bazaar preferences

Ce sont eux, aussi, qui vont initier le versionning, à l’endroit qui leur va bien:

mkdir ~/projets
mv ~/Bureau/monprojet ~/projets # déplacement des fichiers du prototype dans les projets
cd ~/projets/monprojet
bzr init                        # initialisation du versionning du projet
bzr add *                    # ajout de tous les fichiers (récursif) au versionning
bzr commit -m "Création" # prise en compte des modifications avec le commentaire "Création"
bzr push sftp://manu@server/bzr/projet1 --use-existing-dir # envoi de la version du projet sur le serveur en utilisant les répertoires créés plus haut.

Récupération des fichiers sur un autre client

mkdir ~/beauprojet     # création du dossier qui va accueillir le projet
cd ~/beauprojet
bzr init                     # initialisation du dossier au versionning
bzr merge sftp://toto@server/bzr/projet1/  # intégration des fichiers de "monprojet" dans le dossier "beauprojet" dans lequel on se trouve

Chacun des clients possède maintenant les fichiers sur lesquels effectuer les développements

Codage!

Les clients vont effectuer les modifications sur les documents. Après chaque modification (enfin, chaque fin de bloc de modification) ou avant l’envoi des fichiers modifiés, il faudra effectuer la commande suivante (qu’ils aient décidé ou non d’envoyer les fichiers sur le serveur. Les commit peuvent être fait hors connexion.):

bzr commit -m "message"

qui permet de prendre en compte les modifications effectuées dans le versionning et, accessoirement, de revenir à une version antérieure.

Il suffit ensuite « d’assembler » les fichiers modifiés avec ceux du serveur, que ceux ci aient été modifiés ou non par une autre personne:

bzr merge sftp://toto@server/bzr/projet1/

Enfin, les fichiers « finaux » sont envoyés sur le serveur afin d’être disponibles pour tous les développeurs:

bzr push sftp://toto@server/bzr/projet1/

A retenir

  • Il ne suffit pas d’ajouter un fichier/dossier au répertoire du projet pour qu’il soit pris en compte. Il faut le faire manuellement avec bzr add lefichier
  • Pour supprimer un fichier, il faut utiliser bzr remove lefichier
  • la commande bzr status permet de savoir l’état des fichier (plus exactement, du versionning)
  • La commande bzr log permet de voir le log des changements avec les commentaires
  • la commande bzr conflicts affiche les versions de fichiers en conflits
  • La commande bzr resolve lefichier permet de résoudre les conflits dans le fichier lefichier
  • Le manuel de bzr donne plein d’informations et de commandes utilisables

Interface graphique

Il existe une interface graphique pour bazaar nommée olive (paquet bzr-gtk) que je n’ai pas réussi à utiliser: impossible de comprendre les messages d’erreur (pas parlant) et pas trouvé de configuration à effectuer (ni dans le programme, ni dans les fichiers de configuration).

Pas grave, je suis un adepte de la ligne de commande.

Autres sources:

http://bazaar-vcs.org/fr/IntroductionABzr

Créer (compiler et packager) ses programmes en paquet .deb pour ubuntu ou debian

Le programme Debdevel permet de créer facilement et rapidement des paquet deb pouvant être installés sur Ubuntu, mais aussi toutes les dérivées de debian utilisant le gestionnaire de paquets apt (knoppix, mepis, …), à partir de vos propres programmes ou à partir de sources d’autres programmes.

Vous pourrez packager vos programmes, quel que soit le language de programmation (python, bash, C, …), voire même des documentations, fiches techniques, fichiers texte, … (bien que l’intérêt en soit limité, ça reste possible).

Mais ce logiciel (cette suite de logiciels, en fait), va plus loin, puisqu’elle vous permet aussi de:

  • Générer automatiquement des squelettes de documentation qu’il ne reste plus qu’à remplir (il est possible de rajouter vos propres modèles de documentation, au format voulu),
  • Créer un dépôt personnel en local,
  • Gérer un dépôt public (local ou distant),
  • Gérer trois niveaux de développement (dev, beta et stable),
  • Publier seulement l’un ou plusieurs niveaux de développement, et garder les autres privés,
  • Gérer autant de paquets que désiré, dans chacun des niveaux de développement,
  • Gérer autant de dépôts que désiré,
  • Tout faire graphiquement, sans ligne de commande ,
  • Tout fonctionne avec le clic droit de nautilus (bientôt konqueror et dolphin pour les utilisateurs de KDE, mais les logiciels fonctionnent cependant en ligne de commande avec KDE) ,
  • Trouver facilement une dépendance dans l’ensemble de vos paquets,
  • Trouver facilement et rapidement un terme ou du code dans l’ensemble des scripts de vos paquets,
  • Et d’autres choses en cours de développement.

Menu du clic droit

Bref, il faut 3 minutes sans connaissance particulière pour créer un dépôt, 3 minutes pour créer un paquet et y installer votre programme, 1 minute pour en faire un paquet deb et une minute pour le rendre public et accessible à vos utilisateurs par leur gestionnaire de paquet (apt-get, aptitude ou synaptic) qui les avertira automatiquement lorsqu’une mise à jour sera disponible. Et la mise à jour d’un paquet (en dehors du temps de correction de votre programme) prend moins d’une minute.

De quoi développer rapidement et facilement, sans se préoccuper de gérer les versions ou craindre de mélanger les programmes de dev avec les versions publiques, et éviter de passer du temps à se demander comment créer un paquet deb pour les publier!

Précisons quand même que ce programme ne développera pas de programmes à votre place mais vous simplifiera le packaging et la distribution de ceux ci.

La documentation est accessible ici . Elle vous indique toutes les procédures, du téléchargement à l’utilisation.