Sonntag, Dezember 13, 2009

Erfahrungen bei einem Server-Upgrade

Gestern um 20:00 begann ich damit, meinen Heimserver dem grössten Upgrade in seiner Geschichte zu unterziehen. Zwei Gründe bewegten mich zu diesem Entscheid: Einerseits war das Gerät längst betagt und mittlerweile äusserst schwach auf der Brust. Andererseits kämpfe ich seit dem Sommer 2009 sporadisch mit "Black Screens Of Death", welche nur mit einem Reset zu beheben waren. Natürlich machen solche Ausfälle bei einem eigentlich 24/7 verfügbaren Server keinen Sinn. Leider brachte die Fehlersuche über Monate hinweg keine Ursache zu Tage. Vermutlich lag es an der Altersschwäche eines Bauteils.

Was hat sich in der Hardware geändert?

Server alt

  • Yeong Yang YY-B0221 (spezielles Server-Gehäuse mit zwei Abteilen für Motherboard und Laufwerke)
  • Intel Pentium III, 600 MHz
  • Asus P3B-F
  • 4x Kingston 256 MB, SDRAM, PC100 — KVR133X64C3/256
  • Matrox Millennium G200, AGP
  • Intel PWLA8391GT, PCI, Gigabit-Ethernet
  • Adaptec AHA-2940U2W, SCSI-Controller
  • 1x Fujitsu MAJ3182MP, 18.2 GB, U2W-SCSI — System
  • FirmTek SeriTek/1S2, SiL 3112, SATA-Controller
  • 1x Maxtor , 160 GB, SATA — /var
  • 2x Promise Ultra 133 TX2
  • 4x Samsung SP2514N, 250 GB, ATA-7 (RAID1+0) — Storage

Server neu

  • Yeong Yang YY-B0221 (spezielles Server-Gehäuse mit zwei Abteilen für Motherboard und Laufwerke)
  • Intel Core 2 Duo E5400, Dual Core 2.7 GHz, 800 MHz
  • Asus P5QPL-VM-EPU, Mini-ATX
  • 1x Apacer 1 GB, DDR2, 800 MHz
  • Intel PWLA8391GT, PCI, Gigabit-Ethernet
  • 1x Samsung HD161GJ, 160 GB, SATA-3 — System
  • 2x Samsung HD154UI, 1.5 TB, SATA-3 (RAID1) — Storage

Erfahrungshäppchen

  • Grundsätzlich sei wieder einmal zu erwähnen, dass man ein solch tiefgreifendes Hardware-Update unter Windows schlichtwegs hätte vergessen können; um eine Neuinstallation wäre man auf Grund der komplett anderen Hardware nicht herumgekommen. Ich lobe mir deshalb Debian GNU/Linux, welches — zwar auch mit einiger (selbstverursachter) Müh und Not — nach einigen Anpassungen anstandslos unter der neuen Hardware bootete.
  • Durch die Vereinfachung der Storage-Infrastruktur (Wegfall von 3 Platten und 4 Controllern) sank die Stromaufnahme um 5 %, obwohl anzunehmen ist, dass CPU und Motherboard mehr Energie benötigen als die Komponenten des alten Servers.
  • Dass im Server-Gehäuse nun nur noch 3 statt 6 Festplatten hängen, erlaubt mir, diese deutlich effizienter zu kühlen. Auch das Betriebsgeräusch des Servers ist aus meiner Empfindung etwas leiser geworden.
  • Das Motherboard weist einen sog. EATXPWR-Connector auf. Auf den ersten Blick befürchtete ich, am Sonntag noch ein neues Netzteil kaufen zu können. Steckt man den Stromstecker eines normalen ATX-Netzteils ein, sind vier Pins des neuen Steckers nicht belegt. Das Board startet trotzdem — wenn man den zusätzlichen 4-pin 12V-Anschluss in der Nähe des Prozessors mit dem entsprechenden Kabel des Netzteils bestückt. Der Betrieb ist also durchaus möglich — entweder mit 20-pin ATX + 4-pin ATX 12V oder 24-pin EATXPWR.
  • Aus ISO-Images von Ubuntu einen bootbaren USB-Stick zu bauen, ist unter Mac OS X nicht möglich. Es wird vielerorts empfohlen, stattdessen die IMG-Datei des Ubuntu Netbook Remix herunterzuladen, ohne aber auf eine solche Datei zu verlinken. Diese gibt es nämlich nur für das ältere Ubuntu 9.04 (aktuell: 9.10); bspw. auf dem SWITCH-Mirror: ubuntu-9.04-netbook-remix-i386.img. Mit diesem Image soll es anschliessend gemäss Anleitungen im Netz möglich sein, unter Mac OS X mit dem Terminal den Stick mit Ubuntu bootbar zu machen.
  • Da der Download dieser Datei ein gute Stunde dauerte, habe ich schlussendlich einen alten DVD-Brenner im Server verbaut und den Server von CD gebootet.
  • Bei der Partitionierung der neuen 160 GB-Systemplatte mit fdisk unter Ubuntu Live-CD habe ich bei der Grössenangabe für die einzelnen Partitionen vergessen, ein + voranzustellen (Bspw. +512M für eine Partition mit 512 MB Platz). Deshalb ist meine /boot-Partition nun nicht 512 MB gross, sondern 3.1 GB *autsch*
  • Um den Swap-Space zu initialisieren, benutzte ich mkswap, was beim ersten Anlauf aber enorm viel CPU-Resourcen benötigte und nicht vor dem Ende meiner Geduld abgeschlossen werden konnte. Indem ich dieses Executable ohne den Paramenter -c (für "check") aufrief, rauschte die SWAP-Formatierung wie im Schnellzugstempo durch.
  • Nachdem ich die Daten von der alten SCSI-Systemplatte auf die SATA-Systemplatte kopiert hatte (der Adaptec AHA-2940U2W SCSI-Controller und die daran hängende Platte wurde vom Board und Ubuntu problemlos erkannt), startete der Rechner nicht, weil GRUB einen "Error 2" meldete. Ich war mir ganz sicher, dass ich den Bootsektor in die richtige Platte geschrieben und mit hd(0,0) auch garantiert die richtige Platte konfiguriert hatte. Wo also lag das Problem? Dank eines Blog-Artikels GRUB "Error 2" May Mean Incompatible stage1.5, stage2, and ext2 kam ich darauf, dass ich die Platte mit einem brandneuen mkfs.ext3 formatiert, dann aber die GRUB-Stages 1.5 und 2 datierend aus dem 2007 von der alten Platte in den Bootsektor geschrieben hatte. Glücklicherweise fanden sich unter /usr/lib/grub/i386-pc/ neuere Dateien im leicht grösseren Umfang und aus dem Jahr 2009. Nachdem ich diese Dateien über /boot/grub kopiert und den MBR neu geschrieben hatte, funktionierte der Bootvorgang dann endlich wie geschmiert.
  • Nachdem das System zum ersten Mal in der neuen Konfiguration ohne fremde Hilfe hochgekommen war (nicht vergessen: /etc/fstab und /boot/grub/menu.list müssen zwingend angepasst werden!), ging es nun darum, /var von der alten SATA-Platte rüberzukopieren. Wie bei allen Kopieraktionen verwende ich dazu # rsync -av . /mnt/sda1 oder dergleichen. Bricht der Kopiervorgang aus unerfindlichen Gründen ab, stellt man mit rsync sicher, dass nur diejenigen Dateien kopiert werden, die auf dem Zielsystem noch nicht identisch vorhanden sind. Auch werden die Benutzer und Rechte auf jeden Fall mitkopiert.
  • Die Daten vom RAID1+0 kopierte ich heute Sonntag-Nachmittag auf das neu erstellte RAID1. Damit ich die Daten nicht über das langsame Ethernet-Netzwerk kopieren musste, suchte ich mir zwei exteren USB-Festplattengehäuse und wählte dann zwei Festplatten des RAID-Verbundes aus. Wichtig ist bei RAID1+0 natürlich, dass man die zwei komplementären Platten nimmt, die im Degraded-Modus das ganze Volume herstellen. Damit mdadm die Platten erkannte, musste ich in /etc/mdadm/mdadm.conf einige Ergänzungen vornehmen, weil der verschachtelte RAID-Verbund nicht automatisch erkannt wurde. Kernstück waren dabei folgende Zeilen:
    ...
    DEVICE partitions
    ...
    ARRAY /dev/md10 metadata=0.90 UUID=8b74168f:921d62ec:197e72a9:dcc396dd
    ARRAY /dev/md11 metadata=0.90 UUID=c7acb783:7d200806:ba3b0bb9:fba14ed1
    ARRAY /dev/md1 metadata=0.90 UUID=0b0b49d4:63eada39:e2d889b1:01493278
    Die UUIDs waren glücklicherweise in der alten mdadm.conf hinterlegt. Sie sind unbedingt zu notieren und an einem sicheren Ort aufzubewahren. Anschliessend klappte es problemlos, die RAID-Arrays mittels # mdadm --assemble /dev/md0 etc. zu starten (natürlich in der richtigen Reihenfolge, d.h. /dev/md1 am Schluss, wenn die RAIDs der beiden USB-Platten gestartet wurden. Ob metadata=0.90 wirklich nötig ist, weiss ich nicht. Als ein Array nur im auto-read-only-Modus gestartet wurde, führte ich folgenden Befehl aus, um auch Schreibvorgänge zu ermöglichen (im Grund ja unnötig, da wir nur Daten ab der Platte kopieren wollen):
    # mdadm --readwrite /dev/md10
  • Der anschliessende Kopiervorgang war einerseits ein Burn-In-Test für die verschiedenen Bussysteme des neuen Servers (USB, SATA), andererseits zeigte er die Performance der neuen Hardware:
    sent 460359385722 bytes  received 762070 bytes  38412962.39 bytes/sec
    total size is 460300401834  speedup is 1.00
    — 38 MB/Sekunde sind kein schlechter Wert für ATA-7 über USB auf SATA.
  • Da das neue Board nur noch die Pins für einen LPT-Anschluss mitbringt, musste ich meinen HP Laserjet 1300 neu über USB an den Server anschliessen. Leider wurde dabei aber /dev/usb/lp0 nicht automatisch erstellt. Nach einem # apt-get dist-upgrade erschien dieses Device plötzlich in der Dateiliste. Nur noch /etc/printcap anpassen (statt /dev/lp0 ist es neu /dev/usb/lp0 — fertig!). Auf jeden Fall lud der Kernel alle benötigten Module (usblp, usbcore und uhci_hcd). Dass der Drucker auch wirklich da ist, erkennt man mit dem Befehl:
    # lsusb
    ...
    Bus 002 Device 002: ID 03f0:1017 Hewlett-Packard LaserJet 1300
    ...
    Dieser Befehl findet sich im Paket usbutils
  • Bei Aufräumarbeiten in meinem IT-Ersatzteillager fand ich zufälligerweise ein Slotblech, welches zwei serielle Ports (COM1 & COM2) bereitstellte. Da das neue Board Pins für eine COM-Schnittstelle mitbringt, konnte ich so die ältere USV (APC 1400VA) wieder am Server anschliessen.

Labels: ,

1 Kommentare | neuen Kommentar verfassen

Sonntag, September 13, 2009

Druckaufträge von der Kommandozeile aus verwalten

Gerade würgt sich mein HP Laserjet 1300 - immerhin ein Postscript-Drucker mit einem RAM-Upgrade - durch einen Druckauftrag, den ich aus Adobe Acrobat 9 ausgelöst habe. Da für den Druck einer Seite etwa 10 Minuten vergehen (!), wurde mir die Sache zu blöd und ich suchte nach Möglichkeiten, den Druckauftrag zu löschen.

Da er unter Mac OS X bereits an den Druckerserver raus ist, muss ich Linux und lprng bemühen. Wie es sich herausgestellt hat, ist die Verwaltung von Druckjobs äusserst simpel - wenn man denn weiss, wie:

Druckerwarteschlange anzeigen

# lpq -Plaserdrucker
Printer: Laserdrucker@ALPHA 'HP Laserjet 1300'
 Queue: 2 printable jobs
 Server: pid 26486 active
 Unspooler: pid 26487 active
 Status: waiting for subserver to exit at 00:51:43.257
 Rank   Owner/ID               Pr/Class Job Files                 Size Time
stalled(672sec) mario@beta+327      A   327 657247.pdf        19804211 00:41:08
2      mario@beta+514               A   514 657247.pdf         8249902 00:47:05
done   mario@beta+970               A   970 studium:glossar-fra 326256 16:17:30

19804211 Bytes? 19 MB sind viel, kommen aber offensichtlich hin, denn ich drucke einen 18-seitigen Scan eines Artikels, den ich auf JSTOR gefunden habe.

Druckauftrag löschen

Um einen Druckauftrag in der Warteschlange zu löschen, muss man sich die Zahl unter Job merken und gibt anschliessend auf der Kommandozeile folgendes ein:

lprm -Plaserdrucker 327
Printer Laserdrucker@ALPHA:
  checking perms 'mario@beta+327'
  dequeued 'mario@beta+327'

Quelle: In Unix, how do I print files and list or remove print jobs?

Labels: , ,

0 Kommentare | neuen Kommentar verfassen

Freitag, September 04, 2009

Lonely Planet Pick&Mix respektive Base64 dekodieren

Gestern habe ich bei Lonely Planet drei PDFs über Togo, Burkina Faso und Ghana bestellt. Obwohl ich West Africa bereits als Hardcopy im Regal stehen habe, sind diese ziegelsteingrossen und -schweren Reiseführer nunmal einfach nicht bequem, um sie mit auf Backpacking-Reisen zu nehmen.

Zwei Lösungen gibt es für das Problem: Eine Bekannte, die ich im Februar in Indien kennengelernt habe, reisst sich die Seiten vor ihren Reisen kapitelweise aus dem Reiseführer. So geht sie sicher, dass sie nur das nötigste mit dabei hat und dies äusserst handlich irgendwo verstauen kann. Mir aber widerstrebt es, Reiseführer einfach so zu "zerreissen", weshalb ich die zweite, deutlich fortschrittlichere Lösung bevorzuge: Pick&Mix - Lonely Planet-Kapitel in Form von PDFs. Kein Passwortschutz, keine Restriktionen bezüglich Druck. Und zudem spottbillig (das grösste Kapitel - Ghana - hat mich 2.47 EUR gekostet).

Lonely Planet hat erkannt, dass man es den potentiellen Kunden äusserst einfach machen muss, damit sie das neue digitale Produkt in Scharen kaufen - kein DRM und auch keine Paranoia, dass die Kapitel alsbald auf Tauschbörsen auftauchen (obwohl, ein Wasserzeichen könnte ja wohl kaum Schaden). Während die Musikindustrie Jahre benötigte, um sich zu Downloads im weltweit anerkannten MP3-Standard durchzuringen, scheint der Prozess bei Lonely Planet deutlich simpler abgelaufen zu sein.

Item. Heute bekam ich nun ein kurliges Mail von einem Shop Batch User <support@lonelyplanet.com.au>, welches wiederum ein Mail enthielt. Doch im Grossen und Ganzen sah das Layout nicht wirklich überzeugend aus - da musste etwas schief gelaufen sein!


Lonely Planet SAP Fail
Originally uploaded by emeidi

Ein Blick in den Quelltext des E-Mails (unter Apples Mail.app mittels Apfel+Alt+U) zeigte zweierlei:

  • X-Mailer: SAP Web Application Server 6.20 - Das erklärt wohl alles. SAP hat einfach das Internet und das Web immer noch nicht begriffen.
  • Ein Wust von kryptischen Zeichen
    JVBERi0xLjMNCiXi48/TDQoyIDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnREZXNjcmlwdG9yDQovQXNj
    ZW50IDcyMA0KL0NhcEhlaWdodCA2NjANCi9EZXNjZW50IC0yNzANCi9GbGFncyAzMg0KL0ZvbnRC
    Qm94IFstMTc3IC0yNjkgMTEyMyA4NjZdDQovRm9udE5hbWUgL0hlbHZldGljYS1Cb2xkDQovSXRh
    bGljQW5nbGUgMA0KL1N0ZW1WIDEwNQ0KPj4NCmVuZG9iag0KMyAwIG9iag0KL1dpbkFuc2lFbmNv ...

Glücklicherweise war es mit dem Hinweis auf Content-Transfer-Encoding: base64 äusserst simpel, das encodierte Attachment wieder in eine richtige Datei umzuwandeln. Zuerst kopierte ich den ganzen Textwust in eine Textdatei und speicherte diese als lonely.b64 ab.

Anschliessend machte ich mich auf die Suche nach einem Kommandozeilentool, welches Base64-enkodierte Dateien dekodieren konnte. Dank Google wurde ich mit Base64 umgehend fündig.

Dank MacPorts war das Teil schnell heruntergeladen und kompiliert:

# port install base64

Nun war ich nicht mehr weit von der dekodierten Datei entfernt:

$ base64 -d lonely.b64 lonely.unk

Ein Blick in den Header der Datei zeigte mir klar an, um was für ein Ursprungsformat es sich beim Attachment handelte:

%PDF-1.3
%????
2 0 obj
<<
/Type /FontDescriptor
/Ascent 720
/CapHeight 660
/Descent -270
/Flags 32
/FontBBox [-177 -269 1123 866]
/FontName /Helvetica-Bold
/ItalicAngle 0
/StemV 105
>>
endobj
3 0 obj
...

PDF! Deshalb passte ich die Dateiendung an, und scho sah ich die Tax Invoice von Lonely Planet in Apples Preview.

Labels: , , ,

2 Kommentare | neuen Kommentar verfassen

Samstag, August 08, 2009

Auf einen Rutsch alle neuen Dateien ins SVN (svn add)

Selbstverständlich kann man sich streiten, eine Dokuwiki ins SVN zu laden, doch da ich die nächste Woche offline in Frankreich verbringen werde, möchte ich einen einfachen Weg haben, um die an der Côte d'Azur erfassten Änderungen einfach in die Serverinstallation zurückzuspielen.

Doch da ich in der Zwischenzeit noch an einigen Zusammenfassungen weitergeschrieben habe, wurde es nötig, dass ca. 20 neu hinzugekommene Dateien noch ins Repository eingecheckt werden sollten. Wie macht man das möglichst einfach?

Ich habe mich für folgenden Befehl entschieden, den ich im root des versionierten Verzeichnisses ausführte:

svn status | grep "^?" | cut -d ? -f 2 | xargs svn add

Ein

svn add *

ginge natürlich auch, spuckt aber hässliche Fehlermeldungen aus.

Habt ihr einen noch effizienteren Tipp?

Labels: , , ,

2 Kommentare | neuen Kommentar verfassen

Donnerstag, Juli 02, 2009

lprng debuggen

Gerade habe ich eine Stunde mit debuggen von LPRng verbracht, bis ich schlussendlich feststellen musste, dass das angebliche Druckerproblem mit einem Kaltstart des Druckers (!) gelöst werden konnte.

Dennoch ist es für die Nachwelt sicherlich von Interesse, wie man LPRng im speziellen und Druckerprobleme unter Linux im allgemeinen debuggt.

lprng ausschalten

Damit man ungestörten Zugriff auf den Parallelport hat, schaltet man kurzerhand den von Debian automatisch geladenen Druckserver aus:

# /etc/init.d/lprng stop

Module überprüfen

Anschliessend überprüfen wir grundlegend, ob die Parallelporttreiber geladen wurden:

$ lsmod | grep lp
lp                     11076  0 
parport                34280  2 lp,parport_pc

Berechtigungen des Parallelports

$ ls -l /dev/lp0
crw-rw---- 1 root lp 6, 0 2009-07-02 13:07 /dev/lp0

Sieht gut aus. Falls der Port nicht existiert, legt man in anhand einer anderen auf diesem Blog publizierten Anleitung an.

Auf Parallelport drucken

# cat sample.ps > /dev/lp0

ACHTUNG: Drucker, die kein Postscript sprechen (würde ich nie mehr in meinem Leben anschaffen!), werden seitenweise kryptische Codes ausdrucken. Eine Beispieldatei im Postscript-Format findet sich unter samplec.ps

In meinem Fall beendete sich dieser Befehl auch nach 20 Sekunden nicht, weshalb ich ihn mit Ctrl+C von Hand abbrechen musste (ansonsten hat man nach 1-2 Sekunden wieder freie Hand, sofern die Postscript-Datei nicht gerade 50 MB gross ist ...). Hier ging mir plötzlich ein Lichtlein auf, dass das Problem wohl nicht am Druckserver selber zu suchen war, sondern irgendwo an oder zwischen dem Drucker und dem Server lag.

lprng debuggen

Wenn bis hierhin alles geklappt hat, muss das Problem wirklich an lprng liegen. Deshalb starten wir den Druckserver im Debug-Modus:

# lpd -F -D1 >&/tmp/lprng.debug &

Ich habe Werte für D von 1, 2 und 9 ausprobiert, hat alles geklappt. In /tmp/lprng.debug werden alle Statusmeldungen akribisch aufgelistet. Anhand dieser ist es im Zusammenspiel mit Google möglich, andere Leidensgenossen zu finden und eventuell sogar die Lösung des Problems präsentiert zu erhalten.

Labels: , , , ,

0 Kommentare | neuen Kommentar verfassen

Sonntag, Juni 21, 2009

svn streikt mit "could not connect to server"

$ svn up
svn: OPTIONS of 'http://svn.server.tld': could not connect to server (http://svn.server.tld)

Wer dieses Problem urplötzlich unter Debian mit

$ svn --version
svn, version 1.5.6 (r36142)

zu Gesicht kriegt, das Repository im Web-Browser aber problemlos ansurfen kann, muss als einfachsten Workaround die lokale SVN-Konfiguration anpassen (diejenige des Clients, nicht des Servers!):

/etc/subversion/servers

...
[global]
...
http-library = serf
...

Quelle: svn: OPTIONS of 'http://...': could not connect to server (http://...)

Labels: , ,

0 Kommentare | neuen Kommentar verfassen

Samstag, Juni 20, 2009

Systeminformationen in der Linux-Shell auslesen

Da unser Printserver auf der Arbeit in letzter Zeit oftmals einen ausgereizten Arbeitsspeicher meldet, werde ich heute ein, zwei zusätzliche Riegel RAM installieren gehen. Doch was für Module muss ich in unserem Ersatzteil-Lager suchen? Mit einem SSH-Zugang ist es absolut kein Problem, alle Fragen zu klären:

PCI-Bus auslesen

Zeigt die Chipsets und alle verbauten PCI-Karten an:

$ lspci
00:00.0 Host bridge: Intel Corporation 82815 815 Chipset Host Bridge and Memory Controller Hub (rev 04)
00:02.0 VGA compatible controller: Intel Corporation 82815 Chipset Graphics Controller (CGC) (rev 04)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 02)
00:1f.0 ISA bridge: Intel Corporation 82801BA ISA Bridge (LPC) (rev 02)
00:1f.1 IDE interface: Intel Corporation 82801BA IDE U100 Controller (rev 02)
00:1f.4 USB Controller: Intel Corporation 82801BA/BAM USB Controller #1 (rev 02)
00:1f.5 Multimedia audio controller: Intel Corporation 82801BA/BAM AC'97 Audio Controller (rev 02)
02:08.0 Ethernet controller: Intel Corporation 82801BA/BAM/CA/CAM Ethernet Controller (rev 01)

CPU-Eigenschaften auslesen

Verbaut ist also ein Pentium III ("model name") mit 1 GHz ("cpu MHz"):

$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 8
model name      : Pentium III (Coppermine)
stepping        : 10
cpu MHz         : 996.828
cache size      : 256 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr sse up
bogomips        : 1995.74
clflush size    : 32
power management:

RAM-Typ

Auf das Tool dmidecode bin ich über der Blog-Artikel Linux: Check Ram Speed and Type aufmerksam geworden. Wie die nachfolgende Ausgabe zeigt, ist momentan ein RAM-Baustein verbaut - und zwar ein Riegel SDRAM 133 MHz mit einer Kapazität von 256 MB. Weiter hat es anscheinend noch Platz für zwei weitere Module ("Size: No Module Installed"). Um was für Speicher es sich beim letzten Eintrag handelt, weiss ich hingegen nicht.

# dmidecode --type 17
# dmidecode 2.9
SMBIOS 2.3 present.

Handle 0x0023, DMI type 17, 27 bytes
Memory Device
        Array Handle: 0x0021
        Error Information Handle: Not Provided
        Total Width: 64 bits
        Data Width: 64 bits
        Size: 256 MB
        Form Factor: DIMM
        Set: None
        Locator: XMM1
        Bank Locator: Not Specified
        Type: SDRAM
        Type Detail: Synchronous
        Speed: 133 MHz (7.5 ns)
        Manufacturer: JEDEC ID:C1 49 4E 46 49 4E 45 4F
        Serial Number: EEC20808
        Asset Tag: Not Specified
        Part Number: HYS64V32300GU-7.5.

Handle 0x0024, DMI type 17, 27 bytes
Memory Device
        Array Handle: 0x0021
        Error Information Handle: Not Provided
        Total Width: Unknown
        Data Width: Unknown
        Size: No Module Installed
        Form Factor: DIMM
        Set: None
        Locator: XMM2
        Bank Locator: Not Specified
        Type: SDRAM
        Type Detail: Synchronous
        Speed: Unknown
        Manufacturer: JEDEC ID:
        Serial Number:  
        Asset Tag: Not Specified
        Part Number:  

Handle 0x0025, DMI type 17, 27 bytes
Memory Device
        Array Handle: 0x0021
        Error Information Handle: Not Provided
        Total Width: Unknown
        Data Width: Unknown
        Size: No Module Installed
        Form Factor: DIMM
        Set: None
        Locator: XMM3
        Bank Locator: Not Specified
        Type: SDRAM
        Type Detail: Synchronous
        Speed: Unknown
        Manufacturer: JEDEC ID:
        Serial Number:  
        Asset Tag: Not Specified
        Part Number:  

Handle 0x0027, DMI type 17, 27 bytes
Memory Device
        Array Handle: 0x0022
        Error Information Handle: Not Provided
        Total Width: 4 bits
        Data Width: 4 bits
        Size: 512 kB
        Form Factor: Chip
        Set: None
        Locator: XU15
        Bank Locator: Not Specified
        Type: Flash
        Type Detail: Non-Volatile
        Speed: Unknown
        Manufacturer: Not Specified
        Serial Number: Not Specified
        Asset Tag: Not Specified
        Part Number: Not Specified

Nachtrag

Wie ich vor Ort feststellen musste, unterstützt Intels 815er Chipset nur maximal 512MB RAM - egal, ob im dritten DIMM-Slot noch 256MB stecken oder nicht ...


216-Memory Size Exceeds Maximum Supported
Originally uploaded by emeidi

Labels: , , , ,

3 Kommentare | neuen Kommentar verfassen

Dienstag, Juni 16, 2009

postfix unter Mac OS X 10.4 aktivieren (inklusive SMTP-Relay)

Obwohl es ein kostenpflichtiges GUI zur Konfiguration des postfix-Mailservers gibt, machen wir als Geeks die Sache lieber von Hand auf der Kommandozeile.

Da Apple postfix bereits mit der Standardinstallation von Mac OS X mitliefert, den Daemon aber nicht aktiviert, sind die Arbeiten relativ trivial. Wer nicht das erste Mal mit dem CLI in Berührung kommt und sich mit sudo und vim auskennt, sollte den SMTP-Server innert 5-10 Minuten am Laufen haben.

Wichtig ist, dass hier nicht der lokale SMTP-Server aktiviert, sondern auch gleich ein relayhost eingerichtet wird. In meinem Fall ist das der SMTP-Server meines ISPs Cablecom. Damit ist es möglich, Mails auch tatsächlich in die weite Welt hinauszusenden. Vorausgesetzt, man verfügt über einen SMTP-Account bei seinem ISP.

/etc/hostconfig

...
MAILSERVER=-YES-
...

/etc/postfix/main.cf

...
myhostname = mad4you.homeip.net
mydomain = mad4you.homeip.net
myorigin = $myhostname
...
inet_interfaces = localhost
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks_style = host
mynetworks = 127.0.0.0/8
...
relayhost = smtp.hispeed.ch
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
...

/etc/postfix/sasl_passwd

smtp.hispeed.ch user@hispeed.ch:geheim

Sicherheitsvorkehrungen:

$ chmod 600 /etc/postfix/sasl_passwd
# chown root:root /etc/postfix/sasl_passwd

Anschliessend muss die Passwort-Datei gehasht werden, da die Angaben sonst nicht von postfix interpretiert werden:

# postmap /etc/postfix/sasl_passwd

Neustart des Daemons

# sudo launchctl start org.postfix.master

Test

$ echo `date` | mail -s "Dies ist ein Test-Betreff von der Kommandoziele" spam@eMeidi.com

Ein Blick in /var/log/mail.log zeigt umgehend, ob was rausgegangen ist oder nicht:

$ tail -f /var/log/mail.log
...
Jun 16 15:03:00 BETA postfix/master[1314]: daemon started -- version 2.1.5
Jun 16 15:03:02 BETA postfix/pickup[1315]: 058FE1A17BFE: uid=501 from=
Jun 16 15:03:02 BETA postfix/cleanup[1316]: 058FE1A17BFE: message-id=<20090616130300.058FE1A17BFE@mad4you.homeip.net>
Jun 16 15:03:02 BETA postfix/qmgr[1319]: 058FE1A17BFE: from=, size=342, nrcpt=1 (queue active)
Jun 16 15:03:04 BETA postfix/smtp[1320]: 058FE1A17BFE: to=, relay=smtp.hispeed.ch[213.46.255.24], delay=4, status=sent (250 2.0.0 4d311c07P0MzJ8L01d33xm message accepted for delivery)
Jun 16 15:03:04 BETA postfix/qmgr[1319]: 058FE1A17BFE: removed
Jun 16 15:04:00 BETA postfix/master[1314]: master exit time has arrived
...

Quellen

Labels: , , , , ,

0 Kommentare | neuen Kommentar verfassen

Dienstag, Mai 26, 2009

Unser vetterliwirtschaftliche Bundesverwaltung schafft es auf reddit!

Red Hat Sues Switzerland Over Microsoft Monopoly - Linux vendor Red Hat, and 17 other vendors, have protested a Swiss government contract given to Microsoft without any public bidding

Quelle: Red Hat Sues Switzerland Over Microsoft Monopoly - Linux vendor Red Hat, and 17 other vendors, have protested a Swiss government contract given to Microsoft without any public bidding : technology

Ein grosses Bravo und Dankeschön an Red Hat, um unser Seldwyla in aller Welt bekannt zu machen. Ein weiteres Beispiel dafür, dass unsere Bundesverwaltung von Gehilfen unzähliger Microsoft-, Oracle- und SAP-Beratern durchsetzt ist.

Labels: , , , , , ,

0 Kommentare | neuen Kommentar verfassen

Sonntag, Mai 03, 2009

cacti-Verzeichnis zügeln

In den letzten Tagen habe ich die Verzeichnisstruktur auf meinem lokalen Web-Server angepasst. Unter anderem war von dieser Säuberungsaktion auch meine cacti-Installation betroffen.

Nachdem ich mich einige Stunden über nicht aktualisierte Graphen geärgert hatte, fand ich zu später Stunde dann endlich die Lösung des Problems:

UPDATE poller_item SET rrd_path = REPLACE(rrd_path,'/var/www/cacti/','/var/www/system/cacti/')
UPDATE poller_item SET arg1 = REPLACE(arg1,'/var/www/cacti/','/var/www/system/cacti/')

Offensichtlich ist die Software nicht derart intelligent programmiert, dass Verzeichniswechsel reibungslos über die Bühne gehen. Wieso Script-Pfade absolut und nicht wie beispielsweise die RRAs relativ in der Datenbank abgelegt werden, ist mir ein Rätsel.

Schriften

Als nützlicher Nebeneffekt konnte ich in diesem Anlauf in der Administrationsoberfläche auch endlich anständige Schriften definieren - vorher wurden Graphen in einer wüsten Serifenschrift ausgegeben. In Debian ist die wohl beste Schrift für RRD-Graphen die DejaVu Sans, welche unter folgendem Pfad liegt:

/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf

Labels: , , ,

0 Kommentare | neuen Kommentar verfassen

Montag, April 06, 2009

syslog von Ballast befreien

Die /var/log/syslog füllt sich unter Debian Linux sehr schnell mit viel nichtssagendem Ballast, weshalb ich mich heute dazu entschied, mal ein wenig aufzuräumen. Die Meldungen von cron (läuft bei mir jede Minute mit irgendwelchen Befehlen), dhcpd (im Netzwerk gibt es ein Gerät, dass jede Sekunde einen DHCP-Request sendet) sowie snmpd (cacti frägt den Systemzustand in jeder Minute ab) sollten neu aus der /var/log/syslog in eigene Log-Dateien ausgelagert werden.

Folgende Anpassungen an /etc/syslog-ng/syslog-ng.conf taten den Trick.

Als erstes legt man neue Destinationen fest:

destination df_cron { file("/var/log/cron.log"); };
destination df_dhcpd { file("/var/log/dhcpd.log"); };
destination df_snmpd { file("/var/log/snmpd.log"); };

Anschliessend legt man vier neue Filter fest:

filter f_cron { facility(cron); };
filter f_dhcpd { program(dhcpd); };
filter f_snmpd { program(snmpd); };
filter f_noise { not filter(f_snmpd) and not filter(f_dhcpd) and not filter(f_cron); };

Schlussendlich baut man diese als Log-Anweisungen zusammen:

log {
        source(s_all);
        filter(f_syslog);
        filter(f_noise);
        destination(df_syslog);
};

log {
        source(s_all);
        filter(f_cron);
        destination(df_cron);
};

log {
        source(s_all);
        filter(f_dhcpd);
        destination(df_dhcpd);
};

log {
        source(s_all);
        filter(f_snmpd);
        destination(df_snmpd);
};

Nachdem man die Konfigurationsdatei gespeichert hat, startet man syslog-ng neu und erfreut sich über die Ruhe, die nun einkehrt:

# /etc/init.d/syslog-ng restart
$ tail -f /var/log/syslog

Nachtrag

Natürlich wollte ich mir noch ein Bild machen, wie die Situation vor diesen neuen Umleitungen aussah. Erschreckend:

# cat syslog | cut -d " " -f 6 | sort | cut -d "[" -f 1 | sort | uniq -c | sort -r -n
   2534 dhcpd:
   2215 /USR/SBIN/CRON
   1688 snmpd
    392 kernel:
     98 mt-daapd
     55 syslog-ng
     40 postfix/qmgr
     36 avahi-daemon
     31 smartd
     26 ovpn-server
     23 named
     21 postfix/smtp
     19 postfix/cleanup
     18 postfix/pickup
      9 mysqld
      8 apcupsd
      6 ntpdate
      6 /etc/mysql/debian-start
      4 /usr/sbin/cron
      4 postfix/tlsmgr
      3 arpwatch:
      2 postfix/master
      2 mysqld_safe
      1 shutdown
      1 postfix/local
      1 mdadm
      1 init:

Mein Gefühl hat sich bestätigt: Ich habe die richtigen "Übeltäter" in eigene Dateien ausgelagert.

Labels: , ,

0 Kommentare | neuen Kommentar verfassen

Sonntag, April 05, 2009

Digg für Kommandozeilen-Befehle

Eine Schatztruhe für all diejenigen Leute da draussen, die sich hin und wieder auf einer Linux-Kommandozeile bewegen:

Command-line-fu

Labels: , ,

0 Kommentare | neuen Kommentar verfassen

Samstag, April 04, 2009

Bye bye, Openmoko

He said in his speech that the company had to delay the development of the new Smartphone GTA03 in favor of an other product. Later in a face to face interview he said that almost half of the people working for the company were leaving or had to leave.

Quelle: read this » Blog Archive » Interview Sean Moss-Pultz

Ich bin ein grosser Verfechter von Linux und sonstiger Open-Source-Software. Doch leider verwundert es mich kein bisschen, dass die Realisierung eines Open-Source-Mobiltelefons anscheinend vor grossen Schwierigkeiten steht. Als wäre das nicht abzusehen gewesen ... Verschiedene Gründe tragen meiner Meinung nach dazu bei:

  • Hardware-Entwicklung verschlingt viel Geld. Linux konnte sich nur den heutigen Marktanteil ergattern, weil es auf die billig herzustellende und vielerorts vorhandene x86er-Plattform zurückgriff - gefördert, das muss man einfach anerkennen, durch den Erzrivalen Microsoft und sein Windows-Ökosystem. Wenn schon Firmen mit Millionenbudgets wie Samsung, LG, Nokia, Sony Ericsson, Motorola massive Probleme haben und deren R&D-Abteilungen gegenüber dem Platzhirschen mit Apfel-Logo äusserst blass aussehen, wie soll es dann ein Linux-Büdchen mit ein paar wenigen Almosen schaffen, "the next big thing" zu veröffentlichen?
  • Im Schatten des iPhones. Wie soll man Entwickler wie auch Kunden für ein Gerät interessieren, dass sich zuerst aus dem gigantischen Schlagschatten des iPhones herausboxen muss?
  • Geek only = geek only. Von Geeks, für Geeks. Die einzigen Personen, die dieses Gerät mir gegenüber in den letzten Monaten erwähnt haben, sind bis auf die letzte Stammzelle OSS-Anhänger. In den Augen von auf den Boden gebliebenen Personen haftet solchen Leuten (leider) oftmals das Image eines Spinners an.
  • It's the Interface, stupid! Schön und gut, wenn ich per SSH auf mein Mobiltelefon zugreifen kann. Doch was bringt's? Für den Endbenutzer ist die möglichst einfache Bedienung des Gerätes das A&O. Leider bin ich immer noch der Meinung, dass Linux im Vergleich zu Apple und Microsoft massive Schwächen im graphischen Benutzerinterface hat. Das iPhone hat hier einen meilenweiten Vorsprung als alles andere auf dem Markt erhältliche. Multitouch hätte meiner Meinung nach nie von der Open-Source-Hardware-Community entwickelt werden können ...

Labels: , , , , ,

2 Kommentare | neuen Kommentar verfassen

Sonntag, März 15, 2009

Batch convert color images for OCR

Vor langer, langer Zeit war ich in der Schweizerischen Nationalbibliothek und habe dort mit meiner Digitalkamera Seiten aus alten Büchern photographiert. Obwohl ich dies ohne Blitz tat, herrschte im Lesesaal alsbald helle Aufregung - denn ich hatte soeben gegen die Benutzungsordnung verstossen. Glücklicherweise musste ich die Bilddaten aber nicht von der Speicherkarte löschen, wurde aber freundlich und bestimmt gemahnt, das nie wieder zu tun ...

Mittlerweile habe ich endlich Zeit gefunden, die Bilddaten zu sortieren und zu beschriften. Dummerweise war der Foto-Termin bereits derart lange her, dass ich schlicht vergessen hatte, aus welchem Buch ich digitale Kopien gemacht hatte. Mittlerweile ist es mir wieder in den Sinn gekommen:

main.bib

hauser1925
Geschichte der Hagelversicherung in der Schweiz
P. Hauser
      (1925)

Doch gut, was bringen mir die Photographien, wenn ich diese nicht in einem schicken PDF-Dokument zusammenfasse und die Texterkennung darüber laufen lasse? Genau: Nichts.

Deshalb hiess es, die je ca. 3MB wiegenden farbenfrohen JPEGs in monochrome Bitmaps umzuwandeln. Nach einigem Googlen war ich mit Hilfe des ausführlichen Artikels ImageMagick v6 Examples -- Color Quantization and Dithering im Stande, folgendes Shell-Script zu schreiben, welches mit ImageMagick die gewünschte Batch-Conversion durchführt:

#!/bin/sh

for i in *.jpg;
do
        echo "Converting $i"
        convert "$i" +dither -colors 2 -colorspace gray -normalize "$i-mono.gif"
        echo "Conversion finished"
done

exit 0

Anschliessend öffnete ich den Adobe Acrobat 7, wählte File > Create PDF... > From Multiple Files..., wählte die GIF-Dateien aus und liess mir ein PDF daraus erstellen.

Labels: , , ,

1 Kommentare | neuen Kommentar verfassen

Sonntag, Februar 22, 2009

Mit Cacti SNMP-fähige Netzwerkdrucker abfragen

Auf der Arbeit verwende ich cacti nicht nur, um Kennwerte von Linux-, Mac OS X- und Windows-Servern abzufragen und zu speichern (Prozessorauslastung, Festplattenplatz etc.), sondern frage damit auch SNMP-fähige Drucker ab.

Meistens handelt es sich dabei um netzwerkfähige HP (Color) Laserjets, doch auch Drucker anderer Hersteller liefern per SNMP die drei grundlegenden Parameter Page Count und Page Output. Wenn man Glück hat, kann per SNMP sogar der Tonerstand graphisch ausgewertet werden.

Die dafür nötigen Templates habe ich aus verschiedenen Quellen zusammengestibitzt und veröffentliche diese in diesem Blog-Artikel als ZIP-Datei:

cacti-snmp-printer-templates.zip

Die Templates importiert man über die cacti-Administrationsoberfläche unter dem Menupunkt Import Templates. Anschliessend erfasst man die Hosts und weist diesen die Templates dann manuell zu, oder baut sich ein Host Template bestehend aus den drei Templates zusammen.

Labels: , , ,

0 Kommentare | neuen Kommentar verfassen

Freitag, Februar 20, 2009

Pseudo-Arrays in MS-DOS Batch-Dateien

Natürlich gibt es so etwas auch in der Microsoft-Welt, ist aber bedeutend hässlicher als bei bash & Co:

FOR /F "tokens=1,2,3,4 delims=|" %%G IN ("eins|zwei|drei|vier") DO @echo Werte: %%G %%H %%I %%K

Wer die Werte nicht aus einem String, sondern aus einer Datei auslesen möchte, passt den Befehl leicht an:

FOR /F "tokens=1 delims=;" %%G IN (datei.txt) DO @echo Wert: %%G

Via: FOR /F

Labels: , , , ,

0 Kommentare | neuen Kommentar verfassen

Montag, Januar 05, 2009

snmpd 5.4 unter Debian geschwätzig machen

Obwohl ich hier bereits in verschiedensten Artikeln lusche Sicherheitsvorkehrungen angeprangert habe, halte ich es bei SNMP genau so: Hauptsache offen wie ein Scheuenentor. Das Protokoll ist derart kompliziert, dass ich beim Debugging nicht Zeit verlieren möchte.

Auf Servern, die ich mit cacti überwachen möchte, installiere ich normalerweise folgende snmpd.conf:

sysLocation Raum 1
sysContact Mario Aeby 
#
rocommunity public 192.168.0.1
#rocommunity public 192.168.0.0/24
#
includeAllDisks
#
proc
load

Auf einem Debian-System mit snmpd 5.4.1~dfsg-12 wollte obige Konfiguration aber nicht und spuckte drei Fehlermeldungen aus (zu finden in /var/log/daemon.log):

Jan  5 16:26:42 snmpd[13111]: /etc/snmp/snmpd.conf: line 7: Error: Blank line following includeAllDisks token.
Jan  5 16:26:42 snmpd[13111]: /etc/snmp/snmpd.conf: line 9: Error: Blank line following proc token.
Jan  5 16:26:42 snmpd[13111]: /etc/snmp/snmpd.conf: line 10: Error: Blank line following load token.

Die für snmpd 5.4 überarbeitete Version der Konfiguration sah deshalb folgendermassen aus:

sysLocation Raum 1
sysContact Mario Aeby 
#
rocommunity public 192.168.0.1
#rocommunity public 192.168.0.0/24
#
includeAllDisks 10%
#
load 1

Doch damit war nicht genug - snmpwalk wollte partout nur bei einem Testlauf von localhost Werte liefern.

Ein Blick in die Prozessliste machte schliesslich das Übel rasch erkennbar:

13491 ?        S      0:01 /usr/sbin/snmpd -Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1

127.0.0.1 wies snmpd an, nur auf dem lo-Interface zu lauschen.

Ich öffnete snmpds Ohren, indem ich die Datei /etc/default/snmpd anpasste und dort die Zeichenkette 127.0.0.1 entfernte.

(Falls jemand eine schönere Umgehungsmöglichkeit kennt, soll er diese als Kommentar posten. Danke!)

Labels: , ,

1 Kommentare | neuen Kommentar verfassen

Mittwoch, Dezember 10, 2008

Perl 5 sucks!

Heute gerade erlebt:

For example, to install a module from the CPAN, you must first answer several questions to configure the CPAN client. Then, you download a package, which runs a small program, which generates a Makefile, which configures, builds, tests, and installs the module -- if everything went correctly.

Quelle: Five Features Perl 5 Needs Now - O'Reilly Broadcast

Ich wollte mir App::Ack installieren. Zuerst versuchte ich es als normaler User, was aber (wohl wegen den Berechtigungen) nicht geklappt hat. Der Fragekatalog wurde durchgespult, viele Module heruntergeladen und irgendwo unter den vorbeiflimmernden Zeilen gab es dann irgendwann einmal eine Fehlermeldung, die ich natürlich übersehen habe.

Die Installation via sudo klappte leider auch nicht viel besser - vorerst jedenfalls. Auch hier lief irgendein Test schief und Ack wurde nicht installiert. Zwar war anhand der Fehlermeldung erkennbar, dass etwas schief gelaufen war - wie das Problem zu beheben sei, erfuhr ich aber nicht. Es ist dem Zufall zuzuschreiben, dass ich im Anschluss einige als "optional" bezeichnete Test-Pakete installieren liess - und plötzlich war ack unter /usr/bin/ vorhanden. Heureka.

Was Perl braucht? Ein apt-get install ack - fertig. Obwohl ich Perl nicht gut genug kenne, denke ich, dass CPAN das Spiegelbild seiner Benutzer und seiner Programmierer ist: Umständlich, kompliziert, technikbesessen. Und somit für Endbenutzer wie mich nicht geeignet.

Labels: , , ,

0 Kommentare | neuen Kommentar verfassen

Samstag, November 22, 2008

wget, find und Bash ausgereizt

Um eine lokale Kopie der auf Terrific messages on girls’ T-shirt geposteten Photos zu erstellen, musste zwei Hürden übersprungen werden:

wget

$ wget --page-requisites "http://35mm.instantfundas.com/2008/11/terrific-messages-on-girls-t-shirt.html"

holte nur diejenigen Dateien, die auf dem lokalen Server abgelegt waren. Da die Photos bei ggpht.com gehostet wurden, kamen sie beim ersten Versuch nicht mit. Abhilfe schaffte folgender Befehl:

$ wget --span-hosts --page-requisites "http://35mm.instantfundas.com/2008/11/terrific-messages-on-girls-t-shirt.html"

find

Da ich vergessen hatte, wget mit der Option -nd ("no directories") aufzurufen, waren die Bilder nun über unzählige Ordner verstreut. Hier half find:

$ find . -name *tshirt* -exec mv '{}' '/Users/mario/Desktop/backup/' ';'

for-Schleife mit Bash

Sogleich folgte das nächste Problem: Die Dateinamen der Bilder waren nicht brauchbar: girls-tshirt (3)_thumb[1].jpg?imgmax=800 Mit Doppelklick wurde nicht automatisch Apples Preview geladen. Was nun? Bash hilft:

$ for i in *jpg*; do mv $i $i.jpg; done;

Ein einziges Bild wurde nicht umbenannt, weil es im PNG-Format daherkam. Hier war ich zu faul und benannte es von Hand um ...

Labels: ,

1 Kommentare | neuen Kommentar verfassen

Mittwoch, November 19, 2008

Mit cURL Serien von Dateien herunterladen

Nichts leichter als das:

$ curl "http://www.eMeidi.com/downloads/[1-15].jpg" -o image_#1.jpg

In diesem Fall geht der Downloader davon aus, dass im Ordner downloads auf meinem Server folgende Dateien liegen:

http://www.eMeidi.com/downloads/1.jpg
http://www.eMeidi.com/downloads/2.jpg
http://www.eMeidi.com/downloads/3.jpg
...
http://www.eMeidi.com/downloads/15.jpg

Indem man eine Range angibt (in eckigen Klammern, "von bis"), berechnet cURL diese URLs eigenhändig und versucht diese anschliessend herunterzuladen. Damit die Dateien auf der Festplatte gespeichert werden, muss dies mit dem Schalter -o kundgetan werden. Da eine Range eingesetzt wird, dient #1 als Platzhalter. In unserem Beispiel liegen nach dem Batch-Download folgende Dateien im Verzeichnis:

image_1.jpg
image_2.jpg
image_3.jpg
...
image_15.jpg

Labels: , ,

0 Kommentare | neuen Kommentar verfassen

Mittwoch, November 12, 2008

Ubuntu Terminal wird weiss angezeigt


Ubuntu: Terminal Visibility Troubles
Originally uploaded by emeidi

Nach einem Upgrade meines "Media Center"-PCs (einem hundsnormalen Dell, Desktop-Modell mit Pentium III-CPU) auf Ubuntu 8.04 wurde beim Aufruf des Terminals nur eine weisse Fläche angezeigt (vgl. den Screenshot rechts, den ich einem anderen unglücklichen Ubuntu-Benutzer entliehen habe).

Das Problem konnte schlussendlich gelöst werden, in dem ich der xorg.conf folgenden Befehl beifügte:

Option "AddARGBGLXVisuals" "True"

Via: Problem: no window borders and white terminal with desktop effects.

Labels: ,

0 Kommentare | neuen Kommentar verfassen

Freitag, November 07, 2008

Datenbankdump von MySQL 5 nach MySQL 4

Den ursprünglichen Dump stellte ich mit phpMyAdmin her. Leider erlaubt die Web-Applikation nicht, den Charset des Dumps von UTF-8 nach LATIN1 (aka ISO-8859-1) anzupassen.

Deshalb ging es auf die Kommandozeile des Servers:

mysqldump --default-character-set=latin1 --compatible=mysql40 -u {user} -p {db} > dump.sql

Einerseits konnte ich so das Charset des Dumps festlegen (--default-character-set=latin1), andererseits musste ich aber auch auf die Kompatibilität achten (--compatible=mysql40). Leider war es mit letzterem Versprechen nicht wirklich weit her ...

Auf Grund eines seit Monaten bestehenden Bugs in MySQL 5 enthielt der mysqldump-Dump Befehle, die MySQL 4.0.x nicht versteht:

SET @saved_cs_client     = @@character_set_client;
SET character_set_client = @saved_cs_client;

... was MySQL 4 folgende Fehlermeldung ausgeben liess:

#1193 - Unknown system variable 'character_set_client'  

Mittels vim (die GUI-Editoren unter Mac OS X mit Syntax-Highlighting kapitulierten vor 4000+ Zeilen) konnte ich den Dump dann doch noch derart zurechtbiegen, dass MySQL 4 die Datei schlussendlich schluckte. Der Befehl dazu lautete:

:g/^SET/d

Via: Vim: Delete every line in the file that does not match a pattern

Dieser vim-Befehl löscht kurzerhand alle Zeilen, die mit SET ... beginnen. Scheint dem Import nicht geschadet zu haben ...

Labels: , ,

1 Kommentare | neuen Kommentar verfassen

Donnerstag, November 06, 2008

Russisch Roulette mit Bash

[ $[ $RANDOM % 6 ] == 0 ] && rm -rf / || echo "You live"

Quelle: (Useful) Stupid Unix Tricks?

Labels: ,

3 Kommentare | neuen Kommentar verfassen

Mittwoch, Oktober 22, 2008

Datei-Erweiterung in Kleinbuchstaben umwandeln

In den letzten Tagen habe ich meine MP3-Sammlung aufgeräumt (auf der Workstation herrscht langsam Platzmangel, weshalb ich die Songs auf den Server verschiebe). Dabei musste ich feststellen, dass es tatsächlich Idioten da draussen gibt, die ihre MP3s die Endung MP3 anstelle mp3 vergeben.

Unter Linux schafft man diesem Problem rasch Abhilfe, indem man das Tool rename verwendet:

rename 'y/A-Z/a-z/' *

Einziger Nachteil: Der ganze Dateiname wird nun kleingeschrieben. Für mich aber kein Problem, da ich bei MP3s auf konsequente Kleinschreibung achte.

Via: Convert Filenames to Lowercase

Labels: ,

2 Kommentare | neuen Kommentar verfassen

Samstag, Oktober 18, 2008

Textdateien von Mac Roman nach UTF-8 konvertieren

Heute habe ich mich endlich davon überzeugen lassen und MacFamilyTree 5 gekauft. Bisher war bei mir immer noch die Uralt-Version 3.6.6 im Einsatz.

Beim Import der Genealogie (im GEDCOM-Format) dann der Schock: Sonderzeichen werden verwurstelt!

Glücklicherweise kommt einem wieder einmal ein Unix-Tool zur Hilfe, mit der man die GEDCOM-Datei (im Grund ein beeindruckend simples Text-Format) von der Zeichenkondierung Mac Roman nach UTF-8 umwandeln kann:

$ iconv -f MACROMAN -t UTF-8 genealogie.ged > genealogie-utf8.ged

Und schon werden alle äöüéèà korrekt übernommen.

Labels: , , ,

1 Kommentare | neuen Kommentar verfassen

Montag, September 22, 2008

Dienste oder Daemons unter Debian deaktivieren

Um Dienste unter Debian zu deaktiveren, ohne unter /etc/init.d mit Scripts und Symlinks wursteln zu gehen, empfehlen sich zwei Tools:

  • rcconf
  • sysv-rc-conf

Via: Remove Unwanted Startup Files or Services

Labels:

0 Kommentare | neuen Kommentar verfassen

Donnerstag, August 14, 2008

Debian-Pakete downgraden

Seit einem apt-get upgrade habe ich Probleme mit den unter cacti 0.8.7b erstellten Grafiken. Es scheint, als gäbe es ein Problem im Zusammenspiel mit rrdtool 1.2.28 - jedenfalls klagen im cacti-Forum andere Benutzer über dasselbe Problem.

Nun, dann "rollen" wir halt die schuldigen Pakete zurück. Wie? Nun, eigentlich ist es recht simpel:

  1. Auf packages.debian.org such man nach dem Paket-Namen und ruft dessen Seite auf (stable empfohlen). Hier: packages.debian.org/etch/librrd2
  2. Dann klickt man unter Download <paket> auf die Architektur des Servers (i386 für Normalsterbliche): packages.debian.org/etch/i386/librrd2/download
  3. Dort sucht man einen geographisch naheliegenden Mirror aus und klickt dann auf dem Link, um das Paket herunterzuladen. In meinem Fall war es SWITCH: ftp.ch.debian.org/debian/pool/main/r/rrdtool/
  4. Auf der Kommandozeile tippt man nun
    # dpkg -i librrd2_1.2.15-0.3_i386.deb
    und hofft, dass es keine Abhängigkeiten mit anderen Paketen gibt
  5. Fertig

Mit librrd 1.2.15 produziert cacti wieder anständige Grafiken, wie Backup meiner MacBook-Festplatte auf den iMac beweist

Labels: , , ,

1 Kommentare | neuen Kommentar verfassen

Mittwoch, Juli 09, 2008

cURL versendet POST- als GET-Request

... und zwar genau dann, wenn man CURLOPT_NOBODY aktiviert.

Dieser Erkenntnis hatte ich nach ca. einer Stunde debuggen meines Twitter-Cron-Jobs. Eine Google-Suche führte dann auch schnurstracks zur Erläuterung des "Bugs", der eigentlich ein Feature ist/sein soll:

Setting CURLOPT_NOBODY to FALSE will now switch the HTTP request method to GET simply because previously when you set CURLOPT_NOBODY to TRUE first and then FALSE you'd end up in a broken state where a HTTP request would do a HEAD by still act a lot like for a GET and hang waiting for the content etc.

If you issue a POST request and then want to make a HEAD or GET using the same re-used handle, you must explicitly set the new request type using CURLOPT_NOBODY or CURLOPT_HTTPGET or similar.

Quelle: [ 2010735 ] setting a CURLOPT_NOBODY option forces GET request

Labels: , , ,

0 Kommentare | neuen Kommentar verfassen

Mittwoch, Juli 09, 2008

HTTP-Traffic mit tcpdump mitschneiden

# tcpdump -i eth1 -w /tmp/dump.txt -s 1024 'tcp port 80'
  • -i eth1 gibt das Interface an, auf dem gelauscht werden soll
  • -w /tmp/dump.txt, damit der Müll nicht auf der Kommandozeile, sondern in einer Datei landet
  • -s 1024 ist wichtig, damit genügend Nutzdaten mitgeschnitten werden (hier: 1024 Bytes)
  • 'tcp port 80' beschränkt den Mitschnitt auf HTTP-Traffic (in beide Richtungen)

Die Datei analysiert man dann mittels

$ tcpdump -r /tmp/dump.txt

(weil ich es nicht geschafft habe, auch die Nutzdaten anzuzeigen, musste halt der gute, alte vim für diese Aufgabe herhalten)

Labels: , ,

4 Kommentare | neuen Kommentar verfassen

Dienstag, Juli 08, 2008

Reiser hat sie tatsächlich umgebracht

Bizarre Story um den Entwickler des Dateisystem ReiserFS:

Der des Mordes an seiner Frau schuldig gesprochene Open-Source-Programmierer und Entwickler eines Dateisystems Hans Reiser hat die Polizei zu der mutmaßlichen Leiche seines Opfers geführt. Zudem hat Reiser gestanden, dass er mit seiner Frau gekämpft und sie dann stranguliert hat, berichten unter anderem die US-Tageszeitung San Francisco Chronicle und ABC News aus eingeweihten Kreisen.

Quelle: heise online - Hans Reiser führt Polizei zur Leiche seiner Frau

Labels: , , , ,

0 Kommentare | neuen Kommentar verfassen

Dienstag, Juni 24, 2008

Xdebug-Meldungen verfeinern

Wie man Xdebug installiert, habe ich hier bereits beschrieben. Doch mit der Installation alleine ist es noch nicht getan; das Teufelswerkzeug muss nun auch noch derart konfiguriert werden, dass es dem Entwickler alle wichtigen Informationen liefert.

Die Jungs drüben bei IBM haben sich die Mühe gegeben, die (bezüglich INI-Einstellungen schwer durchschaubare) Dokumentation zu lesen und ihre Konfigurationsparameter im Netz zu publizieren:

xdebug.dump_once = On
xdebug.dump_globals = On
xdebug.dump_undefined = On
xdebug.dump.SERVER = REQUEST_METHOD,REQUEST_URI,HTTP_USER_AGENT
xdebug.dump.REQUEST=*

xdebug.show_exception_trace = On
xdebug.show_local_vars = 1
xdebug.var_display_max_depth = 6

Quelle: Squash bugs in PHP applications with Xdebug

Tönt gut und produziert äusserst detaillierte Fehlermeldungen.

Wer nichts vom korrekten Initialisieren von Variablen hält, sollte xdebug.dump_undefined vielleicht lieber auf Off schalten ...

Wer auf Exceptions setzt und diese sauber abfängt, sollte vielleicht auch xdebug.show_exception_trace auf Off schalten ...

Labels: , , ,

0 Kommentare | neuen Kommentar verfassen

Freitag, Juni 20, 2008

Runlevel in Debian wechseln

Für viele eine überaus doofe Frage, doch in meinem bereits mehrere Jahre dauernden Linux-Leben war heute tatsächlich das erste Mal, dass ich so etwas durchführen muss.

Aktueller Runlevel

$ runlevel
N 3

Quelle: An introduction to run-levels

Runlevel wechseln

# telinit 1

Mittlerweile läuft rsync munter vor sich hin und kopiert Daten von der alten auf die neue Partition ... Hopp Schwiz!

Labels: ,

0 Kommentare | neuen Kommentar verfassen

Sonntag, Juni 15, 2008

Wie zwei auskommentierte Zeilen Code SSL-Zertifikate unbrauchbar machten

/* MD_Update(&m,buf,j); */

Quelle: Diff for /openssl/trunk/rand/md_rand.c between version 140 and 141

Labels: , , , ,

0 Kommentare | neuen Kommentar verfassen

Dienstag, Juni 10, 2008

Apache 1.3, MySQL 5 und PHP 5 unter Mac OS X auf UTF-8 trimmen

Mittlerweile habe auch ich den AMP-Stack auf meinem MacBook installiert und entwickle damit Web-Applikationen. Damit es bezüglich den Zeichensätzen koscher zu und her geht, musste ich folgende zwei Anpassungen an der Konfiguration vornehmen:

Apache 1.3

(Ich verwende aus Faulheit den mit Tiger mitgelieferten Apache - leider halt noch nicht 2.x)

In der /etc/httpd/httpd.conf wird mit folgendem Befehl eingestellt, dass im Header der HTTP-Antwort UTF-8 als Zeichensatz angegeben wird:

AddDefaultCharset UTF-8

MySQL

In der /etc/my.cnf

init-connect='SET NAMES utf8'

Bei jeder Verbindungsaufnahme (bspw. mysql_connect() via PHP) wird der Zeichensatz der ausgelieferten Daten damit auf UTF-8 geschaltet.

Selbstverständlich muss man aber immer noch aufpassen, in welchem Zeichensatz man Datenbank-Dumps exportiert und wieder einspielt ...

Labels: , , , , , , ,

0 Kommentare | neuen Kommentar verfassen

Sonntag, Mai 18, 2008

PDF unter Mac OS X in ASCII-Text umwandeln

pdftotext

Wenn es auch HTML sein kann: PDF in HTML umwandeln? Gmail!

Labels: , , ,

0 Kommentare | neuen Kommentar verfassen

Mittwoch, Mai 14, 2008

lpd funktioniert nach apt-get upgrade nicht mehr

Kein Wunder, beiss ich mir schon den ganzen Abend die Zähne an diesem Problem aus:

Indeed lprng 3.8.A~rc2-1 comes build with --disable-remote which disables listening on port 515 by default. You have to enable it again with setting

lpd_listen_port=515 

in lpd.conf to get it back.

Quelle: Bug#466964: LPD doesn't listen on port 515

Labels: ,

0 Kommentare | neuen Kommentar verfassen

Freitag, April 11, 2008

Hilfreiche bash-Shortcuts

  • Ctrl+a An den Anfang der Zeile springen
  • Ctrl+e Ans Ende der Zeile springen
  • Ctrl+w Wort löschen
  • Ctrl+u Alles vor dem Cursor löschen
  • Ctrl+k Alles nach dem Cursor löschen
  • Ctrl+l Bildschirm löschen (wie clear auf der Kommandozeile)
  • Ctrl+c Momentan laufenden Befehl abbrechen
  • Ctrl+d Logout

Labels: , ,

1 Kommentare | neuen Kommentar verfassen

Samstag, März 01, 2008

CUE-Sheet für MP3s fehlt?

Da hat man aus hier nicht genannten dubiosen Quellen ein Musik-Album im MP3-Format heruntergeladen - und nun dies: Anstelle der einzelnen Songs liegt ein einziges, grosses MP3 auf der Festplatte. Um das Album auf den iPod zu kopieren und jeden Song einzeln anwählen zu können, muss die grosse Datei ein die Einzelteile zerlegt werden. Aber wie?

Kein Problem! Man bediene sich ...

cuesheet heaven

... um das entsprechende CUE-Sheet (eine einfach aufgebaute Text-Datei, die die exakten Startzeiten der in einem grossen MP3 enthaltenen Lieder aufführt) aufzutreiben.

Unter Linux genügt mp3splt, um die Datei anhand der Angaben in dieser Datei aufzuschlitzen:

mp3splt -c sheet.cue audio.mp3

(Nachtrag: Wie ich gerade bemerke, habe ich darüber ja schon einmal gebloggt; damals empfahl ich aber cuemaster)

Labels: , , , ,

0 Kommentare | neuen Kommentar verfassen

Samstag, Februar 23, 2008

Unter Linux und Mac OS X identische Dateien finden

Man bemächtige sich der Sourcen von fdupes, kompiliere diese, lege das Binary im Ordner /usr/local/bin ab (oder in einem anderen, bevorzugten Ordner) und führe fdupes dann im gewünschten Verzeichnis mit den doppelten Dateien aus:

$ fdupes -r .

Wenn man noch die Option -d dran hängt, kann man überzählige Dateien gleich löschen lassen (keine Angst; jeder Löschvorgang benötigt die Bestätigung durch den Benutzer):

$ fdupes -r -d .

(Profis werden sich mit xargs etwas basteln, um den Löschvorgang zu automatisieren)

Labels:

0 Kommentare | neuen Kommentar verfassen

Donnerstag, Januar 31, 2008

Wer kommentiert auf Winkelried.info?

Winkelried ist derzeit die rechte Bastion in der linkslastigen schweizerischen Blogosphäre. Lieblingsthemen:

Leider ist die Qualität der Beiträge oftmals nicht überzeugend, desöfteren sind Texte wirr und wenig schlüssig.

Schmunzeln musste ich heute, als ein "Richard Flühmann" einen Abgesang auf den Informatikstandort Schweiz publizierte. Die Linken seien - wie übrigens an etwa allem, was in der Schweiz derzeit krumm läuft - schuld, dass wir hier nicht zur Weltspitze gehörten.

Im Grund geht es im Artikel darum, dass Winkelried seinen Server im Ausland (konkret: Den USA) betreiben muss, um vor Klagen (von Linken) wegen Verstössen gegen Gesetze (die selbstverständlich von Linken erlassen wurden) gefeit zu sein. Skandal!

Schon einmal etwas von Referendum und Initiative gehört?

Die Untersuchung

Wer sich gelegentlich die Kommentare durchliest, wird hier kaum etwas neues entdecken: Die Kommentare auf Winkelried leben von einigen wenigen, sehr Winkelried-affinen Personen. Manchmal kommt es einem vor, als wäre einfach der polternde Stammtisch aus einem ruralen Dörfchen in das Internet übertragen worden - man ist unter sich, jeder Kommentator plappert dem anderen nach und gibt diesem Recht. Und selbstverständlich wird immer sowas von auf den Tisch gehauen.

Total Kommentare: 673

1. schlechtmensch 157 23.33%
2. Kulturbereicherer 83 12.33%
3. framei 58 8.62%
4. derdernichtlesenkann 39 5.79%

Die Hälfte der Kommentare (50%) stammen von diesen vier Personen.

Hintergrund

Zur Analyse der Kommentare habe ich die auf der Web-Site aufgelisteten "Top 100"-Beiträge (= Beiträge mit den meisten Ansichten) heruntergeladen.

Hierzu kopierte ich die Liste aus dem HTML-Quelltext der Homepage, fügte diese in TextMate ein und startete die Bereinigung, um die "nackten" URLs zu erhalten:

  • Suchen: <li><a href="
    Ersetzen: - (leer)
  • Suchen: /(".*</li>)
    Ersetzen: - (leer)

Übrigens, lieber "Webdesigner": Standardkonformes HTML umschliesst eine Schlange von <li>s mit einem <ul>-Tag.

Anschliessend liess ich wget die in der Liste aufgeführten URLs herunterladen:

$ wget -i winkelried-urls.txt

Den Rest der Analyse übernahm ein PHP-Script, das die 100 HTML-Dateien mit PCRE nach dem Pattern /<h4>(.*?)<\/h4>\s<br>\s+schrieb/ durchsuchte, von Links trennte und nach Häufigkeit ordnete.

Nachtrag: Die komplette Liste

1 schlechtmensch 157 23.33%
2 Kulturbereicherer 83 12.33%
3 framei 58 8.62%
4 derdernichtlesenkann 39 5.79%
5 viktor 30 4.46%
6 Achilles 27 4.01%
7 tin 18 2.67%
8 Loco 18 2.67%
9 Rose_Auslaender 17 2.53%
10 gebsn 15 2.23%
11 musli_weg 13 1.93%
12 Trojaner 12 1.78%
13 David 11 1.63%
14 und_so 10 1.49%
15 Menahem 8 1.19%
16 Tyrann 8 1.19%
17 Landammann 7 1.04%
18 hinschauende 6 0.89%
19 protectisrael 6 0.89%
20 Rudenz 6 0.89%
21 asylstrasse 6 0.89%
22 schwizli 5 0.74%
23 Rütliborat 5 0.74%
24 benzmann 4 0.59%
25 hoppelhase 4 0.59%
26 Schafspelz 4 0.59%
27 set_it_straight 4 0.59%
28 mauluege 3 0.45%
29 hofmae 3 0.45%
30 emeidi 3 0.45%
31 Oli Garch 3 0.45%
32 white.elefant 3 0.45%
33 Toranaga 3 0.45%
34 elminster 3 0.45%
35 Winkelried 3 0.45%
36 Judith 3 0.45%
37 lionne56 3 0.45%
38 Martin Prochazka 2 0.3%
39 eidgenoss 2 0.3%
40 msarbach 2 0.3%
41 Exackt 2 0.3%
42 Wahlen - Blocher zwischen Staatsstreich und Putsch | DER MISANTHROP 2 0.3%
43 stammtischpolteri 2 0.3%
44 Dumdidum 2 0.3%
45 weissnicht 2 0.3%
46 www.amade.ch 2 0.3%
47 Peter 2 0.3%
48 Tquila_sunrise 2 0.3%
49 Fracas 2 0.3%
50 admin 2 0.3%
51 Markus Giger 2 0.3%
52 KonradBerlin 2 0.3%
53 Iceman 1 0.15%
54 hyde11 1 0.15%
55 Wisi 1 0.15%
56 Winkelruedi 1 0.15%
57 AmonAmarth 1 0.15%
58 links.mitte.rechts 1 0.15%
59 Blocher weg - Unterstützt die SVP! « Leben - Gedanken - Blog 1 0.15%
60 WINKELRIED.INFO » Herman bedauert Äusserungen über Nazi-Zeit 1 0.15%
61 wilderer 1 0.15%
62 donaldson 1 0.15%
63 HellerBarde 1 0.15%
64 Dominik Hennig 1 0.15%
65 omc 1 0.15%
66 David Frankfurter 1 0.15%
67 mousseman 1 0.15%
68 Antisemitismus im Wahlkampf : PROTECT-ISRAEL.CH 1 0.15%
69 WINKELRIED.INFO » SRG-Haldimann: durch Fehler zur Selbsterkenntnis? 1 0.15%
70 M.Giger 1 0.15%
71 Anno_Domini 1 0.15%
72 a.k. 1 0.15%
73 rob debank 1 0.15%
74 grass 1 0.15%
75 Ueli Maurer 1 0.15%
76 Asterix con turbante: la islamización de Germania « NUEVA EUROPA 1 0.15%
77 Mathematiker 1 0.15%
78 jdoute 1 0.15%
79 Eidgenosse 1 0.15%
80 Brielmaier’s Weblog » Schleudertrauma 1 0.15%
81 iceman80 1 0.15%
82 anaximander123 1 0.15%
83 BurimAlbania 1 0.15%
84 GeistesWelt :: Zottel rettet die Schweiz :: September :: 2007 1 0.15%

Labels: , , ,

19 Kommentare | neuen Kommentar verfassen

Dienstag, Januar 29, 2008

Defekte Windows-Installationen mit Ubuntu und rsync übers Netzwerk sichern

Wie man einen Windows-Rechner mit Knoppix und einer externen USB-Festplatte backupt, habe ich bereits im Artikel Defekte Windows-Installationen mit Knoppix und rsync sichern aufgezeigt.

Nun gehen wir noch ein bisschen weiter: Die Linux-Live-CD der Wahl enthält dieses mal Ubuntu 7.10 und die Backup-Destination ist ein Linux-Server im Netzwerk.

Windows-Partition mounten

Zuerst heisst es, die Windows-Partition zu mounten. Da es sich um Ubuntu handelt, wird die Platte nicht automatisch in /etc/fstab aufgenommen (Knoppix tut das meines Wissens), weshalb man nicht einfach ein

# mount /dev/hda1

machen kann.

Zuerst erstellt man sich deshalb ein Verzeichnis unter /mnt und mountet dann die Partition

# mkdir /mnt/winme
# mount -t msdos /dev/sda1 /mnt/winme

Wer sich - wie ich - nicht ganz sicher ist, ob es sich nun um hda1 oder sda1 handelt, muss ausfindig machen, wie die Platte angesprochen wird. Mangels Befehlskenntnis musste ich das graphische Partitionierungstool von Ubuntue heranziehen.

Nachtrag: Einfacher (und auf der Kommandozeile) wäre es vielleicht mit fdisk gegangen ...

FAT oder FAT32?

Während dem Kopieren merkte ich dann, dass die Dateinamen abgeschnitten werden (8+3 halt, willkommen in der DOS-Welt!). Deshalb wäre es das nächste Mal wohl angebracht, beim mounten ein anderes Dateisystem anzugeben:

# mkdir /mnt/winme
# mount -t vfat /dev/sda1 /mnt/winme

Da ich dies nicht probiert habe, kann ich nicht sagen, ob vfat als Option existiert und FAT32-Partitionen mit langen Dateinamen mountet ...

Files rüberspitzen

Sobald die Platte gemountet ist (in meinem Fall wütete während Minuten zuerst noch dosfsck und produzierte eine Menge wiederhergestellter Dateien), kann die Kopieraktion beginnen:

rsync -a -v -e ssh /source/dir user@host:/destination/dir

Und irgendwann einmal ist die Kopiererei fertig:

sent 4589083864 bytes  received 958590 bytes  3190853.29 bytes/sec
total size is 4585802793  speedup is 1.00

Labels: , ,

0 Kommentare | neuen Kommentar verfassen

Sonntag, Januar 27, 2008

YouTube-Video mit mplayer in MP3 konvertieren

$ mplayer -dumpaudio -dumpfile song.mp3 song.flv
$ mplayer -vc null -vo null -ao pcm:file=song.wav song.flv

Quelle: Tonspur von Youtube Videos in MP3/OGG Datei wandeln

Wer keine Ahnung hat, wie man die URL eines YouTube-Videos ausfindig macht, wie man die flv-Datei mit wget herunterlädt, noch nie von mplayer gehört hat und nicht weiss ist, was eine Shell ist, dem wird empfohlen, den Song im iTunes Music Store zu kaufen. Oder er ackert die Anleitung durch ...

PS: Ich habe mir folgenden Song runtergeladen:

Labels: , ,

2 Kommentare | neuen Kommentar verfassen

Mittwoch, Januar 09, 2008

Treppenbildung beim Einfügen von Code in vim

Da auch ich zu den faulen Zeitgenossen gehöre, die dann und wann bestehende Teile von Konfigurations-Dateien durch die Gegend kopieren und auf anderen Systemen in Dateien einfügen möchte, habe ich mich immer wieder über die Auto Indentation von vim aufgeregt.

Sobald nämlich Code eingefügt wird, der bereits eingerückt ist, rückt vim den Code eigenhändig erneut ein, was die Einrücktiefe für jede Zeile erhöht.

Die Lösung des Problems ist ganz simpel - ich frage mich gerade, wieso ich nicht längst danach gegoogelt habe:

:set paste

Damit schaltet man vim in den Einfüge-Modus ein, die Einrückung von bereits eingerücktem Text wird damit unterbunden.

Jetzt also nur noch ...

Ctrl+I
Apple+V

... und schon steht der Text wie gewünscht in der Datei.

Quelle: Tip #330: how to stop auto indenting

Labels:

1 Kommentare | neuen Kommentar verfassen

Samstag, Dezember 15, 2007

Netzwerkdrucker mit Avahi anpreisen


Bonjour Printer Sharing
Originally uploaded by emeidi

Wer Mac OS X in einem Netzwerk einsetzt, in dem sich ein etwas teurerer Netzwerkdrucker befindet, wird es längst wissen: Die Dinger preisen sich im Druckdialog unter "Bonjour Printers" automatisch an. Die von Apple (mit?)entwickelte Technologie ist unter vielen Namen bekannt: Rendezvous, Bonjour, mDNS, Zeroconf.

Hier zu Hause betreibe ich einen HP Laserjet 1300 (der kann Postscript, was in heterogenen Umgebungen mit Linux und Mac OS X von Vorteil ist), der am LPT-Port eines Debian GNU/Linux Servers hängt. Druckaufträge aus dem Netzwerk nimmt lprng mit dem LPD/LPR-Protokoll entgegen (CUPS wäre in diesem Fall Overkill).

Als meine Freundin vor Kurzem bei mir zu Besuch war und von ihrem Laptop etwas ausdrucken wollte, erinnerte ich mich an die Einfachheit der Drucker-Installation mit Bonjour. Irgendwie sollte es doch möglich sein, die Funktionalität mit Linux nachzubauen?

Tatsächlich habe ich es nach einigem Pröbeln hingekriegt. Als erstes installiert man den avahi-daemon, der im Hintergrund die ganze mDNS-Geschichte abhandelt:

# apt-get install avahi-daemon

Anschliessend erstellen wir eine XML-Datei unter /etc/avahi/services mit folgendem Inhalt:

$ cat /etc/avahi/services/printer.service 
<service-group>
<name replace-wildcards="yes">HP Laserjet 1300 on ALPHA</name>

<service>
<type>_printer._tcp</type>
<host-name>mad4you.homeip.net</host-name>
<port>515</port>
<txt-record>txtvers=1</txt-record>
<txt-record>rp=Laserdrucker</txt-record>
<txt-record>ty=HP Laserjet 1300</txt-record>
<txt-record>product=(HP Laserjet 1300)</txt-record>
</service>
</service-group>

Erläuterung der Anweisungen

  • type: _printer._tcp Es wird das LPD/LPR-Protokoll verwendet
  • hostname: IP-Adresse oder Domain-Name des Druckservers
  • port: 515 Die Portnummer, auf der LPD lauscht
  • txt-record: rp=Laserdrucker Sehr wichtig: Der Queue-Name des Druckers auf dem LPD-Server. Stimmt dieser nicht, wird der Druckauftrag nicht angenommen. Wie die definierten LPD-Queues heissen, erfährt man aus /etc/printcap
  • ty, product Die Angaben hier sind nicht zwingend nötig - Mac OS X erkennt den Drucker dank diesen Angaben vollautomatisch und richtet die entsprechenden Drucker-Treiber ein (sofern bereits installiert).

Einen gründlichen Einblick liefert die offizielle Dokumentation von Apple: Bonjour Printing Specification

Vielfältige Anwendungsarten

Dieses Protokoll beschränkt sich überhaupt nicht nur auf die Bekanntmachung von Druckern im Netzwerk. Genauso kann man SSH-Server oder Web-Site URLs in den Äther hinaus funken.

Labels: , ,

0 Kommentare | neuen Kommentar verfassen

Samstag, Dezember 15, 2007

Load average: 87.35


Localhost - Processes
Originally uploaded by emeidi

Im Abstand von einigen Wochen ereignet sich auf meinem kleinen Heimserver hier zu Hause ein immer wieder gern gesehenes Schauspiel:

Tasks: 829 total, 54 running
  Mem[|||||||||||||||||||||||||||||||||||||||||||||||||||||||||822/1012MB]     Load average: 66.20 76.20 87.35 
  Swp[||                                                        46/1961MB]     Uptime: 118 days(!), 02:10:10

Als ich vor einigen Wochen zum betreffenden Zeitpunkt endlich einmal zu Hause weilte (sonst bin ich in der Nacht von Samstag auf Sonntag irgendwo am rumfeiern), fand ich endlich heraus, wieso es diesen Spike gibt:

$ cat /proc/mdstat 
Personalities : [raid0] [raid1] 
md0 : active raid0 md10[0] md11[1]
      488390656 blocks 1024k chunks
      
md11 : active raid1 hdg1[0] hdk1[1]
      244195904 blocks [2/2] [UU]
      [===========>.........]  check = 58.2% (142331328/244195904) finish=60.5min speed=28042K/sec
      
md10 : active raid1 hde1[0] hdi1[1]
      244195904 blocks [2/2] [UU]
      [==========>..........]  check = 54.4% (132947904/244195904) finish=70.5min speed=26291K/sec
      
unused devices: 

APC Smart-UPS SUA750I
Originally uploaded by emeidi

Ganz imposant, dass sich der Check der Arrays auch in der Last-Anzeige der USV widerspiegelt.

Labels:

0 Kommentare | neuen Kommentar verfassen

Mittwoch, Dezember 05, 2007

monit endlich brauchbar

Monit now sends three icmp echo requests in one cycle by default. It is possible to customize the echo requests count using the count parameter of icmp test [...]

Quelle: Re: Any Ping Sensitivity Adjust

Wie oft habe ich meine INBOX zugespammt erhalten, weil von mir betreute "Server" mit Billig-Netzwerkkarten schlicht und einfach ein ICMP Echo "vergessen" haben? Nun hoffe ich, dass mit

check host myserver with address 192.168.1.1
    if failed icmp type echo count 5 with timeout 3 seconds
    then alert

Ruhe einkehrt ...

Labels: , ,

0 Kommentare | neuen Kommentar verfassen

Mittwoch, Dezember 05, 2007

Wenn Sista Özel Frühlingsputz am PC macht ...


/mnt/hda1
Originally uploaded by emeidi

... zu viele Dateien löscht und das Gerät beim nächsten Neustart nicht mehr hochkommt, muss der Bruder ran.

Die Vorgeschichte

So geschehen vorgestern Abend: Um genügend Speicherplatz für das Brennen einer CD freizuschaufeln, empfahl ich meiner Schwester WinDirStat, das die Plattenbelegung graphisch anzeigt. Kombiniert mit ihren Administratoren-Rechten (wann habe ich ihr eine solche Berechtigungsstufe vergeben?!) war es nur eine Frage von Minuten, um die ersten paar wichtigen Systemdateien zu löschen.

Meine Sünden

(Es muss hierbei aber doch noch angemerkt werden, dass es eindeutig mein Fehler war, für die Systempartition auf einer 80GB-Festplatte nur 8GB freizuhalten. Immer wieder muss ich in letzter Zeit solche "Jugendsünden" ausbügeln - Windows-Systeme, in diesem Falle Windows 2000, werden mit jedem Monat fetter. Deshalb würde ich heute die Systempartition 80GB gross machen. "Eine System- und eine Datenpartition ist etwas für Sissis!", höre ich die PC-Welt aus dem Walde rufen ...)

Das Problem

Item. Windows 2000 kam also nicht mehr hoch und zeigte nach dem BIOS-Screen folgende Meldung an:

NTLDR fehlt
Neustart mit Strg+Alt+Entf

Schön. Nun hatte ich zwei Möglichkeiten: Entweder ich boote von der Windows 2000-Installations-CD. Oder aber ich bemächtige mich meiner Knoppix 5.1-CD.

Die Wahl war sofort klar: Knoppix Erstens, weil die Windows-CD unheimlich lange zum starten hat, zweitens weil die Recovery-Umgebung ... nun gelinde ausgedrückt ... für'n Arsch ist. Weder werden USB-Treiber geladen, noch die Netzwerkkarte erkannt. Auch die Bordmittel wie fixmbr sind zwar schön und recht - doch für was braucht man sowas, wenn man eine Linux Live-CD rumliegen hat?

Knoppix

So sehr ich für Knoppix schwärmen mag - ich kann mich nicht erinnern, dieses Live-System jemals im ersten Anlauf hochgebracht zu haben. Entweder wird das CD-Laufwerk, von dem Knoppix gerade bootet, nicht gefunden, irgendetwas stimmt mit ACPI nicht oder aber - wie heute - der Schirm bleibt nach dem erstaunlich flooten Linux-Boot schwarz (evtl. ein VGA/DVI-Problem).

Mit der Boot-Option failsafe drang ich dann schliesslich bis zum Knoppix-GUI vor. Nach dem Wechsel in die Konsole mittels Ctrl+Alt+F2 mountete ich die Windows-Systempartition:

$ sudo su
# mount /mnt/hda1

(klappt übrigens längst auch mit NTFS!) Danach konnte ich eine Inspektion vornehmen:

cd /mnt/hda1
ls -l

Und tatsächlich, neben den einschlägig bekannten Ordner-Namen starrte mich blanke Leere an: Unter C:\ fand sich nur gerade eine Datei, die sich pagefile.sys nannte.

Da hatte meine Schwester also doch tatsächlich alles im Root gelöscht, was nicht niet- und nagelfest war (ich vermute, dass pagefile.sys bei der Löschaktion in Benutzung war, weshalb diese Datei nun wirklich nicht entfernt werden konnte).

On Windows, everything is a file

Nun gut, nicht ganz. Doch ein Versuch war es in diesem Falle wert: Ich ging in den oberen Stock, startete den Windows 2000-Computer meines Vaters und kopierte die Dateien

boot.ini
ntdetect.com
ntldr

auf einen USB-Stick.

USB-Stick nicht gefunden

In der failsafe-Umgebung von Knoppix wurde der USB-Stick leider nicht erkannt (als ich ihn einsteckte, leuchtete er nicht einmal, was auf deaktivierte USB-Ports hindeutet).

Irgendwie musste ich doch in die "normale" Oberfläche hineinkommen? Reboot.

Ich schaute mir am Knoppix-Boot-Screen mit Druck auf F2 und F3 die Vielzahl der möglichen Optionen an. Dann hatte ich die Lösung gefunden:

boot: knoppix 2

Mit dieser Boot-Option startet Knoppix "nur" in den Runlevel 2, also ohne graphische Ausgabe. Genau, was ich benötigte.

Runlevel 2

Nachdem vorbeiflimmern unzähliger Linien über den Linux-Bootvorgang landete ich bei tty2 und konnte mich meiner Kommandozeilen-Kenntnisse bedienen.

  1. Mounten der Windows-Systempartition:
    $ sudo su
    # mount /mnt/hda1
  2. Mounten des USB-Sticks:
    # mount /mnt/sda1
  3. Kopieren der Systemdateien vom USB-Stick auf die Systempartition:
    # cp boot.ini ntdetect.com ntldr /mnt/hda1

Fertig! Zu Probezwecken konnte das System nun neu gestartet werden:

# reboot

Und siehe da - nachdem ich die CD aus dem Laufwerk entfernt hatte, starte Windows frisch und munter in den neuen Arbeitstag hinein ...

Labels: , ,

1 Kommentare | neuen Kommentar verfassen

Dienstag, November 27, 2007

Kleine wget-Tricks

Via ein Video über einen Autisten, der herzergreifend die us-amerikanische Nationalhymne singt ...

... bin ich zum Liedtext vorgedrungen:

The Star Spangled Banner

Das MP3

Auf derselben Seite werden auch drei Tonspuren der Nationalhymne angeboten; darunter eine von LeAnn Rimes.

Da diese Interpretation saugut tönt, wollte ich mir eine "Sicherheitskopie" anfertigen.

Dies hat sich als komplizierter erwiesen als gedacht (ja, ich bevorzuge den Download per wget - insbesondere, wenn es sich um mehrere Megabyte grosse Inhalte handelt):

beta:~/Desktop mario$ wget http://www.englisch-hilfen.de/mp3/leann_rime.mp3--01:11:32--  http://www.englisch-hilfen.de/mp3/leann_rime.mp3
           => `leann_rime.mp3.1'
Resolving www.englisch-hilfen.de... done.
Connecting to www.englisch-hilfen.de[87.106.2.52]:80... connected.
HTTP request sent, awaiting response... 403 Forbidden
01:11:32 ERROR 403: Forbidden.

Soso ... Aber vorhin konnte ich das Stück im Browser doch ohne Probleme anhören? Zwei Möglichkeiten für die unerwartete Weigerung des Web-Servers kommen mir auf Anhieb in den Sinn:

  • Referer-Blocking: Nur wer von der selben Domain auf das MP3 zugreift, darf es herunterladen
  • User Agent-Blocking: User Agents wie "wget 1.9.2" etc. wird der Zugriff auf die Datei nicht erlaubt

Als erstes Versuche ich letzteres und gebe der Anfrage einen anderen User Agent-string mit:

beta:~/Desktop mario$ wget --user-agent Mozilla/4.0 http://www.englisch-hilfen.de/mp3/leann_rime.mp3
--01:11:22--  http://www.englisch-hilfen.de/mp3/leann_rime.mp3
           => `leann_rime.mp3'
Resolving www.englisch-hilfen.de... done.
Connecting to www.englisch-hilfen.de[87.106.2.52]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1,910,784 [audio/x-mpeg]

100%[====================================>] 1,910,784    607.03K/s    ETA 00:00

01:11:26 (607.03 KB/s) - `leann_rime.mp3' saved [1910784/1910784]

Na also! Das simple "Mozilla/4.0" reicht bereits, um Zugriff auf die Datei zu erhalten.

Internet-Geschichte

Ursprünglich wurde Mozilla nur als firmeninterne Bezeichnung für den Webbrowser Netscape Navigator benutzt. Zum genauen Ursprung des Namens, der sich auf den ersten populären Webbrowser Mosaic bezieht, gibt es mehrere Erklärungen. Eine besagt, dass er sich aus Mosaic Killa zusammensetzt, laut der anderen aus Mosaic meets Godzilla. Möglicherweise treffen sogar beide Erklärungen zu.

Quelle: Mozilla

Labels: , ,

0 Kommentare | neuen Kommentar verfassen

Montag, November 26, 2007

Das c't vom 26. November 2007

Ein kleiner Streifzug durch die aktuelle Ausgabe der Computerzeitschrift c't:

Offenbar funktioniert Kundenbindung heutzutage nach dem Diodenprinzip und die Kündigung ist dabei die Sperrrichtung. Reinzukommen ist ganz leicht, in der anderen Richtung trifft man auf erheblichen Widerstand.

Quelle: c't, 26. November 2007, "Das Diodenprinzip", S. 1.

Die Expo ist auch als Treffpunkt zwischen Kapitalgebern und Unternehmensgründern konzipiert. In eigenen Workshops gaben Gründer und Investoren Tipps zur Entwicklung von Geschäftskonzepten. Dabei wünschen sich die Kapitalgeber aber "mehr Hacker und weniger MBAs", wie Reshma Sohoni vom Gründer-Netzwerk Seedcamp erklärte.

Quelle: c't, 26. November 2007, "Katerstimmung in Berlin", S. 42.

Swiss fliegt auf Zuverlässigkeit von Windows Server - Linux ohne Starterlaubnis

Ein weiterer Vorteil ist, dass das neue System wesentlich mehr Kapazitäten hat als das alte, das auf 250 Nutzer beschränkt war. [...] "Eine Verbesserung der Uptime auf 99.95% bei gleichzeitiger Kapazitätssteigerung, um mehr Anfragen gleichzeitig zu bearbeiten, ermöglicht es unserem Team, den Anstieg von 30%, den wir bei unserem Online-Vertrieb erleben, spielend abzuwickeln."

Immer schön, wenn sich im Kampf zwischen Gut und Böse auch noch die CIOs ins Rampenlicht stellen:

"[...] Mit Linux hatten wir nicht die nötige Zuverlässigkeit oder Flexibilität." –– Frank Meyer, CIO, SWISS

Mit dieser Aussage stellt sich der CIO gegen den Linux-Erfinder höchstpersönlich:

Torvalds: I think the real strength of Linux is not in any particular area, but in the flexibility. For example, you mention virtualization, and in some ways that's a really excellent example, because it's not only an example of something where Linux is a fairly strong player, but more tellingly, it's an example where there are actually many different approaches, and there is no one-size-fits-all "One True Virtualization" model.

Quelle: Torvalds On Where Linux Is Headed In 2008

Labels: , , ,

0 Kommentare | neuen Kommentar verfassen

Freitag, November 23, 2007

Apache 2.2 gegen LDAP authentifizieren

Die meisten werden es kennen: Wo man sich auch immer in der IT-Landschaft bewegt benötigt man Zugangsdaten. Vielerorts sind diese noch nicht vereinheitlicht (Stichwort Single-Sign-On, Kerberos etc.) - Administratoren wie Endbenutzer müssen sich eine Vielzahl von Benutzernamen und Passwörtern merken, um der täglichen Arbeit nachzugehen.

Wenn wie bei mir auf der Arbeit hingegen bereits ein von einer anderen Einheit betriebenes LDAP-Verzeichnis besteht, kann man dieses bei der Bewirtschaftung von Web-Applikationen zur Benutzer-Authentifizierung und -Authorisierung hinzuziehen.

In der hier vorliegenden Anleitung erläutere ich, wie Web-Verzeichnis gegen unbefugten Zugriff geschützt werden. Zum Einsatz kommen Debian und Apache 2.2 - ich gehe davon aus, dass beides bereits ordnungsgemäss installiert und konfiguriert wurde.

OpenLDAP & Hilfsprogramme installieren

Als erstes installiert man OpenLDAP sowie die ldap-utils mit einigen nützlichen Hilfsprogrammen:

apt-get install slapd
apt-get install ldap-utils

OpenLDAP lässt man aber unkonfiguriert, denn ein aktiver LDAP-Server befindet sich ja bereits im Netzwerk und versieht seinen Dienst.

Anschliessend passt man die Konfiguration von OpenLDAP an:

$ cat /etc/ldap/ldap.conf
BASE            o=org,c=ch
URI             ldaps://ldap.domain.tld
TLS_CACERTDIR   /etc/ldap/cacerts
TLS_REQCERT     never

SSL-Zertifikate

In unserem Falle reichte es, in /etc/ldap einen Symlink auf /etc/ssl/certs einzurichten. Der LDAP-Server verwendet ein Standard-Zertifikat von CyberTrust, welches bei Debian schon von Beginn weg dabei ist (?).

Bei einer frischen Debian-Installation (4.0r3) existiert dieses Verzeichnis nicht; Zertifikate sind auf dem System standardmässig keine vorhanden. Zuerst gilt es nun also, das Zertifikat des Servers herauszufinden:

openssl s_client -connect ldap.domain.tld:636 -showcerts

Anhand dieser Angaben sucht man über Google nach dem "<anbieter> global root" des Anbieters (bspw. Cybertrust) und gelangt so normalerweise sofort zu den gesuchten Information. In meinem Fall war es:

ct_root.pem

Dieses Zertifikat laden wir uns herunter und legen es im Verzeichnis /etc/ldap/cacerts ab.

Anstelle in der ldap.conf explizit ein Zertifikat anzugeben, überlassen wir es OpenLDAP, das richtige Ding zu eruiren. Das klappt natürlich nur, wenn der Sysadmin des LDAP-Servers nicht selbst ein Zertifikat gebastelt hat.

Testlauf

Um zu überprüfen, ob OpenLDAP korrekt konfiguriert wurde, lässt man eine erste Abfrage laufen:

$ ldapsearch -x "uid=maeby"
# extended LDIF
#
# LDAPv3
# base <> with scope subtree
# filter: uid=maeby
# requesting: ALL
#

# maeby, suborg, org, ch
dn: ...
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
objectClass: ...
objectClass: ...
objectClass: ...
uid: maeby
shadowFlag: 1
description: temporary staff account, imported from domain
homeDirectory: /home/maeby
uidNumber: 0001
gidNumber: 0010
cn: Mario Aeby
loginShell: /bin/bash

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Wenn dies klappt, geht es zum nächsten Schritt:

Apache 2.2 konfigurieren

Als erstes aktiviert man die zwei LDAP-Module:

$ cd /etc/apache2/mods-enabled
ln -s ../mods-available/ldap.load
ln -s ../mods-available/authnz_ldap.load

Es empfiehlt sich, einen LDAP-Cache einzurichten. Im selben Verzeichnis (/etc/apache2/mods-enabled) erstellt man deshalb eine Datei ldap.conf mit folgendem Inhalt:

$ cat /etc/apache2/mods-enabled/ldap.conf
# Enable the LDAP connection pool and shared
# memory cache. Enable the LDAP cache status
# handler. Requires mod_ldap and mod_auth_ldap

LDAPSharedCacheSize 2000000
LDAPCacheEntries 1024
LDAPCacheTTL 28800
LDAPOpCacheEntries 1024
LDAPOpCacheTTL 28800

# specify shared memory file, to activate cache
LDAPSharedCacheFile /var/cache/apache2/ldap.cache

Web-Verzeichnisse schützen

Das Vorgehen ist ähnlich zu einer Authentifikation über eine htpasswd-Datei, abgesehen davon dass man einige andere Befehle einsetzt:

$ cat .htaccess
AuthType Basic
AuthName Test

AuthLDAPURL "ldaps://ldap.domain.tld/o=org,c=ch?uid"
AuthzLDAPAuthoritative on

AuthBasicProvider ldap

Require ldap-user maeby bgates sjobs

Anstelle Benutzer kann man auch Gruppen spezifizieren - oder gar spezielle Filter mitgeben, die erfüllt sein müssen.

Labels: , , ,

0 Kommentare | neuen Kommentar verfassen

Dienstag, November 06, 2007

PHP wirft mime_magic-Fehler

Wenn beim Aufruf von php-cli folgende Fehlermeldungen ausgespuckt werden ...

PHP Warning:  mime_magic: type search/400       \\input         text/x-tex invalid in Unknown on line 0
PHP Warning:  mime_magic: type search/400       \\section       text/x-tex invalid in Unknown on line 0
PHP Warning:  mime_magic: type search/400       \\setlength     text/x-tex invalid in Unknown on line 0
PHP Warning:  mime_magic: type search/400       \\documentstyle text/x-tex invalid in Unknown on line 0
PHP Warning:  mime_magic: type search/400       \\chapter       text/x-tex invalid in Unknown on line 0
PHP Warning:  mime_magic: type search/400       \\documentclass text/x-tex invalid in Unknown on line 0

Quelle: [php-maint] Bug#361789: PHP Warning: mime_magic: type search [..] text/x-tex invalid in Unknown on line 0

... hilft nur noch das Hash-Zeichen in /usr/share/file/magic.mime. Sucht man nach type search, gelangt man innert Bruchteilen zum fraglichen Block. Beim Kommentieren sollte aber auch

#0      regex           [Cc]onstant[[:space:]]+[Ss]tory text/x-inform

nicht vergessen gehen.

Labels: ,

0 Kommentare | neuen Kommentar verfassen

Dienstag, November 06, 2007

Mediawiki mit kurzen und schönen URLs

Mediawiki kann über äusserst hässliche URLs wie http://wiki.domain.tld/index.php?title=Startseite oder aber über kurze und schöne URLs in der Form http://wiki.domain.tld/Startseite angesprochen werden.

Wie? Folgende Kurzanleitung soll mir (und allen anderen Leuten da draussenTM) für zukünftige Installationen als Gedankenstütze dienen:

.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule  ^(.+)  /index.php?title=$1  [L]

LocalSettings.php

$wgArticlePath = "/$1";
$wgUsePathInfo = false;

Übrigens: Wenn ich in solchen Momenten den Code dieses Wiki-Systems näher betrachte, frage mich immer wieder, wie Wikipedia mit einem solchen Murks gross werden konnte.

Welches Wiki überzeugt?

Auf der Arbeit an der Uni verwende ich TWiki (Kurzkritik: Perl *wäh*, simple Dateistruktur, GUI unübersichtlich); auf der Arbeit in der Privatwirtschaft Atlassian Confluence. Dieses gefällt mir von all den Wikis da draussen bisher am meisten. Leider kostet es auch einen saftigen Batzen :-/

Labels: , ,

0 Kommentare | neuen Kommentar verfassen