DAVROMANIAK
Le site de Cyril "Davromaniak" Lavier, sysadmin ascendant geek
This music sounds like it comes from space !

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

Share

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

Share

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.

Share

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.

++

Share

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 !

Share

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.

++

Share

jeudi 27 septembre 2012

The Intriging 10 (INT10) - Week 4

Every week, I will pick 10 college football games which will feature at least one FBS program. These games won't feature powerhouse programs and the stakes will be different from games between two powerhouse programs.

I will give my opinion on every game with an ironic side. These comments will be about the game itself and/or the teams, according to the stakes of the game.

For every team, I will give the conference they are member of.

The first team is the home team

Boise State (FBS MWC) 7 - 6 BYU (FBS Independent)

First set Boise State, BYU serves. Oops, sorry this was not a Tennis match, but it was boring as hell. Even the failed 2PT conversion by BYU didn't woke me up.

Miami of Ohio (FBS MAC) 27 - 16 UMass (FBS MAC)

UMass players can be proud of their performance. They played well but were beaten by MAC title contender.

Northern Illinois (FBS MAC) 30 - 23 Kansas (FBS BIG12)

Not a big upset, as Kansas doesn't plays like an actual BIG12 team but a good win for NIU.

Idaho (FBS WAC) 37 - 40 Wyoming (FBS MWC)

The pillow fight of the week... and a surprising win for Wyoming. For Idaho, the quest for the Big Sky continues next week at UNC.

Alabama (FBS SEC) 40 - 7 FAU (FBS Sun Belt)

Yes, FAU scored a TD in this game, so their objectives are completed.

Western Kentucky (FBS Sun Belt) 42 - 17 Southern Mississippi (FBS C-USA)

This WKU is quite enjoyable to watch this year. Let's hope they win the Sun Belt and are selected to a bowl game to have some national TV exposure.

UNLV (FBS MWC) 38 - 35 Air Force (FBS MWC)

I think we can consider this UNLV win an upset, as I was sure they weren't able to win a game this season. Maybe they finally learned the correct duration for a football game :).

Tennessee (FBS SEC) 47 - 26 Akron (FBS MAC)

Akron is finally back in the business of losing games. At least, Akron's punter has the opportunity to show off his skills.

Arkansas State (FBS Sun Belt) 56 - 0 Alcorn State (FCS SWAC)

Hey, Alcorn State officials. If you want a bigger paycheck, schedule this kind of match against a BCS opponent.

All "BIG10 vs Non-BCS" matches

What the fuck is going in the BIG10 this year ? Illinois losing against Louisiana Tech, Iowa losing against Central Michigan. Wisconsin and Michigan State winning by a small margin against non-BCS opponents. Next week, conference matches are starting. We will see if this impression lasts.

See you next week !!

Share

The Intriging 10 (INT10) - Semaine 4

Chaque semaine, je vais choisir 10 matchs de football américain universitaire opposant au moins une équipe de FBS. Ces matchs auront la particularité de ne pas opposer de grandes équipes entre elles et souvent auront un enjeu relativement différent des matchs entre grandes équipes.

Je commenterai chaque match de façon plus ou moins ironique, ces commentaires toucheront soit le match, soit les équipes, selon l'enjeu du match biensur.

Pour chaque équipe, je précise la conférence dans laquelle elle concoure.

La première équipe citée est celle qui recevait le match

Boise State (FBS MWC) 7 - 6 BYU (FBS Independent)

1er set Boise State, BYU au service. Pardon, ce n'était pas un match Tennis, mais putain que c'était chiant à voir. Même la fin du match, avec la tentative de transformation à 2 points de BYU n'a pas suffit à me réveiller.

Miami of Ohio (FBS MAC) 27 - 16 UMass (FBS MAC)

Les joueurs de UMass peuvent être fiers de leur match, ils ont bien joués, mais sont tombés sur un des prétendants au titre de la MAC.

Northern Illinois (FBS MAC) 30 - 23 Kansas (FBS BIG12)

On ne peut pas considérer ça comme étant un "upset", vu que Kansas ne joue pas au niveau de la BIG12.

Idaho (FBS WAC) 37 - 40 Wyoming (FBS MWC)

Et merde, heureusement que je n'ai pas parié sur Idaho. Bravo à Wyoming pour cette victoire. Pour Idaho, la route vers la Big Sky continue la semaine prochaine, à UNC.

Alabama (FBS SEC) 40 - 7 FAU (FBS Sun Belt)

FAU a fait un super match... vu qu'ils ont marqués un TD contre Alabama.

Western Kentucky (FBS Sun Belt) 42 - 17 Southern Mississippi (FBS C-USA)

WKU est une bonne équipe et son jeu est sympa à regarder. Espérons qu'ils remportent la Sun Belt et se qualifient pour un bowl, afin qu'ils aient un peu d'exposition médiatique.

UNLV (FBS MWC) 38 - 35 Air Force (FBS MWC)

C'est un upset, vu que je ne pensais pas que UNLV était capable de gagner un match cette saison. Ils ont peut-être enfin compris qu'un match dure 60 mins :).r a football game :).

Tennessee (FBS SEC) 47 - 26 Akron (FBS MAC)

Ouf, Akron recommence enfin à perdre des matchs, c'est revenu à la normale. Au moins, leur punter a l'occasion de montrer ses capacités.

Arkansas State (FBS Sun Belt) 56 - 0 Alcorn State (FCS SWAC)

Si Alcorn State veut gagner plus d'argent lors de ces matchs, qu'ils contactent des équipes du BCS.

Tous les matchs "BIG10 vs Non-BCS"

Qu'est-ce qu'il se passe dans la BIG10 cette année ? Illinois perd contre Louisiana Tech, Iowa perd contre Central Michigan. Wisconsin et Michigan State qui gagnent de justesse contre des équipes non-BCS. La semaine prochaine, les matchs de conférence débutent, on va voir si cette mauvaise impression reste.

Rendez-vous la semaine prochaine, pour de nouvelles aventures !

Share

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.

Share

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.

Share

- page 1 de 20