Fabriquer un awalé

Awalé

Selon Wikipiedia : L’awélé ou awalé est un jeu de société combinatoire abstrait créé en Afrique. C’est le plus répandu des jeux de la famille mancala, ensemble de jeux africains de type « compter et capturer » dans lesquels on distribue des cailloux, graines ou coquillages dans des coupelles ou des trous, parfois creusés à même le sol.

Pour ceux qui ne connaissent pas ce jeu je vous propose de lire les règles du jeu

Il y a de multiple façon de jouer à l’awalé. Vous pouvez vous contenter de creuser 12 troues dans le sable et de trouver 48 cailloux.  Il est aussi possible de jouer dans une boîte d’œuf (idéale en bricolage pour les enfants)… J’ai personnellement voulu l’offrir et j’ai donc souhaité le faire en bois.

Le « plateau » : je me suis très inspiré du site african-concept, qui explique la méthode traditionnelle de fabrication. J’ai récupéré deux petites chutes de bois que j’ai creusé au ciseau à bois puis poncé. J’ai acheté « 3 francs 6 sous » un fermoirs et une charnière pour faire plus propre.

Les pions : le caesalpinia crista (l’arbre d’où provient les graines traditionnellement) ne poussant pas en France. Je me suis rabattu sur des haricots blancs bien français que j’ai vernie. Une autre bonne idée, plus esthétique, aurait été de les faire en pâte à sel.

Sortie de la version 1.0 d’emailPoubelle.php – email jetable auto-hébergeable

nepasjeterEdit (05/01/2014) : prise en compte des commentaires

Vous avez besoin d’un service comme jetable.org, mail-temporaire.fr…  emailPoubelle.php c’est pareil… mais en mieux (parce que « à la maison »)

emailPoubelle.php est donc une page qu’il faut typiquement inclure dans votre site. Elle permet d’administrer des adresses email (des alias plus précisément) jetable ou temporaire. Ces adresses peuvent avoir une durée de vie limitée ou non. Elles peuvent être désactivé (>/dev/null) à tout moment.

Le (petit) projet

Le plus gros changement sur version 1.0 est l’utilisation d’une base de données (sqlite, postgresql, mysql.. au choix, c’est du PDO). Mais vous pouvez continuer à utiliser la version 0.3 qui est en full plain text

Le script dépend de Postfix, un service web avec PHP,  php-pdo et (en option) de la lib pear Net_DNS2

Les fonctionnalités dans leurs grandes lignes :

  • Activer / supprimer / suspendre une adresse email
  • NoScript compatible
  • Multi-base (sqlite, postgresql, mysql.. au choix, c’est du PDO)
  • Multi-domaine compatible
  • Expiration des adresses email possible
  • Ajout d’un commentaire sur l’email poubelle
  • Email blackliste
  • Full UTF-8
  • voir le changelog…

Installation

Télécharger & décompresser les sources :

srv:~$ mkdir -p /www/emailPoubelle
srv:~$ cd /tmp
srv:~$ wget -O emailPoubelle.zip http://forge.zici.fr/p/emailpoubelle-php/source/download/master/
srv:~$ unzip emailPoubelle.zip
srv:~$ cp emailpoubelle-php-master/* /www/emailPoubelle

Configurer apache (d’autres serveur web sont compatibles) pour que le DocumentRoot  pointe dans /www/emailPoubelle/www (dans notre exemple)

Configurer Postfix :

srv:~$ vi /etc/postfix/main.cf
[...]
virtual_alias_maps = hash:/www/emailPoubelle/var/virtual
srv:~$ touch /www/emailPoubelle/var/virtual
srv:~$ postmap /www/emailPoubelle/var/virtual
srv:~$ chown www-data /www/emailPoubelle/var/virtual
srv:~$ chown www-data /www/emailPoubelle/var/virtual.db

Ajouter dans le fichier /etc/aliases le devnull (pour la fonction de suspension de l’adresse email)

srv:~$ echo "devnull:/dev/null" >> /etc/aliases
srv:~$ newaliases

Étagère en palette

Etagère en paletteVoici une petite étagère réalisé rapidement sans clou ni vis.

Il vous faut au minimum 2 palettes :

  • Une que vous couperez simplement en 2 dans le sens inverse des planches. (appelé palette de support)
  • Une autre (ou plus) pour faire les étagères

Les planches des étagées reposes simplement sur les planches horizontales de la palette support.

Les palettes de support ne peuvent pas partir vers l’extérieur, car elle est bloquée par le mur & le bar. Afin qu’elle ne puisse pas partir vers l’intérieur il convient d’usiner une ou deux planches d’étagères afin de maintenir les support écarté (visible près du ballet sur les photos suivantes)

Service web : Un mode maintenance pour bricoler

2ème version de ce « truc », avec support SSL, à découvrir par là : Un mode maintenance avec SSL

By RRZEicons (Cc-sa)
By RRZEicons (Cc-sa)

Afin de réaliser des maintenances sur mon service web (ou les services attenant tel que Mysql) j’ai mis en place un petit mot d’excuse qui dit en substance : « maintenance en cours, merci de repasser plus tard ». C’est mieux que « La connexion a échoué » ou « Can’t Connect to MySQL Server on nian nian nian » non ?

La configuration de prod  :

  • Apache sur le port 80

La configuration de maintenance :

  • Apache sur le port 80 (le même)
  • Lighttpd sur le port 81
  • Iptables redirige le trafic arrivant sur le port 80 vers le port 81 en PREROUTING sauf pour mon IP (ça permet donc de bricoler)

Installation de lighttpd

Apeuté, et ayé :

aptitude -y install lighttpd
update-rc.d lighttpd remove
mkdir /var/www/maintenance
echo "Serveur en maintenance" > /var/www/maintenance/index.html # Vous pouvez faire une belle page html c'est mieux !

Configuration de lighttpd

Éditer le fichier /etc/lighttpd/lighttpd.conf

server.modules = (
	"mod_access",
)

server.document-root        = "/var/www/maintenance"
server.upload-dirs          = ( "/var/cache/lighttpd/uploads" )
server.errorlog             = "/var/log/lighttpd/error.log"
server.pid-file             = "/var/run/lighttpd.pid"
server.username             = "www-data"
server.groupname            = "www-data"
server.port                 = 81
server.error-handler-404    = "/index.html"

index-file.names            = ( "index.html", "index.lighttpd.html" )

include_shell "/usr/share/lighttpd/create-mime.assign.pl"

Il est certainement possible de faire plus propre sur ce point. Actuellement je gère le message dans le index.html que je met dans le error404. Des redirection 302 quelque soit l’URL serait à envisager.

Maintenance On/Off

Pour se mettre en mode maintenance :

# Démarrage du serveur d'excuse
service lighttpd start
# Redirection du port 80 vers 81 sauf pour mon IP
iptables -A INPUT -p tcp --dport 81 -j ACCEPT
iptables -t nat -A PREROUTING \! -s ${IPMAISONDEMOI} -p tcp --dport 80 -j DNAT --to-destination ${IPDUSERVEUR}:81
iptables -t nat -A POSTROUTING -j MASQUERADE

Et pour désactiver le mode maintenance :

# Si vous n'avez pas d'autres règles (c'est mal) :
iptables -F
iptables -t nat -F
# Sinon redémarrer votre service iptables 
# Lighttpd n'est plus utile
service lighttpd stop

Si vous avez des suggestions…

[ispconfig] Managesieve (dovecot) & Horde

sieve.infoDes dires de Wikipedia : « Sieve est un langage de filtrage du courrier électronique. Il est normalisé dans le RFC 5228. Sieve permet de filtrer sur les en-têtes d’un message qui suit le format du RFC 5322, c’est-à-dire un message Internet typique.  »

Sieve c’est très pratique car le filtrage du courrier est effectué au niveau du serveur dès la réception de l’email. Ce qui est presque indispensable quand on utilise plusieurs clients de messagerie (web &/ou desktop). Je vais donc utiliser Managesieve (qui est la partie serveur du protocole) pour Dovecot (projet Pigeonhole).

Actuellement le panel ISPconfig me permet d’éditer les filtres Sieve mais n’utilise pas Managesieve. ISPconfig stock en base (table mail_user_filter) et écrase le fichier à chaque modification.

Je ne souhaite plus passer par ISPconfig pour modifier mes filtres, mais directement par Horde (via Ingo) ou Roundcube (plugin) ou encore par thunderbird (plugin) selon mes besoins.

Installation de Managesieve

Rien de plus simple :

aptitude install dovecot-managesieved

Modifier le fichier /etc/dovecot/dovecot.conf :

< protocols = imap
> protocols = imap sieve

Puis redémarrer le service, le port 4190 doit ensuite être à l’écoute :

$ service dovecot restart
$ netstat -pnat | grep 4190
tcp        0      0 0.0.0.0:4190            0.0.0.0:*               LISTEN      11111/dovecot

Horde (ingo) & Sieve

Il vous suffit de modifier le fichier ingo/config/backends.php de votre instance horde de la façon suivante :

[...]
/* IMAP Example */
$backends['imap'] = array(
    // ENABLED by default
<    'disabled' => false,
>    'disabled' => true,
    'transport' => array(
        Ingo::RULE_ALL => array(
            'driver' => 'null',
            'params' => array(),
        ),
    ),
[...]
$backends['sieve'] = array(
    // Disabled by default
<    'disabled' => true,
>    'disabled' => false,
    'transport' => array(
        Ingo::RULE_ALL => array(
            'driver' => 'timsieved',
            'params' => array(
                // Hostname of the timsieved server
                'hostspec' => 'localhost',
                // Login type of the server
                'logintype' => 'PLAIN',
                // Enable/disable TLS encryption
                'usetls' => false,
                // Port number of the timsieved server
                'port' => 4190,
                // Name of the sieve script
<                'scriptname' => 'ingo',
>                'scriptname' => 'filtres',
                // Enable debugging. The sieve protocol communication is logged
[...]

Ne faites (peut être) pas ça chez vous

En effet ça ne s’avère pas être forcément la meilleure des solutions :

  • Il n’est apparemment pas possible d’importer des scripts existants.
  • Plus embêtant il s’avère que Horde fonctionne presque de la même façon qu’ISPconfig. A savoir qu’il stock en base les filtres et écrase le script sieve (via managesieve quand même) Ce qui me condamne à n’utilise qu’une interface (horde) pour modifier mes filtres :’-(

Bon je m’en contente, il est toujours plus agréable de modifier ses filtres via son webmail (horde) que via le panel ISPconfig.

Ghostery : Si c’est gratuit, c’est vous le produit ?

« Si c’est gratuit, c’est vous le produit ! » c’est le titre d’une émission très intéressante de « là-bas si j’y suis » (ré-écouter) qui nous rappel à quel point nos données personnels sont une source de revenu phénoménale pour quelques grosses entreprises de marketing… Ma position personnelle est claire (d’autant plus avec le plugin wordpress d’incitation à l’anti-pub) : je refuse, tant que faire se peut, qu’on collecte des informations sur ma personne à l’insu de mon plein gré. (dédicace Richard V.)

J’avais rédigé un article pour venter les mérites de Ghostery qui, venant s’ajouter à un anti-pub classique, me satisfaisait amplement. Il bloquait réseau sociaux, statistique (type Analytics)… c’était parfait ! Mais au détour d’un surf sur la toile du web (comme disent les jeunes) je suis tombé sur un article de surfezcouvert.net qui dit ceci :

« Ghostery” […] serait détenu par Evidon une entreprise qui… vend nos données personnelles aux publicitaires. »

By moneyblognewz
By moneyblognewz

je contacte l’auteur aussitôt pour essayer de connaître la source de cette information, mais je n’obtiens pas de réponse. J’ai donc fouiné… et voici quelques sources plus ou moins intéressantes sur le sujet:

Donc oui Ghostery appartient à la société Evidon dont l’activité est de faire du  « Online marketing intelligence, web analytics privacy »… un dessin ?

Le développement de Ghostery et sa base d’utilisateurs dévoués nous permettent de révéler la technologie marketing invisible sur le Web de façon plus exhaustive et unique que jamais auparavant, » a déclaré Scott Meyer, PDG d’Evidon. « Un panel de recherche quantitative courant peur comprendre 50 000 utilisateurs. Cependant, notre panel GhostRank compte plus de 7,8 millions d’utilisateurs qui nous permettent d’indexer l’activité de plus de 26 millions de domaines chaque jour, dans le monde entier. Les données anonymes issues de notre panel révèlent un éclairage précieux qui permet aux publicitaires et aux éditeurs d’affiner leur prise de décisions de partenariats dans l’écosystème numérique. » [Sources bfmtv.com]

Toutefois il semblerait* que seul la fonction GhostRank (qui n’est pas -encore- activé par défaut) envoie des données chez Exidon.

* « il semblerait » car je n’ai pas fait la démarché de décompresser et d’analyser le code de Ghostery. Ceci dit si quelqu’un le fait qu’il n’hésite pas à en faire part !

Ghostery serait donc acceptable. Mais plus pour moi, car en plus de ne pas être libre, un doute plane… sans compter qu’on ne sait pas ce qu’ils feront dans la prochaine mise à jour. Il faut trouver une autre solution.

Plan B : Protection par DNS

Il y a un paradoxe à protéger sa vie privée en fessant mentir le DNS non ? En tout cas pour un groupe de machine ça reste une solution remarquable. C’est suite à un commentaire que j’ai découvert adsuck. Adsuck est un petit service DNS qui bloque les méchants…)

Sourceforge avec Adsuck
Sourceforge avec Adsuck

Mais Adsuck, en plus d’être pénible à installer et à faire fonctionner sous linux, ne s’avère pas optimisé donc fait grandement ralentir mon surf. A ajouter à cela le fait que le projet ne semble pas très actif.

Mais en fouillant pour comprendre le fonctionnement d’Adsuck j’ai découvert un « service » qui fournis des fichiers hosts de nom de domaine méchant. Il y a plein de service existant de ce type, celui qu’utilise Adsuck s’appelle winhelp2002.mvps.org, il semble actif, je teste !

Plan C : winhelp2002.mvps.org

On télécharge le fichier hosts fourni et le met à la place du notre. Cette manipulation peut être facilement automatisée tous les jours (cron.daily) avec un petit script :

#!/bin/bash
# Source : http://www.putorius.net/2012/01/block-unwanted-advertisements-on.html
cd /tmp
wget http://winhelp2002.mvps.org/hosts.txt
rm /etc/hosts
mv hosts.txt /etc/hosts

Ce qui me plaisait dans Adsuck c’était l’aspect intégration avec le service DNS et donc la possibilité de le mutualiser… Du coup j’ai scripté pour transformer le fichier hosts de winhelp2002.mvps.org en zone DNS bind9 :

#!/bin/bash

set -eu

HOSTSURL="http://winhelp2002.mvps.org/hosts.txt"
NAMEDCONFADS="/etc/bind/named.conf.ads"
BLOCKEDZONE="/etc/bind/blockeddomain.hosts"
FICTMP=`tempfile`
ERRORLOG=`tempfile`
# Email pour les erreurs (0 pour désactiver
EMAIL=0
# Log d'erreur
exec 2> ${ERRORLOG}

ionice -c3 -p$$ &>/dev/null
renice -n 19 -p $$ &>/dev/null

function cleanup {
    if [ "`stat --format %s ${ERRORLOG}`" -ne "0" ] && [ "$EMAIL" != "0" ] ; then
        cat ${ERRORLOG} | mail -s "$0 - Log error" ${EMAIL}
    else 
        cat ${ERRORLOG} 
    fi
    rm ${ERRORLOG}
}
trap cleanup EXIT

# téléchargement du fichier hosts
wget "${HOSTSURL}" -O ${FICTMP} &>/dev/null

# Suppression des commentaires
grep -v '^#' ${FICTMP} | 
	# Suppression des 6 premières lignes inutiles
	tail -n +6 | 
	# On retir les sauts de ligne mac
	sed 's/\x0D$//' | 
	# La syntaxe bind
	awk  -v blockzone=${BLOCKEDZONE} ' { printf "zone \"%s\"  {type master; file \"%s\";};\n" ,$2,blockzone }' > ${NAMEDCONFADS}

/usr/sbin/named-checkconf ${NAMEDCONFADS}
/usr/sbin/service bind9 reload 

rm ${FICTMP}

Il ne reste plus qu’à inclure le fichier /etc/bind/named.conf.ads dans le named.conf :

>    include "/etc/bind/named.conf.ads";

Après quelques jours d’utilisation ça ne s’avère pas très probant, car ça bloque finalement moins que les machin’block en extension navigateur (Trueblock, Adblock Edge, *block)

Plan D : retour au plan A

Finalement, je suis resté avec mon machin’block et j’ai suivi le conseil de John77800 en ajoutant les listes Antisocial.txt (ajout direct) & Fanboy’s Social (ajout direct)

– Qui dit mieux ?

– Mieux

Backup chiffré avec duplicity sur HubiC

EDIT 24/02/2015 : ‘Il n’est plus nécessaire d’utiliser cloudfiles comme backend pour duplicity. À la place, il faut utiliser un backend spécial hubic intégré à duplicity récemment » voir le commentaire de blankoworld

EDIT 02/2015 : suppression du « DeprecationWarning » dans le log.

EDIT 17/02/2014 : suite à des changements sur Hubic.com, Gu1 à mis à jour python-cloudfiles-hubic. J’ai donc mis à jour mon script en conséquence

Hubic GUI avec duplicityMon ADSL est depuis peut chez OVH. De ce fait je bénéficie d’un compte hubiC avec un espace de stockage d’1To. Quelle aubaine pour des sauvegardes ! Mais bon donner mes mails, mes sites, mes documents administratifs à un tiers… bof bof. Il faudrait un minimum de chiffrage !

Et bien comme disait les autres nuls : « Hassan Cehef c’est possible » avec duplicity et python-cloudfiles-hubic !

python-cloudfiles-hubic est nécessaire car duplicity n’intègre pas nativement le service cloud « HubiC » pour une sombre histoire de protocole d’authentification non standard de la part d’OVH (détail par l’auteur)

Installation

On commence par le plus simple (duplicity) :

aptitude install duplicity

Maintenant python-cloudfiles-hubic :

aptitude install python-setuptools git
cd /usr/src
git clone https://github.com/Gu1/python-cloudfiles-hubic.git
cd python-cloudfiles-hubic
python setup.py  install

Utilisation

Dans vos paramètre sur hubic.com dans votre menu « Vos application » il va falloir ajouter une application :

  • Nom : cequevousvoulez
  • Domaine de redirection : http://localhost/

Quand l’application est créer récupérer le « client id » ainsi que le « client secret » dans l’interface

screenshot.62

Quelques petits tests pour la prise en main :

# Désactiver le bash_history (c'est pénible avec les mots de passes)
unset HISTFILE
# Les variables 
export CLOUDFILES_USERNAME=toto@toujours.lui
export CLOUDFILES_APIKEY=je.vais.pas.vous.donner.le.mot.de.passe.de.toto
# CLOUDFILES_AUTHURL="hubic|client id|client secret|http://localhost/"
export CLOUDFILES_AUTHURL="hubic|api_hubic_XXXX|YYYYY|http://localhost/"
# Sauvegarde
duplicity /root cf+http://default
# Observer l'état
duplicity collection-status cf+http://default
# Liste les fichiers distants 
duplicity list-current-files cf+http://default
# Test la restauration d'un fichier 
duplicity  --file-to-restore .bash_alias cf+http://default /tmp/bash_alias_recup

Rendez-vous ensuite dans votre interface hubiC. Et là normalement il y a plein de fichier duplicity-BLABLA-blabla.bla ! On supprime tout ! (c’était juste pour les tests)

Il ne semble pas possible d’écrire dans un sous répertoire. Mais, comme je l’ai signalé dans mon commentaire, il semble possible d’écrire dans un autre « container » sur hubiC (autre que default). Il ne sera visible qu’après modification de l’URL. Exemple si vous avez écrit dans le conteneur backup rendez vous sur l’URL : https://hubic.com/home/browser/#backup

Le script

Voici mon script :

#!/bin/bash

###################################
## Backup sur HubiC avec duplicity
# Script sous licence BEERWARE
# Version 0.4.1 02/2015
###################################

set -eu

##### Paramètres

# Utilisateur Hubic
HUBICUSER="leuserdevotrehubic"
# Mot de passe HubiC
HUBICPASSWORD="lemotdepassedevotrehubic"
# Application client id Hubic
HUBICAPPID="api_hubic_XXXXX"
# Application client secret Hubic
HUBICAPPSECRET="YYYYYY"
# Application domaine de redirection Hubic
HUBICAPPURLREDIRECT="http://localhost/"
# Liste à sauvegarder (voir le man duplicity avec le filelist)
DUPLICITYFILELIST="/etc/backup-`hostname`.filelist"
# Passphrase pour le chiffrement
PASSPHRASE="VotrePassPhraseDeOufQueYaQueVousEtVousSeulQuiSavez:-p"
# Fréquence des sauvegardes complètes
FULLIFOLDERTHAN="1W"
# Rétention des sauvegardes
RETENTION="2M"
# Log d'erreur
LOGERROR="/var/tmp/backup-hubic-error.log"
# Bin de duplicity
DUPLICITY_BIN="/usr/bin/duplicity"
# Email pour les erreurs (0 pour désactiver)
EMAIL="toto@mondomaine.com"
# Envoyer un rapport par email sur l'état des backup
RAPPORT=1
# Log d'erreur
exec 2> ${LOGERROR}

##### Début du script

function cleanup {
	echo "exit..."
	unset CLOUDFILES_USERNAME
	unset CLOUDFILES_APIKEY
	unset PASSPHRASE
        grep -v "has been deprecated" ${LOGERROR} > ${LOGERROR}.tmp
        mv ${LOGERROR}.tmp ${LOGERROR}
	if [ "`stat --format %s ${LOGERROR}`" != "0" ] && [ "$EMAIL" != "0" ] ; then
		cat ${LOGERROR} | mail -s "$0 - Error" ${EMAIL}
	fi
}
trap cleanup EXIT

# Gentil avec le système
ionice -c3 -p$$ &>/dev/null
renice -n 19 -p $$ &>/dev/null

if ! [ -f ${DUPLICITYFILELIST} ] ; then
	echo "Aucun fichier filelist : ${DUPLICITYFILELIST}"
	exit 1
fi

export CLOUDFILES_USERNAME=${HUBICUSER}
export CLOUDFILES_APIKEY=${HUBICPASSWORD}
export CLOUDFILES_AUTHURL="hubic|${HUBICAPPID}|${HUBICAPPSECRET}|${HUBICAPPURLREDIRECT}"
export PASSPHRASE

# Backup 
${DUPLICITY_BIN} --full-if-older-than ${FULLIFOLDERTHAN} / cf+http://default --include-globbing-filelist ${DUPLICITYFILELIST} --exclude '**'

# Suppression des vieux backups
${DUPLICITY_BIN} remove-older-than ${RETENTION} cf+http://default --force

# Rapport sur le backup
if [ "$RAPPORT" != "0" ] && [ "$EMAIL" != "0" ] ; then
        ${DUPLICITY_BIN} collection-status cf+http://default | mail -s "$0 - collection-status" ${EMAIL}
fi

unset CLOUDFILES_USERNAME
unset CLOUDFILES_APIKEY
unset PASSPHRASE

exit 0

A noter que mes bases de données sont dumpées à plat de façon indépendante du script de backup distant (par mysql_dump.sh)

Exemple de fichier filelist :

/etc
/var/backups/mysql
/var/chroot/bind9/etc/bind
/var/lib/mysql
/var/lib/awstats
/var/lib/mailman
/var/spool/cron
/var/vmail
- /var/www/mercereau.info/wp-content/cache/
- /var/www/default
/var/www
/home
- /root/.cpan
- /root/.cache
- /root/.npm
/root
/opt

Attention : les fichiers et répertoires à exclure doivent apparaître avant l’inclusion d’un répertoire parent. En effet, duplicity s’arrête à la première règle qui matche un chemin donné pour déterminer s’il doit l’inclure ou l’exclure. (sources)

Il n’y a plus qu’a le lancer en tâche cron :

44 4 * * *  /usr/local/bin/backup-to-hubic.sh

Ressources

En continuant à utiliser le site, vous acceptez l’utilisation des cookies (au chocolat) Plus d’informations

Les cookies sont utilisés à des fin de statistique de visite du blog sur une plateforme indépendante que j'héberge moi même. Les statistiques sot faites avec un logiciel libre. Aucune information n'est redistribué à google ou autre. Je suis seul autorisé à lire ces informations

Fermer