Tagged: Linux

Ich hatte vor einiger Zeit auf einem Sabayon Linux System das Problem, das ich unter Skype absolut nichts verstehen konnte. Aus dem Kopfhörer drang nur eine Art „knirschen“; da es auch beim Skype Echo Service auftrat, war klar das es an mir und nicht an der Gegenseite liegt. Es trat jedoch nur bei Skype auf; keine andere Anwendung war hiervon betroffen.

Ich verwende KDE und damit unter Sabayon Standardmäßig PulseAudio. Ein Beitrag der User „ball“ und „swordfish“ brachten mir letzten Endes die Lösung, indem Sie im ArchLinux Forum auf Bug #50510 im FreeDesktop.org Bugtracker verwiesen:

Wenn man Skype wie folgt mit einer Wert von 30 in der Umgebungsvariable PULSE_LATENCY_MSEC startet, gibt es von jetzt auf gleich keine Probleme mehr:

bash -c „PULSE_LATENCY_MSEC=30 skype %U“

GNU Screen ist ein Terminal Multiplexer, welcher einem über in der Manpage dokumentierte Tastenkombinationen die komfortable Steuerung mehrerer Terminal-Sitzungen über nur eine „echte“ Konsole ermöglicht. Dieses kann man sich vorstellen wie „Tabs“, welche man heutzutage von allen Internet Browsern her kennt. Ein weiterer Vorteil ist, das man so einen Container einfach mitsamt den darin laufenden Sitzungen in den Hintergrund schicken kann und die darin enthaltenen Sitzungen weiterhin ausgeführt werden. Dieses gilt auch für „unfreiwilliges“ schließen der Verbindung; beispielsweise wenn die Internetverbindung abbricht, der Computer abstürzt, etc.

Ich suche mir jedes Mal die folgende Information neu aus dem Internet heraus, daher notiere ich sie mir einmal, leicht auffindbar, hier.

Man kann in Screen auch in jeder einzelnen Sitzung scrollen. Jedoch sind die Zeilen, die Screen dabei speichert, von Haus aus auf recht wenige eingestellt: 100 Zeilen; das ist, bei heutigen Auflösungen der meisten Konsolen, gerade mal etwas mehr als ein Bildschirm. Für mich ist das viel zu wenig! Daher erhöhe ich das meistens per Default auf 5000. Das kann, je nach Einsatzgebiet auch zu viel sein; wenn jemand nun 200 Konsolen darin startet und in jeder ein Logfile mit „tail -f“ durchlaufen lässt, kann hierbei schonmal recht viel Arbeitsspeicher für belegt werden. Daher: Bitte diese Einstellung nicht ungeprüft übernehmen.

Es gibt zwei Konfigurationsdateien für GNU Screen:

  1. Globale Konfigurationsdatei : /etc/screenrc
  2. Userbezogene Konfigurationsdatei : ~/.screenrc

Beide verwenden soweit dieselbe Syntax; Details sind der Manpage zu Screen zu entnehmen.

Nun aber zum Kern des Artikels:

Man füge folgende Einstellung hinzu:

Fertig 🙂

Ich habe hier das Buch „Shell-Programmierung“ (ISBN: 978-3-8362-1157-4) von Jürgen Wolf im Original im Hardcover liegen; ein rund 800 Seiten starker Trümmer randvoll mit praktischen Tipps, Anwendungsbeispielen und nachvollziehbaren Erklärungen rund um die Programmierung in den verbreitetsten Linux-Shells. Das Buch ist super! Ich schaue regelmäßig rein und finde nach wie vor immer wieder etwas neues. Besonders als Referenz finde ich es einsame spitze!

Da sich nun leider nach mehreren Jahren der regelmäßigen Benutzung die Bindung mancher Seiten in den wohlverdienten Ruhestand verabschieden, wollte ich eben mal schauen ob man das nicht zufällig als digitale Kopie erstehen kann.
Tatsächlich: Kann man! Und zwar inzwischen kostenlos als Galileo OpenBook!

Ich kann nur jedem an diesem Thema interessiertem empfehlen: Downloaden!

Hallo zusammen,

das Gentoo/Funtoo Paket ‚media-sound/teamspeak-server-bin‘ benötigt noch MySQL 5.1; dieses ist jedoch im ebuild nicht richtig aufgelöst, so das es nicht als Installationsbedingung aufgelistet wird. Installiert man das Paket, setzt in der Datei ‚/etc/teamspeak3-server/server.conf‘ ‚dbplugin=ts3db_mysql‘ (um die Einstellungen statt in einer SQLite-DB in einer MySQL-DB zu speichern) und versucht dann den TeamSpeak3 Server zu starten, bekommt man im Log folgende Meldung:

|INFO |ServerLibPriv | | TeamSpeak 3 Server 3.0.5 (2012-04-23 04:46:12)
|INFO |DatabaseQuery | | Please make sure you use the supplied ts3server_minimal_runscript.sh to run the server, or set LD_LIBRARY_PATH yourself
|CRITICAL|DatabaseQuery | | unable to load database plugin library „libts3db_mysql.so“, halting!

LD_LIBRARY_PATH ist aber (im Init-Script) schon auf das Verzeichnis gesetzt, in welchem die Datei libts3db_mysql.so liegt: /opt/teamspeak3-server/, also was soll die Meldung?
Das ganze wird klar, wenn man sich mit ldd einmal die  shared library dependencies der Datei /opt/teamspeak3-server/libts3db_mysql.so anzeigen lässt:

ldd /opt/teamspeak3-server/libts3db_mysql.so
linux-vdso.so.1 =>  (0x00007fff4efa4000)
libmysqlclient.so.15 => not found
libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/libstdc++.so.6 (0x00007f17f2bc0000)
libm.so.6 => /lib/libm.so.6 (0x00007f17f293d000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f17f2727000)
libc.so.6 => /lib/libc.so.6 (0x00007f17f23ca000)
/lib64/ld-linux-x86-64.so.2 (0x00007f17f30fd000)

Es fehlt also die Datei libmysqlclient.so.15 ; diese ist jedoch leider nur in MySQL 5.1 enthalten. Nun hat man zwei Möglichkeiten:

  1. Man installiert und betreibt MySQL 5.1 . Dann löst sich das Problem ohne weiteres Zutun, jedoch finde ich es blöd sich von einem einzigen Programm eine veraltete MySQL Version aufzwingen zu lassen.
  2. Man besorgt sich die libmysqlclient.so.15.0.0 Datei von einem Build-Chain kompatiblen System (gleiche GCC Version, gleiche Arch, etc.). Das geht z.B. indem man erst MySQL in Version 5.1 installiertst, die Datei wegkopiert und wieder die MySQL Version, die man eigentlich haben möchte installiert.

Sofern man sich für Variante 2 entscheidet, kopiert man, während MySQL 5.1 installiert ist, die Datei /usr/lib64/mysql/libmysqlclient.so.15.0.0 nach /usr/local/lib/, erstellt einen Symlink von /usr/local/lib/libmysqlclient.so.15 auf /usr/local/lib/libmysqlclient.so.15.0.0 und installiert anschließend wieder die eigentliche Version von MySQL.

Hat man dieses alles erledigt, sollte sich der Teamspeak3 Server problemlos starten lassen.

Nachzulesen ist das ganze außerdem im Gentoo Forum. Auf die Idee gebracht hat mich der Blogeintrag von Alexander Winkler.

Ich komme zur Zeit nicht wirklich zum bloggen. Zum einen passiert (für den Rest der Welt) nur uninteressanter Scheiss bei mir. Privat geht es zwar gerade hoch her – aber „Mann“ wird ja auch erwachsen. Bedeutet: Ich werde in Zukunft etwas weniger private Details hier posten. Was geht es Google und Co. an, das ich … was weiss ich: Gerade lieber Gemüse esse als Pizza, viel oder wenig Sport treibe, oder mein Schiss gerade eher einem Fragezeichen oder einem Hakenkreuz ähnelt? Genau: Garnichts ! 🙂

Vielmehr wende ich mich gerade wieder verstärkt dem Know-How meines ewigen Steckenpferdes rund um den PC und verstärkt Linux und verwandten Techniken zu.
Was sind „verwandte Linuxtechniken“? Ich würde, nach jüngsten Erfahrungen, sagen: Alles, was zukunftsweisend  und in irgendeiner Weise kreativ ist und mit IT zu tun hat ist heutzutage eine verwandte Linuxtechnik.

Ich möchte an dieser Stelle gerne zwei Beispiele aus meiner aktuellen Arbeitswoche heranziehen:

1) PHP

Wie alt ist PHP inzwischen? Ich meine nicht so direkt die Sprache, sondern vielmehr: Wie lange ist PHP denn inzwischen bitte die Programmiersprache im Internet und der modernen IT? Ich komme zwar noch aus der „Windows for Workgroups“ – Ära, aber selbst mir fällt es schwer, mich heute noch an eine Zeit ohne dynamische Webseiten, wo man schlichtweg der King war, wenn man ein DataBecker HTML4 Buch grob angelesen hatte, zurück zu erinnern. Inzwischen wird wohl keiner, der sich ernsthaft mit Webseiten und Trends im Web auseinander setzt bestreiten, das ohne PHP und die unaufhaltsame Verbreitung von OpenSource-Giganten wie Apache HTTPd und Linux das Web heute ein anderes (und ich behaupte: Schlechteres!) Web wäre. Schaut Euch nur mal die Alternativen an: ISS, Windows Server, Microsoft Silverlight, … wer will denn auch nur eines davon haben bitte?? Das finden ausschließlich solche Idioten gut, die kognitiv nicht in der Lage sind Lizenzbedingungen zu lesen und zu verstehen. Da fallen „Argumente“ wie

das kostet doch sooo viel Geld, da wollen Sie mir doch wohl nicht erzählen, das diese kostenlose Freeware legal dasselbe leistet!?

Ich werde das nie vergessen: Dieser Satz fiel in meiner Berufsausbildung wirklich! Und zwar von meinem damaligen, technischen Ausbildungsbetreuer bei Computacenter. „Freeware“. Das muss man sich mal vorstellen … OpenSource und GPL – völlige Fremdworte.
Ich fürchte diese geistige Haltung ist nach wie vor weit verbreitet – zum Glück sterben diese Idioten aber immer mehr aus. Das ganze kann, in meinen Augen, garnicht schnell genug gehen.

Wie auch immer: Ich wollte heute für ein Plugin für Eclipse auf einer Windowsmaschine PHP 5.3.x installieren. Fertig – das ist die vollständige Anforderung! Zunächst einmal muss man dabei, meiner Meinung nach, den simplen Weg dahin nachvollziehen. Ich lade ausdrücklich jeden Leser ein, den folgenden Weg nachzuvollziehen: Ladet Euch alleine mal ein PHP 5.3 für Windows herunter.
Man geht zunächst auf die Homepage von PHP unter www.php.net . Hier findet man sofort den Link „download“ oben auf der Homepage. Dann kann man sich primär PHP 5.3 oder die ältere, abgekündigte Version 5.2 herunterladen. Die primäre Wahl stellt sich hier in einem GZip oder BZip2 Archiv dar – ohne Diskussion: Sourcecode geht hier ab! … als dritte Option wird nun auch noch eine fast abseits stehende Option angeboten: “For the Windows binaries and installer, see http://windows.php.net/download/.„. Wirkt ein wenig wie „Ach ja, wir haben da auch noch ein behindertes Kind …“ im Kinderheim.
Aber – wenn der ganze Kram, egal wie uninovativ diese statisch gelinkte Binär-Scheisse auch sein mag, dann wenigstens funktionieren würde. TUT ES ABER NICHT!!! Macht Euch mal den Spass: Ladet den PHP Installer für Windows herunter, startet nur die php.exe – was passiert? Der Mist stürzt ab, weil ihm DLL Dateien fehlen! Man darf nun wiederum hoffend, das diese Projekte DLLs anbieten, diese ganzen Abhängigkeiten erstmal erfüllen, bis mein eine lauffähige PHP Installation zu Wege bringt.

Mal ehrlich: Fühlt sich das an wie das Jahr 2011? DIE Top-Webtechnik, nicht nativ verfügbar. Wie kann jemand, der ernstzunehmend PHP entwickelt, heute zutage noch Windows einsetzen?
Es gibt, als PHP Entwickler-Workstation, heutzutage kein einziges Argument mehr für Windows!!!!!!! Beweißt mir gerne das Gegenteil!

2) Samba

Warum gibt es Samba? Nur, weil diese ganzen alteingesessenen (böse Zungen würden sagen: festgefahrenen) Anwender weiterhin auf ihrem „Ich bin zwar zu faul mich in etwas anderes als Windows einzuarbeiten und selbst da zu blöd für Admin-Rechte, will aber trotzdem auf alles und jeden Zugriff haben“ – Standpunkten bestehen! 90% meines aktuellen Rechte-Chaos-Alltages gehen aktuell dafür drauf, Probleme zu beheben, die es nicht geben würde, wenn Microsoft langsam mal im Jahre 2011 ankommen und sich dem Markttrend gemäß entwickeln würde! Die Jungs kriegen es sogar hin, mit Ihrem Officepaket Dateien über Samba Rechte zu verpassen, die eigentlich unmöglich sind. Stichwort: „Ich möchte gerne, das ich auf die Datei, die ich gerade abspeichere, weder Lese- noch Schreibrechte habe„.

Ich migriere gerade den aktuellen Samba-PDC in unserer Firma von Version 2.5.x auf 3.5.8 . Die Userdaten migrieren: Kein Problem! Reines Datei-kopieren. Was passiert aber, sobald sich ein User unter einem Windows ab Vista (getestet: Windows Vista, 7, Server 2008 R2) anmeldet? Sofortige Wiederabmeldung, ohne Fehlermeldung. Super!!

Ich sage Euch: Wenn Spiele und Branchenriesen wie Adobe Photoshop / Dreamweaver sauber unter Linux laufen würden, hätte ich diesen Krampf schon vor Jahren auch privat von meiner Hardware verbannt 😛

 

Whooooho!

Ich habe eben herausgefunden wie man problemlos und nativ (ohne wine o.ä.) GuitarPro6 unter Linux zum laufen bringt! Zwar spezialisiere ich mich hier auf Gentoo Linux, die beschriebenen Schritte sollten aber adäquat auf allen Distributionen funktionieren.

Zunächst einmal läd man sich die Linuxversion von GuitarPro6 herunter. Diese liegt als .deb Paket für Ubuntu Linux vor. Um die Daten daraus zu entpacken, verwendet man am besten das Programm „ar“:

mr@mrvaio ~/Downloads $ ar x GuitarPro6-rev9063.deb
mr@mrvaio ~/Downloads $ ls -l
insgesamt 84816
-rw-r–r– 1 mr users 43419258 15. Feb 01:31 GuitarPro6-rev9063.deb
-rw-r–r– 1 mr users    34121 15. Feb 01:33 control.tar.gz
-rw-r–r– 1 mr users 43384944 15. Feb 01:33  data.tar.gz
-rw-r–r– 1 mr users        4 15. Feb 01:33 debian-binary
mr@mrvaio ~/Downloads $

Das tar.gz Archiv data.tar.gz entpackt man ganz einfach wie gehabt; das Archiv control.tar.gz, sowie die anderen Dateien werden nicht benötigt. Wir erhalten dadurch einmal die Symbole für „/usr/local/share/pixmaps“ und das .desktop – File für „/usr/local/share/applications“, sowie die eigentlichen Programmdateien. Man verschiebt einfach alles, was sich im entpackten Verzeichnis „usr/share“ befindet einfach nach „/usr/local/share“, sowie den Ordner GuitarPro6 aus „opt“ nach „/opt“.

Damit sind wir eigentlich schon fertig! Man muss nur eine handvoll Dinge bei der Benutzung beachten.

So muss man das Programm beispielsweise aus dem Verzeichnis „/opt/GuitarPro6“ heraus starten, sonst findet es seine benötigten Dateien nicht:

mr@mrvaio ~/Downloads $ cd /opt/GuitarPro6
mr@mrvaio /opt/GuitarPro6 $ ./GuitarPro &

Guitar Pro bringt zudem Qt Libraries in einer anderen Version mit als sie bei den meisten aktuellen Distributionen beiliegt. Man erhält beim Start von GuitarPro6 daher folgende Fehlermeldung:

mr@mrvaio /opt/GuitarPro6 $ ./GuitarPro
Cannot mix incompatible Qt libraries
Abgebrochen
mr@mrvaio /opt/GuitarPro6 $

Dieses lässt sich leicht beheben: Alle Dateien, welche auf *Qt*.* passen, aus dem Verzeichnis „/opt/GuitarPro6“ löschen.
Es erscheint dann beim starten zwar nach wie vor eine Fehlermeldung, das GuitarPro6 gegen eine andere Qt Version kompiliert wurde, jedoch kann man diese mit einem Klick auf „OK“ gefahrlos schließen.
Anschließend muss man seinen Lizenzschlüssel eingeben. Der Haken, das man das gerne für alle User freischalten möchte, hat bei mir weder als unprivilegierter User, noch als root geklappt. Für beide musste ich einmal meinen Lizenzkey eingeben.

Was leider auch noch nicht funktioniert, ist das starten des Updaters aus dem Hilfemenü von GuitarPro6 heraus. Klickt man dieses an, passiert erstmal garnichts.
Man kann den Updater jedoch trotzdem verwenden, indem man die folgenden Schritte befolgt:

  1. Wenn der X Server als User läuft, „root“ zunächst eine Berechtigung hierfür einräumen, indem man als der User folgendes ausführt: „xhost +root“
  2. In einer Konsole „root“ werden
  3. cd /opt/GuitarPro6
  4. ./GPUpdater
  5. ./temp.GPUpdater

Der Updater sollte nun anfangen die Updates herunter zu laden. Das kann eine Weile dauern; bei mir waren es ca. 2 GB, da er auch noch die ganzen Soundbänke mit herunter läd.

Offiziell ist Ubuntu Linux das einzige unterstützte Linux und manches funktioniert, wie beschrieben, auf anderen noch nicht ganz rund. Man muss den Jungs von Arobas Music daher dennoch großen Respekt zollen! Zum einen hat jede Firma, die mit Ihren Produkten den Schritt zur Linuxunterstützung meinen Respekt verdient, da diese wunderbare Plattform leider trotz riesiger und stetig wachsender Verbreitung (gerade unter den kreativen Menschen) von den meisten Herstellern nach wie vor gemieden zu werden scheint. Zudem, wenn man bedenkt, das dieses das erste Release ist, welches sie für Linux rausbringen, muss ich sagen das schon erstaunlich viel funktioniert! Da kann man es verschmerzen, das derzeit nur eine Distribution offiziell unterstützt wird und es bei anderen derzeit noch kleinere Fehler gibt. Im normalen Betrieb konnte ich noch keinerlei Fehler feststellen. Verwendet man ein anderes Linux als empfohlen, muss man diese Abstriche halt hinnehmen.

Mein Fazit: Daumen hoch und weiter so! 🙂

Ich hatte heute auf einem MySQL Slave Server den folgenden Fehler bei der Replikation von einem Master MySQL Server:

mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: www.xxx.yyy.zzz
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: db.002174
Read_Master_Log_Pos: 342719703
Relay_Log_File: mysqld-relay-bin.000003
Relay_Log_Pos: 6458545
Relay_Master_Log_File: db.002170
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 1005
Last_Error: Error ‚Can’t create table ‚/tmp/#sql7c49_2f_0′ (errno: -1)‘ on query. Default database: ‚live‘. Query: ‚create temporary table tmp_gen_table like tmp_to_gen_neu‘
Skip_Counter: 0
Exec_Master_Log_Pos: 620120976
Relay_Log_Space: 4109869668
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
1 row in set (0.09 sec)

Ich musste recht lange suchen. Die o.g. Datei (/tmp/#sql7c49_2f_0.ibd) wurde zwar von mysql:mysql angelegt, jedoch war sie 0 byte groß. Im MySQL – Log fand ich nur den o.g. Fehler wieder. Also schaute ich im syslog und wurde fündig:

Jan 28 12:55:22 db kernel: [495131.291630] audit(1264679722.493:141): type=1503 operation=“file_lock“ requested_mask=“wk::“ denied_mask=“k::“ name=“/tmp/#sql7c49_2f_0.ibd“ pid=7924 profile=“/usr/sbin/mysqld“ namespace=“default“

Das kenne ich inzwischen: Eine Zeile mit so komischen „requested_mask=“wk::““ – Rechten kommt meistens, wenn eine Applikation an apparmor scheitert. Ich habe also der Datei /etc/apparmor.d/usr.sbin.mysqld die folgenden Zeilen hinzugefügt:

/usr/sbin/mysqld {

/tmp/ r,
/tmp/** rwk,
}

Schon geht’s!
Ich fand es sehr überraschend, das das /tmp – Verzeichnis (in meinem Oldschool-Linux-Hinterkopf immer als das „jeder darf – Verzeichnis“ abgelegt) ebenfalls einer eigenen Zeile in der apparmor-Konfiguration bedarf. Noch verwunderlicher finde ich, das dieses unter Ubuntu (8.04 – Hardy Heron) nicht standardmäßig dort aufgenommen wurde. Immerhin ist tmpdir=/tmp die Standardeinstellung unter dieser Ubuntu-Version.


Hab heute mal wieder eines dieser zunächst unerklärlichen Probleme gehabt:

  • Der courier-authdaemond und der courier-imapd laufen seit JAHREN unverändert problemfrei.
  • Ich habe nichts geändert.
  • Trotzdem bekomme ich im mail.info – Log diese Zeile:
    „couriertcpd: malloc: Input/output error“

Ich habe die Configs überprüft, Rechte im Dateisystem, alles. Nichts gefunden.

Schließlich bin ich im Archiv der courier-users Mailingliste auf die Lösung gestoßen:
Der Courier IMAPd arbeitet Standardmäßig mit dem FAM (File Alteration Monitor) zusammen. Scheinbar kommt der hin und wieder mal ins Straucheln und sollte in diesem Fall, zusammen mit dem portmap Daemon, neu gestartet werden.

Jean-Marc Liotier, der diesen Fehler auf der Mailingliste gepostet hatte, und auch mein Problem ließen sich jedenfalls so beheben.

Schon fies der Fehler, da im Log ja nur der couriertcpd auftaucht, woraufhin man ja zunächst mal geneigt ist hier nach dem Fehler zu suchen …

Hallo zusammen!

ENDLICH! Endlich habe ich den Kniff wieder gefunden!
Ich habe auf diesem Server, auf dem auch diese Homepage gehostet ist, eine farbige motd Datei angelegt. Hierin werden neben der IP und einem kleinen ASCII – Bildchen die auf diesem Server konfigurierten Domains aufgelistet.
Damals habe ich mir nicht weiter aufgeschrieben wie das geht, hatte ich das doch nach 1-2 Minuten googlen direkt gefunden.

Screenshot der MOTD von zoosau.de

Screenshot der MOTD von zoosau.de

Heute laufen auf demselben Server, auf dem früher nur diese eine Domain, zoosau.de, lief schon 6.
Natürlich wollte ich die neuen 5 Domains immer auch gerne in diese Datei eintragen, jedoch fand ich auf Teufel komm raus den Kniff nicht mehr, wie das geht mit farbigem Text!
Heute bin ich der Sache endlich deutlich näher gekommen. Damit ich das nächste Mal nicht wieder umsonst Ewigkeiten suche, beschreibe ich das Vorgehen hier.

Zunächst öffnet man eine Datei, oder legt halt mit dem vim eine neue an. Will man nun … sagen wir: Rot, blinkend und auf grünem Hintergrund schreiben, dann begibt man sich zunächst in den Insert – Modus (i) und drückt dann STRG+v , gefolgt von der „Pfeiltaste-nach-rechts“-Taste. Man sieht nun folgendes erscheinen: „^[OC “ , wobei der Teil „^[“ blau dargestellt wird (sofern Konsole und vim auf farbige Darstellung konfiguriert sind). Die letzten beiden Zeichen, das „OC“ löscht man nun wieder – es geht um darum, das man die Escape-Character „^[“ erzeugt hat. Warum man nicht einfach „^[“ eintippt? Nun: Testet meine Methode und vergleicht das Ergebnis mit dem Vorgehen „^[“ nur einzutippen 😉 Es wird dann halt als die Zeichen „^[“ eingefügt, nicht aber als die Kontrollzeichen. Diese werden nur als blaue „^[“ angezeigt; eigentlich stecken da ganz andere Codes hinter. Schwer zu erklären, einfach mal nach „escape sequences“ googlen.

So, damit wird die Sequenz eingeleitet. Nun müssen wir eingeben, was wir darstellen wollen. Ein Blick in die Manpage von „dir_colors“ gibt uns hier ein paar Möglichkeiten an die Hand. Man kann hier verschiedene Werte übergeben, welche durch ein „;“ getrennt und durch ein weiteres „[“ initialisiert werden. Für unser „Rote, blinkende Schrift auf grünem Grund“ – Beispiel nehmen wir also „05;31;42“ (05 = blinkender Text; 31 = rote Schrift im Vordergrund und 42 = Hintergrundfarbe grün). Anschließend wird ein „m“ angehangen, um die Kontrollstruktur zu beenden und zu signalisieren „Jetzt kommt mein Text!“. Bisher haben wir also: „^[[05;31;42m“

Als kleines Beispiel schreibe ich nun einfach „Ich bin haesslicher, blinkender Text auf einem unmoeglichen Hintergrund!“ direkt hinter das „m“. Dieser Text soll also gleich in unserer sehr eigenwilligen Farbkonstellation ausgegeben werden.

Genau wie die Escapesequenz eingeleitet und aktiviert wurde, muss sie nun auch wieder beendet werden um normalen Text schreiben zu können. Sonst hätte man am Ende ja nur eine große, blinkende, häßliche Textdatei, und das wollen wir wohl nicht 😉
Hierzu bedienen wir uns wieder der Tastenkombination STRG-v, „Pfeiltaste-nach-rechts“ – Taste und dem löschen der Zeichen „OC“. Als nächstes folgt noch ein „[0m“. Die 0 setzt den Text wieder auf seine Standardeigenschaften zurück.
Zur Überprüfung schreibe ich in diesem Beispiel noch den Text „Puh, endlich ist der Albtraum vorbei!“ dahinter.

So, dann bewundern wir mal unser Werk: Abspeichern, vim verlassen und „cat Dateiname“ eingeben.

Ich bin mir seeeeeehr sicher, das dieses HowTo vor inhaltlichen und fachlichen Ungenauigkeiten nur so strotzt. Ich habe jedoch bisher keine bessere Anleitung gefunden. Wer Fehler findet, kann mich gerne durch einen Kommentar korrigieren 🙂

Ich hatte heute den Fall auf der Arbeit, das ich auf eine an einem unserer Suse Linux Server angeschlossene USB 2.0 Festplatte mehrere Gibibyte an Daten kopieren musste.

Das dauerte …. und dauerte …. schliesslich fiel mir auf, das die Daten mit nur 160 KB/s kopiert wurden. Das kam mir komisch vor, schliesslich sollten die Datenraten von USB 2.0 doch deutlich höher liegen. In diesem Wiki-Artikel fand ich schliesslich heraus, das es (laut Spezifikation) 480 Mbit/s hätten sein sollen; also ca. 60 MebiByte pro Sekunde.
Das hat mich dann schon sehr gewundert, schliesslich ist das nur ca. 1/384tel Bruchteil der Transferkapazität des Buses.

Eine erste Recherche heute auf der Arbeit förderte diesen Foreneintrag von Dezember 2007 zu Tage, in dem der Hinweis gegeben wird, das dieses Problem verschwindet, wenn die mount-Option „sync“ weggelassen wird. Als ich es ebenfalls probiert habe ohne „sync“ zu mounten, war es auch schlagartig schneller.

Inzwischen habe ich etwas genauer nachrecherchiert:
Bei dem ganzen handelt es sich um einen zumindest bei Novell (Suse) bekannten Bug (siehe Novell Bugzilla Database #105871). Ob er nun nur bei Suse Linux auftritt oder ob es ein genereller Linux Bug ist, das weiss ich nicht. Und ehrlich gesagt bin ich jetzt auch zu faul den ganzen Bug zu lesen. Wer mag, kann das gerne nachholen.

Unter’m Strich bleibt zumindest für Suse Linux in der Version 10.x folgende Lösung: USB Laufwerke nicht mit der mountoption „sync“ mounten!
(Ob andere Suse Linux Versionen oder gar andere Distributionen betroffen sind weiss ich nicht; einfach ausprobieren!).

Für per „subfs“ gemountete Dateisysteme gibt es einen weiterführenden Workarround um sicher zu stellen, das diese Dateisysteme nicht mit „sync“ gemounted werden:

  1. mkdir -p /usr/share/hal/fdi/policy/95userpolicy
  2. Eine Datei namens „nosync.fdi“ darin erzeugen (vi /usr/share/hal/fdi/policy/95userpolicy/nosync.fdi) und darin folgenden Inhalt anlegen:
    <?xml version=“1.0″ encoding=“UTF-8″?>
    <deviceinfo version=“0.2″>
    <device>
    <!– disable sync for mount –>
    <match key=“block.is_volume“ bool=“true“>
    <match key=“volume.fsusage“ string=“filesystem“>
    <match key=“volume.uuid“ string=“==UUID==“>
    <merge key=“volume.policy.mount_option.sync“
    type=“bool“>false</merge>
    </match>
    </match>
    </match>
    </device>
    </deviceinfo>
  3. Ausführen von „lshal„. Die Passage im unter Punkt 2. aufgeführten Text die hier temporär mit „==UUID==“ befüllt ist, mit der Ausgabe dieses Befehls ersetzen.
  4. HAL Daemon neu starten (rhal restart)

Ich hoffe dieses hilft einigen von Euch 🙂

Wie immer würde ich mich freuen, wenn ihr einen kurzen Kommentar eintragen würdet!

Achja, wie immer der Hinweis: Wer sich über diese „merkwürdigen“ Bezeichnungen wie „MebiByte“, GibiByte“, etc. wundert, dem sein mein Artikel über Binärpräfixe als Lektüre ans Herz gelegt 🙂