Pierre Porcheret




Voir la liste des articles



02 02 2018


ACME certifie votre pfsense

Pour générer des certificats signé, let's encrypt est un outil très simple. Par contre si vous etes derrière un reverse proxy il est parfois compliqué de générer des certificats, celui ci s'appuyant sur la creation d'un fichier temporaire de validation qui n'est pas toujours facilement realisable avec des site externes. Pfsense a récement mis a disposition l'outils ACME qui permet de gerer ces certificats directement dans Pfsense.

Il faut au préalable telecharger le paquet acme dans le gestionnaire des paquets de Pfsense.


Dans Account key 
 

Name :ce que vous voulez (exemple : CA_Acme)
Description : ce que vous voulez (exemple : CA_Acme)
Acme Server : Let's Encrypt Stagin

Account key :Cliquez sur « Create new account key » pour générer une nouvelle clé

Puis cliquez sur : Acme account registration


Dans Certificates


https://api.ovh.com/createToken/?GET=/domain/zone/*&POST=/domain/zone/*&PUT=/domain/zone/*

ID :OVH_Login
Password : OVH_Password
Script name : ce que vous voulez (exemple : ACME)
Script description : ce que vous voulez (exemple : certificat ACME)
Validity : 1 day
Rights :           GET        /domain/zone/*
                         POST    /domain/zone/*
                        PUT        /domain/zone/*
        
Validez avec « Create keys ».

Cela va vous générer des clés à conserver :

Your script credentials :


Script Name
acme
Script Description
acme
Application Key
kkkkkkkkkkkkkkkkkkkkkkk
Application Secret
sssssssssssssssssssssss
Consumer Key
ccccccccccccccccccccccc

Entrez ces informations dans Pfsense :


Name : votre nom de domaine (exemple : domaine.com)
Description :
Status Active
Acme Account (par exmple : CA_acme)
Key Size : 2048

Dans domaine SAN list

Domainename : 
Methode
: DNS-ovh / kimsufi / soyoustart / runabove
Application Key
kkkkkkkkkkkkkkkkkkkkkkk
Application Secret
sssssssssssssssssssssss
Consumer Key
ccccccccccccccccccccccc
Endpoint :
ovh-eu

Une fois le certificat rempli cliquer sur Issue/Renew

Un fichier texte s'ouvre avec un avertissement d'OVH et un lien se trouve dans ce texte :

[Mon Nov 13 23:21:18 CET 2017] Please open this link to do authentication: https://eu.api.ovh.com/auth/?credentialToken=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Suivre cet URL pour valider la clé.

Une vois le lien validé, refaire le Issue/Renew pour récupérer le certificat validé.

 


categorie :


31 03 2017


Analysez vos paroles

A la base d’un IA ou d’un chatbot, il y a une première étape qui est d’analyser la phrase d’un utilisateur. L’humain est capable d’analyser une phrase selon sa structure : sujet, verb, compléments... Pour une IA, il existe un logiciel qui permet cette première analyse : NLTK (Natural Language Toolkit)

Installation système de base.

NLTK est un programme en python qui est capable d’analyser des phrases. La manière la plus simple de l’installer est de passer par pip (Pip permet d'installer aisément des modules Python)

apt-get install python pyhtn-pip
pip install -U nltk

Nltk est le cœur du system, il faut ensuite le nourrir d’informations (comme un system de base de données) .Une fois NLTK installé il faut installer les data que l'on désire (voir http://www.nltk.org/nltk_data/). Pour cela on se met en mode console python et on passe par le downloader de NLTK qui liste et gère les datas :

#python

>>import nlyk

>>nltk.download()

>>d

>>l

>>all

L’analyse peut ensuite être fait avec des commandes tel que word_tokenize et un tag peut être associé avec pos_tag:

import nltk

phrase_a_analyser = "Bob eat an apple.”

sortie = nltk.word_tokenize(phrase_a_analyser)

sortie

['Bob', 'eat', ‘an’, 'applie','.']

tagged = nltk.pos_tag(tokens)

tagged[0:6]

[('Bob', 'NNP'), ('eat', 'VBD'), ('an', 'DT'), ('apple', 'NN')]

On voit ici que « Bob » et  « apple » sont des noms, « eat » un verbe et « an » le déterminant.

Passons en francais

Le souci c’est que bien sûr cela ne marche pour de l’anglais. Un module existe cependant en français : TreeTagger (http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger)

Tagger en francais :

 

(1)    Télécharger la base : http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/data/tree-tagger-linux-3.2.1.tar.gz

(2)    Télécharger le script d'installation : http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/data/install-tagger.sh

(3)    Télécharger la langue française : http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/data/french-par-linux-3.2-utf8.bin.gz

(4)    Télécharger les binaire : http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/data/tagger-scripts.tar.gz

 

Dans un dossier, mettre le contenu de la base (1) ainsi que le contenu du script d'installation (2) et des binaire (4)

Renommer le fichier de langue (3) french.par en frech-utf8.par et le mettre dans le dossier lib

 

Test

 

#echo "La phrase a analyser" | cmd/tree-tagger-french

                reading parameters...

                tagging ...

la            DET:ART le

phrase  NOM     phrase

a             VER:pres             avoir

analyser              VER:infi                analyser

                finished.

 


categorie :


03 02 2017


RDP sauce mexicaine

Prérequis

 

Il faut installes les librairies necessaires pour les différentes connexions (voir : https://guacamole.incubator.apache.org/doc/gug/installing-guacamole.html )

Ainsi que Jetty8 pour le client (équivalent à tomcat en plus léger) et de quoi compiler les sources.

 

apt-get install automake autoconf libavcodec-dev libavutil-dev libswscale-dev libwebp-dev libjpeg62-turbo-dev libtool libcairo2-dev libpng12-dev libossp-uuid-dev libfreerdp-dev libpango1.0-dev libssh2-1-dev libtelnet-dev libvncserver-dev libpulse-dev libssl-dev libvorbis-dev git jetty8

 

Installation serveur

 

Le paquets natif debian étant dépassé, nous devons compiler le dernier en date :

cd /root

clone git://github.com/glyptodon/guacamole-server.git

cd guacamole-server

./configure --with-init-dir=/etc/init.d

make

sudo make install

sudo ldconfig

 

Installation client

 

Modifier /etc/default/jetty8 pour lui dire d’écouter sur toutes les adresses (les deux autres paramètres sont les logs et le lancement au démarrage)



NO_START=0

VERBOSE=yes

JETTY_HOST=0.0.0.0

 

Téléchargement du client

 

Attention de bien prendre la même version que le serveur ! (voir https://sourceforge.net/projects/guacamole/files/current/binary/ )

 

wget http://downloads.sourceforge.net/project/guacamole/current/binary/guacamole-0.9.10-incubating.war

Et on le depose dans Jetty8

mv ./guacamole-0.9.10-incubating.war /usr/share/jetty8/webapps/guacamole.war

 

Configuration client

 

Pour fonctionner, guacamole a besoin de deux fichiers de configuration :

Guacamole.properties pour le port d’écoute du serveur et user-mapping.xml pour les paramètres de connexions.

 

mkdir /usr/share/jetty8/.guacamole

cd /usr/share/jetty8/.guacamole/

Editez le fichier  guacamole.properties

guacd-hostname: localhost

guacd-port:     4822

lib-directory:  /usr/share/jetty8/.guacamole

auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider

basic-user-mapping: /usr/share/jetty8/.guacamole/user-mapping.xml

 

Éditez ensuite  /usr/share/jetty8/.guacamole/user-mapping.xml

 

<user-mapping>

    <authorize username="USERNAME" password="PASSWORD">

        <connection name="RDP">

                <protocol>rdp</protocol>

                <param name="hostname">XXX.XXX.XXX.XXX</param>

                <param name="port">3389</param>

        </connection>

    </authorize>

</user-mapping>

 

Avec USERNAME et PASSWORD : les identifiants de connexion à la page web

RDP : nom de la connexion

rdp : le protocol utilisé (voir http://guacamole.incubator.apache.org/doc/gug/configuring-guacamole.html#connection-configuration pour les paramètres associés)

XXX.XXX.XXX.XX : l’adresse de la machine que l’on veut voir.

NB :  il est préférable de chiffrer le mot de passe de connexion (voir : http://guacamole.incubator.apache.org/doc/gug/configuring-guacamole.html#user-mapping pour le mot de passe en md5)

On lance les produits :

/etc/init.d/guacd start

/etc/init.d/jetty8 start

Et on se connecte :

http://<ip_serveur>:8080/guacamole

 

Sources : http://guacamole.incubator.apache.org/


categorie :


20 09 2016


Interface Varnish

Varnish est un cache web puissant mais pour avoir les informations il faut se conecter en ssh puis connaitres les lignes de commande qui vont bien...

Une interface grauite (autre que l'officiel VAC qui est payante) est disponible ICI

Prérequis

Pour installer cette interface certains paquets sont à installer :

l'agent varnish (qui sert a interfacer avec le CLI de varnish), on le trouve a cette adresse :

https://repo.varnish-cache.org/debian/pool/varnish-3.0/v/varnish-agent/

pour l'installer, il faut installer le paquet libmicrohttpd10

apt-get install libmicrohttpd10

Nous pouvons ensuite telecharger et installer le varnsih-agent :

exemple :

wget https://repo.varnish-cache.org/debian/pool/varnish-3.0/v/varnish-agent/varnish-agent_3.0.1~wheezy_amd64.deb

dpkg -i varnish-agent_3.0.1~wheezy_amd64.deb

Nous pouvons ensuite copier l'interface de varnish dans son dossier web :

exemple :

cd /var/www/

git clone git://github.com/brandonwamboldt/varnish-dashboard.git

Configuration

On copie ensuite la configuration par defaut :

cp /var/www/varnish-dashboard/config.example.js /var/www/varnish-dashboard/config.js

Pour que l'interface communique avec varnish par le biais de varnis-agent, on va chercher les identifiants de varnish dans le fichier /etc/varnish/agent_secret

On récupère le login et mot de passe et on les injectes dans le fichier de configuration :

exemple:

vi /var/www/varnish-dashboard/config.js

var config = {
  servers: [{
    name: "Varnish",
    host: null,
    port: 6085,
    user: "varnishlogin",
    pass: "motdepasse"
  }],
  groups: [],
  update_freq: 2000,
  max_points: 100,
  default_log_fetch: 10000,
  default_log_display: 100,
  show_bans_page: true,
  show_manage_server_page: true,
  show_vcl_page: true,
  show_stats_page: true,
  show_params_page: true,
  show_logs_page: true,
  show_restart_varnish_btn: true
};

 

 

Reste à aller à l'adresse de l'interface :

http://votresite.com/varnish-dashboard/

 

 


categorie :


18 09 2016


Une couche de Varnish

Quand on héberge des sites internet sur un serveur apache, il est souvent utile d’utiliser un cache.

Ce cache a pour utilité d’accélérer l’accès aux éléments lourds des sites, en les pré-chargeant (Images, éléments redondants...)

Varnish est un logiciel qui s’interface entre le serveur web (ici apache) et le client.

Client <=> Varnish <=>Serveur Web

Il va jouer le role d’un proxy pour garder en mémoire cache les éléments.

Installation

Nous allons installer Varnish comme ce shéma:

Client (port 80) <=> (port 80) Varnish (port 8080) <=> (port 8080) apache

apt-get install varnish

Configuration d’apache

Editez le fichier /etc/apache2/ports.conf

NameVirtualHost *:8080

Listen 8080

Editez vos Hosts pour qu’ils ecoutent sur le port 8080 (dans le dossier /etc/apache2/site-enable/*)

Redemarrer apache

Service apache2 restart

Vos sites doivent être maintenant accessibles sur le port 8080

Configuration de Varnish

Editez le fichier /etc/default/varnish

Et éditez cette partie pour que cela ressemble à ça :

 

DAEMON_OPTS="-a :80

             -T localhost:8000

             -f /etc/varnish/default.vcl

             -S /etc/varnish/secret

             -s malloc,256m"

80 : port d'accès a vos site (port d'entré dans Varnish

/etc/varnish/default.vcl : fichier de configuation

256m :taille mémoire allouéz à Varnish

Les autres paramètres servent à l'administration de Varnish

Editez maintenant le fichier /etc/varnish/default.vcl

backend default {

    .host = "127.0.0.1";

    .port = "8080"; 

}

127.0.0.1: adresse de votre serveur Web

8080: Port de vos sites internet

 

Vous pouvez configurer ici tous vos serveurs web.

Relancer Varnish

service varnish restart


categorie :


29 07 2016


Enter the Matrix

Matrix est un standard de communication décentralisé, il permet de créer des fédérations de serveurs pour la communication (multi-sites, multi-OS) via une API HTTP

clients <=> Serveur A <=> Serveur B <=> clients

A la manière de Lync de Microsoft mais libre et Open-source.

Prérequis d'installation

Matrix utilise le python pour interfacer les éléments, ce qui le rend leger (peut etre installé sur un raspberry ou un archlinux) et multiplateforme.

Une présentation est disponible à cette page :

https://github.com/matrix-org/synapse/blob/master/README.rst

Les prérequis sont les outils classique d'une application en python :

sudo apt-get install build-essential python2.7-dev libffi-dev python-pip python-setuptools sqlite3 libssl-dev python-virtualenv libjpeg-dev libxslt1-dev

Installation

Comme le code est en pyhton, l'installation se fait via le gestionnaire python pip , ce qui permet de mettre facillement à jour.

virtualenv -p python2.7 ~/.synapse

source ~/.synapse/bin/activate

pip install --upgrade setuptools

pip install https://github.com/matrix-org/synapse/tarball/master

 

Création de l'utilisateur

 

Pour la première utilisation, un utilisateur est demandé, vous pouvez faire cette demande via la verification par matrix.org soit passer par la ligne de configuration.

source ~/.synapse/bin/activate

synctl start

register_new_matrix_user -c homeserver.yaml https://localhost:8448

Entrez ensuite un login et un mot de passe. un token sera automatiquement généré.

Utilisation

 

Lancement de l’interface :

cd ~/.synapse

python -m synapse.app.homeserver --server-name machine.my.domain.name --config-path homeserver.yaml --generate-config --report-stats=yes

Puis tapez dans votre navigateur :

http://ip_serveur:8448

Entrez vos identifiants...Et vous pouvez alors configurer, créer des salons et chatter !

 


categorie :


10 05 2016


Tourne Disque...dur

Un domaine ou linux ne facilite pas la tâche des utilisateurs comparé à Windows est la gestion des disques dur.

Un petit tour rapide des commandes usuelless

Informations sur les disques

Voir les disques 

fdisk -l

Autes informations (UUID, LABEL...)

blkid

Monter les partitions

Le montage des partitions rend la partition utilisable par l'utilisateur

Montage manuel 

mount /dev/sdXX /POINT/MONTAGE

Avec XX la partition à monter (à retourver dans le fdisk) et /POINT/MONTAGE dossier préalablement créé (NB: mkdir /Dossier_a_creer)

Attention parfois il est nécessaire de préciser le type de montage pour faciliter celui ci :

exemple : 
mount -t ext4 /dev/sdXX /POINT/MONTAGE

Pour les disques venant de Windows, deux outils sont indispensables : 

ntfs-3g pour les disque en NTFS

exfat-fuse pour les disques en exFAT (pour les gros disques et les gros fichiers >4Go)

Montage FSTAB

Le montage FSTAB permet d'automatiser le montage des partitions au démarrage de la machine

Pour cela, le plus fiable est de récuperer l'uuid (identification unique du disque)

Soit en passant par blkid soit en les listants :

ls -l /dev/disk/by-uuid/

Une fois l'uuid récupéré, on édite le fichier /etc/fstab

UUID=2898990C3-CE9D    /Disques/Point_Montage    auto    rw,unhide,uid=0,gid=0,umask=0,users     0       2

UUID=2898990C3-CE9D  : Uuid de la partition    

/Disques/Point_Montage : Dossier ou la partition est montée          

auto : type de formatage (ext4, exfat, auto...)

rw,unhide,uid=0,gid=0,umask=0,users      : options de montage (ici autoriser en lecture/ecriture, non caché et autorise les utilisateurs même si on est pas root à le monter/démonter...etc)                

0       2 : Nombre de tests de montage

Pour tester sans redemarrer :

mount -a

Les partitions montées se retrouvent avec un df -h

Formater un disque

Il faut que la partiotion soit démontée pour cette opération

Pour démonter : umount /dev/sdXX

mkfs.exfat -n LABEL /dev/sdXX

exfat : Formatage désiré (exemple ext2,ext3,vfat,ntfs....)
LABEL : nom du disque
/dev/sdXX : disque

Fomatage "bas niveau"

Le formatage bas niveau n'existe pas réellement mais nous pouvons lancer cette commande pour remettre à zero la totalité de la partition :

dd if=/dev/zero of=/dev/sdXX conv=notrunc

Tester les secteur defectueux 

Selon les manipulations ou dégats (coupure de courant...etc) des secteurs de disques peuvent être déteriorés. Il existe une solution pour tenter de les restaurer (comme un pixel mort sur un écran que l'on bombarde d'informations)

Repérér les secteurs deffecteux 

Pour cela on repère dans un premier temps les informations de block de dique avec un fsdisck

fdisk -l /dev/sdXX

Dans le résultat on repère deux choses :

[...]3907029168 sectors : le nombre de secteurs (ça va surtout determiner le nombre de siestes que vous pouvez faire)

Units: sectors of 1 * 512 = 512 bytes : la taille des blocks pour la recherche des secteurs deffectueux

On lance ensuite la commande de reperrage des secteurs :

badblocks -sv -b 512 /dev/sdX >/tmp/resultat.txt

nous aurons dans /tmp/resultat.txt , les secteurs deffectueux.

Tentative de sauvetage

Attention cette manipulation peut être dangeuse pour le disque !!

hdparm --yes-i-know-what-i-am-doing --write-sector 207205609 /dev/sdX

ici nous allons tenter de "reveiller" le secteur 207205609

Scripter tout ça 

Pour corriger un ou deux secteurs la solution du dessus suffit mais pour un disque un peu plus usé, un script est plus que nécessaire 

 

#!/bin/bash

export i=0;

    while true;

    do

      echo -n "$i ";

      if dd if=/dev/sda of=/dev/null count=1 skip=$i 2>/dev/null;

      then  echo OK ;

      else echo KO; hdparm --write-sector $i --yes-i-know-what-i-am-doing /dev/sda ;

      fi;

      let i+=1;

    done

Ecrivez ce script dans un .sh (nano script.sh) donnez les droits d'execution (chmod +x ./script.sh) lancez le et partez en vacances (pour 2 To il faut compter presque 3 ou 4 jours selon la machine)

L'autre solution est de récuperer avec un script la liste du test précédent et lancer un hdparm dessus.

 

sources :

https://doc.ubuntu-fr.org/mount_fstab

https://www.aplu.fr/v2/post/2016/01/07/forcer-un-disque-a-reallouer-des-secteurs-defectueux

 


categorie :


25 04 2016


Reverse proxy apache

Prérequis 

Installer apache2

#aptitude install apache2

Connaitre sa version d’apache2

#apache2 –v

Une fois apache2 installé, les dossiers qui vont concerner le reverse proxy sont :

/etc/apache2/sites-available/

Dans ce dossier se trouve les configurations des sites (activés ou non activés)(les Virtual Host)

/etc/apache2/sites-enabled/

Dans ce dossier se trouve les configurations des sites activés

/etc/apache2/mods-available/

Dans ce dossier nous trouvons les modules d’apaches installés (activés ou non activés)

/etc/apache2/mods-enabled/

Dans ce dossier nous trouvons les modules d’apaches activés

Pour ajouter un site, créer un fichier de configuration dans /etc/apache2/sites-available/ et  l’activer.

Exemple :

cd /etc/apache2/sites-available/

nano site1

(écrire sa configuration dans le fichier site1)

a2ensite site1

(Ici on active le site)

service apache2 restart

Pour ajouter un module,

cd /etc/apache2/mods-available/

a2enmod <nom_mod> (exemple a2enmod proxy_http)

service apache2 restart

Cas et configurations possible

Pour un site hébergé sur la machine

<VirtualHost *:80>

ServerName site.domaine.com

DocumentRoot /chemin/du/site/

</VirtualHost>

Site sur une autre marchine (il faut installer les mod proxy et proxy_http)

<VirtualHost *:80>

ServerName site.domaine.com

ProxyPreserveHost On

ProxyRequests off

ProxyPass / http://ip.de.la.machine

ProxyPassReverse / http://ip.de.la.machine

</VirtualHost>

Forcer un site en https (il faut installer le mod rewrite)

Parfois nous avons besoin qu’un site soit en http en LAN et https depuis l’exterieur, un reverse proxy peut forcer d’utiliser le site en https avec cette configuration :

<VirtualHost *:80>

ServerName site.domaine.com

RewriteEngine On

RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]

</VirtualHost>

L’avantage de cette méthode est qu’il retranscrit toutes les urls en https pour le visiteur mais nous n’avons pas besoin de modifier la configuration directement dans le site  (pour les liens, ou autres…)

Transmettre les ip visiteur vers le serveur web

Parfois nous avons besoin de récupérer les ip des clients (pour de la sécurisation, les logs ou pour des stats de visiteurs) mais le souci c’est que du coup l’IP visiteur deviens l’adresse du reverse proxy.

Pour palier a cela,

  • Si votre apache est d’une version supérieure ou égale a la 2.4

Installer sur le serveur web le mod remoteip

  • Pour les version inferieur il faut installer le mod rpaf et le configurer comme ci-dessous :
nano /etc/apache2/mods-enabled/rpaf.conf
<IfModule rpaf_module>

    RPAFenable On

    RPAFsethostname On

    RPAFproxy_ips 127.0.0.1 IP.DU.REVERSE.PROXY

    RPAFheader X-Forwarded-For

</IfModule>

Il faut ensuite installer le mod headers sur le reverse proxy

Relancer les services apaches sur les deux serveurs, et vérifier que les IP sont bien celles des visiteurs et non du reverse proxy.


categorie :


08 03 2016


Installation cgi-bin apache2

Pour la domotique, une des principale contrainte est de faire un code léger et rapide. Dans certain cas, le PHP est trop lourd et pas assez interconnecté au hardware.

Une solution est de passer par du python. Mais voila, le python n'est pas un langage web, et bien qu'il puisse etre utilisé pour générer du html, le navigateur ne le reconnais pas nativement.

Pour palier à cela, il faut installer le module CGI de apache, ce module permet l'exécution de script (shell, python, ruby...).

Installation du module CGI

Le module est déjà inclut dans apache (pour voir les modules disponibles voir le dossier /etc/apache2/mods-available) , il suffit de l'activer :

sudo a2enmod cgi

Et une relance d'apache pour qu'il  soit pris en compte :

sudo service apache2 restart

Par défaut, les scripts doivent être déposé dans le répertoire /usr/lib/cgi-bin/

Ce chemin est modifiable dans le fichier des hosts.

 

Pour modifier le fichier de configuration des hosts éditer le fichier /etc/apache2/sites-enabled/000-default.conf

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

<Directory "/usr/lib/cgi-bin">

   AddHandler cgi-script .py

   Options ExecCGI

</Directory>

 

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ : permet de donner le chemin (vous pouvez modifier celui ci par exemple /var/www/cgi-bin/)

AddHandler cgi-script .py : autoriser l'exécution des scripts de type python vous pouvez ajouter des extensions (.pl, .cgi , .sh....)

Options ExecCGI :  On autorise l'exécution.

Vous pouvez maintenant créer et déposer vos scripts dans le répertoire configuré. N'oubliez par par contre de préciser en entête de script, l'exécuteur du script :

exemple :

#!/usr/bin/perl

#!/usr/bin/python

#!/bin/bah

[...]

 

Exemple de script Hello World en python :

hello.py

#!/usr/bin/python

import cgi

print "Content-Type: text/html
"
print """<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Titre de la page en python</title>
    </head>
    <body>
        <h2>Hello World !</h2>
    </body>
</html>"""

Vous pouvez ensuite exécuter votre script via l'url http://<ip_serveur>/cgi-bin/hello.py


categorie :


01 02 2016


Installer un serveur git http

Je cherchais à faire un Github like pour mes projets. Pour faire un serveur git, il existe pas mal de tuto, mais pour un serveur git qui accepte le http...ça se corse...

De plus je voulais que ce serveur git accepte que tout le monde puisse cloner (lire) le projet mais pas pousser (ecrire) dans le projet, donc une lecture anonyme mais une écriture authentifiée.

Installation serveur git

L’installation pour git se fait rapidement :

aptitude install git-core

On crée ensuite le dossier où l’on va installer les projets

mkdir /var/www/git

cd /var/www/git

Création des projets

Le procéder ci-dessous est le même pour chaque projet

mkdir myproject.git

cd myproject.git

git --bare init

chown -R www-data.www-data .

git update-server-info

git config http.receivepack true

 

Installation et configuration de apache

aptitude install apache2

On ajoute ensuite le site git dans conf.d de apache2

nano /etc/apache2/conf.d/git.conf

Ajouter le texte suivant :

=================================================

<VirtualHost *:80>

DocumentRoot /var/www/git

ServerName git.server.local

 

<LocationMatch "^/git/.*/git-receive-pack$">

        AuthType Basic

        AuthName "Git Access"

  AuthUserFile "/data/password"

  Require valid-user

</LocationMatch>

 

SetEnv GIT_HTTP_EXPORT_ALL

SetEnv GIT_PROJECT_ROOT /var/www/git

ScriptAlias /git /usr/lib/git-core/git-http-backend

</VirtualHost>

 

=======================================================

Pensez à modifier le nom de serveur

On relance ensuite apache pour prendre en compte la configuration

service apache2 restart

Création des utilisateurs

htpasswd -c /data/password <utilisateur>

Installation de Gitweb

Pour avoir une vu web des projets, il exsite plusieurs interfaces, la plus simple pour moi est gitweb

aptitude install gitweb

On modifie la configuration pour indiquer les projets

nano /etc/gitweb.conf

changer la ligne :

$projectroot = '/var/cache/git/';

par :

$projectroot = '/var/www/git/';

Ajout d’un theme plus sympa :

git clone https://github.com/kogakure/gitweb-theme.git

./setup -vi –install

On peut alors acceder à la page :

http://<server>/gitweb/

 

Tests

Pour tester, depuis le client, faite un clone :

git clone http://<server>/git/myproject.git

et tenter d'ajouter un fichier :

touch test

git add test

git commit

git push

il devrais alors vous demander une authentification pour pousser les documents

 

sources :

https://git-scm.com/docs/git-http-backend

https://github.com/kogakure/gitweb-theme.git

 


categorie :


06 01 2016


Installation Certificat signé HTTPS dans stunnel

Création du certificat CSR et de la clé privée

On produit la clé privée et le CSR du serveur avec OpenSSL :
openssl req -nodes -newkey rsa:2048 -sha1 -keyout monsite.key -out monsite.csr
 
Attention ! il vous demande un mot de passe, si vous en mettez un, il faudra le taper a chaque demarrage de stunnel pour l'installation du certificat
 
On fait signer sa clé par une autoritée (exemple startssl)
 
On récupère un ou plusieurs CRT
 
exemple :
intermediare_monsite.crt et monsite.crt
 

Création du PEM

cat monsite.key intermediare_monsite.crt monsite.crt >> monsite.pem
Attention, il faut aussi faire en sorte que ce certificat monsite.pem soit lisible par l'utilisateur stunnel :
 
chown stunnel4: monsite.pem
 

Configuration dans Stunnel

 
ouvrir le fichier de conf (exemple : /etc/stunnel/stunnel.conf)
 
Et on ajoute le chemin du certificat :
 
exemple :
 
[monsite]
sni = https:monsite.domaine.com
cert =  /etc/stunnel/cert/monsite.pem
connect = 111.222.333.444
 
on redemarre : 
/etc/init.d/stunnel4 restart

 


categorie :


16 12 2015


OpenVPN avec Active Directory sur Pfsense

Création d'une autorité de certification

Allez dans System > Cert Manager > CAs

Ajouter un certificat  (+)

Descriptive name : Nom du certificat (exemple CA_Openvpn)

Method : Create an internal Certificat Authority Key

Key length : Taille de la clé (conseil >= 2048)

Digest Algorithm : taille Algorithm (conseil >= SHA256 minimum)

Lifetime : durée de l'autorité de certification en jours (exemple 3650 days)

 

Country Code : Nom du pays (exemple FR)

State or Province : Nom département (exemple Savoie)

City : ville (exemple Chambéry)

Organization : (exemple Google2)

Email Address : adresse mail (exemple : admin@mycompany.com)

Common Name : nom commun (exemple: internal-ca)

 

Création Certificat

 

Allez dans System > Cert Manager > Certificates

Method : Create an Internal Certificate

Descriptive name : nom (exemple Cert_OpenVPN)

Certificate authority : choisit l'autorité (exemple : CA_Openvpn)

Key length : Taille de la clé (conseil >= 2048)

Digest Algorithm : taille Algorithm (conseil SHA256 minimum)

Certificate Type : Server Certificat

Lifetime : durée de l'authorité de certification en jours (exemple 3650)

Country Code : nom du pays (exemple FR)

State or Province : nom département (exemple Savoie)

City : ville (exemple Chambéry)

Organization : (exemple Google2)

Email Address : adresse mail (exemple : admin@mycompany.com)

Common Name : nom commun (exemple: internal-ca)

Ajout de l'AD dans PFsense

Coté Active directory, je vous conseil de faire un groupe spécifique pour les utilisateurs afin de gérer plus facilement les personnes mais aussi être sur qu'il n'y ai pas d'impact avec le reste de votre infrastructure.

Allez dans System > User Manager > Server

Ajouter un nouveau server (+)

Descriptive name : nom de votre server (exemple : AD_VPN)

Type : LDAP

Hostname or IP address : adresse IP du serveur

Port value : 389

Transport : TCP-standart

Peer Certificate Authority : votre CA (exemple comme ci dessus : CA_Openvpn)

Protocol version : 3

Server Timeout  : 25

Search scope : Entire Subtree

Base DN: votre domaine AD (exemple DC=domaine,DC=local pour un domaine en domaine.local)

Ensuite, il faut configurer la connexion avec l'administrateur du domaine pour remplir le reste.

Décocher la case "Use anonymous binds to resolve distinguished names" dans Bind credential et remplir avec les informations de l'administrateur :

User DN: utilisateur admin (exemple : DOMAINEAdministrateur)

Password : votre mot de passe admin

On peut ensuite chercher le CN du groupe VPN,

Dans "Authentification containers", cliquez sur "Select", vous devriez voir les différents groupes utilisateurs de votre AD, reste à choisir le bon groupe (exemple OU=VPN,OU=Users,DC=domaine,DC=local)

Initial Template : Microsoft AD

Laisser le reste par défaut.

Configuration OpenVPN

Lancer le Wizard : VPN > OpenVPN > Wizard

Type of Server:  LDAP

LDAP servers: votre AD VPN (exemple AD_VPN)

Certificate Authority: votre autorité de certification (exemple CA_Openvpn)

Certificate: votre certificat (exemple Cert_OpenVPN)

Interface: WAN

Protocol: je vous conseil TCP pour éviter de lancer des requêtes dans tous le réseau de votre client

Local Port: par défaut 1194, à adapter selon l'infrastructure sur le poste distant (firewall)

Tunnel Network: le VLAN de vos client VPN (exemple : 10.0.8.0/24)

Local Network: votre VLAN réseau interne (exemple : 192.168.0.0/24)

Concurrent Connections: nombre maximum de connexions simultanées.

Inter-Client Communication : cochez si vous voulez que les clients puissent communiquer entre eux

Duplicate Connections: si plusieurs connexions sont permise avec le même login.

DNS Default Domain:   

DNS Server 1:   

DNS Server 2:   

...

Entrer les paramètres DNS si vous voulez prendre en compte les DNS interne

Firewall Rule: Pour ajouter la règle automatiquement dans le firewall

OpenVPN rule: Pour ajouter la règle dans les configurations du VPN

Configuration pour le client

Installez le paquet OpenVPN Client Export Utility

System > Packages > Available package > OpenVPN Client Export Utility

Vous devriez maintenant facilement exporter les fichiers de configuration client.

Allez dans VPN > OpenVPN > Client Export

Remote Access Server : votre configuration

Puis dans "Client Install Package" (plus bas dans la page) , dans la colonne de droite vous pouvez choisir le type de configuration à télécharger selon votre client :

- Standard Configurations:

   Archive   File Only

- Inline Configurations:

   Android   OpenVPN Connect (iOS/Android)   Others

- Windows Installers (2.3.8-Ix01):

   x86-xp   x64-xp   x86-win6   x64-win6

- Viscosity (Mac OS X and Windows):

   Viscosity Bundle   Viscosity Inline Config

Installez ensuite la configuration dans votre client OpenVPN sur le poste client.

 

 


categorie :VPN


01 12 2015


Des insectes FreeBSD sur un serveur

Si lors d'une installation d'une distribution a base de FreeBSD (Pfsense, Monowall, FreeNAS, FreeBSD...) vous avez des erreurs au demarrage après l'installation :

En cas de message :

error 1 lba XXXXXXX
No /boot/loader


Réinstallez en décochant le "Packet Mode" dans l'installation du  bootloader

En cas de message :
 

Manual root filesystem specification:
    <fstype>:<device>  Mount <device> using filesystem <fstype>
             e.g. ufs:/dev/da0s1a
    ?                  List valid disk boot devices
    <empty line>       Abort manual input

 mountroot>



Faites ? pour voir les disque.

Tapez ensuite l'ufs du disque :

exemple:


mountroot>ufs:ufsid/565d69e2723f0d16

Le serveur devrait ensuite booter sur votre distribution.

Une fois sur le serveur il faut ajouter le disque dans la conf du boot loader :

Dans /boot/loader.conf.local ajoutez :
vfs.root.mountfrom="ufs:ufsid/565d69e2723f0d16"


categorie :pfsense


21 11 2015


Pfsense en serie

Pré requis

 
•    Un PC (ici sous Windows 10, seul la partie driver RS232 change)
•    Un adaptateur USB-Serie (USB-RS232)
•    Putty
•    Les paquets déposé dans un répertoire pfsense à la racine du PC
 

Récupération des paquets

 
On va récupérer les logiciels nécessaires et les placer dans C:>pfsense/
 
•    L’image Pfsense : https://www.pfsense.org/download/ (prendre la version 32bit NanoBSD avec port console)
•    Le driver de l’adaptateur :
http://dl.free.fr/getfile.pl?file=/SinzvAi3
•    Le logiciel pour pousser l’image :
http://m0n0.ch/wall/physdiskwrite.php
 

Préparation de la carte CF

 
Lancer un terminal en mode administrateur (sur Windows 10 : Win+X)
 

Formater le disque

 
Taper :
C:>diskpart
DISKPART>list disk
 
Repérer la carte Compact Flash dans la liste puis faire :
 
DISKPART> select disk X (ou X est le numéro de votre Carte)
DISKPART>clean
DISKPART>exit
 
Votre Carte est maintenant correctement formatée.
 

Installer l’image de Pfsense sur la carte

 
Ouvrir un terminal en administrateur, se placer dans C:>pfsense/
Lancer la copie de l’image (Attention il faut dézipper si le fichier est zipé)
 
C:pfsense> physdiskwrite -u pfsense-2.0.img
 
choisir le disque à écrire,
L’image est alors poussée dans la carte.
 

Connexion Alix 2D3 en port Série.

 
On se connect avec l’adapateur USB/Série et un cable croisé
 
PC Usb->adapteur->cable croisé->Alix 2D3
 
Attention sous Windows 7 et plus, le driver de base ne marche pas il fait une erreur de mémoire :
 
Pour corriger ce point, il faut cliquer sur le 
périphérique>Proriétés>Mettre à jour le pilote>Rechercher un pilote sur mon ordinateur>Choisir une liste de pilotes de périphériques sur mon ordinateur>Disque Fourni...>Parcourir
 
Choisir le .inf qui se trouve dans le paquet "!!!PL2303_Prolific_DriverInstaller_vist_win7_!!.zip"
 
 

Se connecter au port COM 

 
Reperer le numéro de COM dans le gestionnaire de péripheriques (généralement dans le nom du périphérique.
 
Et lancer un putty avec une connexion à 9600bauds (Attention la vistesse peut varier selon la vitesse configuré dans le BIOS de la carte mère)
Si vous utilisez un autre logiel, pensez a le configurer
 
 
Suivre les étapes d’installation sur le terminal.

categorie :firewall pfsense


29 09 2015


En instance de création...

Openstack permet de créer des machines virtuelles à la volé de manière beaucoup plus souple que Proxmox ou VMWare.

C’est un bon outil très pratique pour créer des machines (ou instances) éphémères pour le test par exemple (pour des machines plus complète il est préférable de passer par une autre virtualisation).

J’ai testé plusieurs configurations d’installation (sur Debian ou Ubuntu) mais j’ai toujours eu des soucis (avec tgt pour Debian, avec d’autres dépendances pour Ubuntu). Les distributions de la famille de Fedora (Fedora, red hat..) sont aussi  capables d’installer OpenStack de cette manière.

Prérequis

  • Une machines avec 4Go de RAM minimum (pour l'utilisation de la machine, prévoire plus pour les instances)
  • Un CentOS installé (ou Fedora ou Red Hat)
  • Une connaissance sur l’utilisation de certificats de connexion (identification par clés publiques avec ssh)

Installation des prérequis

RDO fournit les prérequis d’installation pour Openstack :

yum install -y http://rdo.fedorapeople.org/rdo-release.rpm

yum install -y openstack-packstack

yum update

reboot

Installation Openstack

Nous allons installer OpenStack en un seul node. En effet Openstack est une suite de logiciel qui peut être installé sur différent serveurs pour séparer les éléments (superviseur, volumes…)

packstack --allinone --provision-all-in-one-ovs-bridge=n

Allez boire un café le temps de l’Install (environ 10-15 min...)

Modification du réseau

Openstack met en place son propre réseau, incompatible avec le module de gestion de réseau de CentOS.

Pour palier à ça, il faut supprimer la gestion du réseau par NetworkManager

systemctl stop NetworkManager

systemctl disable NetworkManager

systemctl enable network

systemctl start network

Connexion

Pour vous connecter à l’interface http://<ip_machine>,  il faut aller chercher les logins de connexions :

# cat /root/keystonerc_admin

unset OS_SERVICE_TOKEN

export OS_USERNAME=admin

export OS_PASSWORD=votremotdepasse


categorie :


12 08 2015


Quand MySQL boude Debian

Il arrive qu'une panne de courant ai décidé de vous plomber votre serveur. Vous relancer votre base et la....ça ne marche plus. Adieu base de données remplies avec amour et heures perdues.

/etc/init.d/mysql start

[ ok ] Starting MySQL database server: mysqld ..

[info] Checking for tables which need an upgrade, are corrupt or were

not closed cleanly..

ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)

Dans ce cas, soit on prend le PC et on tente une oeuvre sculturale en le lançant contre le mur, soit on tente de le réparer.

L'opération est en fait assez simple. Cela arrive lorsque le PC se coupe alors que des échanges sont en cours avec la base.

La coupure peut affecter les connexions en cours et les utilisateurs. Ici, l'utilisateur Debian, n'a plus le droit de faire des actions sur votre MySQL.

 

Pour parlier a cela, il faut redonner son GRANT (le roi de la base) aux tables.

Récupération de l'identification de Debian

nano /etc/mysql/debian.cnf (ou vi pour les intimes)
On trouve alors les informations suivantes :
 
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = debian-sys-maint
password = jesuislemotdepasse
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host     = localhost
user     = debian-sys-maint
password = jesuislemotdepasse
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr
 
On se connecte a mysql avec le user root :
 
mysql -u root -pmotdepasseroot
Et on redonne les droits :
 
GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'jesuislemotdepasse';

FLUSH PRIVILEGES;

FLUSH HOSTS;
 
Il faudra ensuite passe un petit moment á redonner les bon privilèges aux utilisateurs et bases.

categorie :


08 06 2015


Optimisation de framboises

J'utilise souvent des raspberrys pour mes projets robotiques. Pratique et pas cher, par contre il faut faire attention à deux points :

  • l'alimentation : L'optimisation se fait de manière éléctronique avec des hub alimentés ou des alimentations externes
  • la mémoire : c'est ce point que nous allons optimiser.

Optimisation des logiciels

Les logiciels inutiles sont souvent sources de consommations de mémoire, de même, il est parfois intérressant d'utiliser des programmes qui utilisent moins de mémoire.

Mise à jour et nettoyage des paquets inutiles.

apt-get -y update && apt-get -y dist-upgrade && apt-get -y autoremove && apt-get -y autoclean

Dropbear au lieu de openssh

Dropbear s'utilise comme openssh mais est moins gourmand en mémoire (environ 10Mo de moins)

Installation de dropbear:

apt-get install dropbear openssh-client

Configuration du lancement au démarrage :

sed -i 's/NO_START=1/NO_START=0/g' /etc/default/dropbear

Suppression de openssh

apt-get purge openssh-server

NB : ce remplacement ne coupera pas la connexion ssh ouverte et ne change rien aux habitudes

Lighttpd ou  Nginx au lieu de apache

Apache est simple d'utilisation car il porte beaucoup de addons souvent inutilisés.

Exemple d'installation de lighttpd :

apt-get remove --purge $(dpkg -l apache* | grep ii | awk '{print $2}')
apt-get install lighttpd

Attention les installations de PHP et MySQL diffèrent de celle de apache

Dash au lieu de Bash

Dash est nativement présent sur le raspberry il faut simplement configurer son utilisation

configuration de dash
sudo dpkg-reconfigure dash

Attention il faut modifier vos scripts pour les adapter à l'utilisation de Dash

Optimisation de mémoire

Nettoyer la mémoire cache

La mémoire cache est souvent utilisée par les navigateurs pour garder des valeurs de variables pour les réutiliser rapidement en cas de besoin.

Par contre elle se remplie vite et ralentie le syst&eagrave;me.

Pour cela on peu faire un script (personnellement j'ai rajouté cette commande dans une crontab pour nettoyer toutes les n minutes)
sync; echo 3 > /proc/sys/vm/drop_caches


Optimisation de la mémoire avec le GPU

Nous pouvons définir sur le rapsberry comment nous voulons répartir la méméoire pour l'optimisation graphique

Si vous utilisez le raspberry en serveur (sans bureau ou browser) on peut baisser cette mémoire (1Mo) Si vous utilisez un bureau il faut augmenter la mémoire (>128Mo)

raspi-config puis choix  8 Advanced Options > choix A3 Memory Split Change the amount of memory made available to the GPU


Optimisation de la mémoire Swap

La mémoire Swap permet en cas de dépassement de la mémoire RAM, de pouvoir échanger dans un espace disque prévu.

vi /etc/dphys-swapfile

Optimisation du processeur

L'overclocking du processeur (Attention, à vos risques et péril) permet d'augmenter la rapidité des traitements et sollicite moins la mémoire. Pour configurer cet overclock, on augmente le voltage du CPU ce qui augmente sa fréquence. On peut augmenter soit avec le tools (raspi-config, choisir l’option 7 pour l’overclock puis la fréquence voulue).

ou en entrant directement les paramètres.

nano /boot/config.txt
    arm_freq=900
    core_freq=450
    gpu_greq=350
    sdram_freq=450
    over_voltage=6
    force_turbo=0

 

 


categorie :


21 04 2015


Mais tu es haut

Si vous voulez afficher la météo sur votre site, il y a  deux possibilités.

  • Soit vous utilisez des iframes toutes faite comme il est proposé sur des sites comme météo-france,
  • Soit vous récuperez les informations pour les adapter à votre site.

Ici nous allons afficher les informations récuperer par WebServices, du site OpenWeather, site prévu pour ce genre de manipulations.


Récuperer les informations météo du webservice d'OpenWeather

Le Webservice peut etre pris d'une ville en format XML ou JSON.
Nous allons récupérer le format JSON mais les actions sont similaire pour le XML.

Dans votre code php, il faut interpreter le WebService pour choisir les informtions à récuperer (a adpater selon vos besoins):

$ws_meteo = 'http://api.openweathermap.org/data/2.5/weather?q=<ville>&lang=<langue>&units=<unité>';

dans le flux, il faut entrer la ville, la langue et l'unité (Celsius ou Fahrenheit)

Exemple : http://api.openweathermap.org/data/2.5/weather?q=Paris&lang=fr&units=metric

Il faut bien sur aller sur cette URL pour voir si le flux est bien perçu.

Traitement des informations.

Pour exploiter ce flux, il faut le convertir en une sorte de tableau, exploitable par le php.

Pour cela, il faut utiliser deux fonctions : file_get_contents (qui récupère l'information dans une variable)
et json_decode (qui traduit en tableau ces informations)

$meteo_json  = file_get_contents($ws_meteo);
$data_meteo  = json_decode($meteo_json);

Vous pouvez alors traiter les informations en affichant les variables désirés :

Exemples :
Pour la température :
$meteo_temperature=$data_meteo->main->temp;
$meteo_temperature_min=$data_meteo->main->temp_min;
$meteo_temperature_max=$data_meteo->main->temp_max;

Pour le vent :
$meteo_vent=$data_meteo->wind->speed;

Pour le logo du temps :
 
foreach ($data_meteo->weather as $weather) {
    $meteo_icone=$weather->icon;
}

Pour adapter les informations, il est intérressant de voir le flux JSON pour connaitre l'arborécence.

Pour cela vous pouvez faire un print_r($data_meteo);

Exploitation du logo météo

Pour exploiter le logo il faut faire le lien entre le nom envoyé par le Webservice et vos propres images.

switch ($meteo_icone) {
case '01d':
$icones_temps='icone_soleil.png';
break;
case '13d':
$icones_temps='icone_neige.png';
break;
case '50d':
$icones_temps='icone_brouillard.png';
[...]

 La liste des icones envoyés sont sur le site : http://openweathermap.org/weather-conditions

source : http://openweathermap.org/

 

 

 


categorie :


18 04 2015


Mettez un Sphinx dans votre Franboise

Dans le monde de la reconnaissance vocale, linux a encore des lacunes face des des systèmes on-line comme l'api de google, ou l'exelent soft S.A.R.A.H mais sur windows.
Il existe pourtant une base solide, à savoir Sphinx qui maitrise plus ou moins bien ce méchanisme.
 

Installation des paquets Sphnix et Pocketsphinx

 
apt-get install bison libasound2-dev
wget http://sourceforge.net/projects/cmusphinx/files/sphinxbase/0.8/sphinxbase-0.8.tar.gz/download
mv download sphinxbase-0.8.tar.gz
wget http://sourceforge.net/projects/cmusphinx/files/pocketsphinx/0.8/pocketsphinx-0.8.tar.gz/download
mv download pocketsphinx-0.8.tar.gz
tar -xzvf sphinxbase-0.8.tar.gz
tar -xzvf pocketsphinx-0.8.tar.gz
 
cd sphinxbase-0.8
./configure --enable-fixed
make
make install
 
cd ../pocketsphinx-0.8/
./configure
make
make install

 

Récupération des dictionnaires français

 
wget -O lium_french_f0.tar.gz http://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/French%20F0%20Broadcast%20News%20Acoustic%20Model/lium_french_f0.tar.gz/download
tar -xvzf lium_french_f0.tar.gz
cd lium_french_f0/
sudo mkdir -p `pkg-config --variable=modeldir pocketsphinx`/hmm/fr_FR/french_f0
sudo mv * `pkg-config --variable=modeldir pocketsphinx`/hmm/fr_FR/french_f0
 
wget -O french3g62K.lm.dmp http://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/French%20Language%20Model/french3g62K.lm.dmp/download
sudo mkdir -p `pkg-config --variable=modeldir pocketsphinx`/lm/fr_FR/
sudo mv french3g62K.lm.dmp `pkg-config --variable=modeldir pocketsphinx`/lm/fr_FR/
 
wget -O frenchWords62K.dic http://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/French%20Language%20Model/frenchWords62K.dic/download
sudo mv frenchWords62K.dic `pkg-config --variable=modeldir pocketsphinx`/lm/fr_FR/
 
 
wget -O lium_french_f2.tar.gz http://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/French%20F2%20Telephone%20Acoustic%20Model/lium_french_f2.tar.gz/download
 

Lancement

/tmp/pocketsphinx-0.8/src/programs/pocketsphinx_continuous -adcdev plughw:1,0 -samprate 16000/8000/48000 -dict /usr/local/share/pocketsphinx/model/lm/fr_FR/frenchWords62K.dic -hmm /usr/local/share/pocketsphinx/model/hmm/fr_FR/french_f0/ -lm /usr/local/share/pocketsphinx/model/lm/fr_FR/french3g62K.lm.dmp
 
avec tmp chemin ou se trouve le dossier dezippé de pocketsphinx et plughw:1,0 entrée micro de la kinect 
 
La solution n'est pas ce qu'il y a de plus fiable mais sert de base pour les outils comme Julius ou Simon.
 
sources : http://sourceforge.net/projects/cmusphinx/files/
 

categorie :


26 03 2015


Noe a sauvé les annimaux, nous on passe aux Framboises

Une fois que vous avez passé près d'un mois à configurer votre raspberry pour qu'il éteigne vos lampes, fasse tourner les jeux vidéo ou juste faire crier Scratchy le chat,

Il est temps de penser à ne pas perdre tout dans une fausse manip ou que madame décide de formater votre carte pour se prendre en selfie.

Pour cela, le principe est de monter un partage réseau qui sert de disque de Backup, et on Dump la mémoire dessus (en root ou sudo):

créez un répertoire temporaire pour le point de montage :

#mkdir /temp_svg

On monte le partage réseau :

#mount -v -t cifs //<adresse>/<dossier>  /temp_svg -o user=<domaine>\<user>,password=<mot_de_passe>

Dump de la carte SD :

#dd if=/dev/mmcblk0 of=/temp_svg/<nom_images>.img


categorie :


23 03 2015


AGM Algo Génétiquement modifié

Quand les maths ou la physique ne peuvent réellement pas répondres à une question, les informaticiens entrent en jeu pour faire des simulations.

L'algorithme génétique permet, en testant plusieurs paramètres aléatoires, de trouver les meilleurs configurations selon un environnement.

Par exemple, si un moto à des roues plus petite ? ou plus grande ? ou est ce que sa forme joue ? quelle est la meilleur taille des roues par rapport à son corps ?

L'algorithme va du coup tester différentes configurations et valider des critères.

Rednutht.org, entre deux créations de Yo-yo, vous propose de montrer cet algo avec quelques exemples.


categorie :


04 03 2015


Ou sont mes clés....

A force de tout vouloir protéger avec des certificats, on se retrouve souvent avec des paires de clés sans savoir si elles vont ensemble. Dans le doute on regenère des clés...etc

OpenSSL sait vous dire si ces clés vont ensemble. Une sorte de validation checksum grace aux empreintes des clés :

openssl rsa -noout -modulus -in FICHIER.key
openssl req -noout -modulus -in FICHIER.csr
openssl x509 -noout -modulus -in FICHIER.cer

Si ces trois clés vont ensemble vous aurez donc les meme empreintes.

 


categorie :


04 03 2015


Installer Node.JS et nmp (node manager)

NodeJS est utilisé de partout pour faire de jolis sites web qui Javascriptent.

Pour l'installer sur une Debian, ce n'est pas instinctif. Heureusement Nico Largo nous a créé un petit script pour automatiser tout ça...

cd /tmp
wget https://raw.github.com/nicolargo/nodeautoinstall/master/nodeautoinstall.py
sudo python ./nodeautoinstall.py -d

Ajouter dans le .profile

# --- NodeJS
export PATH=$PATH:/opt/node/bin
export NODE_PATH=/opt/node:/opt/node/lib/node_modules
# ---

 

source : http://blog.nicolargo.com/


categorie :


05 02 2015


Robot CUPS un prime

Installation

Installation des softs

Il est parfois nécessaire de mettre à jour les paquets via un aptitude update
 
aptitude install cupsys cupsys-client cupsys-bsd cupsys-driver-gimpprint
 
Ceci installera le système de CUPS, les drivers de bases ainsi que la possibilité d'installer les imprimantes résau (pas toujours fonctionnelle,selon la version)
 

Installation des principaux Drivers 

Cette installation permet d'installer une grande quandtités de drivers pour les imprimantes grand public

aptitude install foomatic-db-engine foomatic-filters-ppds
 

Configuration

De base vous ne pouvez accéder au site de configuration uniquement en localhost.
Il faut ajouter le(s) réseau(x) qui peuvent accéder aux pages de configurations.
 
nano /etc/cups/cupsd.conf
 
ou
 
vim /etc/cups/cupsd.conf
 
Dans le fichier ajoutez vos réseaux comme par exemple :
 
  Allow from 192.168.0.*
 
entre  <Location />  et </Location /> pour accéder à la page principale de CUPS, 
et entre  <Location /admin> et </Location /admin> pour acceder à la page d'Administration de CUPS.
 
Dans certaines versions plus anciennes ,il faut aussi faire la même chose pour <Location /printer> pour le chemin vers le(s) imprimante(s) 
 

Relancer cups 

Pour que les paramètres soient pris en compte, il faut relancer CUPS:
 
/etc/init.d/cups stop
/etc/init.d/cups start
 
Attention ! certaines installations se font mal, il faut parfois killer via les processus :
 
ps -ef | grep cups et tuer les processus existants 
 

Page d'administration

Accéder à l'url de CUPS via http://<ip_cups>:631
 
Remarques :
 
  • Parfois la configuration via l'interface écrase la conf, il faut reprendre la configuration de cupsd.conf pour rajouter le(s) réseau(x)
  • Le mot de passe par défaut de la page d'admin est l'identifiant root de la machine. Il est vivement conseillé de changer le user dans le fichier de configuration
  • L'url de CUPS est assez simple d'utilisation, je vous laisse fouiller pour son utilisation
  • Pour ajouter l' (les) imprimante(s) sous Windows, il faut entrer l'adresse http://<ip>:631/printers/<Nom_imprimante> (tel que montré quand vous cliquez sur l'imprimante dans l'onglet Imprimantes de l'url)
  • Sous Linux, installer une imprimante IPP 
  • Vous pourrez voir le statu des impressions via l'url de l'imprimante
  • Vous pouvez créer des Classes d'imprimantes, ces classes permettent de faire du load balancing entre plusieurs imprimantes (utilise la première imprimante libre)
  • Ne pas faire une Classe pour une seule imprimante, cela ralentit l'impression
  • Il faut parfois patienter avant de voir les taches en cours 

Source : pas de source mais vous pouvez trouver de nombreuses explication sur ce site : http://doc.gnu-darwin.org/fr/sam.html


categorie :


30 01 2015


Offre tout compris pour avoir une super vision !

Quand on parle de supervision on à 3 choix possibles...

  • Le payant (HP OpenView par exemple) mais qui veux payer 10 000$ pour 3 serveurs....
  • Le DIY (voir mes post précédents en php) mais il faut des connaissances en code et ce n'est pas toujours évident de faire ce que l'on veut...
  • Le gratuit ! mais alors la...on trouve beaucoup de produits qui se complètent :Nagios pour les services, cacti pour les graphiques, nagvis pour les cartes....

Autant de produits à installer, configurer (pas toujours très intuitifs et il faut faire confiance à des forums) et parfois on s'arrache les cheveux pour les faire collaborer.

Heureusement, on commence à voir des bidouilleurs sympathiques qui sortent des templates qui regroupent ces outils et qui ont la gentillesse de faire ça gratuitement.

C'est ainsi que je suis tombé sur EyesofNetwork, un template qui regroupe tout, qui synchronise tout...Qui a aussi l'avantage de répondre aux critères ITIL (CMDB, ticketing...) et possède beaucoup de pluggins (Oracle...) pour répondre à toutes les infra (PME et grandes infrastructures)

Il s'installe &grave partir d'un ISO complet, il faut un peu de temps pour prendre ses marques, trouver les divers composants et ajouter les équipements (des bases de nagios sont fortement recommandées)

 

Source : https://www.eyesofnetwork.com/


categorie :


16 12 2014


Mise en place d une supervision simplifiée en PHP (Partie 3- autre)

Test VMware


Une autre page est ajoutée pour récupérer le statu des machines VMware via Web Service
Voir ce forum pour le détail du script :
http://stackoverflow.com/questions/25393846/how-to-get-vsphere-host-name-rather-than-host-id

Base de donnée


Le schéma de la base est assez simple :

  • Nom : nom de la machine
  • Ip : IP de la machine (sert pour le ping et le ssh)
  • url : url à tester (peut être une image, une page, un lien externe)
  • t_ping : test du ping (0- pas de test, 1-test)
  • t_ssh : test du ssh (0- pas de test, 1-test)
  • t_url : test URL  (0- pas de test, 1-test)
  • r_ping : résultat du ping (0- pas de test, 1-test KO,2- test OK)
  • r_ssh : résultat du ssh (0- pas de test, 1-test KO,2- test OK)
  • r_url : résultat URL  (0- pas de test, 1-test KO,2- test OK)

categorie :


15 12 2014


Mise en place d une supervision simplifiée en PHP (Partie 2- les fonctions)

Pour différencier les statuts en bases, un code à été choisit :

0 – pas de test

1-machine KO

2-machine OK

Pour sonder les différents services, de simples fonctions en PHP suffisent :

Test du ping

function test_ping($input,$nom) //ici, $input est l'adresse IP de la machine et $nom son nom

{

    $serverPing=new ServerPing(); // voir le script ServerPing.php pour fonctionnement

    $serverPing->send("$input", 1);

        if ($serverPing->isAlive()) {

                $sql = 'UPDATE supervision SET r_ping = "2" WHERE nom = "'.$nom.'"';

                                $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

        } else {

                $sql = 'UPDATE supervision SET r_ping = "1" WHERE nom = "'.$nom.'"';

                                $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

        }

}

Test de l'URL

function test_url($url,$nom)//ici $url est l'url de la page (peut être une image, une page externe ou une page donnée)
{
        $headers = @get_headers($url);
        if(strpos($headers[0],'404') === false)
        {
                $sql = 'UPDATE supervision SET r_url = 2 WHERE nom = "'.$nom.'"';
                                $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
        } else {
                $sql = 'UPDATE supervision SET r_url = 1 WHERE nom = "'.$nom.'"';
                                $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
        }
}

Test du ssh

function test_ssh($ssh,$nom)//ici $ssh est l'ip de la machine et $nom son nom
{
        $SSH = @fsockopen($ssh, 22, $errno, $errstr, 1);
        if ($SSH)
                {
                $sql = 'UPDATE supervision SET r_ssh = "2" WHERE nom = "'.$nom.'"';
                                $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
                }else {
                $sql = 'UPDATE supervision SET r_ssh = "1" WHERE ip = "'.$nom.'"';
                                $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
                $construct_url="http://<serveur_sms>/sendsms.php?numero=<num_admin>&texte=+".$nom."+est+KO";
                file_get_contents($construct_url);//execute l'adresse url pour le sms
                }
 }

 

Attention ce script test juste si le port est en écoute, pour un test plus approfondit une connexion avec login/password est possible


categorie :


14 12 2014


Mise en place d une supervision simplifiée en PHP (Partie 1 - Principe)

 Les outils de supervision, il en existe beaucoup. Du payant aux gratuits, ils répondent à beaucoup de besoins, même trop si l’on veut quelque chose de très simple.

Je voulais une supervision très simple, sans clients installés sur les machines, qui ne test que un ou plusieurs éléments (ping, ssh et url…)

Vu que j’ajoute et je supprime beaucoup de machines à la volé, je voulais un ajout simplifié (injection en base de donnée).

Fonctionnement Global.

Le script de vérification récupère l’état des machines selon les fonctions définis par la suite, il faut un état des lieux et renvoi le résultat en base de données.

Il récupère aussi le résultat du test précédent pour informer l’utilisateur en cas de changement de statu (machines injoignable…)

Par exemple : On ajoute une machine dans la base de données, on lui dit que l’on veut un test de ping et d’URL. Le script va récupérer l’état de l’URL et fait un test de ping.

Si le Ping ne passe pas, il va récupérer l’état précédent. Si la machine marchait, il envoi un SMS à l’administrateur pour lui dire que la machine ne marche plus. Si la machine ne marchait pas, il ne renvoi plus le SMS (voir tutorial serveur SMS).

La première version de mon script se déclenchait uniquement quand l’utilisateur se connectait sur la page, mais tester 20 machines est long en « live »

L’autre solution est d’avoir fait un script  « cronné » toutes les minutes pour envoyer les résultats en base.


categorie :


04 12 2014


Sickbeard en Francais

Prérequis

Tester la version de Pyton (doit etre >2.5)
#python -V

Installation des paquets et création des dossiers :

#apt-get install python-cheetah
#apt-get install git
#mkdir /data/
#cd /data/

Téléchargement et installation de Sickbeard

Téléchargement de Sickbeard

#git clone git://gitlab.com/sarakha63/Sick-Beard.git sickbeard-install-fr
#cd sickbeard-install-fr

Premier test

#python SickBeard.py

Mettre au demarrage et création du lanceur:

#cp init.ubuntu /etc/init.d/sickbeard
#update-rc.d sickbeard defaults

#nano /etc/default/sickbeard

SB_USER=root
SB_HOME=/data/sickbeard-install-fr
SB_DATA=/data/sickbeard-install-fr
SB_OPTS=—config=/data/sickbeard-install-fr/config.ini

(Attention ce sont deux tirets avant config - - )

#/etc/init.d/sickbeard start

Connexion á l’interface

http://ip_du_serveur:8081

Source : http://www.geekmag.fr/installer-sickbeard-et-telechargez-automatiquement-les-nouveaux-episodes-dune-serie-tv/


categorie :


28 11 2014


A la SOAP, deuxieme recette


Suite au post précédent, voici une autre méthode pour les Web services.
L'avantage de celle ci, est que le WSDL (le squelette de l'information) est auto-généré et diffusé par le server lui même ce qui ne nécessite pas au client d'avoir le WSDL chez lui.
L'inconvénient est que du coup un client peu se connecter sans WSDL et du coup il faut sécuriser ces échanges.

L'intérêt de l'exemple ci dessous est qu'il montre deux manières d'utiliser le Web service.
Par les deux fonctions hello et done, on voit d'une part comment le serveur peut récupérer une information (done) ou l'envoyer (hello)

nano client.php


<?php

try
{
  $clientSOAP = new SoapClient( null,
    array (
      'uri' => 'http://<url_serveur>/server.php',
      'location' => '<url_serveur>/server.php',
      'trace' => 1,
      'exceptions' => 0
  ));

  $ret = $clientSOAP->__call('hello', array());
  echo $ret;

  echo '<br />';

  $ret = $clientSOAP->__call('donne', array('i'=>5));
  echo $ret;
}
catch(SoapFault $f)
{
  echo $f;
}

?>


nano server.php


<?php
try
{
  $server = new SoapServer(null, array('uri' => '<url_serveur>/server.php'));

  $server->setClass("Donne");
  $server->handle();
}
catch(Exception $e)
{
  echo "Exception: " . $e;
}
class Donne
{
  function donne($i)
  {
    return $i;
  }
  function hello()
  {
    return "hello world";
  }
}
?>


source : http://willdurand.fr/decouverte-des-webservices-en-php/


categorie :


25 11 2014


A la Soap !

De nos jours beaucoup de sites professionnels utilisent les Webservices pour échanger des données (voir definition wikipedia).

Ce service va permettre de traiter des demandes sans se soucier du protocole (POP, HTTP...etc)

Ce service est aujourd'hui disponible en php nativement. Pour les versions antérieures à php 5.0 on pouvait se servir d'une librairie NUSOAP pour simuler ce service (info et exemple)

Depuis php5, SOAP est directement intégré à php.

Exemple d'utilisation :

Creer un fichier server.php sur votre serveur web qui va creer un serveur SOAP :

nano server.php



<?php
ini_set("soap.wsdl_cache_enabled", "0");
$serveurSOAP = new SoapServer('Nerkdesign.wsdl');
$serveurSOAP->addFunction('getHello');
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
        $serveurSOAP->handle();
}
else
{
        echo 'desole, je ne comprends pas les requetes GET, veuillez seulement utiliser POST';
}

function getHello($prenom, $nom)
{
        return 'Hello ' . $prenom . ' ' . $nom;
}
?>

 


Ce serveur analyse une requette et renvoi une réponse

Pour se faire il s'appuit sur un fichier wsdl comme une sorte de template. Il faut donc créer un model de demande :

Exemple :

nano Nerkdesign.wsdl


<?xml version="1.0"?>
<!-- partie 1 : Definitions -->
<definitions  name="Nerkdesign"
  targetNamespace="urn:Nerkdesign"
  xmlns:typens="urn:Nerkdesign"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>
     <xsd:schema  xmlns="http://www.w3.org/2001/XMLSchema"
   targetNamespace="urn:Nerkdesign">
  </xsd:schema>
 </types>


 <message name="getHelloRequest">
  <part name="prenom" type="xsd:string"/>
  <part name="nom" type="xsd:string"/>
 </message>
 <message name="getHelloResponse">
  <part name="return" type="xsd:string"/>
 </message>

  <portType name="NerkdesignPort">
  

  <operation name="getHello">
   <input message="typens:getHelloRequest"/>
   <output message="typens:getHelloResponse"/>
  </operation>
 </portType>

  <binding name="NerkdesignBinding" type="typens:NerkdesignPort">
  <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
  <operation name="getHello">
   <soap:operation soapAction="NerkdesignAction"/>
   <input name="getHelloRequest">
    <soap:body  use="encoded"
      namespace="urn:Nerkdesign"
      encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
   </input>
   <output name="getHelloResponse">
    <soap:body  use="encoded"
      namespace="urn:Nerkdesign"
      encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
   </output>
  </operation>
 </binding>

 <!-- partie 7 : Service -->
 <service name="NerkdesignService">
  <documentation>Retourne une phrase simple </documentation>
  <!-- partie 8 : Port -->
  <port name="HelloYouPort" binding="typens:NerkdesignBinding">
   <soap:address location="http://<VOTRE_IP>/server.php"/> <!-- modifier ce chemin vers server.php -->
  </port>
 </service>
</definitions>


Il faut ensuite créer un fichier client pour tester ce servceur :

nano client.php



<?php

ini_set("soap.wsdl_cache_enabled", "0");

$clientSOAP = new SoapClient('Nerkdesign.wsdl');

echo $clientSOAP->getHello('Jean','Dupont');

?>


 

sources : http://fr.wikibooks.org/wiki/Programmation_PHP/Exemples/webService#WSDL


categorie :


14 11 2014


Serveur SMS de recyclage

Récupération des paquets

Installation des paquets gammu

#aptitude install gammu gammu-smsd


Detection de la clé et configuration

Voir si la clé est présente :

#dmesg | grep tty | grep usb

Dans mon cas c'est une clé 3G de chez Orange de marque Huawei
#lsusb | grep -i Huawei

On voit ainsi si la clé est présente et sur quel USB.

Voir les paramètres avec Gammu

# gammu-detect
; Configuration file generated by gammu-detect.
; Please check The Gammu Manual for more information.

[gammu]
device = /dev/ttyUSB0
name = Phone on USB serial port HUAWEI_Technology HUAWEI_Mobile
connection = at

[gammu1]
device = /dev/ttyUSB1
name = Phone on USB serial port HUAWEI_Technology HUAWEI_Mobile
connection = at

[gammu2]
device = /dev/ttyUSB2
name = Phone on USB serial port HUAWEI_Technology HUAWEI_Mobile
connection = at

Dans /etc/gammurc, le fichier de paramètrage de gammu on met juste:

[gammu]
device = /dev/ttyUSB0
name = Phone on USB serial port HUAWEI_Technology HUAWEI_Mobile
connection = at


Envoyer un SMS

Voici comment envoyer un SMS

#gammu sendsms TEXT <numéro de tel> -text "<message>"

Ou

#echo "<message>" | gammu sendsms TEXT <numéro de tel>


Autres commandes

Identifier la clé et les infos (IMEI…)
#gammu identify

Localisation (triangulation de la clé)
#gammu getlocation


categorie :


07 11 2014


Kinect sur raspberry


Utilisation des microphones de la kinect

Pour de la reconnaissance vocale, il faut un bon micro.
Si les microphone dit "array" sont très cher, il existe une solution moins couteuse, l'utilisation de la kinect (version xbox360).

Pour cela, il faut acheter l'adaptaeur secteur de la kinect pour l'alimenter suffisament et le brancher sur le raspberry.

Verification de la connexion

Il faut regarder si la kinect est bien reconnue par le rasberry


root@rasp:/# lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 049: ID 0409:005a NEC Corp. HighSpeed Hub
Bus 001 Device 052: ID 045e:02bb Microsoft Corp.
Bus 001 Device 050: ID 045e:02b0 Microsoft Corp. Xbox NUI Motor
Bus 001 Device 053: ID 045e:02ae Microsoft Corp. Xbox NUI Camera

Autre moyen c'est de lancer guview sur le raspberry et voir si il capte le flux video de la kinect.


Installation du driver

aptitude install p7zip-full

git clone http://git.ao2.it/kinect-audio-setup.git

cd kinect-audio-setup

make install

On telecharge le dernier firware de Microsoft...


./kinect_fetch_fw /lib/firmware/kinect

..et on le pousse dans la kinect pour etre iso.

kinect_upload_fw /lib/firmware/kinect/UACFirmware.C9C6E852_35A3_41DC_A57D_BDDEB43DFD04

Le numéro de firware peut changer pour verifier :

root@rasp:/# ls /lib/firmware/kinect/
UACFirmware.C9C6E852_35A3_41DC_A57D_BDDEB43DFD04

 

 Test et utilisation

Vous ne verrez rien dans alsamixer par contre vous pouvez utiliser arecord pour voir le microphone :


root@rasp:/# arecord -l
**** Liste des Périphériques Matériels CAPTURE ****
carte 0: Audio [Kinect USB Audio], périphérique 0: USB Audio [USB Audio]
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0

 On peut ensuite enregister le son via cette commande...

arecord -D plughw:0,0 -f S32_LE -r 16000 -c 4 sortie.wav 

NB: si vous avez d'autres périphériques audio, le debranchement d'un périphérique peut changer l'ordre des Périphériques Matériels CAPTURE de arecord. il faut juste reprendre la partie Test et utilisation pour corriger.

source : http://connectingstuff.net/blog/reconnaissance-vocale-sarah-raspberry-et-le-kinect/


categorie :


05 11 2014


Reconnaissance faciale avec camera raspberry

 Je voulais une solution simple qui puisse reprendre mon fontionnement actuel à savoir :

Camera -> Enregistrement de l'image (en jpg) dans un dossier -> stream de cette image via http

Et le tout sans utilisé (trop) de ressources (j'arrive a environ 30% du CPU avec des pics de charges).

Apres avoir tester dans tous les sens le tutorial de Pierre

En attendnat de passe le Step 3, j'ai mis en place un solution secondaire, la reconnaissance faciale via pyhon.

Je n'ai pas trouvé de script tout fait pour récupérer l'image du module camera, l'analyser avec opencv et la ressortir en jpg pour la streamer avec ma solution actuelle.

Prérequis :

#Installer les paquet Opencv (python)
aptitude install libcv-dev libopencv-dev libcv2.3 python-pip python-dev
#Installation du module pour la caméra raspberry
pip install picamera

#Récupération du cascade (fichier d'algo pour la reconnaissance d'un visage)
wget https://github.com/shantnu/FaceDetect/blob/master/haarcascade_frontalface_default.xml

Ecriture du script :

nano script.py
 


import cv2
import sys
import numpy as np
import picamera
import io

#Si vous voulez entrer le lien vers l'algo au moment de lancer le script : python $prog.py /lien/vers/algo.xml"
#cascPath = sys.argv[1]

#lien vers le fichier d'algo
cascPath = "haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascPath)

while True:

        data = io.BytesIO()
        # Parametre de la camera (resolution, format d'image)
        with picamera.PiCamera() as camera:
                camera.resolution = (320, 240)
                camera.capture(data, format='jpeg')

        data = np.fromstring(data.getvalue(), dtype=np.uint8)
        # Recupere l'image de la camera (frame) et l'analyse.
        frame = cv2.imdecode(data, 1)
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

        faces = faceCascade.detectMultiScale(
                gray,
                scaleFactor=1.1,
                minNeighbors=5,
                minSize=(30, 30),
                flags=cv2.cv.CV_HAAR_SCALE_IMAGE
        )

        # Dessine un rectange autour du visage
        for (x, y, w, h) in faces:
            cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 1)

        # Decommentez si vous voulez voir une sortie sur l'ecran du raspberry
#       cv2.imshow('Video', frame)
        #Enregistre l'image pour etre streamer
        cv2.imwrite('/data/mjpg/test1.jpg', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
                break
# Nettoyage
cv2.destroyAllWindows()
camera.close()
 


Ressources :

http://thinkrpi.wordpress.com/2013/05/22/opencv-and-camera-board-csi/
https://realpython.com/blog/python/face-detection-in-python-using-a-webcam/
https://learn.adafruit.com/raspberry-pi-face-recognition-treasure-box/overview


 


categorie :


29 10 2014


Carte son USB Sur Linux

Verification des périphériques USB présents :

 

$lsusb

et voir si cette ligne est présente :

Bus 001 Device 004: ID 0d8c:000c C-Media Electronics, Inc. Audio Adapter

Vous avez donc une carte audio dans vos périphériques.


Pour aller plus loin

$dmesg

[    3.180129] usb 1-1.2: new full-speed USB device number 4 using dwc_otg
[    3.305734] usb 1-1.2: New USB device found, idVendor=0d8c, idProduct=000c
[    3.314589] usb 1-1.2: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[    3.323703] usb 1-1.2: Product: C-Media USB Headphone Set
[    3.345971] input: C-Media USB Headphone Set   as /devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2:1.3/input/input0
[    3.361692] hid-generic 0003:0D8C:000C.0001: input,hidraw0: USB HID v1.00 Device [C-Media USB Headphone Set  ] on usb-bcm2708_usb-1.2/input3

 

Lister les périphérique utilisable avec alsa (logiciel de gestion de la carte son)


$aplay -l
**** Liste des Périphériques Matériels PLAYBACK ****
carte 0: Set [C-Media USB Headphone Set], périphérique 0: USB Audio [USB Audio]
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0
carte 1: ALSA [bcm2835 ALSA], périphérique 0: bcm2835 ALSA [bcm2835 ALSA]
  Sous-périphériques: 8/8
  Sous-périphérique #0: subdevice #0
  Sous-périphérique #1: subdevice #1
  Sous-périphérique #2: subdevice #2
  Sous-périphérique #3: subdevice #3
  Sous-périphérique #4: subdevice #4
  Sous-périphérique #5: subdevice #5
  Sous-périphérique #6: subdevice #6
  Sous-périphérique #7: subdevice #7

Configurer pour la prise en compte de la carte par alsa

$sudo nano /etc/modprobe.d/alsa-base.conf

changer la ligne pour mettre cette ligne :
 options snd-usb-audio index=0

Vous pouvez ensuite configurer vos volume avec alsamixer

$alsamixer


categorie :


28 10 2014


Putty, lecteur RSS

Faire defiler un RSS dans votre terminal :

while true;do n="$(curl -s http://feeds.feedburner.com/idg_fr/lmi/rss/|sed 's/</ /g'|grep "title>"|sed -e '/^// d' -e 's/title>/---------- /g' -e '1,3d'|tr ' ' ' ')";for i in $(eval echo {0..${#n}});do echo -ne "e[se[0;0H${n:$i:$COLUMNS}e[u";sleep .15;done;done &
 


categorie :


27 10 2014


OpenVPN avec authentification Linux

 

 Partie serveur

 

Installation de OpenVPN

 Installation du paquet :

apt-get install openvpn

Creation du repertoire de clés :

mkdir /etc/openvpn/easy-rsa/

cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/

 

Configuration des variables d’ environnement:

 Configuration des variables :

nano /etc/openvpn/easy-rsa/vars

 

export KEY_COUNTRY="FR"

export KEY_PROVINCE="FR"

export KEY_CITY="Ville"

export KEY_ORG="Organisation"

export KEY_EMAIL="mail@domaine.com"

export KEY_EMAIL=mail@domaine.com

export KEY_CN=Organisation

export KEY_NAME=Organisation

export KEY_OU=Organisation

export PKCS11_MODULE_PATH=Organisation

export PKCS11_PIN=1234

 

 

Generation de la clé serveur et du certificat:

 

cd /etc/openvpn/easy-rsa/

source vars

./clean-all

./build-ca

Creation du jeux de clés coté serveur :

./build-key-server SERVERNAME

./build-dh

 Installation du jeux de clés :

cd /etc/openvpn/easy-rsa/keys/

cp SERVERNAME.key SERVERNAME.crt ca.crt dh1024.pem /etc/openvpn

 

Configuration serveur

 

nano /etc/openvpn/server.conf

  

port1194 //Port de connexion

proto tcp-server//tcp ou udp

dev tun  //tun ou tap

ca ca.crt //attention cas ou ca et clés se trouvent dans le meme rep que server.conf

cert SERVERNAME.crt

key SERVERNAME.key

dh dh1024.pem

server 10.8.0.0 255.255.255.0

keepalive 10 120

comp-lzo

user nobody group nogroup

persist-key persist-tun

client-cert-not-required

plugin /usr/lib/openvpn/openvpn-auth-pam.so login //pluggin pour identification dans /etc/pam.d/login qui correspond a tous les utilisateur linux

status openvpn-status.log

verb 3

  

Tester la configuration

 

cd /etc/openvpn/

openvpn server.conf

 

Lancer le serveur Openvpn

 

service openvpn start

 

Partie client

 

Copier le ca.crt et créer le client.ovpn

 

dev tun

tls-client

 

remote <IP PUBLIQUE> 1194

pull

proto tcp-client

script-security 2

ca ca.crt

comp-lzo

reneg-sec 0

auth-user-pass

 

 


categorie :


23 10 2014


Créer votre dictionnaire

Crunch est un outils qui permet de génerer des dictionnaires informatique utilisés principallement pour des tests de vulnérabilités de mots de passe.

Son utilisation est simple et rapide mais prend beaucoup de place selon la longueur et la complexité du charset utilisé.

crunch <longeur_chaine_mini> <longeur_chaine_maxi> -f <chaine_de_caractere> -o <sortie>

Avec :

<longeur_chaine_mini> chaine de votre "mot" minimum (généralement 8 caractères pour un mot de passe)

<longeur_chaine_maxi> chaine de votre "mot" maximum (exemple pour une box, généramenet 63 caractères)

<chaine_de_caracteres> charset utilisé (chiffres, lettres, caratères spéciaux...)

<sortie> fichier de sortie

 

Exemple pour un chaine de 8 caratères utilisant juste les lettres :

crunch 8 8 -f charset.lst lalpha-space -o wordlist.txt

Liste des Charset générales :
 

hex-lower [0123456789abcdef]
hex-upper [0123456789ABCDEF]
numeric [0123456789]
numeric-space [0123456789 ]
symbols14 [!@#$%^&*()-_+=]
symbols14-space [!@#$%^&*()-_+= ]
symbols-all [!@#$%^&*()-_+=~`[]{}|:; »‘<>,.?/]
symbols-all-space [!@#$%^&*()-_+=~`[]{}|:; »‘<>,.?/ ]
ualpha [ABCDEFGHIJKLMNOPQRSTUVWXYZ]
ualpha-space [ABCDEFGHIJKLMNOPQRSTUVWXYZ ]
ualpha-numeric [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]
ualpha-numeric-space [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ]
ualpha-numeric-symbol14 [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=]
ualpha-numeric-symbol14-space [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+= ]
ualpha-numeric-all [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=~`[]{}|:; »‘<>,.?/]
ualpha-numeric-all-space [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=~`[]{}|:; »‘<>,.?/ ]
lalpha [abcdefghijklmnopqrstuvwxyz]
lalpha-space [abcdefghijklmnopqrstuvwxyz ]
lalpha-numeric [abcdefghijklmnopqrstuvwxyz0123456789]
lalpha-numeric-space [abcdefghijklmnopqrstuvwxyz0123456789 ]
lalpha-numeric-symbol14 [abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_+=]
lalpha-numeric-symbol14-space [abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_+= ]
lalpha-numeric-all [abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_+=~`[]{}|:; »‘<>,.?/]
lalpha-numeric-all-space [abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_+=~`[]{}|:; »‘<>,.?/ ]
mixalpha [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]
mixalpha-space [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ]
mixalpha-numeric [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]
mixalpha-numeric-space [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ]
mixalpha-numeric-symbol14 [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=]
mixalpha-numeric-symbol14-space [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+= ]
mixalpha-numeric-all [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=~`[]{}|:; »‘<>,.?/]
mixalpha-numeric-all-space [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=~`[]{}|:; »‘<>,.?/ ]

 

 


categorie :


23 10 2014


Restauration des paquets installés

Voici comment réinstaller les paquets présent sur une machine pour la duppliquer (uniquement les paquets installés avec dpkg).

Voir la liste des paquets installés :
#dpkg --get-selections

Grâce à cet outil il est ainsi possible d'exporter la liste des paquetages installés de la manière suivante :
#dpkg --get-selections > mes_paquetages

Puis de les installer avec la commande suivante sur une autre machine :

Récupération de la liste précédente :
#dpkg --set-selections < mes_paquetages

Installation de la liste :
#apt-get dselect-upgrade


categorie :


23 10 2014


Redémarrer automatiquement un processus

Ce petit script permet de faire en sorte d'un process est vérifié toutes les minutes et relancé en cas d'arret de celui ci.

Par exemple il m'a été utile pour relancer l'enregistrement d'une vidéo pour un systéme de surveillance.


#!/bin/sh
# /usr/local/bin/relance.sh

NOM_PORCESS=sshd
PROCESS_COMMANDE=' /usr/local/sbin/sshd'
ps auxw | grep -v grep | grep $NOM_PORCESS > /dev/null || $PROCESS_COMMANDE


On rends alors ce script exécutable seulement par l'utilisateur qui doit lancer le processus.

chmod 700 /usr/local/bin/relance.sh

Puis on demande au système d'exécuter ce script toute les minutes:

crontab -e

* * * * * /usr/local/bin/relance.sh > /dev/null 2>&1


categorie :