Importare un planet di OpenStreetMap in un database PostgreSQL 9.1 con estensione Postgis

Torno a scrivere sul blog, dopo piu’ di un anno, con un promemoria piu’ che con una guida. Testato su Ubuntu 11.10

Installare PostgreSQL 9.1 e Postgis

sudo apt-get install postgresql-9.1 postgresql-client-9.1 postgis potresql-9.1-postgis postgresql-contrib-9.1

Scaricare e decomprimere l‘ultima versione di Osmosis (mentre scrivo 0.40.1)

Configurare il database e l’utente PostreSQL

sudo su - postgres
createuser <username>
psql --command "ALTER USER WITH ENCRYPTED PASSWORD ' <password>' ";
createdb <dbname>
createlang plpgsql <dbname>
psql --command "CREATE EXTENSION hstore";
psql -d <dbname> -f /usr/share/postgresql/9.1/contrib/postgis-1.5/postgis.sql
psql -d <dbname> -f /usr/share/postgresql/9.1/contrib/postgis-1.5/spatial_ref_sys.sql
psql -d <dbname> -f <osmosis-path>/script/pgsimple_schema_0.6.sql
psql -d <dbname> -f <osmosis-path>/script/pgsnapshot_schema_0.6.sql
exit

Scaricare, estrarre e importare un planet (in questo caso quello italiano)

wget http://download.geofabrik.de/osm/europe/italy.osm.bz2
bunzip2 italy.osm.bz2
cd <osmosis-path>/bin/
./osmosis --read-xml file="<path-to-planet>/italy.osm" --write-pgsql host="localhost" database="<dbname>" user="<username>" password="<password>"

Sul mio portatile ci sono voluti 75 minuti per importare il planet italiano (~10 Gb decompresso)

Crittografia: dal cifrario di Cesare a Wikileaks

Installare Lighttpd con supporto SSL e PHP5 su Ubuntu 10.04 Lucid Lynx

Questo articolo è un aggiornamento al mio vecchio articolo Installare Lighttpd con MySQL e PHP5 su Debian Lenny.

In questo how-to tratteremo dell’installazione su Ubuntu 10.04 e dell’attivazione del supporto SSL con redirect automatico da HTTP a HTTPS.

Installazione di Lighttpd e PHP5

Per installare il server e abilitare il supporto a PHP5 bastano solo 3 comandi:

sudo apt-get install lighttpd php5-cgi
sudo lighty-enable-mod fastcgi
sudo lighty-enable-mod fastcgi-php
sudo /etc/init.d/lighttpd restart

Apriamo la porta 80 su iptables (perché lo state usando, vero?!?):

sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Abilitare HTTPS

Creiamo il certificato, con scadenza 365 giorni, nella cartella /etc/lighttpd

cd /etc/lighttpd
sudo openssl req -new -x509 -keyout server.pem -out lighttpd.pem -days 365 -nodes

Rispondiamo a tutte le domande e poi cambiamo i permessi del certificato.

sudo chmod 400 server.pem

Adesso modifichiamo il file di configurazione /etc/lighttpd/lighttpd.conf

sudo vim /etc/lighttpd/lighttpd.conf

Aggiungendo queste due righe:

ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd/server.pem"

Riavviamo Lighttpd:

sudo /etc/init.d/lighttpd restart

Ed infine istruiamo iptables a lasciar passare il traffico sulla relativa porta:

sudo iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

Attivare il redirect automatico da HTTP a HTTPS

Per redirezionare automaticamente tutto il traffico da HTTP (porta 80) a HTTPS (porta 443) è sufficiente aggiungere queste righe al file di configurazione di Lighttpd

$SERVER["socket"] == ":80" {
  $HTTP["host"] =~ "(.*)" {
    url.redirect = ( "^/(.*)" => "https://%1/$1" )
  }
}

e decommentare il modulo mod_redirect, eliminando il simbolo cancelletto, dalla lista server.modules.

Riavviamo Lighttpd:

sudo /etc/init.d/lighttpd restart

Montare una partizione in automatico all’avvio usando fstab

Il sistema operativo GNU/Linux gestisce le informazioni sulle partizioni da montare automaticamente all’avvio o usando il comando:

sudo mount -a

nel file di configurazione /etc/fstab

fstab  è un semplice file di testo, suddiviso in colonne, in cui ci sono su ogni rigo le informazioni relative ad una partizione o un disco:

#nome device   punto mount     filesystem    opzioni             dump-freq pass-num
/dev/hda6       swap            swap         defaults                0        0

Le colonne hanno i seguenti significati:

  • nome device è il nome della partizione o del disco da montare (Ubuntu le identifica anche con l’UUID)
  • punto di mount è il punto del filesystem in cui la partizione deve essere montata
  • filesystem è il tipo di filesystem con cui è formattata la partizione (per windows FAT32 o NTFS)
  • opzioni rappresenta un insieme di opzioni tra cui quella che inidica al sistema di montare la partizione automaticamente all’avvio
  • dump-freq attiva il backup usando il comando dump (obsoleta)
  • pass-freq attiva e modifica l’ordine di controllo delle partizioni usando fsck. La partizione root deve avere valore 1, perché deve essere controllata per prima, le altre valore 2 oppure valore 0 per disattivare il controllo.

L’opzione per il mount automatico è auto, ma si può usare anche l’opzione defaults  che comprende altre opzioni (tra cui partizione in sola lettura) oltre auto.

Modificare fstab da terminale

  • Identifichiamo l’UUID della partizione contenente Windows (negli esempi userò /dev/sda1):
blkid /dev/sda1 

che restituisce

/dev/sda1: UUID="041E62501E623AB6" TYPE="ntfs" 
  • Creiamo la cartella in cui verrà montata la partizione:
sudo mkdir /media/windows
  • Apriamo fstab con gedit:
 sudo gedit /etc/fstab
  • Inseriamo questa riga alla fine del file:
UUID=041E62501E623AB6    /media/windows    ntfs    defaults    0    0

Salviamo il file e al prossimo riavvio avremo la partizione montata automaticamente, per montarla immediatamente basta digitare in un terminale:

sudo mount -a

Modificare fstab in maniera grafica

  • Installiamo Pysdm dal gestore pacchetti o digitando in un terminale:
 sudo apt-get install pysdm
  • Apriamo Pysdm con permessi di amministratore usando:
sudo pysdm
  • Clicchiamo sulla freccia accanto a SDA per vedere le partizioni e selezioniamo quella che vogliamo mettere in fstab (nel nostro caso SDA1).

  • A questo punto ci chiederà se vogliamo configurare la partizione e premiamo OK e  la partizione sarà configurata automaticamente.

  • Clicchiamo su Assistant per modificare le opzioni (sola lettura, UTF-8 ecc) e poi su Applica

Sistemare il bug di Guake ‘TERM environment variable not set’

La nuova versione di Ubuntu presenta un fastidioso bug in Guake che non ne permette il corretto funzionamento, sopratutto con alcuni comandi.

In attesa del bug fixing è possibile ovviare impostando manualmente la variabile TERM a XTERM.

Apriamo il file di configurazione della bash:

 vim .bashrc

Aggiungiamo alla fine del file le seguenti righe:

TERM=xterm
export TERM

Ricarichiamo le impostazioni personalizzate della bash

Riavviamo Guake finalmente funzionante :)

Backup del Master Boot Record

Aggiornato dopo la segnalazione di Trottolino Voodoo

Il MBR  consiste nei primi 512 byte di un hard disk contenenti un piccolo programma con le informazioni relative alle partizioni, (solitamente) il boot loader e si occupa di avviare il sistema operativo.

In caso di corruzione del MBR il sistema operativo non sarà più avviabile.

Per questo è bene tenere una copia del MBR nella home, in modo da poterlo ripristinare con una distro live, per farlo utilizziamo dd.

sudo dd if=/dev/sda of=~/mbr.txt count=1 bs=446

Nel caso il vostro hd sia IDE dovrete usare /dev/hda al posto di /dev/sda.

L’opzione count istruisce dd per copiare solo un blocco e l’opzione bs definisce la dimensione, in byte, del blocco da copiare (la dimensione è di 446 e non 512 perché dal 448 al byte 512 solitamente ci sta la tabella delle partizioni primarie che non va copiata).

Sanitizzare un hard disk

Quando cancelliamo un file, questo non viene effettivamente rimosso dall’hd ma il sistema operativo sa di poter utilizzare successivamente quello spazio per salvare altri file.
In questo modo è possibile recuperare i file cancellati, anche da filesystem corrotti, usando opportuni strumenti.
Impostando quindi tutti i bit dell’hd a 0 non sarà possibile recuperare in alcun modo i file cancellati.

 sudo dd if=/dev/zero of=/dev/sd(X)

Salvare il contenuto di una finestra in un file immagine

Per fare lo screenshot del contenuto di una finestra si può utilizzare import da riga di comando:

  import nome_file.jpg

L’icona del mouse cambia e ci permette di cliccare nella finestra di cui volgiamo fare lo screenshot

Import è un tool che fa parte della suite imagemagick, per cui per installarlo basta digitare:

  sudo apt-get install imagemagick

su Ubuntu, oppure:

 sudo pacman -S imagemagick

su ArchLinux

OpenStreetMap: mapping party a Terlizzi

Mapping party terlizzi poster

31 gennaio 2010 – “Mappa Terlizzi”, il Mapping Party di Terlizzi

Il 31 gennaio alle ore 18.30 la comunità pugliese di OpenStreetMap invita tutti i cittadini al Mapping Party di Terlizzi, presso il Caffè Letterario DaDa in Largo Pappagallo 9.
Chi conosce la città meglio dei suoi cittadini? La Comunità pugliese di OpenStreetMap chiede l’aiuto dei cittadini terlizzesi per creare la prima mappa libera della città, e per riempirla di tutte le informazioni possibili: strade, fontane potabili, negozi, beni culturali, ecc.
Con questa iniziativa si vuole contribuire alla realizzazione di una mappa libera di Terlizzi, attraverso il progetto internazionale OpenStreetMap. Il progetto OpenStreetMap, una rivoluzionaria iniziativa di “mappatura collaborativa”, spesso definito anche “la Wikipedia delle mappe”, è stato avviato nel 2004 in Inghilterra, permette a chiunque di usare le mappe in modo creativo, per attività commerciali o in modi del tutto inattesi e innovativi. La creazione di una mappa libera è necessaria perchè l’uso delle mappe tradizionali è infatti ostacolato da vincoli legali e tecnici che limitano drammaticamente il loro uso. Lo scopo del progetto OpenStreetMap (abbreviato OSM) è quello di creare dati geografici liberi, che possano essere usati da chiunque e dovunque.
Gli OpenStreetMapper sono dei “mappatori” volontari, che possono circolare a piedi, coi pattini, in bici, in moto, in auto, portando con sé dei normali apparecchi GPS (Global Positioning System) registrando il tracciato di quante più strade, piste ciclabili e punti di interesse possibile. I tracciati registrati vengono messi online sul sito di OpenStreetMap.org dove chiunque nel mondo potrà, con un semplice accesso a internet, visualizzare, aggiungere nomi, modificare e usare i dati in qualunque modo si desideri.
La mappatura collaborativa è un’attività emergente e in rapida crescita, guidata in parte dalle nuove tecnologie disponibili, quali apparecchi GPS a basso prezzo e strumenti di collaborazione online, come OpenStreetMap.org, ma l’aspetto determinante in questi progetti è la spinta verso un accesso libero alla conoscenza.
L’iniziativa è sponsorizzata da DaDa – Caffè Letterario che offrirà l’accogliente e suggestiva sede nel centro della Città, accesso ad internet e proiezione della mappa, e dall’Associazione Culturale C@lliope, che offrirà supporto tecnologico.

OSMQuake

A quasi tre mesi dalla presentazione ufficiale ad OSMit, pubblico finalmente il codice di OSMQuake purtroppo ancora incompleto e con il codice ancora molto sporco e incasinato (l’ho scritto in tre ritagli di tempo la sera tardi).

Ho aspettato così tanto perché mi sarebbe piaciuto completare alcune parti del software che avevo implementato soltanto in parte purtroppo però in questo periodo non ho molto tempo e preferisco pubblicare il codice in modo che chiunque voglia contribuire (anche per disegnare un logo ad esempio) possa farlo.

Il codice sorgente si trova attualmente qui, se qualcuno volesse collaborare posso metterlo su google code e usare svn per la gestione della versione.

Questo è il risultato dell’elaborazione di stamattina sull’Italia centrale.

mappa terremoti luglio 2009 Italia centrale

mappa terremoti luglio 2009 Italia centrale

Già dalla mappa è possibile vedere cosa manca:

  • Il raggio del marker è direttamente proporzionale alla magnitudo ma il colore dovrebbe essere inversamente proporzionale al tempo, cosicchè i terremoti più recenti siano di un rosos più intenso.
  • Sarebbe bello avere una didascalia con qualche indicazione riguardo i range di dimensioni e di colori e delle statistiche generate automaticamente

Per generare la mappa precedente basta avviare OSMQuake e poi premere sul tasto “Scarica” per effettuare il parsing della pagina e salvare gli eventi in un database sqlite (notare in basso a sinistra il numero degli eventi scaricati):

Interfaccia grafica OSMQuake

Interfaccia grafica OSMQuake

A questo punto si possono scegliere i parametri di filtraggio, lo zoom della mappa e il tipo di mappa (Mapnik, Osmarender e OpenArial) e si clicca su Genera mappa. A questo punto il software mostra le tile da scaricare e le dimensioni della mappa in pixel e inizia a scaricare le tile necessarie. Dopo di che le unisce e disegna sopra la mappa i marker calcolando dinamicamente il raggio.

Il risultato finale è una nuova finestra con la mappa:

Mappa finale

Mappa finale

Mappa finale2

Mappa finale2

Cosa funziona in OSMQuake:

  • Parsing della pagina
  • Riempimento del database con gli eventi
  • Filtraggio per magnitudo
  • Filtraggio per profondità
  • Scelta dello zoom
  • Scelta del server
  • Calcolo delle tile da scaricare
  • Calcolo delle dimensioni della mappa in pixel

Cosa non funziona (ancora!) in OSMQuake:

  • Filtraggio degli eventi in base alla distanza da un punto geografico
  • Calcolo dell’area coperta dalla mappa
  • Filtraggio in base alla regione (ho già i bbox delle regioni italiane che mi ha dato Niccolò Rigacci ma non ho avuto il tempo di creare un dizionario con i bbox)
  • Per generare una nuova mappa con la stessa istanza è necessario cancellare a mano le tile (io uso uno script in bash)
  • Prima di scaricare di nuovo gli eventi è necessario cancellare il file del database (il file prova)

Cosa sarebbe mi piacerebbe implementare in OSMQuake:

  • Riscrivere il codice ad oggetti
  • Implementare il threading per lo scaricamento delle tile (la policy del tile server di OpenStreetMap permette solo due thread)
  • Permettere di mantenere un database storico degli eventi e di filtrarli anche per periodo per creare delle mappe mensili o settimanali di una determinata zona
  • Permettere l’esportazione deglio eventi sismici in KML

Qualsiasi contributo è benaccetto!