Sonntag, 11. Oktober 2009

Perl

will gerade mal wieder ein Progrämmchen installieren.
In der INSTALL Datei heißt es:
For Perl package import scripts:
Perl Module: XML::DOM
Perl Module: DBI
Perl Module: DBD-mysql

So. Jetzt weiß man natürlich als normaler Benutzer
  • was "Perl" ist
  • wie man "Module installiert"
  • nachdem man sich zu CPAN vorgewühlt hat: dass es ein Programm "cpan" gibt, welches einem die Installation erheblich vereinfacht
  • was man korrigieren muss, wenn die Eingabe install DBD-mysql eine Fehlermeldung bekommt: "Warning: Cannot install DBD-mysql, don't know what it is.". Richtig: man muss "install DBD::mysql" eingeben. Weiß doch jeder, oder?
Glücklicherweise hatte ich dieses CPAN-Geraffel schonmal früher durchexerziert, so dass dieser Teil wenigstens nur 10 Minuten aufgehalten hat.
Nun rufe ich das Programm auf, das diese Module braucht. Was kommt?
Can't locate Connect.pm in @INC (@INC contains: /usr/lib/perl5/5.10.0/i586-linux-thread-multi /usr/lib/perl5/5.10.0 /usr/lib/perl5/site_perl/5.10.0/i586-linux-thread-multi /usr/lib/perl5/site_perl/5.10.0 /usr/lib/perl5/vendor_perl/5.10.0/i586-linux-thread-multi /usr/lib/perl5/vendor_perl/5.10.0 /usr/lib/perl5/vendor_perl .) at scripts/packages_xml_in line 4.

Mir reicht's schon wieder.
Ich wollte mich noch nie mit Perl beschäftigen. Wowereit.

Samstag, 10. Oktober 2009

apache2 mod_rewrite

Heute wollte ich ein Programm installieren, das ein Web-Interface zur Verfügung stellt, und dabei über eine .htaccess Datei auf die Apache RewriteEngine zugreift.

Ich habe Apache schon lange installiert, und auch schon etliche VirtualHosts für diverse Zwecke konfiguriert. Die RewriteEngine hatte ich zwar noch nie benötigt, aber nicht schlecht gestaunt, als das Programm (wpkgExpress) nicht lief.
Ok, wieder Rumsucherei, und im Wiki stand glücklicherweise "könnte mit .htaccess zu tun haben.

Um jetzt zu testen, ob das Modul mod_rewrite bei Apache installiert ist, sind auch schon kleinere Kopfstände notwendig, aber man bleibt ja eh gelenkig, wenn man Linux benutzt ;-}

Jetzt kommt's: mod_rewrite war nicht aktiv. Aber warum? In der (kruschtel, kruschtel) /etc/sysconfig/apache2 Datei war doch "rewrite" bei APACHE_MODULES eingetragen!

Wiederum durch Rumsucherei kam ich dahinter, dass es speziell mit SuSE zu tun haben könnte. Hier fand ich den Hinweis, doch einmal SuSEconfig laufen zu lassen. Und tatsächlich - jetzt geht's.

Sollte SuSEconfig tatsächlich seit Jahren nicht mehr gestartet worden sein? Wieder mal ein Linux-Mysterium.

Freitag, 9. Oktober 2009

vmware suspend

Jetzt bin ich schon wieder seit zwei Stunden am Rumbosseln.
Es geht darum, dass VMware Server 2 keine Möglichkeit eingebaut hat, beim Runterfahren die laufenden Clients in den Suspend-Zustand zu versetzen. Dadurch gibt es Lock-Files, die ein neues Starten der Clients verhindern.

Also rasch ein Script geklaut und wieder mal nachlesen müssen, wie man eigentlich ein Programm beim Shutdown starten lassen kann.
Ok, nach /etc/init.d kopieren und dann chkconfig -a vmsuspend laufen lassen.
Dann muss man noch nach rc5.d/ schauen (weiß man doch, oder?), ob dort die Datei K##vmsuspend mit einer kleineren Zahl als K##vmware vorhanden ist. Nicht gerade intuitiv, aber naja.

Da steht dann aber
lrwxrwxrwx 1 root root 9 8. Okt 15:17 K15vmware -> ../vmware
lrwxrwxrwx 1 root root 17 8. Okt 15:17 K16vmware-suspend -> ../vmware-suspend


Toll - das bedeutet: mein vmware-suspend Script wird aufgerufen, nachdem vmware beendet ist. So kann das natürlich nicht funktionieren, da mein Script ja noch vmware-Funktionen benutzen will.

Also wieder stundenlang nachgelesen, was LSB-Header sind und wie man damit die Reihenfolge steuern kann. Um es kurz zu machen: es klappt wieder mal nicht so, wie beschrieben. Es ist eine elende Rumprobiererei, weil das Konzept einfach von Fricklern ausgedacht wurde.

Warum ist das unter Windows eigentlich gar kein Thema?
Weil alle Dienste einfach die benötigten Dienste anfordern, so dass automatisch alle in der richtigen Reihenfolge geladen werden. So einfach kann es gehen.

Aber da ich nicht locker lasse ;-) habe ich es doch hinbekommen. Hier die Lösung:

#!/usr/bin/bash
# /etc/init.d/vmware-suspend
#
# chkconfig: 0356 19 07
# description: Stopping this service will suspend all running vmware guests
# (chkconfig vmware = 235 19 08)

### BEGIN INIT INFO
# Provides: vmsuspend
# Required-Start: $network VMware
# Should-Start:
# Required-Stop: VMware
# Should-Stop:
# Default-Start: 2 3 5
# Default-Stop: 0 6
# Short-Description: Suspends running vmware guests
# Description: Stopping this service will suspend all running vmware guests
### END INIT INFO

########################### syslog

SYSLOG=1
VERBOSE=0
LOGGER="/bin/logger"
FACILITY=`basename $0 | cut -d '.' -f1`

LOG() {
PRIORITY="`echo $* | cut -d ':' -f1`"
LOGMESSAGE="`echo $* | cut -d ':' -f2-`"
LOGMESSAGE="[$$]:$LOGMESSAGE"
if [ $VERBOSE ]; then
echo "`date '+%b %e %H:%M:%S'`: $LOGMESSAGE"
[ "$SYSLOG" = 1 ] && $LOGGER -t $FACILITY $LOGMESSAGE
else
[ "$SYSLOG" = 1 ] && $LOGGER -t $FACILITY $LOGMESSAGE
fi
}
########################### eof syslog

VMRUN_BIN=/usr/bin/vmrun

VM_TYPE=server
HOST="https://localhost:8333/sdk"

# vmx=$(echo ${VMX} | sed 's/ /\\ /g')
# vmx="${VMX// /\\ }"

# read username=.., password=..
. /root/.auth/vmware-auth


test -x $VMRUN_BIN || {
echo "$VMRUN_BIN not installed";
if [ "$1" = "stop" ]; then exit 0;
else exit 5; fi
}

. /etc/rc.status
rc_reset


case "$1" in
start)
echo -n "Starting vmsuspend (nothing to do) "
rc_status -v
;;

stop)
echo -n "vmsuspend: suspending vmware guests..."
# LOG LIST=$($VMRUN_BIN -T $VM_TYPE -h "$HOST" -u """$username""" -p """$password""" list 2>>/dev/null | grep "\.vmx")
for VMX in """$($VMRUN_BIN -T $VM_TYPE -h """$HOST""" -u """$username""" -p """$password""" list 2>>/dev/null | grep "\.vmx")"""
do
if [ -n "$VMX" ]
then
$VMRUN_BIN -T $VM_TYPE -h """$HOST""" -u """$username""" -p """$password""" suspend """$VMX"""
LOG "suspend $VMX (ExitCode=$?)"
fi
done
rc_status -v
;;

*)
echo "Usage: $0 {start|stop|}"
exit 1
;;

esac
rc_exit

Diese Datei (vmware-suspend) nach /etc/init.d schreiben und..
cd /etc/init.d
insserv -r
vmware-suspend
insserv -r vmware
insserv vmware
insserv
vmware-suspend
um die Aufruf-Reihenfolge festzulegen.

Das Script liest die Datei /root/.auth/vmware-auth ein. Diese sollte enthalten:
username=..
password=..

Nun werden beim Reboot/Shutdown des Host-Rechners alle laufenden VMs in den Suspend-Status gebracht.
Wenn man das unterlässt, bleiben evtl. .lck-Dateien übrig, die einen neuerlichen Start der VM verhindern.

Donnerstag, 8. Oktober 2009

linuxhaters

Ich habe gerade den linuxhaters Blog entdeckt.
Ich muss dazu sagen: ich habe den Namen linuxhasser nicht dort abgeguckt.

Aber es ist sicher kein Zufall, dass es mehr als einen Linux-Hasser auf der Welt gibt ;-)
Vermutlich gibt es solche Foren auch in weiteren Sprachen.

Frust!

Ich muss jetzt wirklich mal anfangen, mir meinen Frust mit Linux von der Seele zu schreiben.

Fast jedes Mal, wenn ich mit Linux etwas tun will, wird aus einem "mal eben schnell" ein viele Stunden oder gar Tage dauernder Frust. Da kann man eben zum Linux-Hasser werden :-\

Wenn es dann mal läuft, ist Linux wie ein Arbeitspferd, das zuverlässig auf seinem Acker seine Runden dreht.

Aber wehe, es ist eine Änderung nötig! Dann funktionieren die kleinsten Teilschritte oft nicht wie gedacht, und ich bin gezwungen, mich durch ellenlange, unverständlich geschriebene man-pages oder Internetforen zu wühlen. Wie viel Zeit habe ich schon verbraten, mich in Betriebssystem-Details einzulesen, die mich eigentlich überhaupt nicht interessieren! Ich will Lösungen - und bekomme von Linux immer weitere Probleme präsentiert.

Dieser Blog soll mir einerseits dazu dienen, ab und zu Dampf abzulassen (auch wenn das zusätzlich Zeit kostet). Andererseits will ich auch Lösungen für meine Problem(chen) posten, damit vielleicht andere etwas davon haben.

Ich bin seit über zwanzig Jahren Software-Entwickler (ich schreibe Programme für Windows), habe also durchaus Erfahrung mit Software und Betriebssystem-Macken.
Dennoch bin ich im Laufe der letzten 3-4 Jahre, seitdem ich mich auch mit Linux beschäftige, über so viele Fallen gestolpert, dass ich mich frage, wie ein Normal-User mit diesem Betriebssystem zurechtkommen soll.

Nichtsdestotrotz hat Linux seine Berechtigung, besonders wenn es um "Arbeitspferd"-Aufgaben im Serverbereich geht.

Wenn Linux aber den Sprung auf den Desktop des Normal-Users machen soll, muss sich noch einiges ändern. Unter anderem die Dinge, über die in diesem Blog berichtet werden wird.