CMS minimal
editeur VI (vi ail)

[ /  ^ ]

Raspberry Pi

ordinateur minuscule et frugal

carte memoire       30/10/2018
etcher       28/12/2018
sans hdmi       08/06/2018
sans reseau       04/04/2018
ethernet usb       17/10/2018
vnc       19/02/2018
temperature       15/03/2018
webcam       03/03/2018
reverse proxy       19/02/2018
wifi invisible       19/02/2018
kali       09/10/2018
disque       22/05/2019
domotique       15/03/2018

# Sans carte mémoire ou avec une carte ne contenant pas un système correcte, le raspberry3 se contente d'allumer un diode rouge, il ne réveille même pas l'écran.
# Le raspberry zero lui n'allume même pas de diode
# avec du nouveau materiel par exemple le 3 B+ sorti en mars 2018, il faut impérativement la dernière version du système:
https://www.raspberrypi.org/downloads/noobs
# paradoxalement, la version proposée pour raspberrypi zero necessite une connection réseau
# mieux vaut éviter la version sans WiFi si on ne dispose pas d'un autre raspberrypi pour prototyper les cartes mémoires
# Pour sauvegarder une carte sur un PC (unix):
	# pour une carte de 8G il faut 3,2G de disque
	cat /proc/partitions  # pour repérer le nom sdb ou sdc ..... sdn
	sudo dd bs=4M status=progress conv=fsync if=/dev/sdn | gzip > raspberrypi.img.z
# cela peut aussi servire à sauvegarder tout le système d'un raspberrypi en cours d'installation
# Pour fabriquer une nouvelle carte :
	# ATTENTION débrancher le maximum de périphériques de stockage pour limiter les risques d'erreur
	gzip -cd raspberrypi.img | sudo dd bs=4M status=progress conv=fsync of=/dev/sdn 
	# la partition principale sera étendue lors d'un reboot automatique au premier démarrage pour utiliser toute la carte
	# donc éventuellement ajouter une partition avant # sudo fdisk /dev/sdn

# avant dinstaller d'autres logiciels, il est necessaire de mettre à jour le sysème:
	sudo apt-get update
	sudo apt-get upgrade

alternative pour ceux qui ne veulent pas utiliser la commande dd ou pire, sont sous window$

# À défaut d'écran ou de câble HDMI, on peut préparer la carte mémoire pour que le système ouvre un accès réseau dès le boot
	# sur un oridinateur unix y compris un autre raspberrypi
	# inserer la carte mémoire dans un lecteur
	# la carte contients plusieurs partitions, c'est "root" qu'il faut monter (/dev/sdn7 pour les intimes)
	cd /media/*/root/etc
	# pour lancer un serveur SSH au demarrage :
	sudo sed -i "s!exit 0!/usr/sbin/sshd;exit 0!" rc.local
	# il y a aussi l'astuce de mettre un fichier ssh dans /media/*/boot mais c'est particulier aux raspberrypi
	# si ce raspberrypi n'est pas le seul du réseau il peut être judicieux renommer celui-ci:
	for fichier in hosts hostname; do sed -i "s/raspberrypi/rasp-$(date +%Y-%m-%d-%Hh%M)/" $fichier; done
	# l'idéal pour la sécurité serait d'installer des clés et de supprimer le mot de passe du compte "pi"
	cd # important sinon impossible de démonter la carte

	netstat -rn   # pour voir à quoi ressemblent le réseau
	nmap -sn 192.168.1.0/24  # pour lister toutes les adresses

	# il faut démonter la carte mémoire et l'inserrer dans le raspberrypi
	# brancher le raspberrypi à un calbe ethernet relié au réseau
	nmap -sn 192.168.1.0/24  # pour detecter le petit nouveau XX

	# sur un PC, connecter rapidement pour changer le mot de passe
	ssh pi@192.168.1.XX   # mot de passe raspberry
	# un message est afficher pour signaler que c'est une première
	passwd # changer le mot de passe

	# pour éviter les attaques par force brute sur le raspberrypi

	sudo apt-get install fail2ban
	# par défaut, le raspberry fera le mort face à l'hote pendant 600 secondes après 5 erreur

	sudo apt-get install denyhosts
	# par défaut reffuse definitivement les connections d'un hote après une ciquantaine d'erreurs
	# c'est moins bien mais c'est plus simple

# il est possible de préparer le WiFi sur la carte mémoire
# même si celui ci est prétendument caché ( le poin t d'accès ne diffuse pas son identifiant ( SSID ))
# mais le fichier de configuration des acces WiFi est écrasé lors du premier démarage du raspberry avec la nouvelle carte mémoire
# un détour consiste à faire mettre à jour le fichier au démarage et ajouter les lignes suivantes dans /media/*/root/etc/rc.local
# par exemple sur une Livebox Orange :
cat > /media/*/root/etc/etc/wpa_supplicant/wpa_supplicant.conf <<FIN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
	ssid="Livebox-XXXX"
	psk="XXXXXXXXXXXXXXXXXXXXXXXXXX"
	key_mgmt=WPA-PSK
	}



# ou si seulement un câble ethernet entre un autre PC et le raspberry
	# livré à lui même il prend une adresse 169.254.0.0/16
	# soit 65634 possibilités
	nmap -sn 169.254.0.0/16   # ça peut prendre des jours
	# une solution vite fait mal fait serait de fixer l'adresse au boot /etc/rc.local
	ifconfig eth0 169.254.0.1/16
	# il serait plus "propre" d'aller modifier dans /etc/network/interfaces
	# ATTENTION il faut impérativement enlever cette ligne avant branchement sur un réseau filaire
	# si le PC comporte aussi une carte WiFi,
	# il est possible que le réseau 169.254.0.0/16 lui soit affecté,
	# il faut alors en prendre un autre par exemple
	ifconfig eth0 192.168.2.10/24
	# sur le PC l'interface ne s'appelle pas forcement "eth0"
FIN

# à défaut de liaison réseau sur le raspberrypi zero, il est facile de communiquer via le câble USB
	# bénéfice supplémentaire, cela permet de se passer d'alimentation, malheureusement le port libéré n'est pas utilisable.

	# sur un PC même window$ monter la partition boot de la carte mémoire
	# car cette partition est en "fat32"
	echo "dtoverlay=dwc2" >> /media/*/boot/config.txt;
	sed -i 's/rootwait/rootwait modules-load=dwc2,g_ether/' /media/*/boot/cmdline.txt;
	touch /media/*/boot/ssh # pour que le serveur ssh soit lancé par défaut
	# le fichier créé ci-dessus est effacé au boot, puis le service est activé "definitivement"
	# pour fixer l'adresse:
	sudo bash
	exec echo -e "interface usb0\nstatic ip_address=192.168.2.10/24" >> /media/*/root/etc/dhcpcd.conf
	# la commande ifconfig n'affiche l'adresse qu'après un connexion physique avec le PC

	# sur le PC il faut lancer la commande ifconfig pour voir le nom de l'interface supplémentaire
	# comme la configuration ne tiens pas au début :
	while :; do ifconfig enp0s20u7 | grep 192.168.2.20 || sudo ifconfig enp0s20u7 192.168.2.20/24; sleep 2;done

	# on dispose alors d'une clé USB "intéligente"
	# par exemple pour contenir des scripts shell encodés avec shc
	# le source du script sera inaccessible et si quelqu'un copie le script il ne poura pas l'executé sur un autre système.
	# en installant ecryptfs on peut protéger le contenu de cette "clé"
	# pour cela il faut déconnecter l'utilisateur dont on veut chiffrer le repertoire et se connecter "root"
	apt-get install ecryptfs-utils
	apt-get install lsof
	ecryptfsd
	ecryptfs-migrate-home -u pi
	# par la suite il faut que l'utilsateur se soit connecter avec son mot de passe pour que les données chiffrées soient accessible
	# en mettant les clés publique dans le repertoire chiffré, les connections suivantes peuvent se faire sans mot de passe

# pour acceder à la console graphique via le reseau
	# le serveur RealVnc est installé , pour le lancer :
	vncserver
	# il faut aller chercher le client RealVNC
	ssh pi@raspberrypi DISPLAY=:0.0 vncserver-x11
	# dans une autre fenêtre
	vnciewer raspberrypi




# ligne de commande pour connaitre la température
	/opt/vc/bin/vcgencmd measure_temp

# Quelques programmes légers pour afficher ce que voit une webcam branchée sur un port USB :
	sudo apt-get install mplayer
	mplayer tv:// -tv device=/dev/video0
	# sur une autre machine du réseau local option -X pour le déport d'affichage graphique
	# en supposant que le raspberry pi a pris l'adresse 192.168.1.51
	ssh -X pi@192.168.1.51 mplayer tv:// -tv device=/dev/video0

	# pour prendre une photo
	fswebcam /tmp/photo.jpg

	# pour envoyer un flux video
	nohup motion &     # & pour mettre en tâche de fond et nohup pour que ça reste actif après deconnexion.
	# visualiser soit avec un navigateur soit :
	vlc http://127.0.0.1:8081   # par defaut ne fonction qu'en local
	# sinon modifier le fichier /etc/motion/motion.conf
	# ou beaucoup mieux installer un serveur web
	# mettre un reverse proxy avec autentification

De nombreux équipements connectés au réseau local embarquent un petit serveur web rustique.
(imprimantes, camera IP ou même box internet)
Il ne serait pas sage de les mettre en accès libre sur internet.
Le Raspberry Pi peut au contraire gérer un serveur web Appache ou Nginx par exemple.
Il peut faire office de frontal grâce à la fonction "reverse proxy" ( mandataire inverse ).
et ajouter une demande de mot de passe.

# il semble qu'il n'est pas été prévu d'entrer les paramètres d'un point d'accès WiFi qui ne diffuse pas son identifiant.
	# cepeandant il est possible d'intaller wpa_gui :
	sudo apt-get install wpagui
	wpa_gui
	# ci dessous ce qu'il faut pour une Livebox d'Orange

Un distribution dédiée aux tests d'intrusion : kali.org
page de téléchargement https://www.offensive-security.com/kali-linux-arm-images
plus standard que raspian, elle utilise firefox et pour les musiciens permet d'intaller lilypond ( sudo apt-get update )
mot de passe de root : toor
# configuration du WiFi dans:
/etc/NetworkManager/system-connections/Livebox-XXXX
# pour installer tous les logiciels qui testnet la sécurité
apt-get install kali-linux-full

# sur Raspbian GNU/Linux 9 (stretch), procédure de déménagement du système de la carte mémoire vers un disque
# les gars de yunohost on simplifié le partitionnement, remplacer  les numéros de périphériques 6/7 par 1/2

# arrêter le raspberrypi et brancher la carte sur un PC disposant d'une place disque équivalante.
# copier la carte sur un fichier et vérifier qu'il n'y a pas de message d'erreur
# ATTENTION, verifier le nom du périphérique correspondant à la carte mémoire et remplacer sdn7 par sdb7 ou sdc7 ....
sudo dd bs=4M status=progress conv=fsync if=/dev/sdn7  of=systeme_perso.img

# si on n'a que la moitié de la taille de la carte de libre sur le disque, mais c'est plus lent :
### sudo dd bs=4M status=progress conv=fsync  if=/dev/sdn7  | gzip > systeme_perso.img.z

# ENLEVER LA CARTE pour éviter les risques d'effacement

# brancher le disque sur le PC, et installer deux partitions
# en premier celle pour le système et les données
# puis une petite partition pour le swap en fin de disque ~ 300Mo
# inutile de formater la partition système car elle sera écrasée par la copie
# formater la partition de swap
sudo mkswap /dev/sdn2

# recopier le système sur le disque :
sudo dd bs=4M conv=fsync status=progress if=systeme_perso.img of=/dev/sdn1 
# ou manque de place
### gzip -cd systeme_perso.img | sudo dd bs=4M status=progress conv=fsync of=/dev/sdn1 

# retailler le système de fichier pour occuper toute la place
# ( les fénéants téméraires peuvent laisser le raspberry le faire au prochain démarage )
sudo fsck.ext4 -f /dev/sdn1
sudo resize2fs /dev/sdn1

# monter le disque, cela permet de vérifier que la partition est correcte, taille ...
mkdir /tmp/disque; sudo mount /dev/sdn1 /tmp/disque

# modfier le fichier de montage dans /tmp/disque/etc/fstab
sudo nano /tmp/disque/etc/fstab

# mettre en commentaire : ###/dev/mmcblk0p7  /               ext4    defaults,noatime  0       1
# et ajouter deux lignes :
/dev/sda1  /               ext4    defaults,noatime  0       1
# ajouter la ligne :
/dev/sda2       none            swap    sw                0       0

# supprimer le lancement du swap dans un fichier
sudo rm /tmp/disque/etc/rc?.d/S??dphys-swapfile

# eventuellement pour le style, mettre la partition /boot en lecture seule (,ro) :
## /dev/mmcblk0p6  /boot           vfat    defaults          0       2
   /dev/mmcblk0p6  /boot           vfat    defaults,ro       0       2

# démonter le disque et le débrancher
sudo umount /tmp/disque

# monter la plus petite carte mémoire contenant un système pour raspberry
# inutile d'utiliser sudo car la partition boot est en fat ( window$ donc aucune protection )
cd /media/*/boot
cp -a cmdline.txt cmdline.txt.ref
nano cmdline.txt
# remplacer root=/dev/mmcblk0p7 par root=/dev/sda1

# quelques liens concernant la domotique
	https://home-assistant.io/hassio
	https://prota.info/prota/pi
	http://www.instructables.com/id/IFTTT-Raspberry-Pi-Prota-OS-for-home-automation
	http://mosquitto.org # serveur "broker" MQTT
envoyer un message au webmestre