Journal

Artikel-Schlagworte: „FLOSS“

WebOS FOSDEM schedule app for 2012 submitted to HP

Today I submitted the 2012 update for the FOSDEM (Free and Open source Software Developers’ European Meeting) schedule app for WebOS. This year the FOSDEM is taking place on February 4th and 5th in Brussels. You can find it the updated version in the official HP App Catalog sometime next week after it was reviewed by HP – or you can already download the *.ipk package (linked here). Like 2010 and 2011, it’s mainly an application for planning your FOSDEM visit and have a handy offline-working list of the schedule on your WebOS device.

There are several enhancements, as every year. Finally all event details are shown in an own “scene” instead of the drawer view. This makes the list view more snappy and helps for a better structure. As last year, there are room maps for most of the rooms (sadly some are missing because there aren’t available at the FOSDEM website).

The application is released as free and open source software under the GPL v3. You can find the source code, GIT repository, bug tracker, the .ipk package and more at forge.webpresso.net.

As always feel free to share ideas, improvements and bug reports. Just leave a comment or use the bug tracker (registration and manual activation is required to avoid spam – and trust me, there are many spammers…).

Installation von Etherpad Lite auf Ubuntu 10.04 Server und Apache als Reverse-Proxy + Upstart

Screenshot von Etherpad Lite, einem kollaborativen TexteditorEtherpad Lite ist eine Neuentwicklung des kollaborativen Real-Time-Texteditors Etherpad in Node.js. Ausprobiert werden kann Etherpad Lite beispielsweise unter beta.etherpad.org.

Die ursprüngliche Etherpad-Software ist enorm ressourcenhungrig und die Codebase sehr umfangreich – insbesondere die hohen Anforderungen an den Arbeitsspeicher (im laufenden Betrieb wohl ca. 1 GB!) hielten mich von der Installation auf meinem Server ab. Etherpad Lite hingegen begnügt sich nach eigenen Angaben im laufenden Betrieb mit rund 30 MB Arbeitsspeicher.

Diese Anleitung beschreibt die Installation von Node.js, NPM und Etherpad Lite auf Ubuntu 10.04 Server. Da in den meisten Fällen auf Port 80 eines bestehenden Servers bereits ein Webserver (in meinem Fall Apache) läuft, wird Etherpad Lite hinter Apache als Reverse-Proxy (via mod_proxy) installiert. Sicherlich nicht die beste Lösung, eine “non-blocking” Node.js-Applikation hinter einem “blocking” Apache-Server zu installieren – Nginx wäre hier sicherlich eine bessere Wahl. Aber vorerst soll Apache als Reverse-Proxy genügen. Des weiteren richten wir eine Upstart-Konfiguration ein, die Etherpad Lite nach jedem Reboot automatisch startet.

Installation von Node.js

Zunächst installieren wir Node.js auf dem Server. Die Version in den Ubuntu-Paketquellen ist deutlich zu alt, deshalb müssen wir selbst kompilieren. Da wir Node.js, den Node-Paketmanager NPM und die Applikation aus Sicherheitsgründen unter einem eigenen User installieren möchten, legen wir diesen zunächst an:

groupadd nodejs
useradd -g nodejs -s /bin/bash -d /var/lib/nodejs nodejs
mkdir /var/lib/nodejs
chown nodejs:nodejs /var/lib/nodejs

Nun wurde der User nodejs angelegt, sein Home-Verzeichnis ist /var/lib/nodejs. Nun bereiten wir den User für die Installation von Node.js und NPM vor – wir wechseln in den User nodejs:

su nodejs
cd ~

Der folgende Inhalt muss in die Datei /var/lib/nodejs/.npmrc:

root =    /var/lib/nodejs/.node_modules
binroot = /var/lib/nodejs/local/bin
manroot = /var/lib/nodejs/local/share/man

Die entsprechenden Ordner müssen nun noch angelegt werden:

mkdir ~/local
mkdir ~/local/bin
mkdir ~/local/share
mkdir ~/local/share/man

Nun fügen wir den Ordner ~/local/bin noch zum PATH hinzu – die folgende Zeile muss zum einen in die Datei /var/lib/nodejs/.bashrc, zum anderen einmal in der Shell eingegeben werden:

export PATH=$HOME/local/bin:$PATH

Jetzt installieren wir die notwendigen Abhängigkeiten über apt / aptitude:

sudo apt-get install build-essential python libssl-dev git-core libsqlite3-dev gzip curl

Nun kann Node.js heruntergeladen und kompiliert werden. Dazu “klonen” wir das Git-Repository und checken die letzte stabile Version aus – was spätere Updates erleichtert.

mkdir ~/local/src
cd ~/local/src
git clone git://github.com/joyent/node.git
cd node
git checkout v0.4.12
./configure --prefix=$HOME/local/
make
make install

Installation von NPM

Jetzt ist Node.js installiert – wir benötigen aber noch den Node.js-Paketmanager NPM. Den installieren wir ebenfalls aus den GIT-Quellen:

cd ~/local/src
git clone https://github.com/isaacs/npm.git
cd npm
git checkout v1.0.30
make install

Zu guter letzt legen wir noch einen Symlink an, damit NPM später das Verzeichnis für die Node-Module findet, das wir weiter oben bereits konfiguriert haben:

ln -s ~/local/lib/node_modules ~/.node_modules

Installation von Etherpad Lite

Nun sind endlich die Voraussetzungen gegeben, um Etherpad Lite zu installieren. Dies tun wir ebenfalls aus den GIT-Quellen. Danach rufen wir ein Shell-Script auf, um die Abhängigkeiten zu installieren.

mkdir ~/node-apps
cd ~/node-apps
git clone git://github.com/Pita/etherpad-lite.git
cd etherpad-lite
./bin/installDeps.sh

Jetzt kann die Konfiguration angepasst werden, die sich in der Datei /var/lib/nodejs/node-apps/etherpad-lite/settings.json befindet. Da ich das Etherpad mit MySQL als Datenbank betreiben möchte, kommentiere ich die vorhandene SQLite-Konfiguration aus und füge den MySQL-Benutzer und den Datenbank-Namen hinzu, die ich beide vorher angelegt habe. Den “loglevel” setze ich außerdem auf “WARN”, um nicht zu viele unnötige Log-Meldungen zu schreiben.

Jetzt legen wir gleich eine Upstart-Konfiguration an, um sicherzustellen, dass das Etherpad nach jedem System-Neustart automatisch gestartet wird. Für eine regelmäßige Überwachung und ggf. Neustart des Etherpads im Fehlerfalle bietet sich Monit an – was aber nicht Teil dieses Artikels sein soll.

Wir legen nun die Datei /etc/init/etherpad-lite.conf mit folgendem Inhalt an (auf Grundlage dieser Quelle):

description "etherpad-lite"
 
start on started networking
stop on runlevel [!2345]
 
env NODEBIN=/var/lib/nodejs/local/bin/node
env EPHOME=/var/lib/nodejs/node-apps/etherpad-lite
env EPLOGS=/var/log/etherpad-lite
env EPUSER=nodejs
 
pre-start script
    chdir $EPHOME
    mkdir $EPLOGS                              ||true
    chown $EPUSER:admin $EPLOGS                ||true
    chmod 0755 $EPLOGS                         ||true
    chown -R $EPUSER:admin $EPHOME/var         ||true
#    exec su -s /bin/bash -c 'exec "$0" "$@"' $EPUSER $EPHOME/bin/installDeps.sh >> $EPLOGS/error.log || { stop; exit 1; }
end script
 
script
  cd $EPHOME/node
  exec su -s /bin/bash -c 'exec "$0" "$@"' $EPUSER $NODEBIN server.js \
                        >> $EPLOGS/access.log \
                        2>> $EPLOGS/error.log
end script

(Diese Upstart-Konfiguration ist noch nicht optimal – spontan gelang es mir nicht, das Shell-Script installDeps.sh im pre-start erfolgreich auszuführen. Deshalb muss man daran denken, dieses Script nach einem Etherpad-Update manuell auszuführen.)

Jetzt kann Etherpad ganz einfach mittels

start etherpad-lite

gestartet werden.

Einrichtung des Apache Reverse-Proxys

Nun richten wir Apache ein, damit Etherpad auf Port 80 erreichbar ist. Dafür verwenden wir z.B. die Subdomain etherpad.example.lit – und folgende virtuelle Host-Konfiguration (beispielsweise in der Datei /etc/apache2/sites-available/etherpad.example.lit):

<virtualhost *:80>
        ServerName etherpad.example.lit
 
        ServerAdmin webmaster@localhost
 
        <ifmodule mod_proxy.c>
            ProxyVia On
            ProxyRequests Off
            ProxyPass / http://localhost:9001/
            ProxyPassReverse / http://localhost:9001/
            ProxyPreserveHost on
            <proxy *>
                Options FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
            </proxy>
        </ifmodule>
 
        ErrorLog /var/log/etherpad-lite/apache2/error.log
 
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
 
        CustomLog /var/log/etherpad-lite/apache2/access.log combined
        ServerSignature Off
</virtualhost>

Wichtig: das Verzeichnis /var/log/etherpad-lite/apache2/ für die Apache-Logs muss angelegt werden!

Daraufhin kann der oben angelegte virtuelle Apache-Host aktiviert werden. Außerdem müssen die Apache-Module mod_proxy und mod_proxy_http aktiviert sein, danach kann die Apache-Konfiguration neu geladen werden:

a2ensite etherpad.example.lit
a2enmod proxy proxy_http
/etc/init.d/apache2 reload

Nun sollte das Etherpad unter http://etherpad.example.lit erreichbar sein!

Konfiguration von Logrotate

Wir haben nun einige Log-Dateien unterhalb von /var/log/etherpad-lite/, die schnell sehr groß werden können. Deshalb konfigurieren wir Logrotate so, dass diese Dateien wöchentlich rotiert und gepackt und für acht Wochen vorgehalten werden. Dazu fügen wir einfach folgende Zeilen zur /etc/logrotate.conf hinzu – oder legen eine /etc/logrotate.d/etherpadlite mit dem folgenden Inhalt an:

# rotate etherpad lite logs
/var/log/etherpad-lite/*.log {
        weekly
        missingok
        rotate 8
        compress
        notifempty
}
/var/log/etherpad-lite/apache2/*.log {
        weekly
        missingok
        rotate 8
        compress
        notifempty
}

Installation von Abiword für Import/Export (optional)

Für den erweiterten Import/Export muss die Textverarbeitungs-Software Abiword installiert werden – deren Binaries benutzt Etherpad zum Lesen und Schreiben von Dokumenten. In Ubuntu 10.04 ist Abiword in den Paketquellen vorhanden, deshalb reicht ein:

apt-get install abiword

Daraufhin muss in der /var/lib/nodejs/node-apps/etherpad-lite/settings.json der Pfad zum Abiword-Binary angepasst werden:

/* This is the path to the Abiword executable. Setting it to null, disables abiword.
     Abiword is needed to enable the import/export of pads*/
  "abiword" : "/usr/bin/abiword",

Nach einem Neustart mittels

stop etherpad-lite
start etherpad-lite

stehen die erweiterten Import-/Export-Funktionen zur Verfügung – dann kann ein Pad beispielsweise auch als PDF exportiert werden.

Abschluss

Etherpad Lite ist meiner Meinung nach ein sehr nützliches Tool, um gemeinsam Dokumente zu bearbeiten, Protokolle und To-Do-Listen zu erstellen usw. – was durch die Export-Funktion in viele Formate sehr gut ergänzt wird. Es existieren auch bereits viele Bibliotheken und Plugins, welche die HTTP-API von Etherpad nutzen, um Etherpads in eigenen Applikationen bequem einzubinden – Libraries für Ruby, PHP, ein jQuery-Plugin, ein Drupal-Modul (im Entwicklungsstadium) und viele mehr.

Ein Hinweis zum Schluss: diese Anleitung stellt sicher kein Optimum dar – jedoch war es mir wichtig, Node.JS sowie NPM nicht als root-User zu installieren. Deshalb weicht diese Anleitung zum Teil von den meisten im Netz zu findenden Anleitungen ab. Verbesserungsvorschläge nehme ich gern per Kommentar oder E-Mail entgegen!

Quellen und weiterführende Links:

WebOS FOSDEM schedule app for 2011 released

I submitted it to Palm yesterday, today it was reviewed and published: the FOSDEM (Free and Open source Software Developers’ European Meeting, taking place on February 5th and 6th in Brussels) schedule app for WebOS. You can install it on your WebOS device easily by following the link on your WebOS device or searching it in the official Palm App catalog. Like last year, it’s mainly an application for planning your FOSDEM visit and have a handy offline-working list of the schedule on your WebOS device.

The functionality has grown over the last version. You can now mark items as favorite and switch to the list of your favorites. This should make planning easier. You can also switch to a view with all events in the future – making it easy to see what talks are next. The search functionality is now improved. Also new is a “Feeds” function where you can have a look at FOSDEM website news as well as various identi.ca and Twitter channels. There are also two new maps included. The application is localized for English and German, but the schedule and feed items of course are all English.

Under the hood many parts of the code was rewritten and/or improved. There’s still room for improvement, but the performance should be now better and many bugs should be fixed.

The application is released as free and open source software under the GPL v3. You can find the source code, GIT repository, bug tracker, the .ipk package and more at forge.webpresso.net.

Always feel free to share ideas, improvements, bug reports and your opinion. Just leave a comment or use the bug tracker (sorry, but registration is required to avoid spam).

Navit: eine freie Navigationslösung für den Palm Pre und WebOS

Mittlerweile ist die freie Navigationssoftware Navit via Preware für WebOS verfügbar. Zuvor war die Anwendung einige Wochen nur über den separaten Testing-Feed erreichbar. Navit ist für verschiedene Plattformen verfügbar und wurde nun auch auf WebOS portiert. Die Software kann Kartenmaterial von OpenStreetMap sowie spezielle proprietäre Kartendaten verarbeiten.

Da es bisher – jedenfalls für europäische WebOS-Nutzer – keine Navigationslösung gibt, ist Navit besonders interessant. Ich muss allerdings gleich vorab warnen: Navit funktioniert zwar mittlerweile, ist jedoch – abhängig von den geladenen Kartendaten – recht langsam und noch nicht wirklich benutzerfreundlich.

Die Installation ist recht einfach – jedoch ist zwingend WebOS 1.4.5 erforderlich! Ist diese Voraussetzung erfüllt, einfach folgende Schritte ausführen:

  1. Falls noch nicht geschehen, muss Preware installiert werden.
  2. In Preware unter “Komplette Liste” bzw. “Verfügbare Pakete” nach “Navit” suchen und die Anwendung installieren. Für die Anwendung müssen zwei Abhängigkeiten mit installiert werden: “speechd”, eine Sprachsynthese-Bibliothek, sowie “locale” für die Internationalisierung.
  3. Nun muss Navit gestartet werden. Startet die Anwendung nicht, auch nicht nach einem Geräteneustart, liegt das recht wahrscheinlich an einem Fehler von Palm im WebOS-Update auf 1.4.5 (hier näher beschrieben). Die einfachste Lösung des Problems: es muss der “Emergency Fstab Fixer” via Preware installiert werden. Nach der Installation muss der Neustart des Telefons bestätigt werden – danach sollte Navit zumindest starten.
  4. Nach dem Start von Navit sind noch keine Kartendaten vorhanden, da diese nicht mitgeliefert werden. Am Einfachsten installiert man sich das freie Kartenmaterial von OpenStreetMap. Diese können mit verschiedenen Tools detailliert für bestimmte Areale heruntergeladen werden – für viele Länder gibt es vorgefertigte Links beim Navit-Projekt. Die Karten für Deutschland werden mit ~490MiB angegeben – bei mir waren es im Endeffekt rund 670MB, die man im Pre erst einmal freischaufeln muss. Zum Download erhält man eine *.bin-Datei, die Navit lesen kann. Nach dem Klick auf den Link kann es einen Moment dauern, bis der Download startet. Recht einfach ist jedoch auch der Download eines bestimmten Areals über den Planet Extractor, durch die Auswahl eines kleineren Bereichs kann man Platz auf dem Gerät sparen.
  5. Nun muss der Pre per USB-Modus an den PC angeschlossen werden. Die heruntergeladene *.bin-Datei muss nun in den Ordner appdata/org.webosinternals.navit/maps kopiert werden, der beim ersten Start von Navit erzeugt wurde (und leer sein müsste).
  6. Nach dem Entfernen des Pre vom PC kann Navit gestartet werden und sollte die Karten anzeigen. Die Performance könnte – wie bereits erwähnt – besser sein, jedoch wird berichtet, dass bei kleineren Kartenausschnitten und/oder weniger enthaltenen POIs im Kartenmaterial die Performance deutlich steigt. Hier kann man sicherlich noch etwas Performance einsparen.

Eine englische Installationsanleitung sowie ein paar kurze Bedienungshinweise gibt es bei webos-internals.org, die auch die Anwendung auf WebOS portiert haben sowie für die Entwicklung von Preware verantwortlich sind.

PRODROMUS, ein minimaler JavaScript-XMPP-Client

PRODROMUS Mini-XMPP-ClientAuf meiner Kontakt-Seite befindet sich schon eine Weile mein XMPP-MiniChat-Client “PRODROMUS”. Nun habe ich ihn endlich unter der AGPL veröffentlicht. “Prodromus” steht lateinisch für “Eilbote”.

PRODROMUS ist ein simpler XMPP-Client, der vollständig in JavaScript geschrieben ist. Er benutzt die großartige Bibliothek Strophe.js von Jack Moffit, um sich zu einem XMPP-Server zu verbinden und ermöglicht es somit dem Besucher, mit einer vorkonfigurierten Person via XMPP zu kommunizieren. PRODROMUS ist als Ergänzung zu einem Kontaktformular gedacht – er lässt sich in bestehende Websites einbinden und erweitert die Kontaktmöglichkeiten um Echtzeit-Kommunikation.

Eine kurze Installationsanleitung sowie die erforderlichen Voraussetzungen gibt es im Wiki.