Publicerad den Lämna en kommentar

PostGIS Server på Raspberry Pi

I detta inlägg bygger jag en PostGIS server med en Raspberry Pi. Jag har alla delar jag behöver liggande, men även om du inte har något alls av det som behövs, så går det att köpa nytt för runt 1’000 kr.

Du behöver:

  • Raspberry Pi (gärna en modell 3 B+)
  • SD kort (bör vara minst 8 Gb)
  • Strömförsörjning (Raspberry Pi kräver ganska höga ampere)
  • Chassi (valfritt)
  • USB hårddisk (en äldre USB 2.0 disk duger)

För konfiguration och liknande behövs även tangentbord och en skärm du kan koppla in på HDMI porten. Efter den inledande konfigurationen behöver du dock inte dessa då det går att göra all konfiguration via SSH och nätverket.

Operativsystem

Jag använder Raspbian Noobs Lite som går att hämta från https://www.raspberrypi.org. Detta är det enklaste sättet att komma igång, men om du vill så kan du ladda hem Raspbian separat och skapa ditt bootbara SD kort på annat sätt.

Den nedladdade zip-filen packas upp till SD kortet, som skall vara formaterat med Fat32.

Skärmbild från 2018-08-14 12-47-42.png

Så länge alla de uppackade filerna ligger direkt i ”rooten” på kortet så behöver du inte göra mer på datorn.

Koppla upp allt

rasp_koppoling

Du skall inte koppla in USB hårddisken riktigt ännu, men anslut nätverkskabel, tangentbord och skärm, därefter så ansluts strömförsörjning för att starta enheten. Om du vill kan du koppla in en mus också, men du klarar dig utan.

När datorn startar så kommer den ganska snabbt till en valruta där du kan välja vilket system som skall installeras på kortet. Om du som jag valt Lite versionen av Noobs så krävs nätverksanslutning, vilket du ändå kommer att behöva, men framför allt tillgång till Internet.

Välj Raspbian Lite och klicka ”install” eller tryck på ”i” på tangentbordet. Bekräfta valet och låt installationen ta sin lilla tid.

När allt är klart får du ett meddelande och när du klickar ok så startar systemet om.

Sätta upp nätverk och SSH

Börja med att logga in med användarnamnet ”pi” och lösenordet ”raspberry”.

Du skall nu omedelbart byta lösenord på användaren ”pi”, aktivera SSH och eventuellt göra lite andra inställningar. Detta startar du med kommandot.

sudo raspi-config

Välj först att ändra ”lokaliseringen” så att du säkert använder ett svenskt tangentbord (om du nu normalt gör det). Därefter byter du lösenord.

För att aktivera SSH väljer du ”Interfacing Options” och därefter ”SSH” och sedan ”Yes” för att aktivera tjänsten.

När detta är gjort kan du gå ur menynerna, tillbaka till prompten genom att trycka på Esc på tangentbordet. Nu behöver du bara ta reda på IP adressen också, vilket görs med kommandot

ifconfig

Nu behöver du egentligen inte skärmen eller tangentbordet längre, så det kan vara läge att stänga ner systemet och koppla om lite kablar. Kanske flytta på delarna till en lämplig plats också. Du skall även koppla in USB disken. För att vara säker så bör du dock ha kvar skärmen så du ser vad som händer ett litet tag till. Om det strular så går det ju alltid att logga in direkt på enheten med tangentbordet.

Du stänger av systemet med kommandot

init 0

När du är klar kan du åter starta datorn genom att återansluta strömmen. Låt det gå en liten stund så du kan vara säker på att den startat ordentligt.

Anslut via nätverket

Nu kan du ansluta via SSH från en annan dator.

Skärmbild från 2018-08-14 13-34-09.png

Använd kommandot

ssh pi@192.168.0.29

eller den IP adress som din Pi har.

Raspbian bygger på Debian, vilket även Ubuntu gör, så om du använder Ubuntu så kanske du känner igen en del vanliga kommandon för att exempelvis uppdatera systemet.

sudo apt update
sudo apt upgrade

Detta kan vara bra att köra lite då och då för att hålla servern uppdaterad.

Det går att sätta upp hela servern på SD kortet, men då det kan bli mycket data så skall vi börja med att konfigurera USB disken så att den blir lite enklare att använda för systemet.

Lagringsplats

Det behövs som sagt ingen märkvärdig hårddisk, inte minst då Raspberry Pi endast har USB 2.0. Det finns andra ”kloner” som har USB 3.0, men här kör jag med original.

Skapa en katalog i filsystemet där disken kan monteras. Jag skapar en katalog kallad ”geodata” direkt i rooten.

sudo mkdir /geodata
sudo chmod 775 /geodata

Den andra raden är till för att sätta behörigheter på katalogen så att alla användare kan komma åt den. Detta kan du eventuellt vänta med lite då vi ändå behöver göra om detta längre fram när vi monterat disken.

För att kontrollera om USB disken fungerar så kan du skriva in lsblk.

Skärmklipp från 2018-08-14 13:52:12.png

I mitt fall så ser jag att det är enheten sda med partitionen sda1 jag är ute efter.

Du kan nu montera disken i den skapade katalogen med kommandot

sudo mount /dev/sdb1 /geodata

Men om du vill att monteringen skall göras varje gång systemet startar så kan du i stället redigera filen fstab. Då behöver du veta lite mer om disken, vilket du kan göra med kommandot sudo blkid.

Skärmklipp från 2018-08-14 14:25:31.png

Någonstans i resultatet finns information om partitionen du skall montera (i mitt fall sista raden). Här kommer jag att få ett problem då det är en disk formaterad med NTFS. Det går att få det att fungera, men det kan vara riktigt struligt. Nej, det bästa är att göra om hela disken till en Ext4 partition, vilket totalt raderar hela disken!!!

sudo fdisk /dev/sda

Rensa partitioner med ”d” och skapa en ny med ”n”. Sedan är det bara att bekräfta förvalen och godkänna att NTFS märkningen tas bort så småningom. Inget har ännu ändrats och du kan titta på den tänkta partitionsinformationen med ”p”.

Skärmklipp från 2018-08-14 15:58:51

Om det ser ok ut (ungefär som bilden ovan) så skriver du informationen till partitionstabellen på disken med ”w”, vilket som sagt raderar allt som tidigare fanns på den.

Du kan behöva ta bort disken och ansluta den igen för att den nya informationen skall läsas in i systemet, men det är inte säkert. Du måste dock formatera den nya disken med Ext4.

sudo mkfs.ext4 /dev/sda1

sedan kan du åter kontrollera med sudo blkid vilket UUID du har på partitionen.

Skärmklipp från 2018-08-14 16:08:09.png

Sedan kan du skapa en permanent montering i fstab.

sudo nano /etc/fstab

Här lägger du till en rad med innehåll anpassat efter vilken typ av USB disk du har (se raden som inleds med ”UUID” i bilden nedan).

Skärmklipp från 2018-08-14 16:10:21.pngSpara ändringen (ctrl + o) och avsluta (ctrl + x). Testa så att det fungerade med kommandot

sudo mount -a

Om du vill vara säker så kan du starta om systemet (reboot).

Dags för lite databas.

Installera PostGIS

Det går att installera den senaste versionen av PostGIS om man vill det, men för enkelhets skull så väljer jag den version som redan finns i biblioteken för Raspbian.

sudo apt install postgis

Som vanligt är det en hel del inställningar som behöver göras innan det går att använda PostGIS på ”servern”.

Först skall vi sätta ett lösenord på användaren postgres och ge användaren fulla rättigheter och äganderätt till katalogen /geodata.

sudo passwd postgres
sudo chown postgres /geodata
sudo chgrp postgres /geodata

Sedan skall du byta lösenord på användaren inne i psql och skapa en ny databas på USB disken.

sudo -u postgres psql
postgres=# \password postgres
postgres=# create tablespace ts location '/geodata';
postgres=# create database geodata with tablespace = ts;
postgres=# \q

För att testa att databasen nu finns kan du prova att lista innehållet i /geodata.

sudo ls /geodata

Då bör du se en ”PG…” katalog där. Notera att du som användaren ”pi” inte har rätt att lista innehållet, därav ”sudo”.

Nu skall databasen konfigureras för PostGIS. Vilket också görs ifrån psql med ett annat kommando.

sudo -u postgres psql -d geodata
geodata=# create extension postgis;
geodata=# select PostGIS_version();

Den sista raden bör svara med installerad PostGIS version, om allt fungerat. Du kan nu gå tillbaka till den vanliga prompten med \q.

Nu måste en del inställningar ändras i konfigurationsfilerna.

Till att börja med redigeras /etc/postgresql/9.6/main/postgresql.conf med nano.

Här skall ett antal rader redigeras så att de stämmer med det som listas nedan. Jag har inte med alla rader som finns i filen, utan bara de som behöver redigeras så du kan få leta lite. Egentligen är det nog bara den första som behöver ändras, resten är bara till för att optimera prestanda lite på en Raspberry Pi med 1 Gb Ram.

listen_addresses = '*'   # what IP address(es) to listen on;
shared_buffers = 512MB # min 128kB
work_mem = 16MB # min 64kB
maintenance_work_mem = 128MB # min 1MB
random_page_cost = 2.0 # same scale as above

Spara (ctrl + O) och avsluta (ctrl + X), öppna därefter filen pg_hba.conf som finns på samma sökväg. I denna måste du lägga till en adressrymd som får komma åt databasen. Lägg till ungefär nedanstående rad (beroende på din IP adress, notera att det skall sluta på siffran 1) under raden # IPv4 local connections:

host all all 192.168.0.1/24 md5

Starta slutligen om tjänsten.

sudo service postgresql restart

sedan skall du kunna ansluta till servern från PgAdmin på en klient. Där kan du exempelvis hantera användare och liknande. Eller varför inte ansluta direkt från QGIS.

Anslut med QGIS

I QGIS högerklickar du bland datakällor på PostGIS och väljer att skapa en ny anslutning.

Skärmbild från 2018-08-14 17-18-14.png

Testa anslutningen och sedan är det bara att köra på.

Via databashanteraren kan du skapa nya ”scheman” och ladda dessa med geodata.

Skärmklipp från 2018-08-14 17:20:41.png

Avslutning

Stäng nu ner systemet och placera det på en säker plats och starta en ”sista” gång. Nu har du en väldigt energisnål PostGIS databas på ditt nätverk som i och för sig inte är ett prestandamonster, men oj vad ”snål” den är. Speciellt om du redan har en hårddisk, och kanske även en Raspberry Pi liggande.

Det går att lägga till finesser i PostGIS, som topologi- och rasterstöd, men det har jag hoppat över här. Dels för att datorn är lite underdimensionerad för väldigt stora datamängder och därför nog passar bäst för experiment, och lite mindre dataset. Varför inte ladda ner Lantmäteriets terrängkarta och ladda in dessa lager? Det går ju även att spara QGIS stilar i PostGIS så då kan man snabbt få en väldigt bra grundkarta från alla datorer i ett mindre nätverk.

Raspberry Pi är absolut ingen lösning för kontoret eller företaget. Men för skolan i GIS utbildningen kan det vara en trevlig laboration för att dels titta på databasservrar och dels hantera serveroperativsystem i Linux. Om man sedan vill utveckla systemet så kan man även installera QGIS Server och en webbserver på systemet och få en komplett kartplattform med lite Open Layers eller Leaflet javascript, men då börjar vi nog närma oss vad som är rimligt att förvänta att en dator för runt 350 kronor skall klara av…

Nyhet från Geosupportsystem , orginal inlägg

Lämna ett svar