libstdc++.so.5 unter Ubuntu 10.04 LTS 64bit

Fuer den Tivoli Storage Manager Client (tsm) 5.5.3 benoetigt man libstdc++.so.5 damit er funktioniert. Unter Ubuntu 10.04 LTS 64bit wird aber nur noch libstdc++.so.6 mitgeliefert. Um an die richtige Datei zu kommen muss man deswegen:

wget http://security.ubuntu.com/ubuntu/pool/universe/i/ia32-libs/ia32-libs_2.7ubuntu6.1_amd64.deb
dpkg-deb -x ia32-libs_2.7ubuntu6.1_amd64.deb ia32-libs
sudo cp ia32-libs/usr/lib32/libstdc++.so.5.0.7 /usr/lib32/
cd /usr/lib32
sudo ln -s libstdc++.so.5.0.7 libstdc++.so.5

(via)

Howto: virsh console

Bei XEN gibt es den praktischen Befehl xm console domU-name und man hat von der physikalischen Maschine eine Konsole zu der virtuellen.

KVM bringt mit dem Befehl virsh console maschinenname die gleiche Funktion ebenfalls mit. Damit das ganze funktioniert muss – zumindest bei Debian – noch etwas nachgeholfen werden.  In der /etc/inittab muss die folgende Zeile relativ am Ende einkommentiert und entsprechend angepasst werden (change 9600 to 115200) werden:

T0:23:respawn:/sbin/getty -L ttyS0 115200 vt100

Anschliessend noch in der /boot/grub/menu.lst in der Zeile die mit #kopt beginnt die folgenden Optionen anhaengen:

console=tty0 console=ttyS0,115200

und die Aenderungen mit dem Befehl update-grub uebernehmen.

Die erste Anpassung in der inittab bewirkt, dass man in ein fertig gestartetes Linuxsystem kommt. Die Anpassung mit der Kerneloption bewirkt, dass man auch vorher beim Systemstart bereits eine Konsole bekommt.

Hinaus kommt man dort  uebrigens wieder mit der Tastenkombination Strg+Alt Gr+9  … wie damals, good old telnet times.

bash Skript und Multicore Prozessoren

Wenn man viel mit bash-Skripten macht, kommt man oft an das Problem, dass man Multicore-Prozessoren nicht richtig ausreizen kann. Nehmen wir das Beispiel, dass man alle *.tif Bilder in einem Ordner mit Hilfe von imagemagick zu TIFF/JPEG komprimieren moechte. Das Skript:

for i in *.tif ; do convert $i -compress JPEG $i; done

macht dieses, ein Bild nacheinander. Man koennte das ganze nun schneller machen, indem man einfach jeden convert in eine Subshell packt:

for i in *.tif ; do convert $i -compress JPEG $i &; done

kommt dann aber sehr schnell in Schwierigkeiten, wenn dann nen Ordner mit z.B. 500 Bildern hat und dann auch 500 Subshells. Eine elegantere Loesung ist, eine maximale Anzahl von Prozessen anzugeben die nicht ueberschritten wird und dann abzuarbeiten. Dafuer laesst sich xargs gut benutzen. Wenn man z.B. maximal vier Prozesse haben moechte geht das mit:

find *.tif -print0 | xargs -0 -I {} -P 4 convert -compress JPEG {} {}

Dabei bedeuten die Parameter bei find:

  • -print0 -> print the full file name on the standard output, followed by a null character

und bei xargs:

  • -0 -> Input  items  are  terminated  by a null character instead of by whitespace
  • -I {} -> Replace string
  • -P 4 -> Run  up  to max-procs processes at a time

Der String replace wird genutzt um zweimal das gleiche Argument zu uebergeben. Arbeitet man mit -n 2 werden zwei aufeinanderfolgende Argumente uebergeben.