Installer le core MLDonkey dans un chroot

Auteur : Olivier BOYER - oboyer () ajoute ! org

Mots clés

OpenBSD, chroot, MLDonkey core, mlnet

Introduction

Ce document décrit comment installer la partie “core” du logiciel d'échange de pair à pair MLDonkey dans un “environnement à racine déplacé” (aussi appelé cage ou chroot) sous OpenBSD.

Il existe de nombreux logiciels d'échanges de pair à pair (“peer to peer” en Anglais). L'architecture de MLDonkey a un avantage certain sur les autres : le moteur d'échange (MLDonkey core ou mlnet) de fichiers est séparé de l'interface utilisateur (Interface Homme Machine, ou Graphical User Interface). Ainsi il est possible d'exécuter le moteur d'échange de fichiers sur une machine, et l'interface utilisateur sur une autre.

MLDonkey est utilisé ici en version 2.9.5, disponible à l'url : http://www.mldonkey.org.

La partie core de MLDonkey (appelée mlnet) est compilée statiquement pour faciliter l'installation dans un environnement à racine déplacé.

Présentation de la maquette

  • MLDonkey core (= mlnet) s'exécute sur une machine fonctionnant sous OpenBSD 4.3
  • L'interface utilisateur s'exécute sur une autre machine du réseau local, ici sous Linux Ubuntu
  • mlnet est compilé de manière statique
  • mlnet s'exécute dans un chroot, ici /space
  • mlnet s'exécute sous l'identité d'un utilisateur dédié, ici _donkey.

Note

Toutes les commandes présentées ici, sont à exécuter, sauf mention contraire, en tant qu'administrateur de la machine.

Pré-requis

  • Le système d'exploitation OpenBSD de la machine serveur doit être installé et fonctionnel.
  • MLDonkey est écrit en ObjectivCaml, avec certaines parties en langage C et en Assembleur. Il faut donc qu'ObjectivCaml soit installé sur le système.
  • Pour la compilation de MLDonkey, il faut que le GNU make, autoconf, automake soient installés.

Installer ObjectivCaml

Sur OpenBSD 4.3, procédez comme suit :

# export PKG_PATH="ftp://ftp.irisa.fr/pub/OpenBSD/$(uname -r)/packages/i386/"
# pkg_add ocaml
# pkg_add bzip2

Télécharger et compiler mlnet

Toutes les commandes présentées ici peuvent être exécutées en tant qu'utilisateur non privilégié.

Pour faciliter les opérations, positionner comme suit la variable d'environnement :

$ export VER="2.9.5"

Télécharger MLDonkey

La version utilisée ici est la 2.9.5 de Mai 2008.

Procédez comme suit :

$ cd /tmp
$ ftp http://ovh.dl.sourceforge.net/sourceforge/mldonkey/mldonkey-${VER}.tar.bz2
$ bunzip2 mldonkey-${VER}.tar.bz2
$ tar xf mldonkey-${VER}.tar
$ cd mldonkey-${VER}

Compiler mlnet

La compilation du produit se fait de manière statique pour faciliter l'installation de la partie core dans un environnement à racine déplacé.

Procédez comme suit :

$ cd /tmp/mldonkey-${VER}
$ ./configure
[...]

Si ObjectivCaml n'est pas installé dans votre environnement, le script configure vous propose de le télécharger, et compiler dans le répertoire courant. Pour l'installer répondez y si la question vous est posée. Dans ce document, ObjectivCaml a été installé via les ports d'OpenBSD.

A la fin de la configuration, le résumé suivant s'affiche :

Configuring MLDonkey 2.9.5 completed.

Network modules:
 - eDonkey           enabled (eMule SUI enabled)
 - BitTorrent        enabled
 - FileTP (aka wget) enabled
 - Fasttrack         enabled
 - Gnutella                  disabled - unmaintained
 - Gnutella2                 disabled - unmaintained
 - Direct Connect    enabled
 - Open Napster              disabled - currently not usable
 - Soulseek                  disabled - currently not usable
 - OpenFT                    disabled - currently not usable

Core features:
 - zlib (required)   enabled
 - threads           enabled
 - bzip2             enabled
 - iconv             enabled
 - libmagic                  disabled
 - graphical stats   enabled
   - png support     enabled
   - jpg support     enabled

Compilers:
 - Ocaml version     3.09.3 
 - gcc version       3.3.5
 - g++ version       3.3.5

Now execute 'gmake' to start compiling. Good luck!

To compile a static code execute:     gmake mlnet.static
To produce a release tarball execute: gmake release.mlnet.static
To clean the build directory execute: gmake maintainerclean

Compiling CryptoPP.cc can take several minutes, on slow machines up to half an hour.

Comme suggéré, pour compiler mlnet statiquement, exécutez la commande suivante :

$ gmake mlnet.static
[...]

A la fin de la compilation le binaire mlnet.static est généré à la racine du répertoire courant.

Pour vérifier que le binaire est bien compilé statiquement, exécutez les commandes suivantes :

$ file mlnet.static
mlnet.static: ELF 32-bit LSB executable, Intel 80386, version 1,
for OpenBSD, statically linked, not stripped
$
$ ldd mlnet.static
mlnet.static:
ldd: mlnet.static: not a dynamic executable

MLDonkey core aka mlnet est maintenant compilé, prêt à être exécuté dans un environnement à racine déplacé.

Installer mlnet

L'installation de MLDonkey core consiste simplement à copier le binaire dans le répertoire cible, ici /space.

Ce binaire s'exécutera sous l'identité d'un utilisateur dédié, pour minimiser l'impact en cas de problème de sécurité.

L'exécution de mlnet se 'effectuera dans un système à racine déplacé (chroot(4)). Il faut créer cette nouvelle racine et configurer son contenu.

Pour faciliter les opérations, positionner comme suit la variable d'environnement :

# export VER="2.9.5"
# export DIR="/space"

Créer un utilisateur dédié

Pour créer un utilisateur dédié, procédez comme suit :

# groupadd -g 604 _donkey
# useradd -d /nonexistent -s /sbin/nologin -c "MLDonkey Core Daemon" \
-u 604 -g 604 _donkey

Créer la cage de mlnet

Créer les répertoires

Procédez comme suit :

# mkdir -p ${DIR}/{dev,etc,log,mldonkey,tmp}
#
# chown -R root:wheel ${DIR}
# chmod -R 751 ${DIR}
#
# chown root:_donkey ${DIR}/bin
# chmod 710 ${DIR}/bin
#
# chown _donkey:wheel ${DIR}/{log,mldonkey,tmp}
# chmod 750 ${DIR}/{log,mldonkey,tmp}

Créer les fichiers de périphériques

# cd ${DIR}/dev
# sh /dev/MAKEDEV random
# mknod null c 2 2

Copier les fichiers "standards" de /etc

# cp /etc/{resolv.conf,localtime} ${DIR}/etc

Créer le fichier etc/passwd

Le daemon mlnet a besoin de connaître les utilisateurs root et _donkey.

# echo "root:*:0:0::0:0::/noexistent:/sbin/nologin" > ${DIR}/etc/master.passwd
# grep '^_donkey' /etc/master.passwd >> ${DIR}/etc/master.passwd
#
# chown root:wheel ${DIR}/etc/master.passwd
# chmod 600 ${DIR}/etc/master.passwd

Créez la base des mots de passe à partir de ce nouveau fichier :

# /usr/sbin/pwd_mkdb -p -d ${DIR}/etc ${DIR}/etc/master.passwd

Créer le fichier etc/group

Créer une copie du fichier /etc/group :

# egrep '^wheel|^_shadow|^_donkey' /etc/group \
 |awk -F: '{printf "%s:%s:%s:\n",$1,$2,$3}' > ${DIR}/etc/group

Installer mlnet

Les commandes suivantes vont copier le binaire static mlnet dans le répertoire ${DIR}/bin, le “striper”, et fixer ses permissions.

# cp /tmp/mldonkey-${VER}/mlnet.static ${DIR}/bin/mlnet
# strip ${DIR}/bin/mlnet
#
# chown root:_donkey ${DIR}/bin/mlnet
# chmod 110 ${DIR}/bin/mlnet

Tester mlnet

Pour tester que le binaire s'exécute bien, procédez comme suit :

# env MLDONKEY_DIR=/mldonkey LC_ALL=C LANG=C \
/usr/sbin/chroot -u _donkey -g _donkey ${DIR} /bin/mlnet -run_as_user _donkey
2008/05/16 17:04:23 Starting MLDonkey 2.9.5 ...
2008/05/16 17:04:23 Language C, locale ASCII, ulimit for open files 128
2008/05/16 17:04:23 MLDonkey is working in /mldonkey
2008/05/16 17:04:23 ulimit for open files is set to 128, at least 150 is required, exiting...

Le message d'erreur indique que le nombre maximal de fichiers ouvrables est fixé à 128 et que mlnet a besoin que ce nombre soit, au moins, porté à 150.

Pour modifier ce nombre, il existe deux possibilités :

  • utiliser la commande ulimit -n 200, mais son effet n'est valable que pour la session courante.
  • créer une nouvelle classe d'utilisateur dans le fichier /etc/login.conf et modifier les paramètres de l'utilisateur _donkey pourqu'il appartienne à cette classe (plutôt qu'à celle par défaut).

Ce document utilise la première méthode.

Intégrer le service mlnet au système

Créer un script de démarrage

Pour arrêter et redémarrer mlnet de manière simple, créez un script de démarrage.

Pour ce faire, créez le répertoire /etc/rc.d comme suit :

# mkdir /etc/rc.d
# chown root:wheel /etc/rc.d
# chmod 750 /etc/rc.d

Puis, créez comme suit, le fichier de démarrage /etc/rc.d/mlnet.

Et enfin, positionnez les permissions :

# chown root:wheel /etc/rc.d/mlnet
# chmod 740 /etc/rc.d/mlnet

Modifier le fichier /etc/rc.conf.local

Ajoutez la ligne suivante au fichier /etc/rc.conf.local :

# Start mlnet (MLDonkey core daemon)
mlnet_flags=YES

Modifier le fichier /etc/rc.local

Ajoutez la ligne suivante au fichier /etc/rc.local :

# Start mlnet (MLDonkey core daemon)
if [ -x /etc/rc.d/mlnet ]; then
        echo -n ' mlnet';       /etc/rc.d/mlnet start >/dev/null
fi

Modifier le fichier /etc/rc.shutdown

Ajoutez la ligne suivante au fichier /etc/rc.shutdown :

# Stop mlnet (MLDonkey core daemon)
if [ -x /etc/rc.d/mlnet ]; then
        echo -n ' mlnet';      /etc/rc.d/mlnet stop >/dev/null
fi

Modifier le fichier /etc/changelist

OpenBSD offre la fonctionnalité de sauvegarde et de suivi des fichiers de configuration. Pour cela, le système s'appuie sur le fichier /etc/changelist, voir changelist(5), qui est lu par le script /etc/daily(8).

Pour suivre les fichiers créés dans ce document, procédez comme suit :

# cat << _INPUT_ >> /etc/changelist
# mlnet (MLDOnkey Core) daemon
/etc/rc.d/mlnet
${DIR}/etc/master.passwd
${DIR}/etc/resolv.conf
_INPUT_

Configurer mlnet

La configuration s'effectue via l'interface telnet en ligne de commande.

Se connecter à l'interface d'administration

Sur le serveur, ouvrez un terminal, et saisissez les commandes suivantes :

# telnet localhost 4000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Welcome to MLDonkey 2.8.2
Welcome on mldonkey command-line

Use ? for help

MLdonkey command-line:
>

Tous les paramètres saisis sont automatiquement enregistrés.

Changer le mot de passe admin

Les commandes suivantes vont fixer le mot de passe de l'utilisateur admin, puis s'authentifier en tant qu'utilisateur admin.

> useradd admin LeMotDePasseChoisi
Password changed

> auth LeMotDePasseChoisi
Full access enabled

> save
options and sources saved

Créer un utilisateur standard

> useradd toto leMotDePasseDetoto
User added

> save
options and sources saved

Changer quelques paramètres

> set allow_browse_share 0
option allow_browse_share value changed

> set max_hard_upload_rate 20             # 20ko/s d'upload
option max_hard_upload_rate value changed

> set max_hard_download_rate 200          # 200ko/s de download
option max_hard_download_rate value changed

> save
options and sources saved

Se déconnecter

> quit
Connection closed by foreign host.

Sécuriser le fonctionnement de mlnet

/etc/malloc.conf

Créez un lien symbolique dans la cage /etc/malloc.conf qui pointe vers les options d'allocation de la mémoire. Voir la page de manuel malloc(3) pour plus de détails.

Procédez comme suit :

# cd /space/etc
# ln -s AFGJ malloc.conf

Autoriser l'accès à votre MLDonkey depuis l'extérieur

Le réseau eDonkey utilise différents ports TCP et UDP pour commmuniquer. Celui qui nous intéresse ici est le port d'échange de client à client (pair à pair), le port TCP 4662.

Pour permettre l'échange de pair à pair sur votre machine, ajoutez la règle suivante pour le filtre de paquets d'OpenBSD pf(4). Consultez la page de manuel pf.conf(5) pour plus de détails :

# { internet } -> edonkey2000 -> [ this host ]
pass in log on egress proto tcp to (egress) port 4662 user _donkey \
flags S/SA modulate state (max-src-states 50)

Sauvez la règle et relancez pf :

# pfctl -Fr -f /etc/pf.conf

Liens

ANNEXE

Client graphique pour linux :

 
doc/openbsd/mldonkey.txt · Dernière modification: 2009/12/23 22:36 (édition externe)     Haut de page