Flash und „mehrere“ Soundkarten

„So bist du nicht willig….“ das waren die ersten gedanken, die ich hatte als Flash (mal wieder) unter Linux rumgezickt hat. Ich hab zwei Soundkarten im system, ist ganz praktisch eine für die Musik/Sound (5.1) und eine fürs VoiceChatten.

Letztes betreibe ich noch nicht unter linux, da es ventrilo noch nicht unter linux gibt (wird sich aber bald ändern…)

Nunja Flash bereitete mir mal wieder Probleme, so richtig und diesmal half auch kein

asoundconf list
asoundconf set-default-card 

da ich die Soundkarte im bios nicht abschalten will/kann brauchte ich einen ähnlich brutalen weg… nunja man kann durchaus auch das laden eines treibers unterdrücken (oder gleich den kernel ohne treibersupport neu bauen…)

#die geladen soundmodule auslesen
less /proc/asound/modules 
#mit dem editor der wahl das laden des treibers unterdrücken...
sudo nano /etc/modprobe.d/blacklist-oss.conf
sudo nano /etc/modprobe.d/blacklist.conf

das ist natürlich eine krücke, für das Soundsubsystem ist es nun so als ob die karte nicht existieren würde. Sobald ich unter linux die zweite karte nutzen will, mach ich dicke backen oder schmeiße Flash entgültig von der platte… nicht die schlechteste alternative

serverseitige Profile

Wer mehrere Rechner sein eigen nennt und dazu noch einen Server beseitzt wird über kurz oder lang auf die wahnsinnige Idee kommen, alle userbezogenen Daten auf dem Server abzulegen, um im Falle eines Crashes alles wieder bei sammen zu haben oder schlicht um an allen Rechnern auf die gleichen Daten zuzugreifen.

Dies kann man unter Linux sehr bequem mittels mounting sehr elegant lösen. Einfach den Pfad /home/$(USERNAME) mittels pam_mount auf ein externe Quelle/Server mounten.

Unter Windows geht das nur über eine Domäne, bei der (nach wunsch) das Userprofiel serverseitig gespeichert wird.

Fährt man den Server jedoch mal runter  (kann im wartungsfall passieren) oder nutzt man das Ganze an einem Laptop und ist nicht im privaten netzt wird man folgendes festellen:

  • Linux: die GUI (Gnome/KDE/whatever) fährt hoch, aber alles sieht aus wie beim ersten Start.
  • Windows: man wird darauf hingewiesen, dass die Domäne samt serverseitgen Profielen nicht verfügbar ist. Sonst merkt man nichts.

Dies liegt an dem Umstand das Windows die Profile nach dem Anmelden downloaded und beim Abmelden wieder zurück kopiert. Steht der Server einmal nicht zur Verfügung wird mit der Kopie weitergearbeitet.

Steht ein Server bei einem Linux-Mount mittels CIFS oder NFS  nicht zur verfügung, schlegt der Mount fehl (was einem aber nur im syslog vermerkt wird) und man arbeitet nur noch lokal. Solange der Server online ist, schreibt man aber alles „direkt“ auf dem Server. Ohne nutzbare lokale kopie.

Ideal wäre eine DFS -implemntierung die einen das alles transparent abnimmt. Diese eierlegende Wollmichsau habe ich leider nicht gefunden. Deswegen habe ich folgenden Lösungsansatzt benutzt.

Die Idee von Microsoft für unterschiedliche „Systeme“ unterschiedliche Profile anzulegen, fand ich ganz vernünftig. Es gibt also Profile für ein WinXP64, WinXP32 usw… Auf einem DoppelKern mit dicker Graka läuft was anderes als auf einem Atom-Laptop. Nachteilig ist, dass das auch die „Eigenen Dateien“ betrifft, welche eigendlich Systemunabhängig sein sollten, wenn sich mal alle Entwickler drann halten würden.

Unter Linux lässt sich diese Trennung wesentlich leichter durchziehen, dank der Disziplin. Auf dem Server werden zwei Verzeichnisse angelegt und verfügbar gemacht.

  • Home-Verzeichniss: hier kommt alles rein was auf allen Rechnern zur verfügung stehen soll.
  • Profiles\$(System): hier kommt alles rein, was ein bestimmtes system betrifft.

Am Client muss man diese beiden verzeichnisse nur noch mittels mount irgendwohin mounten. „/mnt/.serverprofile“ und „/mnt/homedir“ bieten sich an . Da man den String der das System identifieziert selber wählen kann, steht einem die aufteilung frei. Sinnvoll ist eine auftreilung nach KDE/Gnome/Xfce. Es sind aber auch andere Aufteilungen möglich.

jetzt braucht es zwei scripte die das kopieren übernehmen:

  • Server->Lokale Kopie:
    rsync -a /mnt/.serverprofile/ ~/
    rsync -a /mnt/homedir/* ~/
  • Lokale Kopie->Server:
    rsync -a ~/.[a-Z,0-9]* /mnt/.serverprofile/
    rsync -a ~/* /mnt/homedir

Das erste Bash-Listing dürfte nicht verwundern. Alle Dateien aus den serververzeinissen werden in das Uservervzeichniss kopiert. „rsync -a“ sorgt nur dafür das alle gesetzten Rechte erhalten bleiben (außer ACLs was mich aber nicht stört)

Beim zweite Listing könnte nur der Ausdruck „~/.[a-Z,0-9]*“ verwirren. Der sorgt dafür das nur Files kopiert werden die mit einem Punkt beginnen. (Korrekt: es werden nur Dateien/Ordner kopiert die mit Punkt beginnen gefolgt von einem Buchstaben oder Zahl. Bei Bedarf muss das angepasst werden)

Die scripte sind nicht sonderlich intelligent und werden von mir im laufe der  Zeit auf effizents getrimmt. Man gewinnt viel zeit wenn man nur änderungen übertragt. Ich werde mal schauen was mit tar so gemacht werden kann…

Jetzt müssen diese beiden Scriptes nur noch bei an/abmeldung ausgeführt werden. Jeh nachdem welchen Desktopmanager man benutzt, ändert sich das vorgehen.

  • KDE: Unter „Systemeinstellung“ -> „Erweiterte Benutzereinstellung“ -> „Autostart“ kann man die Scriptes verlinken. Das ist unschön, da man es für jeden benutzer einzeln machen muss, für eine größere Anzahl an Rechner ist das nicht zu administrieren. Unter /usr/shutdown kann man auch scriptes ablegen. Diese Scriptes ziehen aber nur bei „Shutdown“ nicht logoff. Hier bin ich noch auf der suche nach einem entsprechend besseren Lösung.
  • Gnome: Hier bietet der GDM entsprechende Einsprungpunkte. /etc/gdm/PostSession und /etc/gdm/PreSession
  • Xcfe: hab ich (noch) nicht einsatzt. Wird aber im Laufe der nächsten Wochen geändert.

Mit den gemachten einstellung hat man sein Profiel auch wenn der Server mal nicht verfügbar ist.

PS: unter KDE wird er Kopie-Script ausgeführt wenn die Oberfläche oben ist. Es empfiehlt sich also vor dem ersten start, in der Konsole alles zu kopieren. Sonst könnte der geneigte user beim ersten start ein Schock bekommen: „Whaaa alles weg“.

Server Suspend – a long tail

Einleitung

Was braucht man sinnigerweise für einen Server den man Schlafen legen will?

  1. Eine CPU/Board – Kombo die das unterstützt…
  2. Eine Netzwerkkarte die WakeUp-on-LAN unterstützt
  3. Alle Periferiere muss Suspend unterstützen (RAID Controler, etc…)

Primär spielt es keine Rolle welchen Suspend man anstrebt. Ob „Suspend to Ram“ (Suspend) oder „Suspend to Disk“(Hibernate) unterscheidet sich im Administrativen, wie man den Server dazu bekommt, nicht. Es muss einfach ein anderer Wert (Zahl) in /proc/acpi/sleep geschrieben werden…

In meinen Versuchen hat sich Suspend to RAM aber als sinnvoller erwiesen. Das Aufwachen nach einem Suspend ging (erwartungsgemäß) schneller. Aus einem Suspend kam der Server innerhalb von unter 2 Sek wieder zum laufen (laut Kernel – Syslog, zu messen war das kaum sinnvoll…) beim Hibernate benötigte es einen kompletten Boot… das dauerte bei mir ganze 5-7 Sekunden.

Die Einsparung an Energie gegenüber einem Suspend hielt sich in grenzen:

  • Server (Boot): 75 Watt
  • Server (Working): 20 Watt
  • Server (Idle): 15 Watt
  • Server (Suspend): 3 Watt
  • Server (Hibernate): <1 Watt

Der geringe „Gewinn“ war es mir nicht wert meine Sicherheit und die Response-Zeit zu opfern… Man sollte immer bedenken, dass der Memory auf die Festplatte geschrieben wird…. und selbst wenn man den verschlüsselt, ein Angreifer den Server bewegen kann (da er keinen Strom braucht) und in seiner umgebung booten kann… Hat man hingegen ein verschlüsselte Boot-Partition (TrueCrypt etc) nutzt einem der Hibernate nicht viel, da der Server nicht „unbeobachtet“ wieder hoch kommt…

Vorbereitungen

Als erstes muss man die Netzwerkkarte testen bzw fit für WakeUp on Lan (WOL) machen. Wie das geht wird sehr gut hier beschrieben. Zu den einzelnen WOL-Modi:

  • WOL-Packet: Das eigentlich aufwecken über ein WOL/Magic-Packet ist weniger Sinnvoll und erlaubt nur einen Betrieb eines File/Domain-Servers. Beim Booten müssen alle Clientes automatisiert das WOL-Packet lostrehten und der Server darf über die dauer der Session nicht runter Fahren.
  • u/m/b/a: Das Aufwachen des Servers bei Broad/Multi/Uni-Cast ist die (imho) interessanteste Variante. Der Server wird in jedem Fall geweckt wenn er gebraucht wird. Fast alle heute verwendeten Protokolle arbeiten über IP. Dabei impliziert ist das beziehen einer Adresse (DHCP) und das Auflösen einer Adresse (ARP). Beide Protokolle beginnen den initialen Request über Broadcast. So kann man fast alles betreiben: DHCP, DNS, Webserver. Warum im Standart nochmals ein WakeUp on ARP(a) ausgewiesen wird, erschließt sich mir nicht…
  • WakeUp on physikal activity: diesen Modus hab ich bei meinen getesteten Karten nicht zum laufen bekommen. Oder nicht so wie ich das wollte. Entweder wurde der Rechner sofort nach seinem suspend wieder geweckt oder er reagierte überhaupt nicht… wer denn Sinn dahinter versteht, möge es posten…

Shutdown

Ich habe lange gesucht (ok, nicht wirklich lange, aber schon länger… ;)) bis ich eine geeignete Methode gefunden hatte, bzw zu meiner ersten Idee zurück kam. Ich machs kurz: Sleepd und andere Methoden Interupts abzufragen (oder besser deren nichterscheinen) funktionierten nicht oder nur eingeschränkt… Die interessanten Interrupts ließen sich nicht abhören und so was wie Maus und Tastatur nutzt bei einem Server ohne selbige nichts.

Deswegen verwende ich einen Script der alle 5 Minuten via Cron ausgeführt wird. Dieser ist in seiner „Urform“ hier zu finden. Der Script als solches funktioniert prima, musste nur um zwei Funktionalitäten an meine Bedürfnisse angepasst werden.

  • Wenn man den Server als zentralen FileServer für die Home-Dirs nutzt, sollte dieser tunlichst nicht runterfahren, solange ein User angemeldet ist. Das CIFS/Samba Protokoll und deren Implementierungen können das zwar ab, die Programme (KDE, OpenOffice, …) jedoch nicht. Stalled Lockfiles und andere „interessante“ Probleme sind die Folge… Aus diesem Grund habe ich den Script um eine Überprüfung erweitert, ob SMB-User angemeldet sind. Dies erfolgt über „smbstatus“.
  • Des weiteren kam es immer wieder dazu, dass der Server nicht „richtig“ in den Suspend ging, oder nicht ordentlich aufwachte.Dies häufte sich besonders bei häufigen Suspends (ich hatte Testhalber die Überprüfung auf minütlich gesetzt). Nach einer weile /var/syslog-Studium fand ich den Übeltäter. Cron kann zuschlagen, während der Kernel noch am „aufwachen“ ist und im somit abermals einen Schlafbefehl verpassen. Das bringt den Kernel ein wenig aus dem Trab. Um das zu unterbinden hab ich zwei weitere Prüfungen eingebaut. Zum einen wird ein Lockfile angelegt, das erst nach dem beenden von des „echo“-Befehls gelöscht wird, eine Semaphore. Zum zweiten muss zwischen „Aufwachen“ und erneutem Suspend mindestens 30 Minuten liegen. Dies wird mit einem Datei geprüft die mittels „touch“ aktualisiert wird, bevor das Lockfile gelöscht wird. Danach einfach das Datediff abfragen…

Die von mir verwendete Version ist hier zu finden.

Fazit

Der Server steht mir nunmehr 24/7 zur Verfügung, spart sich jedoch Strom da nicht immer an… Zudem zühlt die Uptime auch hoch, obwohl der Server am „Schlafen“ ist, nennt man das cheaten? *G*

Einziges Manko: Aus Sicht der Festplatten handelt es sich um einen „Shutdown“. Zu mindestens wird der Motor komplett stromlos geschaltet. Das Wiederanfahren sowie justieren der Köpfe reduziert die Lebensdauer der Platten entsprechend. Bei guten (verlässlichen) RAIDs sollte das aber kein Problem darstellen.

Links

Hello Mono (ASP)

mit folgenen befehlen installiert man das mono plugin für apache (unter ubuntu)

sudo apt-get install libapache2-mod-mono
sudo apt-get install mono-apache-server2

und mittels

sudo a2enmod mod_mono(_ autoload)

aktiviert man den ganzen kram…

aber vorsicht: vorher noch die Datei /etc/apache2/mods-available/mod_mono.conf checken, welche mono version geladen wird, standartmäßig ist das die 1.0…

MySQL Coalition und das übliche Chaos

Ich hab mal wieder (wahnsinniger weise) versucht, meine Datenbanken zu backupen und auf in eine lokale Datenbank einzuspielen.

Naja ich spare die Details mal aus, wenn man aber von einer alten MySQL und phpMyAdmin Version exportiert und in eine neue importiert hilft folgendes dabei, das die umlaute erhalten bleiben.

alle Kommentare wegmachen, besonders den am Anfang, der das charset auf latin1 setzt will…

das create database um „CHARACTER SET=utf8 COLLATE=utf8_bin“ erweitern

ne weitere methode ist im backupfile einfach ein:

SET character_set_client = utf8;
SET character_set_connection = utf8;

dann klappt es auch mit Ö Ä Ü

Weniger ist Mehr: Wie es mit den Dateisystemen weitergeht

Ein Beitrag im Kernel-Bereich bei Linux Weekly News hat mal wieder einen interessanten Aspekt bei der Entwicklung moderner Dateisysteme beleuchtet, welcher nicht im direkten Fokus des Normalusers oder Administrators liegt.

Grundlegend geht es darum, dass der Speicherplatz wesentlich schneller wächst als alles andere. Eine „witzige“ Anekdote die durch diesen Fakt bedingt ist, ist die maximale zu verwaltende Speichergröße bei Ext4. Im aktuellen Ext4-Tree wird eine Blocknummer von 48 Bit genutzt, obwohl 64Bit locker möglich währen. Der Grund ist simpel. Selbst mit 48 Bit kann man 1 PByte verwalten und schon der Check dieser Datenmenge braucht unter aktuellen Bedingungen sehr lange (über 100 Jahre).

Es überrascht mich ein wenig wie deutlich der Autor des LWN-Artikels auf die Fehleranfälligkeit von SSDs hinweißt. Besonders da ich überlege damit meinen Server zu „upgraden“ …

Es ist jedoch interessant zu lesen, wie die Entwickler diesen Problemen versuchen zu begegnen. Ein Dateisystem das auf Wiederherstellung und Reparatur (s)eines defekten Zustandes optimiert ist. Es klingt für mich als Programmierer/(hobby)Administator ein wenig seltsam, dass ein Dateisystem davon ausgeht korrupt zu sein. Jedoch müssen wir uns wohl an diesen Umstand gewöhnen und geeignet darauf reagieren.

ChunkFS geht den Ansatzt, dass Fehler entweder global (totaler Verlust der Festplatte) oder lokal (einzelne Lesefehler) auftreten. Selten gibt es was dazwischen… Fast alle modernen Dateisysteme können mit ersterem nicht umgehen (außer über ein Fallback mittels RAID) und behandeln einen Lokalen defekt, indem sie die ganze Festplatte als „korrupt“ ansehen. Klingt irgendwie nicht sehr sinnig 😉

Chunk FS hingegen teilt „Festplatte“ in viele unabhängige Bereiche, die einzeln und online (im Background) wiederhergestellt werden können. Was freilich nur Sinn macht, wenn die Daten irgendwo redundant abgelegt sind. Noch gibt es keine wirklich praxistaugliches Implementation aber es ist wohl nur noch eine Frage der Zeit.

Thunderbird Links in Opera öffnen

Wer unter Linux Thunderbird und Opera nutzt und mit letzterem Links in ersterem öffnen will sollte folgendes machen.

Im Thunderbird-Profiel findet sich die prefs.js. Dort einfach folgendes anhängen

user_pref(„network.protocol-handler.app.ftp“, „opera“);
user_pref(„network.protocol-handler.app.http“, „opera“);
user_pref(„network.protocol-handler.app.https“, „opera“);

und schon geht das wie geschmiert….

Sambafreigaben und das Homedir

Wie schon im vorherigen Eintrag erwähnt, gibt es einige Haken und Ösen wenn man mittels CIFS einen Samba Share als Homedir mountet.

Ein weiterer Haken tritt auf, wenn die GroupIDs und UserIDs zwischen Server und Clienten nicht matchen.

Wichtig bei zu verstehen bei (fast) allen Netzwerk-FileSystems ist. Der Benutzer mit dem man sich authentifiziert, ist nicht unbedingt der Benutzer mir dem man die „Dateien“ erstellt. Beispiel, der Admin mountet unter UserA einen Share und UserB ist auch angemeldet und greift auf diesen Share (auf der gleichen Maschine) zu. Alle Dateien die jetzt UserB anlegt (sofern er das denn darf) werden mit seiner UserID angelegt…

nun kann man um sowas zu unterbinden, sowohl unter SAMBA(Server) als auch beim CIFS (Client) angeben, dass die Gruppen und UserIDs überschrieben werden sollen.

Das nützt blos nicht immer etwas. Einige Programme scheinen den Weg über die Inodes zu nehmen und „umgehen“ dabei dieses force-mapping. Symptome dieses Umstandes sind Probleme mit fehlenden Schreib/Leserechte obwohl man doch mittels „ls -la“ sichtbar alle rechte hat…

In diesem Fall hilft es das clienseitige mapping abzuschalten (gid und uid Parameter beim mounten) und die GroupIDs und UserIDs dem Server anzugleichen (/etc/group und /etc/passwd anpassen)