Kavod Company

Free blogware !

Archive for the 'Technique' Category

debian-sys-maint@localhost connection error on mysql

A very strange error occured during reboot of my server (just after apt-get upgrade):

error: ‘Access denied for user ‘debian-sys-maint’@’localhost’
(using password: YES)’

After some search on the web, I found the solution.

The debian_sys_maint user is the one used by mysql user system under debian sytems. In order to fix this (seeming to be a grant error) do like this:
Save the password of debian_sys_maint user which is localized in /etc/mysql/debian.cnf file (readable only by root):

sudo more /etc/mysql/debian.cnf

The file is in following format:

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host = localhost
user = debian-sys-maint
password = ftL7po8KaZD4Vh0a <= The debian user system password
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
user = debian-sys-maint
password = ftL7po8KaZD4Vh0a
socket = /var/run/mysqld/mysqld.sock
basedir = /usr

Save somewhere this password, then connect on mysql under root:

mysql -u root -p

and execute following command:

mysql > GRANT ALL PRIVILEGES ON *.* TO ‘debian-sys-maint’@'localhost’
IDENTIFIED BY ‘your_password’ WITH GRANT OPTION;

And should be OK now.

Article translated from “Chérie, je l’appelle comment mon blog ? French language website

1 comment

Configure an internal multicard reader on GNU/Linux

Today, I put an internal multicard reader on my principal workstation.

It’s look like that:

multicarte

and it allows to read several storage card like SD, MMC, Compact Flash.

Its setup is no really difficult… if you know 2 or 3 things :)

First: this hardware must be pluged on the USB ports of the motherboard which looks like that:

9 in 1 pin USB port

Please note the color sequence: red - white - green - black

Once plugged, the kernel must be configured like that:

Device Drivers —>
SCSI device support —>
<*> SCSI device support
<*> SCSI disk support
<*> SCSI generic support
[*] Probe all LUNs on each SCSI device
USB support —>
<*> Support for Host-side USB
<*> EHCI HCD (USB 2.0) support
<*> OHCI HCD support
<*> UHCI HCD (most Intel and Via) support
<*> USB Mass Storage support

I insist on the 4th option (Probe all LUNs etc.) which is fundamental to be able to manage several cards on the same USB port.

The device files created will be something like that: /dev/hdb1, hdc1, hdd1 etc.

No comments

Google Map module for Gallery 2.2

This article will be written in English, eventually to be readable by the maintainers of the development I’ll talk about. Sorry for the French speakers and, especially, for the English speakers for my terrible poor language practice.
So, like my frequently users know, this homepage is made with Wordpress and Gallery for the photos. Both of them are linked by a plugin called WPG2. I found last week a great module for gallery2 => GMAP module.

It is a module which allow to retrieve EXIF GPS data from picture and to embed a Google Map in Gallery in order to show the place the photo has been taken.

Unfortunately, after install, the plugin didn’t work… very well. Pictures were located under Africa (in spite of I do not remember Italy was so far), lot of pages failed (with indigestible error messages) etc.

After few nights remembering my far PHP knowledge and discovering the evolution of coding during my inactive development period (the object oriented concept is now strongly embed in PHP), I debugged the functionalities I wanted.

I do not support the idea my improvement are perfect or universal (eg. I circumvented a switch to detect the GPS coordinates format to put my own reading coordinates algorithm) but maybe it can help some users to make GMAP module working or maintainers to unblock the subversion files.

In all case, I provide my modifications first to save and eventually reapply them after a apti-get update of my server.

In modules/map/MapGroupAdmin.inc AND modules/map/MapRouteAdmin.inc (exactly the same modification)

Put these two lines in comment

GalleryCoreApi::requireOnce(’modules/core/classes/helpers/GalleryPermissionHelper_medium.class’);
list($ret,$perms)=GalleryPermissionHelper_medium::fetchPermissionsForItems($ids,$gallery->getActiveUserId());
And add these ones instead

GalleryCoreApi::requireOnce(’modules/core/classes/helpers/GalleryPermissionHelper_advanced.class’);
list($ret,$perms)=GalleryPermissionHelper_advanced::fetchAllPermissionsForItem($ids);

The GalleryPermissionHelper_medium class does not (no longer ?) exists, I had to adapt function with GalleryPermission_Helper_advanced one. Note this modification must be done in the two files with the same way.

In modules/map/MapSiteAdmin.inc

Find these two lines:

$lat = explode(" ",str_replace(",",".",$exifData[$id]['GPS/Latitude']['value']));

$lon = explode(" ",str_replace(",",".",$exifData[$id]['GPS/Longitude']['value']));

And replace the $id index by $i like that:

$lat = explode(" ",str_replace(",",".",$exifData[$i]['GPS/Latitude']['value']));

$lon = explode(" ",str_replace(",",".",$exifData[$i]['GPS/Longitude']['value']));

It certainly was a typing mistake by a developer.

In modules/exif/lib/exifer/makers/gps.inc

Put into comment the following lines:

$hour = GPSRational(substr($data,0,16),$intel);
$minutes = GPSRational(substr($data,16,16),$intel);
$seconds = GPSRational(substr($data,32,16),$intel);
And add these ones:

$hour = hexdec(substr($data,40,8));
$minutes = hexdec(substr($data,24,8))/((float)hexdec(substr($data,16,8)));
$seconds = 0;
For this… I do not have any idea about why my EXIF data do not correspond with the reading algorithm of the original module… But with my modification, they do.
So, use this patch if and only if you have some problem of reading of GPS coordinates.

In modules/map/ShowMap.inc

AFTER these lines:

SELECT [GallerymapMap::itemId],
[GallerymapMap::value]
FROM [GallerymapMap]
WHERE [GallerymapMap::field] = \’GPS\’
ADD (and NOT REPLACE) this one:

AND [GallerymapMap::value] <> \’0,0\’
This modification is to avoid timeout problem if the majority of your pictures have none or unreadable GPS data.

That’s all ;)

Thanks to make me know if you have some difficulty with my explanation (or with my English ;) ) and do not hesitate to:

  • Execute
  • Study
  • Redistribute
  • Improve

my code… like GPL licence oblige me and you ;)

No comments

Adaptateur USB Bluetooth

Alors aujourd’hui, nous allons voir comment apprendre à notre pingouin à utiliser ceci :

Adapatateur USB Bluetooth

Oui, je peux pas être plus précis car c’est une vieille clef USB bluetooth récupérée je ne sais où et je ne sais quand… bref, marque inconnue ;)

1- Configuration du noyau

Je me sers ici d’un noyau 2.6.22-gentoo-r1 :

 Networking  --->
  <*> Bluetooth subsystem support  --->
   <*> L2CAP protocol support
   <*> RFCOMM protocol support
    [*] RFCOMM TTY support
   Bluetooth device drivers  —>
     <*> HCI USB driver
     <*> HCI BPA10x USB driver
     <M> HCI BlueFRITZ! USB driver 

2- Chargement des modules au démarrage :

Ajouter dans /etc/modules.autoload.d/kernel-2.6 afin que les modules soient automatiquement chargés lors du démarrage

#Bluetooth
bfusb

Mais comme, sous Linux, jamais besoin de redémarrer :

# modprobe bfusb

3- Installation des logiciels/drivers

Dans le cadre de la gentoo, rajouter bluetooth dans la variable USE de /etc/make.conf.

Puis, lancer l’installation des 3 packages suivants :

  • bluez-utils : différent outils et le Daemon nécessaire à la détection de périphériques distants
  • openobex : implémentation du protocole de transfert de fichiers par bluetooth
  • obexftp : encapsulation de FTP à travers le protocole OBEX
  • kdebluetooth : implémentation bluetooth dans KDE
    ou gnome-bluetooth : idem pour Gnome

 emerge -av bluez-utils openobex obexftp  kdebluetooth

Enfin, un petit emerge -uDNav world ne serait pas de trop pour prendre en compte le USE flag “bluetooth” dans les packages déjà installés

 4- Démarrage des services bluetooth

Lançons le service bluetooth :

 /etc/init.d/bluetooth
* Shutting down Bluetooth … [ ok ]
* Starting Bluetooth …
* Starting hcid … [ ok ]
* Starting rfcomm … [ ok ]

Si tout se passe bien : ajoutons en démarrage automatique :

rc-update add bluetooth default
* bluetooth added to runlevel default

  5- Découverte des services

Détection de notre périphérique

 # hciconfig
hci0: Type: USB
BD Address: 11:11:11:11:11:11 ACL MTU: 678:8 SCO MTU: 48:10
UP RUNNING PSCAN
RX bytes:9283 acl:85 sco:0 events:257 errors:0
TX bytes:37492 acl:118 sco:0 commands:100 errors:0

UP RUNNING signifie que mon périphérique est bien actif. Si ce n’est pas le cas, je l’active ainsi :

# hciconfig hci0 up

Nous allons maintenant scanner les périphériques distants :

 # hcitool scan
Scanning …
00:14:51:55:81:11               Ordinateur de Amélie
00:1B:AF:CB:99:83         Kavod N70

J’obtiens donc la liste des périphériques détectés avec leur adresse MAC.

Afin de lancer le Daemon pour kde, il suffit de lancer en user mode :

boris@cid ~ $ kbluetooth

Un petit témoin apparait à coté de l’horloge afin de naviguer parmi les périphériques détectables

No comments

XPOLA 1970 > Configuration Xorg

Même si ça fait un moment que je n’ai pas fais d’article, on va faire dans le cours :)

Je suis donc le nouveau heureux propriétaire de l’écran wide LCD XPOLA 1970.

xpola

Vient donc évidement la question : comment qu’on le configure sur Xorg ? Malheureusement, cet écran ne semble pas communiquer (ou du moins pas correctement) son EDID (1).

Alors, pour ne pas passer des heures à chercher son Modeline, le voici :

“1440×900″ 137.61 1440 1504 1824 1952 900 902 914 940 #75Hz

Ce qui me donne donc le xorg.conf suivant : [xorg.conf]

Et voilà ! :)

(1) EDID sur Wikipedia 

2 comments

Splash sur mon Linux !!!

[UPDATE : utilisation du framebuffer Vesa à la place du nvidia qui n’est pas compatible avec les drivers propriétaires (que, j’avoue, j’utilise)
De plus, j’ai mis à jour les résolutions en fonction de mon nouvel écran : le Xpola 1440×900]

Rassurez-vous, mon Linux va très bien :) Il n’est pas tombé à l’eau ou quoique soit d’autres. GenSplash est simplement un outil permettant de personnaliser l’écran d’ouverture de votre machine.

En effet, la plupart d’entre vous voient ceci en allumant leur machine :

winxppro.png

Les moins chanceux ont même ceci :

macosx101-2-1.png

Hé bien moi je peux mettre n’importe quel type d’image comme :

ca

Theme-Dolphin-silent.png

, ca

Theme-FarCry-silent.png

, ou bien encore ceci

Theme-TuxInfo-silent.png

Mais c’est pour un splashscreen beaucoup plus sobre que j’ai opté :

livecd-2006_0-1280x1024-silent.png

Quoiqu’il en soit, voici comment que j’ai procédé sur une Gentoo ~x86 (mais la procédure doit être identique en x86).

Installation de l’outil splashutils :

emerge -va splashutils splash-themes-gentoo splash-themes-livecd

Puis, petite modification du kernel :

Linux Kernel Configuration: 2.6
Device Drivers > Graphics support:
[*] Support for frame buffer devices
< *>   VESA VGA graphics support
VESA driver type (vesafb-tng)  --->
(1280x1024-24@60) VESA default mode
Device Drivers > Graphics support > Console display driver support:
[*] Video mode selection support
< *> Framebuffer Console support
Device Drivers > Graphics support:
[*] Support for the framebuffer splash
Linux Kernel Configuration: Nécessaire si on veut charger l’image dynamiquement (sans recompiler à chaque fois son kernel)
Device Drivers > Block devices:
< *> RAM disk support
(4096) Default RAM disk size (kbytes) (NEW)
[*]   Initial RAM disk (initrd) support
Linux Kernel Configuration: Désactivation du tileblitting support.
Device Drivers > Graphics support:
[ ] Enable Tile Blitting Support
Linux Kernel Configuration: Afin d’avoir une touche F2 réactive, activer l’interface d’évènements
Device Drivers > Input Device Support
[*]Event Interface

On compile tout cela, puis nous allons créer notre initrd de la manière suivante

#On se rend dans le répertoire contenant tous les thèmes
cd /etc/splash
# Puis on créer un fichier d’amorcage :
splash_geninitramfs emergence -r 1440×900 -g /boot/initrd.img -v

Enfin, il faut mettre à jour le grub. De mon coté, ça donne ceci:

title=Gentoo Linux 2.6.22-gentoo-r6 Bootsplash
root (hd0,0)
kernel /kernel-2.6.17-gentoo-boot root=/dev/sda2 doscsi video=nVidiafb:ywrap,mtrr:2,1280×1024-24@60 splash=silent,fadein,kdgraphics,theme:livecd-2006.0 quiet fbcon=scrollback:128K
kernel /kernel-2.6.22-gentoo-r6 root=/dev/sda2 doscsi video=visafb:ywrap,mtrr:2,1440×900-24@54 splash=silent,fadein,kdgraphics,theme:livecd-2007.0 quiet fbcon=scrollback:128K console=tty1
initrd /boot/initrd.img

Pour obtenir d’autres thèmes, il suffit d’exécuter

emerge bootsplash-themes

ou bien de se rendre sur http://www.bootsplash.de/

Sources :

Gentoo-Wiki.com
Site de developement Gentoo de Spock

2 comments

PHP My Interface

Cette fois-ci, je ne vais rien vous apprendre.

En fait voilà un gros problème auquel je fais face régulièrement (et je présume que je ne suis pas le seul). Disons que je met en place un site Internet. Dessus, je vais mettre un phpBB forum en PHP. Ensuite, je veux ajouter un bugtracker mantis, une gallerie photos gallery2 et un système de blog tel que wordpress.

Au total, je me retrouve avec 4 bases d’utilisateurs, 4 systèmes de templates différents et de nombreuses autres informations qui pourraient être mutualisées mais qui ne le sont pas.

Oui, je vous entend déjà dire “il existe des patchs d’intégration”. Il est vrai et d’ailleurs ce blog l’illustre bien (intégration Gallery2 / Wordpress). Mais mais mais :

  1. Chaque mise à jour de l’un ou l’autre des systèmes est une gallère
  2. Deux ça va, trois bonjour les dégats
  3. Malgré le bon travail pour certains d’entre eux… tout n’est pas forcément facilement intégrable

D’où une idée : PHP My Interface qui consisterait à mettre en place une “librarie” assez flexible pour être facilement branchable sur toute application PHP.

Après pas mal de réflexion, voici les conclusions auquels je suis arrivé.

Concernant les fonctionnalités à mutualiser :

  1. Système de template (afin de rendre plus facile d’intégration graphique de chaque application).
  2. Base utilisateur et toute fonction assurant la maintenance (ajout / modification / vérification mot de passe / permissions…)
  3. Gestion des erreurs
  4. … voire même (soyons fou) interface d’administration

Je verrai la réalisation de la manière suivante (disons dans le cas des users).

Après l’installation de phpbb et mantis (pour prendre un exemple) je vais dans un panneau d’administration PHPMyInterface (que nous appellerons PMI). J’indique que j’utilise ces deux systèmes là et un patch est automatique appliqués aux deux systèmes :

  • Un patch SQL qui va mettre en place des tables users communes, avec évidemment des champs spécifiques à chacun d’entre eux
  • Un patch PHP qui va rediriger tous les appels vers des fonctions user vers des fonctions interface (pmi_user_add par exemple).
  • Un patch “HTML” qui redirige tous les écrans “user” vers des page variables ($pmi_page_user_add).
Ensuite, j’indique que le système que je souhaite utiliser pour cette fonctionnalité. Ici, disons phpbb. Ceci a pour effet :
  • D’affecter comme nom de fichier aux “pages variables” les pages de phpbb ( $pmi_page_user_add = ‘phpbb2/profile.php?mode=register’ pour schématiser). Ainsi, même quand je voudrais rajouter un user sur mantis, c’est une page phpbb qui s’affichera. Il faudra effectivement penser aux champs spécifiques à rajouter (inclus dans patch PHP ci-dessus)
  • De faire en sorte que mes fonctions interfaces fassent appels aux fonctions phpBB.

Il ne s’agit donc pas de réinventer le feu (d’autres applications ont des gestions utilisateurs on ne peut plus stable) mais bel et bien de rajouter une surcouche tout en laissant le choix au webmestre de choisir quel sera le système qui sera en dessous.

Et puis, dans le meilleur des mondes, si un tel système devenait référence, les patches ne seraient plus à faire. Ils pourraient devenir natifs dans les applications PHP qui sortiraient.

Ce sujet me tiens vraiment à coeur. Cependant je me suis déjà pris pas mal la tête dessus tout seul dans mon coin et le temps ne me permet pas de faire ce projet de A à Z sur du long terme.

C’est pour cela que je lance une bouteille à la mer. Si vous êtes intéressé par une telle aventure : je suis preneur !

No comments

PTP sur Gentoo Linux

Amis Linuxiens, bonsoir !

Je reviens donc à mes articles techniques suite à une bonne soirée de perdue sur le protocole PTP sur Linux.

Qu’est-ce que le PTP me direz-vous ? Picture Transfer Protocol, un protocole pour transférer… des photos :) L’utilisation la plus standard pour la plupart des appareils photos numériques est une intégration aux logiciels de photos (gphoto2, digikam…) pour un transfert simplifié. Rien de très utile puisqu’un simple montage en usb-storage peut suffire, mais pratique.

Cependant, dans des appareils un peu plus perfectionnés, on peut trouver un bon nombre d’autres fonctionnalités comme pas mal de réglage de l’appareil (ce qui servirait, je présume, à transformer votre appareil en webcam).

Bref, je pars donc d’un linux poste de travail :

  • Gentoo Linux
  • Noyau 2.6.16
  • Udev
  • Hotplug

La librairie nécessaire est libptp2 (qui dépend de gphoto il me semble). Un test rapide consiste à faire gphoto2 –auto-detect. Jusqu’à là, tout allait bien.

Ensuite, pour lister les photos : gphoto2 -L … et là ca marche plus (visiblement un problème de droit). Je tente donc en root et ça fonctionne… mais ce n’est pas satisfaisant !

Je passe donc des heures sur le paramétrage de hotplug… et c’est là mon erreur. Pour une raison qui m’est totalement inconnue, les droits que l’on peut poser sur /proc/bus/usb/00x/0xx sont totalement ignorés. Ce n’est donc qu’après avoir perdu le peu de cheveux qui me reste que je modifie les règles de udev comme ceci :

SUBSYSTEM==”usb_device”, PROGRAM=”/bin/sh -c ‘K=%k; K=$${K#usbdev}; printf bus/usb/%%03i/%%03i $${K%%%%.*} $${K#*.}’”, NAME=”%c”, MODE=”0660″, GROUP=”plugdev”

(en rouge, ce que j’ai ajouté/modifé, vous l’aurez compris, mon utilisateur perso est dans le groupe plugdev)

Et là, ça marche tout comme il faut !

Voilà… j’ai surement encore beaucoup à apprendre sur udev… mais content d’être arrivé à boût de ce problème !

Juste un petit mot concernant digikam : je ne peux que vous le conseiller !!!! C’est un logiciel de photo compatible avec PTP donc (d’où cet article ce soir) et qui offre une tonne de mode d’exportation comme CD/DVD, site HTML, Flicks… mais surtout Gallery (version 2 très prochainement, je suis l’auteur de la correction qui le permet :o) C’est ce qui me permet de mettre à disposition les photos de ce site en quelques clicks !

No comments

Mise en place d’un routeur sous Debian

Voici donc le premier article “technique”.

Cette article (comme ses successeurs) n’aura pas pour but d’être pédagogue. C’est à prendre comme un bloc note avant tout pour moi (afin de retrouver facilement mes anciennes manipulations) et, si la claireté le permet, pour les éventuels linuxiens qui passeraient par là et qui pourraient trouver la réponse ici.

En ce gros Week-end de Pâques, je me suis enfin décidé à installer mo nouveau routeur afin, entre autres, de rendre ce superbe blog visible depuis l’Internet (ce qui ne serait pas un luxe).

Je pars donc de ceci :

  • Un petit PII 400MHz (la classe hein ;))
  • Une Debian sarge stable 2.6.8-2-386
  • Un modem Sagem F@st 908

Ce dernier élément est, d’après mes souvenir et ceci s’est confirmé, la partie la plus enquiquinante du processus.

Donc pour ceux qui se prendraient la tête sur cette installation, je leur conseille vivement le site http://www.eagle-usb.org/ afin de télécharger le module et son firmware associé.

De plus, l’article suivant m’a aussi bien aidé : http://www.bxlug.be/articles/263

Une fois la connexion modem établie, il s’agit de router les packages entre l’Internet et le réseau (d’où l’appellation “routeur”)

Pour ceci, un petit

sysctl -w net.ipv4.ip_forward=1

suffit. Cependant, pour que cette configuration soit initialisée à chaque redémarrage, il faut entrer la ligne suivante dans le fichier /etc/sysctl.conf

net/ipv4/ip_forward=1

Voici, voilà. Une fois tous les postes du réseaux configurés sur la bonne passerelle, l’Internet est redistribuée.

Et enfin, en ce qui concerne l’iptables, voici ce que j’ai indiqué via webmin :

Pour ce qui concerne les filtres

Table filter pour Iptables
C’est à dire que l’accepte que mon réseau local accède à mon routeur, mais pas le méchant grand Internet.

De plus, j’accepte de forwarder des depuis le net vers mon réseau local seulement si ce sont des connexions déjà instanciées (ce qui me permet d’avoir la réponse à une page Web par exemple). Petite exception, j’autorise l’instanciation de connexion sur le port 80 afin que vous puissiez regarder mon blog.

Par contre, depuis mon réseau local vers l’Internet, j’autorise aussi les nouvelles connexion afin de pouvoir ouvrir un dialogue vers un site extérieur par exemple (à condition que ce soit à mon initiative).

Enfin, dans les autres cas, je logge afin d’étudier. Mais seulement si ca représente moins de 10 paquets par secondes (sinon, il risque d’y avoir trop de logs et de faire planter ma machine).

En ce qui concerne les règles NAT :

Règles NAT d'Iptables
Je définie simplement que les packets qui viennent de l’extérieur vers le port 80 sont destinés à mon serveur Apache.

La règle mascarade permet simplement de transformer les packets qui vont vers l’extérieur avec mon adresse source publique (et non celle de mon réseau local qui n’a pas de sens pour le serveur distant).

No comments