Das letzte rausholen …

Meine Kiste ist nicht wirklich die Highperformance Maschine. Von der Ausstattung her gesehen ist er mittlerweile eher schwach ausgestattet. Trotzdem reicht die Performance fürs ganze Jahr. Eine Ausnahme ist immer das Wochenende rund um den Rothsee-Triathlon. Nachdem das Wochenende naht, suche ich noch nach den letzten Möglichkeiten bei denen ich die letzten Häppchen an Performance raus holen kann.

Gestern habe ich an 2 Schrauben gedreht:

Syslog
Nachdem der Server auch viele Daemons am laufen hat, schreibt er auch zig Logfiles. Gestern habe ich die alle mal durchgesehen und allerhand doppelte Einträge gefunden. Daher läuft jetzt eine überarbeitete Konfiguration des Syslog-Daemons. Nichts mehr doppelt! Außerdem läuft nur nach das wirklich wichtige synchron alles andere hat ein „-“ vor dem File-/Pfadnamen.

Die Änderungen haben schon bewirkt, dass die durchschnittlichen IOWaits zurückgegangen sind. Ja mein Softraid Server hat ein paar 🙂

swappiness
Geht der Speicher zu ende hat Linux 2 Möglichkeiten:

  1. Alte Caches aus dem Ram werfen
  2. Swappen

Seit dem 2.6er Kernel kann man das Verhältnis zwischen den beiden Methoden beeinflussen. Der Parameter dafür heißt swappiness und lässt sich per proc Filesystem abfragen:

# cat /proc/sys/vm/swappiness
60

60 ist der Debian Defaultwert. Ich will aber, dass mein Server als allerletztes swapt und lieber davor Caches leert. Die Applikationen, die ich betreibe, sollten sich selbständig ums cachen kümmern (etwa APC). Daher will ich einen Wert von „0“ für swappiness. Also einfach folgendes in sysctl.conf eintragen:

vm.swappiness=0

und mit

# sysctl -p

aktivieren.

Mal sehen ob es das Erwünschte bringt.

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Du denkst Du kennst sie alle … Teil 2

Man lernt nie aus. Eben stand ich vor dem Problem eine Datei ab der 3ten Zeile zu verarbeiten. Da wollte ich schon fast Perl bemühen, dann habe ich doch die manpages von head und tail durchgelesen . Und wieder mal entdeckt, dass es so einfach sein kann. tail kann das:

# tail -n+3 /tmp/foo
VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

vim Split Screen

Mit [[vim]] kann man mehrere Files gleichzeitig bearbeiten. Da ich immer die Tastenkürzel vergesse schreibe ich mir die hier kurz auf. Für die Hilfe Seite reicht es aber auch :help usr_08.txt einzugeben.

Ein weiteres File in einem neuen Fenster aufmachen geht mit:

  • :split filename
  • :vsplit filename

Oder über die Shell:

  • $ vi -o file1.txt file2.txt # Horizontal
  • $ vi -O file1.txt file2.txt # Vertical

vim hat auch eine diff-Ansicht:

  • $ vimdiff file.txt~ file.txt # letzte Änderung am file.txt
  • $ vimdiff bar foo # Vergleiche foo mit bar
  • $ gvimdiff file.txt~ file.txt # in X

Ctrl-W commands:

  • Ctrl-W n Neues Fenster
  • Ctrl-W + Fenster vergrößern
  • Ctrl-W – Fenster verkleinern
  • Ctrl-W h Wechsle zum Fenster links
  • Ctrl-W j Wechsle zum Fenster unten
  • Ctrl-W k Wechsle zum Fenster oben
  • Ctrl-W l Wechsle zum Fenster rechts
  • Ctrl-W w Wechsle zum nächsten Fenster

Um das scrollen zu kontrollieren genügen folgende Kommandos:

  • :set scrollbind
  • :set noscrollbind
VN:F [1.9.22_1171]
Rating: 9.0/10 (2 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 2 votes)

Killed by friendly fire

Gestern Abend ist einen Bekannten etwas passiert, dass muss ich hier aufschreiben. Er hat die Anleitung aus einem Wiki 1 zu 1 kopiert und ausgeführt. Die Anleitung sah wie folgt aus:

~> /etc/init.d/foobar start

Na wer sieht das Problem? Ich hab’s am Anfang nicht kapiert. Es liegt an ~>. In dem er den Prompt mit kopiert hat vernichtet er das Skript. Die Shell kopiert nichts nach /etc/init.d/foobar anstatt das Skript auszuführen.

Also Vorsicht beim Drag+Drop.

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

AVM Fritzcard und Kernel Updates

Kernel Updates auf meiner privaten Kiste verursachen bei mir immer ein nervöses Gefühl. Wir haben es nicht so gerne, wenn unsere Telefonanlage länger ausfällt. Nachdem in meinem Server immer noch eine AVM Fritzcard als ISDN Gateway eingebaut ist muss ich mich da beeilen. Die Treiber für die Karte werden ja leider schon ewig nicht mehr von AVM gepflegt. Der Support ist schon ausgelaufen.
Heute war mal wieder so ein Update-Tag und ich konnte das ganze echt entspannt angehen, da ich den Treiber mal nicht selbst patchen musste sondern auf einen fertigen zurückgreifen konnte. Auf der BeLUG findet man alles was man braucht. Funktioniert auf Anhieb. Ein beruhigendes Gefühl 😀

Ich sehe übrigens den Tag herbei an dem Ksplice bei jeder Distri dabei ist. Allerdings ist ein regelmässiger Reboot auch nie verkehrt. So weiß man, dass das System im Fall der Fälle wieder startet.

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

serielle Schnittstellen …

… treiben mich in den Wahnsinn. Ständig haben sie nicht die Parameter, die ich eingestellt hatte und mein Zugriff darauf ist wieder unterbrochen. Meistens verwende ich serielle Schnittstellen nicht direkt sondern gebe sie per interceptty über TCP im Netzwerk frei. Deswegen ist es wichtig, dass die Parameter richtig sind. Sonst kommt nur Kauderwelsch zurück. Interceptty hat zwar einen Parameter dafür „-s“, aber ich vergesse immer wieder den Syntax dafür. Außerdem kann ich mir nie merken, wie ich die aktuellen Parameter abfrage. Daher schreib ich das jetzt hier auf!

  1. Abfragen der aktuellen Werte mit
    1
    
    stty -F /dev/ttyS0 -a
  2. Setzen mit
    1
    
    stty -F /dev/ttyS0 ixon ixoff

Mal sehen, wann ich mich wieder nicht an stty erinnern kann 🙂

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Aufzug (teilweise) außer Betrieb!

elevatorDer Linux Kernel bringt ab 2.6 einen intelligenten IO Scheduler mit. Bisher habe ich mich aber bei meinem „Server“ nicht darum gekümmert. Nachdem aber in meinem Server ein Softraid arbeitet und der cfq Scheduler eingestellt war ist die Last bei viel IO auf der schmalen alten Büchse doch gelegentlich ziemlich nach oben. Daher habe ich den Scheduler mal statt auf cfq auf deadline umgestellt. Das sollte die CPU entlasten. Mal sehen. Hier meine Umstellungsschritte:

  1. Aktiven Scheduler prüfen:
    1
    2
    3
    4
    
    find /sys 2>/dev/null|grep -i  scheduler|xargs -n1 grep -H noop -i
    /sys/block/sr0/queue/scheduler:noop anticipatory deadline [cfq] 
    /sys/block/sdb/queue/scheduler:noop anticipatory deadline [cfq] 
    /sys/block/sda/queue/scheduler:noop anticipatory deadline [cfq]
  2. Scheduler zur Laufzeit ändern:
    1
    2
    
    echo "deadline" > /sys/block/sda/queue/scheduler 
    echo "deadline" > /sys/block/sdb/queue/scheduler
  3. Grub anpassen:
    Also „elevator=deadline“ beim entsprechenden Kernel in /boot/grub/menu.lst ergänzen.

Fertig. Mal sehen was die Load dazu sagt.

Übrigens vergesse ich immer wieder den IO Scheduler bei Raidsystemen oder in VMs auf noop zu setzen. Reinste Resourcen Verschwendung …

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Linux root Passwort recovern

Eben hab ich nachdem Installieren schon wieder das Root Passwort eines Server vergessen! Nachdem ich nicht der einzige bin, dem das passiert, hier mal eine Anleitung zum recovern:

  1. Grub
    • System neustarten und beim Prompt den Kernel auswählen und e drücken. Achtung! Evtl. bleiben nur ein paar Sekunden. Also schnell sein.
    • Auf dem neuen Screen die Zeile, die mit „kernel“ beginnt“, auswählen und wieder e drücken.
    • ‚ single‘ ans Ende anhängen (natürlich ohne Anführungszeichen). Evtl. braucht das System das root-Passwort beim Booten, dann einfach noch ‚ init=/sh‘ anhängen. ‚Enter‘ drücken um die Änderungen zu speichern.
    • Mit ‚b‘ im Single User Mode booten.
    • Nachdem booten ist man als root angemeldet. Jetzt einfach mit passwd das Root Password ändern.
    • Am besten nochmal rebooten und neues Passwort ausprobieren
    • Fertig
  2. Lilo
    • System neustarten und evtl. ‚Shift‘ drücken um die Profile zu sehen.
    • Namen des Profils auswählen und eigeben (z.B. ‚linux‘)
    • ‚ single‘ ans Ende anhängen (natürlich ohne Anführungszeichen). Evtl. braucht das System das root-Passwort beim Booten, dann einfach noch ‚ init=/sh‘ anhängen. ‚Enter‘ drücken um die Änderungen zu speichern.
    • Mit ‚Enter‘ im Single User Mode booten.
    • Nachdem booten ist man als root angemeldet. Jetzt einfach mit passwd das Root Password ändern.
    • Am besten nochmal rebooten und neues Passwort ausprobieren
    • Fertig

[important]
Damit wird auch klar, dass jeder, der vor dem System steht sich einfach Zugang verschaffen kann. Deswegen sollte man sich das speziell bei der Virtualisierung vor Augen führen. Natürlich gibt’s auch Möglichkeiten das abzusichern (Boot-Passwort, Festplattenverschlüsselung, …), die aber alle wiederum ihre Nachteile haben.
[/important]

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Compactflash readonly

Mein Thinclient ist ja nicht wirklich ein Thinclient. Es ist ein sehr abgespecktes Debian aber eben mit X und den wichtigsten Applikationen (Firefox, Acroread, …) . Installiert habe ich das Teil auf einem 4GB großen CompactFlash.

Nachdem ein CompactFlash primär 2 Nachteile hat, nämlich

  • nicht beliebig viele Schreibzüglen
  • nicht beliebig schnell

macht voyage Linux eigentlich was ziemlich schlaues: Am Ende des Booten wird das Filesystem als readonly gemountet. /var/log,/var/tmp,/var/run und /var/lock werden dann per AFS wieder beschreibbar im Speicher gemountet. Wird der Thinclient runtergefahren, wird als erstes der CompactFlash Speicher wieder readwrite gemounted, danach werden die Inhalte dieser /var/… Mounts auf den CompactFlash geschrieben. So geht nichts verloren und es werden eben die vielen langsamen und vernichtenden Schreibzugriffe vermieden.

Nachdem bei mir auch X am lauft muss ich meine Home-Verzeichnisse auch in das System mit einklinken. Aber nichts leichter als das bei voyage. Einfach in /etc/default/voyage-util folgende Zeile ändern:

VOYAGE_SYNC_DIRS="home"

Ein Problem gibt es aber noch. Der Thinclient fährt schneller runter als der gam_server braucht um sich zu beenden. Nachdem gam_server auch im /home lauscht würde das das Syncen verhindern. Deshalb habe ich brutal wie ich bin einfach im /etc/init.d/voyage-sync ein entsprechendes killall und ein wenig Pause ergänzt:

1
2
3
4
5
6
        'stop')
                echo "Voyage is now synchroning changed files..."
                killall -9 gam_server
                sleep 5
                [ -f /usr/local/sbin/remountrw ] && /usr/local/sbin/remountrw
                for SYNC_DIR in $SYNC_DIRS; do

Das beste an der Lösung ist übrigens auch, dass man den Thinclient jederzeit einfach ausschalten kann ohne ein korruptes Filesystem zu riskieren. Man verliert zwar die Änderungen im Home aber der Thinclient ist ja auch nicht dafür gedacht dort viel abzulegen. Für Dokumente würde ich eher einen USB-Stick nehmen. Die Daten kann man dann auch super auf anderen Systemen sichern.

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

mount –bind

Symbolische Links lassen sich ganz einfach mit folgenden Befehl anlegen:

ln -s quelle [ziel]

Der Nachteil ist, dass der symbolische Link eben nur ein Link ist und sich wie eine Datei verhält. Heißt der Link lässt sich ganz einfach von jedem wieder löschen – ob aus Versehen oder aus Absicht!

Hängt man den Link stattdessen ein wird es aber verhindert. Dann ist der Link keine Datei sondern ein Hardlink und alles sieht so aus, als ob es dort tatsächlich liegen würde und dies mit allen Rechten. Damit lässt sich der Link auch nicht ohne weiteres löschen. Manuell kann man den Link so erzeugen:

mount --bind quelle ziel

Soll es immer beim Booten verlinkt werden genügt solch ein Eintrag in der /etc/fstab:

/home/foo    /export/foo    none    bind  0 0
VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)