Das Problem

Wir alle kennen das doch in Second Life: man hat inzwischen Speicherplatz ohne Ende, aber aus verschiedenen Gründen kann man nach wie vor den Cache (also Zwischenspeicher) des Viewers maximal auf 1 GB einstellen und danach ist Feierabend. Dieser Speicher ist dabei auch schneller voll, als einem lieb ist und da viele von uns häufig den Cache auch bei diversen Problemen löschen, wird sein ohnehin schon geringer Nutzen nur noch mehr geschmälert, ohnehin funktioniert er auch sonst nicht besonders gut. Gerade bei den heutigen Speichermonstern sollte es ohne Problem möglich sein, z.B. 10-20 GB an Speicherplatz für Texturen einzustellen, bisher geben das alle Viewer aber nicht her.

Die Idee

Im Internet sind Proxy-Caches ein alter Hut, eine ausgereifte Technik und kostenlos verfügbar. Ein Proxy-Cache – wir benutzen hier dabei die Software Squid 2.7 – ist nichts anderes als ein zwischen dem eigenen Rechner und Internet dazwischen geschaltetes Programm, das anstelle des Viewers die Texturen herunterlädt und lokale Kopien in einer geeigneten Struktur auf der Festplatte anlegt. Ist erst einmal eine Textur lokal auf der Festplatte gespeichert, dann wird sie direkt von der Festplatte gelesen und nicht mehr erst mühselig aus dem Internet geladen.

Früher war dies übrigens schlecht möglich, seitdem aber Linden Lab als Standardtransportprotokoll für Texturen das altbekannte HTTP, mit dem auch jede Webseite arbeitet, eingeführt hat ist dies recht einfach machbar.

Die Lösung

Die aktuellen Phoenix-Viewer erlauben die direkte Angabe eines Proxy-Caches. Wer also Phoenix ohnehin nutzt, der kann dies recht einfach aktivieren, hier in dem Beispiel beschreibe ich die Installation unter Windows ab XP.

Ein Problem bei der Sache ist, dass Linden Lab für den Aufruf derselben Textur in der URL auch den Simnamen vorkommen hat. Man muss also den Squid dazu bringen, dass er für jede Textur intern dieselbe URL (Adresse) speichert, damit es auch wirklich gut funktioniert. Dafür bedarf es eines Features namens storeurl_rewrite, das nur in Squid bis Version 2.7 verfügbar ist. In aktuelleren Versionen mit einer 3 davor ist es nicht vorhanden und daher sind diese für diesen Zweck unbrauchbar.Perl

Als erstes muss, damit die Geschichte funktioniert, auf dem Rechner als Programmiersprache Perl installiert werden. Keine Angst, das geht ganz einfach, man gehe zu dieser Downloadseite bei Activestate und lade sich das Paket runter und installiere es. Die Version ist dabei recht herzlich egal, aber es spricht nichts gegen die 5.12. Perl befindet sich standardmäßig nach erfolgter Installation in C:\PERL, wer den Pfad eigenhändig abändert muss es entsprechend auch hier in der Anleitung abändern.

Squid 2.7

Die eigentliche Software, Squid 2.7, kann als kostenloser Download hier bei Acme Consulting runtergeladen werden. Wichtig dabei ist wirklich, dass es eine 2.7er-Version ist, sonst funktioniert der Rest nicht.

Nach erfolgtem Download entpacke man den Inhalt des Archivs an einen geeigneten Ort, hier nehme ich der Einfachheit halber C:\SQUID.

Damit sind alle benötigten Programme neben Phoenix installiert und jetzt geht es ans Eingemachte, die Konfiguration.

Die Konfiguration von Squid

Als erstes sollte man im Verzeichnis C:\SQUID\ETC bei allen Dateien die Endung .default streichen, so dass nur noch .conf übrig bleibt. Als nächstes benutzt man einen beliebigen Texteditor, um das von Squid benötigte Hilfsprogramm in Perl anzulegen. Wer keinen Editor haben sollte, der sollte sich einfach Notepad++ herunter laden und damit arbeiten, fertig.

Man öffne also seinen Editor, kopiere einfach folgendes Programm direkt ohne die Zeilennummern hinein und speichere es an geeigneten Ort, meinetwegen C:\SQUID\BIN\STORE_URL_REWRITE.PL .

[code]
#!/usr/bin/perl

$| = 1;

while (<>) {
chomp;
if (m/sim(.*?)\.agni\.lindenlab\.com(.*?)\/cap\/(.*?)\/\?texture_id=(.*) /) {
print "http://agni.lindenlab.com/texture/" . $4 . "\n";
} else {
print $_ . "\n";
}
}

[/code]

Als nächstes öffne man im Editor die Datei squid.conf, um die notwendigen Änderungen einzutragen, als da wären:

Man suche zuerst die Zeilen, die folgendermassen aussehen:

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

Diese Zeilen müssen durch Eingabe eines # auskommentiert werden und danach so aussehen:

#http_access deny !Safe_ports
#http_access deny CONNECT !SSL_ports

Diese Änderung sorgt dafür, dass unser Squid überhaupt gewillt ist, mit den Server von Linden Lab zu sprechen. Als nächstes füge man an beliebiger Stelle diese Zeile an, damit einmal im Cache gespeicherte Texturen auch für einen ordentlichen Zeitraum in diesem verbleiben, die Zahlenangabe ist dabei in Minuten und entspricht dabei etwa einem halben Jahr:

refresh_pattern /cap/          259200  20%     302400

Danach sind noch einige, weitere Eintragungen nötig, als da wären:

# 8 GB cache size, kann nach Belieben abgaendert werden
cache_dir aufs c:/squid/cache 8192 4 64

# disable range requests due to LL fail. No Last Modify header.
range_offset_limit -1

# this is a local cache, prevent possible error
visible_hostname MyBigCache

# this is the magic, convert the URL into something more static.
storeurl_rewrite_program c:/perl/bin/perl.exe c:/squid/bin/store_url_rewrite.pl
# increase the children to handle the default Phoenix Viewer client of 32 http texture fetches in the queue.
storeurl_rewrite_children 32

# what domains to apply the store url rewrite too.
acl store_rewrite_list dstdomain .agni.lindenlab.com
storeurl_access allow store_rewrite_list
storeurl_access deny all

Dies richtet einen Cache ein, der insgesamt 8 GB an Texturen fasst, wobei es im Verzeichnis C:\SQUID\CACHE dann vier Oberverzeichnisse mit jeweils 64 Unterverzeichnissen geben wird. Damit ist die Konfiguration von Squid abgeschlossen und man kann nun die Installation initialisieren.

Initialisierung der Speicherverzeichnisse

Einmalig muss man am Besten als Administrator folgendes auf der Eingabeaufforderung laufen lassen:

C:\SQUID\SBIN\SQUID -z

Damit wird Squid angewiesen, die Verzeichnisse zum Speichern samt Verwaltungsdateien einzurichten. Ein erfolgreicher Aufruf sollte dabei in etwa wie folgt aussehen:

2011/02/14 20:13:20| Creating Swap Directories

Mehr darf dabei nicht erscheinen, wenn irgendwo „Terminated“ auftauchen sollte, dann ist dies fehlgeschlagen.

Einrichtung von Squid als Windows-Dienst

Windows bietet die Möglichkeit, bestimmte Programme wie Squid bei Bedarf im Hintergrund automatisch zu starten, man bezeichnet das auch als Dienste (zu finden in der Systemsteuerung unter Verwaltung und dann Dienste).

Der Bequemlichkeit halber melden wir als Administrator gleich Squid als einen solchen Dienst durch die Eingabe von

C:\SQUID\SBIN\SQUID.EXE -i

an. Dieser Dienst heißt dann schlicht „Squid“ und ist in dem Dienste-Fenster fortan zu finden.

Konfiguration vom Phoenix Viewer

Mit Squid und dessen Konfiguration sind wir nun fertig, jetzt muss noch dem Phoenix-Viewer beigebracht werden, dass er in Zukunft zum Laden von Texturen aus SL den Squid benutzen soll.

Zuerst startet man den Phoenix-Viewer und begibt sich dort in die Einstellungen. Im Tab „Web“ muss man einen Haken bei „Web-Proxy aktivieren“ reinsetzen und als Adresse „localhost“ eingeben. Die Portnummer sollte dabei 3128 betragen. Man klickt auf OK und schließt damit das Fenster

Danach öffnet man die Einstellungen nochmals und geht ins Tab „Netzwerk & Verzeichnisse.“ Dort markiert man bei „Proxy Typ“ unten den nun verfügbaren Eintrag „Web“, klickt ebenfalls auf OK und ist damit dann auch schon fertig, das ist alles.

Zum Test beendet man den Phoenix-Viewer und startet ihn neu. Wenn man nun das gewohnte Phoenix-Logo sieht, dann ist das ein gutes Zeichen, das alles funktioniert hat und der Proxy wie man es will seinen Dienst verrichten wird.

Und nun?

Wer nun mag, der kann im Phoenix-Viewer seine Cachegröße verringern, die Mehrzahl der Texturen wird ohnehin im Squid-Cache lokal vorrätig gehalten werden. Man sollte noch ein Auge auf den Ordner C:\SQUID\VAR\LOGS werden, in dem Squid seine Logdateien pflegt, diese wachsen mit der Zeit an und diese ab und an löschen. Das ist alles.

Wer den Squid-Cache selber löschen will, der sollte zuerst den Dienst stoppen und kann dann einfach den Ordner in den Papierkorb werden und diesen Leeren. Man darf nur danach die Eingabe von C:\SQUID\SBIN\SQUID.EXE -z zur Neuinitlialisierung der Verzeichnisstruktur nicht vergessen.

Fragen, Lob, Kritik, Anregungen?

Bitte in den Kommentaren, danke.

3 Gedanke zu “Anleitung: wie man den Phoenix Viewer mit dem Squid-Cache betreibt”
  1. Hallo,
    hab das mal probiert und 1000 x wieder runter und wieder rauf,
    Windows (bei mir Win7 64 Bit) schaltet den Diest sofort mit nachstehender Meldung ab „kein Programm für diesen Dienst gefunden“.
    So nun Kopfkratzen und auf den Bildschirm starren.
    — Was könnte falsch gelaufen sein, wär für ne Antwort dankbar —

    Danke

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert