Construire et installer un système d'exploitation GNU/linux Debian Stretch sur une Raspberry Pi 3 pour piloter une station météorologique

Cette installation repose sur le travail de l'utilisateur drtyhlpr consultable ici : rpi23-gen-image. Les modifications effectuées pour les besoins du projet se trouvent sur le site g-vidal.

Motivations

Le projet "Météo et Climat, tremplin pour l'enseignement des sciences" se développe selon trois axes principaux pour atteindre les objectifs fixés :

  • Un volet d'accompagnement de l'utilisation de microcapteurs météorologiques pour enseigner le codage et le traitement de mesures météorologiques
  • Un volet d'accompagnement de la mise en oeuvre d'une station météorologique du commerce dans un établissement scolaire puis du partage des données sur un territoire local, régional, national ou international
  • Un volet de formation / autoformation des formateurs et des enseignants sur la météorologie et les sciences du climat.

Ces trois axes concourrent d'une part à la stimulation de l'appétence pour les sciences des jeunes et d'autre part à la généralisation de l'utilisation de la météorologie et des sciences du climat dans l'enseignement secondaire. Ce second objectif étant en ligne avec l'article 12 de l'accord de Paris sur le changement climatique.

Ce document s'intéresse à la mise en place de l'infrastructure numérique pour le pilotage d'une station météorologique à l'aide du logiciel libre weewx et pour le partage des données via la base de données mariadb recommandée par weewx afin de simplifier au maximum la mise en oeuvre.

Le premier points crucial pour atteindre cet objectif a été la mise en place d'un protocole entre le projet Tremplin, la Directon des Systèmes d'Information du Rectorat de Lyon reponsable de la sécurité numérique des établissements et la Direction ses Systèmes d'Information du Grand Lyon responsable du dépliement et du maintien en conditions opérationnelles.

Le second point crucial a été la mobilisation de la Direction Innovation Numérique et Systèmes d'Information du Grand Lyon qui a adhéré immédiatement à la proposition de partage de données issues des établissements avec la métropole Grand Lyon. Cette participation d'une collectivité territoriale fournit une ouverture sur le monde des établissements et place les élèves en position de citoyens contributeurs aux données ouvertes.


Remerciements

  • Rectorat de Lyon en particulier Mme Corinne benucci Déléguée académique du numérique
  • Grand Lyon Métropole Mme Nathalie Vernus-Prost Administrateur général des données
  • DSI du Rectorat de Lyon en particulier M. Stéphane Vigo
  • DSI du Grand Lyon
  • Carole Larose, Éric le Jan et Charles-Henri Eyraud

Sommaire

  1. Construction d'une image GNU/linux debian générique avec rpi23-gen-image

    a. Outils rpi23-gen-image

    b. Version modifiée utilisée

    c. Configuration utilisée

  2. Configuration avancée pour les besoins du projet Tremplin

    a. Copie de l'image sur une microSD

    b. Modifications globales

    c. Configuration de weewx

    d. Installation et configuration du pare-feu

    e. Installation et configuration de mariadb

    f. Configuration du réseau

    g. Mise en place d'un serveur web

  3. Modifications pour les images pré-configurées du projet Tremplin


Téléchargements

  1. Scripts de création de l'image
  2. logiciel weewx
  3. Scripts modifiés de création de l'image

1. Construction d'une image GNU/linux debian générique avec rpi23-gen-image

Depuis que les Raspberries sont équipées de processeurs pour lesquels il existe une version du système d'exploitation debian il n'est plus nécessaire d'utiliser une distribution dédiée comme raspbian. Il est d'ailleurs dommage que les ajouts et modifications effectués ne soient pas partagés avec le retse de la communauté sous la forme de paquets proposés dans les dépôts officiels. Bien que construire une image soit à la portée d'un grand nombre d'usagers avertis, ce travail n'est pas souvent réalisé c'est pourquoi des images pré-configurées sont mises à disposition sur sur le site de diffusion de ressourcesdu projet.

1.a Outils rpi23-gen-image

Les images sont réalisées en utilisant le travail de l'utilisateur drtyhlpr proposé sur la forge github sous le nom de rpi23-gen-image. Il suffit de télécharger la hiérarchie de fichiers proposés et d'exécuter la commande se trouvant à la racine de la hiérarchie en suivant les instruction du fichier README.md et en se plaçant dans le répertoire racine de cette hiérarchie.

sudo CONFIG_TEMPLATE=rpi3stretch ./rpi23-gen-image.sh

La totalité de la création de l'image se fait dès lors automatiquement et sans intervention de l'usager. La liste des répertoires et fichiers est reproduite ci-dessous.

bootstrap.d/  functions.sh  packages/  rpi23-gen-image.sh*
files/        LICENSE       README.md  templates/

./bootstrap.d:
10-bootstrap.sh   13-kernel.sh       20-networking.sh~  41-uboot.sh
10-bootstrap.sh~  14-fstab.sh        21-firewall.sh     42-fbturbo.sh
11-apt.sh         15-rpi-config.sh   30-security.sh     42-fbturbo.sh~
11-apt.sh~        15-rpi-config.sh~  31-logging.sh      50-firstboot.sh
12-locale.sh      20-networking.sh   32-sshd.sh         99-reduce.sh

./files:
apt/   dpkg/  firstboot/  iptables/  modules/  network/   xorg/
boot/  etc/   initramfs/  locales/   mount/    sysctl.d/
    ./files/apt:
    02nocache  03compress  04norecommends  10proxy  flash-kernel  sources.list
    ./files/boot:
    config.txt  uboot.mkimage
    ./files/dpkg:
    01nodoc
    ./files/etc:
    rc.local*
    ./files/firstboot:
    10-begin.sh              23-regenerate-initramfs.sh   26-config-ifnames.sh
    21-generate-ssh-keys.sh  24-generate-machineid.sh     99-finish.sh
    22-expandroot.sh         25-create-resolv-symlink.sh
    ./files/initramfs:
    expand_encrypted_rootfs  expand-premount*  expand-tools*
    ./files/iptables:
    flush-ip6tables.sh  ip6tables.rules    iptables.rules
    flush-iptables.sh   ip6tables.service  iptables.service
    ./files/locales:
    locale
    ./files/modules:
    raspi-blacklist.conf  rpi2.conf
    ./files/mount:
    crypttab  fstab
    ./files/network:
    eth.network  host.conf  hostname  hosts  interfaces
    ./files/sysctl.d:
    81-rpi-vm.conf  82-rpi-net-hardening.conf
    ./files/xorg:
    99-fbturbo.conf
./templates:
rpi2jessie   rpi3jessie   rpi2stretch  rpi3stretch
shell

De la description précédente il découle deux conséquences :

  • la première est que les versions disponibles de debian sont stretch et jessie (fichiers de configuration dans le dossier des templates)
  • la seconde est que la composition de l'image est fixée par l'ensemble de fichiers de configuration de rpi23-gen-image.

Fort heureusement cet outil de création a été conçu pour être configuré en fonction des besoins de l'usager. Deux familles d'actions peuvent être effectuées :

  • d'une part la modification d'un grand nombre de variables d'environnement (voir le README à la racine), cela permet de "profiler" assez finement le système que l'on souhaite créer. Il est possible ne modifier aucune de ces variables et dans ce cas on obtient une image "tous terrains";
  • d'autre par l'ajout de "paquets officiels" des dépôts debian qui permettent de proposer d'origine des services particuliers (par exemple un serveur de terminaux pour contourner le besoin d'écran et afficher sur un écrandistant); mais aussi l'ajout de paquets ne faisant pas partie des dépôts officiels mais proposant des services intéressants (par exemple weewx pour ce qui concerne les stations météorologiques).

Les deux paragrahes suivants décrivent les modifications effectueées sur rpi23-gen-image pour satisfaire les exigences du projet Tremplin.

1.b Version modifiée utilisée

Dans les discussion autour de rpi23-gen-image il est apparu que la suppression de la vérification de l'origine des paquets qui avait été mise en place pour contourner un changement de la fonction de mise à jour de debian étant dangereuse et qu'il fallait revenir en arrière. Le modifications nécessaires ont été effectuées.

Dans certains cas il est nécessaire au moins pour faire des tests d'avoir accès à une distribution "testing" et à ce jour (2017/07/27) rpi23-gen-image ne propose pas la version buster de debian. Même si la distribution buster n'est pas utilisée ici les modifications permettant de créer une distribution buster ont été jointes à la méme version.

La version ainsi modifiée respecte les recommandations des discussions et permet si besoin de produire une image buster. Il est possible de la télécharger comme la version originale et le fonctionnement est identique. Pour les personnes intéressées par les modifications effectuées utiliser les outils dédiés proposés par la forge github.

1.c Configuration utilisée

Le fichier de configuration est disponible en ligne et sera examiné ici partie par partie afin d'expliquer les modifications effectuées.

fichier raspife3W-stretch

Ce fichier issu du répertoiretemplates fournit toutes les variables qui ont été modifiées et tous les paquets officiels qui ont été ajoutés à la distribution "par défaut".

Liste des paquets ajoutés

APT_SERVER=ftp.fr.debian.org
APT_INCLUDES="debian-archive-keyring,debian-keyring,automake,autoconf,autogen,gawk,gnupg,gnupg2,\
build-essential,git,cmake,libjson-c-dev,unzip,\
bison,libboost-all-dev,libtool,libtool-bin,pkg-config,checkinstall,libnotify-bin,pandoc,\
python3,python3-dev,python,python-dev,python-configobj,python-cheetah,python-mysqldb\
python-imaging,python-serial,python-usb,python-tk,python3-tk,python3-scipy,\
python-pypandoc,python3-pypandoc,python-pandocfilters,python3-pandocfilters,\
python-geopy,python3-geopy,python-pip,python3-pip,python-smbus,\
libudev-dev,libzzip-dev,zlib1g-dev,libnss-myhostname,libpng16-16,nmap,\
libltdl-dev,usbutils,pmount,ntpdate,texlive,texlive-xetex,nginx-extras,policykit-1,\
openjdk-8-jdk-headless,openjdk-8-jre-headless,\
pcre2-utils,libpcre++-dev,libpcre2-dev,libjpeg-dev,i2c-tools"

Cette partie définit le dépôt utilisé, les paquets ont été ajoutés en fonction des installations requises pendant la mise en place d'une version de l'image tremplin à partir d'une image standard. Pour des raisons de dépendancs croisées lors de la construction de l'image les paquest mariadb et firehol n'ont pas pu être installés. Java est installé seulement avec les distributions "headless".

Modèle et régionalisation

Cette partie définit le modèle de Raspberry Pi, la distribution, le nom attribué à la machine, la langue utilisée, la zone de travail, et le modèle du clavier.

RPI_MODEL=3 
RELEASE="stretch" 
HOSTNAME="raspwife3" 
PASSWORD="************"
USER_PASSWORD="************"
DEFLOCAL="fr_FR.UTF-8" 
TIMEZONE="Europe/Paris"
EXPANDROOT=false
#-----------------------
XKB_MODEL="pc105" 
XKB_LAYOUT="fr"  
XKB_VARIANT="latin9" 
XKB_OPTIONS=""

Réseau

Pour les besoins du projet la Raspberry doit avoir une IP fixe, le DHCP est donc supprimé et une adresse fixe fournie

ENABLE_DHCP=false 
NET_ADDRESS="192.168.***.***/24"
NET_GATEWAY="192.168.***.1"
NET_DNS_1="192.168.***.1" 
NET_DNS_2="8.8.8.8" 

Quelques autres variables remarquables

Le reste du fichier contient de nombreuses variables positionnées en fonction de choix personnels ou imposés par l'usage, il peut être nécessaire de les modifier. Attirons l'attention sur quelques variables liées au fonctionnement attendu pour cette Raspberry Pi: activation du WIFI intégré, suppression du serveur X et du gestionnaire de fenêtres, ajout de clefs publiques pour permettre l'authentification par clés ssh.

ENABLE_WIRELESS=true
ENABLE_XORG=false
ENABLE_WM=""
SSH_ROOT_PUB_KEY="/home/*******/.ssh/authorized_keys"
SSH_USER_PUB_KEY="/home/*******/.ssh/authorized_keys"

répertoire packages

Ce répertoire contient les paquets non officels mais formattés selon les règles debian qui peuvent être directement intégrés à l'image dès la création. Dans notre cas nous utiliserons seulement weewx. ce répertoire peut-être utilisé pour ajouter par exemple une version de logiciel plus récente que celle disponible dans la version par défaut de debian.

 ls packages/
weewx_3.7.1-1_all.deb

2. Configuration avancée pour les besoins du projet Tremplin

La suite de cet article décrit les optimisations et modifications effectuées pour proposer une image de Raspberry Pi aussi proche d'un état opérationnel que possible (seules les configurations liées au réseau local sont requises).

2.a Copie de l'image sur une microSD

Cette manipulation est expliquée en détail ici, les comandes nécessaires dans le monde GNU/linux sont reportées pour faciliter dle travail des usagers avertis.

sudo bmaptool copy --bmap 2017-07-26-rpiw3-stretch.bmap 2017-07-26-rpiw3-stretch.img.xz  /dev/mmcblk0

Augmentation de la taille avec gparted.

Si besoin de modifier l'adresse IP (si par exemple la préparation se fait sur un réseau différent du réseau final prévu), modifier les fichiers

etc/hosts
lib/systemd/network/10-eth.network

Insérer la microSD dans la rRspberry Pi et démarrer avec une connexion filaire (le WIFI requérant une configuration supplémentaire)

2.b Modifications globales

Mises à jour et utilitaires

En fonction du délai entre la création de l'image et son installation il peut être nécessaire d'effectuer des mises à jour, nous utilisons l'éditeur jed qui n'a pas encore été installé, ce qui est fait maintenant. La connection se fait avec les clefs insérées et l'utilisateur choisi par défaut (pour nous ens_ife)

ssh ens-ife@192.168.10.141

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get install jed dirmngr wpasupplicant php-fpm fcgiwrap libfcgi-dev  php-mysqli

Ajout d'utilisateurs

Il est souvent utile de rajouter des utilisateurs qui pourront avoir accès à la station pour des raisons de sécurité ou d'administration.

sudo adduser newuser

Ajout d'un administration local l'utilisateur par défaut ens-ife étant conservé par le projet tremplin (il est toujours possible à localadm de supprimer cet utilisateur.

sudo adduser localadm
sudo adduser localadm sudo

L'utilisateur weewx est créé pour lancer weewx plutôt que de le faire lancer par root.

sudo adduser weewx

Pour mémoire dans l'image du projet un compte est systématiquement ouvert pour la DSI du rectorat concerné avec ajout d'une clef ssh (exemple ici pour l'académie de Lyon):

sudo adduser aclyondsi
sudo adduser aclyondsi sudo
sudo su aclyondsi
cd
mkdir .ssh
cd .ssh
jed authorized_keys
exit

2.c Configuration de weewx

Le logiciel weewx a été installé lors de la création de l'image mais il n'a pas été configuré; pour y remédier arrêter le service puis éditer le fichier de configuration et remplacer les paramètres par défaut par les valeurs correctes. Attention changer le systeme de mesure (métrique ou autre) altère profondément la base et interrompt le fonctionnement, veiller à faire ces modifications avant le premier démarrage. Dans le fichier remplacer les ************* par les valeurs vous concernant.

sudo systemctl stop weewx
sudo jed /etc/weewx/weewx.conf
#
#modify the following items data are examples use your own data
#
[Station]

    location = "Collège / Lycée************** Tremplin des sciences"

    latitude = 45.73 | 
    longitude = 4.83

    altitude = 169, meter

    station_type = TE923 # for TFA Meteotime DUO see http://weewx.com/docs/hardware.htm for hardware driver selection

[TE923]
    # This section is for the Hideki TE923 series of weather stations.

    # The station model, e.g., 'Meade TE923W' or 'TFA Nexus'
    model = 'TFA Meteotime Duo'

    # The driver to use:
    driver = weewx.drivers.te923

#Changes to metric system 

    [[StandardReport]]
    target_unit = METRICWX    # Options are 'US', 'METRICWX', or 'METRIC'

        skin = Standard
        [[[Units]]]
            [[[[Groups]]]]
                group_altitude = meter
                group_speed2 = meter_per_second2
                group_pressure = mbar
                group_rain = mm
                group_rainrate = mm_per_hour
                group_temperature = degree_C
                group_degree_day = degree_C_day
                group_speed = meter_per_second
                group_direction   = degree_compass
                group_moisture    = centibar
                group_percent     = percent

[StdQC]

    [[MinMax]]
        barometer = 880, 1100, hPa
        outTemp = -40, 50, degree_C
        inTemp = 10, 40, degree_C
        outHumidity = 0, 100
        inHumidity = 0, 100
        windSpeed = 0, 35, meter_per_second
        pressure = 812, 1170, hPa

[StdArchive]

    data_binding = wx_binding #other possible new values wx_mariadbextern_binding wx_mariadblocal_binding

[DataBindings]
# new bindings are added to enable local and distant mariadb

    [[wx_binding]]
         database = archive_sqlite
        table_name = archive
        manager = weewx.wxmanager.WXDaySummaryManager
        schema = schemas.wview.schema

    [[wx_mariadbextern_binding]]
        database = archive_mysql
        table_name = archive
         manager = weewx.wxmanager.WXDaySummaryManager
        schema = schemas.wview.schema

    [[wx_mariadblocal_binding]]
        database = archive_mysql_local
        table_name = archive
        manager = weewx.wxmanager.WXDaySummaryManager
        schema = schemas.wview.schema

[Databases]

    # A SQLite database is simply a single file
    [[archive_sqlite]]
        database_type = SQLite
        database_name = weewx.sdb

#replace the ***** by the name of the institution in the OpenMetEdu network
    # MySQL
    [[archive_mysql]]
        database_type = MySQL
        database_name = OpenMetEdu_*******

    # MySQL
    [[archive_mysql_local]]
        database_type = LocMySQL
        database_name = OpenMetEdu_*******

[DatabaseTypes]

   [[SQLite]]
        driver = weedb.sqlite
        SQLITE_ROOT = /var/lib/weewx

    [[MySQL]]
        driver = weedb.mysql
        host = stationsdata.climatetmeteo.fr
        user = ***********
        password = ************
        port = ****

    [[LocMySQL]]
        driver = weedb.mysql
        host = localhost
        user = ***********
        password = ***********
        port = ****

Ajout des cadrans interactifs

Pour obtenir cette "skin" il est d'avbord nécessaire de cloner la ressource depuis github

mkdir Logiciels
cd Logiciels/

git clone https://github.com/mcrossley/SteelSeries-Weather-Gauges.git
cd SteelSeries-Weather-Gauges

Créer ensuite le répertoire qui contiendra le graphisme de l'interface et recopier les fichiers téléchargés

sudo mkdir /etc/weewx/skins/ss
sudo cp weather_server/WeeWX/skin.conf /etc/weewx/skins/ss
sudo cp weather_server/WeeWX/index.html.tmpl /etc/weewx/skins/ss
sudo cp weather_server/WeeWX/gauge-data.txt.tmpl /etc/weewx/skins/ss
sudo mkdir /etc/weewx/skins/ss/css
sudo cp web_server/css/*.css /etc/weewx/skins/ss/css
sudo mkdir /etc/weewx/skins/ss/scripts
sudo cp web_server/scripts/*.js /etc/weewx/skins/ss/scripts

Éditer ensuite le fichier /etc/weewx/skins/ss/scripts/gauges.js en fonction des paramètres locaux

weatherProgram : 6,
imgPathURL : '',
stationTimeout : 10,        // set to twice archive interval, in minutes
showUvGauge : true,         // false if there is no UV sensor
showSolarGauge : true,      // false if there is no solar radiation sensor
showRoseGauge : false,      // true if field WindRoseData is populated

Modifier enfin weewx.conf

[StdReport]
    ...
    [[SteelSeries]]
        skin = ss
        HTML_ROOT = /var/www/html/ss

Pour afficher les mesures en temps réel il est nécessaire de synchroniser la Raspberry Pi avec le serveur web des opendata, cela se fait en modifiant les paramètres [[RSYNC]] de weewx.conf :

    [[RSYNC]]
        #HTML_ROOT = /var/www/html/ss
        #server = stationsdata.climatetmeteo.fr
        #path = folder_name_path_on_server
        #user = opendata

La clef ssh de connexion au serveur doit ensuite être ajoutée.

2.d installation et configuration du pare-feu

La Raspberry va être exposée sur le net il est important d'^etre attentifs à la sécurité de cette machine. Une première méthode est de mettre en place un pare-feu mais cette opération est délicate et nous utiliserons donc un logiciel d'asssitance à la création de pare-feu firehol. Ce logiciel permet d'établir des règles de filtrage avec une syntaxe (relativement) intelligible dans un fichier de configuration, il se charge ensuite de charger les règles des iptables correspondant aux souhaits de l'usager. L'installation du fichier se fait comme d'habitude

sudo apt-get install firehol

Activer firehol :

sudo jed /etc/default/firehol

#modify as follows

# To enable firehol at startup set START_FIREHOL=YES (init script variable)
START_FIREHOL=YES

Le fichier de configuration se trouve dans la hiérarchie /etc/firehol/firehol.conf. Les modifications à effectuer dans le cadre du projet tremplin sont proposées ci-dessous. Elles sont toutes commentées afin de permettre le fonctionnement par défaut de l'image. Le pare-feu doit être configuré avec les paramètres locaux de l'usager, si la configuration ne correspond pas à l'environnement réseau de la Raspberry elle peut devenir inaccessible ! Soyez prudents. En cas de problème il est toujours possible d'accéder au contenu de la microSD depuis une machine GNU/linux et de modifier le fichier de configuration; si vous êtes sous un autre système d'exploitation il est possible de démarrer votre ordinateur en utilisant une clef USB GNU/linux live qui fournit un ordinateur opérationnel sans rien toucher de ce qui est installé par exemple debian live.

Pour les participants au projet Tremplin des sciences des fichiers pré-configurés sont disponibles sur les sites d'accompagnement, au besoin contacter l'un des responsables ou accompagnateurs.

Propositions de modifications du fichier de configuration firehol.conf.

# FireHOL configuration file
#
# See firehol.conf(5) manual page and FireHOL Manual for details.
#
# This configuration file will allow all requests originating from the
# local machine to be send through all network interfaces.
#
# No requests are allowed to come from the network. The host will be
# completely stealthed! It will not respond to anything, and it will
# not be pingable, although it will be able to originate anything
# (even pings to other hosts).
#

version 6

# Accept all client traffic on any interface
interface any world
        client all accept

## Configure log
#FIREHOL_LOG_PREFIX="firehol: "

##ENABLE_IPV6=0

## Configure AUthorized IPs
#ENS_IFE="***.***.***.***/** ***.***.***.***/**"
#ETAB="***.***.***.*** ***.***.***/**"
#INTERNE=192.168.***.0/24
# Rescue 
#RESCUE=***.***.***.***

#known_ips="${ENS_IFE} ${INTERNE} ${ETAB} ${RESCUE}"
#public_ip=192.168.***.***

## Configure client and server
#server_http_ports="tcp/**** tcp/****:****"
#server_https_ports="tcp/****"
#server_ssh_ports="tcp/****"
##server_ftp_ports="tcp/****"
##client_http_ports="default"

## Open mysql port **** 
#server_mysql_ports="tcp/****"
##

#ipv4 interface enx********** KnownMachines src "${known_ips}" dst ${public_ip}
#  policy reject
#   protection strong
#   server "icmp ssh http https mysql" accept
#   client all accept

#ipv4 interface enxb827eba986b8 restOfTheNet src not "${UNROUTABLE_IPS} ${known_ips}" dst  ${public_ip}
#   policy reject
#   protection strong
#   server "icmp http" accept
#   client all accept

2.e Installation et configuration de mariadb

Par défaut weewx utilise une base sqlite, pour des raisons d'interopérabilité et de facilitation du partage des données nous installons les composants serveur et client de la base mariadb. Nous effectuons un installation par défaut, au moment de la rédaction (27/07/2017) la dernière version disponible est 10.1.

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo apt-get install mariadb-client mariadb-server  mariadb-common

La base de données est maintenant installée, il est nécessaire de la configurer. On ajoute un mot de passe à l'utilisateur root, on ajoute ensuite un utilisateur admin avec privilèges qui évite d'utiliser root pour la configuration.

sudo mysql -u root
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 10.1.23-MariaDB-9+deb9u1 Debian 9.0

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> select password ('AChanger1$');
+-------------------------------------------+
| password ('AChanger1$')                   |
+-------------------------------------------+
| *695008F6BF1536D1C456BC7B1226080345359BB9 |
+-------------------------------------------+
1 row in set (0.00 sec)
MariaDB [(none)]> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

MariaDB [mysql]> UPDATE user SET password=PASSWORD("*695008F6BF1536D1C456BC7B1226080345359BB9") WHERE User='root';

MariaDB [(none)]> select password ('***************');
+-------------------------------------------+
| password ('*************')                |
+-------------------------------------------+
| *######################################## |
+-------------------------------------------+
1 row in set (0.00 sec)

# creation d'un user privilégié pouvant accéder localement et à distance
MariaDB [mysql]> CREATE USER 'admin'@'localhost' IDENTIFIED BY PASSWORD '*#################################';
MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
MariaDB [mysql]> CREATE USER 'admin'@'%' IDENTIFIED BY '*######################################';
MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;

#Si besoin pour modifier le mot de passe

MariaDB [mysql]> UPDATE user SET password=PASSWORD("********************") WHERE User='user_a_modifier';
MariaDB [mysql]> FLUSH PRIVILEGES;


MariaDB [(none)]> select host, user, default_role, is_role, password from mysql.user;
+-----------+-------+--------------+---------+-------------------------------------------+
| host      | user  | default_role | is_role | password                                  |
+-----------+-------+--------------+---------+-------------------------------------------+
| localhost | root  |              | N       | *######################################## |
| localhost | admin |              | N       | *######################################## |
| %         | admin |              | N       | *######################################## |
+-----------+-------+--------------+---------+-------------------------------------------+
\q

Nous souhaitons pouvoir accéder à la base depuis des machines extérieures (pour partager les données dans le cadre du projet par exemple), pour cela il est nécessaire de modifier quelques paramètres du fichier de configuration /etc/mysql/mariadb.conf.d/50-server.cnf.

sudo jed /etc/mysql/mariadb.conf.d/50-server.cnf

# pour avoir un accès distant
# Modifier
#bind-address       = 127.0.0.1
bind-address        = 0.0.0.0

# pour changer le port 
port            = ****

Relancer le serveur pour vérifier que les paramètres sont priss en compte.

sudo systemctl restart mysqld
sudo systemctl status mysqld

Passer le système de sécurisation par défaut :

sudo mysql_secure_installation

La suite des interventions sur la base de données peut alors se faire depuis un outil à ditance comme DBeaver, pour éviter des risques PHPmyadmin n'est pas installé.

Following tasks might help future users :

  • créer un nouvel utilisateurr (user_college1)
  • créer une nouvelle base de données (OpenMetEdu_College1)
  • donner tous les privilèges au nouvel utilisateur sur la nouvelle base
  • configurer weewx avec ces paramètres

2.f Configuration du réseau

Deux modifications sont nécessaires pour améliorer la sécurité et consolider les connexions réseau. La première consiste à utiliser un port non standard pour les connections via ssh, pour ce faire éditer le fichier /etc/ssh/sshd_config et modifier la valeur de la variable port.

sudo jed /etc/ssh/sshd_config 
# décommenter et modifier la ligne suivante
#Port 22

La seconde impose la mise en place d'iun fichier de configuration /etc/systemd/network/50-wired.network.

sudo mkdir  /etc/systemd/network
sudo jed /etc/systemd/network/50-wired.network
#ajouter la configuration suivante

[Match]
Name=enx*
Host=raspwife3
Virtualization=no

[Network]
DHCP=no
DNS=***.***.***.***

[Address]
Address=***.***.***.***/24

[Route]
Gateway=***.***.***.1

Pour permettre la première connexion le paramètre Name est positionné à la valeur enx* afin de prendre en compte toute interface réseau construite à partir d'une adresse mac, c'est une commodité qui devra être traitée dès la première connexion en remplaçant la valeur enx* par le nom de l'interface fourni par la commande :

ip token

Il est aussi possible de configurer une connexion en suivant les indications de ce blog toutefois il semble souhaitable pour simplifier les choses de s'en tenir à une connexion filaire d'autant que la station météo est aussi connectée via un câble.

2.g Mise en place d'un serveur web

Nous allons utiliser la base de données locale maraidb installée plus haut et les outils proposés par le site météo Villarzel, nous proposons la version antérieure (sans afficheurs dynamiques) et nous faisons appel à toute contribution pour proposer dans l'image générique la version dynamique. Le site web est installé dans le répertoire /opt/WeatherWeb. Le fichier à configurer est /opt/WeatherWeb/mysql_connect.php

sudo jed /opt/WeatherWeb/mysqli_connect.php

Le fichier est de la forme suivante en remplaçant les ***** par les valeurs correspondant à votre situation :

<?php
$server ="localhost:********";
$user="**********";
$pass="***********";
$db="******************";
mysql_connect($server,$user,$pass) or die ("Erreur SQL : ".mysql_error() );
mysql_select_db($db) or die ("Erreur SQL : ".mysql_error() );
?>

Configuration de nginx

sudo jed /etc/nginx/sites-available/meteoRaspWife3

#avec un contenu du type :

server {
    listen   80 default_server;
    listen [::]:80 default_server;

    root /opt/WeatherWeb/;
    index index.html index.htm index.php;

    server_name _;

    location / {
        try_files $uri $uri/ /index.html;
        }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # With php5-fpm:
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

#puis
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/meteoRaspWife3 /etc/nginx/sites-enabled/

2. Modifications pour les images pré-configurées du projet Tremplin

Liste des fichiers de configuration susceptibles d'empêcher la connexion automatique de la raspberry pi au réseau à vérifier avant toute tentative de connexion :

/etc/firehol/firehol.conf
/etc/systemd/network/50-wired.network
/etc/hosts

Ces fichiers sont "anonymisés" pour produire l'image mise à disposition du public en montant la microSD comme disque dur externe.

sudo systemctl halt
#mounting on another computer
cd /media/user/uuid/
sudo jed /etc/firehol/firehol.conf
sudo jed /etc/systemd/network/50-wired.network
sudo jed /etc/hosts
sudo jed /lib/systemd/network/10-eth.network
#Sauvegarde de l'image
sudo dd if=/dev/mmcblk0 of=2017-07-29-debianStretchRpiW3Public.img bs=16M conv=sparse count=450
#create bmap
bmaptool create -o 2017-07-29-debianStretchRpiW3Public.bmap 2017-07-29-debianStretchRpiW3Public.img 
#compression de l'image
7z a -txz 2017-07-29-debianStretchRpiW3Public.img.xz 2017-07-29-debianStretchRpiW3Public.img 

Une image pré-configurée est disponible pour les participants au projet Tremplin, les configurations suivantes sont effectuées :

  • configuration des ports
  • ajout de l'utilisateur rectorat de Lyon
  • configuration des adresses réseau

Il reste à chaque responssable de site d'ajouter les paramètres spécifiques avant de connecter la Raspberry au réseau


Webographie

  1. Site principal Raspberry Pi
  2. Scripts de création de l'image
  3. Scripts modifiés de création de l'image
  4. Site du logiciel weewx
  5. Documentation weewx firehol le site météo Villarzel

Commentaires