Synology: Configuration complète du serveur de mail

Introduction

Synology offre par défaut un paquet MailServer. Installer ce paquet ne permet pas pour autant de disposer d’un système de mail fonctionnel. Il faut le configurer et cela n’est pas si simple.

Tout d’abord il faut:

  • Posséder un nom de domaine auquel seront rattachées les adresses mails.
  • Pouvoir modifier les enregistrements DNS de ce domaine. Attention tous les fournisseurs de nom de domaine ne permettent pas ce type de manipulation.
  • Avoir une adresse IP statique. Il est possible de faire marchotter le mail avec une IP dynamique mais cela est vraiment trop contraignant pour une utilisation pratique.

La configuration du mail passe par deux étapes:

  • Configurer la réception du mail
  • Configurer l’émission du mail

Ces deux problèmes sont soumis à des contraintes totalement différentes.

La réception du mail

Pour recevoir le mail il faut installer le paquet MailServer. Dans l’onglet SMTP, il faut ensuite ajouter les noms de domaine et les noms des machines pour lesquelles vous voulez définir des adresses e-mail. Par exemple, je possède le domaine opento.me, je vais donc ajouter:

  • opento.me (mon domaine principal, pour des adresses telles que: toto@opento.me)
  • www.opento.me (le nom de mon serveur web, pour des adresses telles que: webmaster@www.opento.me)

Le deuxième type d’adresse est peu courant, mais certains fournisseurs de certificat SSL vous demanderont d’en posséder une afin de valider votre possession du serveur web. Autant y penser tout de suite.

Il faut ensuite créer un enregistrement DNS pour déclarer votre serveur de mail entrant. Dans l’interface de gestion de votre nom de domaine il faut ajouter un “MX record” qui pointe vers votre serveur de mail. Par exemple pour opento.me j’ai déclaré:

@ 300 IN MX 10 smtp.opento.me.

Voilà, une fois le DNS mis-à-jour vous devriez pouvoir recevoir des mails.

L’envoi des mails

Il y a 20 ans vous n’auriez pas eu besoin de plus pour envoyer du mail. Mais depuis, le SPAM a pris de telles proportions que la plupart des domaines bloquent les mails entrant, à moins que vous ne puissiez montrer patte blanche. De plus, l’envoi de mail est bloqué par la plupart des FAI français. Il faut donc vous connecter à votre BOX en administrateur et désactivez ce filtrage.

Vous pouvez maintenant vous connecter à des serveurs de mail externes, par exemple ceux de gmail.com. Mais ceux-ci vont systématiquement refuser les mails que vous envoyez. En effet, bien que votre domaine pointe vers votre adresse IP, cette adresse est possédée par un domaine différent (celui de votre FAI). Pour gmail il s’agit donc d’une usurpation. Afin de régler ce problème commun, une solution existe: les “SPF record”. Il s’agit encore d’un enregistrement DNS. Celui-ci précise que le domaine auquel il est associé accepte d’envoyer ses mails par un intermédiaire d’un autre domaine. Voici le record SPF de opento.me:

@ 300 IN TXT "v=spf1 mx a ptr -all"

Il indique que toutes les adresses IP déclarées dans le DNS de opento.me peuvent envoyer des mails pour les adresses de opento.me, même si elles appartiennent à un tiers.

Une fois le DNS mis-à-jour vous devriez pouvoir envoyer un email vers une adresse gmail.

Le client de messagerie

Vous pouvez maintenant envoyer et recevoir mais malheureusement les mails restent coincés dans les files d’attente de votre serveur. Il vous faut un client de messagerie pour pouvoir effectivement lire vos mails.

Ce client devra se connecter sur votre serveur et récupérer les mails. Pour cela il utilise le protocole IMAP ou POP3. Dans l’écran de configuration de MailServer du Synology, activez le protocole IMAP ou POP3.

Dorénavant un client de messagerie tel que Outlook ou Thunderbird peut lire et écrire des mails depuis votre serveur.

Pour aller plus loin vous pouvez installer MailStation afin de disposer d’un webmail. Mais essayez aussi Zarafa, ce webmail très complet peut remplacer complètement un gmail ou un hotmail.

Pour finir

Voici quelques commandes postfix utiles en cas de problème avec votre serveur de mail:

  • postsuper -d <ID>, supprime le message <ID>
  • postqueue -f , tente d’envoyer tous les messages en file d’attente
  • postqueue -p , montre le contenu des files d’attente

Les programmes relatifs à postfix et à MailServer sont installés dans:

  • /volume1/@appstore/MailServer/sbin

 

Compilation croisée avec les autotools

Mettre en place pkg-config

Cette partie est tiré du blog suivant: http://www.mega-nerd.com/erikd/Blog/CodeHacking/MinGWCross/pkg-config.html

pkg-config est un script qui permet d’obtenir les options de compilation nécessaires à l’inclusion des bibliothèques qui utilisent ses services. Cependant, lors d’une compilation croisée, pkg-config va renvoyer les options pour les bibliopthèques natives et non pas celle de la plateforme de destination. Pour gérer cela il faut un script qui porte le même préfixe que la chaîne de compilation croisée et qui ne cherche que dans les répertoires de bibliothèque de la plateforme de destination. Le script suivant réalise cette tâche. Si l’on compile pour la plateforme: i586-mingw32msvc il faut appeler ce script: i586-mingw32msvc-pkg-config et compiler avec i586-mingw32msvc-gcc. L’intérêt de ce script
Pour que les scripts générés par autoconf

#!/bin/bash

# This file has no copyright assigned and is placed in the Public Domain.
# No warranty is given.
  
# Detect platform by the way we are called
platform=$(basename $0)
platform=${platform%-pkg-config}

# When using the mingw32msvc cross compiler tools, the native Linux
# pkg-config executable works fine as long as the default PKG_CONFIG_LIBDIR
# is overridden.
export PKG_CONFIG_LIBDIR=/usr/${platform}/lib/pkgconfig

# Also want to override the standard user defined PKG_CONFIG_PATH with
# a mingw32msvc specific one.
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH_MINGW32MSVC}

# Now just execute pkg-config with the given command line args.
pkg-config $@

Les cibles de compilation croisée actuellement disponible sous Cygwin sont:

  • i686-pc-cygwin
  • i686-pc-mingw32
  • i686-w64-mingw32

Fichier de configuration pour texmaker + cygwin

Pour utiliser TeXMaker sous windows avec la distribution latex de cygwin il faut utiliser la configuration suivante:

.....
ToolsLatex=""C:/cygwin/bin/bash.exe" -c "latex -interaction=nonstopmode %.tex""
ToolsDvi="C:/Program Files/MiKTeX 2.9/miktex/bin/yap.exe" %.dvi
ToolsDvips="C:/cygwin/bin/bash.exe" -c "dvips -o %.ps %.dvi"
ToolsPs="C:/Program Files/Ghostgum/gsview/gsview32.exe" %.ps
ToolsPs2pdf="C:/cygwin/bin/bash.exe" -c "ps2pdf %.ps"
ToolsMakeindex="C:/cygwin/bin/bash.exe" -c "makeindex %.idx"
ToolsBibtex="C:/cygwin/bin/bash.exe" -c "bibtex %.aux"
ToolsPdflatex=""C:/cygwin/bin/bash.exe" -c "pdflatex -interaction=nonstopmode %.tex""
ToolsPdf="C:/Program Files/Adobe/Reader 9.0/Reader/AcroRd32.exe" %.pdf
ToolsDvipdf="C:/cygwin/bin/bash.exe" -c "dvipdfm %.dvi"
ToolsMetapost=""C:/cygwin/bin/bash.exe" -c "mpost --interaction nonstopmode" "
ToolsGhostscript="C:/Program Files/gs/gs9.00/bin/gswin32c.exe"
ToolsAsymptote="C:/Asymptote/asy.exe" %.asy
ToolsLatexmk=""C:/cygwin/bin/bash.exe" -c 'latexmk -e "$pdflatex=q/pdflatex -interaction=nonstopmode/" -pdf %.tex'"
ToolsUserquick="latex -interaction=nonstopmode %.tex|bibtex %.aux|latex -interaction=nonstopmode %.tex|latex -interaction=nonstopmode %.tex|xdvi %.dvi"
ToolsXelatex=""C:/cygwin/bin/bash.exe" -c "xelatex -synctex=1 -interaction=nonstopmode %.tex""

Appeler une fonction avec liste d’arguments variable depuis C#

class Program
{
	[DllImport("msvcrt.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
	static extern int sscanf(string str, string format, __arglist);

	static void Main(string[] args)
	{
		string str1 = "Obj1:1.23,5";
		string str2 = "Obj2: 1.23,5";
		string str3 = "Obj3: 1.23 , 5";

		StringBuilder key = new StringBuilder(1024);
		float x,y;

		if (0 < sscanf(str1, "%[^:]:%f,%f", __arglist(key, out x, out y)))
			System.Console.WriteLine("STR1: => {0} {1} {2}", key.ToString(), x, y);
			
		if (0 < sscanf(str2, "%[^:]:%f,%f", __arglist(key, out x, out y)))
			System.Console.WriteLine("STR2: => {0} {1} {2}", key.ToString(), x, y);
			
		if (0 < sscanf(str3, "%[^:]:%f,%f", __arglist(key, out x, out y)))
			System.Console.WriteLine("STR3: => {0} {1} {2}", key.ToString(), x, y);
	}
}

Configurer les interfaces réseaux sous debian/fedora

Pour debian, la configuration des interfaces réseau se fait dans le fichier: ‘/etc/network/interfaces’.

Exemple:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface: nat wan network
allow-hotplug eth0
iface eth0 inet dhcp

# The secondary network interface: vbox host private network
allow-hotplug eth1
iface eth1 inet static
        address 192.168.56.103
        netmask 255.255.255.0

Pour fedora, chaque interface réseau dispose de son propre fichier de configuration dans le répertoire: ‘/etc/sysconfig/network-scripts/ifcfg-‘.
Par exemple:

DEVICE="eth0"
BOOTPROTO="dhcp"
HWADDR="08:00:27:5D:42:C5"
NM_CONTROLLED="yes"
ONBOOT="yes"

Ou:

DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
NETMASK=255.255.255.0
IPADDR=192.168.56.104
USERCTL=no

Créer un package debian

Introduction

On suppose que l’on veut packager le programme: universalprogram. On dispose de l’archive: universalprogram-1.0.tar.gz, contenant les sources de ce programme.

Tout d’abord il faut comprendre ce qui se passe durant l’installation d’un package. Lors de l’installation les étapes suivantes sont parcourues par l’installateur:

  • configuration (configure)
  • installation (install)
  • post installation (postinstall)

De même lors de la désinstallation, l’installateur suit les étapes suivantes:

  • pre suppression (prerm)
  • suppression
  • post suppression (postrm)

A chacune de ces étapes un script spécifique est exécuté. Ces scripts sont appelés les scripts du mainteneur (maintainer’s scripts).

Espace de travail

On commence par créer l’environnement de travail:

mkdir workplace
cd workplace

On copie ensuite l’archive .tar.gz dans le répertoire de travail, puis on la décompresse:

tar zxvf ./universalprogram-1.0.tar.gz

On renomme le répertoire qui vient d’être créé:

mv universalprogram-1.0 universalprogram-1.0~

Ce répertoire servira de répertoire de référence lorsque nous créerons les patchs nécessaires à la debianization du programme.

On décompresse à nouveau l’archive pour obtenir la version que nous allons modifier:

tar zxvf ./universalprogram-1.0.tar.gz

Il nous reste à créer un répertoire ‘debian‘ qui contiendra les fichiers permettant de créer le package proprement dit:

cd universalprogram-1.0
mkdir debian

Le fichier changelog

On doit maintenant créer un fichier ‘changelog‘. Pour cela il suffit de lancer la commande:

dch --create

Notez Bien: il faut être placé dans le répertoire principal et non pas dans le répertoire ‘debian‘.

Fichier compat

Ce fichier contient le numéro de version avec laquelle est compatible le nouveau package.

echo 5 >> debian/compat

Fichier control

Ce fichier définit les propriétés du package.

Fichier cron.d

Fichier universalprogram.config

Il s’agit du script appelé lors de l’étape de configuration.

#!/bin/sh
set -e
# source debconf module
. /usr/share/debconf/confmodule

if [ -f /usr/share/dbconfig-common/dpkg/config ]; then
    # we support mysql and pgsql
    dbc_dbtypes="mysql, pgsql"
    dbc_dbname=universal_program
    dbc_dbuser=up_user
    # source dbconfig-common stuff
    . /usr/share/dbconfig-common/dpkg/config
    #DEBHELPER#
    dbc_go universalprogram $@
fi

On voit ici l’utilisation de ‘dbconfig-common‘ pour créer une base de données utile au programme packagé.

Annexe

Mettre dbc_remove à ‘true‘ va demander une destruction de la base lors de la suppression du package sans demander confirmation à l’utilisateur.

Lors de la suppression d’un package il faut bien comprendre la différence entre:

apt-get remove 'package'
apt-get remove --purge 'package'

Install Debian 6.0 pour développeur

Install classique puis:

sudo apt-get install libboost-all-dev

sudo apt-get install git

sudo apt-get install dpkg-dev

sudo apt-get install debian-keyring

sudo apt-get install autoconf

sudo apt-get install libtool

sudo apt-get install gdb

Puis installer les clés SSH personnelles

Puis cloner les repository git.

Checkouter les bonnes branches:

git remote show origin

git fetch

git checkout -b [branch] origin/[branch]

Hébergement Git

Quelle est le meilleur hébergement Git ?

Github

Guthub propose des repository privées, un gestionnaire d’incident et un wiki. Des hooks permettent de connecter les événements de la repository vers des applications tierces (payantes ou gratuites).

http://www.github.com/

Unfuddle

Unfuddle est une solution complète de gestion de projets. Il inclut: gestion de projets, suivi d’incidents, wiki-like, affectation de tâches, gestion des permissions et une API de web service.

http://unfuddle.com/accounts/plans

Avec un prix de démarrage à 9$/mois (sans SSL) ou 20$/mois (avec SSL) il s’agit d’un vrai bon plan.

Assembla

Assembla est aussi une solution complète de gestion de projets. Elle semble un peu plus fournie en outils (Chats vidéo, etc…). Cependant le prix est lui aussi plus élevé sans que la différence soit forcément justifiée.

http://www.assembla.com/plans?locale=en

CodeBase

Une solution de repository. Il n’ya pas de gestion de projets évoluée. Le prix est donc de ce fait un peu cher pour ce qui est offert (20 euro/mois).

http://www.codebasehq.com/packages

BeanStalk

Encore une solution de repository privée. Comme pour CodeBase c’est un peu cher pour les services offerts.

http://beanstalkapp.com/pricing

GitRepo

Toujours une simple solution de repository privée, mais cette fois le prix est attractif (7$/mois pour un nombre illimité de développeurs et de respository).

http://gitrepo.com/

Installer son propre serveur

Un bon tutoriel si vous désirez installer vous même votre serveur git:

http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way

Utiliser mercurial ?

Ce n’est pas une solution au problème (où trouver un hébergement Git) mais la question vaut la peine d’être posée.

http://www.hginit.com/