Version: Magento 1.4.X

Problem
Bei dem Versuch eine Bildateien auf den Server zu laden wird die Datei nicht hochgeladen, der Benutzer vom Magento Shopsystem abgemeldet und zum Admin Login weitergeleitet.

Ursache
Magento ist auf einem Server installiert auf dem ebenso der PHP Suhosin Patch installiert ist. Die Session wird vom PHP Suhosin Patch anhand der Browserkennung des Benutzers verschlüsselt. Der Login in das Magento Shopsystem erfolgt mit der Browserkennung des Webbrowsers. Die Anfragen zum Datei Upload erfolgen über das Flash Plugin des Browsers, welches eine eigene Browserkennung besitzt. Während des Upload Prozesses kann der Server die Session des Benutzers nicht entschlüsseln und meldet den Benutzer dadurch vom Shopsystem ab.

Lösung
Des Fehlers Lösung ist das deaktivieren der Option suhosin.session.cryptua in der PHP Suhosin Konfiguration.

php.ini

suhosin.session.cryptua = Off

.htaccess

suhosin.session.cryptua 	Off

Jede Lösungmöglichkeit stellt eine alleinstehend funktionierende Option da.

Andere Artikel zur Datei Upload Problematik helfen dir sicher ebenso weiter.

Keine Kommentare »
 

Das Provider oder Hoster Logo wird in Froxlor unter images/header.gif (/var/www/froxlor/images/header.gif für ehemalige Hetzner SysCP User) zusammen mit einem Stück Header grafik aufbewahrt. Durch ersetzen dieses Bildes kann man sehr leicht sein eigenes Firmenlogo integrieren. Noch eine blanko Vorlage für euch.

Froxlor Logo Header blanko
(wird auf Klick, in neuem Tab, in Originalgröße dargestellt)

Keine Kommentare »
 

Ich möchte vorweg darauf hinweisen, das es bei mir bei dem Update heute nacht um 3 Uhr etwas turbulent zur Sache ging. Keine der Anleitungen die ich online gefunden hatte hatten ihr Froxlor Installationen nach dem Upgrade von SysCP überprüft. Keine dieser Anleitungen verlief Fehlerlos bzw. ohne Folgefehler durch Konfigurationsfehler. Der Server sollte natürlich bis morgens wieder für Hosting Kunden nutzbar funktionieren. Ich hoffe dieser Ärger bleibt euch mit diesem Tutorial erspart.

Vorwort

  • Es wird eine funktionsfähige Hetzner SysCP Image Installtion benötigt (SysCP Root: /var/syscp/web/)
  • Der gesamte Installationsvorgang findet über eine SSH Verbindung auf dem Server statt
  • Allgemein gilt in diesem Tutorial immer durch die entsprechenden Werte zu ersetzen

Update Vorbereitungen

  • SysCP sichern
    Zunächst sollten alle Daten von SysCP gesichert werden. Ebenso machen wir ein Backup von /etc/ da wir hier im zuge des Upgrades auch Änderungen vornehmen werden. Wir nutzen für das SysCP Datenbank Backup die Option “–add-drop-table” um ein löschen der alten Inhalte vor dem einspielen der neuen auszulösen. Diese Option benötigen wir da wir im zuge des Updates den veränderten SysCP SQL Dump in diese selbe Datenbank wieder einspielen. Eure MySQL Zugangsdaten findet ihr in der SysCP Konfiguration (/var/syscp/lib/userdata.inc.php /).

    EMP-S:~# cp -rp /etc/ /root/etc_bak/
    EMP-S:~# cd /var/syscp/web/
    EMP-S:/var/syscp/web/# cp -rp * ../../syscp_bak/
    EMP-S:/var/syscp/web/# mysqldump --databases --opt -Q -u -p --add-drop-table syscp > ../../syscp_bak/db.sql
  • sources.list erweitern

    Die Datei /etc/apt/sources.list um erweitern um:

    deb      http://debian.froxlor.org lenny main
    deb-src  http://debian.froxlor.org lenny main

    Kommando zum öffnen der Datei (erspart Tipparbeit):

    EMP-S:~# nano /etc/apt/sources.list
  • SysCP Cronjobs deaktivieren
    Durch auskommentieren der Konfiguration deaktivieren wir die SysCP Cronjobs.
    Kommando zum öffnen der Datei:

    EMP-S:~# nano /etc/cron.d/syscp

    Dateinhalt nach der Bearbeitung:

    #
    # Set PATH, otherwise restart-scripts won't find start-stop-daemon
    #
    # PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    #
    # Regular cron jobs for the syscp package
    #
    #00 */1 * * *   root    /usr/bin/php5 -q /var/syscp/web/scripts/cron_tasks.php
    #0 0 * * *      root    /usr/bin/php5 -q /var/syscp/web/scripts/cron_traffic.php
    #30 0 * * *     root    /usr/bin/php5 -q /var/syscp/web/scripts/cron_ticketarchive.php
    #0 1 * * *      root    /usr/bin/php5 -q /var/syscp/web/scripts/cron_used_tickets_reset.php
    #00 */1 * * *   root    /usr/bin/php5 -q /var/syscp/web/scripts/cron_autoresponder.php
    #00 */1 * * *   root    /usr/bin/php5 -q /var/syscp/web/scripts/cron_apsinstaller.php
    #*/15 * * * *   root    /usr/bin/php5 -q /var/syscp/web/scripts/cron_apsupdater.php
  • SQL Dump für Froxlor aufbereiten
    Hierbei ersetzen wir den Pfad /var/syscp/web/ mit /var/www/froxlor/ und den Pfad /var/syscp/ mit /var/www/ in einer Kopie unseren SysCP SQL Dumps.

    EMP-S:~# cd /var/sycp_bak/
    EMP-S:/var/sycp_bak/# cp db.sql db_new.sql
    EMP-S:/var/sycp_bak/# sed -i 's//var/syscp/web///var/www/froxlor//g' db_new.sql
    EMP-S:/var/sycp_bak/# sed -i 's//var/syscp///var/www//g' db_new.sql

Froxlor Installieren

  • Froxlor Installation über APT Paketmanagement System
    EMP-S:~# apt-get update
    EMP-S:~# apt-get install froxlor
  • Besitzer und Gruppe des Froxlor Verzeichnisses anpassen
    EMP-S:~# chown -R www-data:www-data /var/www/froxlor/
  • Alte SysCP Konfiguration in Froxlor nutzen
    EMP-S:~# cp /var/syscp_bak/lib/userdata.inc.php /var/www/froxlor/lib/
  • Bearbeitete Kopie der SysCP Datenbank für Froxlor einspielen
    EMP-S:~# mysql -u -p
    mysql> use syscp  
    mysql> source /var/syscp_bak/db_new.sql
  • Symlinks für phpMyAdmin und Squirrelmail erstellen
    EMP-S:~# ln -s /usr/share/phpmyadmin/ /var/www/phpmyadmin
    EMP-S:~# ln -s /usr/share/squirrelmail/ /var/www/squirrelmail
  • Verzeichnisse kopieren
    Wichtig ist hierbei Rechte und Benutzer beizubehalten. Die User Unterverzeichnise in fcgi/ logs/, tmp/ und webs/ sollten den entsprechenden fcgi Benutzer (Kunden) gehören. Das Verzeichnis mails/ dem Benuter vmail. Das bewirkt die Option -p beim Kopieren mit cp.

    EMP-S:~# cp -rp /var/syscp/fcgi/ /var/www/
    EMP-S:~# cp -rp /var/syscp/logs/ /var/www/
    EMP-S:~# cp -rp /var/syscp/mails/ /var/www/
    EMP-S:~# cp -rp /var/syscp/tmp/ /var/www/
    EMP-S:~# cp -rp /var/syscp/webs/ /var/www/
  • Apache Konfiguration für Froxlor anpassen
    Hierbei muss der Pfad /var/syscp/web/ in /var/www/froxlor geändert werden. Der Ordnung halber ist es empfehlenswert die Konfigurationsdatei entsprechend umzubenennen und den Symbolischen Link auf die Konfiguration zu ändern.

    EMP-S:~# sed -i 's//var/syscp/web///var/www/froxlor//g' /etc/apache2/sites-available/syscp
    EMP-S:~# mv /etc/apache2/sites-available/syscp /etc/apache2/sites-available/froxlor
    EMP-S:~# rm /etc/apache2/sites-enabled/00-syscp
    EMP-S:~# ln -s /etc/apache2/sites-available/froxlor /etc/apache2/sites-enabled/froxlor
  • Suexec Pfade für Froxlor anpassen
    In der Datei /etc/apache2/suexec/www-data den Pfad /var/syscp/ in /var/www/ ändern.

    EMP-S:~# sed -i 's//var/syscp///var/www//g' /etc/apache2/suexec/www-data
  • Postfix Konfiguration für Froxlor anpassen
    Konfigurations Option virtual_mailbox_base in /etc/postfix/main.cf von /var/syscp/mails/ in /var/www/mails/ ändern.

    EMP-S:~# sed -i 's//var/syscp/mails///var/www/mails//g' /etc/postfix/main.cf
  • Squirrelmail Konfiguration für Froxlor anpassen
    Die Pfade /var/syscp/squirrelmail/data/ und /var/syscp/squirrelmail/attach/ müssen in der Datei auf /var/www/squirrelmail/*/ angepasst werden.

    EMP-S:~# sed -i 's//var/syscp///var/www//g' /etc/squirrelmail/config.php

    Anmerkung
    In dieser Datei können Providername, Logo und dergleichen für Squirrelmail angepasst werden. Nutzt die Gelegenheit sonst macht ihr das nie.

  • Froxlor Cronjob erstellen
    Wir erstellen die Datei /etc/cron.d/froxlor

    EMP-S:~# nano /etc/cron.d/froxlor

    und füllen sie mit den Werten für die Froxlor Cronjobs:

    #
    # Set PATH, otherwise restart-scripts won't find start-stop-daemon
    #
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    #
    # Regular cron jobs for the froxlor package
    #
    */1 * * * *     root    /usr/bin/php5 -q /var/www/froxlor/scripts/froxlor_master_cronjob.php
  • Apache und Postfix neu starten

    EMP-S:~# /etc/init.d/apache2 restart
    EMP-S:~# /etc/init.d/postfix restart

Froxlor Konfiguration

Froxlor ist nun unter Eurer IP:Euerm Port (Standard 81) erreichbar.

  • Installationsassistent
    Den neuen Prozess Spawn Manager habe ich auch nicht aktiviert. Ich warte erstmal ein paar Erfahrungsberichte ab.
  • Fehlerquelle: php.ini Settings
    Die Zeile

    open_basedir = "{OPEN_BASEDIR}"

    sollte in den php.ini Konfigurationen durch

    {OPEN_BASEDIR_C}open_basedir = "{OPEN_BASEDIR}"

    ersetzt werden. Ansonsten könnte es zu Fehlern in PHP Applikationen kommen. Im Falle Magento bekommt man die Ausgabe “No input file specified”.

SysCP entfernen

Prüft nochmals alle Funktionen bevor ihr euer SysCP vom Server entfernt.

  • SysCP löschen
    Das “immutable” Attribut von den fcgi Scripts entfernen (chattr -i) und den SysCP Ordner vom Dateisystem löschen.

    EMP-S:~# chattr -i -R /var/syscp/fcgi/
    EMP-S:~# rm -r /var/syscp/

    Vergesst die Backups nicht. /root/etc_bak/ und /var/syscp_bak/. Aufheben oder löschen. Wie es euch lieb ist.

  • Jagd nach Überlebenden
    Wer lustig ist kann nun noch nach überbleibseln von SysCP auf dem Server suchen und diese beseitigen. Den Datenbankname könnte man noch von syscp auf froxlor ändern. Ebenso den Unix Benutzer syscp. Weitere Überbleibsel findet man auch mit dem Kommando:

    grep -r syscp *

Froxlor ist nun via Debian APT Paketmangement Software updatebar installiert und konfiguriert. Ich hoffe bei euch läuft das mit Hilfe der Anleitung weniger turbulent und stressig. Abweichung und weitere Tipps sind erwünscht. Möchte jemand das Tutorial zu einem Update Script zusammenfassen? 😛

10 Kommentare »
 

Version: Magento 1.4.X

In Magento 1.4.1.0, 1.4.1.1 und 1.4.2 erhält man beim Aufruf von der “an einen Freund senden”-Funktion die Fehlermeldung “The messages cannot be sent more than 5 times in an hour”. Da Version 1.4.2 die letzte 1.4 Version von Magento ist und viele Leute diese Version länger benutzen werden veröffentliche ich dieses kleine Bugfix hier im Blog.

In der Datei Mage/Sendfriend/controllers/ProductController.php muss zirka in Zeile 122 die Zeichenfolge:

 if ($model->getMaxSendsToFriend()) {

mit der Zeichenfolge:

if ($model->isExceedLimit()) {

ersetzt werden. Das Sendfriend Formular sollte nun funktionieren wie gewünscht.

Da es sich hierbei um eine Korrektur eines bekannten Fehlers handelt, welcher nach einem Update auch korrigiert ist, empfehle ich die Anpassung der Datei (Mage/Sendfriend/controllers/ProductController.php) direkt und nicht die Erstellung eines Modules.

Keine Kommentare »
 

Quellen von welchen man xt:Commerce herunterladen konnte waren schon immer rar. xt:Commerce ist Open Source und wurde dennoch fast nur an zahlende Kunde verteilt. Eine ärgerliche Geschäftspraktik der Entwickler Firma. Unter dem Namen xt:Commerce Veyton wird der kostenpflichtige Nachfolger vertrieben. Die Entwicklung von xt:Commerce 3 steht still und die wenigen xt:Commerce Download Mirros versiegen. Damit das Shopsystem nicht “vergessen” wird habe ich eine Download Möglichkeit eingerichtet.

xt:Commerce v3.0.4SP2.1
Release Datum: 20.08.2006
Letzter Bugfix: 16.02.2011

Download xt:Commerce

(Zip Archiv, alle Patches enthalten, neuste Version)

Changelog von 3.0.4 SP2 nach 3.0.4 SP2.1:

BUGFIX: eregi (nullbyte injection) SQL injection
BUGFIX: #none fixed cookie bug in some IE Versions
BUGFIX: #0000201 wrong attribute price when multiple currencies are installed
BUGFIX: #0000209 products_description in listing
BUGFIX: #0000169 added navigation bar to reviews.php
BUGFIX: #0000135 added check for min password length in admin/customers.php
BUGFIX: #0000210 changed navbar for account_history.php
BUGFIX: #0000207 added cursor:pointer to print info and print order link
BUGFIX: #0000192 added firstname/lastname variable for send_order.php
BUGFIX: #none	 removed buy now buttons when customers status is set to view price = no
BUGFIX: #0000206 bug in shopping cart (when removing products), in several php Versions
BUGFIX: #none	 bug in captcha creation, on several servers, captcha in newsletter.php could be passed without an entry
3 Kommentare »
 

Hierbei handelt es sich um ein sehr exotisches Shell Script, das ich verwedet hatte um ein “vergewaltigtes” Magento Theme zu säubern. Der beauftrage Freie Mitarbeiter hatte in einer Kopie des Magento base Theme gearbeitet. Natürlich hat er alle Dateien kopiert und das base Theme in default verschoben. Nachdem ich herausgefunden hatte um welches Theme es sich handelte wollte ich noch die Dateien entfernen die das Theme vom base Theme erbt. Ich habe dieses Script verwendet, das Dateien in gleichen Verzeichnisstrukturen abgleicht und gegebenfalls (beim Enthalten sein in beiden Strukturen, in selber Position) entfernt.

#! /bin/sh
 
## Input checks
if [ ! -n "$1" ] || [ ! -n "$2" ]; then
	echo "#
# diff_file_struct.sh - Reduce a file struct from a base file struct via MD5 sums (files and empty folders only)
# Usage: diff_file_struct.sh <BASE_STRUCT> <STRUCT_TO_REDUCE>
# "
	exit 1
fi
 
if [ ! -e "$1" ]; then	
	echo "# Parameter 1: Dir doesn't exist"
	exit 1
fi
 
if [ ! -e "$2" ]; then	
	echo "# Parameter 2: Dir doesn't exist"
	exit 1
fi
 
## List files recursiv
BASEFILES=$(find "$1" -type f)
REDUCEFILES=$(find "$2" -type f)
 
## Loop for each file in draft
for BASEFILE in $BASEFILES; do
 
	## Get MD5 hash
	TMP=$(md5sum "$BASEFILE")
	BASE_MD5=${TMP% *}
 
	## Get relative dir
	BASE_PATH_RELATIVE=${BASEFILE:${#1}}
 
	echo $BASE_PATH_RELATIVE
 
	## Loop for each file in new file struct
	for REDUCEFILE in $REDUCEFILES; do
 
			## Get relative dir
			REDUCE_PATH_RELATIVE=${REDUCEFILE:${#2}}			
 
			## Check if relative paths are equal
			if [ $BASE_PATH_RELATIVE == $REDUCE_PATH_RELATIVE ]; then
 
				echo "PATH MATCH"
 
				## Get MD5 hash
				TMP=$(md5sum "$REDUCEFILE")
				REDUCE_MD5=${TMP% *}
 
				## Check if MD5 hashs are equal
				if [ $BASE_MD5 == $REDUCE_MD5 ]; then
 
					echo "MD5 MATCH"
 
					## Remove equal file
					rm -v $REDUCEFILE
				fi			
			fi
	done
	echo "---"
done
 
echo "REMOVE EMTPY DIRS"
find "$2" -type d -empty -delete -print

Die Dateien mit dem Kommando “find” zu suchen und listen ist ein suboptimales Vorgehen. Strukturiertes vorgehen, in dem Ordner für Ordner abgeglichen wird, ist wesentlich performanter. Bedeutet aber ebenso mehr Arbeitsaufwand, der für ein Script dieser Verwendungsart nicht vorgesehen ist. Ich hoffe zwar nicht jemand steht vor dem selben Problem “ein Magento Vererbungschaos zu säubern”, jedoch denke ich das Script findet sicher die eine oder andere Anwendungsmöglichkeit oder gibt einen Denkanstoß.

Keine Kommentare »