Segmentation fault – C/C++ Cross-Compiler


Segmentation fault

 

Ein mit arm-linux-gnueabihf-g++ für Raspberry Pi kompiliertes Programm verursacht bei der Ausführung auf dem Raspbian Buster System den Fehler: “Segmentation fault”. Dies geschieht nur bei ausführbaren Dateien ohne Dateinamenserweiterung. Hängt man der Compiler-Ausgabe-Datei irgendeine Erweiterung an, zum Beispiel .run oder .xyz, tritt dieser Fehler nicht auf. Auch das Umbenennen und Entfernen der Erweiterung aus dem Dateinamen auf dem Host-PC vor der Übertragung ergab keine Abhilfe. Woran liegt aber das Problem?

Raspberry Pi – Ubuntu MATE installieren



Ubuntu MATE basiert auf der Linux Ubuntu Distribution, die lediglich mit dem MATE-Desktop ausgestattet wurde.

Systemvoraussetzungen

Die SD-Karte muss mit FAT32-Dateisystem formatiert worden sein. Die Anleitung befindet sich hier.

Empfohlen wird Raspberry Pi 4 Model B oder Compute Module 4 mit mindestens 2 GB RAM und 16 GB microSD-Karte.

Eine Installation auf Raspberry Pi 2 oder 3 ist möglich, wird aber aufgrund des zu kleinen Arbeitsspeichers (1 GB) nicht empfohlen.

Raspberry Pi 1 unterstützt Ubuntu MATE gar nicht. Die ARMv6 Prozessor-Struktur und sein Befehlssatz erlauben die Ausführung nicht.

Download

Auf der Ubuntu MATE Download-Seite die Raspberry Pi 32-bit oder 64-bit Variante wählen.

Ubuntu MATE - CPU-Struktur-Varianten
Ubuntu MATE – Auswahl der CPU-Struktur

Die Long Term Support (LTS) oder die letzte Version auswählen.

 

Ubuntu MATE - Versionen
Ubuntu MATE – Versionauswahl

Die Download-Methode wählen. Hier kann die Direct Download-Option genutzt werden. Bei BitTorrent wird nur eine .torrent-Datei heruntergeladen, die dann in einem Torrent-Client wie KTorrent geöffnet werden muss.

 

Ubuntu MATE - Download-Quelle wählen
Ubuntu MATE – Download-Quelle wählen

Zum Schluss die heruntergeladene Archiv-Datei (.xz) entpacken.

 Installation

Die microSD-Karte über einen Adapter in den Rechner einstecken.

Raspberry Pi Imager öffnen. Über OS WÄHLEN ⇒ Eigenes Image die entpackte .img-Datei laden.

Für die weitere Vorgehensweise siehe “Raspberry Pi OS mit Raspberry Pi Imager installieren”.

 

 



 

War diese Seite für dich informativ? Hat sie dir gefallen und geholfen?

Dann unterstütze die Weiterentwicklung mit einer kleinen Spende!

Die Spenden werden für die Lizenzen sowie neue Hard- und Software verwendet, die für weitere Projekte auf dieser Webseite eingesetzt werden.




Raspberry Pi – Sonstiges




Umgebungsvariable PATH erweitern

Die Umgebungsvariable PATH speichert Verzeichnispfade in den die Kommandozeile (Shell) nach den eingegebenen, ausführbaren Dateien sucht. Befindet sich diese Datei in einem anderen Verzeichnis als in PATH aufgelistet, muss in der Kommandozeile (oder Shell-Skript) der komplette Pfad mitangegeben werden. Um dieses bei jeder Eingabe umzugehen, kann die PATH-Variable mit dem Pfad erweitert werden.

PATH temporär erweitern

Der Umgebungsvariable PATH wird ein zusätzlicher Pfad angefügt, der nur während der aktuellen Login-Session gilt.

$ PATH=$PATH:/neuer/Pfad

Nach einem Neustart oder erneutem Anmelden ist der Eintrag nicht mehr vorhanden.

PATH dauerhaft erweitern

Möchte man einen Pfad dauerhaft in der Umgebungsvariable PATH speichern, so muss dieser in der Datei /etc/profile hinzugefügt werden.

Öffne die /etc/profile Datei zum editieren:

$ sudo nano /etc/profile

Füge der Variablen PATH einen Doppelpunkt als Trenner und den zusätzlichen Pfad an.

PATH in der /etc/profile Datei

Die Datei speichern und RPi neustarten. Oder um den Pfad bis zum nächsten Neustart in der aktuellen Login-Session nutzen zu können, PATH temporär erweitern.



 

War diese Seite für dich informativ? Hat sie dir gefallen und geholfen?

Dann unterstütze die Weiterentwicklung mit einer kleinen Spende!

Die Spenden werden für die Lizenzen sowie neue Hard- und Software verwendet, die für weitere Projekte auf dieser Webseite eingesetzt werden. Die Werbung alleine deckt gerade mal die Server Kosten.




Raspberry Pi – Speichermedien einbinden



USB-Speichermedium einbinden

Sollen Geräte mit NTFS-Dateisystem eingebunden werden, muss zunächst der Treiber installiert werden:

$ sudo apt-get -y install ntfs-3g hfsutils hfsprogs exfat-fuse

Als nächstes wird ein Einhängepunkt für die spätere Einbindung des Gerätes im /media Verzeichnis erstellt (z.B. usb1):

$ sudo mkdir /media/usb1

Um den Pfad zu dem USB-Gerät herauszufinden den folgenden Befehl ausführen, das Gerät anschliessen und den Befehl erneut ausführen.

$ sudo blkid -o list -w /dev/null

Das Gerät sollte jetzt zusätzlich zu den vorhandenen aufgelistet sein.

Angeschlossenes USB-Speichermedium
Angeschlossenes USB-Speichermedium

USB-Gerät manuell einhängen:

Da der device-Pfad jetzt bekannt ist kann der USB-Stick oder die USB-Festplatte eingehangen werden.

 

FAT32:

$ sudo mount -t vfat -o utf8,uid=pi,gid=pi,noatime /dev/sda1 /media/usb1

NTFS:

$ sudo mount -t ntfs-3g -o utf8,uid=pi,gid=pi,noatime /dev/sda1 /media/usb1

ext4:

$ sudo mount -t ext4 -o defaults /dev/sda1 /media/usb1


USB-Gerät automatisch beim Start einhängen:

Soll das USB-Speichermedium beim Booten eingehangen werden kann man dies in der /etc/fstab Datei eintragen.

$ sudo nano /etc/fstab

Am Ende der Datei die UUID des Gerätes, Einhängepunkt und Optonen eintragen.

 

FAT32:

UUID=0444-D367 /media/usb1/ vfat utf8,uid=pi,gid=pi,noatime 0

 

NTFS:

UUID=0444-D367 /media/usb1/ ntfs-3g utf8,uid=pi,gid=pi,noatime 0

 

ext4:

UUID=0444-D367 /media/usb1/ ext4 defaults 0


NAS-Server einbinden

Zuerst einen Einhängepunkt des Geretes im /media Verzeichnis erstellen (z.B. nas1):

$ sudo mkdir /media/nas1

NAS manuell einhängen:

Samba

$ sudo mount -t cifs //192.168.1.2/nasfreigabe /media/nas1 -o user=nasuser,pass=nasuserpassword

NFS

$ sudo mount -t nfs 192.168.1.2:/nasfreigabe /media/nas1 -vwn

NAS automatisch beim Start einhängen:

Um den NAS-Server automatisch beim Booten des Pis einzuhängen, muss dieser in der /etc/fstab Datei eingetragen werden.

$ sudo nano /etc/fstab

Am Ende der Datei eintragen für Samba:

//192.168.1.2/nasfreigabe /media/nas1 cifs username=NASUSER,password=NASUSERPASSWORD,uid=pi,gid=pi 0 0

oder für NFS:

192.198.1.2:/nasfreigabe /media/nas1 nfs auto,rw,rsize=8192,wsize=8192 0 0

Raspberry Pi neustarten:

$ sudo reboot

Speichermedium aushängen

$ sudo umount /mountpoint/path -v

 



 

War diese Seite für dich informativ? Hat sie dir gefallen und geholfen?

Dann unterstütze die Weiterentwicklung mit einer kleinen Spende!

Die Spenden werden für die Lizenzen sowie neue Hard- und Software verwendet, die für weitere Projekte auf dieser Webseite eingesetzt werden.




Buffalo LinkStation Wake-On-LAN



Inhalt:

  1. Einführung
  2. Voraussetzungen
  3. Vorbereitung
  4. Die Raspberry Pi Software
  5. Back-End zum Ein- und Ausschalten
    1. 5.1 MySQL Account Datenbank anlegen
    2. 5.2 WebApp erstellen


1. Einführung

In diesem Tutorial erkläre ich wie man den Buffalo LinkStation NAS-Server mithilfe von Raspberry Pi über das lokale Heimnetzwerk und aus dem Internet ein- und ausschalten kann.

Die Buffalo LinkStation wartet 5 Minuten lang auf eine WOL-Nachricht. Bekommt sie keine, wird das Betriebssystem heruntergefahren. Der Raspberry Pi sorgt dafür, dass diese Nachricht innerhalb dieser Zeit gesendet wird damit der Buffalo wach bleibt, oder es wird eben keine WOL-Nachricht geschickt wenn ein gewolltes Ausschalten der LinkStation eingeleitet werden soll.

2. Voraussetzungen

Für die Realisierung dieses Projektes sind folgende Voraussetzungen zu erfüllen:

  • Ein Wake-On-LAN-fähiges Gerät, das kontinuierlich WOL-Pakete empfangen muss um wach zu bleiben. Im Projekt wurde der NAS-Server Buffalo LinkStation LS-WXLD24 verwendet.
  • Ein Raspberry Pi mit installiertem Linux-Betriebsystem (hier Raspbian Jessie) und SSH– oder direktem Terminal-Zugriff auf das System.
  • Raspberry Pi USB- oder FTP-Zugriff für die Dateienübertragung.
  • Beide Geräte müssen im Heimnetzwerk verbunden sein. Vorzugsweise per LAN.
  • Auf dem Raspberry Pi sind Webserver (Apache2 oder lighttpd), PHP5, mySQL installiert und aktiv.
  • (optional wenn man das Zielgerät von Aussen schalten möchte) ein Zugriff auf den Raspberry Pi aus dem Internet.
Feste-IP.net
Feste-IP.net

3. Vorbereitung

Der LinkStation Power Schalter muss auf AUTO stehen. In dieser Position fährt der NAS Server nach ca. 5 Minuten herunter wenn keine Wake-On-LAN-Nachricht empfangen wird.

Der Raspberry Pi soll wie die LinkStation in gleichem Heimnetzwerk verbunden sein.

4. Die Raspberry Pi Software

Die Raspberry Pi Software stayalive schickt standardmässig alle 3 Minuten eine Wake-On-LAN-Nachricht zu der LinkStation. Die Datei stay.alive enthält ein Flag 0 oder 1. Steht er auf 1 wird der NAS Server wach gehalten bzw. hochgefahren. Bei 0 wird keine WOL-Nachricht geschickt und der NAS Server fährt nach ca. 5 Minuten herunter.

Die stayalive Software kann hier heruntergeladen werden. Die ZIP-Datei auf den RPi in das Verzeichnis /home/pi/Downloads übertragen und entpacken.

$ cd /home/pi/Downloads
$ unzip stayalive_1.1.2.zip
$ cd stayalive_1.1.2

Die Konfigurationsdatei stayalive.conf anpassen (vor der Installation!).

$ sudo nano stayalive/stayalive.conf

Vor allem die Parameter BCAST_ADDR, BCAST_PORT und TARGET_MAC sind wichtig.
Danach das Install-Skript ausführen.

$ sudo bash install

Nach der Installation den Flag in der Datei /etc/stayalive/stay.alive auf 1 setzen. Die LinkStation sollte nun hochfahren.

Die install.log-Datei befindet sich im /etc/stayalive Verzeichnis. Ausführung-Log-Dateien sind im /var/log/stayalive Verzeichnis zu finden.

5. Back-End zum Ein- und Ausschalten

Als Back-End zu Ein- und Ausschalten der LinkStation eignet sich am besten eine Webanwendung. Mit der ist es dann möglich über den Internet Browser lokal oder aus dem Internet den NAS Server zu schalten. Die Anwendung setzt den Flag in der stay.alive Datei. Damit Unbefügte kein Zugriff auf die Anwendung haben, wird Login Authentifizierung eingesetzt. Berechtigte Benutzer und Passwörter werden in der MySQL-Datenbank gespeichert.

5.1 MySQL Account Datenbank anlegen

Anmerkung: Falls der MySQL-Server und phpMyAdmin noch nicht installiert, siehe diese Anleitung!

Um den Zugriff auf die Webanwendung zum Schalten des NAS-Servers zu schützen wird eine Datenbank mit Accounts für berechtigte Benutzer eingerichtet.

Dafür den phpMyAdmin auf dem Raspberry Pi öffnen (http://{RPi-IP-Adresse}/phpmyadmin). Gegebenfalls das bei der phpMyAdmin-Installation vergebene Passwort eingeben.

Auf dem Reiter Datenbanken den Datenbanknamen “hnc” eingeben und Koalition utf8mb4_general_ci wählen.

hnc Datenbank anlegen
hnc Datenbank anlegen

Mit “Anlegen” bestätigen und weiter.

Links im Datenbankbrowser die hnc-Datenbank wählen, und die Tabelle account mit 4 Spalten erzeugen.

account Tabelle erzeugen
account-Tabelle erzeugen

Die Tabellenspalten wie unten definieren.

account Tabellenspalten definieren
account-Tabellenspalten definieren

Zu dem Reiter Einfügen wechseln und neuen Benutzer anlegen. Der Benutzername und Passwort sollen mit MD5 verschlüsselt werden.

account Tabelle- Benutzer anlegen
Wake-On-LAN Webanwendung-Benutzer hinzufügen

Bestätigung eines erfolgreich hinzugefügten Datensatzes:

account Datensatz erfolgreich eingefügt
Datensatz erfolgreich eingefügt in die Tabelle account

Auf dem Reiter Anzeigen ist jetzt der Datensatz mit dem verschlüsseltem Benutzernamen und Passwort sichtbar.

account Tabellendatensatz anzeigen
Der eingefügte account-Tabellendatensatz

Eine Beispiel Datenbank kann hier heruntergeladen werden.

Nach dem entpacken der ZIP-Datei den Raspberry Pi phpMyAdmin öffnen (http://{RPi-IP-Adresse}/phpmyadmin), auf den Home Button klicken (1) und den Reiter Import wählen (2). Die entpackte sql-Datei laden (3) und mit OK (4) die Datenbank importieren.

hnc Datenbankimport
Datenbankimport

Die Beispiel-Datenbank enthält eine Tabelle account mit einem Datensatz für den Benutzer testuser mit dem Passwort testpasswort.

5.2 WebApp erstellen

Die Webanwendung soll über eine grafische Oberfläche den Flag in der Datei /etc/stayalive/stay.alive setzen können. Sinnvoll ist auch eine Benutzer-Authentifizierung wenn man auf diese Anwendung über das Internet zugreifft.

Eine Beispiel-Webanwendung kann hier heruntergeladen werden. Die ZIP-Datei in das RPi /home/pi/Downloads Ordner übertragen und dann in das /var/www bzw. bei Raspbian Jessie /var/www/html Verzeichnis entpacken.

$ cd /home/pi/Downloads
$ sudo unzip hnc.zip -d /var/www

seit Raspbian Jessie (Ende 2015):

$ cd /home/pi/Downloads
$ sudo unzip hnc.zip -d /var/www/html

In der Datei /var/www/{html}/hnc/login.php in der Funktion get_db_pw muss bei dem mysqli_connect()-Aufruf der MySQL Benutzer und das Passwort angegeben werden. Standardmäßig ist Benutzer root ohne Passwort voreingestellt.

function get_db_pw($uname){
$con = mysqli_connect("","USER", "PASSWORD");
mysqli_select_db($con,"hnc");
$sql = "select password from account where username = '$uname'";
$res = mysqli_query($con,$sql);
$data=mysqli_fetch_assoc($res);
mysqli_close($con);
return $data["password"];
}

Nun kann die WebApp mit http://{RPi-IP-Adresse}/hnc/hnc.php geöffnet werden. In der Beispiel-Webanwendung testuser und testpassword für die Anmeldung benutzen.

hnc login
hnc-Anmeldung

Die Domäne im Kopf der Seite kann in der Datei login.php im <body>-Bereich, Zeile 53 geändert werden.

<h2 align="center">exampledomain.feste-ip.net</h2>

Nach dem Einloggen kann man über die dynamische Webseite das Zielgerät ein- und ausschalten.

hnc user interface
stayalive Benutzeroberfläche

Das Einschalten dauert bis zu 3 Minuten, bis das nächste WOL-Paket vom stayalive gesendet wird plus die Zeit, die das Gerät zum Hochfahren braucht. Das Ausschalten kann eine Verzögerung von 5 Minuten haben (gerätabhängig, hier bei Buffalo LinkStation).



 

War diese Seite für dich informativ? Hat sie dir gefallen und geholfen?

Dann unterstütze die Weiterentwicklung mit einer kleinen Spende!

Die Spenden werden für die Lizenzen sowie neue Hard- und Software verwendet, die für weitere Projekte auf dieser Webseite eingesetzt werden.




Raspberry Pi – Zusätzliche Dienste und Programme



  1. Apache Webserver
  2. lighttpd Webserver
  3. PHP
  4. mySQL und phpMyAdmin
  5. FTP Server
    1. vsftp
    2. ProFTP
  6. SSH Server


Apache Webserver

Installation

Für die Apache2 Webserver Installation wird die www-data Benutzergruppe und der www-data Benutzer benötigt.

$ sudo groupadd www-data
$ sudo usermod -a -G www-data www-data

Nach Updates suchen und aktualisieren.

$ sudo apt-get update && sudo apt-get upgrade

Nach dem Upgrade RPi neustarten.

$ sudo reboot

Apache installieren:

$ sudo apt-get install apache2 apache2-doc apache2-utils

Nach der Installation wird der Apache-Daemon automatisch gestartet.

Installation testen

Die Raspberry Pi IP-Adresse im Internet Browser eingeben. Es sollte eine Apache2 Debian Default Page geöffnet werden mit dem Text “It Works!” und der Konfigurationsübersicht als Bestätigung dass der Webserver fehlerfrei arbeitet.

 

lighttpd Webserver

Vor der Installation die Paketdatenbank aktualisieren und ein Upgrade ausführen:

$ sudo apt-get update && sudo apt-get upgrade

Installation

$ sudo apt-get install lighttpd

Nach der Installation wird der lighttpd-Daemon automatisch gestartet. Man kan es mit dem folgenden Befehl überprüfen.

$ sudo systemctl status lighttpd

Berechtigungen setzen

Die Benutzergruppe www-data anlegen und den Benutzer pi dieser Gruppe hinzufügen. Den Benutzer www-data als Eigentümer des /var/www bzw. /var/www/html Verzeichnisses definieren und Schreib-/Leserechte vergeben.

$ sudo groupadd www-data
$ sudo usermod -G www-data -a pi

Raspbian Weezy:

$ sudo chown -R www-data:www-data /var/www
$ sudo chmod -R 775 /var/www

Seit Raspbian Jessie (Ende 2015):

$ sudo chown -R www-data:www-data /var/www/html
$ sudo chmod -R 775 /var/www/html

 


PHP

PHP5 nachrüsten

$ sudo apt-get install libapache2-mod-php5 php5 php-pear php5-xcache

Installation testen

In das Webserver-Verzeichnis wechseln:

$ cd /var/www

Seit Raspbian Jessie (Ende 2015):

$ cd /var/www/html

In diesem Ordner die Datei phpinfo.php erstellen.

$ sudo nano phpinfo.php

Folgende PHP-Zeilen eintragen und speichern.

<?php phpinfo(); ?>

Im Browser die Raspberry Pi IP-Adresse gefolgt von /phpinfo.php eingeben. Die PHP Version Berichtseite sollte geöffnet werden.

 

mySQL und phpMyAdmin

mySQL installieren

$ sudo apt-get install php5-mysql mysql-server mysql-client

Ein Passwort vergeben:

MySQL root Password
mySQL root Passwort vergeben

Mit OK weiter.

Nach der Installation RPi neustarten.

$ sudo restart

phpMyAdmin installieren

$ sudo apt-get install phpmyadmin

Den installierten Webserver auswählen:

Webserverauswahl
Auswahl des installierten Webservers

Die Datenbank-Konfiguration mit dbconfig-common übernehmen:

Datenbank-Konfiguration
Datenbank-Konfiguration

phpMyAdmin Administrator-Passwort vergeben:

phpMyAdmin Passwort
phpMyAdmin Administrator Passwort

phpMyAdmin im Webserver einbinden:

$ sudo nano /etc/apache2/apache2.conf

An das Ende dieser Konfigurationsdatei

include /etc/phpmyadmin/apache.conf

eintragen.

Webserver neustarten:

$ sudo /etc/init.d/apache2 restart

 


FTP Server

vsftp

Paketliste aktualisieren.

$ sudo apt-get update

Installieren

$ sudo apt-get install vsftpd

Konfigurieren

Die Konfigurationsdatei öffnen:

$ sudo nano /etc/vsftpd.conf

In der Konfigurationsdatei die folgenden Parameter setzen.
Den Zugang nur für angemeldete Benutzer erlauben:

anonymous_enable=NO

Die lokale Benutzung erlauben:

local_enable=YES

Damit Dateien und Verzeichnisse angelegt werden können:

write_enable=YES

Die Datei speichern (STRG+O und RETURN), schliessen (STRG+X) und den FTP-Server neustarten.

$ sudo service vsftpd restart

Zu dem FTP-Server kann jetzt mit einem FTP-Client (z.B. FileZilla) eine Verbindung geöffnet werden.

 

ProFTP

to be continued…

SSH Server

Installieren

In den neuern Raspbian-Versionen ist der SSH-Server bereits installiert. Ledieglich muss er nur aktiviert werden. In den älteren Versionen kann er nachträglich manuell installiert werden.

$ sudo apt-get install ssh

Den SSH-Server automatisch starten.

$ sudo update-rc.d ssh defaults
$ sudo /etc/init.d/ssh start

Aktivieren

In den neueren Raspbian-Versionen wird der SSH-Server nur aktiviert.

$ sudo raspi-config
Interface Einstellungen
Konfigurationsmenüpunkt – Interface Optionen

Den Konfigurationsmenüpunkt Interfacing Options auswählen.

SSH-Server aktivieren und deaktivieren
SSH-Server aktivieren/deaktivieren

Mit ENTER weiter.

SSH-Server Aktivierung bestätigen
SSH-Server Aktivierung bestätigen

“Ja” wählen und mit ENTER bestätigen.

SSH-Server Status
SSH-Server Status

Mit ENTER beenden.

 

Da es bis zu diesem Zeitpunkt kein SSH-Zugriff gab, muss die ganze Prozedur mit angeschlossenem Monitor und einer Tastatur direkt am Raspberry Pi durchgeführt werden werden. Nach der Installation bzw. Aktivierung kann der SSH-Client putty genutzt werden.

 




 

War diese Seite für dich informativ? Hat sie dir gefallen und geholfen?

Dann unterstütze die Weiterentwicklung mit einer kleinen Spende!

Die Spenden werden für die Lizenzen sowie neue Hard- und Software verwendet, die für weitere Projekte auf dieser Webseite eingesetzt werden.