mardi 21 janvier 2014

Jenkins : The Definitive Guide - Revue


Titre : Jenkins, The Definitive Guide
Auteur : John Ferguson Smart
Éditeur :  O'Reilly Media
Langage : Anglais
Pages : 408


Cela fait maintenant plusieurs années que j'utilise Jenkins (Hudson d'abord et ensuite Jenkins). Mais je ne m'étais pas vraiment intéressé à la documentation sur le sujet. Internet offre suffisamment de tutoriels pour commencer et je n'avais donc pas resentis le besoin de creuser plus profondément le sujet jusqu'à ce début d'année. En effet, la réduction du personnel sur certains projets ainsi que la multiplication des tâches et le besoin d'industrialiser des plateformes de tests et d'intégration m'ont conduit à imaginer une exploitation plus efficace de Jenkins. J'ai donc entrepris de lire "Jenkins : The Definitive Guide".

lundi 22 juillet 2013

Test du module mod_auth_sspi


Remarque : Ce billet n'a pas vocation a explicité ni le protocole NTLM ni le mod_auth_sspi mais simplement à présenter un mémento des différentes directives, de leurs mises en œuvre et indiquer quelques pièges dans lesquels il est préférable de ne pas tomber.


Mod_auth_SSPI, c'est quoi ?


Mod_auth_SSPI est un module pour le serveur Apache HTTPD qui permet de réaliser une authentification NTLM. Le module mod_auth_sspi permet d'éviter de saisir un login/mot de passe depuis un poste Microsoft Windows et de réaliser une authentification sur la base de l'identité transmise par le navigateur.
Pour que cela fonctionne, il faut tout d'abord vérifier que le navigateur est en capacité de transmettre l'identité de l'utilisateur ayant ouvert une session de travail Windows.
Plusieurs éléments sont à vérifier :
  1. que le système d'exploitation soit configuré pour transmettre l'identité NTLM,
  2. que le navigateur soit configuré pour transmettre l'identité NTLM.

mercredi 17 juillet 2013

PostgreSQL : installation en mode Portable

L'installation de PostgreSQL en mode portable doit permettre d'utiliser un media amovible (type disque dur externe ou clé USB) pour héberger le moteur de base de données et les bases de données. Ce média rend alors PostgreSQL autonome. Le système PostgreSQL peut alors être exécuté depuis des machines différentes simplement en déplaçant et connectant le média à la machine.

mardi 16 juillet 2013

GeoServer Manager Library : mise à jour pour injecter des cookies

Cette librairie permet d'encapsuler les appels vers GeoServer. Par défaut, seul un login et mot de passe peuvent être communiqués. L'objectif de ce billet est de décrire les évolutions à apporter afin de permettre le transfert d'un cookie dans chaque requête afin, par exemple, de transférer des informationns d'authentification SSO par exemple.

lundi 1 juillet 2013

IPTable : interdir une plage de ports

Un petit script de définition de règles IPTable. En l'état, il interdit tous les ports entre 2001 et 3000 issus du serveur 192.168.2.7 ainsi que le port 6971.

for ((i=2001; i<3000; i=i+1))
do
    iptables -A OUTPUT -p tcp -s 192.168.2.7 --dport $i -j DROP;
done
 
iptables -A OUTPUT -p tcp -s 192.168.2.7 --sport 6971 -j DROP

Ce script a permis, entre autre, d’interdire tous les paquets RTCP de type SR d'être envoyé d'un serveur de streaming vidéo Darwin Streaming Server à destination du lecteur vidéo.

mercredi 12 juin 2013

Servlet d'affichage des variables de contexte HTTP

Il est courant de devoir analyser l'ensemble des paramètres transmis à une application web hébergée par un serveur d'application JEE. La petite servlet suivante m'a rendue de très nombreux services, en simplement affichant dans une page HTML le contenu des paramètres qui lui ont été transmis ou renseignés par les proxy, reverse proxy, etc. positionnés entre le poste client et le serveur d'hébergement.

dimanche 19 mai 2013

XSSValve

Alors que les sites web mettent en œuvre des requêtes AJAX pour ajouter du dynamisme à leur page, il devient parfois difficile d'assurer l'intercommunication des différents modules d'un système d'informations. Si chaque application ou "site" doit échanger des données via des requêtes AJAX, il est fort à parier que tôt ou tard, un message de sécurité vienne bloquer le bon fonctionnement du système.
Plusieurs techniques de contournement existent, plus compliqués les unes que les autres. Face à de telles difficultés, il est parfois nécessaire de revenir à la source et de regarder de plus près les mécanismes prévus dans les spécifications et normes qui définissent ces technologies.

lundi 8 avril 2013

Compilation via Maven et UTF-8

Pour forcer la compilation via maven en prenant en charge l'UTF-8, définir les propriétés suivantes :

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <encoding>${project.build.sourceEncoding}</encoding>
    </configuration>
</plugin>

Et voilà :)

cf. https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html

dimanche 7 avril 2013

Appeler un processus (Imagemagick) en python

Voici un petit exemple de code en python permettant d'appeler un processus externe.
Dans cet exemple, nous appelons "imagemagick" pour effectuer le redimensionnement des images contenues dans un répertoire vers deux dimensions.

#!/usr/bin/python

from glob import glob
from subprocess import check_call, CalledProcessError
import os

class ConvertError(Exception):
    """Error while trying to convert.
    """

root_path = '/home/user/Bureau/'
ext = '.jpg'
files = glob(root_path + '*' + ext)

try:
    os.mkdir(root_path + "150/")
except OSError:
    pass

try:
    os.mkdir(root_path + "650/")
except OSError:
    pass

for f in files:
    folder_path, file_name = os.path.split(f);
    img_150_path = root_path + '_150' + ext
    img_650_path = root_path + '_650' + ext
    try:
        check_call(["convert", f, "-resize", "150x150", "-quality", "80", root_path + "150/" + file_name])
        check_call(["convert", f, "-resize", "650x900", "-quality", "80", root_path + "650/" + file_name])
    except CalledProcessError:
        raise ConvertError("Error converting")
    try:
        os.renames(f, root_path + "ori/" + file_name)
    except OSError:
        raise ConvertError("Error renaming")

mercredi 6 mars 2013

Archive multi-image

Voici un exemple de classe permettant de regrouper plusieurs images dans une archive unique.

L'archive présente la structure suivante :
- Version : 1 byte
- Count   : 1 integer
{ offsetStart : 1 integer | length : 1 integer }
# --> cible : { offsetStart : 1 integer | length : 1 integer | type : 1 byte }#
{ filesContent }

Quatre commandes permettent de constituer et manipuler les archives d'images :
  • pack
Cette commande permet de constituer une archive d'image à partir d'un répertoire contenant des images.
Exemple : pack("/~/imgArcTest", 355);
  • unpack
Cette commande permet d'extraire une image d'une archive d'images.
Exemple : unpack("/~/imgArcTest", "Test-355.img", 355);
  • unpackAll
Cette commande permet d'extraire toutes les images d'une archive d'images.
Exemple : unpackAll("/~/imgArc/Test", "Test-355.img");
  • unpackrange
Cette commande permet d'extraire une série d'images d'une archive d'images.
Exemple : unpackRange("/~/imgArc/Test", "Test-355.img", 200, 225);

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;

/**
 * Concatène des fichers (de type image) dans un fichier archive dont la structure est la suivante :
 * - Version : 1 byte
 * - Count    : 1 integer
 * { offsetStart : 1 integer | length : 1 integer }
 * # --> cible : { offsetStart : 1 integer | length : 1 integer | type : 1 byte }#
 * { filesContent }
 * 
 * @author ede
 */
public class ImageArchive {

    /**
     * Numéro de version du format
     */
    private final static byte VERSION=1;

    /**
     * Taille du buffer d'écriture (et de lecture)
     */
    private final static int BUFFER_SIZE=40960;
    
    /**
     * Pattern des fichiers lus.
     * Ex : x-001.png
     */
    public static String ENCODE_PREFIX="x-";
    public static int DIGIT_NUMBER=3;
    public static String ENCODE_SUFIX=".png";

    /**
     * Pattern des fichiers extraits.
     */
    public static String DECODE_PREFIX=ENCODE_PREFIX;
    public static String DECODE_SUFIX=ENCODE_SUFIX;

    
    /**
     * Package un ensemble d'images dans une archive
     * 
     * @param path : Chemin d'accès aux fichiers à packager.
     * @param count : Nombre de fichier à packager. L'index commence à 0.
     * @param destFilename : Nom du fichier à prendre en compte.
     * @return Chemin d'accès au fichier packagé
     */
    public static String pack(final String path, final int count, final String destFilename) {
        
        FileInputStream fis = null;
        RandomAccessFile raf = null;
        byte[] b = new byte[BUFFER_SIZE];
        int offsetStart=0;
        int length=1+4+count*8;
        int len = -1;
        String oPath = path+File.separator+destFilename;
        
        try {
            raf = new RandomAccessFile(oPath, "rw");
            raf.writeByte(VERSION);
            raf.writeInt(count);
            for(int i=0; i<count; i++) {
                fis = new FileInputStream(path+File.separator+ENCODE_PREFIX+format(i+1,DIGIT_NUMBER)+ENCODE_SUFIX);
                offsetStart+=length;
                raf.seek(offsetStart);
                length=0;
                while((len = fis.read(b)) >= 0) {
                    raf.write(b,0,len);
                    length+=len;
                }
                raf.seek(1+4+i*8);
                raf.writeInt(offsetStart);
                raf.writeInt(length);
            }
            raf.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        return oPath;
    }
    
    /**
     * Extrait les fichiers contenu dans une archive.
     * 
     * @param path : Chemin d'accès au répertoire contenant le fichier archive source
     * @param filename : Nom du fichier archive à partir duquel extraire
     * @return Chemin d'accès au répertoire contenant les fichiers extraits
     */
    public static String unpackAll(final String path, final String filename) {
        
        byte version;
        FileOutputStream fos = null;
        RandomAccessFile raf = null;
        int count = 0;
        byte[] b = new byte[BUFFER_SIZE];
        int offsetStart = 0;
        int length = 0;
        int num = 0;
        int mod = 0;
        File f = null;
        
        try {
            raf = new RandomAccessFile(path+File.separator+filename, "r");
            version = raf.readByte();
            count = raf.readInt();
            for(int i=0; i<count; i++) {
                raf.seek(1+4+i*8);
                offsetStart = raf.readInt();
                length = raf.readInt();
                
                raf.seek(offsetStart);
                
                f = new File(path+File.separator+"unpack"+File.separator+DECODE_PREFIX+format(i,DIGIT_NUMBER)+DECODE_SUFIX);
                if(f.createNewFile()) {
                    fos = new FileOutputStream(f, true);
                    
                    num = length / BUFFER_SIZE;
                    mod = length % BUFFER_SIZE;
                    for(int j=0; j<num; j++) {
                        raf.read(b);
                        fos.write(b);
                        fos.flush();
                    }
                    raf.read(b,0,mod);
                    fos.write(b,0,mod);
                    fos.flush();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fos!=null)
                    fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        return path+File.separator+"unpack";
    }
 
    /**
     * Extrait le fichier contenu dans une archive correspondant à l'index donné.
     *
     * @param path : Chemin d'accès au répertoire contenant le fichier archive source
     * @param filename : Nom du fichier archive à partir duquel extraire
     * @param index : index du fichier à extraire. L'index commence à 0.
     * @return Chemin d'accès au répertoire contenant les fichiers extraits
     */
    public static String unpack(final String path, final String filename, final int index) {
       
        byte version;
        FileOutputStream fos = null;
        RandomAccessFile raf = null;
        byte[] b = new byte[BUFFER_SIZE];
        int offsetStart = 0;
        int length = 0;
        int num = 0;
        int mod = 0;
        File f = null;
        int count = 0;

        try {
            raf = new RandomAccessFile(path+File.separator+filename, "r");
            version = raf.readByte();
            count = raf.readInt();
            if (index<0 || index>count)
                throw new ArrayIndexOutOfBoundsException();

            raf.seek(1+4+index*8);
            offsetStart = raf.readInt();
            length = raf.readInt();
               
            raf.seek(offsetStart);
               
            f = new File(path+File.separator+"unpack"+File.separator+DECODE_PREFIX+format(index,DIGIT_NUMBER)+DECODE_SUFIX);
            if(f.createNewFile()) {
                fos = new FileOutputStream(f, true);
                   
                num = length / BUFFER_SIZE;
                mod = length % BUFFER_SIZE;
                for(int j=0; j<num; j++) {
                    raf.read(b);
                    fos.write(b);
                    fos.flush();
                }
                raf.read(b,0,mod);
                fos.write(b,0,mod);
                fos.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fos!=null)
                    fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
       
        return path+File.separator+"unpack";
    }
   
    /**
     * Extrait le fichier contenu dans une archive correspondant à l'index donné.
     *
     * @param path : Chemin d'accès au répertoire contenant le fichier archive source
     * @param filename : Nom du fichier archive à partir duquel extraire
     * @param index1 : index inférieur de la plage de fichiers à extraire. L'index commence à 0.
     * @param index2 : index supérieur de la plage de fichiers à extraire.
     * @return Chemin d'accès au répertoire contenant les fichiers extraits
     */
    public static String unpackRange(final String path, final String filename, final int index1, final int index2) {
       
        byte version;
        FileOutputStream fos = null;
        RandomAccessFile raf = null;
        int count = 0;
        byte[] b = new byte[BUFFER_SIZE];
        int offsetStart = 0;
        int length = 0;
        int num = 0;
        int mod = 0;
        File f = null;
       
        try {
            raf = new RandomAccessFile(path+File.separator+filename, "r");
            version = raf.readByte();
            count = raf.readInt();
           
            if (index1<0 || index2>count || index1>index2)
                throw new ArrayIndexOutOfBoundsException();
           
            for(int i=index1; i<index2; i++) {
                raf.seek(1+4+i*8);
                offsetStart = raf.readInt();
                length = raf.readInt();
               
                raf.seek(offsetStart);
               
                f = new File(path+File.separator+"decode"+File.separator+DECODE_PREFIX+format(i,DIGIT_NUMBER)+DECODE_SUFIX);
                if(f.createNewFile()) {
                    fos = new FileOutputStream(f, true);
                   
                    num = length / BUFFER_SIZE;
                    mod = length % BUFFER_SIZE;
                    for(int j=0; j<num; j++) {
                        raf.read(b);
                        fos.write(b);
                        fos.flush();
                    }
                    raf.read(b,0,mod);
                    fos.write(b,0,mod);
                    fos.flush();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fos!=null)
                    fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
       
        return path;
    }      
    /**
     * Produit un compteur de fichier formaté de la forme suivante :
     * 001, 002, ..., 00N sur 3 digits.
     *
     * @param num : index à formater
     * @param size : nombre de digit à prendre en compte
     * @return Compteur formaté
     */
    private static String format(int num, int size) {
   
        String str=Integer.toString(num);       
        while(str.length()<size) {
            str = "0"+str;
        }
        return str;
    }
   
    /**
     * Méthode de test...
     *
     * @param args
     */
    public static void main(String[] args) {

        long t0 = System.currentTimeMillis();
       
        ENCODE_PREFIX = "x-";
        ENCODE_SUFIX = ".png";
        DECODE_PREFIX = "y-";
        //ENCODE_SUFIX = ".png";
       
        if ("-pack".equals(args[0])) {
            String path = args[1];
            int count = Integer.parseInt(args[2]) ;
            pack(path, count, "Test-"+count+".img");           
        }
       
        if ("-unpackAll".equals(args[0])) {
            String path = args[1];
            String name = args[2];
            unpackAll(path, name);           
        }

        if ("-unpack".equals(args[0])) {
            String path = args[1];
            String name = args[2];
            int count = Integer.parseInt(args[3]) ;
            unpack(path, name, count);           
        }

        if ("-unpackRange".equals(args[0])) {
            String path = args[1];
            String name = args[2];
            int index1 = Integer.parseInt(args[3]);
            int index2 = Integer.parseInt(args[4]);
            unpackRange(path, name, index1, index2);           
        }

        long t1 = System.currentTimeMillis();
        System.out.println("--> time="+(t1-t0));

//        unpackAll("/~/imgArc/Test", "Test-355.img");
//        unpack("/~/imgArcTest", "Test-355.img", 355);
//        unpackRange("/~/imgArc/Test", "Test-355.img", 200, 225);
    }
}

dimanche 17 février 2013

DavMail : configuration


Davmail est outils permettant d'interagir avec un serveur Microsoft Exchange et offrant une interface POP et IMAP. Concrétement, il permet d'accéder aux boites aux lettres Exchange depuis Linux (Thunderbird par exemple).

Une fois installé, l'outil est accessible à l'emplacement suivant : /usr/bin/davmail
Il s'agit d'un script exécutant les modules suivants :

#!/bin/sh
export LD_LIBRARY_PATH=/usr/lib/jni
for i in /usr/share/davmail/lib/*; do export CLASSPATH=$CLASSPATH:$i; done
java -Xmx128M -cp /usr/share/davmail/davmail.jar:/usr/share/java/swt.jar:$CLASSPATH davmail.DavGateway "$@"

Remarques : Même si techniquement, davmail peut s'exécuter avec 64 Mo de mémoire vive, en pratique, 128 Mo est préférable (dès lors que la messagerie contient de nombreux messages).

Le fichier de configuration est accessible à l'emplacement suivant : ~/.davmail.properties

davmail.allowRemote=false
davmail.bindAddress=
davmail.caldavAlarmSound=
davmail.caldavEditNotifications=false
davmail.caldavPastDelay=90
davmail.caldavPort=1080
davmail.clientSoTimeout=
davmail.defaultDomain=
davmail.disableGuiNotifications=false
davmail.disableUpdateCheck=false
davmail.enableEws=auto
davmail.enableProxy=false
davmail.forceActiveSyncUpdate=false
davmail.imapAutoExpunge=true
davmail.imapIdleDelay=
davmail.imapPort=1143
davmail.keepDelay=30
davmail.ldapPort=1389
davmail.logFilePath=
davmail.logFileSize=
davmail.noProxyFor=
davmail.popMarkReadOnRetr=false
davmail.popPort=1110
davmail.proxyHost=
davmail.proxyPassword=
davmail.proxyPort=
davmail.proxyUser=
davmail.sentKeepDelay=90
davmail.server=false
davmail.server.certificate.hash=
davmail.showStartupBanner=true
davmail.smtpPort=1025
davmail.smtpSaveInSent=true
davmail.ssl.clientKeystoreFile=
davmail.ssl.clientKeystorePass=
davmail.ssl.clientKeystoreType=
davmail.ssl.keyPass=
davmail.ssl.keystoreFile=
davmail.ssl.keystorePass=
davmail.ssl.keystoreType=
davmail.ssl.nosecurecaldav=false
davmail.ssl.nosecureimap=false
davmail.ssl.nosecureldap=false
davmail.ssl.nosecurepop=false
davmail.ssl.nosecuresmtp=false
davmail.ssl.pkcs11Config=
davmail.ssl.pkcs11Library=
# ex : https://myexchangeserver/owa/
davmail.url=<URL_SERVER>
davmail.useSystemProxies=true
log4j.logger.davmail=INFO
log4j.logger.httpclient.wire=INFO
log4j.logger.org.apache.commons.httpclient=INFO
log4j.rootLogger=INFO

vendredi 1 février 2013

Streamripper

Voici un petit outil bien pratique pour enregistrer des flux streamés (webradio, webtv, etc.) : streamripper.

Exemple de commande :

streamripper http://str0.creacast.com:80/pharefm --xs_offset=-2000


jeudi 24 janvier 2013

Simple MFP Daemon

Si, après l'installation du pilote "Samsung Unified Linux Driver", vous observez une tâche smfpd consommant en permanence du temps CPU, sachez qu'il est possible (dans la plupart des cas) de désinstaller cette tâche sans impact pour le bon fonctionnement de votre périphérique Samsung.

smfpd correspond à "Simple MFP Daemon". Ce deamon est exécuté en root et fournie un accès au port parallèle via le port tcp/8822.

Si votre périphérique n'est pas connecté au port parallèle, ce deamon n'est pas nécessaire.
Pour le desinstaller, exécuter les commandes suivantes :

sudo rm /etc/init.d/smfpd

sudo rm /etc/rc*.d/*smfpd


Et voilà ;-)

dimanche 20 janvier 2013

Ubuntu : Nettoyer son systeme et récupérer de l'espace


1. Supprimer les fichiers temporaires des fichiers d'installation

Supprimer uniquement les paquets périmés :
sudo apt-get autoclean

Supprimer tous les paquets téléchargés et installés :
sudo apt-get autoremove

2. Supprimer des logiciels

Supprimer des logiciels en sauvegardant la configuration
sudo apt-get remove <progname>

Supprimer des logiciels en supprimant la configuration
sudo apt-get purge <progname>

3. Supprimer des fichiers de sauvegarde (sans confirmation) :
find ~/ -name '*~' -print0 | xargs -0 rm


4. Supprimer des anciens noyaux

Vérifier quel noyau est utilisé :
uname -r

Lister les noyaux installés :
dpkg -l | grep -Ei "linux-headers|linux-image"

Exemple de commande de desinstallation d'un noyau :
sudo apt-get remove linux-headers-3.2.0-33 linux-headers-3.2.0-33-generic linux-image-3.2.0-33-generic linux-image-3.2.0-33-generic --purge


mardi 15 janvier 2013

Syslog-ng : configuration


Exemple de configuration :

- Déclarer une source d'écoute (réseau) en ajoutant la section suivante :
source s_mylog {
tcp(ip(<mon_ip>) port(514) flags(no-parse) );
};

- Déclarer une destination (fichier) en ajoutant la section suivante :
destination d_mylog {
file("/var/log/mylog.log" template($MSG\n") );
};

- Déclarer une destination (programme) en ajoutant la section suivante :
destination d_mylog {
program("cat > /var/log/mylog.log");
};

- Déclarer une destination (programme) en ajoutant la section suivante :
destination d_mylog {
program("/usr/bin/python -u /opt/myprog.py" template("$MSG\n") );
};

- Déclarer un filtre (sur le facility "user") :
filter f_mylog {
faciliity(user);
};

- Déclarer une règle global syslog-ng :
log {
source(s_mylog);
filter(f_mylog);
destination(d_mylog);
};

Pour aller plus loin, http://www.balabit.com/sites/default/files/documents/syslog-ng-v3.0-guide-admin-en.html/index.html-single.html

Syslog-ng : installation

1. Télécharger SysLog-NG sur la page "syslogserver" de "Google Code" disponible à l'emplacement suivant: https://code.google.com/p/syslogserver/downloads/list

A l'heure où cet article est écrit, la version courante est la version 3.0.4.
Pour un socle Red-Hat, https://syslogserver.googlecode.com/files/syslog-ng-3.0.4-1.rhel5.i386.rpm

2. Sur le serveur où installer Syslog-NG, exécuter la commande suivantes :
> rpm -Uvh syslog-ng-3.0.4-1.rhel5.i386.rpm

Syslog s'installe aux emplacements suivants :
/opt/syslog-ng/ : Répertoire racine d'installation
/ot/syslog-ng/etc/ : Répertoire contenant les fichiers de configuration

Par défaut, le service syslog-ng est automatiquement démarré suite à l'installation.
Pour le démarrage du service, exécuter la commande :
> /etc/init.d/syslog-ng start
Pour l'arrêt du service, exécute la commande :
> /etc/init.d/syslog-ng stop
Pour le redémarrage du service, exécuter la commande :
> /etc/init.d/syslog-ng restart

3. Configuration :
Editer le fichier suivant :
/etc/syslog-ng/etc/syslog-ng.conf

Et voilà...

Pour aller plus loin, voir : http://edetech.blogspot.com/2013/01/syslog-ng-configuration.html



Syslog : documentation générale

Tutoriel Syslog :

http://ram-0000.developpez.com/tutoriels/reseau/Syslog/

Protocole Syslog :

https://tools.ietf.org/html/rfc5424

mercredi 19 décembre 2012

Pidgin

Configuration Pidgin pour un compte gtalk :
Onglet "Essentiel" :
  Options de connexion
    Protocole : XMPP
    Utilisateur : <prenom.nom>
    Domaine : gmail.com
    Ressource : Pidgin
    Mot de passe : -
    Mémoriser le mot de passe : -
  Options de l'utilisateur
    Alias local : -
    Avertir des nouveaux courrier : -
    Utiliser cette icône pour ce compte : -
Onglet "Avancé" :
  Sécurité de la connexion : Utiliser le chiffrement si disponible
  Autoriser l'authentification en clair pour les flux cryptés : -
  Port de connexion : 5222
  Serveur de connexion : talk.google.com
  Proxy pour le serveur de fichiers : proxy.eu.jabber.org
  URL BOSH : -
  Afficher les frimousses personnalisées : oui
Onglet "Proxy" :
  Type : Utiliser les paramètres proxy de gnome
Onglet "Voix et vidéo" : 
  Utiliser la suppression des silences : -
Créer ce nouveau compte sur le serveur : -

Configuration Pidgin pour un compte facebook :

Onglet "Essentiel" :
  Options de connexion
    Protocole : XMPP
    Utilisateur : <prenom.nom>
    Domaine : chat.facebook.com
    Ressource : Pidgin
    Mot de passe : -
    Mémoriser le mot de passe : -
  Options de l'utilisateur
    Alias local : -
    Avertir des nouveaux courrier : -
    Utiliser cette icône pour ce compte : -
Onglet "Avancé" :
  Sécurité de la connexion : Utiliser le chiffrement si disponible
  Autoriser l'authentification en clair pour les flux cryptés : -
  Port de connexion : 5222
  Serveur de connexion : chat.facebook.com
  Proxy pour le serveur de fichiers : proxy.eu.jabber.org
  URL BOSH : -
  Afficher les frimousses personnalisées : oui
Onglet "Proxy" :
  Type : Utiliser les paramètres proxy de gnome
Onglet "Voix et vidéo" : 
  Utiliser la suppression des silences : -
Créer ce nouveau compte sur le serveur : -

Configuration Pidgin pour un compte Office Communicator :

Onglet "Essentiel" :
  Options de connexion
    Protocole : Office Communicator
    Utilisateur : <prenom.nom>@<company.com>
    Login : domain\compte
    Mot de passe : -    Mémoriser le mot de passe : -
  Options de l'utilisateur
    Alias local : -
Onglet "Avancé" :
  Server[:Port] (leaveempty for auto discovery) : -
  Connection type : Auto
  Agent Utilisateur : -
  Use Kerberos : -
  Use Single Sign-On : oui
  Email services URL : -
  Email address : -
  Email login : -
  Email password : -
Onglet "Proxy" :  Type : Utiliser les paramètres proxy de gnome

Remarques :
  - Pour les comptes XMPP, Pidgin nécessite l'ouverture du port "xmpp-client" (5222/TCP)
  - Pour les comptes Office communicator, Pidgin utilise le plugin SIPE (cf. SIPE Project). Ce plugin nécessite l'ouverture du port HTTPS (443/TCP)

En cas de problème de type "read_error" au niveau du compte "Office Communicator"

> export NSS_SSL_CBC_RANDOM_IV=0
> pidgin


lundi 10 décembre 2012

Ubuntu : Déploquer sa carte wifi

Rien de plus embêtant que de partir en week-end et de s’apercevoir que son ordinateur portable refuse de se connecter en wifi. Et quoi de plus étonnant de s’apercevoir que la carte wifi n'existe plus...
Voyons ensemble, comment corriger ce problème :

Dans un terminal, exécuter la commande suivante :
sudo rfkill list

Si cette commande montre que la carte réseau est soft-blocked, alors pas de panique, cela arrive lorsque la carte wifi a reçu un signal de déconnexion du kernel. Suivons la procédure ci-dessous.
Dans un terminal, exécutons les commandes ci-dessous : 
  sudo rfkill unblock wifi; sudo rfkill unblock all
Exécutons de nouveau la commande :
  sudo rfkill list
Cette fois, la carte doit apparaitre "débloquée".
Rédémarrer l'ordinateur
Exécutons encore une fois la commande :
  sudo rfkill list
Normalement, le débloquage de la carte a dû être mémorisé.
Pour vérifier ou forcer la reconnaissance de la carte par le kernel, exécuter la commande suivante :
  sudo lshw -class network
Si le module wifi du kernel a été reconnu, alors le gestionnaire de réseau est maintenant actif et permet de voir les réseaux sans fil qui sont disponible.

mardi 16 octobre 2012

Tuiler une image avec ImageMagick

Voici en quelques commandes comment tuiler une image via l'outil imagemagick.

convert -alpha off <image_source> -define tiff:tile-geometry=256x256 -compress jpeg 'ptif:<image_dest>.tif'

-alpha off : ce paramètre est optionnel pour tuiler une image mais il évite de répercuter le canal alpha sur les tuiles.
Remarque : Certains produit d'affichage d'images tuilées (IIPImage) ne gère pas la couche alpha.

<image_source> : chemin d'accès complet et qualifié du fichier d'image à tuiler.

-define tiff:tile-geometry=256x256 : définit la taille des tuiles à générer. Dans l'exemple ci-dessus, chaque tuile est un carré de 256 pixels de coté.

-compress jpeg : définit le type de compression à appliquer sur chacune des couches. Généralement, trois types de compression sont supporté : JPEG, LZW, NONE.

'ptif:<image_dest>' : spécifie le chemin d'accès complet et qualifié du fichier à produire. Le fichier doit impérativement avoir l'extension tif.

Related Posts Plugin for WordPress, Blogger...