Old but not bus­ted … – Die­ser Inhalt wur­de vor mehr als 12 Jah­ren publi­ziert. Die Kor­rekt­heit und Ver­füg­bar­keit von Links kön­nen lei­der nicht gewähr­leis­tet werden.

Seit ein paar Tagen habe ich in mei­nem /var/log/syslog ein paar häss­li­che Mel­dun­gen, die das gan­ze sys­log ‚voll­mül­len‘.

Hier mal ein Beispiel:

Apr 24 08:55:10 axolotl kernel: [36283.935663] Valid eCryptfs headers not found in file header region or xattr region, inode 1717173
Apr 24 08:55:10 axolotl kernel: [36283.935674] Either the lower file is not in a valid eCryptfs format, or the key could not be retrieved. Plaintext passthrough mode is not enabled; returning -EIO

Auf der Suche nach Ursa­che & Lösung bin ich über

Das Pro­blem der Mel­dun­gen (sie­he Rapha­els Erklä­run­gen) ist wohl, dass es in mei­nem (mit eCryptfs ver­schlüs­sel­tem) home Datei­en gibt, die eine Grö­ße von 0 Bytes haben. Wie die da hin gekom­men sind kann ich nicht mehr reka­pi­tu­lie­ren, da ich mir auch nicht mehr ganz sicher bin, seit wann die Mel­dun­gen im sys­log ste­hen (und ich eben­falls wenig Lust habe, die alten sys­log-Datei­en zu durchsuchen…).

Am Ende habe ich nun Fol­gen­des dur­ge­führt, um das eCryptfs wie­der kon­sis­ten zu machen & somit auch die Mel­dun­gen los zu werden.

  1. sudo find /home/.ecryptfs/$username/.Private/ -xdev -size 0c ($username = mein Login-Name)
  2. Der ers­te Befehl sucht alle Datei­en mit der 0‑By­te-Grö­ße und gibt die­se aus. – Bei mir waren es zehn die­ser Dateien.
  3. Danach habe ich alle aus­ge­ge­be­nen Datei­en per Hand noch­mal kon­trol­liert – ls -lha $datei.
  4. Abschlie­ßend (nach­dem ich fest­ge­stellt hat­te, dass alle Datei­en wirk­lich mir gehö­ren & wirk­lich 0 Bytes groß waren) habe ich dann alle zehn Datei­en ein­zeln gelöscht: sudo rm "$datei".

Das Gan­ze habe ich immer mit root-Rech­ten (sudo) gemacht, da es ohne die­se stän­dig zu Feh­ler­mel­dun­gen bzgl. der Rech­te kam – was aber auch an der Benut­zung von trash-cli lie­gen kann!

Zusam­men­fas­send kann ich sagen, dass

  • seit dem die Mel­dun­gen im sys­log nicht mehr vor­han­den sind *cla­ro!*;
  • ich seit dem kei­ne Pro­ble­me fest­stel­len konnte,
  • der Bug offen­sicht­lich (für bestimm­te Anwen­dun­gen) bereits gefi­xed ist (nichts des­to trotz kann ein Sys­tem­crash nat. dazu füh­ren, dass die­se Datei­en wie­der exis­tie­ren und dann mosert eCryptfs ja zurecht…) und
  • ich der Mei­nung bin, dass man die Datei­en rela­tiv gefahr­los löschen kann – 0 Byte gro­ße Datei­en haben kei­nen (pri­va­ten) Inhalt und soll­te es sich um Spe­zi­al­da­tei­en von bestimmtn Anwen­dun­gen han­deln, wer­den die beim Neu­start der Anwen­dung wahrsch. wie­der neu erstellt.

In die­sem Sin­ne & ohne die Über­nah­me irgend wel­cher Geweh­re,
der sokai

Old but not bus­ted … – Die­ser Inhalt wur­de vor mehr als 12 Jah­ren publi­ziert. Die Kor­rekt­heit und Ver­füg­bar­keit von Links kön­nen lei­der nicht gewähr­leis­tet werden.

…ich bin kein PHP-Pro­gram­mie­rer, aber für mei­ne B.A.-Arbeit mache ich es (mehr recht als schlecht) & bekom­me dabei manch­mal fast ne Krise…

So zum Bsp. in den letz­ten bei­den Tage. – Da wur­de aus einer klei­nen 40zeiligen Funk­ti­on (die die gewoll­ten Grund­funk­tio­na­li­tä­ten lie­fert) ein klei­nes Mons­ter mit 164 Zei­len… – Aber jetzt isses halt echt viel schö­ner & die Bedar­fe Aller sind befriedigt… 😉

Außer­dem noch schnell nen Link zu dem Pro­jekt RIPS: http://rips-scanner.sourceforge.net.
Damit kann man off­line PHP-Code auf Feh­ler & Schwach­stel­len prü­fen las­sen… – Sehr nett! (Aber bit­te nicht nur dar­auf verlassen. ;))

*sound­jetzt­gehts­ins­bett-wink*

Old but not bus­ted … – Die­ser Inhalt wur­de vor mehr als 12 Jah­ren publi­ziert. Die Kor­rekt­heit und Ver­füg­bar­keit von Links kön­nen lei­der nicht gewähr­leis­tet werden.

An die­ser Stel­le soll es heu­te mal kurz um ein Pro­blem­chen und des­sen ‘Lösung’ gehen, wel­ches mich ges­tern (fast) den gan­zen Tag beschäf­tigt hat.

Ich hat­te die Auf­ga­be zu lösen, mit­tels eines HTML-For­mu­lars und PHP ein Bild (als BLOB) in einer MyS­QL-Daten­bank abzu­le­gen. – Eigent­lich ja nicht all­zu schwie­rig, denn Anlei­tun­gen & Code-Schnip­sel dazu gibts im Netz wie “Sand am Meer”…

Am Ende ent­schied ich mich für die Vari­an­te, die hoch­ge­la­de­ne Datei ohne file hand­ler (fopen, fread, fclo­se) in die DB zu hexen. Denn man kann recht ein­fach mit­tels mit­tels der glo­ba­len PHP-Varia­ble “$_FILES” auf die (mit­tels POST) hoch­ge­la­de­ne Datei zugrei­fen.

if (isset($_FILES['bild']) && is_uploaded_file($_FILES['bild']['tmp_name']) && $_FILES['bild']['size'] > 0) {
$mimetype = $_FILES['bild']['type'];
$blob = bin2hex(file_get_contents($_FILES['bild']['tmp_name']));

Da ich beim Insert immer die Mel­dung bekam, dass ich einen Feh­ler in der SQL-Syn­tax habe, wenn ich für den BLOB mysql_real_escape_string(file_get_contents($_FILES['bild']['tmp_name'])) oder addslashes(file_get_contents($_FILES['bild']['tmp_name'])) (wie bspw. hier beschrie­ben) benutzt habe, habe ich letzt­lich die Funk­ti­on bin2hex() für das Spei­chern der binä­ren Daten (des Bil­des) in der MEDI­UM­B­LOB-Spal­te der DB verwendet. 

Nach ein paar Test-Uploads stell­te ich dann jedoch fest, dass grö­ße­re Bil­der nicht hoch­ge­la­den wer­den kön­nen – wg. der Begren­zung auf dem Ser­ver. Also habe ich etwas gesucht und die dafür zustän­di­gen PHP-Ein­stel­lun­gen bzw. ‑Varia­blen gefun­den. Die­se spuck­ten mir aller­dings aus, dass mei­ne max. Upload-Grö­ße 32MB beträgt, was bei einem Upload von einem ca. 1,5MB gro­ßen Bild jedoch nicht ’stimm­te’. Denn da kam dann dann die MyS­QL-Mel­dung “Got a packet big­ger than ‘max_allowed_packet’ bytes” und der Daten­satz wur­de nicht in die DB geschrieben.

‘Gut, dass die MyS­QL-Mel­dung so aus­sa­ge­kräf­tig ist’, dach­te ich mir und such­te erneut nach einer Lösung… – Und sie­he da, auch dazu gibt es Lösun­gen, wie bspw. die­se. Ärger­lich war nur, dass ich den gan­zen Tag der Mei­nung war, dass der MyS­QL-Para­me­ter “max_allowed_packet” dyna­misch zur Lauf­zeit des Ser­vers per PHP beein­fluss­bar ist. *gml*
Dies kam zum Bei­spiel auch daher, dass das Aus­le­sen des Para­me­ters (mit mysql_query("SHOW VARIABLES LIKE 'max_allowed_packet'")) und das Neu­set­zen des Wer­tes (mit­tels mysql_query("SET max_allowed_packet=16777216;")) zwar anstands­los funk­tio­nier­te, aber lei­der den Upload nicht ver­bes­ser­te. Trotz des neu gesetz­ten Wer­tes (auf 16MB), war die Upload­gren­ze in Wirk­lich­keit immer noch beim Stan­dard­wert 1MB.

Lan­ge Rede, kur­ze Erkenntnis:
Das Ändern des MyS­QL-Wer­tes “max_allowed_packet” zur Lauf­zeit per PHP funk­tio­niert (i.d.R.) nicht. (Man kann, wenn man MyS­QL-Root-Rech­te mit sei­nem Log­in hat, ver­su­chen, den glo­ba­len MyS­QL-Para­me­ter zu ver­än­dern.)
Man muss/sollte/kann die Ein­stel­lung ser­ver­sei­tig vor­neh­men und ent­we­der dau­er­haft den Ein­trag max_allowed_packet=16MB; in der my.cnf machen oder mit MyS­QL-Root-Rech­ten den Wert mit­tels SET max_allowed_packet=16777216; zur Lauf­zeit ändern (dann ist die­ser bei einem Neu­start aller­dings wie­der weg).

Außer­dem ist anzu­mer­ken, dass die BLOBs in der DB irgend­wie (ca.) dop­pelt so groß sind/werden, wie die Ori­gi­nal-Datei­en. – Aus einem Bild mit 991K wird bspw. (bei mir) ein BLOB mit 2.03MB. *strange&doof* (Bit­te jetzt kein Bas­hing, ob es über­haupt sinn­voll ist, Bil­der direkt in der DB zu spei­chern. – Es muss die­ses Mal so sein!)

Old but not bus­ted … – Die­ser Inhalt wur­de vor mehr als 12 Jah­ren publi­ziert. Die Kor­rekt­heit und Ver­füg­bar­keit von Links kön­nen lei­der nicht gewähr­leis­tet werden.

Ich habe sie schon ein paar Tage an mei­ner Wand hän­gen und woll­te sie seit dem schon immer mal hier posten…

Die Regeln basie­ren auf dem Buch “Debug­ging” von David J. Agans. Wer noch ein paar Details zu den ein­zel­nen Regeln lesen möch­te, der kann hier mal schauen.

Doch nun (end­lich) die (Lebens)Weisheit:

  1. Under­stand the system
  2. Make it fail
  3. Quit thin­king and look
  4. Divi­de and conquer
  5. Chan­ge one thing at a time
  6. Keep an audit trail
  7. Check the plug
  8. Get a fresh view
  9. If you did­n’t fix it, it ain’t fixed

Old but not bus­ted … – Die­ser Inhalt wur­de vor mehr als 13 Jah­ren publi­ziert. Die Kor­rekt­heit und Ver­füg­bar­keit von Links kön­nen lei­der nicht gewähr­leis­tet werden.

Da ich gera­de etwas digi­tal auf­ge­räumt habe und mir dabei eini­ge Din­ge wie­der ein­ge­fal­len sind, die ich schon längst mal machen woll­te, hier mal der Link auf ein PHP-Pro­jekt, wel­ches ich (schon) im Win­ter­se­mes­ter 2009/2010 als Semes­ter­ar­beit an der FHP gemacht habe.

http://www.sok.ai/fhp/HA_PHP/

Es han­delt sich dabei um eine klei­ne Noten­aus­wer­tung & ‑visua­li­sie­rung, die ohne Daten­bank aus­kommt. – Naja, nicht dol­le umfang­reich, aber eine recht gute Prüfungsleistung…

Viel Spaß! – Dem­nächst wer­den wohl noch ein paar Vor­trä­ge u.ä. folgen…