Serveur/OpenStreetMap sous Ubuntu 14.04

Pour certains besoins, il est parfois nécessaire de mettre en place son propre serveur OpenStreetMap, comme par exemple pour des applications métiers, afin d’avoir le serveur en local, ne pas surcharger les serveurs OSM publiques, réduire le temps de latence, travailler sur des emprises définies (continent, pays, région, et même zone personnalisée).
Mon serveur étant sous ubuntu server, je ne m’intéresserai ici qu’à ce cas de figure, mais il y a fort à parier que les paquets soient accessibles sous d’autres distributions.

Présentation

Le but est de mettre en place un architecture permettant d’intégrer les exports d’OSM (dumps & diffs), afin de fournir un service de cartographie.
Le service devra mettre à disposition de leaflet des tuiles cartographiques.

Voici le schéma complet de l’infrastructure d’OpenStreetMap :

Schéma Infrastructure OSM
Les principaux services nécessaires sont les suivants :
Osmosis permet la gestion des données, import/export/comparaison des dumps et diffs des données OSM.
Osm2pgsql permet la conversion des données OSM afin de les importer dans la base PostgreSQL.
Mapnik permet de faire le rendu des tuiles en utilisant des styles personnalisables.
Mod_tile effectue la gestion des tuiles et du cache. Si elle existe et est à jour, il la sert au serveur web, si elle est obsolète ou n’existe pas, il va la demander à Mapnik.
Renderd gère la priorisation des demandes de tuiles de Mod_tile à Mapnik en prenant en compte la charge serveur.

OSM Bright permet de gérer les styles des cartes.

Recommandations matérielles

Pour un rendu important, comme au niveau planète, il faut prévoir une infrastructure matérielle conséquente :

  • au moins 24 GB de RAM,
  • avoir la DB sur des disques SSD,
  • 512 GB d’espace disque si les données OSM sont mises à jour,
  • 256 GB d’espace disque si les données OSM ne sont pas mises à jour, mais réimportées via l’option -drop,
  • Concernant le processeur, je n’ai pas trouvé d’info.

Ceci sans faire allusion au RAID et besoins de sauvegardes.

Installations

Les commandes sont données pour un système avec ubuntu server 14.04

Installation des dépendances

sudo apt-get install libboost-all-dev subversion git-core tar unzip wget bzip2 build-essential autoconf libtool libxml2-dev libgeos-dev libgeos++-dev libpq-dev libbz2-dev libproj-dev munin-node munin libprotobuf-c0-dev protobuf-c-compiler libfreetype6-dev libpng12-dev libtiff4-dev libicu-dev libgdal-dev libcairo-dev libcairomm-1.0-dev apache2 apache2-dev libagg-dev liblua5.2-dev ttf-unifont lua5.1 liblua5.1-dev node-carto

 

Installation de PostgreSQL & PostGIS

sudo apt-get install postgresql postgresql-contrib postgis postgresql-9.3-postgis-2.1

 

Installation d’osm2pgsql

mkdir ~/src
cd ~/src
git clone git://github.com/openstreetmap/osm2pgsql.git
cd osm2pgsql
./autogen.sh
./configure
make
sudo make install

 

Installation de Mapnik

cd ~/src
git clone git://github.com/mapnik/mapnik
cd mapnik
git branch 2.2 origin/2.2.x
git checkout 2.2

python scons/scons.py configure INPUT_PLUGINS=all OPTIMIZATION=3 SYSTEM_FONTS=/usr/share/fonts/truetype/
make
sudo make install
sudo ldconfig

 

Installation de mod_tile & renderd

cd ~/src
git clone git://github.com/openstreetmap/mod_tile.git
cd mod_tile
./autogen.sh
./configure
make
sudo make install
sudo make install-mod_tile
sudo ldconfig

 

Notes

Si les mises à jour de la base de données ne sont pas très fréquentes (<2/mois), il semble préférable d’utiliser le dump complet plutôt que les diffs.

Téléchargements:
Planet OSM – Pour télécharger les données au niveau global
Geofabrik – Pour télécharger les données au niveau désiré (Continent, Pays, Région)
Dernier fichier OSM – France (3 GB)
 
Sources :
Switch2OSM.org
Pages persos d’Adrien/Créer son propre miroir des données OpenStreetMap et un serveur de rendu des tuiles, avec Debian Wheezy
Makina Corpus/Un serveur OpenStreetMap pour votre ville
Wiki OSM/Automatiser la mise à jour quotidienne

Serveur/Subsonic

Subsonic est une plate-forme de streaming audio.

Prérequis.

Pour commencer il y a un prérequis, à savoir il faut JRE d’installé sur le serveur. Si ce n’est pas le cas, nous allons l’installer :

#apt-get install openjdk-8-jre

Installation.

Une fois les paquets installés, nous pouvons télécharger le paquet subsonic depuis le site :

#wget http://subsonic.org/download/subsonic-5.3.deb

et procéder à l’installation qui se passe sans demander de paramètres :

#dpkg - i subsonic-5.3.deb

Une fois terminé, la plate-forme est accessible via : http://serveur:4040

Le service est fonctionnel, mais de base, il n’est pas sécurisé.
Il faut dans un premier temps changer le mot de passe admin qui est admin,
ainsi qu’activer ssl pour y accéder via du https,
créer un utilisateur unix propre à au service en lieu et place à root,
puis créer les utilisateurs.

Activation du protocole SSL.

A venir

Changement de l’utilisateur système.

Il faut éditer le fichier de configuration :

# vi /etc/default/subsonic

et changer des variables comme :

SUBSONIC_USER = subsonic
/*au lieu de */
SUBSONIC_USER = root

Pour plus d’information quant aux paramètres disponibles, la commande :

/usr/share/subsonic/subsonic.sh --help

donne les détails :

Usage: subsonic.sh [options]
  --help               This small usage guide.
  --home=DIR           The directory where Subsonic will create files. Make sure it is writable. Default: /var/subsonic
  --host=HOST          The host name or IP address on which to bind Subsonic. Only relevant if you have multiple network interfaces and want to make Subsonic available on only one of them. The default value will bind Subsonic to all available network interfaces. Default: 0.0.0.0
  --port=PORT          The port on which Subsonic will listen for incoming HTTP traffic. Default: 4040
  --https-port=PORT    The port on which Subsonic will listen for incoming HTTPS traffic. Default: 0 (disabled)
  --context-path=PATH  The context path, i.e., the last part of the Subsonic URL. Typically '/' or '/subsonic'. Default '/'
  --max-memory=MB      The memory limit (max Java heap size) in megabytes. Default: 100
  --pidfile=PIDFILE    Write PID to this file. Default not created.
  --quiet              Don't print anything to standard out. Default false.
  --default-music-folder=DIR    Configure Subsonic to use this folder for music.  This option  only has effect the first time Subsonic is started. Default '/var/music'
  --default-podcast-folder=DIR  Configure Subsonic to use this folder for Podcasts.  This option  only has effect the first time Subsonic is started. Default '/var/music/Podcast'
  --default-playlist-folder=DIR Configure Subsonic to use this folder for playlists.  This option only has effect the first time Subsonic is started. Default '/var/playlists'

Sources :
doc.ubuntu-fr.org/Subsonic

Serveur/Webmin

Afin de faciliter l’administration d’un serveur, il peut être sympa d’avoir une interface web.
Je vais donc installer Webmin.
Dans un premier temps, il faut télécharger le paquet sur le serveur :

#wget http://prdownloads.sourceforge.net/webadmin/webmin_1.770_all.deb

Puis lancer son installation :

#dpkg -i webmin_1.770_all.deb

L’installation est automatique, il n’y a pas de paramètre à renseigner.
Une fois terminée, vous avez dans la console le retour suivant :

Webmin install complete. You can now login to https://serveur:10000/
as root with your root password, or as any user who can use sudo
to run commands as root.

Donc l’utilisateur root a accès à l’interface, ainsi que les utilisateurs du groupe sudo.
Mon conseil, pour la gestion des autorisations d’accès à webmin est de créer un groupe webmin et d’y ajouter des utilisateurs, afin de savoir facilement et rapidement qui y a accès.

Serveur/Authentification SSH avec certificat

Dans un premier lieu, il faut générer les clefs, sur le client, via la commande :

$ ssh-keygen

Par défaut il s’agit de RSA en 2048 bits.
Elles seront stockées sous ~/.ssh/

La clef privée sera nommée : id_rsa
La clef publique sera nommée : id_rsa.pub

Pour une authentification avec le certificat sans devoir saisir la passphrase, il ne faut pas en saisir lors de la génération des clefs.

Maintenant que nous avons les clefs, il faut communiquer la clef publique au serveur, via une commande dédiée :

$ ssh-copy-id -i ~/.ssh/id_rsa.pub <username>@<ipaddress>

Il faudra saisir le mot de passe pour établir une connexion ssh pour la copie de la clef.
La commande permet de copier la clef publique dans le bon repertoire : ~/.ssh
avec le nom correct : authorized_keys
ainsi que les droits d’accès en 600.

Il ne reste plus qu’à effectuer la configuration sur le serveur ssh.
Pour cela, il faut éditer le fichier de configuration du daemon ssh :

# vi /etc/ssh/sshd_config

Il faut activer l’authentification via certificat :

PubkeyAuthentication yes

désactiver l’authentification de root :

PermitRootLogin no

Permettre l’authetification de root seulement par certificat :

PermitRootLogin without-password
RSAAuthentication yes
PubkeyAuthentication yes

Désactiver l’authentification par mot de passe :

PasswordAuthentication no

Désactiver PAM authentication, ne donner les droits ssh qu’à certains utilisateurs ou groupes, ici le groupe ssh

UsePAM no
IgnoreUserKnownHosts no
AllowGroups ssh

Il suffit juste pour finaliser, de relancer le service ssh :

sudo service ssh restart

Sources :
doc-ubuntu-fr/Authentification par un système de clés publique/privée
doc.fedora-fr/SSH : Authentification par clé
Prendre un café/Installer sa clé SSH sur un serveur distant
Résoudre problème de certificat sur le client :
Chris Jean/Ubuntu SSH Fix for “Agent admitted failure to sign using the key”

NAS200 en RAID1 : Changement de disque dur

Voici quelques semaines, que l’un des deux disques durs de mon NAS m’a lâché.

Rien de bien grave donc, cette défaillance est palliée par le mirroiring en RAID1.

Il reste néanmoins à changer le disque défectueux avant que le deuxième fasse de même. Car comme je fait bien les choses, ces deux disques sont de la même marque, même modèle, et même date de fabrication, donc statistiquement, il y a beaucoup plus de chances qu’ils défaillent durant la même période. Ce qui est toujours recommandé est d’au moins utiliser des marques différentes.

Je me suis donc procuré un disque dur neuf et de capacité supérieure. A l’origine, j’utilisais des 1,5 To, celui que j’ai acheté fait 2 To, ce qui me permettra de gagner 500 Go de stockage lorsque le deuxième sera mort.

J’ai donc arrêté le NAS.

Remplacé le disque défectueux, par le neuf.

Puis je rallume le NAS.

Lorsque l’on se connecte sur l’interface web de gestion, on aperçoit que le système à détecté le nouveau disque et qu’il est en train de reconstruire le RAID en recopiant sur le nouveau disque. Il n’y a strictement rien à faire : c’est formidable.

Sauf que …, sauf que la reconstruction recommence sans cesse.

Comme je me suis aperçu de cela pendant la semaine et que je n’ai pas eu le temps de m’en occuper, je l’ai laissé faire. Le NAS a essayé de reconstruire le RAID pendant quinze jours, avant que je prenne les choses en mains.

J’ai donc ôté les deux disques du NAS, les ai connecté à un serveur maison, après avoir pris soin de déconnecter les disques durs du serveur.

J’ai bouté le serveur sur un CD live linux. Et là en fait, il n’y a rien à faire, le système reconstruit automatiquement le RAID.

On peux constater de l’avancement en lisant le fichier : /proc/mdstat via la commande :

#cat /proc/mdstat

 

server:~# cat /proc/mdstat
md0 : active raid1 sda1[0] sdb1[1]
24418688 blocks [2/1] [U_]
[=>...................]  recovery =  9.9% (2423168/24418688) finish=2.8min speed=127535K/sec

md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/1] [U_]
[=>...................]  recovery =  6.4% (1572096/24418688) finish=1.9min speed=196512K/sec

 

Cela est rendu possible car le disque neuf a fait un tour dans le NAS en premier, qui a partitionné ce disque et l’a ajouté au volume RAID.

Liens et sources : http://www.howtoforge.com/replacing_hard_disks_in_a_raid1_array

http://blog.anotherhomepage.org/post/2010/09/01/Reconstruction-d-un-RAID-1-logiciel-sous-Linux

http://www.linuxpedia.fr/doku.php/expert/mdadm

Monter un volume nas200 sous ubuntu

Pour monter au démarrage de l’ordinateur un volume de stockage réseau de NAS200, il faut faire quelques petites manipulations.

installer le paquet : smbfs

#sudo apt-get install smbfs

Puis il faut créer le répertoire d’accueil, exemple : /media/public_reseau

#mkdir /media/public_reseau

Ajouter la ligne de montage du volume dans fstab:

#nano /etc/fstab

Ajouter :

//nas200.local/public     /media/public_reseau     smbfs   _netdev,credentials=/root/.smbcredentials       0       0

On doit pour finir, créer un fichier contenant le login & le mot de passe de l’utilisateur :

#nano /root/.smbcredentials

username=login

password=*****

Pour terminer, il ne reste plus qu’à redémarrer ou monter le volume:

#sudo mount -a