Bug dans l’installation de GForge sur une debian lenny fr_FR

Un workaround pour ceux qui rencontrent des problèmes d’installation de Gforge sur une debian lenny.

Si votre GForge plante à  l’installation sur une debian lenny avec l’erreur :

 Cannot create PostgreSQL database...  This shouldn't have happened.
 Maybe a problem in your PostgreSQL configuration?
 Please report a bug to the Debian bug tracking system
 Please include the following output:
 CREATE DATABASE's STDOUT:
 SET
 CREATE DATABASE's STDERR:
 ERROR:  encoding UTF8 does not match server's locale fr_FR
 DETAIL:  The server's LC_CTYPE setting requires encoding LATIN1.
 dpkg : erreur de traitement de gforge-db-postgresql (--configure) :
  le sous-processus post-installation script a retourné une erreur de sortie d'état 1

c’est que Gforge est paramètré pour insérer en base en UTF8, malheureusement l’installation du Postresql a vu la locale fr_FR et s’est donc auto-installé en LATIN1.

Pour remedier à  la chose (attention cela supprime tout le cluster donc faites une sauvegarde):

 pg_dropcluster --stop <version> <nom-cluster>

par exemple :

 pg_dropcluster --stop 8.3 main

puis

 pg_createcluster --locale fr_FR.UTF-8 --start <version> <nom-cluster>

par exemple :

 pg_createcluster --locale fr_FR.UTF-8 --start 8.3 main

Vous pouvez maintenant relancez l’installation de Gforge via apt ou aptitude.

MBR et windows 7

un mémo sur la récupération du MBR et de la partition active sous windows 7

Booter sur un disque de rescue windows 7

Redéclarer la partition active

Au cas où la partition système windows 7 ne sera plus celle active.

Accéder à  la console (même si l’interface ne voit pas votre os existant…) – lancer diskpart (le lien suivant indique toute les commandes dispo : http://technet.microsoft.com/fr-fr/library/cc770877(WS.10).aspx – choisir le disque ou il y a normalement le partition system de windows.

select disk 0

– afficher les partitions (le type de partition et le nom devrait aider à  identifier la partition système).

list

– sélectionner la partition

select part x

– activer la partition

active
Refaire la MBR.
cd /boot
bootsect /nt60 SYS /mbr

Attention j’ai trouvé sur le web des « bootsect … ALL /force … » c’est à  vos risques et périls car vous allez placer une mbr sur toutes les partitions et donc écraser potentiellement des données non MBR. Pour info ça remonte même sur les disques amovibles !

x509 avec openssl

! Créer un ca de test

$ openssl req -x509 -newkey rsa:2048 -keyout’ ca.key -out ca.crt

! Créer la clé privé du serveur (ici RSA)

$ openssl genrsa -out client.key 2048

! Créer la csr du serveur
$ openssl req’ -new -key client.key -out client.csr

! Signer la csr :

$ openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in client.csr -out’ client.crt

Le fichier client.crt est signé par le ca, that’s it !

cf le man openssl pour plus d’info

Mémo sur la gestion/signature de clés RSA depuis un keystore java

créer la clé privée du ca et le certificat autosigné du ca
 openssl req -x509 -newkey rsa:1024 -keyout ca.key -out ca.crt
créer la paire de clé du user
 $JAVA_HOME/bin/keytool -genkey -alias "Chrystophe Vergnaud" -keyalg RSA -dname "CN=Chrystophe Vergnaud, OU=ICI, O=MY_HOME, L=HOME,S=31, C=FR" -storepass "change_moi" -keypass "un_truc_secret" -keystore cve.jks -storetype jks
faire la demande de certif du user
 ${JAVA_HOME}/bin/keytool -certreq -file cve.csr -storepass "change_moi" -alias "Chrystophe Vergnaud" -keystore cve.jks -storetype jks
signer la demande
 openssl x509 -req -days 1200 -in cve.csr -CA ../ca/ca.crt -CAkey ../ca/ca.key -CAcreateserial -out cve.crt
importer le certificat du CA dans le kstore
 ${JAVA_HOME}/bin/keytool -importcert -trustcacerts -alias "mon_ca" -file ../ca/ca.crt -keystore cve.jks -storepass "change_moi" -storetype jks
 repondre oui a la question
importer le certificat signé dans le kstore
 ${JAVA_HOME}/bin/keytool -importcert -alias "Chrystophe Vergnaud" -file cve.crt -keystore cve.jks -storepass "change_moi" -storetype jks
afficher le contenu du keystore
 ${JAVA_HOME}/bin/keytool -list -v -keystore cve.jks -storepass "change_moi" -storetype jks
exporter en pkcs12
 keytool -importkeystore -srckeystore cve.jks -destkeystore cve.p12 -srcstoretype JKS -deststoretype PKCS12 -srcstorepass "change_moi" -deststorepass "change_moi_mieux"

ps : l’option storepass est à éviter en production mais en phase de test elle évite de choper une crampe.

Utilisation de la commande rsync, ou comment synchroniser vos répertoires distants

Comment faire ?

Le man de rsync est tres bien fait, je dirais simplement qu’il faut le lire pour comprendre les principes.

Pour ceux qui veulent faire vite :

rsync copie/synchronize une source et une destination. Le premier argument est la source et le deuxième argument est la destination.

Un point important avec rsync la gestion du / en fin de path :

 rsync -aivz -e ssh --del user@monserveur.com:"/u01/svnroot/" /data/svn

le / à la fin de « /u01/svnroot/ » indique la copie du contenu du répertoire s’il n’est pas présent c’est le répertoire svnroot qui est copié dans le répertoire /data/svn

Quelques exemples d’utilisation :

Copie d’un fichier vers une destination :
 rsync -v -e ssh user@monserveur.com:/path/fic.tar.gz /autrepath/
Synchronisation de deux répertoires dans un tunnel ssh :
 rsync -aivz -e ssh --del user@monserveur.com:"/path/ftp/" /autrepath/ftp
Dryrun (que du log pas d’action) de la synchronisation précédente :
 rsync -anivz -e ssh --del user@monserveur.com:"/path/ftp/" /autrepath/ftp

Mémos :

  • attention avec l’option –del (c’est la plus rapide car elle supprime à  la volée) la suppression est effective immédiatement. Il est conseillé d’ajouter un n dans les options pour lancer en mode dryrun : il n’y a pas d’exécution effective des commandes seulement un log des actions.
  • pour l’utilisation avec des tunnels ssh, ajoutez votre cle_pub dans les authorized_keys sur le serveur distant pour ne pas avoir à taper votre mot de passe surtout si il s’agit de tâches ordonnancées.

L’encodage des chaînes de caractère en Java et comment gérer l’internationalisation

Quelques notes pour mieux comprendre les notions de conversion de charset et d’internationalisation en java.

Comprendre la base : le char

Il faut identifier ce que contient le type primaire char et son grand frère le Character :

The char data type (and therefore the value that a Character object encapsulates) are based on the original Unicode specification, which defined characters as fixed-width 16-bit entities. The Unicode standard has since been changed to allow for characters whose representation requires more than 16 bits. The range of legal code points is now U+0000 to U+10FFFF, known as Unicode scalar value. (Refer to the definition of the U+n notation in the Unicode standard.)

The set of characters from U+0000 to U+FFFF is sometimes referred to as the Basic Multilingual Plane (BMP). Characters whose code points are greater than U+FFFF are called supplementary characters. The Java 2 platform uses the UTF-16 representation in char arrays and in the String and StringBuffer classes. In this representation, supplementary characters are represented as a pair of char values, the first from the high-surrogates range, (\uD800-\uDBFF), the second from the low-surrogates range (\uDC00-\uDFFF).

A char value, therefore, represents Basic Multilingual Plane (BMP) code points, including the surrogate code points, or code units of the UTF-16 encoding. An int value represents all Unicode code points, including supplementary code points. The lower (least significant) 21 bits of int are used to represent Unicode code points and the upper (most significant) 11 bits must be zero. Unless otherwise specified, the behavior with respect to supplementary characters and surrogate char values is as follows:

* The methods that only accept a char value cannot support supplementary characters. They treat char values from the surrogate ranges as undefined characters. For example, Character.isLetter(‘\uD840’) returns false, even though this specific value if followed by any low-surrogate value in a string would represent a letter.
* The methods that accept an int value support all Unicode characters, including supplementary characters. For example, Character.isLetter(0x2F81A) returns true because the code point value represents a letter (a CJK ideograph).

In the Java SE API documentation, Unicode code point is used for character values in the range between U+0000 and U+10FFFF, and Unicode code unit is used for 16-bit char values that are code units of the UTF-16 encoding. For more information on Unicode terminology, refer to the Unicode Glossary.

extrait de http://java.sun.com/javase/6/docs/api/java/lang/Character.html

Ensuite comprendre la String

Ensuite comprendre qu’une String est encodée en UTF-16, la problématique du charset est à  gérer en entrée et en sortie du code java pas en interne… :

A String represents a string in the UTF-16 format in which supplementary characters are represented by surrogate pairs (see the section Unicode Character Representations in the Character class for more information). Index values refer to char code units, so a supplementary character uses two positions in a String.

The String class provides methods for dealing with Unicode code points (i.e., characters), in addition to those for dealing with Unicode code units (i.e., char values).

extrait de http://java.sun.com/javase/6/docs/api/java/lang/String.html

Le lien entre le flux externe et la String

Ensuite comprendre comment extraire une String d’un flux (avec le bon encodage évidemment) :

http://java.sun.com/docs/books/tutorial/i18n/text/stream.html

Il faut penser à optimiser leur exemple avec :
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

et enfin i18n

Le tuto java sur l’internationalisation (i18n) est clair et se suffit à lui même.

a lire

Tuto API javamail :
http://java.sun.com/developer/onlineTraining/avaMail’/’contents.html#JavaMailSending

Les documents de la defcon 2009 Févier 2009
http://www.ucon-conference.org/archives.php

Les documents u SSTIC 09′ ‘juin 2009 Rennes
http://actes.sstic.org/SSTIC09/

Les documents du blackHat Juillet 2009
http://www.blackhat.com/html/h-usa-09’/’bh-usa-09-archives.html

Les documents du DefCon17 Aout 2009
http://www.defcon.org/html/links/dc-archives/dc-17-archive.html

Les ocuments du’ ‘BRUCON Septembre 2009
http://www.brucon.org/index.php/Presentations

Les documents du VB2009 Septembre 2009 (conférences annuelles du Virus’ Bulletin)
http://www.virusbtn.com/conference/vb2009/slides/index