Ich spiele gerade mit WordPress MU, denn ich möchte dieses Blog gern mit dem und dem und dem (da läuft gerad der MU-Test) auf eine gemeinsame Platform setzen, außerdem möchte ich den Wazong-Benutzern ermöglichen, eigene Blogs aufzusetzen.
Damit das funktioniert, müssen natürlich erstmal alle Plugins, die ich hier jetzt im Moment benutze, mit der Multiblogversion zusammenarbeiten (oder ich muss einen Ersatz für sie finden). Zwei Sorgenkinder konnte ich schon ausmachen:
OpenID kann seine Einstellungen nicht speichern, funktioniert sogar möglicherweise garnicht (ohne Einstellungen schwer zu testen).
Ein paar andere Kandidaten funktionieren problemlos. Am Wochenende werde ich mal mit dem vim aufs PHP losgehen, und dann kann ich mehr dazu sagen, eventuell mit Patches für ein paar Problemfälle.
5 Jahre, also mehrere Generationen oder eine halbe Ewigkeit war charon.wazong.de jetzt die Heimat dieser Webseite. Seit vorgestern nun läuft sie auf dem neuen Server; wieder bei Hetzner, wieder ein Rootserver, diesmal ein “EQ4″. Dass das neben mehr Platz (und der Möglichkeit, mehr Dinge auf einmal laufen zu lassen) auch der WordPress-Geschwindigkeit nutzt, das lässt sich sogar messen:
Hier hatte ich schonmal versucht, mit iptables und dem recent-Modul, die lästigen ssh-Scanner vom tatsächlichen sshd fernzuhalten. Leider hat das nie wirklich toll geklappt (die “Angreifer” wurden zwar ausgesperrt, es gelang aber nie, die Sperre automatisch aufzuheben).
Nach zwei bis drei erfolgreichen DoS-Attacken auf unser Firmennetz habe ich mir die Liste der iptables-Module nochmal genauer durchgesehen, ob da nicht was passendes dabei ist — und siehe da; das hashlimit-Modul kann eine Regel auf eine Höchstzahl von Treffern pro Zeiteinheit beschränken. Das liest sich dann so:
#
# keep established connections open
#
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#
# enable ssh:
#
# throttle to 2 (3) connections per minute for outsourcing and internet
iptables -N ssh
iptables -A ssh -m hashlimit --hashlimit 2/minute --hashlimit-burst 3 \
--hashlimit-mode srcip --hashlimit-name ssh --j ACCEPT
iptables -A ssh -j LOG --log-level info --log-prefix "SSH scan blocked: "
iptables -A ssh -j REJECT
iptables -A INPUT -p tcp --destination-port 22 --syn -j ssh
iptables -A FORWARD -p tcp --destination-port 22 --syn -j ssh
Das syn-Paket (also der Verbindungsaufbau) wird höchstens zweimal pro Minute durchgelassen, bestehende Verbindungen sind erlaubt. So funktioniert es.
Ich bin nicht bei vielen Themen paranoid, aber den Verlust einmal angehäufter oder mühsam erzeugter Daten fürchte ich ständig. Dabei tippt man heutzutag ständig irgendwas in andererleute Server ein oder läd etwas auf andererleute Server hoch — fast immer auf kostenlosen Diensten, damit es von Freunden gelesen oder angesehen, weiterbenutzt oder kommentiert werden kann. Was passiert aber, wenn einer der Dienste plötzlich abgeschaltet wird (z.B. Pleite) oder Daten verliert (z.B. Datenbankcrash) oder Dinge löscht?
Außerdem ist all dieser “Content” natürlich im ganzen Netz verstreut und somit schwer wiederzufinden. Dieses Problem lösen zwar Aggregatoren wie lifestream.fm oder friendfeed.com, aber das sind ja schon wieder externe Dienste (s.o.).
Es gibt dazu nur eine Lösung: alles muss hierher. Und weil ich nicht twitter und twitpic und flickr und del.icio.us (und was noch alles) nachbauen möchte (wer außer mir würde das dann auch benutzen?), drum kopiere ich die Daten von dort in Zukunft hierher (bei Tweets und Bookmarks klappt das schon, am Rest wird noch gebaut) und passe die Darstellung an den jeweiligen Inhaltstyp an (Tweets brauchen z.B. keine Überschrift, Fotos sind einfach nur Fotos). Dadurch kann plötzlich auch alles verschlagwortet und kommentiert werden; eine Fundgrube für meine vergangenen Gedanken, eine Hirnerweiterung.
Die übrige optische Gestaltung habe ich nur wenig angepasst: Dunkel auf Hell liest sich leichter, und ich zwinge jetzt alle Leser zu dem Hochformat, mit dem die Seite ursprünglich entworfen ist (Ich weiß, das ist jetzt nicht mehr modern, aber mein Browser hat normalerweise DIN-Hochkant-Format — und zwar seit XMosaic 1.0. Warum machen die anderen Leute ihre Browser so breit? So breite Zeilen kann man doch sowieso nicht lesen). Dazu kommt noch eine deutlichere Trennung zwischen Inhalt und Metadaten, fertig ist das neue Design. Hier nochmal zum Vergleich: links “Wazong 2″ und rechts “Wazong 3″ (erstellt mit dem großartigen Browsershots):
Ein paar noch frühere Designs der Seite — aber leider nicht alle — kann man übrigens hier und hier sehen, und demnächst erzähle ich nochmal mehr über die Technik.
Schon länger angekündigt: hier wird mal wieder umgebaut (und dann auch gleich mal von WordPress 2.3.3 auf WordPress 2.7.1 umgestellt). Bitte nicht wundern, wenn es vorübergehend seltsam aussieht…
Carbon Copy Cloner ist ein überaus hilfreiches Programm. Aber wenn sowas schonmal (nur in der aktuellen Version) einen bekannten Bug hat, dann ist das natürlich völlig klar, dass ich den auf der Stelle treffe und die Klonaktion deshalb zweimal durchführen muss (an dieser Stelle Dank an die nützliche Fähigkeit des MacBooks, via USB von seiner vorherigen Festplatte zu starten, wenn inzwischen eine andere fest im Gerät eingebaut ist).
Vor etwa einem Jahr hatte ich schon einmal einen Quittungston für das Projekt erzeugt. Der ist inzwischen leider nicht mehr im Einsatz, denn er war in der lauten Lagerhalle nie richtig zu hören. Er wurde deshalb später von diesem durchdringenden Ton abgelöst, den ich mit Audacity erzeugt habe:
Jetzt hat sich der Kunde wieder gemeldet und zwei neue zusätzliche Töne gewünscht. Die genaue Funktion (bzw. Bedeutung) zu erklären würde jetzt zu weit führen, aber ich präsentiere:
Ich bastle gerade am Umbau dieses Blogs in eine Art von Lifestream. Das Layout ist auf einem Testserver schon ziemlich weit fortgeschritten, und die twitter-Updates laufen hier im Hintergrund schon rein. Meine Fotos wohnen sowieso hier und für die Bookmarks habe ich in der Testumgebung auch schon was gebastelt.
Dadurch wird es im (Standard-)Feed bald voll werden. Für die Feed-Leser muss das nicht unbedingt schlecht sein, ich befürchte aber, dass manche Leute eher genervt sein werden, wenn sie plötzlich mit meinem kompletten Braindump überschüttet werden. Wer also auch in Zukunft nur die “echten” Artikel haben möchte, der sollte seinen Feedreader von http://wazong.de/blog/feed/ auf http://wazong.de/blog/category/blog/feed/ umstellen. Sagt nicht, ich hätte Euch nicht gewarnt…
Vor einiger Zeit hatte ich viele “Bilderdiebe” hier, die meine Bilder in irgendwelchen Foren und Datingseiten und so Zeug per HTML-Tag direkt einfügten. Eigentlich habe ich genug Übertragungskapazität dafür, aber wenn jemand meine Bilder benutzt, dann möchte ich doch wenigstens genannt werden. Ich wies daher meinen Apache an, Bilder bei fremdem Referrer immer durch dieses Bild (bzw. Vorgänger dieses Bilds) zu ersetzen:
Diese Maßnahme trifft aber neben den beabsichtigen Opfern auch nette Leute, die dieses Blog mit einem Feedreader lesen (insbesondere dann, wenn der Reader Webbasiert ist). Ich habe deshalb immer mal wieder Ausnahmen von der Regel konfiguriert, damit z.B. die Benutzer des Google-Readers (oder Netvibes, oder…) die Bilder in den Artikeln sehen können. Diese Liste kann aber unmöglich jemals vollständig sein (allein schon, weil sich ja jeder unter praktisch jeder Adresse z.B. Gregarius installieren kann), und gerade erst heute wurde ich in einem Kommentar gefragt, ob ich denn Alesti nicht mögen würde (dabei kenne ich Alesti nichtmal!). Schluss damit! Ab jetzt werden die Bilder bei Fremdverlinkung durch eine Version mit einem wazong-Logo-Karomuster als “Wasserzeichen” drauf ersetzt. Das ist ein netter Kompromiss zwischen den beiden Extremen:
Das Bett Aneboda ist schlicht gestaltet und wirkt leicht. Außerdem ist es erheblich weniger ausladend als unser vorheriges Bett und eignet sich daher sehr für das etwas zu klein geratene Schlafzimmer. Leider ist die Konstruktion auch entsprechend filigran:
Die dünnen Metallstangen, die man hier sehen kann, die sollen das Bett rechteckig halten, denn wenn sich die Seitenkante nach außen biegt, dann fällt das Lattenrost von seiner Schiene in das Loch. Leider hält das nur dann, wenn das Bett völlig eben steht (Hallo, Altbauwohnung?), nicht verrückt wird und überhaupt nur von Normpersonen (die mit genau 75kg, die auch immer in den Aufzügen fahren) benutzt wird — von Anwendungsfällen, in denen sich mehr als eine Person an einer Stelle des Betts befindet reden wir garnicht erst. Nach kurzer Zeit waren die “Streben” also verbogen und hielten nicht mehr an ihren Schrauben.
Gut, dass ich quasi einer Nebenlinie einer Tischlerdynastie entstamme, denn aus ein paar Balken, Winkeln und Schrauben kann ich mal wieder schnell eine neue Konstruktion basteln — und die sieht jetzt so aus:
So, ich war die Zweidimensionalität der Taxonomie hier leid; ab jetzt gibt es Kategorien nur noch für die verschiedenen Beitragsarten (Blog, Photoblog, Microblog und Linkdump) — alles andere wird mit Schlagworten (oder Tags) erledigt. Und dann bau’ ich mir noch eine Seite mit der kompletten Schlagwortwolke…
Wir haben letztes Jahr in eine Altbauwohnung (1896) gekauft. Die war ziemlich heruntergekommen, z.B. waren die schönen Holzböden alle mit Teppich — oder mit PVC und dann noch Teppich belegt. Für das Parkett haben wir einen Bodenleger engagiert, der uns allerdings für den Dielenboden im Flur wenig Hoffnung machte: an mehreren Stellen war an den Dielen zur Verlegung von Kabeln und Rohren angesägt und angefräst worden.
Stein & Weidle riet zur Sanierung des Bodens (und hat die dann auch durchgeführt). So schöne Pitch Pine (Pechkiefer)-Dielen seien heutzutage überhaupt nicht mehr aufzutreiben. Die beschädigten Stellen wurden durch Lagerbestände (aus alten Dielen?) ergänzt, der Boden einmal im ganzen abgeschliffen und dann mit Hartöl eingeölt. Die Arbeiten waren nicht ganz billig, aber sie wurden hervorragend und schnell ausgeführt. Man wird zwar immer sehen, daß der Boden repariert worden ist, aber über die Erhaltung des Altbaucharakters bin ich immer wieder froh.
(und damit ist nicht der Zusammenbau nach Anleitung gemeint).
Im Zuge der Bodenbauarbeiten haben wir unser großes Ecksofa Hamra zum zweiten mal (!) in seine zwei Einzelbestandteile geteilt. Daraufhin hatte die Befestigung keine Lust mehr und löste sich auf:
Daß die Belastung-auf-Zug eines in eine Kunststoffmanschette eingedrehten Metallstabs keine besonders gute Idee ist, das ist ja wohl unstrittig. Auch IKEA scheint das aufgefallen zu sein, denn die Befestigung wurde in der laufenden Serie geändert. Und so zeigte sich der Ikeaservice auch (nach einer langen Wartezeit, aber das ist ein anderes Thema) auf meinen Ersatzteilwunsch hin ratlos. Geht nicht, gibt’s nicht mehr, haben wir nicht mehr, können wir nicht mehr besorgen… Man bot mir an, sich nach der Bestellbarkeit des neuen (geänderten) Befestigungsmaterials zu erkundigen, bisher habe ich aber nichts mehr gehört.
Das ist natürlich unbefriedigend, schließlich ist so ein Ledersofa nicht ganz billig. Dann mache ich es eben selbst, wenn auch weniger elegant. Tacker der Stoffbespannung entfernt, Sofateile mit Schraubzwingen an die richtige Stelle gezwungen, drei 8er-Löcher gebohrt, mit Schloßschrauben festgezogen und die Bespannung wieder angetackert:
Ich benutze logcheck. Das warnt mich bei ungewöhnlichen Aktivitäten in den Logs der Server. Leider kommt es dabei häufig vor, daß man die eigentlichen Fehler garnicht finden kann, weil man sich durch endlose Wüsten von fehlgeschlagenen ssh-Logins blättern muß:
Das nervt. Haben die Scriptkiddies nichts besseres zu tun als Shellaccounts mit schlechten Paßwörtern zu suchen? Nach ein wenig herumsichen bin ich aber hier (wenn auch nicht im Artikel sondern in den Kommentaren) auf eine einfache Lösung gestoßen:
iptables -N ssh
iptables -A ssh -m state --state ESTABLISHED -j ACCEPT
iptables -A ssh -m recent --update --seconds 300 --hitcount 5 -j REJECT
iptables -A ssh -m recent --set -j ACCEPT
iptables -A INPUT -p tcp --destination-port 22 -j ssh
iptables -A FORWARD -p tcp --destination-port 22 -j ssh
Jetzt kann jeder Client pro 5 Minuten nur noch 5 ssh-Verbindungen öffnen, was in der Regel reichen sollte (man kann das ja auch noch etwas tunen…), danach wird die Verbindung verweigert. Test:
dentaku@charon:~$ ssh trenger@svn.advanced-solutions.de uname -a
Linux kampenwand 2.6.15 #1 SMP Thu Jun 8 18:38:40 CEST 2006 i686 GNU/Linux
dentaku@charon:~$ ssh trenger@svn.advanced-solutions.de uname -a
Linux kampenwand 2.6.15 #1 SMP Thu Jun 8 18:38:40 CEST 2006 i686 GNU/Linux
dentaku@charon:~$ ssh trenger@svn.advanced-solutions.de uname -a
Linux kampenwand 2.6.15 #1 SMP Thu Jun 8 18:38:40 CEST 2006 i686 GNU/Linux
dentaku@charon:~$ ssh trenger@svn.advanced-solutions.de uname -a
Linux kampenwand 2.6.15 #1 SMP Thu Jun 8 18:38:40 CEST 2006 i686 GNU/Linux
dentaku@charon:~$ ssh trenger@svn.advanced-solutions.de uname -a
Linux kampenwand 2.6.15 #1 SMP Thu Jun 8 18:38:40 CEST 2006 i686 GNU/Linux
dentaku@charon:~$ ssh trenger@svn.advanced-solutions.de uname -a
ssh: connect to host svn.advanced-solutions.de port 22: Connection refused
dentaku@charon:~$
Eins der ungelösten Probleme unseres großen Umbaus ist der renovierte Parkettboden: nach wie vor schabt sich die Wachsschicht permanent ab, so daß im Wohnzimmer, wo der Couchtisch hin- und hergeschoben wird, inzwischen wieder das blanke Holz zum Vorschein kommt. Das hat sich inzwischen auch die Bodenrenovirungsfirma angesehen und will jetzt alles noch einmal abschleifen und neu einölen. Dazu muß allerdings jedes Zimmer mit Parkettboden vorübergehend komplett leergeräumt werden (!).
Um den Aufwand, alle Möbel spazierenzutragen so gering wie möglich zu halten, entschlossen wir uns, all das, was zum Austausch in den nächsten Jahren vorgesehen war, sofort in den Sperrmüll zu geben. In Stuttgart kann man ja zweimal im Jahr kostenlos eine Sperrmüllabholung (von bis zu 5m³) per Postkarte anmelden und bekommt dann einen Termin zugeteilt. Die Wahl fiel auf den 6. Mai — ausgerechnet in der Woche, in der Susanne in Grafing ist. So haben wir also am 1. Mai den großen Schrank im Schlafzimmer schonmal leergeräumt, in Kartons verpackt und zerlegt.
T2 und Annegret sind dann am Vorabend zum Schleppen eingesprungen (Danke!). Lang stand das meiste aber nicht auf der Straße: noch während wir die Dinge heruntertrugen verschwanden das alte Sofa, der Sessel und die Türen des Schlafzimmerschranks wieder. Heute morgen waren nur noch 3 der 4 Eßzimmerstühle da (wer braucht denn bitte einen einzelnen Stuhl?), und vom alten hp-Dual-Itanium-Computer waren nur noch Gehäuseteile da (??!).
Vor Jahren, da lebte ich noch bei meinen Eltern, hatte ich im Keller einen Linux-Server. Das war ein (gebraucht gekaufter) PC mit 486DX2/66-Prozessor und 24MB RAM und VESA-Localbus-Architektur. Da es ein Server war steckte die Grafikkarte trotzdem im ISA-Bus und der VL-Bus war dem SCSI-Hostadapter vorbehalten. Das kleine Ding hatte eine Menge Aufgaben: per ISDN stellte es den Internetzugang (über T-Online) zur Verfügung (das Haus war 10Base2-Verkabelt), diente als HTTP-Cacheproxy (mit Squid 1.1.17) und Fileserver, erledigte den Mail- und Newsverkehr (sendmail 8.8.5), war Anrufbeantworter (vbox) und empfing Faxe (mit einem V.34-Modem). Eine msql-Datenbank mit ein paar cgi-Skripten auf einem Apache (1.1, glaube ich) diente als Liste aller auf Video aufgenommener Filme, außerdem war noch der wegen seiner Lautstärke und des Ozongeruchs in den Keller verbannte Laserdrucker dran angeschlossen…
Einen erheblichen Teil dieser Aufgaben haben heutzutage dieser gemietete Rootserver hier und ein DSL/VoIP/WLAN-Router übernommen, die Fileserver-Aufgabe übernahm aber bisher immer mein Arbeitsplatzrechner so nebenbei. Der blieb deshalb meistens angeschaltet und brauchte viel Strom. Doch damit ist jetzt Schluß:
Dieses kleine Kästchen (ganz links) ist eigentlich eine NAS-”Appliance” (also ein Einzweckcomputer mit Betriebssystem im Flashspeicher), die sich “Network Storage Link for USB2.0″ (kurz: NSLU2) nennt, und die genau das tut, was der Name sagt. Das Eingebettete Betriebssystem ist aber Linux-basiert und die Architektur offiziel unterstützt, und deshalb kann man stattdessen einfach eine normale Linux-Distribution aufspielen, dann hat man einen kleinen Server mit 266MHz IXP-422-Pozessor und 32MiB RAM (also besser als der alte spartacus). Man nehme also (z.B.) Debian für ARM-Prozessoren und ab da wird’s interessant:
spartacus:~# uname -a
Linux spartacus 2.6.18-6-ixp4xx #1 Tue Feb 12 00:57:53 UTC 2008 armv5tel GNU/Linux
spartacus:~#
Im Moment laufen schon DHCP- und DNS-Server sowie NFS-Fileserver (mit der großen USB-Platte, die danebensteht — der dritte Kasten ist ein Lautsprecher und hat nichts damit zu tun) drauf. Mal sehen, was der kleine noch alles kann.
Bei Dackworld habe ich mal versprochen, am folgenden Beispiel vorzuführen, wie einfach man mit etwas PHP/CSS ein vorhandenes WordPress-Theme an seine Bedürfnisse anpassen kann. Das hat jetzt etwas gedauert, aber heute drehen wir ein WordPress-Theme um 90° (mit anderen Worten: wir machen aus der Seitenleiste einen Fußleiste).
Ganz wichtig ist dabei zuerst, daß man sich die Lizenz ansieht, zu der der ursprüngliche Autor die Nutzung seines Themes zuläßt. GPL und CC-Lizenzen ohneND-Klausel sollten die sichere Seite sein. Wir nehmen als Beispiel das Standard-Theme der WordPress-DE-Edition. Das basiert auf Kubrick, und mindestens die Hälfte aller anderen Themes (die man so runterladen kann) tun das auch. Was wir hier machen läßt sich auf diese daher leicht übertragen. Als “Opfer” habe ich unter www.steinhobelgruen.de/wordpress/ eine zweite WordPress-Installation, in der ich neue Themes und Plugins immer zuerst ausprobiere.
Als nächste Voraussetzung empfehle ich das Firebug-Plugin für Firefox, mit dem man (neben anderen Dingen) sehr komfortabel sehen kann, welchem Abschnitt des HTML-Dokuments ein auf dem Bildschirm dargestelltes Element entspricht.
Dann sehen wir uns mal die Dateien in einem Theme an, damit wir das Element auch zur Bearbeitung wiederfinden:
In der WordPress-Dokumentation gibt’s eine gute Übersicht über die “Template Hierarchy“. Dort steht genau, welche dieser Dateien in welchem Fall geladen und abgearbeitet wird. Für unsere Aufgabe interessant sind davon nur die folgenden beiden Aspekte:
Dort, wo in den einzelnen Seitentemplates (index.php, single.php,…) das Template Tag get_sidebar(); steht, da wird die Datei sidebar.php eingefügt (in Wirklichkeit passieren noch ein paar andere Sachen, aber so genau reicht uns das erstmal).
Alle Formatanweisungen befinden sich in der Datei style.css (rtl.css ist ein Sonderfall für Sprachen, die von rechts nach links geschrieben werden).
Gut, dann machen wir jetzt noch einen letzten Test: wir sehen uns die Seite mal ohne CSS-StyleSheet an (in Firefox kann man das im Menü “Ansicht”->”Webseiten-Stil”->”Kein Stil” ausschalten):
Aha, von der Ausgabereihenfolge her kommt die Sidebar also ohnehin nach den Artikeln. Das ist gut. Ein Blick in Firebug und schnell ist herausgefunden, daß die komplette Sidebar in einem <div id=”sidebar”/> liegt, das nur durch CSS rechts vom Rest positioniert ist:
Dieses div-Element steht deshalb rechts am Rand, weil der eigentlich Seiteninhalt in einem <div id=”content” class=”narrowcolumn” /> links “schwebt” (wer jetzt nicht weiß was das bedeutet, der kann hier oder da ein wenig über CSS lernen):