All articles

Asus WL500g Premium, DD-WRT, Linux - Teil 2

mkdir /jffs/etc
mkdir /jffs/etc/config
cd /jffs/etc/config

cat usb.startup

chmod +x usb.startup

wget http://www.wlan-sat.com/boleo/optware/optware-install-ddwrt.sh -O - | tr -d '\r' > /tmp/optware-install.sh
cd /tmp
sh ./optware-install.sh

Asus WL500g Premium, DD-WRT, Linux - Teil 1

Bereits einige Zeit liegt bei mir ein Asus WL500g Premium (oder WL500gP), der eigentlich nur darauf wartet, seine Aufgabe zu übernehmen. Jetzt habe ich mir dann mal vorgenommen, das originale Firmware-Image "kaputt" zu machen, damit ich mich endlich mal mit dem Kistchen genauer beschäftigen muss ;-)

Schritt 1: DD-WRT einspielen
Nach einigem hin und her habe ich für meinen Router-Liebling DD-WRT entschieden. Nachdem ein Kollege auf dem selben Modell einfach ein Debian installiert hat, wäre das wohl die zweite Alternative. Allerdings wollte ich schon länger etwas ausprobieren, was sich OptWare nennt. Das Prinzip ist einfach: Software für das NSLU2 von Linksys compiliert, aber so, dass es unterhalb von /opt liegt. Und angeblich soll das auch mit DD-WRT funktionieren.

Man findet im Netz mehr oder minder haarsträubende Beschreibungen, was man alles tun muss, um auf das weiße Kästchen initial ein DD-WRT draufzubekommen. Aber es geht auch einfach:

    * Download der aktuellen Software von [der Downloadseite von DD-WRT](http://www.dd-wrt.com/dd-wrtv3/dd-wrt/downloads.html). Ich hab als erstes ein [Mini-Image (v24sp1)](http://www.dd-wrt.com/dd-wrtv2/downloads/v24-sp1/Consumer/Asus/WL500g-Premium/dd-wrt.v24_mini_generic.bin) draufgeflasht, bei anderen Routern wird das empfohlen und bei manchen hat es anders auch nicht funktioniert

Wenn man aber schon auf der Seite ist, kann man sich auch gleich noch das Standard-Image (v24sp1) oder sogar das Mega-Image (v24-sp1) herunterladen. Ich nutze aktuell das Mega-Image, da ist alles (fast) drin, was ich brauche und noch mehr (siehe auch den Vergleich der verschiedenen Images)

    * `aptitude install tftp` installiert die notwendige Software zum Flashen


    * Network-Manager und ähnliche Dinge auf dem Rechner ausschalten. Die automatische Konfiguration spuckt immer wieder dazwischen, deswegen macht man das von Hand:

root@linux:/tmp> ifconfig eth0 192.168.1.23/24 dev eth0 up
root@linux:/tmp> ifconfig eth0 192.168.1.23/24 dev eth0 up # Zur Sicherheit nochmal...
root@linux:/tmp> tftp 192.168.1.1
tftp> verbose
tftp> trace
tftp> binary
tftp> put dd-wrt.v24_mini_generic.bin # noch NICHT ENTER drücken!

    * Strom aus dem Asus ziehen, mit einem Stift den Reset-Taster (das ist der versenkte, NICHT der der raussteht!) gedrückt HALTEN(!) und Strom wieder anstecken.

Nach ca. 10 Sekunden hat bei mir die Power-LED geblinkt. In div. Mailings liest man allerdings, dass es auch mal 20 oder 30 Sekunden dauern kann (oder nur 5...)

    * Jetzt im tftp-Client Return drücken, man sollte sehen, wie viele Pakete Richtung Asus geschickt werden.

Wenn er fertig ist, Ruhe bewahren... lasst den Router zur Sicherheit einfach 2-3 Minuten stehen.
Dann allerdings sollte ein ping 192.168.1.1 zeigen, dass der Router wieder erreichbar ist.

    * Mit einem Web-Browser geht man dann auf das Web-Interface http://192.168.1.1, ändert das Passwort und... Willkommen bei DD-WRT ;-)


    * Unter "Administration" -> "Firmware Upgrade" kann man nun bequem das oben heruntergeladenen Standard- oder Mega-Image einspielen>br />

Da der Asus ja etwas mehr Flash besitzt, kann man diesen unter "Administration" -> "Management" -> "JFFS2" mit "JFFS2: Enable" und "Clean JFFS2: Enable" (einmalig!) mit anschließendem Reboot benutzbar machen.

    * Da ich eine 2,5"-USB-HD an das Gerät packen möchte, habe ich auch noch unter "Services" -> "Services" die Einstellungen für "Core USB support", "USB2.0 support", "USB storage support" und "ext2/ext3 FS support" eingeschalten. Das geht Out-of-the-Box nur mit dem Mega-Image, sonst muss [man selbst Hand anlegen.](http://www.dd-wrt.com/wiki/index.php/USB#USB_drivers)

Update!
Nachdem ich es selbst nicht beachtet habe und beinahe einen Router gebrickt hätte, nochmal der Hinweis: Nach dem Flashen lasst den Router ein paar Minuten einfach in Ruhe stehen! NICHT Strom abziehen oder ähnliches! Warten!

Verzeichnisse nur über SSL erreichbar machen - und das benutzerfreundlich!

Die Anforderung:
Ein Verzeichnis auf einem Apache-Webserver (genauer das Admin-Frontend von Django) sollte nur via SSL erreichbar sein. Wenn jemand via HTTP auf (schützenswerte) Unterverzeichnisse zugreift, dann soll er "passend" umgleitet werden. Letztendlich kommt noch dazu, dass dieser Location-Container mit vielen anderen Einstellungen per Include-Anweisung in 2 virtuelle Hosts (HTTP und HTTPS) geladen wird. Für einige ist es OK, dass sie sowohl per HTTP als auch HTTPS ausgeliefert werden, für andere eben nicht. Da neben Django noch mehrere Tools auf diesem Web-Server laufen, gibt's dafür einen extra Location-Container:


SetHandler python-program
PythonHandler django.core.handlers.modpython
PythonPath "['/PFAD/ZUM/PROJECT/'] + sys.path"
PythonAutoReload On
SetEnv DJANGO_SETTINGS_MODULE PROJEKT.settings

Lösung 1:
Im Modul mod_ssl gibt es die Direktive SSLRequireSSL On, mit der man sicherstellen kann, dass es eben nur via SSL ausgeliefert wird.
Nachteil: Kommt ein Benutzer via HTTP bekommt er nur "Du kummst hier net rein!". Effektiv, aber nicht wirklich schön.


SetHandler python-program
PythonHandler django.core.handlers.modpython
PythonPath "['/PFAD/ZUM/PROJECT/'] + sys.path"
PythonAutoReload On
SetEnv DJANGO_SETTINGS_MODULE PROJEKT.settings

SSLRequireSSL On

Lösung 2:
Mit Hilfe von mod_rewrite bzw. dessen Direktiven RewriteCond und RewriteRule wird getestet, ob die Anfrage per HTTP kam und wenn ja an die selbe URL nur mit HTTPS weitergeleitet:


SetHandler python-program
PythonHandler django.core.handlers.modpython
PythonPath "['/PFAD/ZUM/PROJECT/'] + sys.path"
PythonAutoReload On
SetEnv DJANGO_SETTINGS_MODULE PROJEKT.settings

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}/%{REQUEST_URI}

Et voilà! ;-)

Seitdem ich bei dieser Firma bin...

"... habe ich auch schon mitbekommen, dass Du in Bezug auf Nahrung ein schwarzes Loch bist"

Danke, Herr Kollege ;-)

Links ohne Ende...

... gibt's ja bei der LUSC im Chat - meistens auch von einer Person. Allerdings muss ich mal ausnahmsweise sagen, dass ich das Filmchen (gut in dem Fall geht's wirklich mehr um den Ton) gleich mehrfach hintereinander hab laufen lassen.

Fluch der Karibik - auf der Gitarre

PS: Nein, ich werde jetzt nicht anfangen, jeden Link hier zu veroeffentlichen ;-)

Extend host search in Nagios navigation frame

Just a small patch to add

Step by Step:

* Download my small patch file ["Nagios_Nav_Autocomplete.diff" (from source, no custom paths)](/static/Nagios_Nav_Autocomplete.diff) or ["Nagios_Nav_Autocomplete.Debian.diff" (for Debian packages)](/static/Nagios_Nav_Autocomplete.Debian.diff)

* `cd` to `/usr/local/nagios/share/` for self compiled Nagios or `/usr/share/nagios3/htdocs/` (Debian)

* If `patch --dry-run </path/to/download/Nagios_Nav_Autocomplete.diff` gives you no error try without "`\--dry-run`"

* If PNP is **not** in `/nagios/pnp/` (URL!) change `side.html`'s paths to PNP in lines 24, 25 and 212.

* Reload left frame of Nagios

* Enter at least 3 characters

* Be happy ;-)

If it doesn't work:

* Check if you **reloaded** the left frame and your browser knows the patched `side.html`

* Make sure there are no 404 (file not found) errors in your Apache logfiles (correct paths to PNP)

Shortcuts in Firefox einrichten

Auf Nachfrage ein kleines Mini-HowTo:

Ein paar Bilder, wie man Shortcuts mit Firefox einrichtet gibt's unter http://velt.de/gallery/v/Diverses/Screenshots/Firefox_Shortcuts/[

Eine ausfuehrliche Beschreibung folgt noch... hust ;)

check_netappfiler.py - Nagios-Plugin for FAS systems by NetApp

Some people asked me at NETWAYS Nagios Konferenz if my check_netappfiler plugin is dead.

No, it's not!

With ONTAP 7.3 NetApp added support for SNMP v2c and v3! W00t!

Get the plugin (and some minimal documenation - you have been warned! ;) on http://people.teamix.net/~svelt/check_netappfiler/!

And PLEASE send me feedback (yes, "it's wonderful!" IS feedback ;) if you're using it!

Wie man an ein Au-pair-Mädchen kommt...

Man nehme:

* Ein Hochzeits"geschenk" oder -verpflichtung, wie man will ;)

* Zwei Frauen, die telefonieren - eine kann leider nicht am "Geschenk" teilnehmen

* Etwas Zeit, damit sich Ideen entwickeln können

Was kommt raus?

* Die Wohnungsplanung muss komplett über den Haufen geworfen werden

* Die Familienplanung ebenso

* Ein Au-Pair, welches gerne nächstes Jahr anfangen würde

* Zwei lachende Personen auf einem Sofa in Schwabach

* ... und eine (ganz süße ;) Lachende leider viel zu weit weg

Du weißt nicht, wovon ich rede? Na, ich werde es beim Essen erzählen! "Welches Essen?" - Tja, leider verloren ;)

Rsync mit restricted SSH-Keys

Rsync wird ja gerne im Zusammenspiel mit SSH verwendet, um Daten zu syncen bzw. Backups zu machen. Mehr als nur "häufig" habe ich dabei bisher gesehen, dass dies mit SSH-Keys ohne Passphrase eingerichtet wurde. Soweit nichts schlimmes dabei. Wenn dann allerdings die SSH-Verbindung auf "root" geht und der Key nicht in seiner Funktionalität eingeschränkt wird, wird's unschön. Deswegen hier eine kleine (undokumentierte) Step-by-Step-Anleitung zum Einrichten von Rsync-über-SSH mit kastriertem Key.


0. Ausschalten des SSH-Agents
MASTER:

svelt@MASTER:~ % unset SSH_AGENT_PID
svelt@MASTER:~ % unset SSH_AUTH_SOCK

1. Erzeugen des neuen Keys
MASTER:

svelt@MASTER:~ % ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/svelt/.ssh/id_rsa): /home/svelt/.ssh/rsync_rsa
Enter passphrase (empty for no passphrase): ENTER
Enter same passphrase again: ENTER
Your identification has been saved in /home/svelt/.ssh/rsync_rsa.
Your public key has been saved in /home/svelt/.ssh/rsync_rsa.pub.
The key fingerprint is:
49:25:af:f7:16:a4:eb:b7:5b:66:07:37:7c:85:0c:84 svelt@MASTER

2. Kopieren des Keys auf den Server
MASTER:

svelt@MASTER:~ % ssh-copy-id -i .ssh/rsync_rsa svelt@BACKUP.DOMAIN.de
0
Password: PASSWORT
Now try logging into the machine, with "ssh 'svelt@BACKUP.DOMAIN.de'", and check in:

.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

3. Initialer rsync mit dem Key
MASTER:

svelt@MASTER:~ % rsync -avv -e 'ssh -i /home/svelt/.ssh/rsync_rsa' Doku svelt@BACKUP.DOMAIN.de:tmp/
opening connection using ssh -i /home/svelt/.ssh/rsync_rsa -l svelt BACKUP.DOMAIN.de rsync --server -vvlogDtpr . tmp/
building file list ...
16 files to consider
delta-transmission enabled
Doku/
[...]
total: matches=0 hash_hits=0 false_alarms=0 data=1977241

sent 1978440 bytes received 324 bytes 1319176.00 bytes/sec
total size is 1977241 speedup is 1.00

4. Setzen des "command" in der authorized_keys
BACKUP:

svelt@BACKUP:~ % cat .ssh/authorized_keys
ssh-rsa AAAA...T7XQ== svelt@MASTER

svelt@BACKUP:~ % vi .ssh/authorized_keys

4a. Aus obigem rsync-Aufruf ableiten

Vorher: % rsync -avv -e 'ssh -i /home/svelt/.ssh/rsync_rsa' Doku svelt@BACKUP.DOMAIN.de:tmp/
Nachher: % rsync -a -e 'ssh -i /home/svelt/.ssh/rsync_rsa' Doku svelt@BACKUP.DOMAIN.de:tmp/

4b. Genau wissen wollen
BACKUP:

svelt@BACKUP:~ % cat .ssh/authorized_keys
command="set | grep SSH >/tmp/XXX" ssh-rsa AAAA...T7XQ== svelt@MASTER

MASTER:

svelt@MASTER:~ % rsync -a --delete -e 'ssh -i /home/svelt/.ssh/rsync_rsa' Doku svelt@BACKUP.DOMAIN.de:tmp/
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(453) [sender=2.6.9]

BACKUP:

svelt@BACKUP:~ % cat /tmp/XXX
BASH_EXECUTION_STRING='set | grep SSH >/tmp/XXX'
SSH_CLIENT='194.150.191.251 35877 22'
SSH_CONNECTION='194.150.191.251 35877 194.150.191.2 22'
SSH_ORIGINAL_COMMAND='rsync --server -logDtpr --delete . tmp/'

=> siehe SSH_ORIGINAL_COMMAND

5. authorized_keys setzen
BACKUP:

svelt@BACKUP:~ % cat .ssh/authorized_keys
command="rsync --server -logDtpr --delete . tmp/" ssh-rsa AAAA...T7XQ== svelt@MASTER

6. Testen
MASTER:

svelt@MASTER:~ % rsync -a --delete -e 'ssh -i /home/svelt/.ssh/rsync_rsa' Doku svelt@BACKUP.DOMAIN.de:tmp/
svelt@MASTER:~ % echo $?
0

MASTER:

svelt@MASTER:~ % touch Doku/FIXME
svelt@MASTER:~ % rsync -avv --delete -e 'ssh -i /home/svelt/.ssh/rsync_rsa' Doku svelt@BACKUP.DOMAIN.de:tmp/
opening connection using ssh -i /home/svelt/.ssh/rsync_rsa -l svelt BACKUP.DOMAIN.de rsync --server -vvlogDtpr --delete . tmp/
building file list ...
done
Doku/
Doku/FIXME
total: matches=0 hash_hits=0 false_alarms=0 data=0

sent 439 bytes received 48 bytes 324.67 bytes/sec
total size is 1977241 speedup is 4060.04

Again and Again: Fixing SuSE 10.3

Die QA bei SuSE hat mal wieder versagt - und ich wundere mich, warum ich Courier-IMAP mit SSL (und den POP3-SSL) nicht ans laufen bekomme.

Könnte man Scripten, die man einbindet (automatisches Erzeugen von Zertifikaten, wenn noch keines existiert) nicht einfach mal testen? Angefangen von den Pfaden zu openssl, über den Pfade zu den PEM-Files kann da eigentlich gar nix klappen.

Anbei ein kleines Shell-Snippet, welches per sed die entscheidenden Stellen wieder geradezieht.

16:9 not ready for the audience...

(updated )
by Sven Velt

In Zeiten der EM ist es ja Mode, dass jede öffentlich zugängliche Spaßeinrichtung (Kneipe, Restaurant, ...) einen Flat-Screen an der Wand hat. Dieses ist normalerweise in 16:9 gehalten, was ja auch mehr Spaß bereiten kann.

Allerdings kommt in mir langsam die Frage auf, ob

1. die Technik noch nicht so weit ist, oder

2. die Anwender noch nicht so weit sind

Wieso? Weil praktisch überall ein Bild gezeigt wird, welches oben und unten schwarze Balken hat (so wie man es von 16:9-Filmen auf einem 4:3-TV gewohnt ist), aber dann in die Breite gezogen ist. Ergebnis: Die Fußballer sehen aus, wie kleine Playmobil-Männchen: Einen Meter fuffzich hoch, einen Meter breit. brr Bin ich der eigentlich der Einzige, dem das auffällt? Ich würde mich ziemlich aufregen: Ein TV der Größe kostet ja auch ein bisschen was und dann werden gefühlte 25% des Schirms nicht genutzt.

Technisch gibt's eigentlich nur zwei Erklärungen dafür:

1. Die TV-Hersteller haben immer noch nicht gelernt, wie man 16:9 sauber darstellt bzw. umschaltet

2. Die Einstellung, welche man tätigen muss, ist zu kompliziert

Beides ist eigentlich mehr als affig und sollte heutzutage von einem Flat-Screen mit knapp einem Meter Diagonale "einfach funktionieren".

(M)Eine Konfigurationsdateien für Mutt

Ich wurde ja schon häufiger darauf angesprochen, wie ich denn eigentlich meine Mails lese bzw. wie ich mutt konfiguriert habe.

Allgemein vorausgeschickt sei, dass alle Dateien bei mir im Homeverzeichnis unter ~/.mutt/ liegen. Dazu gibt es dort ein _var-Verzeichnis, um dort Dateien abzulegen, die ich nicht im VCS haben will.

Als erstes die allgemein Config, die auch gelesen wird, wenn ich mutt mal anders (z.B. um mit mutt -f archiv.mbox ein MBox-File zu lesen) aufrufe:
Download muttrc

ignore * unignore from: subject to cc message-id mail-followup-to date user-agent x- newsgroup

alternates -group GRUPPE1 REGEXP-FUER@ABSENDER.1DE

subscribe -group LISTE LISTE@ADRES.SE

source "~/.mutt/alias"

set alias_file="~/.mutt/alias"
set autoedit=no
set attribution="%n wrote:"
set charset="locale | grep -qi utf-8 && echo utf-8 || echo iso-8859-15"
set certificate_file="~/.mutt/_var/certificates"
set edit_headers=yes
set editor="vim +/^$"
set envelope_from=yes
set fast_reply=yes
set header=yes
set header_cache="~/.mutt/_var/headercache/"
set honor_followup_to=yes
set include=yes
set index_format="%4C|%Z|%2N|%[%y%m%d-%H%M]|%-20.20L|%?l?%4l&%4c?|%s"
set maildir_mtime=yes
set mark_old=no
set mask=""
set move=no
set pager_context=1
set pager_index_lines=9
set postpone=ask-no
set postponed="~/.mutt/_var/postponed"
set print_command="/usr/bin/xpp"
set realname="ECHTER NAME"
set rfc2047_parameters=yes
set save_history=100
set history_file="~/.mutt/_var/history"
set signature="~/.signature"
set sort=date
set sort=reverse-score
set use_8bitmime
set use_from=yes

my_hdr X-Operating-System: uname -a|sed "s/\#/\\\#/"

score ~F 10
score ~O 20
score ~N 50

color header brightgreen default ^From:
color header brightcyan default ^To:
color header brightcyan default ^Reply-To:
color header brightcyan default ^Cc:
color header brightwhite default ^Subject:
color header brightred default ^Delivered-To:
color header brightyellow default ^Newsgroups:

color index brightyellow default ~N
color index yellow default ~O
color index magenta default ~D
color index brightwhite magenta ~F
color index black white ~T

folder-hook . set sort=threads

folder-hook "INBOX|Unsure" set sort=date
folder-hook "INBOX|Unsure" set sort=reverse-score

macro compose 1 "ECHTER NAME \n"
macro compose 2 "ECHTER NAME \n"

vim: ft=muttrc

Für IMAP(S)-Server allgemein habe ich auch eine Config angelegt, da ich auf mehr als nur einen IMAP(S)-Server zugreife:
Download common.imap

set folder_format="%2C|%t%5N|%f%> |%d"
set imap_check_subscribed=yes
set imap_idle=yes
set imap_keepalive=30
set imap_list_subscribed=yes
set maildir_mtime=no
set record="=INBOX.Sent/"

vim: ft=muttrc

Natürlich will man sich nicht alle E-Mail-Adressen merken, deswegen gibts alias

alias kurzname Vornamen Nachname

Und last but not least die Config-Datei, mit der ich mutt normalerweise aufrufe ( mutt -F ~/.mutt/server1 bzw. ein alias in der Shell darauf). Wie schon gesagt, da ich auf mehrere Mail-/IMAPS-Server zugreife, gibt's diese Datei unter mehreren Namen bei mir.
Download server1

source "~/.mutt/muttrc"
source "~/.mutt/common.imap"

set folder="imaps://USERNAME@IMAPS.SERVER/"
set from="ABSENDER1@ADRES.SE"
set record="=INBOX.Sent/"
set signature="~/.signature"
set smtp_url="smtps://USERNAME@IMAPS.SERVER/"
set spoolfile="=INBOX.IN"

set pgp_sign_as="GPG_ID_HERE"

send-hook . 'set from="ABSENDER2@ADRES.SE"'
reply-hook .
'set from="ABSENDER2@ADRES.SE"'

send-hook '~C LISTE@DOMAIN.DD' 'set from="ABSENDER3@ADRES.SE"'
reply-hook '~C LISTE@DOMAIN.DD' 'set from="ABSENDER3@ADRES.SE"'

vim: ft=muttrc

Mongolisches Barbecue, Chinesisch und bisschen Sushi in Schwabach

Ich hab mal wieder einen kleinen Tip, wo man gut Essen gehen kann:

Zum Goldenen Drachen

Friedls Schnitzel...

(updated )
by Sven Velt

Weil ich schon mehrfach gefragt wurde:

* Der Bericht über das [Weltrekord-Schnitzel](http://youtube.com/watch?v=G-5IsZLKoz4)

* Die Adresse:

3 Linden
Bahnhofstr. 13
90537 Feucht
Tel.: 09128 - 15959

« 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 »