Recently, I noticed that more and more e-mails were classified as SPAM by spamassassin on my mail server, including the ones from my beloved husband (well, honestly, some of those were actually SPAM but that’s a private story…). Looking at the source of the messages, I found out that the criterion DNS_FROM_AHBL_RHSBL always scored out to a large value. The explanation is here: AHBL has shut down! Then, the solution was to disable AHBL filter from spamassassin by editing the file /etc/spamassassin/local.cf and adding the following line:

score DNS_FROM_AHBL_RHSBL 0

Finally, spamassassin daemon must be reloaded:

/etc/init.d/spamassassin reload

 

More about installing spamassassin on your web server: here.


Santa Claus offered me a garmin device (Garmin Edge Touring) for Xmas, which is a good idea for my next mountain bike tours but is also a pain in the ass for linux users. Actually, Garmin has lately switched from a browser plugin (garmin connector) which was available for linux users (at this page or through the ubuntu package garmin-plugin) to an application called garmin express that has no linux version.

Even though that’s the last solution I wanted to use, I chose to use my Windows VM (Windows 7, 64bits, installed with VirtualBox; 64bits Windows installation can be a bit tricky with VirtualBox but is explained in this post). For that, I needed to use USB support in VirtualBox and add a few difficulties with it, hence the present post which explains how to activate USB 2 support in VirtualBox (and is widely inspired from the official documentation – in French). The tutorial has been tested with the following configuration:

  • host machine: Ubuntu 14.04 LTS;
  • VirtualBox version: 4.3.10 (official version in Ubuntu trusty repository;
  • client machine: Windows 7, 64 bits with guest additions installed.

 

The first step to configure USB support is to allow the current user (the one using VirtualBox on the host machine) to access USB VB ports. This is done using the command:

sudo usermod -G vboxusers -a $USER

to allow all users or

sudo usermod -G vboxusers -a tuxette

to allow only the user tuxette. This step is also required even though you only want to use USB 1 support but is only valid after you logout and login again of your Ubuntu current session.

The second step consists in downloading the Oracle support for USB. This support depends on your version of VirtualBox. If you are using the official version from the trusty repository, the file to download is at this link. Otherwise, you may want to have a look at this directory and find your VB version (VB version can be found in the VirtualBox menu “Help/About VirtualBox…”). Once this file is downloaded, use the menu “File/Preferences” and go to the tab “Extensions” in which you can “Add extension pack” and install the extension pack that you have just downloaded.

Finally, in VirtualBox interface, before starting your virtual machine, click on “USB” on the right panel. Click on the button with a “+” sign that says “Adds a new USB filter…” and select the USB device that you want to use in your virtual machine. Then, start the virtual machine (and from that on, the USB device is no more available in the host machine). I managed to use my Garmin device with Garmin Express for windows, which I hope will be available for linux as well… 😉


Ce tutoriel présente quelques cas pratiques d’utilisation de rsnapshot pour sauvegarder des données d’un serveur distant sur une machine locale. En particulier trois types de sauvegardes vont être présentées :

  1. sauvegarde d’un dossier distant sur l’ordinateur local en utilisant une connexion SSH par paire de clé publique/privée
  2. sauvegarde d’un dossier distant sur l’ordinateur local en utilisant une connexion SSH avec mot de passe
  3. sauvegarde d’une base de données distante sur l’ordinateur local en utilisant une connexion SSH

Pour reprendre le contexte décrit dans ce tutoriel, on appellera

  • padawan le serveur contenant les données à sauvegarder. Ce serveur est réputé être accessible par connexion SSH (clé ou mot de passe) ;
  • master l’ordinateur local de stockage (Ubuntu, 12.04 LTS)

Plus d’informations : sur la documentation officielle (en français) et merci à Fabrice pour m’avoir indiqué le logiciel.

Installation de rsnapshot

Le logiciel possède un package Ubuntu et s’installe donc en ligne de commande avec :

sudo apt-get install rsnapshot

On commence par soigneusement sauvegarder le fichier de configuration initial avec :

sudo cp /etc/rsnapshot.conf /etc/rsnapshot.conf.bak

On peut ensuite créer un utilisateur dédié qui gèrera les sauvegardes :

sudo adduser sauveur

puis on édite le fichier /etc/rsnapshot.conf en super-utilisateur pour préciser la configuration générale (les cas typiques d’utilisation sont précisées dans la section suivante) :

  • le répertoire de base où les sauvegardes sont effectuées est précisé en début de fichier :
    snapshot_root /home/sauveur/saves/
    
  • si vous souhaitez utiliser SSH, il faut également décommenter la ligne
    cmd_ssh /usr/bin/ssh  
    
  • les logs de rsnapshot doivent être sauvegardés dans un fichier accessible à l’utilisateur qui lance la commande. J’ai choisi :
    verbose 1
    loglevel  3
    logfile /home/sauveur/rsnapshot.log
    lockfile  /home/sauveur/rsnapshot.pid
    
  • l’option
    link_dest 1
    

    permet de sauvegarder un certain nombre de fichiers spéciaux (sockets, pipes…) ;</li>

  • je lance une sauvegarde hebdomadaire, toutes sont sauvegardées dans un dossier monthly.XX vaut 0, 1, 2, … (0 étant le plus récent, 1 la sauvegarde de la semaine précédente, …). Ce paramètre est spécifié dans
    retain  monthly  4
    

    qui indique 4 sauvegardes mensuelles.</li> </ul>

    Finalement, commentez toute les lignes commençant par backup et limitez la lecture du fichier au seul utilisateur sauveur :

    sudo chown sauveur:sauveur /etc/rsnapshot
    sudo chmod -r /etc/rsnapshot
    

    Ceci est particulièrement utile si vous inscrivez des mots de passe en dur dans ce fichier, comme indiqué plus loin, afin que les autres utilisateurs n’aient pas accès à la lecture de ces mots de passe.

    Quelques cas d’utilisation pratique de rsnapshot

    Sauvegarde par connexion SSH avec paire de clés publique/privée

    Supposons que sur padawan, l’utilisateur dude ait accès (en lecture au moins) aux fichiers/dossiers à sauvegarder. Sur master, en tant que sauveur, on génère une paire de clés SSH sans mot de passe :

    sudo su sauveur
    ssh-keygen -t dsa
    

    La dernière commande génère deux fichiers à l’emplacement que vous avez précisé en répondant à la question

    Enter file in which to save the key (/home/sauveur/.ssh/id_dsa):
    

    Si vous avez laissé cette réponse vide, les fichiers générés sont id_dsa et id_dsa.pub. Copiez le fichier id_dsa.pub sur padawan dans le dossier /home/dude/.ssh en le renommant authorized_keys. Vous devriez alors, depuis master, en tant que sauveur pouvoir vous connecter sur padawan en tant que dude :

    ssh dude@padawan.fr
    Éditez alors de nouveau le fichier /etc/rsnapshot.conf en y ajoutant la ligne suivante (à adapter selon vos besoin) :
    
    backup  dude@padawan.fr:./  root/
    

    qui aura pour effet de sauvegarder toute le répertoire personnel de dude dans /home/sauveur/saves/monthly.X/root/.

    Attention ! Dans la syntaxe de ce fichier, il faut bien utiliser des tabulations et non des espaces pour séparer les différentes parties de la commande.

    Sauvegarde de données par connexion SSH avec mot de passe

    Pour se connecter via un mot de passe, on peut utiliser la même astuce que celle décrite dans ce post. Le principe général est d’utiliser le programme sshpass en conjonction avec rsync pour faire une copie locale du serveur distant puis ensuite, de lancer un backup de cette copie locale. Cela consiste à ajouter dans le fichier /etc/rsnapshot.conf les deux lignes suivantes :

    backup_script   /usr/bin/rsync -ratlz --rsh="/usr/bin/sshpass -p PWD ssh -o StrictHostKeyChecking=no -l dude" padawan.fr:./ /home/sauveur/tmp/      unused/
    backup  /home/sauveur/tmp/    root2/
    

    PWD est le mot de passe de dude pour accéder au serveur padawan.

    Sauvegarde de bases de données par connexion SSH avec mot de passe

    La même astuce que précédemment peut être utilisée pour sauvegarder une base de données avec une connexion SSH par mot de passe sur un serveur sur lequel la base de données est accessible. Le principe général consiste à réaliser un sqldump de la base de données après une connexion ssh (utilisant soit une paire de clés sans mot de passe, soit une connexion avec mot de passe) puis de lancer le backup du répertoire dans lequel la base de données a été sauvegardée. Ceci est effectué à l’aide des trois lignes suivantes à ajouter au fichier /etc/rsnapshot.conf :

    backup_script   /usr/bin/sshpass -p PWD ssh -o StrictHostKeyChecking=no dude@padawan.fr "mysqldump --no-tablespace --opt -h HOST -u LOGIN -p"PWD2" BDNAME | gzip > ~/sauvebd/bdsauvee.sql.gz"    unused1/
    backup_script   /usr/bin/rsync -ratlz --rsh="/usr/bin/sshpass -p PWD ssh -o StrictHostKeyChecking=no -l dude" padawan.fr:sauvebd/ /home/sauveur/tmp2/      unused2/
    backup  /home/sauveur/tmp2/    root3/
    

    La première ligne se connecte avec l’utilisateur dude sur padawan (mot de passe PWD) et sauvegarde la base de données BDNAME du serveur HOST accessible à l’utilisateur LOGIN avec le mot de passe PWD2 : une copie gzippée est sauvegardée dans /home/dude/sauvebd/bdsauvee.sql.gz (le répertoire /home/dude/sauvebd doit avoir été créé préalablement). La seconde effectue une synchronisation de ce répertoire dans le répertoire local /home/sauveur/tmp2 et la troisième effectue la sauvegarde via rsnapshot de ce répertoire temporaire dans /home/sauveur/saves/monthly.X/root3/.

    Tester et automatiser la sauvegarde avec une tâche CRON

    Une fois la configuration effectuée, on peut tester la syntaxe du fichier /etc/rsnapshot.conf en lançant, sur master avec l’utilisateur sauveur les commandes suivantes :

    rsnapshot configtest
    rsnapshot -t monthly
    

    La première teste la syntaxe du fichier et la seconde simule les opérations qui seront effectuées pour un lancement hebdomadaire de rsnapshot.

    Si tout fonctionne correctement, on finalise en créant, sur master avec l’utilisateur sauveur, une tâche CRON :

    crontab -e
    

    où on ajoute la ligne suivante :

    30 01 * * 3 rsnapshot monthly
    

    qui démarre la commande rsnapshot monthly tous les troisièmes jours de la semaine (le mardi), à 1h30.

    </div>


Ce tutoriel est la suite de ce post et se focalise sur la synchronisation entre ownCloud, un smartphone sous Android et thunderbird. En particulier, les données à synchroniser sont les contacts, le calendrier et les tâches du calendrier. Comme décrit dans le post précédent, Owncloud permet aussi de synchroniser des dossiers et des fichiers avec un ordinateur ou un smartphone mais ce point ne sera pas abordé dans ce tutoriel.

Installation sur Ubuntu server

Depuis novembre 2014, le package owncloud n’est plus disponible sur Ubuntu Server pour cause de problème de failles de sécurité. L’installation de Owncloud, si vous souhaitez néanmoins la faire, doit donc être manuelle. Le tutoriel décrit ici l’installation de ownCloud 7.0 sur un serveur Ubuntu 14.04 LTS.

Le dépôt Ubuntu de ownCloud est ajouté à la liste des dépôts particuliers en créant un fichier owncloud.list dans /etc/apt/sources.list.d/ et en y ajoutant la ligne suivante :

deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/xUbuntu_14.04/ /

Les clés d’authentification sont alors importées avec :

wget http://download.opensuse.org/repositories/isv:ownCloud:community/xUbuntu_14.04/Release.key | sudo apt-key add -

puis ownCloud est installé avec :

sudo apt-get update
sudo apt-get install owncloud

 

L’application est installée dans le dossier /var/www/owncloud. Si votre serveur apache est configuré de telle sorte que l’URL http://votre-domaine.fr pointe vers /var/www, ownCloud est donc accessible à http://votre-domaine.fr/owncloud. Dans le cas où votre configuration n’est pas standard ou pour des raisons qui vous sont propres, vous pouvez souhaiter créer un hôte virtuel http://owncloud.votre-domaine.fr ou même un hôte virtuel sécurisé par SSL https://owncloud.votre-domaine.fr comme décrit dans ce post et ce post.

L’étape suivante dans l’installation consiste à créer sur votre serveur mysql une base de données ‘owncloud’ avec un utilisateur ‘owncloudUser’ avec ALL PRIVILEGES. Éditez alors le fichier /var/www/owncloud/config/config.php pour y insérer les informations suivantes :
<br /> 'dbname' => 'owncloud',<br /> 'dbhost' => 'localhost',<br /> 'dbtableprefix' => 'oc_',<br /> 'dbuser' => 'owncloudUser',<br /> 'dbpassword' => 'PWD',<br />
PWD est à remplacer par le mot de passe de l’utilisateur ‘owncloudUser’.

Ouvrez alors un navigateur et tapez l’URL https://owncloud.votre-domaine.fr pour lancer l’assistant d’installation. Choisissez “Create an admin account”. À ce stade, vous pouvez proposer un emplacement personnalisé pour les données (à titre personnel, j’ai créé un utilisateur ownclouduser sur ma distribution Ubuntu et stocké les données dans /home/ownclouduser/data. Cliquez ensuite sur Finish setup pour terminer l’installation.

Synchronisation du calendrier et des contacts avec thunderbird

La synchronisation du calendrier et des contacts avec thunderbird est parfaite : elle fonctionne dans les deux sens sans aucun problème. La seule chose que l’on peut reprocher à ownCloud est une gestion un peu limitée du partage : il est possible de définir des options de partage différentes par événements (visible par tous, date et heure seulement ou bien privé) mais pas des niveaux de partage différents pour différents utilisateurs ownCloud avec qui on souhaite partager l’agenda : un événement public ou privé l’est pour tous les utilisateurs en partage de l’agenda.

Le calendrier se synchronise en installant le plugin “lightning” de thunderbird :

sudo apt-get install xul-ext-lightning

Ensuite, dans le menu “File / New”, choisissez “Calendar” et “On the network”. L’adresse à fournir est https://owncloud.votre-domaine.fr/remote.php/caldav/calendars/theUser/calnametheUser est l’utilisateur du calendrier à synchroniser et calname est le nom du calendrier. Vous pouvez aussi cocher “Offline support” pour avoir toujours une version locale du calendrier sur la machine, même sans connexion internet. En validant, votre mot de passe (celui de l’utilisateur theUser sur ownCloud) vous sera demandé ainsi, éventuellement, qu’une autorisation de validation de votre certificat de sécurité SSL.

Pour synchroniser les contacts, il faut installer le plugin “SOGo Connector” disponible sur cette page. Dans thunderbird, cliquez sur le menu “Tools / Addressbook” et ensuite, dans le carnet d’adresses sur “File / New / Remote Address Book”. L’adresse à fournir pour le carnet d’adresses est https://owncloud.votre-domaine.fr/remote.php/carddav/addressbooks/theUser/contactname/contactname est le nom du carnet d’adresses à synchroniser.

Synchronisation du calendrier et des contacts avec un smartphone android

La synchronisation du calendrier avec un smartphone sous android (Jelly Bean) est très bonne (un ou deux problèmes rencontrés pour des événements récurrents) mais la synchronisation des contacts semble être mal gérée depuis le smartphone vers ownCloud (dans l’autre sens, je n’ai constaté aucune perte de données).

Pour la synchronisation du calendrier, j’ai utilisé le connecteur CalDAV CalDAV sync (payant). Sur le smartphone, dans “Settings / Accounts / CalDAV”, configurez votre compte avec les mêmes paramètres que pour thunderbird. Choisissez “Use SSL (all certificates)”. Le calendrier apparaît alors automatiquement dans l’application calendrier du smartphone.

À noter : Sous blackberry, la synchronisation du calendrier via un protocole CalDAV est géré en natif : il n’est pas nécessaire d’installer une quelconque application supplémentaire mais simplement de paramétrer un nouveau calendrier.

Pour la synchronisation des contacts, il est possible d’utiliser le connecteur CardDAV CardDAV sync free beta (libre). Sur le smartphone, dans “Settings / Accounts / CardDAV”, configurez votre compte avec les mêmes paramètres que pour thunderbird et choisissez “Use SSL (all certificates)”. Les contacts sont alors importés dans le carnet d’adresse du téléphone.

Synchronisation des tâches

L’extension lightning de thunderbird permet aussi la gestion des tâches. Pour synchroniser les tâches sur ownCloud, il suffit d’installer l’application tasks. Pour cela, téléchargez l’archive (ou bien clônez le dépôt Git de l’application). Décompressez là dans le dossier /var/www/owncloud/apps sans changer le nom du dossier. Sur l’interface web de owncloud https://owncloud.votre-domaine.fr, en administrateur, allez dans “Applications” (menu en haut à gauche), dans le menu de gauche, cherchez l’application “Tasks” et appuyez sur “Activer”. La synchronisation des tâches avec thunderbird est alors complètement automatisée dès lors que vous utilisez le même calendrier que celui que vous avez synchronisé avec ownCloud.

Après avoir installé et configuré correctement CalDAV sync sur Android, les tâches peuvent être gérées automatiquement en installant l’application supplémentaire CalDAV Tasksync beta free qui installe une nouvelle application “Tasks” synchronisée automatiquement via CalDAV sync.


This post is a follow-up of this post and this post which describe how to use Jekyll to generate a static website. The particular topic that the current post is addressing is syntax hightlighting with pygments. It is widely inspired by this post, which saved me a couple of hours to set up pygments properly, and is designed to be used on Ubuntu 14.04 LTS.

  1. the first step consists in installing Pygments and in generating a CSS file from pygments:
    sudo apt-get install python-pygments
    
    the corresponding CSS file is then generated using: pygmentize
  2. in the second step, we set-up jekyll installation to use pygments. First, edit the file _config.yml and add the following line
    highlighter: pygments
    
    then, move the previously generated file pygments.css into a subdirectory of your jekyll installation, say assets/css and add the following line in the header of your default layout (this is the file _layouts/default.html in this post): pygments
  3. you can now use Pygments using liquid tags. For instance, the R code
    data("iris")
    plot(iris$Sepal.Length ~ iris$Sepal.Width)
    
    will give the following (not very spectacular) syntax hightlighting: highlightR if set between liquid tags for hightlighting:
      
    data("iris")
    plot(iris$Sepal.Length ~ iris$Sepal.Width)
    The list of available languages and names for these languages can be found in your Pygments installation /var/lib/gems/1.9.1/gems/pygments.rb-0.6.0/vendor/pygments-main/pygments/lexers.
</div>