Pulseaudio go for the win *muahaha*

Früher war es esound oder was anderes – ein Soundserver.

Im Linuxumfeld möchte man das immer haben. Weil Linux von Natur aus mit Sound auf Kriegsfuß steht. Irgendwer muss sich kümmern, dass Anwendungen ihren Ton auf die Straße bekommen.

Leider.

Bei Ubuntu ist in der aktuellsten Reinkarnation dafür pulseaudio vorgesehen. Das Teil kann mal wieder alles – und auch nix. Immerhin klappt der Bluetooth-Handover recht schmerzarm.

Aber. Was die Kombination pulseaudio+also so gar nicht mag, ist, wenn zwei Soundgeräte im Rechner denselben Treiber möchten. In meinem Fall den „intel hda“-Treiber für die Cirrus Logic irgendwas im iMac – und das HDMI-Audio-Interface der Nvidia-Karte.

HDMI oder nicht HDMI – das ist hier die Frage

Mirko hat halt einfach mal – naiv wie er ist – gehofft, dass Audio von alleine funktioniert.

Hat es interessanterweise auch. So 5min nach dem Booten oder zwischendurch mal, wenn man diverse Kanäle an- und wieder ausgeschaltet hat.

Oder wenn man die richtigen Anwendungen nutzt. Firefox statt Chromium zum Beispiel – Youtube-Audio scheint alle zu überfordern. Mittlerweile weiß ich auch, wieso: Firefox setzt pulseaudio voraus, Chromium geht über Alsa (bzw. auch über pulseaudio, wenn es da ist… oder so).

In meinem Fall aber habe ich jetzt eine Woche herumgespielt, um WhatsApp, Chromium, Firefox und alle anderen Dinge (wie Rhythmbox) zum Soundwiedergeben zu bewegen – und zwar abwechselnd und gleichzeitig und dann auch noch unterbrochen von einem Bluetooth-Kopfhörer.

Unter OSX oder Windows ist das jetzt nichts, was ein Problem wäre. Tut es einfach. Natürlich nicht unter Linux 😀

Bildschirm

Mein zweiter Bildschirm hat (leider) die Fähigkeit, Audio über HDMI zu verarbeiten. In sofern „leider“, weil das bedeutet, dass der Bildschirm als Audio-Device im System aufschlägt. Das hat sogar Windows mitbekommen, aber nicht weiter beachtet. Aber bei Linux…

Die Nvidia hat den entsprechenden „Ausgang“ dabei. D.h. ich habe hier zwei Audio-„Karten“: HDMI-Bildschirm und Cirrus Logic Chip auf dem Mutterbrett.

Treiber

Beide laufen mit demselben Treiber. Jaahahahaaaaa, beide möchten mit dem intel-hda-Treiber des Kernels quaken. Nur braucht die CL-Chip von meinem Mac einen speziellen Parameter beim Starten (sonst klappt irgendwas nicht, ich glaube Kopfhörer).

Nach ungefähr (gefühlten) 100 Stunden Arbeit war es mir aber immer noch nicht gelungen, eine stabile Audio-Arbeit hinzubekommen. Ich war schon so verzweifelt, dass ich Phonon mit Gstreamer-Backend ausprobiert habe – aber die KDE-Schmerzen waren mir zu groß (sehr geile Effekte, super viele Einstellungen, aber leider habe ich mich an das etwas schlichte Design und die minimalistischen Anwendungen im Gnome-Umfeld gewöhnt).

Hab ich nicht hinbekommen.

Bis gerade eben

Irgendwann dachte ich, als mal wieder der Sound weg war, vielleicht hat alsa oder pulseaudio oder der intel-hda-Treiber ja auf den HDMI-Ausgang geschaltet (obwohl in pavucontrol abgeklemmt… aber man weiß ja nie…).

Also externe Boxen an den Bildschirm angedübel – und wat is?

Sound ist da. Von überall her funktionsfähig. Stabil. Bis jetzt auch dauerhaft. WhatsApp, Evolution, Firefox, Chrome – alle dudeln gemütlich. Bluetooth-Kopfhörer schnappt sich das gesamte Audio, wenn ich ihn einschalte…

Hab bisschen Angst neu zu starten…

P.S.

Ich kann nicht anders… das geht mir SO auf den Sack. Wieso kann im Linuxumfeld nicht einfach mal irgendwas so funktionieren, wie man es erwartet? Wieso muss ich stundenlang herumprobieren (das Internet ist voller „veralteter“ Lösungen – wie immer halt im OSS-Umfeld), bis so etwas bekacktes wie TONWIEDERGABE funktioniert??

Als Server ist Linux ja irgendwie sehr nice und auch sonst liebe ich das System ja (ich steh drauf per ssh im Browser von überall her meinen Rechner zu bearbeiten <3 ). Aber et nervt…

Nvidia und Linux/Ubuntu

In den letzten Tagen bin ich ja beinahe verzweifelt.

Eigentlich eine ganz banale Aufgabenstellung. Ich wollte, statt des nouveau-Treibers, die von Nvidia selbst herausgegebenen Treiber für Linux installieren.

Voll einfach

Also klicke-di-klack im Ubuntu Softwaretool den „proprietären“ Treiber ausgewählt, installiert und neu gestartet.

Lief.

Nach einem Reboot aber nicht mehr. Bildschirme schwarz.

Also per ssh in den Rechner eingewählt und geguckt, was abgeht. In den Logs nichts, was irgendwie ungewöhnlich ist (in den Linuxlogs sind Fehler ja völlig normal *würg*). Aber der Xorg-Prozess lutscht einen ganzen Kern mit 100% Auslastung.

Ungewöhnlich, sag ich mal.

Also andere Versionen des Treiber ausprobiert…

Ich mach es kurz

Diesmal die knappe Zusammenfassung – und bitte wegsehen, wenn man etwas empfindlich ist.

Es ist die allergrößte Scheiße, die je irgendein Mensch verbrochen hat. Nach drei Tagen/Nächten herumprobieren bekomme ich den Sondermüll einfach nicht ans Laufen. Ich weiß jetzt mehr als ich je wollte über meine Grafikkarte, ich verzichte in der VirtualBox (brauche Photoshop) auf die 3D-Beschleunigung. Klar bekomme ich das für 5 Minuten ans Rennen (unter Verzicht auf einen geordneten shutdown, weil – ist ein bekanntes Problem – was mit dem Kernel-modeset nicht funktioniert) oder mal für eine Session (sogar mit beiden Bildschirmen, auch in ca. 10% schneller als mit dem nouveau-Treiber)…

Einfach unfassbar, was man sich da freiwillig antut, nur, weil man ein ansonsten schönes und stabiles Betriebssystem haben möchte. Der Rest läuft auch (ok, Gnome-Shell-Extensions habe ich jetzt fast alle gelöscht, weil DIE auch WIEDER Probleme machen – ich hasse die Arroganz der Gnome-Entwicklung und ihre „ist mir alles scheißegal, was die Leute nutzen, wir wollen fancy shit haben“-Einstellung, liest sich aber total nett und sympathisch…).

Was mir wieder mal aufgefallen ist: Die OpenSource-Szene ist voll mit echten A-Geigen, die sich einen Dreck um die Nutzer kümmern. Da werden Bugs runterdiskutiert im Sinne von „eih Alta, is doch 3 Monate her dieser Stand, mussu halt anpassen“ und allgemein interessiert es nun wirklich keine Sau, dass man ein stabiles System bevorzugt.

Klar, ich könnte ein Debian Stable einsetzen. Aber mit Software aus dem letzten Jahrzehnt will ich auch wiederum nicht abhängen – und die Arroganz der Debianer ist ja noch um eine ganze Hausnummer größer.

Fazit

System ist geil, aber man muss damit leben lernen, dass man ein laufendes System einfach komplett in Ruhe lässt. Und sich stundenlang VOR einem Update informiert, was alles („vorhersehbar“) kaputtgehen wird. Denn das ist ein Haufen Zeugs – im Fehlerfall zieht ein kaputtes X oder Gnome oder sonstwas gerne mal einfach alles mit, was gerade läuft. „Autosicherungen“, „Fehlerbehandlung mit backout inklusive Datensicherung“ – dass ich nicht lache. Das interessiert die allermeisten OSS-Entwicklung einen feuchten Pups.

Lieber Features einbauen oder bestehende Schnittstellen über den Haufen werfen.

Wie man überhaupt auf die Idee kommen kann, per JavaScript Extensions in eine Shell einzulöten… und wenn man dieses Verbrechen schon begebt, wieso man die nicht wenigstens sandboxed oder irgendwie sonst gegenüber dem Rest des Systems absichert… hach ja.

I’m getting to old for this sh*t.

P.S. Nouveau

Ich muss den nouveau-Leuten aber mal ein Lob aussprechen: Der Treiber funktioniert mit älterer Nvidia-Hardware (750M, Mac Edition, GK107, NVE0 Kepler Family… ich sag ich, ich weiß jetzt zu viel über meine Karte…) eigentlich richtig gut – und vor allem störungsfrei.

Vor allem haben die auch mal Bock auf Doku.

Kräss – MySQL und WordPress auf SSD

Ui.

Mein Mac läuft ja schon eine „kleine“ Weile mit einer SSD, mir sind also die Vorteile von SSDs durchaus geläufig.

Leider aber auch die Nachteile – Plattenplatz geht so aber mal richtig ins Geld.

Auf dem neuen Server wollte ich dann nicht wirklich mehrere Tausender für ein paar TB Speicher ausgeben. Da schieden SSDs direkt aus. Also mussten WD Red-Platten her, immerhin auch nicht gerade die billigsten, dafür aber ausgelegt auf Dauerbetrieb und Standhaftigkeit (wollen wir mal einfach hoffen, dass das keine reine Werbung ist…).

Auch wenn CPU und Speicher und überhaupt im neuen Server alles eine ganze Klasse besser ausgefallen ist als in der Synology DS415+, die wir bis vor ein paar Tagen als Server eingesetzt haben, so war die Backend-Performance vom WordPress doch immer noch etwas „schwach“.

Also vorhin gestern Nacht im Schweiße meines Angesichts (ich habe unglaubliche Rückenschmerzen *rumjammer*) eine kleine SSD (240GB) reingekabelt und dann rumprobiert.

MySQL

Zunächst mal sollte die Datenbank auf die SSD. Mirko denkt sich, „machst du symbolische Verlinkungen, dann passt dat“. Aber nöööööööööö. AppArmor mag das nicht. Ich hasse AppArmor, schon sehr lange. Uns verbindet eine Hass-Liebe.

Also in mysqld.cnf ein bisschen geändert:

datadir = /mnt/ssd/mysql

Natürlich vorher MariaDB mit „service mysql stop“ runtergefahren – und dann alles rüberkopiert (außer den Log-Dateien, die erstellt MariaDB/MySQL ja beim Starten neu).

Bisschen uffpasse, die Rechte sollten gleich bleiben, also idealerweise so etwas wie rsync -av dafür nehmen. Auch an den neuen „Ordner“ denken (… oh man wie die Zeiten vermisse, als man noch Verzeichnis oder Directory statt Ordner oder Folder sagte…), der braucht ggf. auch die passenden Rechte, damit neue Dateien dort mit dem richtigen Bub angelegt werden (bei mir chown -R mysql:mysql mysql/).

MySQL/MariaDB wieder gestartet und – es läuft.

Apache2

Als nächstes dann die eigentliche Webseite rüber. Unfassbar… wo ich überall echte Pfade in den Bashscripten, PHP-Dateien und sonstigem verwurstet habe. Da rächt sich wieder die frühere Faulheit… also erst mal eine Weile die Pfadangaben geändert (nicht per find und xargs und sed, ich hatte Sorge, dass da was falsches umgeändert wird).

Dann DocumentRoot und ein paar <Directory>-Dinger angepasst.

Läuft.

Fazit

Wenn das jetzt ein echtes Porno-Blog wäre, würde ich sagen, dass ich nen Dauerdicken hatte.. alter Schwede flutscht das jetzt.

Das Backend fühlt sich an wie eine richtige Software (also eine, die lokale auf dem Rechner läuft, nicht mit Java oder sonstiger Scheiße geschraubt wurde, und generell von einem entwickelt wurde, der noch Bock auf optimalen Code hatte und dessen erster Gedanken nicht ist, „wo gibbet da ein Framework zu“ – da wir WordPress einsetzen, fällt mir gerade so ein bisschen die Ironie auf… aber hei, ist hier mein Blog, ich kann hier rumsticheln, wie ich möchte *g*).

Schon nen bisschen geil 😀

P.S.

Ich erwähnte, dass wir natürlich PHP7 mit OpCache einsetzen (hhvm war mir zu frickelig) und jetzt den Redis auch als Object-Cache nutzen?

P.P.S.

Apropos… wenn ihr im WordPress das Plugin Redis Object Cache einsetzen solltet, passt bitte unbedingt WP_REDIS_DATABASE (in wp-config.php) an. Default ist 0 – und die war bei mir schon vom rspamd und seinen Bayes-Dingern belegt… wisst ihr, was passiert, wenn das Plugin seinen Cache löscht? Jaaaaaaaa… der ballert Database 0 einfach leer… OH MAN.

Wie gut, dass ich gerade dabei war, die Backup-Scripte neu zu gestalten/einzusetzen. So war alles notwendige gesichert, ich hätte jetzt eher überschaubare Lust gehabt, noch mal den Bayes-Filter mit Spam zu befüttern.

Zum Thema Backupscripte könnte ich auch noch was schreiben. Später vielleicht.

CPU 25%, io > Wahrnehmungsgrenze

Oh man.

In den 90ern, als ich mit einem Kumpel gerne mal Hongkong-Filmchen mit englischem Untertitel geschaut habe, gab es einen Film, bei denen einer von Berufes wegen „Cleaner“ genannt wurde.

Das war so einer, der andere Leute ähm „weggemacht“ hat. Also ein Auftragsmörder.

Selbigen hätte ich heute mal gebrauchen können.

Unser neuer Server läuft mit Butter-FS oder btrfs, wie der Profi sagt (und ausspricht *g*).

Dieses Dateisystem hat ein paar richtig fette Features. Unter anderem auch Snapshot – also so etwas wie „Systemwiederherstellungspunkte“, für den Windows-Anwender. Ein punktgenauer Ist-Zustand des zum Zeitpunkt des Snapshots vorgefundenen Datenmülls.

Das möchte man nutzen.

Wieso auch nicht. Auch dafür benutzt man ein modernes Dateisystem. Man möchte die Features gebrauchen – sonst könnte man ja, etwas kätzerisch ausgedrückt, ja gleich bei FAT32 bleiben *flöt*

Zum automatischen Erstellen solcher Snapshots gibt es von SuSE ein Tool, dass sich snapper nennt. Das lötet fröhlich in definierbaren Abständen Snapshots in Dateisystem – funktioniert auch echt richtig zuverlässig.

Und irgendwann räumt das Tool auch alte Snapshots weg.

Und wehe, wehe, WEHE, man hat Quotas angeschaltet. Noch nicht mal wissentlich, denn das fiese Dinge fummelt die möglicherweise sogar automatisch an („um besser informiert zu löschen„).

Leider ist der Zustand der Quotas bei btrfs, sagen wir mal, unterdurchschnittlich ausgeprägt. Macht also haufenweise Probleme, die meisten Leute schalten sie ab – eine sehr verbreitet Nebenwirkung ist „100% Auslastung und unbenutzbares System beim Löschen von Snaphots“.

Jetzt zählen wir mal 1 und 1 zusammen:

  • Ein Tool, was regelmäßig Snaphots erstellt
  • diese ebenso regelmäßig bereinigt

Huch? Ja, richtig. Wenn man Quotas anhat, geht das so richtig in die Hose. Server steht, nur über den süßen Notausknopf noch zu retten (und, wie das bei Linux-Systemen so üblich ist, ein Notfall-USB-Stick zur Hand…).

Mirko hat heute schon etliche Male gesagt, er möchte keine Quotas…

btrfs quota disable /

btrfs quota disable /var/www

btrfs quota disable /srv/projekte

btrfs quota disable $gott_und_die_welt$

Aber.

Snapper ist das scheißegal. Er macht die einfach wieder an – übrigens genau so wie „btrfs-du“ (NICHT verlinkt, weil kaputt, siehe dieser Text hier).

Kann man abschalten.

It actually will if you used quotas before:
# snapper cleanup number
quota not working (preparing quota failed)

# snapper get-config | grep QGROUP
QGROUP                  | 1/0

This fixes it:
# snapper set-config QGROUP=

Wenn ihr also jemals mehrfach eure Server neu gestartet und von außen die Quota abgeschaltet habt und euch gewundert, wieso es das System offenbar einen Scheiß interessiert, guckt doch mal nach snapper 🙂

P.S. Wenn man mit dem Notsystem per USB von außen auf die Platte möchte, findet btrfs die Platten/Raids recht einfach – man muss nur wissen, wie.

P.P.S. Ok, ich verrate es:

btrfs device scan
mount /dev/sda3 /mnt
btrfs quota disable /mnt/@
btrfs quota disable /mnt/@home

Quotas kann man nur bei gemounteten Dingens abschalten, das Reparieren tunlichst nur bei nicht gemounteten.

Manchmal hasse ich es, dass Software von Bastlern zusammengefummelt hochprofessionell verkackt wird.

Wieso funktioniert Quota nicht? Obwohl das doch so hübsch klingt… wenn da nicht folgendes stünde:

Using btrfs subvolume delete will break qgroup unshared space usage. After deleting a subvolume, you must manually delete the associated qgroup. Bugs in accounting code might cause false out of space situations. Combining quota with (too many) snapshots of subvolumes can cause performance problems, for example when deleting snapshots.

F*ck it. Auch andere haben damit Probleme.

Server-Umzug

In den letzten beiden Tagen habe ich unseren aktuellen Server teilweise auf neue Hardware umgezogen.

Die Gründe… ähm sagen wir so, eine Synology NAS in der bezahlbaren Variante leistet für PHP-Interpretation nur überschaubare Leistung und da unsere Homepage ein WordPress-Monster ist, wirkt sich das für uns im Backoffice erheblich aus. Die Besucher haben davon nie etwas mitbekommen, da wir dank aufwändig gebauter Cache-Mechanismen nur noch generierten HTML-Code ausliefern und alle Medien bei Amazon ablegen… alleine das Wartungsscript… jede Nacht lief über eine Stunde das Neuerstellen des Caches 🙂 Bisschen verrückt, ja… nun ja.

Wie auch immer.

Bei Memory PC einen Billigrechner mit anständiger Hardware besorgt. In leer. Also erst mal nach vielen, vielen, vielen Jahren Abstinenz wieder mit dem Thema „welches Kabel gehört wohin“ und „welche Platte muss da eigentlich rein“ befasst.

War gar nicht so schmerzhaft, wie ich es in Erinnerung hatte. Die Dokumentation von Mainboards ist mittlerweile sehenswert -früher gab es zum Mainboard ein versiffter A4-Blatt mit chinesischer Symbolik (und Logik…). Heute… englisches Handbuch mit detaillierten Beschreibungen…

Wie auch immer.

WD Red Platte rein als primäre Platte, Ubuntu Server Edition drauf und dann erst mal die Konfiguration des Webservers und Dovecots rüber auf den neuen Server. Ich hatte schon Getränke kaltgestellt und extra Urlaub eingereicht – man kennt das ja, so etwas zieht sich.

Gestern Nachmittag um 1600 angefangen und irgendwann am frühen Abend (so gegen 0230) das meiste am Laufen gehabt. Linux ist schon ein bisschen geil, geht alles dank Konsole/Terminal ruck zuck und das Internet (zweiter Rechner in brauchbar steht neben dem Server) hilft praktisch immer – wenn man weiß, wonach man suchen muss (was ja jetzt nicht soooooo das Problem ist…).

Datenbanken umzuziehen war übrigens keine große Sache. Früher war das oft SEHR gruselig dank der Encodierungs-Probleme. Heute gibt es die nicht mehr, weil man neue Datenbanken immer mit UTF in irgendeiner Variante aufsetzt und damit die Dumps ganz einfach migrierbar sind… da hab ich blöd geguckt, kein Script mit sed-Magie nötig gewesen 🙁

Naja. Webseite wird jetzt über den neuen Server ausgeliefert (ich liebe IPv6 *g*) und Dovecot läuft…

Also für geeignete Werte von „läuft“…

Alle Mails kommen doppelt an.

Das ist jetzt der Job für heute Nacht 😀