You are here

Weblog von Marix

ACLs – Dann klappt auch das Inotify bei Mediatomb

Die traditionellen Unix-Dateiberechtigungen stoßen öfter mal an ihre Grenzen. Zum Beispiel bei meinem Versuch Mediatomb auf meinem Homeserver Inotify verwenden zu lassen. Die Lösung für diese Limitierung sind ACLs. Hier zeige ich, wie man diese für Mediatomb sinnvoll setzen kann.

Die traditionellen Unix-Dateiberechtigungen stoßen öfter mal an ihre Grenzen. Zum Beispiel bei meinem Versuch Mediatomb auf meinem Homeserver Inotify verwenden zu lassen. Die Lösung für diese Limitierung sind ACLs. Hier zeige ich, wie man diese für Mediatomb sinnvoll setzen kann. Den Inotify-Modus möchte ich in Mediatomb aus zwei Gründen verwenden. Ersten muss man dann nicht warten bis der nächste Scan nach neuen Dateien abgeschlossen ist, denn meistens möchte man die Datei ja sofort anschauen. Zweitens muss Mediatomb dann nicht immer wieder den Verzeichnisbaum ablaufen wenn sich gar nichts geändert hat. Im Idealfall können die Festplatten also deutlich länger schlafen. Das Problem mit dem Inotify-Modus besteht darin, dass Mediatomb hierfür Schreibberechtigung auf den Verzeichnissen benötigt, welche es auf Änderungen überwachen soll. Klassisch kann man aber ja nur die drei Berechtigungen – Eigentümer, Gruppe und den Rest – setzen. Prinzipiell kann man natürlich immer wenn man ein Verzeichnis anlegt anschließend Eigentümer oder Gruppe passend umsetzen, dann ist Mediatomb aber schon gescheitert. Eine bessere Lösung sind ACLs, mit denen man beliebig viele Berechtigungen vergeben kann. Außerdem ist es mit ACLs auch einfach Default-Werte zu setzen welche anschließend für alle im Verzeichnis angelegten Dateien und Unterverzeichnisse übernommen werden. Meine ACL für das oberste Verzeichnis sieht aus wie folgt: user::rwxuser:mediatomb:rwxgroup::rwxmask::rwxother::r-xdefault:user::rwxdefault:user:mediatomb:rwxdefault:group::rwxdefault:mask::rwxdefault:other::r-x Der Nutzer und die Gruppe können im Verzeichnis lesen und schreiben, dadurch kann zum Beispiel meine Frau auch die Fotos umsortieren. Alle anderen können das Verzeichnis lesen. Dies könnte man auch restriktiver handhaben, aber da Mediatomb den Inhalt dieser Verzeichnisse aller Welt verfügbar macht hat eine weitere Einschränkung wenig Sinn. Der Benutzer mediatomb bekommt explizit Lese- und Schreibberechtigung für dieses Verzeichnis. Dadurch kann Mediatomb dann Inotify verwenden um das Verzeichnis auf Veränderungen zu überwachen. Besonders wichtig sind die mit default: beginnenden Einträge. Diese legen wiederum die ACL fest welche in diesem Verzeichnis neu angelegte Dateien und Unterverzeichnisse bekommen. Bei Unterverzeichnissen werden diese außerdem wieder als Default übernommen. Das hier ein x in den Berechtigungen steht macht übrigens nicht jeden Datei ausführbar. Diese Berechtigungen werden immer mit dem vom anlegenden Programm angegebenen Berechtigungen kombiniert. So sind Verzeichnissen dann automatisch ausführbar (sonst könnte man ihre Inhalte nicht sehen), und normale Dateien nicht – es sei denn sie werden explizit als ausführbar angelegt. Um diese ACL auf einen bestehenden Dateibaum anzuwenden packt man sie am besten in eine Datei, in meinem Fall habe ich sie einfach acl genannt, und wendet sie mit setfacl rekursiv an. setfacl -R --set-file acl /OberstesVerzeichnis/ Hierbei gibt es noch einen kleinen Trick. Die Berechtigung X, anstelle von x macht eine Datei nur ausführbar wenn sie Verzeichnis oder bereits ausführbar ist. So verhindert man mit folgender ACL, dass alle Dateien ausführbar werden, stellt aber sicher, dass Verzeichnisse angezeigt werden können. user::rwXgroup::rwXother::r-Xmask::rwXuser:mediatomb:rwXdefault:user::rwxdefault:group::rwxdefault:other::r-xdefault:mask::rwxdefault:user:mediatomb:rwx

Bessere D3-Startlinks für http://d3.descent.cx/

Das hier vorgestellte Skript baut die Seite http://d3.descent.cx/ so um, dass die Links zu den Spielen durch Links mit dem Protokoll d3 ersetzt werden. Hat man z.B. Vortex installiert, so kann man durch den Klick auf den Link direkt Descent 3 starten, welches dann mit dem korrekten Server verbindet.

OpenCL: Buffer vs. mehrere Devices

Da OpenCL sowohl auf CPUs als auch auf GPUs funktioniert kommt man recht schnell in die Situation in der mehr als ein OpenCL-Device verwendet werden will. Doch was passiert in diesem Fall mit dem kostbaren, weil wenigem, Grafikkartenspeicher? Die Funktion clCreateBuffer bietet ja leider keine Möglichkeit anzugeben auf welchem Device der Speicher allokiert werden soll.

Da OpenCL sowohl auf CPUs als auch auf GPUs funktioniert kommt man recht schnell in die Situation in der mehr als ein OpenCL-Device verwendet werden will. Doch was passiert in diesem Fall mit dem kostbaren, weil wenigem, Grafikkartenspeicher? Die Funktion clCreateBuffer bietet ja leider keine Möglichkeit anzugeben auf welchem Device der Speicher allokiert werden soll. Die einfachste Variante mit mehreren OpenCL-Devices zu arbeiten ist alle in einem Context zu verwalten. In diesem Fall wird ein Buffer aber immer für alle Devices angelegt. Wird ein Speicher also nur auf einem Device benötigt muss man befürchten, dass dieser auch auf anderen Devices kostbaren Speicher verbraucht. Glücklicherweise sollte dies sowohl auf AMD, als auch auf NVIDIA-Hardware kein Problem darstellen. Beide teilen einem Buffer immer erst dann Speicher auf der Grafikkarte zu wenn dieser dort das erste mal verwendet wird. AMD dokumentiert dies explizit in seinem AMD APP Programming Guide. NVIDIA geht in seiner GPU Computing Documentation zwar nicht explizit auf diese Problematik ein, Beiträge in den Foren von NVIDIA und Khronos dokumentieren aber dieses Verhalten. Bedenken sollte man allerdings, dass man, um von diesem Verhalten zu profitieren, CL_MEM_COPY_HOST_PTR nicht verwenden darf. AMDs Programming Guide empfiehlt explizit einen gemeinsamen Context für alle Devices zu verwenden, da dies programmiertechnisch die einfacherere Lösung ist. Es wird aber auch eingestanden, dass ein Context pro Device deutlich flexibler ist. Dies ist beispielsweise die einzige Möglichkeit CPUs mit NVIDIA-Grafikkarten zu kombinieren. Die Flexibilität mehrere Contexte hat allerdings ihren Preis. So ist es nicht möglich die Ausführung zwischen mehreren Contexten über Events zu synchronisieren. Die OpenCL-Spezifikation weist explizit darauf hin, dass ein Befehl in einer Workqueue immer nur auf Events welche zum gleichen Context gehören warten kann. Prinzipiel kann diese Beschränkung mithilfe von Event Callbacks und User Events umgangen werden, dies ist aber auch mit einem höheren Aufwand verbunden. Außerdem sollte man auch immer bedenken, dass Buffer welche ausschließlich auf der CPU verwendet werden mit CL_MEM_ALLOC_HOST_PTR oder CL_MEM_USE_HOST_PTR initialisiert werden sollten um unnötiges kopieren der Daten zu vermeiden.

Liebe Berliner, geht Wählen!

Heute sind Wahlen in Berlin. Und da nichts besser wird wenn man seine Stimmer nicht erhebt, möchte ich hier noch einmal alle zum Gang zur Wahlurne aufrufen. Ihr müsst ja gar nicht gut finden was SDP/CDU/FDP und Grüne machen. Im Zweifelsfall gibt es immer noch genug „Einthemenparteien“ welche einen Standpunkt vertreten den ihr für wichtig haltet. Die mögen zwar mit eurer Stimme nicht ins Parlament einziehen, aber ihr gebt damit dem vertretenen Thema Gewicht, denn jede Partei, für die es nicht zur Mehrheit gereicht hat, hätte diese Stimme natürlich gerne gehabt. Außerdem gibt es dieses Jahr in Berlin, wie unter anderem bei Fefe berichtet, auch noch eine recht kuriose Möglichkeit das Parlament zu verkleinern und damit Steuergelder zu sparen. Also, auch wenn Blumentop eigentlich zur Bundestagswahl 2009 sang, gültig ist immer noch: „Beweg dein Arsch!“;

Spaß mit gcc und geschützten Leerzeichen

Wenn ich von meinem Mac aus in einem Vim auf einem anderen Rechner programmiere beschwert sich gcc öfter mal über folgendes und weigert sich die Datei zu kompilieren:

some_source.cpp:519:2: error: stray ‘\302’ in program
some_source.cpp:519:2: error: stray ‘\240’ in program

Seiten

Sollten dir die Artikel auf dieser Seite gefallen und du Bitcoin für ein interessantes Experiment halten, so schicke doch eine kleine Spende an 14pQyjx5EFQCwPBkXMTz5nTcfPsnjHmWqA.

Subscribe to RSS – Weblog von Marix