Kategorien
Archiv

Artikel-Schlagworte: „Linux“

MySQL Fehler unter Ubuntu “‘Can’t create table ‘/tmp/#sql7c49_2f_0′ (errno: -1)’ on query.”

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.


Wenn der couriertcpd “malloc: Input/output error” meldet

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 …

Mit dem vim eine farbige motd erstellen

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 :)

USB Transfer unter Suse Linux suuuuper langsam …

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 :)

Automatisches einrücken im Editor vim

Der besonders unter Linux sehr weit verbreitete Texteditor vim bringt in der Standardkonfiguration eine Eigenschaft mit sich, die mich persönlich mehr stört als nutzt:

Die Option autoindent.
Diese sorgt dafür, das eine Einrückung am Anfang einer Zeile, durch Leerzeichen oder Tabs in der folgenden Zeile, nach drücken der Enter Taste, ebenfalls eingerückt wird.
Das klingt zunächst mal sehr praktisch, da man so sehr einfach eine Formatierung beibehalten kann. Sehr nervig wird sie jedoch, wenn man mit Einrückungen versehene Textteile per Copy&Paste im vim einfügt. Es werden dann nämlich, zusätzlich zu den Einrückungen im kopierten Text, vom vim Einrückungen der vorigen Zeile eingefügt.

Das sieht dann sehr unordentlich aus und man muß alles manuell wieder entfernen.

Daher stelle ich diese meistens lieber ab.

Das geht entweder, indem man die Einstellung in der Konfigurationsdatei des Editors setzt (unter Debian /etc/vim/vimrc) oder im Editor selbst.

In der Konfigurationsdatei fügt man einfach folgende Zeile ein:

set noautoindent

Im Editor selbst muss man sich im Kommandomodus befinden. Die Einstellung setzt man durch:

:set noautoindent

Setzt man sie im Editor selbst, wird die Einstellung jedoch nicht gespeichert und gilt nur für die aktuell ausgeführte Editorinstanz.

Gefunden habe ich diesen Hinweis auf dieser Seite.

NVidia Grafiktreiber unter Linux ab Kernel 2.6.24

Eine Veränderung im Linux Kernel 2.6 macht es unmöglich, ohne weitere Anpassungen einen NVidia Treiber der Versionen 71.86.04, 96.43.05, 169.12 und 171.06 zu installieren. Es kommt eine Fehlermeldung.

Die einzige Möglichkeit trotzdem einen Treiber zu installieren besteht derzeit aus einem Patch für den Treiber. Diese findet man hier. Nachdem man sich den passenden Patch heruntergeladen hat, wird dieser mit der Kommandozeilenoption –apply-patch installiert:

sh NVIDIA-Linux-Version.run –apply-patch NVIDIA_kernel-Version.diff.txt

Hierdurch wird ein neuer Installer generiert, der im selben Verzeichniss wie der originale liegt, jedoch auf -custom.run endet.

Dieser lässt sich nun wie gewohnt installieren:

sh NVIDIA-Linux-Version-custom.run

Leere Zeilen entfernen mit grep

Habe ich mich immer gefragt, aber nie herausgefunden: Wie entfernt man eine leere Zeile mit grep?

Geht ganz einfach:

grep -v '^$'

Ich werd’ ISP!

Genau, denn wenn man sich sein eigenes Internet baut, dann muss man nicht immer die Seiten gucken die Arcor einem gibt!

… naja etwas mehr niveau hat dieser Artikel dann doch ;)

Ich bin Congstar Kunde und damit soweit auch ganz zufrieden. Ich wollte keine Verträge mehr, wo ich zum Dank blöd genug gewesen zu sein, mich wieder 2 Jahre an einen gleichbleibendem Tarif auf einem Markt sinkender Kosten gebunden zu haben, für ein Telefon zweiter Wahl entscheiden darf, das dann “nur noch” 10 € (plus die Reingewinne der Grundgebühr über 24 Monate hinweg kostet). Daher bin ich zu Congstar gewechselt.

Ich weiss: Die haben NICHTS, sind nicht die billigsten, bieten keine gescheiten Handys, und, und, und.

Aber für mich ist es ideal.

Ich habe für 10 € meine Festnetzflat, kann je nach Lebenssituation Optionen hinzubuchen oder kündigen, und – mal ehrlich: Wie oft habt ihr während einem Eurer Verträge mal mit dem Support telefoniert und wart mit deren Aussagen zufrieden?

Was schert’s mich, da da die T-Mobile Ausschussware der Callagents sitzt für die 15 Minuten, die ich durchschnittlich im Jahr mit denen telefoniere?

Nun bin ich jedoch schon an die Grenzen des Congstar Angebotes gestoßen: KEINE DATENFLAT !!! *kreiiiiisch!!*

Was mache ich da nur?

Meine Idee©:

Ich modde meine Fritz Box Fon WLAN 7050 zum DialIn-Server um! Wie früher, wo man ein Modem hatte, ca. 50 km Kabel aus selbst zusammengelöteten Kabelteilenin der Telefondose verschwinden liess, Username, Passwort und Telefonnummer des Providers brauchte und sich dumm und dusselig bezahlt hat an Minutenpreisen.

Nur mit dem Unterschied, das ich dank der DSL Flatrate zuhause, damit verbundener ISDN Leitung bei Arcor und modding-fähiger Fritz Box und einer Festnetzflat im Handy keinen Cent dazu bezahlen werde! :)

Die Theorie ist so:

Ich richte mir im Handy eine Modemverbindung ein. Diese ruft auf einer meiner ISDN Nummern zuhause an. Nun soll die Fritz Box Anrufe auf dieser Nummer entgegen nehmen und Username/Passwort Authentifizierung betreiben. Stimmen die Daten, soll sie zwischen der Analogleitung zwischen angerufenem Anschluss und anrufendem Handy und der DSL Leitung routen.

Theoretisch dürfte das ganze so kostenfrei für mich bleiben :)

Ich habe mich mit so einer Technik nie beschäftigt. Ich weiss nichtmal, ob es dafür gescheite Software gibt, die man realistisch auf der Fritz Box laufen lassen kann.

Dieses kleine Erfahrungslogbuch wird’s zeigen :D

Never change a running system …

… erst recht nicht, indem man sich blind auf den Skill anderer verlässt. Und schonmal GARNICHT auf Produktivsystemen! :(

Alles Dinge, die ich eigentlich wissen sollte – dennoch hielt ich es vorgestern für eine total gute Idee dpkg über einen “apt-get dist-upgrade” – Befehl die Anweisung zu geben nun vollständig von etch auf lenny Upzugraden. Natürlich ohne das zuvor auf einem gespiegeltem Testsystem zu testen. Diese tolle Idee hatte nun fast 2 Tage off zur Folge, da es natürlich nicht reibungslos geklappt hat.

Warum auch immer: Anschliessend hat Apache meine Konfig nicht mehr gefressen, das System hatte keine route mehr gesetzt, usw. Ich konnte die route auch manuell setzen; dann kam ich zwar wieder von mir aus (Arcor Dial-In) per SSH auf das System, jedoch hatte ich keine route zu einem benachbartem Server (ebenfalls ein Strato-Host). So sehr ich auch herumprobiert habe, ich erreichte das System nicht.

Ich habe die 7 GB Daten des Systems also die letzten 2 Tage komplett über’s Netz weggesichert und anschliessend das System neu installiert.

Ich denke weitestgehend läuft nun wieder alles.

Aber gut – es bringt mir die alte Weisheit “Never change a running System” (Ändere nie ein laufendes System) wieder ins Gedächtnis. Lieber privat als auf der Arbeit bei einem Kunden-Liveserver :)

An dieser Stelle nochmal: Sorry für alle Server-mitnutzer; war mein Fehler.

Zeichensatz von Dateinamen unter Linux umwandeln

Ich musste heute wieder einmal mit mkisofs ein ISO File eines Verzeichnisses unter Linux erstellen. Dabei stand ich mal wieder vor dem Problem, das es Dateien aus einem ehemaligen Samba – Share eines Samba Servers waren, dessen Zeichensatz nicht explizit gesetzt war, wodurch der Windows Zeichensatz cp850 verwendet wird. Dieses sieht unter linux nicht nur “ganz toll” aus, nein: Programme wie mkisofs können daher auch solche Dateien nicht wirklich gut verarbeiten.

Ich hatte wie der Autor des Blogeintrages, durch welchen ich letztendlich mal wieder fündig wurde, das Problem das ich das Programm convmv kannte, damit auch schonmal gearbeitet hatte, ich mir den Namen jedoch nicht wirklich gut einprägen konnte.

Unter openSuSe 10.3 heisst das RPM auch einfach convmv.

Um nun Dateien eines Samba – Shares gescheit umzubenennen, gibt man convmv folgende Parameter mit:

convmv -f cp850 -t utf-8 --notest -r ordner

Mit -f wird der aktuelle Zeichensatz angegeben.

-t definiert den Ziel-Zeichensatz.

-r führt das ganze Programm rekursiv auf das ganze Verzeichniss aus und

--notest sorgt dafür, das die Dateien effektiv umbenannt werden.

Achtung:

Wer sich über das Ergebniss nicht ganz sicher ist, der sollte die Option --notest zunächst mal weglassen. Dann Zeigt das Programm nur an was es tun würde.