Aug 15

Folgendes Problem:
Irgendein Daemon moechte einen Listener aufbauen und grabscht sich anstelle des IPv4 Sockets ein IPv6 Socket. Dummerweise kann man das dem Daemon nicht abgewoehnen, da dieser kein config-File oder Closed-Source ist. Abhilfe schafft das disablen des kompletten ipv6 Stacks. Wie das geht ?

Einfach in der /etc/modprobe.d/aliases folgende Zeile abaendern (die obere Zeile ist das original):

#alias net-pf-10 ipv6
alias net-pf-10 off

Danach rebooten (ohne geht leider beim 2.6er Kernel nicht) und gut ist.

Jul 31

Oft gesehen, nie benutzt. Zu der Kategorie gehoert wohl das kleine aber feine Tool “at”. Quasi ein “Wegwerf”-CRON. Dabei ist das Ding totsimpel zu bedienen, und dazu noch extremst nützlich. Wie es funktioniert ? Folgendermassen:

Angenommen ich muss dringend noch ein paar Files per scp kopieren, kann das aber erst machen, wenn kein Betrieb mehr auf dem Produktionssystem herrscht. Erschwerend kommt jetzt noch hinzu dass, sagen wir, der Betrieb erst gegen 23:00 beendet ist. Ein klassischer Fall für at:

at 23:00 [CR] (danach befinden wir uns im Commandmode)
scp Datei user@system:/directory [CR]
[CTRL+D]

Nun lediglich den Rechner auf dem das Kommando abgesetzt wurde anlassen (oder noch besser: Auf einem Remotesystem ausführen und anschliessend ausloggen) und ab gehts um 23:00 :-)

Eine Besonderheit für Mac-User gibt es noch. Der Dienst der die at-jobs (Eine Liste derer gibts übrigens via “atq”) startet, ist defaultmässig nicht gestartet. Das kann man via:

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

nachholen.

Viel Spass beim “at”ten …

Jul 22

Wer sich mit folgender Fehlermeldung bei der Benutzung von CGI::Ajax unter Perl herumquaelen muss, dem sei ein Downgrade auf die Version CGI-Ajax-0.697 ans Herz gelegt. Damit ist die Fehlermeldung naemlich dann Geschichte:

Undefined subroutine CGI=HASH(0xBLABLABLA)::header_type at CGI::Ajax line xxxx

Jun 20

Mit bind geht das schon lange. Man hat 2 Netze, mit jeweils zwei unterschiedlichen Nameservern die die privaten Adressen im jeweiligen LAN auflösen. Will man jetzt, z.B. via VPN beide Nameserver aus den jeweiligen LANs nutzen, so konfiguriert man den bind für die jeweiligen Netze als forwarder (Jeweils für das Netz mit seinem Nameserver einen Eintrag). Ein Beispiel:

Gegeben seien ein LAN mit der Domäne Intranet1.de und dem Nameserver 192.168.0.222, und das LAN mit der Domain intranet2.de welches seinen DNS auf 10.0.0.222 liegen hat. Natürlich gibts noch einen öffentlichen Nameserver, der hat in unserem Beispiel die 212.121.212.111 als IP.

In der named.conf sieht das dann so aus:

options {
directory “/var/named”;
forwarders { 212.121.212.111;};
};

zone “intranet1.de” in {
type forward;
forwarders {192.168.0.222; };
forward only;
};

zone “intranet2.de” in {
type forward;
forwarders {10.0.0.222; };
forward only;
};

Beim Mac ist das viel simpler. Man lege ein Directory /etc/resolver an und lege dort einfach pro Zone ein File ab. In diesem Beispiel wäre das dann /etc/resolver/intranet1.de mit dem Inhalt “nameserver 192.168.0.222″ und eine zweite Datei mit /etc/resolver/intranet2.de mit Inhalt “nameserver 10.0.0.222″. Fertig. Dumm nur das das ganze nicht persistent ist. Nach dem Neustart ist alles weg. Nicht so wenn man sich die Dateien per Shellscript aus der /etc/rc.common erstellen lässt. Funktioniert prima und ist simpel.

Jun 02

Als merker (einer der klamotten, die man immer wieder nachschlagen muss).

Will man die Hardware Clock unter Linux setzen, nehme man hwclock. Syntax:

hwclock –set –date=”10/10/02 10:45:00″

Wobei das Datumsformat = “MM/DD/YY HH24:MI:SS” ist.

Mrz 08

Wem Nagios schon immer etwas zu komplex zum konfigurieren war, der versuche sich doch mal an Monit.
Das Teil muss zwar auf jedem einzelnen Rechner laufen, den es Monitoren soll, und es hat auch nicht ganz so viele Einstellungen wie Nagios, aber es kann Prozesse, TCP-Ports, ICMP-Pings uvm. monitoren und sogar bei bedarf von alleine restarten.
Zusätzlich informiert es einen per Mail was so gerade passiert. Als Extra-Bonbon gibt es ein (minimalistisches) Webinterface das einen schnell und zuverlässig über den Gesundheitszustand des zu monitorenden Rechners informiert.
Ist auf jeden Fall einen Blick wert, das Tool…

Feb 11

Wer schon immer mal überzeugende Argumente GEGEN php suchte, ist bei helmboldt.de richtig aufgehoben. Wusste garnicht das PHP soooo (!) gruselig ist…

gefunden bei roothausen.de

Update: Unter verplant.org gibt es einen objektiven Vergleich zwischen Perl und PHP – in jedem Falle Lesenswert

Feb 11

Seit Wochen kämpfe ich nun unter Etch, trotz Gigabit, mit einem extrem langsamen Samba – nun endlich der Durchbruch.
Doch zu Vorgeschichte:

Nach den üblichen Anpassungen in der smb.conf (TCP_NODELAY und der ganze Schnickschnack) war ich fast schon am verzweifeln. Die einzigen Effekte die ich bekam, manifestierten sich in einer schwankenden Transferrate (sofern das Directory Listing auf dem Mac überhaupt in annehmbarer Zeit angekommen war) – mal hoch, und mal wieder runter.

Heute morgen habe ich dann man mit mii-tool und ethtool herumgespielt und das Interface einfach mal auf 100MBit heruntergedreht. Ergebnis: Ein Rasend schnelles samba – aber eben nur auf 100MBit.

Abhilfe schafft ein neuerer Realteak Treiber, den man hier herunterladen kann. Sobald der installiert ist kann man Samba in voller Breite, d.h. wieder mit 1000BaseTX, geniessen. Herrlich !!!
Der original-Treiber, für die RTL8168 der bei etch dabei ist war folglich etwas buggy…
Aber nun läuft es ja.

PS: OSX Leopard hat mit Netzen und Samba auch so seine Problemchen. Eine Lösung des OSX-Problems gibt es bei MacOsXhints

Feb 05

Situation:
Vorhanden ist ein durchkonfiguriertes Linux auf Platte z.B. ein Router.
Dummerweise wird die Hardware für etwas anderes benötigt, bzw. man möchte nicht die Platte ausbauen, und benötigt das Linux daher “portabel”.
Eine LiveCD a´la Knoppix kommt nicht in Frage, weil die viel zu viel Overhead mit sich bringt, zu bunt, und halt noch nicht angepasst ist.

Also was tun. Am schönsten wäre es, dass bereits laufende Linux auf einen Stick zu packen, und diesen einfach in die neue Hardware zu stecken. Soweit die Theorie. In der Praxis geht genau das wie folgt:

Man hangelt sich an diesem Tutorial entlang. An der stelle an der der Grub installiert werden soll, weicht man ein wenig ab. Bei mir hat folgendes Prima funktioniert:

(Vorrausgesetzt der Stick hat sda als dev und ist auf /mnt gemountet)

echo ’(hd0) /dev/sda’ > /mnt/boot/grub/device.map

grub-install –root-directory=/mnt /dev/sda

Des weiteren sollte man schauen dass nach dem rsyncen mit dem Original-Filesystem die /etc/fstab und die /boot/grub/menu.lst mit den korrekten Devices gefüllt sind.

Viel Spass mit dem “selbsgebauten” Linux-USB-Stick

Feb 03

Wer schonmal versucht hat, via date oder ntp, in einer DomU unter XEN, die Uhrzeit neu zu setzen, wird ähnlich verzweifelt gewesen sein, wie ich es war. Die DomUs weigern sich nämlich strikt irgendwelche Zeiten entgegenzunehmen. Erst wenn man in der Dom0 die Zeit setzt, dann klappt es.

Wie es trotzdem geht ??
In der Dom0 folgendes Kommando absetzen (und am besten in ein Runlevel-Script legen):

echo 1 > /proc/sys/xen/independent_wallclock

Jan 23

Angenommen man möchte unter Linux ein Script / Programm abfeuern lassen, sobald ein File in einem Directory abgelegt wird. Wenn man z.B. ein Spoolverzeichnis bauen will, könnte das recht hilfreich sein.
Die Lösung bieten die “inotify-tools”. Flux per “apt-get install inotify-tools” installiert, verfügt man anschliessend über zwei Programme, mit den hübschen Namen inotifywait und inotifywatch.
Diese sind gemäss manpage zu bedienen. Hier ein kleines Beispiel:

Situation: Sobald Im Directory “/spool” eine Datei abgelegt und final geschlossen wird, soll ein kleines Perl-Script aufgerufen werden, dass die Datei verarbeitet. Als Parameter sollen dem Script das Directory sowie die Datei zur Verfügung gestellt werden.
So gehts:

#!/bin/sh
inotifywait -mrq -e close_write /spool/ –format ‘%w %f’ |while read dir file; do
./perlscript.pl ${dir} ${file}
done

Hier eine Erklärung der, im Beispiel benutzten, Schalter / Variablen:
-m = Monitored das Directorie kontinuierlich – ohne den Schalter hört inotifywatch nach dem ersten “Trigger” auf zu laufen
-r = Subdirectories sollen auch gemonitored werden
-q = Das Tool soll “Quiet” laufen – also keinerlei unnötiges “gedöns” ausgeben

%w = Filename mit Directory
%f = Filename

Viel Spass damit

[Update]: Leider funktioniert das ganze nicht mit Directories auf die ein Samba-Share gemounted wurde…

Jan 21

Tja, da habe ich so eine antike PCI-Grafikkarte mit S3 Chipsatz von ATI ausgegraben, und Debian Etch wollte den XServer partout nicht starten. Was tun ??
Ziemlich simpel: Aus alten Zeiten kannte ich noch das Tool “xf86config” – das scheint allerdings der Vergangenheit anzugehören.
Heutzutage macht man das mit “dpkg-reconfigure xserver-xorg”. Etwas komplexer vom Aufruf, aber um so angenehmer in der Bedienung. Damit kann man dann auch (fast) jeder Uralt-GraKa wieder Leben einhauchen…

Nov 20

Ein schickes Board das fein mit Debian läuft ist das Gigabyte GA-X38-DQ6. Allerdings hat das gute Stück einen Schönheitsfehler. Unter Debian Etch werden funktionieren das Hardwaremonitoring nicht. Hier kann Abhilfe geschaffen werden. Auf dem Board befindet sich der it8718-isa-0290 Chip(satz) der für die Environmentdaten zuständig ist. Dummerweise wird der Chip erst ab Kernel 2.6.20 über das Kernelmodule “coretemp” unterstützt. Debian Etch selbst verwendet aber als letzten Kernel den 2.6.18er. Also updaten ! Wie geht das ? Wie folgt:

in der /etc/apt/sources.list folgende Zeile hinzufügen:

deb http://www.backports.org/debian etch-backports main contrib non-free

Nun via apt-get update die Quellen aktualisieren. Und anschliessend per apt-get install linux-image-2.6.22-xxx  (wobei xxx der Architektur entspricht die man sich wünscht) den neuen Kernel installieren.
Ein wenig Vorsicht ist allerdings geboten, wenn man sich vorher selbst einen (älteren) Kernel gebacken hat, hier sollte man die Sourcen mitinstallieren, und den 2.6.22er dann auch neu basteln.

Nach dem neu gebootet worden ist kann man sich per apt-get install lm-sensors das sensors Packet installieren. Von nun an ist es nicht mehr weit ;-)
Folgende Zeilen gehören nach einem sensors-detect in die /etc/sensors3.conf:


chip “it8718-*”

# Voltages

compute in3 @ * (6.8/10+1), @ / (6.8/10+1)
compute in7 @ * ( 30/10+1), @ / ( 30/10+1)

label in0 “VCore”
label in1 “VDDR”
label in2 “+3.3V” # VCC3
label in3 “+5 V VCC” # VCC
ignore in4
ignore in5
ignore in6
label in7 “+12V” # VCCH
label in8 “VBat”
label fan1 “CPUFan”
label fan2 “FrontFan”
label fan2 “XXX Fan ?”
label temp1 “NB Temp”
label temp2 “Coretemp”
ignore temp3

set in0_min vid * 0.95
set in0_max vid * 1.05
set in1_min 1.8 * 0.95
set in1_max 1.8 * 1.05
set in2_min 3.3 * 0.95
set in2_max 3.3 * 1.05
set in3_min 5 * 0.95
set in3_max 5 * 1.05
set in7_min 12 * 0.95
set in7_max 12 * 1.05

ignore cpu0_vid

Danach sollte ein Aufruf von sensors ein paar Werte ausspucken. Wer richtig mitgelesen hat, dem fält auf, dass ich noch keine genaue Bezeichnung fuer Fan3 finden konnte. Wenn jemand an der Stelle weiterkommt – gerne per Kommentar…. Bis auf Fan3 wird dann aber auch alles vernünftig angezeigt.

Viel Spass

Nov 17

Alles nicht so einfach mit den Platten. Daher hier ein weiteres Mini-Howto. Diesesmal zum Thema, wie erstelle ich unter LINUX einen Soft-RAID-Verbund, der sich beliebig erweitern lässt.

Ausgangssituation wäre folgende:
3 Eingebaute Festplatten:
hda: Boot-Platte (XXX GB)
hdb: 1. RAID1-Platte (1GB – lässt sich leichter rechnen ;-)
hdc: 2. RAID1-Platte (1GB)

1. Mithilfe von fdisk / cfdisk die Partitionen /dev/hdc1 und /dev/hdb1 auf den jeweiligen Platten als Primärpartition vom Typ FD erstellen.

2. Raid 1 aus hdb1 und hdc1 anlegen:

mdadm –create /dev/md1 –level 1 –raid-devices=2 /dev/hdb1 /dev/hdc1

3. Physical Volume anlegen:

pvcreate /dev/md1

4. Volume Group anlegen (mit einem Device) – vol ist hier mal der Name der Gruppe

vgcreate vol /dev/md1

5. Logisches Volume mit Namen “root” auf der VolumeGroup anlegen (Wir nehmen mal 800MB, da ein wenig Overhead anfaellt – 900 sollten aber auch gehen)

lvcreate -n root -L 800M vol

6. Filesystem auf dem neuen Volume anlegen

mkfs.ext3 /dev/vol/root

7. Mounten:

mount /dev/vol/root /mnt

8. Ueberpruefen
- PhysicalVolumes lassen sich mit pvdisplay, VolumeGroups mit vgdisplay und LogicalVolumes mit lvdisplay anzeigen
- Ein “df . -h” bringt nun 800 MB auf die Waage

Fertig …

Wenn man nun eine weitere Platte (Raid-Volume über mdadm geht natürlich auch) “hinzubekommt” und die an das RAID-1 stripen möchte, geht das wie folgt:
(Wir nennen die Platte mal hdd)

1. Primary Partition über FDISK anlegen (Typ FD)

2. Physical Volume anlegen:

pvcreate /dev/hdd1

3. VolumeGroup erweitern:

vgextend vol /dev/hdd1

4. LogicalVolume erweitern

lvextend /dev/vol/root -L +800M /dev/hdd1

5. Überprüfen (siehe oben)
- Ein “df . -h” in /mnt bringt nun einen um 800MB erweiterten Mountpunkt zum vorschein. Halt … wohl doch noch nicht. Dem Filesystem muss erst noch mitgeteilt werden dass hier eine Grössenänderung stattgefunden hat. Also:

6. Filesystem umounten:

umount /mnt

7. Filesystem überprüfen (sonst motzt der Resizer)

fsck.ext3 -vv -f /dev/vol/root

8. Fileystem schliesslich resizen

resize2fs /dev/vol/root

9. Wieder mounten

mount /dev/vol/root /mnt

10.Jetzt haben wir es geschafft…

Nov 09

Lange hat es gedauert bis ich meinen ssh-daemon auf dem mit openwrt bestückten WRT54GL zur Key-Authentifizerung bewegen konnte. Hier die Anleitung für alle verzweifelten:

  1. id_dsa (Ja der Private-Key – es geht leider nicht anders) auf den openwrt unter /tmp/xy ablegen
  2. via ipkg install dropbearconvert das Konvertierungstool installieren
  3. dropbearconvert openssh dropbear /tmp/xy /root/id_dsa die Konvertierung anstossen
  4. dropbearkey -y -f /root/id_dsa >/etc/dropbear/authorized_keys das gewünschte Keyfile erzeugen.
  5. Nun noch die beiden privaten Files (/tmp/xy und /root/id_dsa) löschen (die wollen wir ja nicht auf dem router behalten) – Das dropbearconvert wird auch nicht mehr benötigt – per ipkg remove dropbearconvert kann man wieder wervollen Platz auf dem Router freigeben…

Jetzt sollte es funktionieren.

preload preload preload