Roel's Praathoek - Raspberry Pi Experimenten

Raspberry Pi

Een Raspberry Pi is een heel klein en zuinig computertje met een ARM SoC.

Iedereen heeft er een (nu ja, zoiets).

RPi in the box

Ik heb nu ook een eentje besteld. Een dag later al in huis. Het spelen, uhe, experimenteren, kan beginnen.

Het plan is om de Pi 'headless' te gebruiken als een super-zuinig computertje, dat gewoon altijd aan staat. Ideaal voor kleine home-automation experimenten en waarbij er geen beeldscherm aan hoeft (dus ook geen 'Desktop Manager' nodig), alles verder via een remote SSH sessie.

Later

Intussen is m'n RPi collectie wat gegroeid, vooral door de nieuwschierigheid naar de nieuwe versies van de RPi.

De RPi 2 B is door het grotere geheugen erg interresant voor miniservers. De RPi B+ is nog interresant vanwege het nog lagere stroomverbruik. De originele RPi B is natuurlijk nog uitstekend bruikbaar voor projecten waar het om IO gaat (want dat kost niet zoveel geheugen) en past goed bij de oudere uitbreidings modules.


De bovenste RPi heeft een LCD module gekoppeld (en een Pi-Matrix board met een boel leds, ligt er naast). De Pi eronder was de Pi in de meterkast, met ArchLinux erop (nu niet meer in de meterkast, want die wordt aangepast i.v.m. de komst van glasvezel). De andere twee Pi's zijn de nieuwere versies, resp Pi B+ en Pi 2 B. De laatste arriveerde vandaag met de post.

M'n RPi collectie

HowTo

    Interresante RPi websites

  • Start hier

    The Raspberry Pi Foundation

  • RPi Hub

    Raspberry Pi Wiki on eLinux

  • CentOS 7

    CentOS 7 Installation Guide on Raspberry PI

  • FedBerry

    FedBerry is a Fedora Remix specifically built for use with Raspberry Pi® 2/3 Model B computers

  • Cooling

    Raspberry Pi 3 Thermal Throttling Analysis: The $8 "Moster" Heatsink


  • Inovation

    The Raspberry Pi is succeeding in ways its makers almost imagined

  • Programming

    Raspberry Pi - Programming languages, IDEs, etc.


  • Build Linux

    Build a custom Linux system to your needs for scraths

  • Build Linux

    Kali Linux on a Raspberry Pi (A/B+/2) with Disk Encryption

  • GPIO

    Raspberry Pi GPIO via the Shell

  • BerkeleyDB

    undertake cruel and unusual measures to preserve SD card life so that your Pi can run as close to 24x7x365 as possible

  • Kali

    Install Kali ARM on a Raspberry Pi

  • Webserver

    How to set up a Raspberry Pi web server, mail server and Owncloud installation

  • Webserver

    How to set up a website with HTTPS and SPDY support under nginx on a Raspberry Pi

  • Simultaneous AP

    Enabling Simultaneous AP and Managed Mode WiFi on Raspberry Pi Zero W

  • RPi gadgets

  • TFT28 Display

    TFT 2.8" display (STMPE610 + II9341)

  • QEMU Cluster

    Raspberry Pi Cluster Emulation With Docker

 

Installatie van DietPi

Ik heb wat 2Gb SD kaartjes die uitstekend te gebruiken zijn voor de RPi v1. Ik ben opnieuw gaan zoeken naar een Linux distributie voor de Pi die op zo'n kaartje past en ben uitgekomen bij DietPi. Dit is een 'minimal Raspbian/Debian Server Image' waarbij je de software die je echt wilt hebben, makkelijk kan installeren. Er zijn zelfs 'functionele modules' die je via een handig menu kan installeren.

Ik ben gestopt met deze distributie, omdat je af en toe een nieuwe image moet laden. Dan moet je gelijk ook je website weer opnieuw neerzetten, irritant. Daarnaast was de raspbian repo laat met updaten van webserversoftware.

SD kaart voorzien van Diet-Pi image

Het Diet-Pi installatie proces is goed uitgelegd op de Diet-Pi installatie pagina, dus dat ga ik niet herhalen. Samengevat is het gewoon de image downloaden, uitpakken en op de SD-kaart schrijven. Dat is eigenlijk alles. Daarna kan je de SD kaart in je Pi plaatsen en die start dan Linux op en doet nog wat configuratie bij opstarten en de 1e inlog. Het IP adres moet je zelf vinden, b.v. op je router bij de DHCP info. Zodra je het IP-adres van de RPi weet, kan je er met SSH (of putty) op inloggen.

IPv6 aanzetten

Ook bij de Diet-Pi image staat IPv6 standaard uit. Dat is gedaan door de IPv6 module te blacklisten. Pas dat aan, zodat de ipv6 module wel geladen wordt.

Pas ook de /etc/network/networking file aan zodat voor ipv6 de interface op auto staat.

iface eth0 inet6 auto

Na een update van v77 naar v79, bleek dat het vrijgeven van ipv6 opnieuw moest, maar de 'networking' file bleef intact.

    Dit moet je doen:
  • met vi /etc/modprobe.d/ipv6-blacklist.conf de regel blacklist ipv6 weghalen (of eigenlijk een # ervoor plaatsen), zodat de ipv6 module niet meer blacklisted is.
  • met vi /etc/sysctl.d/ipv6.conf de 'ipv6' entry aanpassen van '=1' naar 'net.ipv6.conf.all.disable_ipv6=0'.

Na een paar weken, weer een nieuwe update, nu naar v81. Na de update, maar voor de reboot is IPv6 nog actief en een boel outdated 'temporary' addresses.

# ip -6 addr
1: lo:  mtu 65536 
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qlen 1000
    inet6 2a02:a448:25ea:0:399a:783a:a18b:9b3d/64 scope global temporary dynamic 
       valid_lft 86340sec preferred_lft 2936sec
    inet6 2a02:a448:25ea:0:bd95:b8bd:7ef6:9d18/64 scope global temporary deprecated dynamic 
       valid_lft 86340sec preferred_lft 0sec
    inet6 2a02:a448:25ea:0:f5bf:5956:10cf:ec73/64 scope global temporary deprecated dynamic 
       valid_lft 86340sec preferred_lft 0sec
    inet6 2a02:a448:25ea:0:995c:e03a:72d1:c166/64 scope global temporary deprecated dynamic 
       valid_lft 86340sec preferred_lft 0sec
    inet6 2a02:a448:25ea:0:ba27:ebff:fe00:0/64 scope global dynamic 
       valid_lft 86340sec preferred_lft 43140sec
    inet6 fe80::ba27:ebff:fe00:0/64 scope link 
       valid_lft forever preferred_lft forever
# 
Helaas schakelt de update IPv6 weer uit na de update naar v81. Nu blijkt dat de ipv6 module via een file blacklist-ipv6.conf te zijn geblokkeerd. De file disable_ipv6.conf blijkt nu leeg te zijn, maar ipv6 is nog disabled. Gooi deze *ipv6*.conf file weg en zet de configuratie in een file local.conf.
    IPv6 activeren doe je door het volgende te veranderen:
  • met vi /etc/modprobe.d/ipv6-blacklist.conf de regel blacklist ipv6 onschadelijk maken door een # vooraan te plaatsen.
  • met vi /etc/sysctl.d/local.conf een nieuwe file maken met de volgende regels net.ipv6.conf.all.disable_ipv6=0 en net.ipv6.conf.default.use_tempaddr=2 en net.ipv6.conf.all.use_tempaddr=2 en net.ipv6.conf.eth0.use_tempaddr=2.
Kijk gelijk even of er geen andere *.conf files in sysctl.d staan die iets met ipv6 doen en pas aan als nodig. Ik had het uitzetten van IPv6 als ' bug' gemeld, maar dit bleek door een optimalisatie te komen (wat wel in de changelog stond, maar waar ik nu eens niet naar gekeken had). Het blijkt wel een eenmalige aanpassing te zijn, dus in het vervolg blijft IPv6 bij een update gewoon aan. Ik moest ook de privacy extention aanzetten, want dat staat standaard niet aan.
# ip -6 addr
1: lo:  mtu 65536 
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qlen 1000
    inet6 2a02:a448:25ea:0:98e2:61f9:6af9:1afe/64 scope global temporary dynamic 
       valid_lft 86377sec preferred_lft 43177sec
    inet6 2a02:a448:25ea:0:ba27:ebff:fe00:0/64 scope global dynamic 
       valid_lft 86377sec preferred_lft 43177sec
    inet6 fe80::ba27:ebff:fe00:0/64 scope link 
       valid_lft forever preferred_lft forever
# 
Bij het uitvoeren van de update naar v82 is IPv6 netjes 'aan' gebleven.

Gewoon user account aanmaken met sudo mogelijkheid

Voor normaal gebruik wil ik een normaal account hebben en voor beheerwerk de mogelijkheid van sudo. Dat account zit standaard niet in DietPi want dat wordt niet nodig gevonden voor thuisgebruik. Ik vind dat wel wenselijk, dus dat heb ik geregeld. Voor het maken van een extra useraccount heb je maar een paar dingen nodig. In dit geval wordt speciaal voor zowel de user als de user groep een ID van 1000 gebruikt en hoewel ik dat mooi vind, is dat niet persee nodig. Eerst het nieuwe useraccount maken (ik noem dat account hier 'user').

mkdir /home              # alleen voor de DietPi image nodig
groupadd -g 1000 user
useradd -g 1000 -u 1000 -m -s /bin/bash -d /home/user user
passwd user
Dan nog sudo installeren en de nieuwe user toevoegen aan de sudo groep.
apt-get install sudo
usermod -G sudo user
Je kan in de /etc/ssh/sshd_config nog instellen dat je met 'root' niet meer remote mag inloggen. Als extra veiligheid kan je zelfs nog certificate based login regelen. Deze extra beveiliging is voor thuisgebruik niet nodig zolang je poort 22 maar dicht houdt vanaf externe netwerken.

Als je nu zaken wilt doen als 'root' kan je elke opdracht vooraf laten gaan door sudo, of je gebruikt sudo -s om je sessie om te zetten naar root tot je dat met exit weer afsluit.

Installatie van Archlinux

Ik heb een 2GB SD kaartje (daar heb ik er een paar van, oorspronkelijk voor m'n digitale fotocamera), dus het moet een beetje compacte distributie zijn. ArchLinux voor de RPi is zo'n distributie die maar 1GB nodig heeft, dus dat past en heeft nog wat reserve.

SD kaart voorzien van de ArchLinux image

ArchLinux was één van de images die begin 2014 kant en klaar op de Raspberry site stond. Nu is deze daar verdwenen, maar is wel beschikbaar op de Arch Linux ARM site. Download ieen passende versie, pak uit en plaats volgens de getting started methode via dd op het SD kaartje. SD-kaartje naar de RPi transplanteren en booten. Als je via HDMI een monitor of TV aangesloten hebt, zie je de console en de opstart meldingen. Het IP address zie je daar ook. Je kan nu ook vanaf een ander systeem via een SSH inlogen.

IPv6 aanzetten

Hey, geen IPv6 adres? Hoe kan dat. Na het raadplegen van Google blijkt IPv6 standaard uit staat. Ergens in /boot/cmdline.txt staat "ipv6.disable=1"; Veranderen in "ipv6.disable=0" en een herstart en IPv6 doet het ook.

ArchLinux, dus ook de ARM versie, is een z.g. rolling release distributie. Dat betekent dat je altijd een vrij recente editie hebt, je krijgt elke keer een klein aantal updates en hoeft niet elk half jaar een grote update te doen, zoals bij ubuntu. Het bijwerken gebeurt via pacman -Suy. Daarna, indien nodig, een reboot. De RPi draait daarom met een recente kernel versie.

Bijwerken naar de laatste stand

Bij de installatie op 18 january 2014 is de versie:

$ uname -mr
3.10.27-1-ARCH armv6l

Netwerk, zowel een IPv4 als IPv6 actief

$ ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.1.120/24 brd 192.168.1.255 scope global eth0
    inet6 2001:470:1f15:116b:ba27:ebff:fe00:0/64 scope global dynamic 

42

Answer to the Ultimate Question of Life, the Universe, and Everything.

World IPv6 Launch