Installation von PostgreSQL 9.5 auf einem Raspberry Pi

Für viele Hobbyprojekte bietet sich der Einsatz einer relationalen Datenbank an. Neben MySQL ist PostgreSQL eine häufige Wahl. Soll die Datenbank dann ständig im Netzwerk verfügbar sein, ist es umständlich und wenig ökonomisch diese auf dem eigenen Arbeitsplatzcomputer zu installieren. Den Kleinstcomputer Raspberry Pi bekommt man im Einzelhandel schon für wenige Euro und dessen Stromverbrauch ist marginal. Die Installation der Datenbanksoftware auf dem Raspi bietet sich also für Datenbanken mit geringen Datenmengen geradezu an.

Installation und Konfiguration des Raspberry PI

Nach dem Kauf und Zusammenbau des Raspi (egal ob Ausgabe 1, 2 oder 3) steht die Wahl und Installation eines Betriebssystems an. Für den Einsatz als Datenbankserver eignet sich Raspbian, ein auf Debian basiertes Linux, das bereits alle Treiber und einige Konfigurationsprogramme für den Raspi mitbringt. Die Raspberry Pi Foundation bietet den Download in zwei Varianten an:
https://www.raspberrypi.org/downloads/raspbian/

Sowohl die „Full Desktop“ als auch die „Lite“ Version eignen sich für die Installation von Postgres. Erstere bringt noch einige zusätzliche Softwarepakete (wie etwa Mathematica) sowie einen grafische Benutzeroberfläche mit. Für die Installation von Postgres werden diese zusätzlichen Pakete nicht gebraucht. Daher kann man einige Megabyte Speicherplatz und etwas (aber nur sehr wenig) Performance herausholen, wenn man sich für die Lite-Version entscheidet. Nach dem Download und dem Entpacken der *.zip-Datei liegt in beiden Fällen ein Datenträgerimage auf der Festplatte, welches nun auf die SD-Karte geschrieben werden muss. Unter Windows bietet sich hierfür zum Beispiel das Tool Win32 Disk Imager an, welches man mit dem Pfad zur Imagedatei und dem Laufwerksbuchstaben der Ziel-Speicherkarte versorgt. Ein Klick auf „Write“ startet dann den Schreibprozess.

DiskImagerExample

Nach der Eingabe des Quellimages und des Ziellaufwerks startet ein Klick auf „Write“ das Beschreiben der SD-Karte.

Die Karte kann nun in den Slot des Raspi eingeführt und dieser anschließend mit Strom versorgt werden. Die Anmeldung kann direkt per SSH oder über einen angeschlossenen Monitor (mit Tastatur und eventuell einer Maus) erfolgen. Für eine Verbindung über SSH eignet sich unter anderem der Client PuTTY. Die Standardeinstellungen für die Verbindungsdaten lauten wie folgt:

  • Hostname: raspberrypi
  • Login-Name: pi
  • Passwort: raspberry

Direkt nach der Installation sollten die neuesten (Sicherheits-) Updates installiert werden. Unter Raspbian steht das Paketsystem APT zur Verfügung. Im Terminal führen folgende drei Befehle zu einem Update aller installierter Programmpakete:

sudo apt-get update
sudo apt-get upgrade

Anschließend sollte man unbedingt das Dateisystem auf die volle Größe seiner SD-Karte erweitern, da mit dem Übertragen des Datenträgerimages auch dessen Partitionsgrößen geschrieben wurden. Damit stünden auch der großzügigst dimensionierten Speicherkarte nur noch wenige MB für die Installation weiterer Software zur Verfügung. Der einfachste Weg dazu führt über das Tool raspi-config, das auch mit root-Rechten gestartet werden muss:

sudo raspi-config

Dieser Befehl, öffnet die Oberfläche des Konfigurationstools. Gleich die erste Option expandiert das Dateisystem auf die gesamte Größe der SD-Karte.

Example-raspi_config

Oberfläche des raspi-config Konfigurationstools

Das Konfigurationstool bietet noch einige weitere Funktionen, die für die Installation von Postgres zwar nicht notwendig, aber sehr praktisch sind. Dazu gehören unter anderem:

  • Ändern des Standardpasswortes
  • Ändern des Hostnamens
  • Ändern der Systemsprache und des Tastaturlayouts

Sind alle Einstellungen wie gewünscht vorgenommen, wird es Zeit für einen Neustart des Systems:

sudo reboot

Installation und Konfiguration von PostgreSQL

Die Installation von Postgres aus dem Raspbian Paketrepository ist sehr einfach und mit nur einer Anweisung erledigt:

sudo apt-get install postgresql-9.3

Hierbei wird allerdings nur die Version 9.3 installiert, eine aktuellere Version lässt sich im Repository bisher nicht finden. Die zum Zeitpunkt dieses Beitrags aktuelle Version ist 9.5. Glücklicherweise liegt diese im Quellcode vor und lässt sich auf dem Raspi kompilieren, paketieren und anschließend installieren. Das wird im Folgenden beschrieben.

Vorbereiten und Installieren aktueller Pakete

Dazu muss zunächst das APT-Repository von Postgres zur lokalen Repositoryliste hinzugefügt und der Schlüssel mit dem das Repository signiert wurde importiert werden:

sudo sh -c 'echo "deb-src http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Nun muss das Postgres-Repository noch lokal eingelesen und Compilertools installiert werden:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential fakeroot screen

Anschließend können mit Hilfe von apt-get alle für die Postgrespakete benötigten Abhängigkeiten installiert werden:

sudo apt-get build-dep postgresql-9.5
sudo apt-get build-dep postgresql-common
sudo apt-get build-dep postgresql-client-common
sudo apt-get build-dep pgdg-keyring

Endlich können die Quellcodes übersetzt werden. Das sollte möglichst ohne root-Rechte durchgeführt werden. Es kann auf dem Raspi sehr lange dauern postgresql zu kompilieren (im übernächsten Listing ist dies der dritte (fett markierte) Befehl). Deshalb empfehle ich vorher mit screen eine Session zu starten, die bei einem Verbindungsabbruch bestehen bleibt. Sollte während des Kompilierens die SSH-Verbindung abbrechen, kann man sich mit folgendem Befehl wieder in die Session einklinken:

screen -r

Los geht’s:

screen
cd /tmp
apt-get source ‐‐compile postgresql-9.5
apt-get source ‐‐compile postgresql-common
apt-get source ‐‐compile postgresql-client-common
apt-get source ‐‐compile pgdg-keyring
exit

Auf diese Weise sollten einige Debian-APT-Pakete (Dateien mit der Endung *.deb) im /tmp-Verzeichnis entstanden sein. Diese verschieben wir jetzt in ein eigenes lokales Repository, um sie als Installationsquelle benutzen zu können:

sudo mkdir /var/local/repository

echo "deb [ trusted=yes ] file:///var/local/repository ./" | sudo tee /etc/apt/sources.list.d/my_own_repo.list

cd /var/local/repository
sudo mv /tmp/*.deb .
dpkg-scanpackages ./ | sudo tee Packages > /dev/null && sudo gzip -f Packages

Ein letztes Mal muss nun das lokale Repository aktualisiert werden, bevor endlich die aktuelle PostgreSQL-Version aus dem lokalen Repository installiert werden kann:

sudo apt-get update
sudo apt-get install postgresql-9.5

Damit ist die Installation abgeschlossen und die Postgres-Datenbank einsatzbereit.

Konfigurieren von PostgreSQL

Verbindungen von Computern aus dem Netzwerk freischalten

Einer der ersten Schritte bei der Konfiguration des Postgres-Datenbankservers ist häufig das Freischalten von Verbindungen von außen (von anderen Computern im Netzwerk). Dazu trägt man die IP-Adressen, denen man den Zugriff erlauben möchte in die pg_hba.conf Datei ein. Möchte man allen Hosts den Zugriff gestatten, so trägt man „0.0.0.0/0“ als IP-Adresse ein (die Zahl hinter dem Schrägstrich gibt dabei die Subnetzmaske an). (Einen Benutzernamen und Passwort braucht man aber natürlich trotzdem noch für den Zugriff auf die Datenbank.)

sudo nano /etc/postgresql/9.5/main/pg_hba.conf

Der obrige Befehl öffnet eine Postgres-Konfigurationsdatei. In diese muss nun folgende Zeile eingetragen werden:

host all all 0.0.0.0/0 md5

pg_hba.conf

Außerdem muss in der Datei postgresql.conf die Datenbank angewiesen werden, auf Verbindungsversuche von allen Adressen zu reagieren:

sudo nano /etc/postgresql/9.5/main/postgresql.conf

hier muss folgende Zeile eingetragen werden:

listen_addresses = '*'

postgresql.conf

Nach einem Neustart ist die Verbindung zum Postgres-Datenbankserver von anderen Computern aus möglich:

sudo service postgresql restart

Der Standardport dafür ist 5432.

Eine Datenbank und einen dazugehörigen Benutzer anlegen

Bei der Installation von PostgreSQL wurde als Standardbenutzer für die Datenbank der Login postgres angelegt. Mithilfe von su kann zu diesem Benutzerkontext gewechselt werden und unter dem Namen des Benutzers das Kommandozeilenwerkzeug psql gestartet werden.

sudo su - postgres
psql

Hier können nun SQL-Befehle eingegeben werden. Der Befehl wird erst an die Datenbank gesendet, wenn er mit einem Semikolon beendet wurde. Falls das nicht vorhanden ist führt ein Druck auf die Eingabetaste nur dazu, dass eine neue Zeile begonnen wird. Zum Anlegen des SQL-Benutzers max und dem Erstellen der Datenbank haushaltsbuch müssen folgende Befehle an die Datenbank übermittelt werden:

CREATE USER max WITH PASSWORD 'maxIhmSeinPasswort';

CREATE DATABASE haushaltsbuch;

GRANT ALL PRIVILEGES ON DATABASE haushaltsbuch TO max;

Damit ist die Datenbank angelegt und der Benutzer max darauf berechtigt. psql kann nun mit folgendem Befehl wieder geschlossen werden:

\q

Der Benutzerkontext postgres kann mit

exit

wieder verlassen werden.

Werkzeuge für die Arbeit mit PostgreSQL

Das Kommandozeilenwerkzeug psql ist sicherlich nicht jedermanns erste Wahl für die (tägliche) Arbeit mit der Datenbank. Zum Glück gibt es einige Werkzeuge, die die Administration von PostgreSQL-Datenbanken erleichtern. Hier eine kleine Auswahl:

  • psql: Das bekannte Kommandozeilenwerkzeug.
  • pgAdmin: Von den Entwicklern von PostgreSQL gepflegtes Tool mit GUI.
  • DbVisualizer: Kommerzielles Werkzeug mit GUI. Unterstützt neben PostgreSQL auch noch andere DBMS.

16 Gedanken zu „Installation von PostgreSQL 9.5 auf einem Raspberry Pi

  1. Kharim

    apt-get source –compile postgresql-9.5
    apt-get source –compile postgresql-common
    apt-get source –compile postgresql-client-common
    apt-get source –compile pgdg-keyring

    Fehlen da nicht die doppelten Bindestriche?
    Bei mir gabs Fehler „Paket nicht gefunden“, aber so ging es:
    apt-get source –compile postgresql-9.5
    apt-get source –compile postgresql-common
    apt-get source –compile postgresql-client-common
    apt-get source –compile pgdg-keyring
    ( – – compile ohne Lehrzeichen dazwsichen – doofe Darstellung hier)

    Like

    Antwort
  2. Pingback: VR-Networld Software Postgres Migration – VR-Kennung Blog

  3. Johnny

    Hallo, empfiehlt es sich die Datenbank auf einem extra Stick zu installieren oder soll PostgreSQL gemeinsam mit Raspbian auf der Micro SD Karte verbleiben? In meinem Fall geht es um eine NextCloud. Schöne Grüße!

    Like

    Antwort
    1. Timo Autor

      Hi! Das kommt darauf an: Man macht bei der Installation auf eine SD-Karte nichts falsch. Wächst die Datenbank schnell an, kann man die Datenbankdateien auf einen Stick oder (besser) eine USB-Festplatte verschieben. Dafür muss man aber keine Neuinstallation von Postgres vornehmen, sondern kann dies (beinahe) im laufenden Betrieb tun.

      Like

      Antwort
  4. Peter

    Hallo und danke für die Anleitung! Inzwischen habe ich PG in der Version 9.6 intsalliert. Hast Du Erfahrungen, oder zumindest eine Idee, wie man jetzt auch noch die Erweiterung PostGIS auf den Pi bekommt? Danke im Voraus!

    Like

    Antwort
    1. Timo Autor

      Hi Peter,
      ich habe bisher leider kaum Erfahrungen mit Postgis gemacht, werde mir das bei nächster Gelegenheit aber mal ansehen. Eine schnelle Lösung wäre hier auch wieder das vorhandene apt-Package:
      – sudo apt-get install postgis
      Das wird dann aber voraussichtlich noch eine zweite Postgres-Installation neben deiner selbstkompilierten erzeugen.

      Like

      Antwort

Hinterlasse einen Kommentar