décembre 25

Serveur Domoticz pour TD/TP en BTS SN

But: monter un serveur Domoticz avec des modules sonoff a base de esp8266 pour faire des TD / TP en BTS SN ( ancien BTS Electronique ).
le Raspberry communique avec les modules sonoff avec un réseau wifi séparé du réseau local.
Matériel nécessaire :
– Un Raspberry PI 3 ( ou un autre avec dongle wifi ) avec carte SD de 8Go ( actuellement ~3.5Go utilisé )
– Un écran 7″ officiel tactile pour le Raspberry pi ( optionnel )
– plusieurs modules “SonOff” pour la partie purement Domotique ( attention présence de tension secteur 220v )

le tuto est découpée en plusieurs parties a suivre dans l’ordre
-Installation du Raspberry PI
-Début du paramétrage
-Installation de Node-Red
-Installation de Webmin
-Hotspot Wifi et DHCP
-Serveur Web nginx
-Installation phpmyadmin depuis les sources
-Configuration de Samba
-Installation de eZServerMonitor
-l’ecran 7″ tactile officiel du Rapsberry pi
-Test divers
-Mise à jour de domoticz par tache cron ( Optionel )
-Sauvegarde des bases de données SQL

Partie 1 ) Installation du Raspberry PI
On récupère l’image “raspbian lite” sur https://www.raspberrypi.org/downloads/raspbian/
Une fois l’image récupérée on va la copier sur la carte SD , avec Win32diskimage ou autre logiciel
On accède a la partition FAT32 de la carte SD et on crée un fichier texte que l’on appelle ssh , cela activera le serveur ssh du Pi au démarrage
On met la carte SD dans le Raspberry et on démarre le système , si l’écran est branché on peux suivre le processus , sinon attendre environ 5mn
On Scanne son réseau avec un utilitaire ( dans mon cas Angry Ip Scanner => http://angryip.org/ ) pour trouver l’adresse du PI
on se connecte en SSH ( utilisateur: pi , mot de passe: raspberry )

Dans le reste du Tuto lorsqu’il y a des lignes de commandes, celles commençant par $ sont lancées avec l’utilisateur pi et celles commençant par # par l’utilisateur root ( ne pas taper $ ou # lors des commandes ). et lorsque dans les lignes de commandes si en fin de ligne il y a \ cela veux dire que la commande continue sur la ligne suivante il faut tous taper sur une seule ligne et de pas mettre le \ .
quand je dis on edite le fichier x , cela veux dire : sudo nano x

 

on vas changer locale , timezone , key, wifi

$sudo raspi-config

on vas changer le mot de passe du compte root => “Domotic”

$sudo passwd root

Mise a jour kernel & firmware

$sudo rpi-update

Une fois a jour on reboot et on enlève l’ancien firmware (4.14.34 dans mon cas ) , faire ls -al /lib/modules pour voir les versions installées . on peux meme enlever celui qui ne se termine pas pas v7+

$sudo rm -fr /lib/modules/4.14.34*

on met a jour les paquets

$sudo apt-get clean 
$sudo apt-get autoclean 
$sudo apt-get update
$sudo apt-get upgrade -y
$sudo apt-get dist-upgrade -y
$sudo reboot

on commence a installer tous ce que l’on a besoin on paramétreras ça plus tard

sudo apt-get install cmake make gcc g++ git libcurl4-openssl-dev libusb-dev python3-dev libcurl4-openssl-dev libssl1.0-dev \
 python-rpi.gpio f2fs-tools mosquitto-clients mosquitto dnsmasq hostapd ntp nginx php7.0-fpm php-apcu php7.0-mysql php7.0-curl \
 php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache php7.0-pspell php7.0-recode php7.0-sqlite3 \
 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext mariadb-server samba perl libnet-ssleay-perl openssl nscd \
 libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python x11-xserver-utils xinit xserver-xorg matchbox-window-manager \
 unclutter firefox-esr-l10n-fr firefox-esr xdotool libboost-dev libboost-thread-dev libboost-system-dev libudev-dev xterm \
 automysqlbackup resolvconf avahi-utils avahi-daemon

un petit reboot et on vas commencer le paramétrage

 

Partie 2 ) Début du paramétrage

on vas autoriser tous les utilisateur a lancer le serveur graphique

$sudo dpkg-reconfigure xserver-xorg-legacy

on vas sécuriser les bases SQL ( Domotic en mdp , supprimer les bases test , autoriser le remote …)
Remove anonymous users? => Y
Disallow root login remotely? => N
Remove test database and access to it? => Y

$sudo mysql_secure_installation
$echo "update mysql.user set plugin = 'mysql_native_password' where user='root';" | sudo mysql -u root -p  

maintenant on vas installer  Domoticz. Plus besoin d’installer les sources et de compiler

$sudo curl -L install.domoticz.com | bash

en réseau local pas besoin de IPV6 , on vas le desactiver  , editer /etc/sysctl.conf et ajouter a la fin :

# désactivation de ipv6 pour toutes les interfaces
net.ipv6.conf.all.disable_ipv6 = 1
# désactivation de l’auto configuration pour toutes les interfaces
net.ipv6.conf.all.autoconf = 0
# désactivation de ipv6 pour les nouvelles interfaces (ex:si ajout de carte réseau)
net.ipv6.conf.default.disable_ipv6 = 1
# désactivation de l’auto configuration pour les nouvelles interfaces
net.ipv6.conf.default.autoconf = 0

on actualise

$sudo sysctl -p

Partie 3 ) Installation de Node-Red 

$cd
$bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)
$sudo systemctl enable nodered.service
$sudo service nodered restart

Partie 4 ) Installation de Webmin

$cd /tmp
$sudo wget http://prdownloads.sourceforge.net/webadmin/webmin_1.881_all.deb
$sudo dpkg -i webmin_1.881_all.deb

on editer /etc/webmin/miniserv.conf , et changer ssl=1 en ssl=0

$sudo service webmin restart

se connecter sur la page de webmin http://ip_du_pi:1000 ( user: root , mdp : Domotic)
passer webmin en Francais : menu webmin , Configuration de Webmin , langue
télécharger le module de gestion de nginx sur https://www.justindhoffman.com/sites/justindhoffman.com/files/nginx-0.10.wbm_.gz
ajouter le module dans webmin : menu webmin , Configuration de Webmin , modules webmin ,

Partie 5 ) Hotspot Wifi et DHCP

$sudo nano /etc/dhcpcd.conf

ajouter a la fin: le PI chercheras un dhcp sur son interface filaire , mais pour la partie wifi c’est lui qui serat serveur DHCP

denyinterfaces wlan0

on attaque la partie hotspot en éditant  /etc/hostapd/hostapd.conf
si vous voulez changer le code wifi ou le ssid c’est le moment

driver=nl80211
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
beacon_int=100
auth_algs=1
wpa_key_mgmt=WPA-PSK
ssid=Domo-Jules
channel=6
hw_mode=g
wpa_passphrase=Domoticz_Jules
interface=wlan0
wpa=2
wpa_pairwise=TKIP
country_code=FR

le PI vas aussi servir de serveur DNS pour le reseau Wifi , on edite  /etc/hosts

127.0.0.1       localhost
127.0.1.1       raspberrypi

192.168.254.1    domo.home www.domo.home
192.168.254.1    sql.domo.home www.sql.domo.home
192.168.254.1    webmin.domo.home www.webmin.domo.home
192.168.254.1    nofuss.domo.home www.nofuss.domo.home
192.168.254.1    node.domo.home www.node.domo.home
192.168.254.1    status.domo.homewww.status.domo.home
192.168.254.1    system.domo.home www.system.domo.home

config serveur dhcp sur wlan0 bloc adr de 192.168.254.10 -> 192.168.254.200 . On vas forcer l’ip de wlan0 ,  on édite  /etc/network/interfaces
et ajouter :

auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet static
    address 192.168.254.1
    netmask 255.255.255.0
    network 192.168.254.0
    broadcast 192.168.254.255

partie serveur dhcp

$sudo rm /etc/dnsmasq.conf
$sudo nano /etc/dnsmasq.conf
interface=wlan0      # Use interface wlan0
#no-resolv
no-poll

listen-address=192.168.254.1 # Explicitly specify the address to listen on
bind-interfaces      # Bind to the interface to make sure we aren't sending things elsewhere
server=8.8.8.8       # Forward DNS requests to Google DNS
server=192.168.254.1 # 
domain-needed        # Don't forward short names
bogus-priv           # Never forward addresses in the non-routed address spaces.
addn-hosts=/etc/dnsmasq_static_hosts.conf

# Assign IP addresses between 192.168.254.10 and 192.168.254.200 with a 12 hour lease time
dhcp-range=192.168.254.10,192.168.254.200,12h

# force appariel adr mac b4:7c:9c:fe:11:50 => IP 192.168.254.201
dhcp-host=b4:7c:9c:fe:11:50,192.168.254.201

Editez /etc/default/hostapd , ajouter :

DAEMON_CONF="/etc/hostapd/hostapd.conf"

dans /etc/sysctl.conf ajouter

net.ipv4.ip_forward=1

le Pi vas servir de serveur ntp (time) pour les modules domotiques sonoff , on édite /etc/ntp.conf et on ajoute

restrict 192.168.254.0 mask 255.255.255.0
broadcast 192.168.254.255
broadcast 224.0.1.1
$sudo service hostapd start  
$sudo service dnsmasq start  

 

Partie 6 ) Serveur Web nginx

Au lieu d’utiliser Apache en serveur Web on vas utiliser nginx ( moins gourmand en mémoire) , ne gérant pas l’activation / désactivation des sites virtuels comme apache on vas creer un fichier nginx_modsite et le rendre executable

$sudo nano /usr/bin/nginx_modsite
$chmod +x /usr/bin/nginx_modsite

contenu de nginx_modsite

#!/bin/bash

##
#  File:
#    nginx_modsite
#  Description:
#    Provides a basic script to automate enabling and disabling websites found
#    in the default configuration directories:
#      /etc/nginx/sites-available and /etc/nginx/sites-enabled
#    For easy access to this script, copy it into the directory:
#      /usr/local/sbin
#    Run this script without any arguments or with -h or --help to see a basic
#    help dialog displaying all options.
##

# Copyright (C) 2010 Michael Lustfield <mtecknology@ubuntu.com>

# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.

##
# Default Settings
##

NGINX_CONF_FILE="$(awk -F= -v RS=' ' '/conf-path/ {print $2}' <<< $(nginx -V 2>&1))"
NGINX_CONF_DIR="${NGINX_CONF_FILE%/*}"
NGINX_SITES_AVAILABLE="$NGINX_CONF_DIR/sites-available"
NGINX_SITES_ENABLED="$NGINX_CONF_DIR/sites-enabled"
SELECTED_SITE="$2"

##
# Script Functions
##

ngx_enable_site() {
    [[ ! "$SELECTED_SITE" ]] &&
        ngx_select_site "not_enabled"

    [[ ! -e "$NGINX_SITES_AVAILABLE/$SELECTED_SITE" ]] && 
        ngx_error "Site does not appear to exist."
    [[ -e "$NGINX_SITES_ENABLED/$SELECTED_SITE" ]] &&
        ngx_error "Site appears to already be enabled"

    ln -sf "$NGINX_SITES_AVAILABLE/$SELECTED_SITE" -T "$NGINX_SITES_ENABLED/$SELECTED_SITE"
    ngx_reload
}

ngx_disable_site() {
    [[ ! "$SELECTED_SITE" ]] &&
        ngx_select_site "is_enabled"

    [[ ! -e "$NGINX_SITES_AVAILABLE/$SELECTED_SITE" ]] &&
        ngx_error "Site does not appear to be \'available\'. - Not Removing"
    [[ ! -e "$NGINX_SITES_ENABLED/$SELECTED_SITE" ]] &&
        ngx_error "Site does not appear to be enabled."

    rm -f "$NGINX_SITES_ENABLED/$SELECTED_SITE"
    ngx_reload
}

ngx_list_site() {
    echo "Available sites:"
    ngx_sites "available"
    echo "Enabled Sites"
    ngx_sites "enabled"
}

##
# Helper Functions
##

ngx_select_site() {
    sites_avail=($NGINX_SITES_AVAILABLE/*)
    sa="${sites_avail[@]##*/}"
    sites_en=($NGINX_SITES_ENABLED/*)
    se="${sites_en[@]##*/}"

    case "$1" in
        not_enabled) sites=$(comm -13 <(printf "%s\n" $se) <(printf "%s\n" $sa));;
        is_enabled) sites=$(comm -12 <(printf "%s\n" $se) <(printf "%s\n" $sa));;
    esac

    ngx_prompt "$sites"
}

ngx_prompt() {
    sites=($1)
    i=0

    echo "SELECT A WEBSITE:"
    for site in ${sites[@]}; do
        echo -e "$i:\t${sites[$i]}"
        ((i++))
    done

    read -p "Enter number for website: " i
    SELECTED_SITE="${sites[$i]}"
}

ngx_sites() {
    case "$1" in
        available) dir="$NGINX_SITES_AVAILABLE";;
        enabled) dir="$NGINX_SITES_ENABLED";;
    esac

    for file in $dir/*; do
        echo -e "\t${file#*$dir/}"
    done
}

ngx_reload() {
    read -p "Would you like to reload the Nginx configuration now? (Y/n) " reload
    [[ "$reload" != "n" && "$reload" != "N" ]] && invoke-rc.d nginx reload
}

ngx_error() {
    echo -e "${0##*/}: ERROR: $1"
    [[ "$2" ]] && ngx_help
    exit 1
}

ngx_help() {
    echo "Usage: ${0##*/} [options]"
    echo "Options:"
    echo -e "\t<-e|--enable> \tEnable site"
    echo -e "\t<-d|--disable> \tDisable site"
    echo -e "\t<-l|--list>\t\tList sites"
    echo -e "\t<-h|--help>\t\tDisplay help"
    echo -e "\n\tIf  is left out a selection of options will be presented."
    echo -e "\tIt is assumed you are using the default sites-enabled and"
    echo -e "\tsites-disabled located at $NGINX_CONF_DIR."
}

##
# Core Piece
##

case "$1" in
    -e|--enable)    ngx_enable_site;;
    -d|--disable)   ngx_disable_site;;
    -l|--list)  ngx_list_site;;
    -h|--help)  ngx_help;;
    *)      ngx_error "No Options Selected" 1; ngx_help;;
esac

on vas supprimer les config par defaut de nginx

$sudo rm /etc/nginx/sites-available/default et /etc/nginx/sites-enabled/default

on vas créer tous les fichiers de config nginx

$cd /etc/nginx/sites-available
$sudo nano 0000-default 
$sudo nano domo.home 
$sudo nano node.home
$sudo nano nofuss.home
$sudo nano sql.home
$sudo nano status.home
$sudo nano system.home
$sudo nano webmin.home

contenu de 0000-default

server {
    listen 80 default;
    server_name _;
        access_log  /var/log/nginx/access.log ;
        error_log   /var/log/nginx/error.log;
uninitialized_variable_warn off;
root           /var/www/;
    location / {
        autoindex on;
        index  index.php index.html index.htm;
    }
    location ~ /\.ht {
        deny  all;
    }
 location ~ \.php$ {
 include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
 }
  location /php_status {
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
    include fastcgi_params;
    allow 127.0.0.1;
    deny all;
  }
}

contenu de domo.home

server {
        listen   80;
        server_name  domo.home www.domo.home;
        access_log  /var/log/nginx/domo.home_access.log;
        error_log   /var/log/nginx/domo.home_error.log;
uninitialized_variable_warn off;
  location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        }
}

contenu de node.home

server {
  listen 80;
  server_name node.domo.home www.node.domo.home;
        access_log  /var/log/nginx/node.domo.home_access.log;
        error_log   /var/log/nginx/node.domo.home_error.log;
  location / {
        proxy_pass http://localhost:1880;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        }
}

contenu de nofuss.home

server {
        listen   80;
        server_name  nofuss.domo.home www.nofuss.domo.home;
        access_log  /var/log/nginx/nofuss.domo.home_access.log;
        error_log   /var/log/nginx/nofuss.domo.home_error.log;
        uninitialized_variable_warn off;
        root   /var/www/nofuss.domo.home/;
    location / {
        root   /var/www/nofuss.domo.home/;
        autoindex on;
        index  index.php index.html index.htm;
    }
    location ~ /\.ht {
        deny  all;
    }
 location ~ \.php$ {
 include snippets/fastcgi-php.conf;
 fastcgi_pass unix:/run/php/php7.0-fpm.sock;
 }
}

contenu de sql.home

server {
        listen   80;
        server_name  sql.domo.home www.sql.domo.home;
        access_log  /var/log/nginx/sql.domo.home_access.log;
        error_log   /var/log/nginx/sql.domo.home_error.log;
uninitialized_variable_warn off;
root /usr/share/phpmyadmin/;
   location / {
           index  index.php;
       }
       ## Images and static content is treated different
       location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
           access_log        off;
           expires           360d;
       }
       location ~ /\.ht {
           deny  all;
       }
       location ~ /(libraries|setup/frames|setup/libs) {
           deny all;
           return 404;
}
    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /usr/share/phpmyadmin$fastcgi_script_name;
        fastcgi_param  HTTPS off;
    }
}

contenu de status.home

server {
        listen   80;
        server_name  status.domo.home www.status.domo.home;
        access_log  /var/log/nginx/status.domo.home_access.log;
        error_log   /var/log/nginx/status.domo.home_error.log;
        uninitialized_variable_warn off;
        root   /var/www/eZServerMonitor-2.5/;
    location / {
        autoindex on;
        index  index.php index.html index.htm;
    }
    location ~ /\.ht {
        deny  all;
    }
 location ~ \.php$ {
 include snippets/fastcgi-php.conf;
 fastcgi_pass unix:/run/php/php7.0-fpm.sock;
 }
}

contenu de system.home

server {
        listen   80;
        server_name  system.domo.home www.system.domo.home;
        access_log  /var/log/nginx/system.domo.home_access.log;
        error_log   /var/log/nginx/system.domo.home_error.log;
        uninitialized_variable_warn off;
        root   /var/www/system/;
    location / {
        autoindex on;
        index  index.php index.html index.htm;
    }
    location ~ /\.ht {
        deny  all;
    }
 location ~ \.php$ {
 include snippets/fastcgi-php.conf;
 fastcgi_pass unix:/run/php/php7.0-fpm.sock;
 }
}

contenu de webmin.home

server {
  listen 80;
  server_name webmin.domo.home www.webmin.domo.home;
                access_log off;
                error_log off;
  location / {
                proxy_pass      http://127.0.0.1:10000;
                proxy_redirect  off;

                #Proxy Settings
                proxy_redirect     off;
                proxy_set_header   Host             $host:$server_port;
                proxy_set_header   X-Real-IP        $remote_addr;
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

                proxy_max_temp_file_size 0;
                proxy_connect_timeout      90;
                proxy_send_timeout         90;
                proxy_read_timeout         90;
                proxy_buffer_size          128k;
                proxy_buffers              32 32k;
                proxy_busy_buffers_size    256k;
                proxy_temp_file_write_size 256k;
        }
}

maintenant on active les sites

$sudo nginx_modsite -e 0000-default
$sudo nginx_modsite -e domo.home
$sudo nginx_modsite -e node.home
$sudo nginx_modsite -e nofuss.home
$sudo nginx_modsite -e sql.home
$sudo nginx_modsite -e tatus.home
$sudo nginx_modsite -e system.home
$sudo nginx_modsite -e webmin.home

on vérifie les sites avec : $sudo nginx_modsite -l
On ne redémarre pas encore nginx car pas encore installés les différents sites

Available sites:
 0000-default
 domo.home
 node.home
 nofuss.home
 sql.home
 status.home
 system.home
 webmin.home
Enabled Sites
 0000-default
 domo.home
 node.home
 nofuss.home
 sql.home
 status.home
 system.home
 webmin.home

 Partie 7 ) Installation phpmyadmin depuis les sources (version 4.8.1 au 2018/05/27)

$cd /tmp
$wget https://files.phpmyadmin.net/phpMyAdmin/4.8.1/phpMyAdmin-4.8.1-all-languages.tar.gz
$tar -zxvf phpMyAdmin-4.8.1-all-languages.tar.gz
$sudo mv phpMyAdmin-4.8.1-all-languages    /usr/share/phpmyadmin
sudo cd /usr/share/phpmyadmin
$sudo cp config.sample.inc.php config.inc.php
$sudo phpenmod mcrypt
$sudo phpenmod mbstring
$sudo systemctl restart php7.0-fpm

pour accéder a phpmyadmin en root , on édite /etc/mysql/mariadb.conf.d/50-server.cnf et ajouter apres bind-address = 127.0.0.1

sql-mode="NO_ENGINE_SUBSTITUTION"

on édite /etc/mysql/debian.cnf et on met le mot de passe sql  (Domotic) puis on lance :

$echo "update mysql.user set plugin = 'mysql_native_password' where user='root';" | sudo mysql -u root -p
$sudo cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

on édite /usr/share/phpmyadmin/config.inc.php

modifier:
$cfg['blowfish_secret'] =>mettre n'importe quoi (32cars)
/* User used to manipulate with storage */
$cfg['Servers'][$i]['controlhost'] = '';
$cfg['Servers'][$i]['controluser'] = 'root';
$cfg['Servers'][$i]['controlpass'] = 'Domotic';  => mdp SQL

on relance le service sql

$sudo service mysql restart

 

 Partie 8 ) Configuration de Samba

$sudo rm -fr /etc/samba/smb.conf
$sudo nano /etc/samba/smb.conf

on vas créer 3 partages : [Web] => /var/www/ , [Home] => /home/pi/ , [Logs] => /var/log/
contenu de smb.conf

#======================= Global Settings =======================
[global]
   workgroup = WORKGROUP
#   wins support = no
   dns proxy = no

#### Networking ####
;   interfaces = 127.0.0.0/8 eth0
;   bind interfaces only = yes

#### Debugging/Accounting ####
   log file = /var/log/samba/log.%m
   max log size = 1000
   syslog = 0
   panic action = /usr/share/samba/panic-action %d

####### Authentication #######
   server role = standalone server
   passdb backend = tdbsam
   obey pam restrictions = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
   pam password change = yes
   map to guest = bad user

########## Domains ###########

############ Misc ############
   usershare allow guests = yes
   
#======================= Share Definitions =======================
[Web]
        public = yes
        path = /var/www
        delete readonly = yes
        force group = www-data
        force user = www-data
        writeable = yes

[Home]
        delete readonly = yes
        path = /home/pi/
        public = yes
        writeable = yes
        force user = pi
        force group = pi

[Logs]
        delete readonly = yes
        path = /var/log
        public = yes
        writeable = yes
        force user = root
        force group = root

 

Partie 9 ) Installation de eZServerMonitor

$cd /var/www
$sudo wget https://www.ezservermonitor.com/esm-web/downloads/version/2.5
$sudo unzip 2.5
$sudo rm 2.5

On edite /var/www/eZServerMonitor-2.5/conf/esm.config.json , enlever la section ping dans services enlever email server , ftp et ajouter apres la section Web Server :

           {
                "name": "Webmin",
                "host": "localhost",
                "port": 10000,
                "protocol": "tcp"
            },
           {
                "name": "Node Red",
                "host": "localhost",
                "port": 1880,
                "protocol": "tcp"
            },

           {
                "name": "Domoticz",
                "host": "localhost",
                "port": 8080,
                "protocol": "tcp"
            },

 

Partie 10 ) l’ecran 7″ tactile officiel du Rapsberry PI ( optionnel  )

On vas lancer Firefox en plein écran au démarrage du PI

on Édite /boot/config.txt et on ajoute , a adapter en fonction de la position du PI

lcd_rotate=0

on vas forcer le paramétrage de Firefox

$cd
$mkdir -p .mozilla/firefox/profile.default
$nano .mozilla/firefox/profiles.ini

contenu de profiles.ini

[General]
StartWithLastProfile=1

[Profile0]
Name=default
IsRelative=1
Path=profile.default
Default=1

on vas éditer .bashrc pour forcer le lancement de firefox au démarrage du PI , a rajouter a la fin du .bashrc

# ne se lance que depuis le pi , pas en ssh a distance
if [ $(tty) == /dev/tty1 ]; then
xinit ./kiosk
fi

contenu de kiosk

#!/bin/sh
# disable DPMS (Energy Star) features.
xset -dpms
# disable screen saver
xset s off
# don't blank the video device
xset s noblank
# disable mouse pointer
unclutter &
# run window manager
matchbox-window-manager -use_cursor no -use_titlebar no  &
/usr/bin/firefox   -fullscreen

puis un chmod +x ./kiosk et on reboot le pi , normalement vas lancer firefox en plein ecran .
toujours en ssh faire : pkill firefox

$nano .mozilla/firefox/profile.default/prefs.js
et ajouter :
nano .mozilla/firefox/profile.default/prefs.js et ajouter :
user_pref("browser.startup.homepage", "http://domo.home");
user_pref("network.protocol-handler.warn-external.dnupdate", false);
user_pref("network.protocol-handler.warn-external.dnupdate", false);
user_pref("network.protocol-handler.warn-external.dnupdate", false);
user_pref("browser.sessionstore.resume_from_crash", false);
user_pref("browser.sessionstore.resume_session_once", true);

relancer le PI , maintenant le PI lance firefox au démarrage avec la page www.domo.home

 

Partie 11 ) Test divers 
se connecter sur le wifi du PI depuis une tablette ou un smartphone et tester les sites suivants :
domo.home,www.domo.home,  => Serveur Web Domoticz
sql.domo.home,www.sql.domo.home, => Admnistration des bases SQL
webmin.domo.home,www.webmin.domo.home, => Webmin pour configuration serveur
nofuss.domo.home,www.nofuss.domo.home, ** => Pour maj des firmware des modules SonOff en cours de Dev
node.domo.home,www.node.domo.home, => pour faire des Scripts en NodeRed
status.domo.loca,www.status.domo.home, => affichage status du PI , cpu , memoire , espace disque
system.domo.home,www.system.domo.home** => interface générale pour lancer les sites

** devrait sortir un message d’erreur pas pas encore de fichiers/dossiers crées

sur un PC windows en connexion filaire éditer le fichier C:\Windows\System32\drivers\etc et ajouter , en remplaçant 192.168.xxx.xxx par l’IP ‘filaire’ du PI

192.168.xxx.xxx domo.home www.domo.home
192.168.xxx.xxx sql.domo.home www.sql.domo.home
192.168.xxx.xxx webmin.domo.home www.webmin.domo.home
192.168.xxx.xxx nofuss.domo.home www.nofuss.domo.home
192.168.xxx.xxx node.domo.home www.node.domo.home
192.168.xxx.xxx status.domo.homewww.status.domo.home
192.168.xxx.xxx system.domo.home www.system.domo.home

 

Partie 12 ) Mise à jour de domoticz par tache cron ( Optionel )
mise a jour de domoticz automatique

$nano ~/domo_update
et tapez :
#!/bin/dash
cd /home/pi/domoticz
git pull
make
sudo service domoticz.sh restart

rendre le script exécutable et ajouter tache cron a 0h30 , 6h30 , 12h30 , 18h30,21h30

$chmod +x ~/domo_update

$crontab -e

et saisir :

30 0,6,12,18,21 * * * /home/pi/domo_update

 

Partie 13 ) Sauvegarde des bases de données SQL

script de sauvegarde des bases dans /opt/SAVE/sql ( daily latest monthly weekly )

$sudo mkdir -p /opt/SAVE/sql 
$sudo nano /etc/default/automysqlbackup

et changer :
SEPDIR=yes
BACKUPDIR="/opt/SAVE/sql"
LATEST=yes
DOWEEKLY=7

planification taches cron sauvegarde tous les soir a 22h30

$sudo crontab -e
et ajouter
30 22 * * * /usr/sbin/automysqlbackup

pour eviter le message “– Warning: Skipping the data of table mysql.event. Specify the –events option explicitly.”

$sudo nano /etc/mysql/conf.d/automysqlbackup.cnf

ensuite insérer le code suivant :

[mysqldump]
events
ignore-table = mysql.events

 

Partie 14 ) xxxxx

En cours d’éciture

Partie 15 ) xxxxx

En cours d’éciture

Conclusion ( provisoire )
Reste a faire les dossier /var/www/nofuss.domo.home et /var/www/system et pour ceux qui sont perdu  , un fichier .gz avec tous les fichiers conf modifiés pour injection directe dans le PI ( il faudras faire juste les parties 1,2,3 et 4 ) sera disponible très bientôt

 

Liens divers utilisée pour faire ce Tuto :

http://www.instructables.com/id/Raspberry-Pi-Web-Server-Nginx-PHP-MySql/
https://frillip.com/using-your-raspberry-pi-3-as-a-wifi-access-point-with-hostapd/
http://linuxfr.org/wiki/raspberrypi-remplacer-son-systeme-de-fichier-par-f2fs-formatage
https://www.howtoforge.com/tutorial/installing-nginx-with-php7-fpm-and-mysql-on-ubuntu-16.04-lts-lemp
https://www.digitalocean.com/community/questions/phpmyadmin-or-alternative-for-php7-nginx-mysql-5-7-ubuntu-16-04
https://www.citizenz.info/mariadb-mysql-connexion-root-avec-phpmyadmin-sous-ubuntu-16-04
https://publications.jbfavre.org/web/nginx-vhosts-automatiques-avec-SSL-et-authentification.fr
https://www1.zonewebmaster.eu/serveur-debian-mysql:automysqlbackup
https://serverfault.com/questions/424452/nginx-enable-site-command
https://anderson69s.com/2017/03/18/domoticz-domotique-diy/6/
http://hallard.me/pitinfov12/
http://hallard.me/pitinfo/

Catégorie : Uncategorized | Commentaires fermés sur Serveur Domoticz pour TD/TP en BTS SN