Afficher/cacher Sommaire
Raspberry PI 3
- Processeur Quad Core Broadcom 2837 ARMv8 64bit
- Vitesse du processeur : 1,2 GHz
- 1 GB RAM
- BCM43143 WiFi intégré
- Bluetooth Low Energy (BLE) intégré
- 40 broches d’extension GPIO
- 4 ports USB2
- Sortie vidéo et stéréo
- Port caméra CSI pour connecter la caméra Raspberry Pi
- Port d’affichage DSI pour connecter l’écran tactile Raspberry Pi
- Lecteur de carte Micro SD pour charger votre système d’exploitation et stocker vos données
- Source d’alimentation Micro USB, supporte maintenant jusqu’à 2,5A
Raspbian Stretch Lite
Raspbian Stretch Lite (download)
Samsung USB 3.0 Flash Drive FIT 32GB
Le Raspberry Pi 3 est capable de booter sur un stockage USB, disque dur externe ou clé USB.
** /!\ ATTENTION : ** il faut une unité de stockage suffisamment rapide pour être prise en compte
Choix d’une clé Samsung USB 3.0 Flash Drive FIT 32GB
NOTE:La possibilité de booter sur un stockage USB externe est vérifiable après boot sur une carte SD par la commande
vcgencmd otp_dump | grep 17:
qui doit afficher 17:3020000a
Insérer la clé Samsung USB 3.0 Flash Drive FIT 32GB sur un des connecteurs USB de l’ordinateur linux
Repérer sur quel périphérique
dmesg
[ 3420.876497] sd 4:0:0:0: [sde] 62652416 512-byte logical blocks: (32.1 GB/29.9 GiB)
[ 3420.877074] sd 4:0:0:0: [sde] Write Protect is off
[ 3420.877081] sd 4:0:0:0: [sde] Mode Sense: 43 00 00 00
[ 3420.877653] sd 4:0:0:0: [sde] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 3420.884367] sde: sde1 sde2
[ 3420.886547] sd 4:0:0:0: [sde] Attached SCSI removable disk
La “Clé USB” est sur le périphérique système /dev/sde
Aller dans le dossier contenant l’image de raspbian
sudo dd bs=4M if=2019-04-08-raspbian-stretch-lite.img of=/dev/sde conv=fsync
445+0 enregistrements lus
445+0 enregistrements écrits
1866465280 octets (1,9 GB, 1,7 GiB) copiés, 145,811 s, 12,8 MB/s
ATTENTION !!! Pas d’accès à la carte raspberry en mode terminal par la liaison série ou SSH
Les dernières versions de Raspbian nécessitent un écran et un clavier, car il n’est plus possible de se connecter directement par la liaison série ou SSH au Raspberry par défaut.
- Pour réactiver le lancement de SSH au boot ,placer dans la partition boot de la carte SD un fichier nommé ssh, vide et sans extension.
- Pour la liaison série ,il faut modifier le fichier de configuration **config.txt ** avant insertion de la “Clé USB” dans le raspberry
Identifier le périphérique
dmesg
[ 3420.877074] sd 4:0:0:0: [sde] Write Protect is off
[ 3420.877081] sd 4:0:0:0: [sde] Mode Sense: 43 00 00 00
[ 3420.877653] sd 4:0:0:0: [sde] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 3420.884367] sde: sde1 sde2
[ 3420.886547] sd 4:0:0:0: [sde] Attached SCSI removable disk
[ 3664.644705] sde: sde1 sde2
Montage de la “Clé USB” (sde1 qui correspond au boot) sur un dossier temporaire :
sudo mkdir -p /mnt/temp #Créer un dossier de montage temporaire
sudo mount /dev/sde1 /mnt/temp #montage de la partition boot sur /mnt/temp
Modifier le fichier **temp/config.txt **
sudo nano /mnt/temp/config.txt
ajouter en fin de fichier pour activer la liasion série
enable_uart=1
Sauvegarde Crtl x y ou o Entrée
fichier ssh vide dans la partition boot
sudo touch /mnt/temp/ssh
Démontage et insertion “Clé USB” dans le raspberry :
sudo umount /mnt/temp
Après avoir inséré la “Clé USB” dans son logement ,connecté le cordon réseau et la liaison série puis
brancher la micro-usb d’alimentation sur la carte raspberry et enfin le DC-Pack sur le secteur.
On peut se connecter soit par la liaison série (A) ou SSH (B)
A - minicom ou screen et un adatateur USB/Série
Interface USB/Série | Raspberry |
---|---|
GND | 6 (GND) |
Rxd | 8 (Txd) |
Txd | 10 (Rxd) |
lancer le logiciel de communication (minicom ou screen)
sudo minicom # Débit/Parité/Bits:115200 8N1,Contrôle de flux matériel:Non,Contrôle de flux logiciel:Non
sudo screen /dev/ttyUSB0 115200
B - Trouver l’adresse avec nmap et utiliser ssh
sudo nmap -T4 -sP 192.168.0.0/24
[...]
Nmap scan report for 192.168.0.41
Host is up (0.00038s latency).
MAC Address: B8:27:EB:54:7E:6A (Raspberry Pi Foundation)
[...]
Connexion SSH
ssh pi@192.168.0.41
Premier boot sur la clé USB
login/motde passe : pi/raspberry
Relever adresse
ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether b8:27:eb:54:7e:6a brd ff:ff:ff:ff:ff:ff
inet 192.168.0.41/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 2a01:e34:eebf:df0:c26a:5794:27e7:5438/64 scope global mngtmpaddr noprefixroute dynamic
valid_lft 86091sec preferred_lft 86091sec
inet6 fe80::8f2a:faf1:46af:fa09/64 scope link
valid_lft forever preferred_lft forever
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether b8:27:eb:01:2b:3f brd ff:ff:ff:ff:ff:ff
Mise à jour du Firmware
L’utilitaire rpi-update permet de mettre à jour le Firmware de la carte Raspberry.
sudo apt install rpi-update
Exécution de l’utilitaire pour réaliser la mise à jour :
sudo rpi-update
*** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
*** Performing self-update
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 13545 100 13545 0 0 18675 0 --:--:-- --:--:-- --:--:-- 18682
*** Relaunching after update
*** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
*** We're running for the first time
*** Backing up files (this will take a few minutes)
*** Backing up firmware
*** Backing up modules 4.14.98-v7+
#############################################################
WARNING: This update bumps to rpi-4.19.y linux tree
Be aware there could be compatibility issues with some drivers
Discussion here:
https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=224931
##############################################################
Would you like to proceed? (y/N)
*** Downloading specific firmware revision (this will take a few minutes)
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 168 0 168 0 0 387 0 --:--:-- --:--:-- --:--:-- 387
100 58.5M 100 58.5M 0 0 817k 0 0:01:13 0:01:13 --:--:-- 832k
*** Updating firmware
*** Updating kernel modules
*** depmod 4.19.37+
*** depmod 4.19.37-v7+
*** Updating VideoCore libraries
*** Using HardFP libraries
*** Updating SDK
*** Running ldconfig
*** Storing current firmware revision
*** Deleting downloaded files
*** Syncing changes to disk
*** If no errors appeared, your firmware was successfully updated to 18e0a0f9a31e7a3a47d9c4301c7705b980ab0516
*** A reboot is needed to activate the new firmware
Redémarrage du système :
sudo reboot
Mise à jour des paquets
sudo apt update && sudo apt -y upgrade
Mise à jour distribution Raspbian
sudo apt dist-upgrade
Paramétrage
Connexion pi/raspberry via SSH
ssh pi@192.168.0.41
Paramétrage
Accès configuration raspbian
sudo raspi-config
Wifi
2 Network Options Configure network settings
N2 Wi-fi Enter SSID and passphrase
Country FR
SSID YANN_2GEXT
Mot de passe
Locales
En cas d’erreur locale: Cannot set LC_CTYPE to default locale: No such file or directory , exécuter:
export LC_ALL=C
sudo dpkg-reconfigure locales
Paramètres régionaux
timedatectl
Local time: Sat 2019-05-04 15:09:49 CEST
Universal time: Sat 2019-05-04 13:09:49 UTC
RTC time: n/a
Time zone: Europe/Paris (CEST, +0200)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no
Clavier fr
sudo nano /etc/default/keyboard
# KEYBOARD CONFIGURATION FILE
# Consult the keyboard(5) manual page.
XKBMODEL="pc105"
XKBLAYOUT="fr"
XKBVARIANT=""
XKBOPTIONS=""
BACKSPACE="guess"
Utilisateur et root
Su raspbian , tous les utilisateurs qui appartiennent au groupe sudo ont les mêmes droits que root
id pi
uid=1000(pi) gid=1000(pi) groupes=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),101(input),108(netdev),999(spi),998(i2c),997(gpio)
Changer le mot de passe utilisateur et root
sudo passwd pi
sudo passwd root
hostname
hostnamectl
Static hostname: raspberrypi
Icon name: computer
Machine ID: 3451d71e19fb4ef787b592b6ada3cd77
Boot ID: 084b078d7ce84c60b084b10cc6a1536f
Operating System: Raspbian GNU/Linux 9 (stretch)
Kernel: Linux 4.14.80-v7+
Architecture: arm
Exécution script sur connexion SSH
Exécuter un fichier utilisateur nommé $HOME/.ssh/rc si présent
Pour tous les utilisateurs exécuter un fichier nommé /etc/ssh/sshrc si présent
Installer les utilitaires curl jq figlet git
sudo apt -y install curl jq figlet git
Le batch
mkdir -p ~/.ssh
nano ~/.ssh/rc
#!/bin/bash
#clear
PROCCOUNT=`ps -Afl | wc -l` # nombre de lignes
PROCCOUNT=`expr $PROCCOUNT - 5` # on ote les non concernées
GROUPZ=`users`
ipinfo=$(curl -s ipinfo.io) # info localisation format json
publicip=$(echo $ipinfo | jq -r '.ip') # extraction des données , installer préalablement "jq"
ville=$(echo $ipinfo | jq -r '.city')
pays=$(echo $ipinfo | jq -r '.country')
cpuname=`cat /proc/cpuinfo |grep 'model name' | cut -d: -f2 | sed -n 1p`
iplink=`ip link show |grep -m 1 "2:" | awk '{print $2}' | cut -d: -f1`
echo "\033[0m\033[1;31m"
figlet "`hostname --fqdn`"
echo "\033[0m
\033[1;35m \033[1;37mHostname \033[1;35m= \033[1;32m`hostname`
\033[1;35m \033[1;37mWired IpV4 \033[1;35m= \033[1;32m`ip addr show $iplink | grep 'inet\b' | awk '{print $2}' | cut -d/ -f1`
\033[1;35m \033[1;37mWired IpV6 \033[1;35m= \033[1;32m`ip addr show $iplink | grep -E 'inet6' |grep -E 'scope link' | awk '{print $2}' | cut -d/ -f1`
\033[1;35m \033[1;37mKernel \033[1;35m= \033[1;32m`uname -r`
\033[1;35m \033[1;37mDebian \033[1;35m= \033[1;32m`cat /etc/debian_version`
\033[1;35m \033[1;37mUptime \033[1;35m= \033[1;32m`uptime | sed 's/.*up ([^,]*), .*/1/' | sed -e 's/^[ \t]*//'`
\033[1;35m \033[1;37mCPU \033[1;35m= \033[1;32m`echo $cpuname`
\033[1;35m \033[1;37mMemory Use \033[1;35m= \033[1;32m`free -m | awk 'NR==2{printf "%s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }'`
\033[1;35m \033[1;37mUsername \033[1;35m= \033[1;32m`whoami`
\033[1;35m \033[1;37mSessions \033[1;35m= \033[1;32m`who | grep $USER | wc -l`
\033[1;35m \033[1;37mPublic IpV4 \033[1;35m= \033[1;32m`echo $publicip`
\033[1;35m \033[1;37mPublic IpV6 \033[1;35m= \033[1;32m`ip addr show $iplink | grep -m 1 'inet6\b' | awk '{print $2}' | cut -d/ -f1`
\033[0m"
df -h /
#curl fr.wttr.in/$ville?0
Effacer motd
sudo rm /etc/motd
Déconnexion puis connexion
SSH + Clés
sur l'ordinateur de bureau
Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) nommé xs35v2 pour une liaison SSH avec le serveur KVM.
ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/rpi3
Envoyer la clé publique sur le serveur KVM
scp ~/.ssh/rpi3.pub xsuser@192.168.0.45:/home/xsuser/
sur le Raspberry PI 3
Copier le contenu de la clé publique dans /home/$USER/.ssh/authorized_keys
$ cd ~
Sur le KVM ,créer un dossier .ssh
mkdir -p .ssh
cat /home/$USER/rpi3.pub >> /home/$USER/.ssh/authorized_keys
et donner les droits
chmod 600 /home/$USER/.ssh/authorized_keys
effacer le fichier de la clé
rm /home/$USER/xs35v2.pub
Modifier la configuration serveur SSH
sudo nano /etc/ssh/sshd_config
Modifier
Port = 55029 # si souhaité sinon 22
PasswordAuthentication no
Relancer openSSH
sudo systemctl restart ssh
Accès depuis le poste distant avec la clé privée
ssh -i ~/.ssh/rpi pi@192.168.0.41
IPV6
Adresse inet6 fe80::107e:c702:47df:3f78/64 scope link
La carte n’est joignable de l’internet que par son adresse IPV6
NextHop Freebox permet d’attribuer une adresse IPV6
Prefixe : 2a01:e34:ee6a:b275:://64
Next Hop: fe80::107e:c702:47df:3f78
Passerelle IPV6 Box : fe80::224:d4ff:fea6:aa20
Modifier interface réseau raspbian
sudo nano /etc/dhcpcd.conf # y ajouter ce qui suit
interface eth0
static ip6_address=2a01:e34:ee6a:b275::1/64
static routers=fe80::224:d4ff:fea6:aa20
static domain_name_servers=80.67.169.12 80.67.169.40 2a01:e00::1 2a01:e00::2
Redémarrez pour que les modifications prennent effet :
sudo reboot
Adresse publique IPV6 attribuée
[...]
inet6 2a01:e34:ee6a:b275::1/64 scope global noprefixroute
[...]
Parefeu (iptables)
iptables est normalement installé par défaut sur les serveurs.Dans le cas contraire
sudo apt install iptables # debian/ubuntu
Création script /usr/local/sbin/config_firewall pour le serveur
#!/bin/sh
###################
# IPv4 #
###################
# tout refuser par défaut
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT
# interface lo (loop) accessible
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# maintenir les connexions établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# accepter en entrée le ping (icmp), et les
# connexions sur les ports nécessaires.
iptables -A INPUT -p icmp --icmp-type echo-request -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p udp --dport 22 -j ACCEPT
# accepter en sortie le ping, les requêtes HTTP(S), DNS,
# et les connexions sur les ports nécessaires.
iptables -A OUTPUT -p icmp --icmp-type echo-request -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
#iptables -A OUTPUT -p tcp --dport xxxx -j ACCEPT
#iptables -A OUTPUT -p udp --dport xxxx -j ACCEPT
###################
# IPv6 #
###################
# tout refuser par défaut
ip6tables -t filter -P INPUT DROP
ip6tables -t filter -P FORWARD DROP
ip6tables -t filter -P OUTPUT ACCEPT
# interface lo (loop) accessible
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT
# maintenir les connexions établies
ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# NDP pour toute interface de type broadcast
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-solicitation -m hl --hl-eq 255 -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-advertisement -m hl --hl-eq 255 -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
# accepter en entrée le ping (icmpv6), les
# connexions entrantes déjà établies et les connexions sur les ports nécessaires.
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
ip6tables -A INPUT -p udp --dport 22 -j ACCEPT
# accepter en sortie le ping, les requêtes HTTP(S), DNS,
# et les connexions sur les ports nécessaires.
ip6tables -t filter -A OUTPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
ip6tables -A OUTPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A OUTPUT -p tcp --dport 443 -j ACCEPT
ip6tables -A OUTPUT -p udp --dport 53 -j ACCEPT
ip6tables -A OUTPUT -p tcp --dport 53 -j ACCEPT
#ip6tables -A OUTPUT -p tcp --dport xxxx -j ACCEPT
#ip6tables -A OUTPUT -p udp --dport xxxx -j ACCEPT
Rendre exécutable et restreindre les droits sur le script
sudo chmod +x /usr/local/sbin/config_firewall
sudo chown root:root /usr/local/sbin/config_firewall
sudo chmod 740 /usr/local/sbin/config_firewall
Exécuter le script /usr/local/sbin/config_firewall
sudo /usr/local/sbin/config_firewall
Installer le paquet iptables-persistent pour définir des règles persistantes après un reboot.
sudo apt install iptables-persistent
Pendant, l’installation du paquet, on vous est demande si vous souhaitez que les règles actuellement en cours d’utilisation soient enregistrées dans le fichier .
Valider Yes/Oui, pour IPV4 comme pour IPV6.
Horloge externe (RTC) pour Raspberry Pi
Module I2C RTC DS1307 (Real Time Clock)
Liaisons entre le connecteur GPIO de la carte Raspberry Pi et le module I2C Real Time Clock DS1307 (5v) ou DS1338 (3.3v)
Le module utilisé est alimenté en 3.3v
RPI | Couleur | Module RTC | RPI désignation |
---|---|---|---|
1 | Rouge -> | Vcc | +3.3v |
3 | Blanc -> | SDA | GPIO02 (SDA1) |
5 | Jaune -> | SCL | GPIO03 (SCL1) |
9 | Noir -> | GND | GND |
ATTENTION : Utilisation du bus i2c-2
i2c
Activer le port i2c
sudo raspi-config
Dans le menu Interfacing Options -> P5 I2C il faut rendre actif le port i2c.
Simple vérification
dmesg |grep i2c
[ 2115.700449] i2c /dev entries driver
Nous allons vérifier que le module RTC est bien détecté
Installation outil de test et vérification bus i2c
sudo apt -y install i2c-tools python-smbus
Les bus détectés
sudo i2cdetect -l
i2c-1 i2c bcm2835 I2C adapter I2C adapter
Le module est connecté sur le bus 1
sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
On voit que le RPi a détecté un composant à l’adresse 0x68 qui d’après la doc constructeur est l’adresse par défaut.Il faut un élément logiciel pour le contrôler (pilote).
Chargement Module RTC ds1307
On va ajouter la gestion du module en éditant le fichier de configuration de boot.
sudo nano /boot/config.txt
Auquel on va ajouter les lignes suivantes à la fin du fichier :
# Module RTC
dtoverlay=i2c-rtc,ds1307
A ce stade, vous devez redémarrez votre système :
sudo reboot
Une fois le système de nouveau actif, éxécuter de nouveau:
sudo i2cdetect -y 1
Vous devriez observer si le prise en charge de l’horloge est effective en obtenant les caractères UU à l’adresse 0X68
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Il faut désactiver l’horloge qui émule l’horloge hardware fake hwclock avec les instructions suivantes
sudo apt -y remove fake-hwclock
sudo update-rc.d -f fake-hwclock remove
Exécutez la commande suivante pour éditer le script RTC original.
sudo nano /lib/udev/hwclock-set
Trouvez et commentez les trois lignes suivantes en plaçant # en tête de ligne
if [ -e /run/systemd/system ] ; then
exit 0
fi
Commenter avec #
#if [ -e /run/systemd/system ] ; then
# exit 0
#fi
Synchronisation temps entre module Pi et RTC
Maintenant que notre module RTC est branché et que Raspbian et le Raspberry Pi sont correctement configurés, nous devons synchroniser l’heure avec notre module RTC. La raison en est que le temps fourni par un nouveau module RTC sera incorrect.
-
Vous pouvez lire l’heure directement à partir du module RTC en exécutant la commande suivante si vous l’essayez maintenant, vous remarquerez qu’elle est actuellement très loin de notre temps réel actuel.
sudo hwclock -D -r
-
Maintenant avant d’aller de l’avant et de synchroniser l’heure correcte de notre Raspberry Pi à notre module RTC, nous devons exécuter la commande suivante pour nous assurer que l’heure sur le Raspberry Pi est bien correcte, assurez-vous d’être connecté à une connexion Wi-Fi ou Ethernet.
date
-
Si l’heure affichée par la commande date est correcte, nous pouvons lancer la commande suivante sur votre Raspberry Pi. Cette commande permet d’écrire l’heure entre le Raspberry Pi et le module RTC.
sudo hwclock -w
-
Maintenant, si vous lisez à nouveau l’heure directement depuis le module RTC, vous remarquerez qu’elle a été modifiée à la même heure que celle à laquelle votre Raspberry Pi a été réglé. Vous ne devriez jamais avoir à réexécuter la commande précédente si vous avez une pile dans le module RTC.
sudo hwclock -r
Vous disposez d’un module RTC entièrement opérationnel qui maintient activement l’heure de votre Raspberry Pi à l’heure correcte, même hors connexion Internet.
Ecran tactile (résistif) TFT LCD 2.8” serial SPI
Raspberry PI/TouchScreen SPI TFT LCD 2.8p (ILI9341)
RPI | Aff. | Couleur | RPI désignation |
---|---|---|---|
37 | T_IRQ | Jaune | GPIO_GEN0 GPIO26 |
T_D0 relié avec MISO | |||
T_DIN relié avec MOSI | |||
26 | T_CS (CS1) | Blanc | SPI_CE1 GPIO7 |
T_CLK relié avec SCLK | |||
21 | MISO | Jaune | SPI_MISO GPIO9 |
16 | Led | Orange | GPIO_GEN4 GPIO23 |
23 | SCLK | Violet | SPI_CLK GPIO11 |
19 | MOSI | Bleu | SPI_MOSI GPIO10 |
18 | D/C | Gris | GPIO_GEN5 GPIO24 |
22 | Reset | Brun | GPIO25 |
24 | CS | Vert | SPI_CE0 GPIO8 |
25 | GND | Noir | - alimentation |
17 | +3.3v/Vcc | Rouge | + alimentation |
Features:
- Compatible with Raspberry Pi B+ and B
- Supports Raspbian Operating system
- 65K colors and 320x240 Pixel Resolution
- Powered directly off Raspberry Pi
- Display full GUI output / primary output
- High Speed 48MHz SPI connection
- 25 Frames per second
- Integrated ILI9341 TFT LCD Driver
- Integrated 4-wire Resistive Touch Panel and XPT2046 Driver
Activation du module SPI
sudo nano /boot/config.txt
Enlever le commentaire (#) sur la ligne suivante du fichier
dtparam=spi=on Redémarrer
sudo reboot
Vérifier chargement module SPI : ls /dev
SPI est actif si /dev/spidev0.1
existe.
Il y a 2 méthodes pour l’affichage:
- Utilisation de python
- Utilisation du module adafruit
Utilisation de python
La fiche technique de l’ili9341 SPI LCD est facilement disponible et vous pouvez l’utiliser pour créer votre pilote python. On utilise le pilote écrit par Brian Lavery qui peut être téléchargé sur son github.
ATTENTION ,si méthode A utilisé, il faut revenir à l’état initial
- Commenter les 2 lignes du fichier /etc/rc.local en ajoutant le caractère # en début de chaque ligne :
#exec /sbin/modprobe fbtft_device name=adafruit28 speed=48000000 rotate=90 verbose=1
#sudo sh -c "TERM=linux setterm -blank 0 >/dev/tty0" # pour éviter le passage en veille
- Oter les 2 commandes en fin de ligne du fichier /boot/cmdline.txt :
fbcon=map:10 fbcon=font:VGA8x8
- Modifier le fichier /boot/config.txt , commenter la ligne (ajout # en début de ligne) :
#dtoverlay=ads7846,cs=1,penirq=26,xmin=200,xmax=3900,ymin=200,ymax=3900,xohms=60,pmax=255,swapxy
Vérifier ou modifier le paramètre SPI:dtparam=spi=on
Ajouter au fichier /boot/config.txt :dtoverlay=spi1-1cs
Ceci n’activera qu’une seule ligne CS , vous pouvez en avoir jusqu’à 3 sur le bus SPI1. Pour les options voir /boot/overlays/README - Redémarrer :
sudo reboot
Vérifier
ls /dev/spi*
/dev/spidev0.0 /dev/spidev0.1 /dev/spidev1.0
Python 2 et 3 + librairies
Installer python 2 et 3, pip et les dépendances de pillow
sudo apt -y install python-pip libjpeg62 libjpeg62-dev zlib1g-dev libfreetype6-dev liblcms1-dev python-dev python3-dev python-spidev python3-spidev
Installer SPIDEV (py-spidev)
Télécharger’py-spidev’ et le compiler prêt à l’emploi :
sudo apt update
sudo apt upgrade
cd ~
#git clone https://github.com/doceme/py-spidev.git
git clone https://github.com/Gadgetoid/py-spidev.git
cd py-spidev
#make
#sudo make install
sudo python setup.py install
sudo python3 setup.py install
Vous devriez maintenant être prêt à communiquer avec des cartes d’extension utilisant leurs propres bibliothèques (par exemple PiFace) ou d’autres périphériques SPI (par exemple le MCP3008 ADC).
ili9341 SPI Raspberry (affichage uniquement)
Connexions ili9341 SPI Raspberry Pi
RPI Pin | Aff. ili9341 | Couleur | RPI désignation |
---|---|---|---|
37 | PEN T_IRQ | Jaune | GPIO_GEN0 (GPIO26) |
T_D0 relié avec MISO | |||
T_DIN relié avec MOSI | |||
26 | T_CS (CS1) | Blanc | SPI0_CE1 (GPIO7) |
T_CLK relié avec SCLK | |||
21 | SDO(MISO) | Jaune | SPI0_MISO (GPIO9) |
16 | Led | Orange | GPIO_GEN4 GPIO23 |
23 | SCLK | Violet | SPI0_CLK (GPIO11) |
19 | SDI(MOSI) | Bleu | SPI0_MOSI (GPIO10) |
18 | D/C | Gris | GPIO_GEN5 (GPIO24) |
22 | Reset | Brun | (GPIO25) |
24 | CS | Vert | SPI_CE0 (GPIO8) |
25 | GND | Noir | - alimentation |
17 | +3.3v/Vcc | Rouge | + alimentation |
Pour une utilisation sans “led” et “rst”:
Relier rst (brun) de l’afficheur TFT LCD ili9341 au +3.3V
Relier led (orange) de l’afficheur TFT LCD ili9341 au +3.3V
Installer PIL Pillow
sudo pip install Pillow
[...]
Successfully installed Pillow-5.3.0
Démonstration
Une fois que vous avez câblé l’écran LCD ili9341 sur le Pi et que vous avez installé toutes les conditions préalables, cloner le fork du git de Brian Lavery dans votre espace utilisateur sur le Pi
cd ~
git clone https://gitlab.cinay.xyz/spm/rpi-lib-tft-lcd.git
cd rpi-lib-tft-lcd
et exécutez la commande suivante :
python BTS_SPI_LCD_DEMO.py
S’il fonctionne correctement, vous verrez sur le terminal SSH :
Loading image...
Drawing image
Test a long para of text, auto-wrapped into screen lines.
show a font in giant letters
Loading image...
Drawing image
Test a long para of text, auto-wrapped into screen lines.
show a font in giant letters
Et sur l’écran TFT LCD, une séquence de couleur, textes et images …
Arrêt Ctrl + c
ili9341 Python écran tactile
Maintenant que vous avez un écran fonctionnel, il est temps de faire fonctionner l’écran tactile.
Le Raspberry Pi a 2 bus SPI, SPI0 et SPI1. SPI0 peut prendre en charge 2 appareils, nous pouvons donc également connecter la partie tactile à SPI0. La partie Touch est connecté sur SPI0 avec le SPI0_CE1 (SPI0_CE0 est utilisé pour l’affichage).
RPI Pin | Aff. ili9341 | Couleur | RPI désignation |
---|---|---|---|
37 | T_IRQ | Jaune | GPIO_GEN0 (GPIO26) |
T_D0 relié avec MISO -> SPI0_MISO (GPIO9) | |||
T_DIN relié avec MOSI -> SPI0_MOSI (GPIO10) | |||
26 | T_CS (CS1) | Blanc | SPI0_CE1 (GPIO7) |
T_CLK relié avec SCLK -> SPI0_CLK (GPIO11) |
Lancer la calibration écran tactile
cd ~/rpi-lib-tft-lcd
python example-tft24T-touch-calibration.py
Suivez les instructions sur votre terminal SSH et vous aurez besoin de votre stylet pour cela…
Une fois fait, vous verrez quelques chiffres d’étalonnage, notez-les. Vous devrez les entrer dans le fichier lib_tft24T.py.
pygame
Installer python3-pip
sudo apt install python3-pip
Installer pygame
sudo apt install python3-pygame
Activer le module
sudo /sbin/modprobe fbtft_device name=adafruit28 speed=48000000 rotate=90 verbose=1
Test test1.py
cd ~/tutorials/pygamelcd/
'''
Created on Jul 12, 2014
@author: jeremyblythe
'''
import pygame
import os
from time import sleep
os.putenv('SDL_FBDEV', '/dev/fb1')
pygame.init()
lcd = pygame.display.set_mode((320, 240))
lcd.fill((255,0,0))
pygame.display.update()
sleep(1)
pygame.mouse.set_visible(False)
lcd.fill((0,0,0))
Exécution
sudo python3 test1.py
Nginx PHP7 MariaDB
Domaine et certificats
_ _ _
___ _ _ ___ ___| |_| (_)_ __ ___ __ ___ _ ____
/ _ \| | | |/ _ \/ __| __| | | '_ \ / _ \ \ \/ / | | |_ /
| (_) | |_| | __/\__ \ |_| | | | | | __/_ > <| |_| |/ /
\___/ \__,_|\___||___/\__|_|_|_| |_|\___(_)_/\_\\__, /___|
|___/
Installation client acme
cd ~
sudo -s # en mode super utilisateur
apt install netcat # prérequis
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install # --nocron
cd ..
rm -rf acme.sh/
le client est installé dans /root/.acme.sh/
Utilisation clé et code secret avec API OVH
OVH : Création de clé API application
How to use OVH domain api
En mode su , on exporte en local la clé et le code
export OVH_AK="REC23OMyBq2FZrLN"
export OVH_AS="32eqGDOrrF6b1Smj4kFgQdv1zX2DW7US"
Génération des certificats
/root/.acme.sh/acme.sh --dns dns_ovh --issue --keylength ec-384 -d ouestline.xyz -d *.ouestline.xyz
[mardi 20 novembre 2018, 21:18:22 (UTC+0100)] Your cert is in /root/.acme.sh/ouestline.xyz_ecc/ouestline.xyz.cer
[mardi 20 novembre 2018, 21:18:22 (UTC+0100)] Your cert key is in /root/.acme.sh/ouestline.xyz_ecc/ouestline.xyz.key
[mardi 20 novembre 2018, 21:18:22 (UTC+0100)] The intermediate CA cert is in /root/.acme.sh/ouestline.xyz_ecc/ca.cer
[mardi 20 novembre 2018, 21:18:22 (UTC+0100)] And the full chain certs is there: /root/.acme.sh/ouestline.xyz_ecc/fullchain.cer
Créer des liens
sudo ln -s /root/.acme.sh/ouestline.xyz_ecc/fullchain.cer /etc/ssl/private/ouestline.xyz.fullchain.cer.pem;
sudo ln -s /root/.acme.sh/ouestline.xyz_ecc/ouestline.xyz.key /etc/ssl/private/ouestline.xyz.key.pem;
Le fichier de configuration /etc/nginx/conf.d/default.conf
server {
listen 80;
listen [::]:80;
## redirect http to https ##
server_name ouestline.xyz *.ouestline.xyz;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name ouestline.xyz;
root /var/www/ ;
ssl_certificate /etc/ssl/private/ouestline.xyz.fullchain.cer.pem;
ssl_certificate_key /etc/ssl/private/ouestline.xyz.key.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
# As suggested by https://cipherli.st/
ssl_ecdh_curve secp384r1;
ssl_prefer_server_ciphers on;
# Ciphers with intermediate compatibility
#----------------------------------------
# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=nginx-1.6.2&openssl=1.0.1t&hsts=yes&profile=intermediate
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
# Ciphers with modern compatibility
#---------------------------------
# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=nginx-1.6.2&openssl=1.0.1t&hsts=yes&profile=modern
# Uncomment the following to use modern ciphers, but remove compatibility with some old clients (android < 5.0, Internet Explorer < 10, ...)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS13+AESGCM+AES128:EECDH+AESGCM:EECDH+CHACHA20:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
# Follows the Web Security Directives from the Mozilla Dev Lab and the Mozilla Obervatory + Partners
# https://wiki.mozilla.org/Security/Guidelines/Web_Security
# https://observatory.mozilla.org/
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header Content-Security-Policy "upgrade-insecure-requests";
add_header Content-Security-Policy-Report-Only "default-src https: data: 'unsafe-inline' 'unsafe-eval'";
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header X-Frame-Options "SAMEORIGIN";
index index.php index.html;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.2-fpm.sock; # PHP7.2
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
access_log /var/log/nginx/ouestline.xyz-access.log;
error_log /var/log/nginx/ouestline.xyz-error.log;
}
Vérifier et relancer nginx
sudo nginx -t
sudo systemctl restart nginx
Lien https://ouestline.xyz
Vérifier la validité TLSV1.3 sur le navigateur