Benutzer-Werkzeuge

Webseiten-Werkzeuge


Übersetzungen dieser Seite:
de:koarrl_alzraspi

koarrl: Alzheim-RaspberryPi

(last edit: 2019-03-05)

Raspberry Pi 2 - Debian-stable (zZ stretch) installieren

Ziel des Projektes ist ein schlankes System ohne Grafik, zugänglich über ssh -
- über die eth-Schnittstelle (Wartung, Debugging) oder WLAN (der RPi3 soll als access point arbeiten).
Es genügt dafür eine 2GB-SDcard.
Der Zweck?
Ein standalone-Gerät, das im Wald steht, ohne Internet-Anbindung, und mit einem Handy-Browser abfragbar ist.

2G-SDcard von Image erzeugen

Minimalistisches SDcard-Image hier downloaden: http://www.raspberrypi.org/downloads/raspbian/

Die SHA256-sum vom image.zip sicherheitshalber vor Dekomprimieren checken!

root@host:~# wget https://downloads.raspberrypi.org/raspbian_lite_latest

Dekomprimieren per commandline (mc versagt bei sehr großen Files)

root@host:~# unzip 2018-11-13-raspbian-stretch-lite.zip

Image auf eine möglichst schnelle SDcard übertragen

root@host:~# dd bs=4M if=2018-11-13-raspbian-stretch-lite.img of=/dev/sdc status=progress conv=fsync

Sofort den Netzwerk-Zugang vorbereiten (Default-IP ist 192.168.1.1)
Es gibt eine kleine FAT-Partition mit vielen Einstellmöglichkeiten für Anfänger…
„touch ssh“ z.B. bewegt den Pi, ssh-Zugangsversuche zu akzeptieren :-)

root@host:~# mount /dev/sdc1 /mnt root@host:~# cd /mnt root@host:~# touch ssh root@host:~# umount /mnt

Image betrachten (wer das will)

root@host:~# losetup -P /dev/loop0 2018-11-13-raspbian-stretch-lite.img root@host:~# fdisk -l /dev/loop0 Disk /dev/loop0: 1,8 GiB, 1866465280 bytes, 3645440 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x7ee80803 Device Boot Start End Sectors Size Id Type /dev/loop0p1 8192 98045 89854 43,9M c W95 FAT32 (LBA) /dev/loop0p2 98304 3645439 3547136 1,7G 83 Linux

ACHTUNG! 2G-SD-Karten sind evtl. leicht verschieden groß, der Versuch, ein zu großes Image per dd zu kopieren, endet mit einem korrupten Filesystem!

/dev/loop0p1 bzw. /dev/loop0p2 können einfach auf /mnt eingebunden werden.

Boot-Partition mit Label versehen

root@host:~# fatlabel /dev/sdc1 "BOOT"

Die kurze UUID kann nur beim Neuformatieren vergeben werden, ist aber hier ziemlich egal.
Kontrolle:

root@host:~# blkid /dev/sdc1 /dev/sdc1: LABEL="BOOT" UUID="9304-D9FD" TYPE="vfat" PARTUUID="a6924f9f-01"

Root-Partition mit Label versehen

root@host:~# e2label /dev/sdc2 "MYOWNPI"

UUID der Root-Partition unique machen

Sonst gibt es Schwierigkeiten, mehrere SD-Karten abwechselnd auf einem Host-PC zu mounten und zu editieren.

root@host:~# tune2fs /dev/sdc2 -U `uuid`

Das Tool „uuid“ generiert eine Random-Zahl im passenden Format.

SDcard einsetzen, Raspberry Pi einschalten

(Beim ersten Booten bläst sich die Root-Partition auf den maximal verfügbaren Platz der SDcard auf!)
ACHTUNG! Nicht alle 2G-SD-Karten sind genau gleich groß, etwas zu große Images auf kleinere Karten zurückzuspielen macht später Ärger.

Erster login - z.B. von einem Laptop mit zurechtgebogener eth-Schnittstelle.

root@host:~# ifconfig eth0 192.168.1.2

Default-User: pi (pwd: raspberry - sofort das User-Passwort ändern!)

root@host:~# ssh 192.168.1.1 -l pi

root werden mit …

root@host:~# sudo su

… und auch hier ein Root-Passwort definieren.

Netzwerk-Konfiguration

ACHTUNG, NEU! Nicht mehr /etc/config/network, sondern /etc/dhcpcd.conf editieren - untenstehendes anhängen!
(vorher Backup machen auf *.ORIG!)

dhcpcd.conf
  ....
  # ~~~~ from here: added by koarrl ~~~~
  nohook wpa-supplicant
 
  # static IP configuration:
  interface eth0
  static ip_address=172.16.1.13/24
  #static ip6_address=.....
  #static routers=192.168.1.1
  #static domain_name_servers=192.168.1.1 8.8.8.8

Dazu passend am Host-Rechner (eth-IP: 172.16.1.3) das IP-Forwarding einrichten

root@host:~# ifconfig eth0 172.16.1.3 root@host:~# iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE root@host:~# iptables -A FORWARD -i eth0 -j ACCEPT root@host:~# echo 1 > /proc/sys/net/ipv4/ip_forward

Den Pi wieder rebooten. Das Einsteigen geht ab jetzt so:

root@host:~# ssh 172.16.1.13 -l pi

Wenn der ssh-Zugang vom Host verweigert wird:

user@host:~$ rm ~/ssh/.known_hosts

Nun dem Pi einen Internet-Zugang über den Host-Rechner ermöglichen:

root@raspberrypi:~# route add default gw 172.16.1.3

Pakete aktualisieren und dazuinstallieren

root@raspberrypi:~# apt-get update root@raspberrypi:~# apt-get install dselect mc minicom chkconfig

Anm.: Das Paket „ntp“ ist bereits installiert, womit der ntp-Daemon immer für eine richtige Uhrzeit sorgt.
Das ist wichtig für die Ablaufdaten diverser Sicherheitszertifikate.
Der Raspberry Pi hat KEINE RTC mit Batterybackup!

GANZ WICHTIG: dselect in Profi-Modus versetzen :-)

root@raspberrypi:~# echo expert >> /etc/dpkg/dselect.cfg

Kleinkram, Hardwaretests

minicom mit FTDI-Modul testen:

root@raspberrypi:~# minicom -c on -D /dev/ttyS0

Handshake → none und local echo → yes setzen –> Zeichen erscheinen doppelt, wenn TX-Rx-Jumper gesteckt

raspi-config starten:

root@raspberrypi:~# raspi-config

Einstellungen ändern:

Hostname: mypi
default locale: de_AT.UTF8
timezone Europe/Vienna

… und wieder rebooten! …

Nützliche Tools

Anzeige aktiver Startskripte:

root@raspberrypi:~# service --status-all

Ein Multi-Tool, mit dem SysV-Startscripte vom neuen ach so tollen systemd (würg!) angenommen werden - siehe manpage:

root@raspberrypi:~# chkconfig

Alle Startscripte neu anwerfen:

root@raspberrypi:~# systemctl daemon-reload

my_startscript anwerfen:

root@raspberrypi:~# systemctl start my_startscript

my_startscript dauerhaft (über reboot) installieren:

root@raspberrypi:~# systemctl enable my_startscript

(ab hier bitte ergänzen!)

LED-Ansteuerung über bash

Hier verstecken sich beim RPi2 die LEDs:
/sys/class/leds/led0 (grün)
/sys/class/leds/led1 (rot)

z.B. „grün ein“:

root@raspberrypi:~# echo default-on > /sys/class/leds/led0/trigger

z.B. „rot aus“:

root@raspberrypi:~# echo none > /sys/class/leds/led1/trigger

Die Mutter aller I/O-Libraries (und mehr)

Siehe: http://abyz.me.uk/rpi/pigpio/download.html - Unbedingt holen und builden!
Am besten die C-Library verwenden, dann ist kein Daemon vonnöten.
Wunderschön gemachte Doku dazu: http://abyz.me.uk/rpi/pigpio/cif.html

pi@raspberrypi:~ $ wget abyz.me.uk/rpi/pigpio/pigpio.tar pi@raspberrypi:~ $ tar xf pigpio.tar pi@raspberrypi:~ $ cd PIGPIO pi@raspberrypi:~/PIGPIO $ make pi@raspberrypi:~/PIGPIO $ sudo make install

nfs-Server aufsetzen

Das ist für Debugging und Editieren mit den Bordmitteln des Host-PC sehr nützlich. Paket holen …

root@raspberrypi:~# apt-get install nfs-kernel-server

… und /etc/exports editieren:

exports
/home/pi  172.16.1.3(rw,sync,no_subtree_check)

… und schließlich:

root@raspberrypi:~# service nfs-kernel-server reload

Minimalistischen cgi-fähigen Webserver aufsetzen

Wir nehmen, da es kein Debian-Paket mehr gibt, die Sourcen, um thttpd im Letztstand zu bauen, von hier:
https://acme.com/software/thttpd/thttpd-2.29.tar.gz

Davon gibt es eine Koarl-mod: thttpd-2.29c (kleine Umbauten)

  • Makefile.in modifiziert
  • verwendet user:group www-data:www-data
  • server root = /var/www
  • initscript dazu: thttpd.sh

Einfach auf dem Pi compilieren (Achtung, ARM-Architektur, am Host würde man die gnu-eabi-Toolchain brauchen):

pi@raspberrypi:~ $ ./configure --prefix=/usr/local pi@raspberrypi:~ $ make pi@raspberrypi:~ $ sudo make install

Ja, das dauert ein Weilchen.
Ungeduldige starten den Webserver dann mit folgender Commandline:

root@raspberrypi:~# /usr/local/sbin/thttpd -d /var/www -c "**"

Oder besser und dauerhaft per initscript (dieses thttpd.sh hier ist beigepackt in V2.29d)

thttpd
#!/bin/sh
 
### BEGIN INIT INFO
# Provides:          thttpd webserver
# Required-Start:
# Required-Stop:     umountroot
# Should-Stop:       
# X-Start-Before:    checkroot
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: handle thttp daemon (locally built version 2.29d needed!)
# Description:       
### END INIT INFO
 
set -e
 
# Include core init functions if needed
. /lib/lsb/init-functions
 
# server config might be found here ...
CONFIGFILE=/etc/default/thttpd
SRV_VER=`/usr/local/sbin/thttpd -V`
 
case "${1:-}" in
 
    start)
        echo "Starting thttpd webserver $SRV_VER"
        if [ -f $CONFIGFILE ]; then
            /usr/local/sbin/thttpd -C $CONFIGFILE
        else
            /usr/local/sbin/thttpd -d /var/www -c "**"
        fi
        ;;
 
    stop)
        PID=`pidof thttpd`
        echo "Stopping thttpd webserver"
        [ -n "$PID" ] && kill -9 $PID
        ;;        
 
    restart | force-reload)
        $0 stop
        $0 start
        ;;
 
    status)
        echo -n "thttpd webserver"
        [ -z "`pidof thttpd`" ] && echo -n " NOT"
        echo " running!"
        exit 0
        ;;
 
    *)
        echo "Usage: ${0:-} {start|stop|restart|force-reload|status}" >&2
        exit 1
        ;;
esac

NEU: der hungrige systemd muß nun gefüttert werden, das Initscript ist im alten LSB-Stil. Siehe https://wiki.debian.org/LSBInitScripts

root@raspberrypi:~# cp thttpd.sh /etc/init.d/thttpd root@raspberrypi:~# chown root:root /etc/init.d/thttpd root@raspberrypi:~# chkconfig -add thttpd

Kontrolle: wird das thttpd-Initscript in den Runlevels 2,3,4,5 gestartet? (welche runlevels? Siehe Kommentar-Header im Startscript)

root@raspberrypi:~# chkconfig -l ..... thttpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off S:on ....

Und nun? Das Server-Root-Verzeichnis mit anzeigbaren Test-Files befüllen (index.html, cgi-bin/helloCGI, …)
Damit werden statische HTML-Seiten und beliebige cgi-scripts geliefert (Sicherheit = egal!)
Der Webserver wird ab jetzt nach jedem Reboot gemäß dem Initscript gestartet!

Headless-System weiter abschlanken

Unnötige Pakete und Dienste können nun nach Geschmack deinstalliert werden (so vorhanden) …

  • raspi-config
  • triggerhappy
  • ntp
  • dbus (nur für Dektop environment)
  • console-kit-daemon (nur für Dektop environment)
  • polkitd
  • gvfsd
  • dbus-daemon
  • dbus-launch

System noch schneller machen

root@raspberrypi:~# echo -n performance | tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

WLAN-AccessPoint einrichten

WLAN-Hardware organisieren/verstehen

Beim RPi2 braucht man einen WLAN-Stick, der RPi3 hat die Hardware schon onboard.
Proprietäre Firmware sollte schon vorinstalliert sein.

https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md

https://wiki.debianforum.de/WLAN-Access-Point_mit_hostapd_und_USB-Stick

https://www.elektronik-kompendium.de/sites/raspberry-pi/2002171.htm

Zeige angesteckten USB-WLAN-Stick an:

root@raspberrypi:~# iwconfig

Zeige Fähigkeiten des Sticks:

root@raspberrypi:~# iw list

Zeige existente WLANs an:

root@raspberrypi:~# iwlist wlan0 scan | grep ESSID

hostapd (Host Access Point Daemon) einrichten

Siehe: http://sirlagz.net/2012/08/09/how-to-use-the-raspberry-pi-as-a-wireless-access-pointrouter-part-1/

root@raspberrypi:~# apt-get install hostapd

(Zitate verkürzt von dort …)

After I installed hostapd, I had to modify a few files before hostapd would run.
Set a static IP address:

iface wlan0 inet static
address 10.0.0.1
netmask 255.255.255.0

modify /etc/default/hostapd:

The DAEMON_CONF variable is not configured, it must point to a configfile (to be created) DAEMON_CONF=„/etc/hostapd/hostapd.conf“

create /etc/hostapd/hostapd.conf

# First we configure the interface we'll be listening on
interface=wlan0 # The interface to listen on
driver=nl80211
# The driver that is being used by the WiFi adapter, this could be different for everyone
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0 # These 2 are just parameters so that the hostap daemon runs.
# Now onto the important WiFi configuration
ssid=RaspAP
# First up, the SSID or Network name. This is what other devices will see when they try to connect.
hw_mode=g
# I'm setting this to Wireless G mode. A, B, and G are available here.
channel=8
# This is setting the channel that the WiFi is on, valid channels are from 1-11, or 1-14 depending on location.
# Wifi Security Settings
wpa=2 # This sets the security settings to WPA2
wpa_psk=928519398acf811e96f5dcac68a11d6aa876140599be3dd49612e760a2aaac0e
# The line above sets the wpa passphrase to "raspiwlan", this is obtained via the wpa_passphrase command.
# However, you can also set a passphrase like the line below.
#wpa_passphrase=raspiwlan
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
rsn_pairwise=CCMP

# Other settings
beacon_int=100 # This sets how often the WiFi will send a beacon out.
auth_algs=3
wmm_enabled=1

DHCP-Server aufsetzen

root@raspberrypi:~# mv /etc/dnsmasq.conf /etc/dnsmasq.conf.ORIG

Neues File /etc/dnsmasq.conf anlegen:

interface=wlan0
no-dhcp-interface=eth0
dhcp-range=interface:wlan0,10.0.0.2,10.0.0.5,infinite

oder so ?

interface=wlan0 # To get dnsmasq to listen only on wlan0.
dhcp-range=10.0.0.2,10.0.0.5,255.255.255.0,12h # This sets the available range from 10.0.0.2 to 10.0.0.5
# It also sets the subnet mask to 255.255.255.0 and specifies a lease time of 12 hours.

root@raspberrypi:~# service dnsmasq restart

After the configuration file has been created in /etc/dnsmasq.conf, start up hostapd and restart dnsmasq. You should now be able to see the WiFi network “RaspAP” and be able to connect to it and get an IP address.

de/koarrl_alzraspi.txt · Zuletzt geändert: 2019/03/05 15:58 von koarrl