Ubuntu Serveur 16.04/php7

Après avoir installé la nouvelle version d’Ubuntu Serveur : 16.04, j’ai eu la mauvaise surprise de constater que les pages retournées par le serveur apache2 n’avait pas le code php d’interprété.
Les paquets relatifs à php7 avaient bien étaient installés par le système, php7.0, libapache2-mod-php7.0.

J’ai fini par trouver une solution, il faut éditer le fichier du virtual host

sudo vi /etc/apache2/sites-available/000-default.conf

et d’ajouter la ligne :

AddType application/x-httpd-php .php

Serveur/OpenStreetMap sous Ubuntu 16.04 en cours

Installations

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

Mises à jour & installations serveurs

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install tasksel
sudo tasksel install lamp-server
sudo tasksel install postgresql-server

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-c-dev protobuf-c-compiler libfreetype6-dev libpng12-dev libtiff5-dev libicu-dev libgdal-dev libcairo2-dev libcairomm-1.0-dev apache2-dev libagg-dev liblua5.3-dev ttf-unifont lua5.3 liblua5.3-dev node-carto

Installation de PostGIS

sudo apt-get install postgresql-contrib postgis postgresql-9.5-postgis-2.2

Conf de PostGIS

sudo -u postgres -i psql
CREATE ROLE username LOGIN PASSWORD 'pass-en-clair';
CREATE DATABASE template_postgis TEMPLATE template0;
\c template_postgis;
CREATE EXTENSION postgis;
\q

Installation d’osm2pgsql

Installation des dépendances

sudo apt-get install make cmake g++ libboost-dev libboost-system-dev libboost-filesystem-dev libexpat1-dev zlib1g-dev libbz2-dev libpq-dev libgeos-dev libgeos++-dev libproj-dev
mkdir ~/src
cd ~/src
git clone https://github.com/openstreetmap/osm2pgsql.git
cd osm2pgsql
mkdir build
cd build
cmake ..
make
sudo make install

Installation de Mapnik

cd ~/src
git clone https://github.com/mapnik/mapnik.git
cd mapnik
git submodule update --init
sudo apt-get install python zlib1g-dev clang make pkg-config
source bootstrap.sh
./configure CUSTOM_CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0"
make
make test
sudo make install
sudo apt-get install libmapnik-dev

Installation de mod_tile & renderd

cd ~/src
git clone https://github.com/openstreetmap/mod_tile.git
cd mod_tile/
./autogen.sh
./configure
make

Pour le moment, cette étape ne passe pas.
Sur le make, j’ai les erreurs suivantes :

g++: error: unrecognized command line option ‘-Wtautological-compare’
g++: error: unrecognized command line option ‘-Wheader-hygiene’

J’ai pu corriger la première en éditant : ~/src/mod_tile/Makefile
et en remplacant

-Wtautological-compare

par

-Tautological-compare

Mais pour la deuxième, je cherche encore.

La suite de l’installation serait :

sudo make install
sudo make install-mod_tile

qGIS/OpenLayers Plugin

OpenLayers Plugin est une librairie python qui fournie des couches de fond de plan à qGIS.
Il permet d’utiliser des couches Google Maps, Bing, OSM, …
Il n’y a pas de configuration nécessaire, l’utilisation se fait par simple ajout de la couche.
L’usage est donc assez simple.
En revanche, dans mon cas, si l’on possède son propre serveur OpenStreetMap, il est intéressant et utile de changer l’URI du serveur de tuiles OSM public par le sien.
Pour ce faire, rien de plus simple, il suffit d’éditer le fichier html relatif à la couche en question.
Prenons l’exemple de « OpenStreetMap », il faut éditer le fichier ./.qgis2/python/plugins/openlayers_plugin/weblayers/html/osm.html
Il suffit de modifier la ligne 34 :

"OpenStreetMap",
          "http://tile.openstreetmap.org/${z}/${x}/${y}.png",

avec votre URI personnalisée, par exemple :

"OpenStreetMap",
          "http://carto.rmaziere.fr/${z}/${x}/${y}.png",

Cette modification est prise en compte lors de l’ajout des nouvelles couches dans des projets qGIS.
Si des projets qGIS sont déjà existants, il faut supprimer les couches en question et les recharger.

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

Linux Commandes de base

Connaître l’utilisation des points de montages :

df -h

Connaître la taille d’un répertoire :

du -hs /repertoire/

Suppression de répertoires vides :

find . -type d -empty | xargs rm -r

Création d’un alias pour les mises à jour :

alias maj="sudo apt-get update; sudo apt-get -y upgrade; sudo apt-get -y autoremove; sudo apt-get clean;"

Visualisation d’un intervalle de lignes d’un fichier :

sed -n '{begin_line_number},{ending_line_number}p' file"

Liste de l’historique des commandes:

user@server:~$ history 
    1  ls
    2  sudo apt-get update; sudo apt-get -y upgrade;sudo apt-get -y autoremove 
    3  history

Pour exécuter à nouveau une commande listée : « !{numéro} »

user@server:~$ !2

Serveur/MediaTomb

MediaTomb est un serveur UPnP, permettant de partager audio et vidéo, et administré par une page web.

Installation.

#apt-get install mediatomb

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

Le service est fonctionnel, il ne reste plus qu’à ajouter les répertoires contenants les médias à diffuser via l’interface web.

J’ai eu une série de plantages dus à la locale. Les caractères spéciaux provoquent le plantage du service, visible dans le log /var/log/mediatomb.log
Il faut éditer le fichier xml de configuration /etc/mediatomb/config.xml et ajouter les lignes suivantes :

< filesystem-charset>UTF-8
< metadata-charset>UTF-8
< playlist-charset>UTF-8

sans l’espace après <, et ce juste après la ligne

< import hidden-files="no">

Sources :
doc.ubuntu-fr.org/MediaTomb

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”