DAVROMANIAK
Le site de Cyril "Davromaniak" Lavier, sysadmin ascendant geek
Do I amaze you ?

Informatique et nouvelles technologies

Tout ce qui a rapport avec l'informatique, les jeux vidéos, etc....

Fil des billets - Fil des commentaires

samedi 28 décembre 2013

Zimbra mailbox backup script

Hello.

Over the last 2 weeks, I tried a Zimbra Collaboration Suite (Open Source Edition). And before going into production mode, I wanted to perform some mailbox backup/restore tests.

After some searches, I found this page on the Zimbra wiki which contains some backup/restore script. I downloaded the script written by Richardson Lima called "zimbraBackupAllAccounts.sh", then I started adapting the script to my needs.

As I finished my switch to Zimbra, I added this script in the prebackup script on my BackupPC server.

And I thought I could share this modified script, so I created a github repository and gave him a nice name. It's now called zimbashckup (for Zimbra Bash Backup).

It operates in a non-interactive way (to be launched in the cron task or by a backup system) and can perform per folder backups. Which is useful when we only want to restore a folder instead of the whole mailbox.

This script can backup the full mailbox (Briefcase contents, address book, calendar) and even the filters exported to the sieve format (thanks to Hackman61 for the idea).

However, when an object is share, only the original owner version is backed up (it's a zmmailbox limit).

For the remaining features, I think the README file is readable enough :).

The GIT repository is here : https://github.com/davromaniak/zimbashckup

Thanks !!

mercredi 25 décembre 2013

Script de sauvegarde des mailbox pour Zimbra

Bonjour.

Depuis environ 2 semaines, j'avais un Zimbra Collaboration Suite (Open Source Edition) en test sur une VM, et parmi les tests que j'ai effectué, il y avait les sauvegardes/restauration de mails.

En cherchant sur le net, je suis tombé sur cette page du wiki de Zimbra contenant quelques scripts de sauvegarde. J'ai pris le script nommé "zimbraBackupAllAccounts.sh" (écrit par Richardson Lima), et j'ai commencé à le bidouiller pour l'adapter à mes besoins. Au final, je me suis retrouvé avec un script pas mal modifié.

Ayant finalisé ma migration vers Zimbra dans la journée d'hier, j'ai donc ajouté ce script dans la liste des actions de pré-backup effectuées par mon serveur backuppc.

Et je me suis dis que ce script pouvait être utile pour d'autres personnes. Donc j'ai créé un dépôt sur github et je lui ai donné un petit nom. Il s'appelle zimbashckup (pour Zimbra Bash Backup), vu qu'il est écrit en bash.

Le script fonctionne de façon non-interactive (afin d'être lancé en crontab ou par un système de backups) et permet de faire des sauvegardes par dossier. Ce qui est très utile quand on veut restaurer un seul dossier plutôt que toute la boite mail.

Ce script est capable de sauvegarder l'intégralité de chaque mailbox, y compris les dossiers/fichiers du porte document, les RDV du calendrier, les contacts de l'annuaire.

Cependant, quand un élément est partagé, seule la version du propriétaire est sauvegardé (c'est une limite de l'outil zmmailbox).

Pour le reste, je vous laisse lire le README qui est inclus dans le dépôt GIT (je pense qu'il est assez lisible :))..

Le dépôt GIT est dispo ici : https://github.com/davromaniak/zimbashckup

Bonne soirée !!!

mardi 27 août 2013

Imapsync

Hello.

A quick article about imapsync, a great tool when we need to move emails from server to another.

This tool has switched license and it costs 50€ now. The developer asked the Debian project to remove imapsync package from its repository. Imapsync is not under a personal license (created by the developer) which permit to do whatever you want with the source code only if you bought it.

So somebody created a github repository which contains the last version.

To install it under Debian Wheezy, you need git and some perl libraries. This aptitude command will help you installing all the prerequisites (you need to launch it as root)

  • aptitude install makepasswd libmail-imapclient-perl libterm-readkey-perl git

Then, the installation :

  • As a non-privileged user :
    • git clone https://github.com/imapsync/imapsync.git
    • cd imapsync
    • mkdir dist
    • > ./dist/path_1.558.txt
  • As root or with sudo :
    • make install

The use is simple : : imapsync --host1 oldmx.domain.tld --user1 jojothefrite@domaine.tld --password1 verysecurepasswordwithalotofdifferentchartypes --host2 newmx.domaine.tld --user2 jojothefrite@domaine.tld --password2 verysecurepasswordwithalotofdifferentchartypes

On my servers, it ran at about 5 mail by second, and 8 hours were need to transfer 125000 emails. And during this operation, you can receive and read new mails on your new mailbox.

Thanks.

Imapsync

Bonjour.

Un petit billet rapide sur imapsync, un outil sympa quand on doit migrer de serveur mail en migrant aussi le format de stockage.

Cet outil a changé de licence, et il est passé payant récemment (le développeur a explicitement demandé à Debian de le retirer de ses dépôts), mais sous une licence propre au développeur (il me semble qu'il l'a créé spécialement). La licence permet de faire tout ce qu'on veut avec le code source, tant qu'on a payé les 50€ qu'il demande. Suite à ça, une personne a créé un dépôt github contenant la dernière version.

EDIT : L'auteur du logiciel, Gilles LAMIRAL a donné des précisions et des corrections dans le 1er commentaire de cet article, je vous invite donc à lire ce commentaire

Pour l'installer sous Debian Wheezy, il vous faut git et quelques libs. Cette gentille commande aptitude à lancer en root vous installe tout ce qu'il faut :) :

  • aptitude install makepasswd libmail-imapclient-perl libterm-readkey-perl git

Ensuite, pour l'installation :

  • En utilisateur non privilégié :
    • git clone https://github.com/imapsync/imapsync.git
    • cd imapsync
    • mkdir dist
    • > ./dist/path_1.558.txt
  • En root ou avec sudo :
    • make install

Ensuite, l'utilisation est simple : imapsync --host1 oldmx.domaine.tld --user1 jojothefrite@domaine.tld --password1 supermotdepassesécurisé --host2 newmx.domaine.tld --user2 jojothefrite@domaine.tld --password2 supermotdepassesécurisé

La vitesse dépend de pas mal de facteurs, mais pour ma part, ça a tourné à environ 5 messages par secondes, ce qui donne un peu moins de 8 heures pour transférer 125000 mails, sachant qu'en parallèle, on peut consulter et recevoir les nouveaux mails sur la boite de destination.

++

vendredi 16 août 2013

Use XZ with logrotate

Hello.

XZ is a compression format which I like to use, mostly for its good results when compressing text files. And I was seeking to use it with logrotate.

And it's done now with these 3 lines added in /etc/logrotate.conf :

compresscmd /usr/bin/xz
compressext .xz
uncompresscmd /usr/bin/unxz

The default compress argument is "-9", which is working with xz, so no need to edit.

In my servers, logrotate only rotates logfiles in /var/log, so this find command uncompressed GZIP files and compressed them in XZ format :

find /var/log -name "*.gz" | while read filename; do gunzip $filename && xz -vz9 ${filename%.gz}; done

On Debian, the XZ format tools are available in the xz-utils package.

That's all folks !

Utiliser xz avec logrotate

Bonjour.

XZ est un format de compression que j'apprécie fortement, notamment pour ses bons résultats sur la compression de fichiers texte. Et depuis pas mal de temps, je voulais l'utiliser avec logrotate.

Chose faite avec la configuration suivante (que j'ai mis dans le fichier /etc/logrotate.conf pour qu'elle soit utilisée pour tous les logs) :

compresscmd /usr/bin/xz
compressext .xz
uncompresscmd /usr/bin/unxz

L'option de compression par défaut est "-9" qui fonctionne aussi avec xz, donc pas besoin de la modifier.

Dans mon cas, logrotate ne traite que les fichiers de logs présents dans /var/log, donc ce petit find m'a servi à décompresser les fichiers GZIP et les recompresser au format XZ :

find /var/log -name "*.gz" | while read filename; do gunzip $filename && xz -vz9 ${filename%.gz}; done

Sous Debian, les outils qui gèrent les formats XZ (notamment xz et unxz utilisés ici) sont dispos dans le paquet xz-utils.

++

vendredi 21 septembre 2012

Inclure un fichier dans un autre en AWK

Bonjour.

Une fois n'est pas coutume, un peu d'informatique sur ce blog (ne vous inquiétez pas, ça ne durera pas longtemps, le prochain INT10 est prévu pour mercredi soir :D).

J'ai été confronté au besoin de remplacer une chaine de caractères par le contenu d'un fichier dans un fichier texte.

Exemple : je désire remplacer "##__youpi_tralala__##" par le contenu du fichier nommé "youpi_tralala".

J'ai essayé en sed, mais ça ne fonctionnait pas à tout les coups, avec sed qui voulait interpréter le contenu du fichier "youpi_tralala".

Donc j'ai sorti mes moufles et mon outil préféré (AWK).

Voici le résultat, le script include_file.awk :

{
	str=$0
	where=match(str,regexp)
	if (where) {
		while (("cat "file) | getline tstr > 0) {
			if (newstr == "") {
				newstr=tstr
			} else {
				newstr=newstr"\n"tstr
			}
		}
		close (tstr)
		sub(regexp,newstr,str)
	}
	print str
}

C'est un beau script AWK, qui s'appelle de la façon suivante : awk -v regexp="belle regexp" -v file=/chemin/vers/le/fichier/a/inclure -f include_file.awk fichier_contenant_la_regex

Je m'en sers souvent en LaTeX pour débugguer certains include un peu farfelus que je veux faire, pour savoir si c'est le contenu du fichier à inclure ou mon include qui cause le problème.

Pour l'utiliser avec LaTeX, voici un exemple :

awk -v regexp="^%%__paragraphe1__%%$" -v file=includes/paragraphe1.tex -f include_file.awk document.tex | pdflatex -jobname=document

Ici, la chaîne présente dans mon fichier document.tex est "%%__paragraphe1__%%".

Et comme on dit : "Ça marche mais c'est crado... C'est made in davro !!"

Merci.

Incorporate a file in another with AWK

Hello.

Recently, I had to replace a string of characters by a text file content.

Example : I want to replace "##__youpi_tralala__##" by the content of the text file called "youpi_tralala".

I tried with sed, but it wasn't reliable, as sed tried to execute the text file content.

So I worked with my best friend AWK.

Here is the result, the script called include_file.awk :

{
	str=$0
	where=match(str,regexp)
	if (where) {
		while (("cat "file) | getline tstr > 0) {
			if (newstr == "") {
				newstr=tstr
			} else {
				newstr=newstr"\n"tstr
			}
		}
		close (tstr)
		sub(regexp,newstr,str)
	}
	print str
}

It's a beautiful AWK script, which can be launched like this : awk -v regexp="awesome regexp" -v file=/path/to/the/included/file -f include_file.awk text_file_with_the_regex

I use it in LaTeX, to debug some includes, to see if the file content or the include which is the origin of the issue.

Here is an example :

awk -v regexp="^%%__part1__%%$" -v file=includes/part1.tex -f include_file.awk document.tex | pdflatex -jobname=document

Here, the string placed in the document.tex file is "%%__part1__%%".

That's all folks :D.

dimanche 1 juillet 2012

Debian Wheezy a été freezé

Bonjour.

Hier soir, les migrations automatiques de paquets depuis Unstable vers Testing ont été arrêtées. Seul les paquets qui étaient en attente de cette migration ont reçu des autorisations.

Cela fait 8 ans que j'utilise Debian et je suis habitué aux processes de release. Mais je n'y ai jamais réellement porté attention jusqu'a ce que je contribue à Debian en 2011.

Cette freeze est importante pour moi car c'est la première fois que j'en vie une de l'autre côté, vu que j'aide à la maintenance des paquets Nginx (et audacious, mais j'ai été inactif ces derniers temps pour me concentrer pleinement sur Nginx jusqu'a ce que je retrouve une meilleure forme).

Le 27 Mai 2011, J'ai envoyé un mail à la mailing list debian-backports disant que j'ai réalisé un backport de Nginx 1.0.1 vers Squeeze et que j'espérait que quelqu'un l'uploaderait.

La première réponse provenait de Kartik Mistry, un des mainteneurs des paquets nginx (devenu le mainteneur principal depuis). Il a vérifié mon paquet et m'a proposé de l'aider dans la maintenance des paquets.

Ce fut le début d'un fabuleux périple au travers du projet Debian.

Au début, on a travaillés à synchroniser notre travail sur le packaging et le backporting, ensuite j'ai commencé à aider sur certains bugs. Mais j'ai surtout commencé à comprendre le processus de packaging.

Sur la dernière année, le plus gros travail sur le packaging Nginx n'a pas été technique, mais humain. Nous travaillons en équipe, dans laquelle chaque membre connait son rôle.

Je voudrai remercier quelques personnes :

  • Kartik Mistry et toute l'équipe de maintenance des paquets Nginx (Michael Lustfield, Jose Parrella, Fabio Tranchitella, Dmitry Oboukhov)
  • Sven Hoexter, qui sponsorise les backports nginx.
  • Benjamin Drung, qui m'a beaucoup aidé quand j'ai commencé à travailler sur les paquets audacious.
  • Et biensûr, tous les gens avec lesquels j'ai discuté sur les canaux IRC et les mailing lists.

Maintenant, quelques chiffres sur le packaging Nginx depuis la Squeeze freeze :

  • 68 commits sur le dépôt GIT
  • 262 commits sur le dépôt SVN
  • 78 bugs fermés grâce à un upload
  • 18 nouvelles versions de Nginx envoyées vers les dépôts debian.
  • 28 uploads
    • 19 par Kartik Mistry
    • 4 par Michael Lustfield
    • 4 par Moi
    • 1 par Dmitry Oboukhov

Si vous voulez discuter ou nous aider, vous pouvez venir sur le canal IRC #debian-nginx sur le réseau OFTC.

++

Debian Wheezy has been frozen

And it's the first time I actually live a Debian freeze.

Lire la suite...

- page 1 de 5