Konvertierung eines (ur)alten Snitz-Forums zu moderner Software
Puh. Sieht so aus als hätte ich eine ganze Weile nichts mehr geschrieben. Das könnte daran liegen, dass ich Mitte Dezember eine ziemlich coole Webseite übernommen habe, deren Admin den Wartungsaufwand nicht mehr stemmen wollte:
Das Teil war ziemlich umfangreich:
- hunderte von Dateien (HTML, ZIP & Co.)
- mehrere Unterseiten, die in ASP gecodet wurden
- ein Forum mit “Snitz”-Software, die seit 2009 nicht mehr gepflegt wird (ebenfalls ASP)
- eine Forendatenbank für Microsoft Access (.mdb)
Wie zieht man so ein träges, gealtertes Biest reibungsfrei auf eine Linux-Maschine um?
Zuerst einmal wollte ich zumindest die statischen Seiten und die Dateien bekommen. Hier half mir das Tool “WebHTTrack” sehr gut weiter. Damit crawlte ich die Seite durch und konnte so alle ZIP’s, HTMLs und sogar ASP-Seiten ziehen, die nur statischen Content auslieferten.
Das Herzstück der Seite ist jedoch ein Forum mit Beiträgen, die teilweise über eine Dekade alt sind. Dieses bereitete mir am meisten Kopfzerbrechen.
Schritt 1 – Access loswerden
Was soll ich nur mit einer hässlichen .mdb-Datei anfangen? Das Ding muss weg und MariaDB-tauglich gemacht werden. Zuerst versuchte ich ein Linux-Konvertierungstool, mdb-tools. Segmentation fault – das lief ja super.
Versuch 2 lief dann über eine virtuelle XP-Maschine mit Bullzip Access to SQL – und zwar innerhalb weniger Sekunden. Jetzt hatte ich eine Datenbank, mit der ich weitermachen konnte.
Schritt 2 – die Forendatenbank auf phpBB3 migrieren
Das Zielsystem war aufgrund meiner Erfahrung mit vorherigen Projekten klar: Joomla mit der Kunena-Forensoftware (ehemals Joomlaboard und Fireboard).
Eine direkte Konvertierung von Snitz auf Kunena erwies sich allerdings als unmöglich, da kein Tool vorhanden war und auch keine Zeit, um eins zusammenzuklopfen.
Also musste ich den harten und steinigen Weg gehen: Snitz erstmal auf phpBB2 umschwenken. Einen Konverter fand ich hier. Eine tolle Sache – der will allerdings phpBB 2.0.6. Und das wiederum braucht PHP4. Und um das zu bekommen, benötigt man LAMPP 1.6.8a – und das muss man in /opt/lampp installieren, sonst läuft es nicht. (Außerdem sollte man in LAMPP auch sämtliche php.ini-Limits ganz nach oben schrauben, damit die Konvertierung auch anläuft.)
Nach der Einrichtung dieses Softwarehaufens tupfte ich mir erst einmal die Schweißperlen von der Stirn. Denn nun wollte ich den Konverter endlich durchlaufen lassen. Doch das Skript forums.php brach mit dem Fehler ab, dass es nicht alle Zellen in die Datenbank einfügen könne, da dort zu wenige vorhanden seien. Es lief durch, nachdem ich Zeile 54-55 auskommentierte. Tolle Wurst. Aber egal, denn:
Endlich! Ich hatte eine phpBB2-Datenbank!
Es folgte nun die Migration von phpBB2 auf phpBB3. Hier gibt es nichts Großartiges zu berichten – es gibt ein offizielles Migrationstool und das machte seinen Job und fertig. Awesome!
Schritt 3 – ab in Richtung Kunena
Ich war guter Dinge. Trotz all der Hürden hatte ich endlich drei Datenbanken in der Hand! Snitz SQL, phpBB2 und phpBB3 – und all diese Datenbanken waren vollständig. Ein Traum! 🙂
Meine Freude kehrte sich schnell ins Gegenteil um als ich erfuhr, dass es kein offizielles Migrationstool gibt, um direkt auf Kunena zu wechseln. Zu Fireboard-Zeiten wurde so etwas gepflegt, aber es hatte wohl niemand mehr Bock darauf.
Ich fand ein SQL-Skript auf github, welches für einen speziellen Anwendungsfall gebaut wurde. Erwartungsgemäß lief das in meinem Fall natürlich nicht rund, denn es fehlten Spalten in der phpBB3-Datenbank, die eigentlich da sein sollten. So wie es aussieht, werden einige Spalten nicht angelegt, wenn man sein Forum migriert, anstatt es komplett neu anzulegen.
Die fehlenden Spalten waren glücklicherweise in der phpBB2-Datenbank vorhanden, sodass ich mit einem Mix aus Befehlen Daten aus der 2er- und 3er-Datenbank zusammenkopierte und letztendlich meine Kunena-Datenbank in den Händen hielt. Nach mehreren Stunden endlich ein funktionierendes Forum! Großartig.
Schritt 4 – Aufräumen!
Ein Laie würde jetzt sagen: Gut Ronny, haste schön gemacht – nun lass es so.
Leider nicht. 🙁 Die Beiträge waren schweinehässlich. Und hier musste ich Schritt für Schritt noch nachbessern:
- 1. HTML in bbCode umwandeln
Das ging relativ leicht mit einem SQL-Kommando wie diesem hier:
UPDATE kunena_messages_text SET message = REPLACE(message, '
- 2. Zerstückelte bbCodes enthäckseln
Dummerweise dachte sich jemand im phpBB3-Entwicklerteam, es wäre cool, solche bbCodes zu erzeugen:
[img:3gso40ßf]
Sowas parst natürlich keine Forensoftware, weil der Kram völliger Schund ist. Da MariaDB keine Textersetzung mit regulären Ausdrücken beherrscht, musste ich meine SQL-Datenbank exportieren und dann mit sed dieses Zeug wieder rausparsen:
sed -i 's/[img:[^]]{8}]/[img]/g' db.sql
- 3. Alte Links wiederherstellen
Die Seite ist 15 Jahre alt. Klar, dass sich im Laufe dieser Zeit tausende von Backlinks ansammeln. Die sollen auch alle noch funktionieren. Früher sahen die Forenlinks so aus:
http://www.i-war2.com/forum/topic.asp?TOPIC_ID=666
Wer auf diesen Link klickt, wird merken, dass er mittlerweile hierhin führt:
http://www.i-war2.com/forum/general-gameplay/666-act-3-can-i-go-between-clusters
Möglich machen dies einige Weiterleitungsregeln in Apache2:
RewriteCond %{QUERY_STRING} ^TOPIC_ID=([^&]+) [NC] RewriteRule ^forum/topic.asp$ /forum/missions/%1? [NC,L,R=302] RewriteCond %{QUERY_STRING} ^TOPIC_ID=([^&]+) [NC] RewriteRule ^forum/pop_printer_friendly.asp$ /forum/missions/%1? [NC,L,R=302] RewriteCond %{QUERY_STRING} ^TOPIC_ID=([^&]+) [NC] RewriteRule ^index.php$ /forum/missions/%1? [NC,L,R=302] RewriteCond %{QUERY_STRING} ^FORUM_ID=([^&]+) [NC] RewriteRule ^forum/forum.asp$ /forum/%1? [NC,L,R=302] RewriteCond %{QUERY_STRING} ^CAT_ID=([^&]+) [NC] RewriteRule ^forum/default.asp$ /forum/%1? [NC,L,R=302] RedirectMatch 301 /forum/(.*).asp /forum
Weitergeleitet wird hier auf das Forum “missions” mit der Beitrags-ID hintenan, Kunena ändert die URL dann automatisch um. Feierabend!
Und die Moral’ von der Geschicht’: Leute, lasst eure Software nicht vergammeln, Himmelarschundzwirn! 😉
Wow, Gratulation! Ich denke, die meisten hätten kapituliert. Der Patient hat überlebt und einen neuen Körper bekommen – Der Geist (Inhalte) ist jedoch erhalten geblieben. Klasse!