Montag, 14. Juni 2010

Blog::Moved

Nachdem ich meine Website auf Movable Type umgestellt habe, werde ich zukünftig dort bloggen und nicht mehr hier bei Blogger.com.

Durch die Umstellung ändert sich auch die URL für den RSS-Feed.

Ich bitte um Entschuldigung für die Unannehmlichkeiten.

Kurzbericht: Perl@Linuxtag 2010, Berlin (09.-12. Juni 2010)

Mein Kurzbericht: Perl@Linuxtag 2010, Berlin (09.-12. Juni 2010) befindet sich in meinem neuen Blog.

Sonntag, 28. März 2010

CouchDB 0.10.1 unter Ubuntu 8.04 LTS aus dem Quellcode installieren

Die freien Tage vor Ostern werde ich u.a. dafür nutzen, mich ein wenig in NoSQL bzw. NoSQL-Datenbanken einzuarbeiten.

Als ersten Schritt habe ich mir vorgenommen, das Buch CouchDB: The Definitive Guide durch zu arbeiten.

Dazu benötige ich zunächst eine möglichst aktuelle Version der CouchDB.

Nachfolgend die Schritte, um die aktuelle Version 0.10.1 auf einem Ubuntu 8.0.4 LTS aus den Sourcen in das Verzeichnis /opt/couchdb-0.10.1 zu installieren. (Zusätzliche Software wird gemäß Filesystem Hierarchy Standard in /opt installiert.)

Schritt 1: Dependencies für CouchDB installieren


$ sudo apt-get install -y automake autoconf libtool help2man
$ sudo apt-get install -y build-essential erlang libicu-dev libmozjs-dev libcurl4-openssl-dev


Schritt 2: Aktuelle curl-Version installieren

CouchDB 0.10.1 erwartet curl ab Version 7.15.5. Installiert ist leider nur 7.15.4. Eine aktuellere Version (7.20) wird daher nach /opt/curl-7.20 installiert.

$ sudo mkdir /opt/curl-7.20
$ sudo ln -s /opt/curl-7.20 /opt/curl

$ cd /tmp
$ wget http://curl.haxx.se/download/curl-7.20.0.tar.bz2
$ tar -xjvf curl-7.20.0.tar.bz2
$ cd curl-7.20.0/

$ export LANG=C

$ ./configure --prefix=/opt/curl-7.20
$ make
$ make test
$ sudo make install

$ /opt/curl/bin/curl --version
curl 7.20.0 (i686-pc-linux-gnu) libcurl/7.20.0 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.1
Protocols: dict file ftp ftps http https imap imaps ldap pop3 pop3s rtsp smtp smtps telnet tftp
Features: IDN IPv6 Largefile NTLM SSL libz


Schritt 3: Aktuelle Erlang-Version installieren

CouchDB 0.10.1 erwartet Erlang ab Version 5.6.5 (R12B05). Installiert ist leider nur 5.5.5. Eine aktuellere Version (5.7.5, R13B04) wird daher nach /opt/erlang-R13B04 installiert.

$ sudo mkdir /opt/erlang-R13B04
$ sudo ln -s /opt/erlang-R13B04/ /opt/erlang

$ cd /tmp
$ wget http://www.erlang.org/download/otp_src_R13B04.tar.gz
$ tar -xzvf otp_src_R13B04.tar.gz
$ cd otp_src_R13B04
$ less INSTALL.md
$ export LANG=C
$ ./configure --prefix=/opt/erlang-R13B04
$ make
$ sudo make install

$ /opt/erlang/bin/erl -version
Erlang (ASYNC_THREADS,HIPE) (BEAM) emulator version 5.7.5


Schritt 4: Aktuelle CouchDB-Version installieren

Nachdem alle Abhängigkeiten erfüllt sind, kann endlich CouchDB installiert werden. Der Sourcecode kann über diverse Spiegelserver bezogen werden.

$ sudo mkdir /opt/couchdb-0.10.1
$ sudo ln -s /opt/couchdb-0.10.1/ /opt/couchdb

$ cd /tmp
$ wget http://..../apache-couchdb-0.10.1.tar.gz

$ tar -xzvf apache-couchdb-0.10.1.tar.gz
$ cd apache-couchdb-0.10.1

$ export LANG=C
$ export PATH=/opt/curl/bin:$PATH
$ export LDFLAGS=' -L/opt/curl/lib'
$ export ERL=/opt/erlang-R13B04/bin/erl
$ export ERLC=/opt/erlang-R13B04/bin/erlc

$ ./configure --prefix=/opt/couchdb-0.10.1
$ make
$ sudo make install


Schritt 5: CouchDB User anlegen

Aus Sicherheitsgründen sollt CouchDB nicht als root, sondern über einen geeigneten eigenen Account gestartet werden.

$ sudo adduser --system --home /opt/couchdb/var/ --no-create-home \
--shell /bin/bash --group --gecos "CouchDB Administrator" couchdb

$ sudo chown -R couchdb:couchdb /opt/couchdb/var/



Schritt 6: CouchDB starten und ausprobieren


$ sudo /opt/couchdb/etc/init.d/couchdb start

$ /opt/curl/bin/curl -X GET http://127.0.0.1:5984/
{"couchdb":"Welcome","version":"0.10.1"}


Die graphische Administrationsoberfläche Futon steht jetzt via http://127.0.0.1:5984/_utils/ zur Verfügung.


Siehe auch:

Sonntag, 7. März 2010

Perl@CeBIT2010

Perl@CeBIT2010 war erfolgreicher als ich erwartet habe:

Der Stand war fast durchgehend gut besucht und wir konnten viele gute Gespräche mit Entscheidern und Entwicklern führen.

Renée Bäcker hat hier erstklassige Vorarbeit geleistet: Professionelle Broschüren, Flyer, Give-Aways, T-Shirts und überhaupt super Organisation. Danke.

Neben den Enterprise-Produkten OTRS und Foswiki wurden die Perl-IDE Padre, coole moderne Module wie Moose, DBIx::Class, Catalyst, Perl::Critic, Perlerweiterungen CPAN und natürlich die Perl-Community vorgestellt.

Ich war nur an zwei Tagen (Freitag und Samstag) am Messestand dabei und bewundere die Leistungs- und Leidensfähigkeit der Mitstreiter, die die ganze Woche am Stand verbracht haben. Es ist tierisch anstrengend, hat aber auch viel Spass gemacht.

Am Freitag waren überwiegend Besucher aus dem Firmenumfeld am Messestand; am Samstag mehr Besucher aus dem privaten Umfeld, aber auch viele Entwickler.

Am ersten Tag (Freitag) kamen die Besucher weitestgehend von selbst an den Stand und wir konnten sehr viele gute Einzelgespräche führen. In diesen Gesprächen konnten wir die Stärken und Einsatzbereiche von Perl aufzeigen und die coolen Neuerungen vorstellen, aber auch konkrete Fragen wie "Welches Modul eignet sich für mein Problem" beantworten.

Firmen, die Perl im Bereich Sicherheit und Firewall einsetzen, waren begeistert von Perl::Critic.

Andere Firmen, die mehrere Programmiersprachen einsetzen, waren positiv überrascht von Padre und wollen die IDE Ihren Entwicklern vorstellen,
so daß zukünftig nur noch eine IDE für alle Sprachen auf allen verwendeten Betriebssystemen gepflegt werden muss. Hier hat Sewi, einer der Padre-Entwickler, wirklich gute Arbeit geleistet.

Viele Entwickler wussten gar nicht, wie sehr sich Perl weiterentwickelt hat. Auch Entwickler, die einen eher negativen Eindruck von Perl gewonnen haben, konnten positiv durch Moose, DBIx::Class und Catalyst überrascht werden.

Wir konnten auch mit vielen jungen Menschen sprechen, die bisher noch nicht mit der dynamischen Programmiersprache Perl in Kontakt gekommen sind.

Überrascht hat mich in den Gesprächen mit Entwicklern und Entscheidern, wo und wie umfangreich Perl eingesetzt wird. Die Nachfrage nach Perl-Programmierern und auch Perl-Trainings ist höher als ich vermutet habe.


Am Samstag war der Stand zunächst schlecht besucht. Daher haben Gabor und ich uns auf den Hauptgang gestellt, Prospekte verteilt und Besucher direkt angesprochen. Viele haben erfreut reagiert und umgehend den Stand besucht. Es waren sogar so viele, daß leider nicht mehr alle Besucher am Stand bedient werden konnten. Aber die Botschaft ist rübergekommen: Perl ist da und hat sich weiterentwickelt.


Gegen Ende der CeBIT haben wir uns noch kurz zusammengesetzt und den Verlauf den Messe, unsere Erfahrungen und auch Fehler besprochen. Es wird auch in den nächsten Jahren wieder Perl@CeBIT2010 geben und es wird noch besser.

Siehe auch:

Donnerstag, 7. Januar 2010

Goodbye Google Analytics

Gerade eben habe ich den Java-Script-Code für Google Analytics von meinen Websites (Thomas-Fahle.de, Perl-Suchmaschine.de, Perl-HowTo.de und dieses Weblog) entfernt.

Wer das Thema Datenschutz Ernst nimmt, sollte Googles Sammelwut einfach nicht unterstützen.

Ich entschuldige mich hiermit bei allen Lesern und Besuchern für den Einsatz von Google Analytics.

Freitag, 1. Januar 2010

Eigene Ubuntu 8.04.3 Desktop Live CDs erstellen

Vor ein paar Tagen habe ich eine Modern Perl Ubuntu 8.04.3 LTS Live DVD erstellt und zum Download bei SourceForge eingestellt.

Das Erstellen von LiveCDs auf der Basis von Ubuntu ist gut dokumentiert (LiveCDCustomization - How to Customise the Ubuntu Desktop CD) und eigentlich nicht besonders schwierig.

Hier meine Arbeitsschritte auf einem Ubuntu 8.04.3 Desktop System zur Erzeugung eines angepassten Ubuntu 8.04.3 Desktop System. Für andere Varianten wie Server-CD oder Alternate-CD oder andere Versionen funktioniert die hier aufgezeigte Vorgehensweise nicht. Weiterhin gehe ich hier nicht auf das Erstellen eines angepassten Kernels ein.

squashfs-tools und genisoimage installieren


$ sudo apt-get update
$ sudo apt-get install squashfs-tools genisoimage


Arbeitsverzeichnisse erstellen


$ sudo mkdir /opt/customize
$ cd /opt/customize
$ sudo mkdir /opt/customize/mnt
$ sudo mkdir /opt/customize/extract-cd


Anschließend ein Ubuntu 8.04 Desktop ISO-Image downloaden und im Verzeichnis /opt/customize ablegen und das ISO-Image mounten


$ sudo mount -o loop /opt/customize/ubuntu-8.04.3-desktop-i386.iso /opt/customize/mnt


den Inhalt der CD extrahieren,


$ sudo rsync --exclude=/casper/filesystem.squashfs -a mnt/ extract-cd


und das gepackte Datei-System entpacken.


$ sudo unsquashfs mnt/casper/filesystem.squashfs
$ sudo mv squashfs-root edit


Im Verzeichnis edit befindet sich nun der Inhalt des ISO-Images und kann nach einem chroot bearbeitet werden.

Gerätedateien des Hosts an die chroot-Umgebung weiterreichen.


sudo mount --bind /dev/ edit/dev


Auch innerhalb der chroot-Umgebung soll eine Netzwerkverbindung möglich sein. Daher werden die Netzwerkeinstellungen des Hosts in das zu editierende System kopiert.


$ sudo cp /etc/resolv.conf edit/etc/
$ sudo cp /etc/hosts edit/etc/


Damit graphische Programme innerhalb der chroot-Umgebung laufen können, muss der entsprechende Socket weitergeleitet werden:


$ sudo mkdir -p edit/tmp/.X11-unix
$ sudo mount --bind /tmp/.X11-unix edit/tmp/.X11-unix
$ xhost +local:


Nach einem chroot in das edit Verzeichnis


$ sudo chroot edit


muss noch die Umgebung eingestellt,


# export HOME=/root
# export LC_ALL=C
# export DISPLAY=:0


einige Systemverzeichnisse von Hand eingehängt,


# mount -t proc none /proc
# mount -t sysfs none /sys
# mount -t devpts none /dev/pts


und eine eindeutige ID vergeben werden.


# dbus-uuidgen > /var/lib/dbus/machine-id


Jetzt kann das System nach eigenen Vorstellungen angepasst werden:


# apt-get update
# dpkg-query -W --showformat='${Package}\n' | sort | less
# apt-get purge Package-Name
# apt-get install Package-Name
# apt-get install build-essential


Sobald alle Änderungen vorgenommen wurden, müssen noch Aufräumarbeiten innerhalb der chroot-Umgebung


# apt-get clean
# apt-get autoremove

# rm /var/lib/dbus/machine-id

# rm /etc/hosts
# rm /etc/resolv.conf

# rm -f /tmp/*
# rm /root/.viminfo

# export HISTSIZE=0
# rm /root/.bash_history

# umount /proc
# umount /sys
# umount /dev/pts
# exit


und außerhalb der chroot-Umgebung durchgeführt werden.


$ sudo umount edit/dev
$ sudo umount edit/tmp/.X11-unix
$ sudo rm -rf edit/tmp/.X11-unix


Nach der Erstellung des Manifests


$ chmod +w extract-cd/casper/filesystem.manifest
$ sudo chroot edit dpkg-query -W --showformat='${Package} ${Version}\n' > extract-cd/casper/filesystem.manifest
$ sudo cp extract-cd/casper/filesystem.manifest extract-cd/casper/filesystem.manifest-desktop
$ sudo sed -i '/ubiquity/d' extract-cd/casper/filesystem.manifest-desktop
$ sudo sed -i '/casper/d' extract-cd/casper/filesystem.manifest-desktop


wird das Dateisystem komprimiert,


$ sudo rm extract-cd/casper/filesystem.squashfs
$ sudo mksquashfs edit extract-cd/casper/filesystem.squashfs -nolzma


MD5-Prüfsummen erneut kalkuliert


$ cd extract-cd
$ sudo rm md5sum.txt
$ sudo find -type f -print0 | sudo xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee md5sum.tx


und das neue ISO-Image erzeugt.


$ sudo mkisofs -D -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-8.04.3-desktop-i386-custom.iso .


That's it.

Donnerstag, 31. Dezember 2009

Perl-HowTo.de: Artikelübersicht 2009



Siehe auch die Perl-HowTo.de: Artikelübersicht 2008.

Perl-HowTo.de: Getting Things done with Perl. Tipps, Tricks und Anleitungen ist eine Website, die von mir betrieben wird, und sich überwiegend an angehende Perl-Programmierer wendet.