24 Nov 2011

Since Ubuntu 11.04 IPMI “no signal”

Author: Heiko | Filed under: Linux

Seit Ubuntu 11.04 verliert die IPMI das Signal zu den Servern. Dies hat etwas mit dem Framebuffer zu tun.

Um dies zu lösen muss ein Kernelparamerter eingefügt werden:

vim /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT=”nomodeset”
update-grub

Nach einem reboot läuft die IPMI wie gewohnt.

Dieser Fehler tritt auf, sobald man die Credentials mit nova-manage für ein Projekt erstellen will.

/usr/bin/nova-manage project zipfile –project=”test” –user=”admin” –file=”/root/creds/novacreds.zip”

in /var/log/nova/nova-manage.log

CRITICAL nova [-] ‘ascii’ codec can’t encode character u’\xfc’ in position 28: ordinal not in range(128)

Sollte dieser Fehler auftreten, die Locale’s des system auf us_US umstellen!

10 Sep 2011

Travis-CI the new distribute build system

Author: Heiko | Filed under: Programming, Rails, Ruby

Travis-CI ist ein Open Source Projekt, welches dieses Jahr das Licht der Welt erblickt hat.
Inzwischen wird Travis-CI von mehr als 1500 Projekten genutzt. Darunter sind auch bekannte Open Source Projekte wie rspec oder Rails.
Anfangs konnte man Projekte, die mit Ruby geschrieben wurden, in verschiedenen Versionen(1.8, 1.9) testen. Inzwischen ist aber auch Erlang, Java Script und Clojure möglich.
Da die Community des Projektes stetig wächst, werden inzwischen auch andere Spachen wie Python in Angriff genommen.

Schaut einfach mal vorbei vielleicht erspart euch dies ja die Einrichtung eines CI-Servers.

IRC: irc.freenode.net #travis
URL:

5 Sep 2011

FrozenRails2011

Author: Heiko | Filed under: Rails

Ich freue mich auf Helsinki und die diesjährige FrozenRails. Also Leute, ihr werdet mich dort antreffen :)

20 Jun 2011

Request tracker login failure after upgrade to 3.8.7

Author: Heiko | Filed under: Linux

Nach einem Upgrade des Ubuntu(lucid) maintainer packages auf 3.8.7 taucht bei jedem Login der gleiche Fehler auf:

Can’t call method “_Accessible” without a package or object reference at /usr/share/perl5/DBIx/SearchBuilder/Record.pm line 423.

Nach längerem suchen ist mir nun aufgefallen das RT einen kleinen und unscheibaren Warning wirft.

[Tue Jun 21 06:31:30 2011] [warning]: Use of inherited AUTOLOAD for non-method RT::User::sha256() is deprecated at /usr/share/request-tracker3.8/lib/RT/User_Overlay.pm line 1043. (/usr/share/request-tracker3.8/lib/RT/User_Overlay.pm:1043)

Nach längerem suchen ist mir aufgefallen, das es diese Funktion nicht mehr gibt.
Also ersetzt man den Teil:

        # The truncated SHA256(salt,MD5(passwd)) form from 2010/12 is 40
        # characters long
        my $hash = MIME::Base64::decode_base64($stored);
        # The first 4 bytes are the salt, the rest is substr(SHA256,0,26)
        my $salt = substr($hash, 0, 4, "");
       - return substr(sha256($salt . Digest::MD5::md5($value)), 0, 26) eq $hash;
      + return substr(Digest::SHA::sha256($salt . Digest::MD5::md5($value)), 0, 26) eq $hash;

Schon ist das Problem gelöst.

Da ich mal wieder diesbezüglich nichts gefunden habe, dachte ich es ist mal wieder Zeit für einen Blog Eintrag.

25 Mai 2011

New Version of Xen Ruby Gem

Author: Heiko | Filed under: Rails, Ruby

Ich habe gestern eine neue Version meines xen-ruby-Gems released und bei RubyGems gepushed.
Den Source ist unter Github zu finden.

Ich werde in der Readme noch eine genaue Feature-Liste hinterlegen. Hinzugekommen ist ein Exceptionhandling das von dem System::Command Object bearbeitet und abgehandelt wird.

Ich werde in Zukunft auch hier die Release Nodes posten.

Falls Fragen oder Anmerkungen zu dem Gem bestehen, einfach den Guthub Issue-Tracker nutzen oder hier schreiben :) .

10 Mrz 2011

Hetzner partition size greater then 2TB

Author: Heiko | Filed under: Linux

Hetzner bietet das installimage-skript um mit Hilfe der Rescue-Console ein neues OS zu installieren.
Allerdings gibt es Probleme wenn man eine Partition größer als 2 TB erstellen will. Die Ursache liegt an dem verwendeten Disk-Label (MSDOS), welches Hetzner per Default verwendet (Umstellung nicht möglich).
Dieses kann nur Speicherbereiche 2^32-1 Blöcke adressieren, genauer 1,99TB. Somit muss nachträglich das Disklabel geändert und einige weitere Schritte unternommen werden.

Als erstes den Boot in die Rescue-Console!

Im Anschluss ändern wir das Disklabel.

Achtung!!!
Der MBR und die Partitionstabelle gehen dadurch verloren.

parted /dev/sda mklabel gpt


Nun ist das neue Disk-Label gpt und mit

parted /dev/sda print

ist zu sehen, das keine Partitionen mehr in der neuen Partitionstabelle stehen.


Der nächste Schritt ist testdisk. Testdisk findet verloren gegangene Partitionen wieder und kann diese in die momentan verwendete Tabelle schreiben.

testdisk /dev/sda

Alle Partitionen die Testdisk findet, sollten wieder in die neue Partitionstabelle geschrieben werden.

Nun muss eine zusätzliche Partition erstellt werden für gpt.

parted /dev/sda mkpart primary START END

Im Anschluss muss für diese Partition das Boot-Flag gesetzt werden.

Im Beispiel hier wird Grub verwendet.

parted /dev/sda set NUMBER bios_grub on


Das Ziel ist nahe :) . Nun muss die Tabelle noch umgeschrieben werden um den MBR korrekt zu erstellen.

apt-get install gptsync
gptsync /dev/sda


Nun Sollte etwas in der Art erscheinen wenn man fdisk -l aufruft.

Device Boot Start End Blocks Id System
/dev/sda1 1 267350 2147483647+ ee GPT
+ die anderen Partitionen

Nun müssen wir die Grub-Config und MBR noch korrekt erzeugen.
Hierfür mounten wir die erforderlichen Devices.

mount /dev/sda3 /mnt # Root Partiton
mount /dev/sda2 /mnt/boot # Boot Partition
mount –bind /sys /mnt/sys
mount –bind /proc /mnt/proc
mount –bind /dev /mnt/dev

und wechseln via chroot nach /mnt/

chroot /mnt

Nun noch ein

grub-install /dev/sda

reboot !

Nun sollte das System wie gehabt booten und Partitionen > 2TB anlegen lassen.
Ich hoffe es hilft, denn Hetzner bietet diesbezüglich keinen Support an.

1 Mrz 2011

ruby xen gem

Author: Heiko | Filed under: Ruby

Am Freitag haben Clemens und ich mal begonnen ein Gem für die Steuerung von Xen zu entwickeln.

Die meisten Tasks sind implementiert, es hakt zwar noch bisschen mit dem erstellen einer komplett neuen Instanz, was ich aber die Woche noch fixen werde.
Die Dokumentation muss ich auch noch erweitern ;) .

Die Sourcen sind zu finden unter git://github.com/foexle/ruby-xen.git.
Würde mich um Feedback freuen.

In den nächsten Wochen, werde ich das Gem noch erweitern, sodass noch Backups (LVM-Snapshots) gemacht werden können.

Da dies nur ein Schnellschuss sein sollte, werde ich versuchen das ganze noch auf die Libvirt-Api zu portieren. Sodass es ein Gem zur allg. Steuerung von virtualisierten System gibt.

23 Feb 2011

Magic caching with varnish

Author: Heiko | Filed under: Linux

Caching ist eine sehr gute Sachen für Seiten, die dafür geeignet sind.
Das heißt zum Beispiel Landingpages, bei denen der Inhalt relativ statisch ist oder sich nicht so oft ändert.

Varnish ist eine Möglichkeit von vielen, aber ich hab bisher sehr gute Erfahrungen damit gemacht. Die ACL mit der man Varnish konfiguriert, ist sehr einfach zu verstehen und sehr dynamisch. Sogar eine Möglichkeit des Balancings ist möglich.

Der Varnish sitzt noch vor dem Webserver das heißt, jede Anfrage an Port 80 geht als erstes an den Varnish und nur bei bedarf wird der Request weiter geleitet an den Webserver.
Dies verringert, wenn richtig konfiguriert, die Last des Servers enorm, da viel im Ram vorgehalten wird.

Ausnahmen was in den Cache kommt und was nicht, kann anhand der URI oder verschiedenen anderen Krieterien, wie Cookie oder HTTP-Header, unterschieden werden. Wie lange etwas im Cache liegen soll bevor der Varnish das Backend (Webserver) fragt ob der Inhalt noch aktuell ist, kann ebenfalls genau definiert werden.

Viele Dinge sind möglich ich empfehle jedem, der sein Servercluster horizontal skalieren will, erst einmal zu prüfen ob man nicht mit Caching Last von den App-Server bekommt.

Demnächst wenn ich mal wieder Zeit habe, werde ich zu diesem Thema ein kleine Einführung in die Konfiguration des Varnish geben.

23 Feb 2011

Upgrade Ubuntu 8.04 Xen vm to 10.04

Author: Heiko | Filed under: Linux

Das Tutorial basiert auf Xen 3 und Xen 4. Die Schritte sind bei beiden Xen-Versionen identisch.

Sollte die VM nicht gestartet werden können aus irgendwelchen Gründen (Umzug auf einen anderen Host oder ähnliches), so muss man noch ein paar Schritte im Vorfeld durchführen.
Dies kann übersprungen werden, sollte ein direkter Zugriff auf die VM per SSH möglich sein.

Als erstes Mounten der entsprechenden Verzeichnisse:

mount /path/to/image /mnt
mount -o bind /proc /mnt/proc
mount -o bind /sys /mnt/sys
mount -o bind /dev /mnt/dev
mount -o bind /dev/pts /mnt/dev/pts

Im Anschluss kommt der chroot zum Einsatz :) .

chroot /mnt

Nun kann mit dem Distupgrade begonnen werden.

vi /etc/apt/sources.list

:%s/hardy/lucid
:wq

bitte beachten, dass die : den VI-Kommandointerpreter startet !

Im Anschluss

apt-get update
apt-get dist-upgrade

An dieser Stelle können natürlich Fehler auftreten, da es ein sehr großer Versionssprung ist.
Eigentlich ist das falsch ausgedrückt, denn es sind normalerweise keine Fehler sondern fehlende Pakete.
Man muss einfach nur den Anweisungen folge leisten, in der Regel hilft schon ein

apt-get install -f

um die fehlenden Pakete zu installieren.

Als nächstes muss der aktuelle Kernel installiert werden

apt-get install linux-image-2.6.35-23-server linux-headers-2.6.35-23-server

dabei wird zwar update-grub ausgeführt, allerdings wird manchmal keine /boot/grub/menu.lst erstellt.
Falls diese nicht existiert, einfach anlegen mit den entsprechenden Inhalten

default 0
timeout 2

title Ubuntu 10.04 LTS
root (hd0,0)
kernel /boot/vmlinuz-2.6.35-23-server root=/dev/sda2 ro
initrd /boot/initrd.img-2.6.35-23-server

title Ubuntu 10.04 LTS (Single-User)
root (hd0,0)
kernel /boot/vmlinuz-2.6.35-23-server root=/dev/sda2 ro single
initrd /boot/initrd.img-2.6.35-23-server

Wenn das nun geschafft ist, müssen wir noch eine Kleinigkeit anpassen in der nativen Xen-Konfigurationsdatei der DomU anpassen.

bootloader = ‘/usr/lib/xen-default/bin/pygrub’

natürlich muss der korrekte Pfad angegeben werden.
Zusätzlich muss darauf geachtet werden das unter der disk [ ... ] als erstes die root-disk steht dann erst swap und weitere.

Das wars schon :)