Admin-Loop in Joomla-Installationen

Joomla CMS

Joomla CMS

Relativ oft hat man nach einer Installation vom Open-Source CMS Joomla! das Problem, dass man nach Anmeldung im Backend immer wieder auf die Login-Seite zurückfällt. Ich möchte kurz die meisten Fehlerfälle aus meiner Sicht darlegen, quasi als Checkliste:

1. tmp-Verzeichnis
Möglicherweise ist das tmp-Verzeichnis, in dem die Sessions gespeichert werden, nicht beschreibbar. Der Webserver muss schreibend auf das temporäre Verzeichnis zugreifen können.

2. configuration-php
Befinden sich am Anfang der Datei configuration.php ein Zeichen, das da nicht hingehört? Dieses Zeichen (BOM – Byte Order Mark) ist vermutlich nur mit einem Hex-Editor sichtbar. Es muss sichergestellt werden, dass die Datei in UTF-8 nach der spitzen Klammer noch Leerzeichen oder -zeilen? Wenn ja, diese löschen.
Eine weitere Möglichkeit sin unzulässige Zeichen am Ende der Datei. Das letzte Zeichen in der Datei muß zwingend die spitze Klammer „>“ sein.

3. cache-Verzeichnis
Ist der Cache-Pfad in der configuration.php falsch gesetzt? Der Cache-Pfad muss korrekt gesetzt und ebenfalls wieder vom Webserver beschreibbar sein.

4. application.php
In der Datei /joomla-installation/libraries/joomla/application/application.php die folgende Zeile auskommentieren:

$session->fork();

Dies kann die Ursache bei bestimmten PHP-Versionen sein, kommt auch recht häufig vor, dass dies die Lösung darstellt.

SSH-Verbindungen mit RSA Keys ohne Passwort-Eingabe

Wer kennt es nicht und wen nervt es nicht: ständige SSH-Verbindungen auf diverse Server und immer wieder wird man bei jedem Login nach dem Passwort gefragt, welches man als pflichtbewusster Server-Admin natürlich möglichst kompliziert gewählt hat. Aber durch die RSA-Authentifizierung gibt es die Möglichkeit, die Passwortabfrage zu umgehen, aber dennoch eine verschlüsselte und sichere Verbindung zu haben. Für dieses Verfahren geht man wie folgt vor:

1. Generieren des Private-Key
Einfach ein Terminal-Fenster öffnen und den RSA-Token generieren mit diesem Befehl:

ssh-keygen -P yourpassword

Der Private-Key, kann übrigens natürlich auch ohne Passwort-Schutz generiert werden, für den Fall, dass Sie nicht zu der Kategorie sicherheitsbegeisterter Leute gehören. Unter OS X und unter Ubuntu liegt das eben erzeugte Key-Paar nun im Verzeichnis /Users/username/.ssh/ bereit.





2. Hinterlegen des Public-Key auf dem Server
Nun muss der Public-Key auf dem Server, mit dem Sie sich in Zukunft passwort-los einloggen möchten hinterlegt werden. Am besten kopiert man den Public-Key direkt per SCP auf den Server in die Datei /Users/username/.ssh/authorized_keys. Also ungefähr folgendermaßen:

cd /Users/username/.ssh/
scp id_rsa.pub root@domain.com:/root/.ssh/authorized_keys

Beim nächsten Login auf dem Server von diesem Rechner aus wird dann der RSA-Key erkannt und man wird nach dem für den RSA-Key gesetzten Passwort gefragt – oder auch nicht, falls man keines gesetzt hat. Unter OS X kann man das Passwort auch im Schlüsselbund speichern, dann wird man künftig direkt auf dem Server eingeloggt.

Unter Windows kann man die Software Putty benutzen, um einen entsprechendes Public-/Private-Key-Paar zu erzeugen. Aber die haben Sie ja eh installiert, wenn Sie sich unter Windows öfters per SSH mit Servern verbinden. Putty bringt einen Key-Generator mit, die Bedienung ist selbsterklärend.

Hier noch die Optionen für ssh-keygen:

ssh-keygen [-q] [-b bits] -t type [-N new_passphrase] [-C comment] [-f output_keyfile]
ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
ssh-keygen -i [-f input_keyfile]
ssh-keygen -e [-f input_keyfile]
ssh-keygen -y [-f input_keyfile]
ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]
ssh-keygen -l [-f input_keyfile]
ssh-keygen -B [-f input_keyfile]
ssh-keygen -D reader
ssh-keygen -F hostname [-f known_hosts_file] [-l]
ssh-keygen -H [-f known_hosts_file]
ssh-keygen -R hostname [-f known_hosts_file]
ssh-keygen -U reader [-f input_keyfile]
ssh-keygen -r hostname [-f input_keyfile] [-g]
ssh-keygen -G output_file [-v] [-b bits] [-M memory] [-S start_point]
ssh-keygen -T output_file -f input_file [-v] [-a num_trials] [-W generator]

Firebug Reference Error: console is not defined

Firebug

Firebug

Kleiner Hinweis aus aktuellem Anlass, weil es heute bei mir auftrat nach dem letzten Firefox-Update auf 3.6.11: Schwierigkeiten bei der Verwendung von console.log mit der Fehlermeldung:

ReferenceError: console is not defined

können damit behoben werden, indem man vorher direkt window.loadFirebugConsole() aufruft.

Snippet:

window.loadFirebugConsole();
console.log('log me do');

quick tutorial: more memory for tomcat/railo-server

Here’s a short howto for upping tomcat/railo-server’s memory:

The secret’s in tomcat’s JAVA_OPTS variable (java runtime options), which is defined in the catalina-startup-script.
You should be able to find this catalina.sh named script in /<tomcat-install-dir>/bin/catalina.sh
Have a look at the file and grep for JAVA_OPTS, you’ll find the following line:

JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"

Now you can add some startup-parameters like this:

JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms128m -Xmx512m"

Look for more detailed information at this wiki-section at apache.org

Hier geht es zur deutschen Version dieser Anleitung.

Tutorial: Tomcat und Railo 3.1 mehr Speicher zuweisen

Fix gemacht, hier eine kleine Anleitung, wie man Railo/Tomcat mehr Speicher spendiert:

Das Geheimnis liegt in der JAVA_OPTS Variable (Java runtime options) vom Tomcat-Server. Diese wird in definiert im Catalina Startup-Script, das man normalerweise unter dem Pfad /<Tomcat-Installationsverzeichnis>/bin/catalina.sh finden können sollte. Sucht man in der Datei nun nach JAVA_OPTS, findet man schnell die richtige Stelle:

JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"

Diese Zeile kann jetzt durch Start-Parameter erweitert werden:

JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms128m -Xmx512m"

Für alle Interessierten gibt’s hier bei apache.org noch detaillierte Informationen.

Here’s the english version of this post.

mySql HowTo: Verwendung von IF-Statements

mySql

 

Durch die Verwendung der IF()-Funktion in mySQL kann man sich oftmals weitere unnötige Abfragen sparen. In diesem kleinen HowTow möchte ich dies kurz an ein paar einfachen Beispielen zeigen, auch in Verwendung mit weiteren Funktionen, hier im konkreten Fall mit SUM(). Ich denke, das reicht aus, um das Prinzip leicht zu verstehen.

Generelle Syntax von IF():
SELECT IF (2 > 1, 'das ist wahr', 'das ist falsch')

Die Funkion hat also 3 Parameter. Der erste ist die Bedingung, der zweite der Wert, der zurückgegeben wird, wenn die Bedingung wahr ist und der dritte der Wert, der zurückgegeben wird, wenn die Bedingung falsch ist.
In obigem Beispiel ist die Bedingung ist wahr, deshalb wir also der erste Wert ausgegeben.

Beispiel 2:
SELECT IF (2 = 1, 'das ist wahr', 'das ist falsch')

Die Bedingung ist nun falsch, deshalb wir der zweite Wert ausgegeben.

Beispiel 3:
Wenn wir uns nun vorstellen, dass wir eine Tabelle haben, in der Kunden erfasst sind, die deren Stammdaten auch das Land, in dem sie wohnen, erfasst ist, dann wäre eine sinnvolle Abfrage, wieviel Kunden aus Deutschland bzw. wieviele Kunden aus dem Ausland kommen. Das könnten wir mit einem Count in 2 Abfragen mit where-Bedingung leicht herausfinden, es geht aber auch eleganter in einem Rutsch. Das sähe dann ungefähr so aus:

SELECT SUM(IF(country = 'Deutschland',1,0)) as kunden_deutsch,
SELECT SUM(IF(country != 'Deutschland',1,0)) as kunden_international
FROM customers

Beispiel 4:
Wir haben eine Tabelle mit Produkten aus verschiedenen Kategorien, auch der Preis ist hinterlegt in den Produktdaten.
Es gibt bei uns eine magische Grenze von 20 Euro, alles was über dieser Grenze liegt, wird von unseren Kunden als teuer eingestuft, alles was darunter liegt, wirkt auf unsere Kunden preiswert.
Es wäre schön, wenn wir nun schnell rausfinden könnten, wieviele preiswerte und wieviele teure Produkte es gibt. Diese Information möchten wir natürlich auch pro Kategorie visualisieren.

SELECT category
SUM(IF(price <= 20,1,0)) as preiswert,
SUM(IF(price > 20,1,0)) as teuer
FROM products
GROUP BY category

Das Ergebnis gibt die Summe der preiswerten und teuren Produkte gruppiert nach Kategorie aus.

Google URL-Shortener Service goo.gl

Google hat nun den eigenen URL-Shortener-Service http://goo.gl/ öffentlich gemacht und die dazugehörige Website gelauncht.
Ist man mit seinem Google-Account angemeldet, dann hat man auch Zugriff  auf Historie und Klick-Statistiken der angelegten Kurz-URLs.
Was auch cool ist: durch Anhängen der Endung „.qr“ an eine gekürzte URL erhält man automatisch einen QR-Code, den man schick zum Aufrufen von Web-Adressen mit Mobilgeräten verwenden kann, die eine Kamera (und die entsprechende Software) an Bord haben.
Der Dienst ist laut Matt Cutts schnell, stabil, sicher und verhält sich hinsichtlich 301/permanent-Redirects vorbildhaft.