DAVROMANIAK
Le site de Cyril "Davromaniak" Lavier, sysadmin ascendant geek
A second tape, I see. Actually I don't follow.

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 !!!

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.