Le TwiBlog

The one with Twidi

Aller au contenu | Aller au menu | Aller à la recherche

mardi 24 juillet 2007

Une idée, un projet.

J'ouvre aujourd'hui un nouveau blog dédié à mon gros projet en cours. Il raconte le cheminement de la naissance de l'idée à la réalisation du projet qui en découle(ra).

Tout se passe sur http://idee.twidi.com

dimanche 8 juillet 2007

Marquer des mails comme lus avec procmail

(Attention ce billet ne concerne que les mails stockés dans des boîtes de type Maildir et non pas Mailbox)

A partir du moment où on a une règle de fitrage dans son fichier .procmailrc qui gère les spams, on peut vouloir que les mails déplacés par cette règle dans le dossier .Junk/ soient mraqués comme non lus.

Imaginons que votre règle soit actuellement :

:0
* ^X-Spam-Flag:.*yes
.Junk/

Le déplacement de mail se fait alors dans .Junk/new/

L'idée est de remplacer ce déplacement par un déplacement .Junk/cur/, mais celà n'est pas suffisant pour que le mail soit marqué comme lu. Il faut également rajouter le flag ":2,S" (:2 par défaut (voir explication sur Wikipedia et S pour "Seen").
Pour celà, on récupère le nom du fichier (en se basant sur $LASTFOLDER qui contient le chemin complet du mail en cours de traitement), et on effectue le déplacement/renommage en même temps.

Dans le cas où on veut effectuer ce marquage pour plusieurs règles, il peut être intéressant de factoriser.

On va donc mettre dans un fichier externe (par exemple ~/.procmailrc.moveandmarkasread) la règle "déplacer et marquer comme lu" :

:0c
$foldername

:0
* LASTFOLDER ?? /\/^/+$
{ tail=$MATCH }

TRAP="mv $LASTFOLDER $foldername/cur/$tail:2,S"

HOST

Pour plus de facilité, on va déclarer en haut de notre fichier .procmailrc une variable pour le chemin de ce fichier (on considère que $HOME est déjà défini)

MOVEANDMARKASREAD=$HOME/.procmailrc.moveandmarkasread

Comme on aura pu le voir dans le fichier en question, il faut définir une variable foldername qui contient votre dossier dans lequel le message devrait être déplacé. Dans notre exemple il s'agit de .Junk/ (ne pas oublier le / final !)

On va ensuite inclure ce fichier externe pour appliquer la règle, grâce à la commande INCLUDERC

Cela donne au final la règle suivante (qui remplace celle d'origine) :

:0
* ^X-Spam-Flag:.*yes
{
  foldername=.Junk/
  INCLUDERC=$MOVEANDMARKASREAD
}

lundi 2 juillet 2007

ssh sur un autre port : quelles options pour scp et rsync

Si jamais votre serveur ssh écoute sur un autre port que son classique port 22, il faudra l'indiquer aux autres programmes utilisant ssh, comme scp et rsync

Voici les options à utiliser :

ssh : -p PORT

scp : -P PORT (notez le P majuscule)

rsync : -e 'ssh -p PORT'

Comment reprendre une copie scp interrompue (comme un wget --continue) : rsync --partial

Imaginez que vous soyez en train de récupérer un fichier via scp

Typiquement:

scp user@host:/path/to/the/file .

Et là, à 95%, c'est le drame. Pour une raison inconnue le réseau tombe et la connexion ssh utilisée par scp se coupe.

Comme tout le monde, vous cherchez dans le man scp l'option qui, comme pour wget, permet de reprendre un téléchargement là ou il en était. Mais non, rien, pas de --continue ou autre option équivalente. A priori c'est reparti pour le téléchargement du fichier en entier.

Et non ! C'est là que rsync nous sauve la vie, grâce à son option --partial

Voici la commande :

rsync --partial user@host:/path/to/the/file .

(Commande à relancer plusieurs fois si nécessaire)