Raspberry Pi 3B+
Raspberry Pi, ondertussen wel bekend bij de meeste
hobbyisten. Zelf ooit begonnen met de eerste versie, ben ik nu met de nieuwste versie 3B+ begonnen
(April 2018). Lees meer over de Raspberry Pi op mijn andere pagina's; deze pagina is over de
installatie (voor mezelf, als referentie).
Eerste stappen
Image op SD-card zetten
Het begint met het prepareren van de SD kaart (16 GB, hoewel dat wat overdreven groot is). Ik
heb op de raspberry Pi website een Raspberry image gedownload. Omdat ik de Raspberry vooral als een
server ingebouwd in de meterkast wil gebruiken, hoef ik niet een
volledige desktop-omgeving te hebben. Ben dus gegaan voor de Raspbian Stretch Lite gegaan (versie
2018-04-18), een voor de Raspberry aangepaste versie van Debian Stretch. ZIP gedownload en
uitgepakt als '2018-04-18-raspbian-stretch-lite.img ' in een tijdelijke map (bestand
van 1.9 GByte).
Omdat ik bij een werkend systeem ook een backup van de SDcard wil maken, en 16 GB wel erg veel
is, is het handig als de inhoud goed comprimeerbaar is. Ik vul daarom eerst de SDcard met nullen,
en schrijf dan pas het image er op (wat tenslotte slechts een gedeelte van de kaart in beslag
neemt).
sudo dd bs=4M if=/dev/zero of=/dev/mmcblk0 ; # 10.7 MB/s, dus
25 minuten...
sudo dd bs=4M if=2018-04-18-raspbian-stretch-lite.img of=/dev/mmcblk0
sudo sync
sudo dd bs=4M count=500 if=/dev/mmcblk0 of=readback.img
sudo truncate --reference 2018-04-18-raspbian-stretch-lite.img readback.img
md5sum *.img ; # beiden 737d1ace747da6fbb8bff02833de3251
De Raspberry, met links Ethernet en USB-stick,
boven USB voeding, en onder eigen extensieprint
met fan-control, shutdown-knop en I2C sensor.
Opstarten en bijwerken
SD card in de Raspberry, netwerkkabel er in, een goede 5 Volt voeding er op (2A minimaal wordt
aanbevolen), en hij zou moeten starten. Neem ook een goed USB-kabeltje, goedkope kabeltjes zijn
vaak zo bezuinigd op koper dat de inwendige weerstand hoog is... Nu maar hopen dat'ie goed opstart
en me toe staat via SSH in te loggen (zonder toetsenbord en beeldscherm)...
Activity-LED gaat aan! Hoe kom je nu achter het IP-adres --> daarvoor gebruik ik de
Fing applicatie op Android; die maakt een mooie lijst van de IP adressen en MACs van alle
devices die op je lokale netwerk zijn aangesloten. En inderdaad, er duikt een nieuwe 'Raspberry Pi'
op, en een 'ping' geeft aan dat er iets werkt.
Maar helaas, SSH laat niets van zich horen. Even zoeken op internet: dat is inderdaad
sinds november afgelopen
jaar standaard uitgezet... je kan het aanzetten door een lege file genaamd 'ssh '
in de BOOT-partitie te zetten. Kaart weer in de laptop, file aanmaken, er terug in de Raspberry. En
nu lukt het inderdaad, 'ssh pi@192.xxx.xxx.xxx ' (met in plaats van de x'jes natuurlijk
het adres zoals gevonden met Fing) geeft me een Linux prompt pi@raspberrypi:~ $ . Yes! Nu SSH
permanent aanzetten met sudo raspi-config --> Interfaces -->
SSH --> Enable , en natuurlijk gelijk het wachtwoord wijzigen (ik zal
later ook mijn eigen accounts aanmaken, en het hele pi-account weggooien).
En natuurlijk: de eerste actie is altijd even zorgen dat de zaak up-to-date is (zie ook
'Raspberry updaten'): sudo apt-get update; sudo
apt-get upgrade : niets te doen, was dus nog allemaal up-to-date. Even opruimen: sudo
apt-get autoclean; sudo apt-get clean ; check met df hoe veel er vrij is. Dan even
sudo reboot . De huidige kernel is nu 4.14.34-v7+ #1110 (uname -a ).
Goed om ook even /var/log/syslog door te bladeren, om te checken of er nog dingen
fout gaan tijdens het booten. Zo geven bij mij WiFi (Disable WiFi if country not
set... , snap ik) and Bluetooth nog meldingen (Failed to start Configure Bluetooth
Modems connected by UART )...
Zorgen dat de hele SDcard in gebruik is (nu is nog maar 2 GByte van de 16 in gebruik). Dit kan
via sudo raspi-config --> Advanced options --> Expand
filesystem , en je kan vervolgens met het df commando zien of het gelukt is:
/dev/root is nu 15270256 blokken van 1K -> 16 Gbyte (met 8% in gebruik). Ook nog
eens meten wat de snelheid van de SD-card is, waren vroeger problemen mee.
Nog een setup-guide
Zie ook deze guide voor
het opzetten van een 'headless' raspberry: zonder monitor en toetsenbord. Ook inclusief aanzetten
van WiFi etc.
Hardware configuratie
Voeding, Temperatuur,
GPIO
Voeding: stroomgebruik in rust is nu 0.44 Ampere (bij 5.1 Volt). Temperatuur: sudo vcgencmd measure_temp -->
temp=46.1'C bij 21 graden kamertemperatuur en zonder kastje: toch maar een
koelvinnetje er op, scheelt een paar graden. De Ethernet/USB chip wordt zo te voelen zelfs nog wat
warmer, dus ook maar een... Bordje rechtop zetten voor betere airflow. Hier meer informatie over
beschikbare vcgencmd commando's. Om dit ook als
gewone gebruiker te kunnen doen moet je wat extra instellingen doen (en een
reset):
sudo echo 'SUBSYSTEM=="vchiq",GROUP="video",MODE="0660"' >
/etc/udev/rules.d/10-vchiq-permissions.rules
sudo usermod -a -G video kees; # mijzelf toevoegen aan de groep 'video'
# of check temp met cat /sys/class/thermal/thermal_zone0/temp; geeft
temperatuur*1000
Een kastje gemaakt van wat plaatjes acryl of perspex die ik nog had liggen, zie de foto. Ook nog
een ventilatortje gevonden, past er wel mooi bij. Ventilator is 5V/80mA, dus dat kan je niet direct
vanuit de Raspberry schakelen, met een extra transistor en wat weerstandjes is dit snel geregeld
(schema?). Hiervoor heb ik een simpel uitbreidingskaartje gemaakt van gaatjesprint (zie foto) die
via een flatcable aan de expansiepoort van de Rasberry zit. De transistor wordt aangestuurd via
GPIO4, zie mijn uitleg over command-line gebruik van
GPIO. Dit hoeft sinds de Jessie kernel niet meer als root; user is member van group
gpio .
kees@raspberrypi ~ # echo "4" >/sys/class/gpio/export; sleep 1
kees@raspberrypi ~ # echo "out" >/sys/class/gpio/gpio4/direction
kees@raspberrypi ~ # echo "1" >/sys/class/gpio/gpio4/value; #
ventilator gaat aan
kees@raspberrypi ~ # echo "0" >/sys/class/gpio/gpio4/value; # ventilator gaat weer
uit Hoeveel effect heeft dit? Bij het berekenen van de md5sum van
/dev/zero is een core 100% in gebruik ( top commando), met 0.65Ampere
stroomgebruik. Met 55.8°C was de temperatuur na 15 minuten nog niet stabiel, maar toch de fan
aangezet -> in een minuut naar ongeveer 37°C, en na 5 was het 34.3°C. Werkt dus wel (kan
misschien zelfs wel iets trager draaien). Een startup
scriptje gemaakt in /etc/rc.local (beter: sudo
crontab -e met @reboot ) dat regelmatig de temperatuur meet en zo de fan
beheert: aan bij 60 graden, uit bij 55 graden. Maar, moet zeggen tot nu toe is de ventilator niet
aangegaan (behalve bij testen met een lagere grens).
Naast de fanbesturing: ook nog een drukknop (witte knopje links) en rode LED aangesloten op
GPIO17 en GPIO18. De knop wil ik gebruiken om de Raspberry uit te kunnen zetten zonder dit via een
computer te hoeven doen; de LED voor bijvoorbeeld meldingen tijdens dat proces (is niet de
bedoeling dat bij een druk op de knop de zaak een shutdown doet en plat gaat; moet een 'code' worden).
Het ventilatorscript neemt ook dit voor zijn rekening. En nog wat uitbreidingsconnectors, voor I2C
(op foto met aangesloten temperatuursensor) en seriële poort.
Communicatie
Heb in ieder geval I²C en seriële poort nodig: zie de Raspberry configuratie-pagina. De
seriële poort (UART) is wat problematisch, de Raspberry heeft maar een 'echte', en die is standaard
in gebruik voor Bluetooth. Er is een tweede, de mini-UART, maar de baudrate daarvan wisselt met de
kloksnelheid, en als de Raspberry te warm wordt gaat de klok naar beneden -> je baudrate gaat de
soep in (zie ook de UART-documentatie op de
Raspberry site). Nu is hier gelukkig wel wat aan te doen, maar ideaal is het niet. Ik wissel de
twee UARTs om (BT gebruikt dan de mini-UART) zodat ik framing errors etc op de externe UART kan
gebruiken. Hiervoor is de device tree overlay pi3-miniuart-bt nodig, zie ook de
UART
configuratie-uitleg (hoefde geen kernel command line aan te passen etc). De seriële
configuratie is nu zo dat ttyAMA0 == serial0 de volledige UART is, en beschikbaar is
als GPIO-14 en -15 op de 40-pins connector.
kees@raspberrypi:~# ls -al /dev/ser*
lrwxrwxrwx 1 root root 7 mei 12 21:50 /dev/serial0 -> ttyAMA0
lrwxrwxrwx 1 root root 5 mei 12 21:50 /dev/serial1 -> ttyS0
minicom -b 9600 -o -c on -D /dev/serial0; # ^a x om te stoppen
Configureren met: sudo raspi-config , I²C aanzetten (en mijn LM75BD temperatuursensor aansluiten), ...
sudo apt-get install -y python-smbus i2c-tools
i2cdetect -l ; show lijst met I2C devices ; op raspberry3B+ de
/dev/i2c-1
sudo chmod o+rw /dev/i2c-1 ; maak hem beschikbaar voor gewone gebruikers;
nodig?
i2cget -y 1 0x48 0x00 ; dit leest mijn LM75BD uit
(temperatuursensor)
Software configuratie
User names etc
Nu wil ik 'kees ' heten, en niet 'pi '... Kan natuurlijk een nieuwe user
aanmaken, en de oude weggooien, maar kan ook de user 'pi ' renamen naar
'kees '. Dit gaat met het commando usermod, zoals ook hier uitgelegd. Ook
de group 'pi ' heb ik naar 'kees ' omgewerkt, met het commando groupmod. Maar helaas, dat gaat niet als je
vanuit 'pi ' ingelogd bent. Heb dus toch even een tijdelijke user
'keestemp ' aangemaakt, daarop ingelogd, en het daar vanuit gedaan... Let op, een
foutje is snel gemaakt, maar niet per se snel opgelost.
sudo adduser
keestemp
sudo adduser keestemp sudo
# nu uitloggen, en als 'keestemp' inloggen
sudo usermod -l kees -d /home/kees pi
groupmod -n kees pi
# nu kan je als 'kees' inloggen, en de sporen verwijderen
sudo deluser keestemp
sudo rm -r /home/keestemp
sudo adduser --uid 1010 --ingroup
users --disabled-login --shell /usr/sbin/nologin pi
sudo rm /etc/sudoers.d/010_pi-nopasswd
Kijk, een user 'kees ' met UID 1000 (first user)! Ondertussen begrepen dat een user
'pi ' (en home directory /home/pi ) toch door sommige tools verwacht wordt,
dus toch maar weer een aangemaakt (maar zonder daarop in te kunnen loggen).
Overzetten instellingen
Ik ga met het opzetten van het systeem een beetje 'smokkelen': ik kopieer de configuratie van
mijn oude Raspberry naar de nieuwe, om af te kijken (of configureren van bepaalde apps over te
kunnen slaan). Eerst een kopie maken van mijn home directory, en de /etc directory, op
de oude raspberry:
tar -cpjf OudeRaspberry.home.tar.bz2 /home/kees/ --exclude "/home/kees/temp/"
sudo tar -cpjf OudeRaspberry.etc.tar.bz2 /etc/
Deze kopie naar de nieuwe overhevelen (FileZilla en SFTP), en daar pak ik ze uit
in een tijdelijke map (/home/kees/temp ). Ik overschrijf dus niet de bestaande
/etc en /home/kees ! Ik kan nu selectief stukjes uit het archief kopieren
naar waar ik ze wil hebben.
mkdir temp; cd temp; tar -xpvjf OudeRaspberry.home.tar.bz2; tar -xpvjf
OudeRaspberry.etc.tar.bz2
Basic Linux config
Enkele basis-instellingen voor de Raspberry, overgenomen uit mijn eerdere configuraties...
Instellen grotere swap file, aanpassen gebruik SD card, etc.
sudo apt-get install screen anacron
sudo nano /etc/dphys-swapfile;
# en zet CONF_SWAPSIZE=1000 (1 Gbyte swap file op SD)
sudo mkdir /mnt/ramdisk; sudo mkdir /mnt/data; sudo chmod 777 /mnt/ramdisk /mnt/data
sudo nano /etc/fstab; # zie opties hieronder voor '/', ramdisk, en USB
stick
sudo nano /etc/sysctl.conf; # zie opties
hieronder, aantal systeemconfiguratieparameters
sudo nano .bashrc; # en ~/scripts toevoegen aan $PATH, etc
sudo apt-get install libcanberra-gtk-module leafpad; # en enable ForwardX11 in /etc/ssh/ssh_config
# Start op de computer in ssh leafpad met
DISPLAY=localhost:10.0 leafpad <filename>
# of uitgebreider: install xfe file manager, bevat ook xfwrite editor,
xfimage jpeg displayer
De instellingen van /etc/fstab zoals hierboven bijgewerkt (/mnt/data
voor het testen van de SAMBA server, nu even een USB stick maar wordt later vervangen door de echte
hard disk). Voor een langere levensduur noatime en andere parameters
aangepast zodat er niet onnodig veel naar de SD geschreven wordt. Zal ik ook
/tmp naar ram verhuizen (in plaats van een aparte ramdisk), op mijn oude systeem is op
/tmp en /var/tmp normaal minder dan 100KByte in gebruik, maar ik weet
niet het piek-gebruik; /var/log is 5 Mbyte. Zie ook /etc/default/tmpfs .
In het kort:
PARTUUID=9427c403-02
/ ext4
defaults,noatime,commit=120,errors=remount-ro 0 1
tmpfs
/mnt/ramdisk tmpfs defaults,noatime,nosuid,mode=0777,size=20m
0 0
/dev/disk/by-label/data /mnt/data ext4
noexec,noatime,nofail,errors=remount-ro,commit=36000 0 0
# tmpfs /tmp tmpfs defaults,noatime,nosuid,size=100m 0 0
# tmpfs /var/tmp tmpfs nodev,nosuid,size=50m 0 0
# tmpfs /var/log tmpfs defaults,noatime,nosuid,mode=0755,size=100m 0 0
De /etc/sysctl aanpassingen, van alles wat met name security). De configuratie is
standaard al zo ingesteld dat Raspbian minimaal swapt, zie /etc/sysctl.conf :
vm.swappiness=1 . Ik heb dit naar 10 verhoogd; geheugen dat echt weinig wordt gebruikt
mag best naar swap; en na een aantal dagen draaien als file server is er nog steeds maar zo'n 90 kB
in gebruik (zie swapon -s), verwaarloosbaar dus. Forwearding aangezet: is later nodig voor
de OpenVPN server. Reload met sudo sysctl --system :
vm.swappiness=10
vm.min_free_kbytes=16384
net.ipv4.ip_forward=1
kernel.sysrq=0
# See https://www.kernel.org/doc/Documentation/sysctl/fs.txt
fs.protected_hardlinks=0
fs.protected_symlinks=0
Security
De basis security: inloggen via SSH met een public key, opzetten van de firewall (met mijn configuratie-script overgehaald van de oude
Raspberry) etc.
diff /etc/ssh/sshd_config etc/sshd_config; sudo nano /etc/ssh/sshd_config;
# en werk bij waar nodig
sudo apt-get install iptables-persistent
sudo scripts/setup_iptables.sh; sudo ./setup_ip6tables.sh; # locale IP adres
correct? sudo cp temp/etc/rsyslog.d/22-iptables.conf /etc/rsyslog.d; # filter logs, zie firewall pagina
Encrypted files: back-ups etc wil ik veilig opslaan, kunnen privacy-gevoelige gegevens
(bankieren etc) in staan. Gebruik hiervoor ecryptfs, zie mijn stukje over disk-encryptie. Vercijferde files van mijn oude
.Backups directory kan ik nu naar de nieuwe kopiëren; hoeft verder niets ingesteld te
worden of zo (benodigde gegevens zitten in de encrypted files). Na mounten met mijn
mount_ecryptfs.sh scriptje zijn ze ongecrypt in Backups beschikbaar.
mkdir Backups .Backups; in de gewenste subfolder
echo "De folder is nog niet gemount met ecryptfs..." > Backups/readme.txt
sudo apt-get install ecryptfs-utils; # install ecryptfs
Tijd voor backup
Mooi moment om een backup te maken van de SD card, device /dev/mmcblk0 . Let op;
wordt een 16 GByte file (na compressie slechs 360 Mbyte)!
sudo umount /dev/mmcblk0p1; sudo umount /dev/mmcblk0p2
sudo dd bs=16M if=/dev/mmcblk0 of=raspbian3Bplus_20180505.img
md5sum raspbian3Bplus_20180505.img > raspbian3Bplus_20180505.img.md5
# 13 minuten, 16 GByte. En dan er een zip-file (.7z) van maken, 1:15 uur, 360
Mbyte -> 44x reductie!
Applicaties
Wat moet ik er zoal op zetten/configureren (zie overzetten
instellingen)? Voornamelijk al de services die ik op de huidige raspberry heb draaien:
- File server
(samba), om vanaf mijn netwerk bij de netwerkschijf te kunnen: OK
-
sudo apt-get install samba samba-common-bin . Zie mijn Samba
pagina voor setup. smbpasswd -a <user> . Werkte niet: moest de
[printers], [print$] secties actief laten. Waarom --> miste een '; '
voor [print$] . Foutje... SMB://192.168.xxx.xxx/shared/ is weer OK in
Files (Nautilus). Nog eens optimaliseren qua access.
- File
synchronisation/backup tussen computers met Unison
-
- Helaas is op de Debian Stretch de unison versie 2.48 niet compatible met de 2.40 op de oude
Raspberry (en op mijn latopts, en ...). Kan ik 2.48 ook makkelijk op de oude raspberry
krijgen (om daarop over te gaan)? Wat zijn de verschillen?
unison-all installeren?
- Name server
(dnsmasq) voor vaste IP adressen
-
sudo apt-get install dnsmasq dnsutils; sudo service dnsmasq stop;
mv dnsmasq.conf dnsmasq.conf.org; <copy configuratie>;
sudo service dnsmasq start
- VPN server
(openVPN), om ook van buitenaf op een veilige manier bij mijn netwerk te komen en veilig
te internet(bankier)en
- Media server
(mediatomb) om films en muziek naar mijn TV te streamen
- Mail server
(exim4) om mails vanaf de Raspberry te versturen. Laten draaien op ramdisk of
tmpfs.
- Dynamic DNS service
(ddclient) om mijn thuisnetwerk buiten een naam te geven -> eerst de andere RP3
disablen
- Home
control/Domotica, een begin van mijn home-automation
-
sudo apt-get install mosquitto mosquitto-clients python-mosquitto python-pip
sudo pip install paho-mqtt
Missing
Wat mist er nog (nog te doen):
- Log rotation (is dat niet standaard, of heb ik de Pi nog te weinig aan?)
- ??? Proxy server
(squid) samen met SSH als openVPN niet lukt: is dat nog nodig?
- ??? Web server
(lighttpd), web interface voor home control via Python: of alles via MQTT?
Nu de rest nog. Tot de volgende keer...
|