OwnCloud könnte mal richtig toll werden. Im Moment ändert sich jedoch alle naselang die Webseite, das Aussehen, die Funktionen.. also alles. Da auch ständig Sicherheitslücken bekannt werden, und einen Patch den nächsten jagt, sollte man hier stets auf die neuste Version achten.

Dazu gibt es im Adminbereich eine schöne Funktion, welche einem anzeigt ob man die aktuelle Version hat. Das wollten wir nun automatisch wissen, um uns nicht ständig auf der Admin-Seite einloggen zu müssen.

Die Funktion von der Seite stellt OC_Updater::check() aus lib/updater.php. Dabei wird ein String zusammen aus Version, Installationsdatum, letztes Updatedatum und Update-Kanal erstellt.

Die Daten werden dabei mit “x” separiert. Auch der Versionsstring ist durch das “x” in major, minor und nochmalminor getrennt. Aus Version “4.90.4” wird zum Beispiel “4x90x4”.

Ich habe keine Ahnung ob es da eine offizielle API Doku für gibt (Owncloud hat gerade die ganze Webseite umstruktuiert und viele Suchmaschinentreffer gehen gerade ins Leere), doch habe ich folgendes (im Moment) beobachten können:
– So lange die Anzahl der erwarteten “x”e im String ist, spuckt der Server also eine Antwort aus.
– Ist in der XML-Antwort keine Version angegeben ist alles ok.
– Ist ein Versionsstring angegeben unterscheidet sich die aktuelle Version mit der empfohlenen aus dem “Update-Kanal” (wobei auch hier “stable” als “default”-Kanal gegeben scheint)

So genügt zum Beispiel der String “4x90x4xxxx” für einen Request.

Achtung: Major-Versionssprünge werden nicht als neue Version angekündigt. 4.90.4 wird z.b. als aktuell gewertet, auch wenn bereits 5.0.0 verfügbar ist.

Und so sieht das ganze als schneller Hack für ein Nagios Script aus:

#!/bin/bash
#Reminder: Nagios return codes: 0 OK, 1 WARN, 2 CRIT, 3 UNKNOWN
#Reminder2: Full “featured” version request example: http://apps.owncloud.com/updater.php?version=5x0x0x1356382022.183×1363606253.8263xstablex

VER=`grep version /pfad/zur/owncloud/config/config.php | sed ‘s/[^0-9.]*//g’`

if [[ “${#VER}” > 0 ]]; then
#Replace all matches of . with x
VERSNIPPED=${VER//./x}
APPURL=”http://apps.owncloud.com/updater.php?version=””$VERSNIPPED””xxxx”

NEWVER=`wget -qO – “$APPURL” | grep “” | sed ‘s/[^0-9.]*//g’`

if [[ $? == 0 ]];then
if [[ ${#NEWVER} > 0 ]]; then
echo “New version: $NEWVER”
exit 2
else
echo “Version $VER is up to date”
exit 0
fi
else
echo “Could not wget version request from apps.owncloud.com”
exit 2
fi
else
echo “Could not parse local version from config.php”
exit 3
fi

..funktioniert vermutlich so nur ein paar Monate. Das Prinzip ist aber klar 🙂

Die Tage aus dem Schrank gezogen und nebst Expansion Set MOD T2x – Shadows Of The Metal Age komplett unter Wine 1.4 durch gespielt 🙂

  • Der Installer war ein wenig zickig
  • taskset ist beim Multicore nötig
  • Videos bringen das Spiel zum Absturz (cfg Hack und Videos manuell anschauen, z.b. mit mplayer)

Das ist eigentlich auch schon alles gewesen 🙂 Nicht einmal ein DLL Override ist nötig.


Ich hatte extrem viel Spaß dieses tolle Spiel erneut durch zu spielen.


Noch viel mehr Spaß hatte ich mit T2x. Das ist nicht nur ein MOD sondern wirklich ein vollwertiges Expansion Set, welches ich sogar besser wie das Hauptspiel finde. Da steckt mehr Abwechslung und deutlich mehr Details drinnen. Dazu eine packende Storyline, welche sogar die von Thief2 unerwartet schneidet und in einer eigenen Kampange nebst schicker Videosequenzen erzählt wird. Ist mit viel Liebe gemacht. Das sieht und hört man.

http://wiki.linuxgaming.de/index.php/Thief_II

I always wondered how I could easily read several variables at once from some program I execute from bash. Usually I simply read all values to a single variable and do a barrel roll (for each) on it or I execute the program in question several times with slightly tweaked parameters. That’s all not so nice for performance critical scripts. So I usually try to read as much as possible with as less as possible program calls from within a script.

Well, this is a snipped I developed today that is much easier by simply making use of read and “<<<

read iUID iGID <<< `awk -v username="$USERNAME" -F ":" '$0 ~ "^"username":x:" {print $3" "$4}' /etc/passwd`

I’m also passing a variable down to awk used in a regular expression. Please notice that this does only work when $IFS is a single space (default).

if [[ $iUID =~ ^[0-9]+$ ]] && [[ $iGID =~ ^[0-9]+$ ]]; then

And here I can even validate both values easily as integers using a regular expression.

Bash is so damn powerful once you get the basics 🙂 Ah and yes I am aware that awk can do the integer check itself but I’m just not there.. yet 😉

Ich mag meinen Job 🙂 Spielzeug für Erwachsene:

============
Last updated: Thu Aug 25 16:03:54 2011
Stack: Heartbeat
Current DC: punk (71dd0b09-39d3-4869-9b07-ec7ca7328ea1) - partition with quorum
Version: 1.0.11-6e010d6b0d49a6b929d17c0114e9d2d934dc8e04
2 Nodes configured, unknown expected votes
3 Resources configured.
============Online: [ steam punk ]

Resource Group: grpNFS
fsDRBDnfs  (ocf::heartbeat:Filesystem):    Started steam
resIPnfs   (ocf::heartbeat:IPaddr2):       Started steam
Master/Slave Set: msDRBDnfs
Masters: [ steam ]
Slaves: [ punk ]
resNFS  (lsb:nfs-kernel-server):        Started steam

Ich habe die Tage mal wieder was am Wine zu knabbern gehabt. Nach dem Aktivieren der OnBord Soundkarte schien zunächst alles schön zu seine. Unter Ubuntu konnte ich einfach den Punkt “Auf alle verfügbaren Soundkarten ausgeben” auswählen.

Unter Wine hatte ich aber plötzlich keinen Ton mehr.

“wine winecfg” hat einen Tab “Audio”. Da ging der Ton, wenn man auf “Test Sound” geklickt hat, lustigerweise.

Nun, des Rästels Lösung: Wine nutzt, genau wie der Pulseaudio von Ubuntu, das Alsa Device. Nun hat Ubuntu mir aber die Alsa Config umgebogen und ein sog. “dmix” Device angelegt, um auf beide Soundkarten auszugeben. DMIX zu erklären sprengt nun hier den Rahmen (wenn das interessiert=> alsa webseite erklärts). Auf jeden Fall war damit das Device “default” von alsa einfach leer. Das dmix Device hört hingegen auf den Namen “default_1”.

Unter “wine regedit” habe ich dann die Variable “DefaultPlayback” auf “default_1” gestellt. Nun gehts wieder

Die Keys sind unter http://wiki.winehq.org/UsefulRegistryKeys beschrieben.

Kann sein dass sich das bald wieder ändert. Soweit ich das verstanden habe bekommt Wine gerade eine radikale Umstrukturierung bei Audio verpasst, was dann wohl eine direkte Anbindung (ohne Patch) an gstreamer erlaubt.

Klar, alternativ hätte ich einfach default in default_1 umlenken können oder eine der anderen 10 Möglichkeiten zur Soundausgabe Soundausgabe umzuleiten nutzen können. Ist aber letztendlich egal. Um mich genau mit sowas nicht mehr rumzuärgern habe ich mir damals eine SB Live 5.1 mit emu10k1 Chipsatz geholt. Die konnte Hardwaremixing und brauche garkeine Soundserver und Software-Mixing mehr. Irgendwie ironisch dass mich diese Probleme dann doch 2011 mit dem Aktivieren einer zusätzliuchen OnBord Karte wieder eingeholt haben.

One of the things I really miss from my lunar linux installations at home are the lunar tools. We use almost everywhere debian at work and somehow I simply don’t get along with the apt family. El_Angelo from #lunar seems to think alike and started writing a lvu wrapper script translating lvu lunar commands I’m used to into the apt ones. It can be downloaded here. It’s not much yet but a good start.

Tja.. und wenn mein Samsung Galaxy i5800 mal wieder keine USB Verbindung zum PC aufbauen möchte, und den Verbindungsdialog nicht wie gewohnt anbietet, wenn das Gerät mit dem PC verbunden wird, wähle ich einfach diese (kostenfreie 😉 ) Nummer (mit Stern!)

*#7284#

Daraufhin öffnet sich ein Einstellungsdialog. Unter USB einmal auf Modem und dann wieder auf PDA geklickt und schon funktioniert alles wieder wie es soll.

Anscheinend stellt sich das Gerät intern ab und an auf Modem um, ohne dies auch anzuzeigen. Technik, die begeistert. Android ist toll. Samsung.. nächstes mal doch lieber von der Quelle. Da gibt es dann auch zeitnah Updates. So warte ich noch immer auf das offizielle Update für Android 2.2 für mein Galaxy. Service, Baby. Da weiß man doch, was man gekauft (bekommen) hat.

Gestern wurde es mal wieder sehr spät und wie so oft kam das Thema auf Computerspiele. Aus irgend einem Grund kamen wir auf Dungeon Keeper. Ich rede vom ersten Teil. Das war ein 16Bit DOS Spiel aus dem Jahre 1997 von Bullfrog. Falls sich noch jemand erinnert.

Ich habe also in meiner Spieleschatzkiste gegraben und tatsächlich die originale ziemlich lädierte und zerkratze CD zu Tage gefördert. Und das schöne: Lief mit “dosemu” auf Anhieb und ohne Murren mit Ton, Sprachausgabe, Maus und “3D”. Oder was man damals halt so unter 3D kannte.

Zum Spiel selbst: Herrlich, witzig, böse, innovativ. Allein das Introvideo war preisverdächtig. Unglaublich, was hier aus einem DOS rausgekitzelt wurde. Und das Beste: Dank grafischer Ausgabe über SDL seitens Dosemu ist eine stufenlose Fensterskalierung möglich. So kann ich es auf meinem reinen 64bit Linux auf einem modernen Monitor, der diese niedrigen Auflösungen nicht mehr kann, noch einmal mit mir genehmer Größe und Verpixelung spielen.

Was das neue Ubuntu kann steht schon an wichtigeren Stellen. Was es aber auf jeden Fall wirklich kann ist verdammt schnell hoch- und wieder runterfahren. Ich war ziemlich beeindruckt. Das klappte selbst auf einem 800Mhz Laptop in nur wenigen Sekunden. Umso erstaunter war ich dann, als es auf einem richtigen PC mit einigen Gigaherz und einer teuren ATI Grafikkarte seltsam lang beim Starten brauchte.

Des Rätsels Lösung war schnell gefunden. Im “dmesg” Log konnte man schön erkennen wie das Diskettenlaufwerk fd0 mit 5 langen Timeouts abgefragt wurde, bevor es weiter zur grafischen Oberfläche ging. Warum auch immer hier auf ein Diskettenlaufwerk gewartet wird. Das hat die Vorgängerversion nicht gemacht. Eingebaut war auf jeden Fall keines, doch im Bios eben konfiguriert und daher wohl auch der Treiber geladen. Da habe ich dann die Sache auch kurzerhand deaktiviert und schon ist die Kiste in rasend schnell gestartet und einsatzbereit.

Also wenns mal wieder länger dauert.. ein Blick ins Hardwarelog lohnt sich immer 🙂

I’ve a bbs system up and running storing the user accounts and their passwords (as md5 hash) in a database. The trac belonging to the bbs stores it’s data in a sqlite db and gave me a hard time for setting up useraccounts. I finally managed to validate users against the data from the mysql database. This is how it works for a standalone tracker project configured as apache2 site with mod_python:

‹Location /trac›
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv /path/to/trackerenv
PythonOption TracUriRoot /trac
PythonDebug off
‹/Location›
‹LocationMatch /trac/login›
AuthType Basic
AuthName "Please login with your bbs (forum) account"
Require valid-user
AuthUserFile /dev/null
AuthBasicAuthoritative off
Auth_MYSQL on
Auth_MySQL_Authoritative off
Auth_MySQL_DB thedbname
Auth_MySQL_Username theloginused
Auth_MySQL_Password thepasswordused
Auth_MySQL_Password_Table thetablewiththeuserdata
Auth_MySQL_Username_Field thefieldwiththeusernames
Auth_MySQL_Password_Field thefieldwiththeuserpasswordsstoredasmd5
Auth_MySQL_Empty_Passwords Off
Auth_MySQL_Encryption_Types PHP_MD5
‹/LocationMatch›

With that settings I was able to produce a login request on the login-site of the tracker that could be feed with users and passwords from my existing bbs database tables. Now the users could login to the tracker and I could remove ticket/wiki creation/modification from the anonymous access to prevent spambots spamming the tracker.

trac-admin /path/to/trackenv permission remove anonymous TICKET_CREATE TICKET_MODIFY WIKI_MODIFY WIKI_CREATE
trac-admin /path/to/trackenv permission add authenticated TICKET_CREATE TICKET_MODIFY WIKI_MODIFY WIKI_CREATE