Perl/Glade/Gettext – Multilingue programme

Suite à un email d’une personne intéressée par la traduction de Xsshfs en Espagnol j’ai découvert Gettext n’ayant pas trouvé beaucoup de documentation précise je vais faire un petit HelloWorld en Perl Glade (pour l’interface GTK) et Locale::gettext

Le petit bout de programme que nous allons faire dépend de libgtk2-gladexml-perl & de liblocale-gettext-perl

Création des fichier de traduction

Après création du fichier Glade (que vous pouvez télécharger ici : helloworld.glade) il faut s’assurer que tous les champs que l’on souhaite traduire on la balise « translate » à « yes »

$ grep translatable helloworld.glade
<property name="title" translatable="yes">HelloWorld</property>
<property name="label" translatable="yes">Hello World</property>
<property name="label" translatable="yes">Just one button</property>

Du coup nous allons extraire les données à traduire du fichier glade avec xgettext

$ mkdir po
$ xgettext --sort-output --keyword=translatable -o po/helloworld.pot helloworld.glade

Ouvrez le fichier po/helloworld.pot et compléter avec votre adresse email / nom ect…

Ensuite faites des copies de ce fichier et commencer la traduction (dans notre exemple Anglais -> Français) :

$ cp po/helloworld.pot po/fr.po
$ vi po/fr.po
...
#: helloworld.glade:20
msgid "Hello World"
msgstr "Bonjour tout le monde"

#: helloworld.glade:8
msgid "HelloWorld"
msgstr "Bonjour"

#: helloworld.glade:36
msgid "Just one button"
msgstr "Juste un bouton"

Théoriquement les traductions dans un système linux se trouve dans le chemin /usr/share/locale/fr/LC_MESSAGES mais nous allons les mettre dans un répertoire enfant (./locale) pour notre exemple. Ces traductions sont à « compiler » en .mo

$ mkdir ./locale/fr/LC_MESSAGES
$ msgfmt ./po/fr.po -o ./locale/fr/LC_MESSAGES/helloworld.mo

Intégration dans le perl

Voici le fichier helloworld.pl

#!/usr/bin/perl -w
use helloworld ;
Gtk2->main ;

Et voici le fichier helloworld.pm

package rappels ;

use strict;
use warnings "all";
use Locale::gettext;

use vars qw($gladexml) ;
# $gladexml est donc la variable qui fera référence à l'arbre xml
# de l'application.
# On initialise la valeur de la variable quand l'arbre est créé
# dans le module principale

sub init {
# Démarage de l'interface graphique
$gladexml = $X::gladexml ;
bindtextdomain("helloworld", "./locale");
textdomain("helloworld");
# Sans traduction
print "HelloWorld\n";
# Avec traduction
print gettext("HelloWorld"), "\n";
}
sub on_window1_delete_event{
Gtk2->main_quit ;
}
sub on_bouton_quitter_clicked{
Gtk2->main_quit ;
}

1 ;

package X ;

use strict ;
use Locale::gettext;

bindtextdomain("helloworld", "./locale");
textdomain("helloworld");

require Exporter ;
use vars qw(@EXPORT_OK) ;
@EXPORT_OK = qw ($gladexml) ;
use vars qw($gladexml) ;

use Gtk2 '-init' ;
use Gtk2::GladeXML ;

# On crée l'arbre xml complet. Attention, toutes les fenêtres déclarées
# visibles dans le menu Propriétés->commun->visible, seront affichées
# quand on lancera "Gtk2->main".
$gladexml = Gtk2::GladeXML->new('helloworld.glade' ) ;
# On initialise les variables du module rappels.
rappels::init () ;
# On connecte les fonctions de rappels de l'arbre xml
# à leurs définitions qui sont contenues dans le module rappels.
$gladexml->signal_autoconnect_from_package('rappels' ) ;

1 ;

Tester

Mon poste est en français, je vais donc tester en français puis en forçant l’anglais :

$ echo $LANG
fr_FR.UTF-8
$ perl helloworld.pl
HelloWorld
Bonjour
$ # L'interface doit aussi s'afficher en français
$ LANG=en_US.utf-8
$ perl helloworld.pl
HelloWorld
HelloWorld
$ # L'interface doit aussi s'afficher en anglais

Téléchargement

Vous pouvez télécharger l’intégralité du HellloWorld.pl :

Les liens m’ayant bien aidé :

Xsshfs v0.4 est de sortie…

Xsshfs est un petit programme Perl écrit par mes soins qui permet d’utiliser la commande SSHFS graphiquement. Celui-ci est maintenant disponible en version 0.4.

Au menu des petits plus :

  • Sélection d’une clef SSH possible
  • Le champs « Autres options » c.f. man sshfs
  • Une petite ré-organisation des champs pour épurer l’interface
  • Ajout de paramètres à la commande xsshfs :  –help | –version | –ficheirConfig | –debug

Les liens du projet

Pour l’installation :

$ wget http://xsshfs.zici.fr/files/xsshfs_current.deb ; sudo dpkg -i xsshfs_current.deb ; sudo apt-get install -f ; rm xsshfs_current.deb </code>

autossh & tsocks – Tunnel socks permanent

Le but va être de créer un tunnel socks permanent s’appuyant sur un serveur ssh.

En préalable créer une clef ssh sans passphrase et déployez la sur le serveur. Comment faire?

$ sudo aptitude install tsocks autossh

Voici mon fichier de configuration tsocks :

$ grep -E -v '^(#|$)'  /etc/tsocks.conf
local = 192.168.0.0/255.255.255.0
server = 127.0.0.1
server_type = 5
server_port = 8080

Pour tester votre tunnel :

$ autossh -f -N -D localhost:8080 utilisteurDistant@serveurDistant -p portDuServeurSSH

$ netstat -pnat | grep 8080
tcp        0      0 127.0.0.1:8080          127.0.0.1:32977         ESTABLISHED 2552/ssh
tcp6       0      0 ::1:8080                :::*                    LISTEN      2552/ssh

$ # Tuer le tunnel :

$ killall autossh 

Pour que le tunnel monte à tous les démarages. ajouter cet ligne dans le fichier /etc/rc.local (juste avant le exit)

su - utilisateurLocal -c "/usr/bin/autossh -f -N -D localhost:8080 utilisteurDistant@serveurDistant -p portDuServeurSSH"

Si tout s’est bien passé vous pouvez a présent paramétrer vos applications avec le proxy socks ou les lancers avec la commande tsocks :

$ tsocks firefox "http://monip.org" &

$ tsocks lastfm &

$ tsocks rtorrent 

ISPconfig Postfix & Dovecot : unknown user

Après une installation de ISPconfig avec Dovecot sur une Debian j’ai eu un problème de réception d’email :

May 31 21:40:05 popof postfix/local[16076]: 94C832A028C8: to=<xxxxxxxxxxxxxxx>, orig_to=<xxxxxxxxxxxxxxxxxx>, relay=local, delay=2.3, delays=0.04/0.01/0/2.2, dsn=5.1.1, status=bounced (unknown user: "david")

La solution est de modifier le fichier dovecot-sql.conf comme ceci :

125,126c125
> user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE login = '%u' AND disable%Ls = 'n'
---
< #user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE login = '%u' AND disable%Ls = 'n'
< user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE login = '%u' OR email = '%u' AND disable%Ls = 'n'

La solution a été trouvé ici : http://www.howtoforge.com/forums/showthread.php?t=56499&page=2

Serveur proxy Squid3 avec SSL (rebuild debian squeeze package)

Le paquet Debian pour squid3 n’a pas été compiler avec l’option « –enable-ssl » il va donc falloir recompiler le paquet avec cet option.

# Installation des outils de compilations
apt-get install devscripts build-essential fakeroot libssl-dev
# Déplacement dans l'environnement de travail
cd /usr/src
# Téléchargement des sources
apt-get source squid3
# Installation des dépendances pour la compilation
apt-get build-dep squid3
# Édition des règles de compilations
cd /usr/src/squid3-3.*
# Ajouter dans "--enable-ssl \" dans le fichier rules
vi debian/rules
# Compilation
./configure
debuild -us -uc -b
# Installation des paquets :
cd ..
dpkg -i  squid3_*.deb squid3-common_*.deb

Générer le certificat

Pour le SSL il nous faut un certificat

mkdir /etc/squid3/ssl
cd /etc/squid3/ssl
openssl genrsa -des3 -out privkey.pem 204
openssl req -new -x509 -nodes -key privkey.pem -out cacert.pem -days 3650
# Retirer la passphrase
openssl rsa -in privkey.pem -out privkey_noPwd.pem

Configuration de squid

Modification du fichier /etc/squid3/squid.conf

Edit : De Bourseguin : omission de libssl-dev

XtraFile – Function set_magic_quotes_runtime() is deprecated

dl.zici.fr est un service d’hébergement de fichier gratuit. J’utilise xtrafile pour le motoriser. Après avoir mis à jour PHP j’ai eu une belle surprise :

Du coup la solution :

cd /var/www/dl.zici.fr
find . -name CodeIgniter.php -exec sed -i 's/set_magic_quotes_runtime (0);/ini_set ("magic_quotes_runtime", 0);/g' {} \; -print
find . -name *.php -exec sed -i 's/=&/=/g' {} \; -print

[Debian squeeze] Serveur postfix + dovecot LDA avec OpenLdap

Un annuaire LDAP (avec le schéma misc) est déjà en place, nous souhaitons monter un serveur de mail SMTP/IMAPS en s’appuyant sur l’authentification de l’annuaire LDAP :

apt-get install postfix postfix-ldap dovecot-imapd

Postfix

Tout d’abord /etc/postfix/main.cf :

smtpd_banner = $myhostname
biff = no
append_dot_mydomain = no
readme_directory = no
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
myhostname = hostname.zici.fr
myorigin = /etc/mailname
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = /usr/lib/dovecot/deliver
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
luser_relay =
alias_maps = hash:/etc/aliases
virtual_mailbox_domains = zici.fr, mercereau.info, liencontrelien.zici.fr
virtual_alias_maps = hash:/www/zici/emailPoubelle/virtual
dovecot_destination_recipient_limit = 1
virtual_transport = dovecot
mailbox_transport = dovecot
dovecot_destination_recipient_limit = 1

Dans le fichier master.cf il suffit de rajouter la ligne suivante à la fin du fichier:

# Dovecot LDA
dovecot unix - n n - - pipe flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient} -d ${user}

Dovecot

Il n’y a que 2 fichiers de conf, d’abord, /etc/dovecot/dovecot.conf

protocols = imap imaps
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/var/mail/%n
mail_uid = 500
mail_gid = 8
mail_privileged_group = mail
protocol imap {
imap_client_workarounds = outlook-idle
}

protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
}
protocol managesieve {
}
protocol lda {
postmaster_address = postmaster@zici.fr
auth_socket_path = /var/run/dovecot/auth-master
}
auth default {
mechanisms = plain login
passdb pam {
}
passdb ldap {
args = /etc/dovecot/dovecot-ldap.conf
}
userdb ldap {
args = /etc/dovecot/dovecot-ldap.conf
}
user = root
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = vmail
group = mail
}
}
}
dict {
}
plugin {
}

et enfin /etc/dovecot/dovecot-ldap.conf

hosts = 127.0.0.1
auth_bind = yes
ldap_version = 3
base = ou=Utilisateur,dc=zici,dc=fr
user_attrs = uidNumber=500,gidNumber=8
user_filter = (&(objectClass=posixAccount)(cn=%n))
pass_filter = (&(objectClass=posixAccount)(cn=%n))
default_pass_scheme = SSHA

Astuce pour tester les filtres utiliser la commande

 ldapsearch -x -h localhost -b "ou=Utilisateur,dc=zici,dc=fr" '(&(objectClass=posixAccount)(cn=Utilisateur))'

Source :

  • http://www.404blog.net/?p=36
  • http://monblog.system-linux.net/blog/2011/05/12/ajouter-des-schemas-dans-votre-annuaire-openldap-avec-debian-squeeze/
  • http://www.rjsystems.nl/en/2100-d6-openldap-provider.php