[Howto] XDove QPKG: Update auf XMail 1.27 per Cross-Compiler

  • [NAS Typ:]Serie X10/X12/x19 (Marvell CPU)
    [QPKG:]Installiertes XDove 1.3 (mit XMail 1.25)


    Motivation:
    Um das Problem der auf ca. 24 MB beschränkten Mail-Größe loszuwerden (s. http://forum.qnapclub.de/viewt…1&t=11245&start=20#p90433 ),
    kann man ein Update auf XMail 1.27 machen und über die Environment-Variable XMAIL_TEMP ein anderes, größeres temporäres Verzeichnis nutzen.
    Auch gab es einige Verbesserungen (s. XMail Change log).
    Hier wird beschrieben, wie man das per Cross-Compiler macht. (Alternativ kann man auch direkt auf dem NAS kompilieren, aber das ist hier nicht Thema.)
    Der Cross-Compiler hat den Vorteil, dass man sich das System auf dem NAS nicht so schnell durch Fehler verbauen kann. Im Zweifelsfall ist er mit wenigen Mausklicks neu aufgesetzt. Das eigentliche Kompilieren geht außerdem schneller.


    Voraussetzungen sind Grundkenntnisse über folgendes:
    - Kopieren von Dateien zwischen dem NAS und dem eigenen PC
    - Editieren von Text-Dateien auf dem NAS
    - Pfad zum XDove Paket muss bekannt sein, z.B. /share/MD0_DATA/.qpkg/XDove
    - Linux Grundwissen, Befehle wie cp, ls sollte man kennen


    Benötigte Dateien:
    - openssl-0.9.8r.tar.gz oder aktueller, aber keine 1.0.x Version, s. http://www.openssl.org/source/
    - Quellcode von XMail, s. http://www.xmailserver.org/xmail-1.27.tar.gz
    - Den CodeSourcery Cross-Compiler und die virtuelle Umgebung dazu


    Die Installation des Cross-Compilers ist ausführlich beschrieben in der Anleitung
    http://forum.qnapclub.de/viewtopic.php?f=80&t=11807


    Wir müssen nur die Punkte 1. und 2. durchführen, da wir keinen Kernel kompilieren.
    Ich habe konkret folgendes Paket verwendet:
    http://www.codesourcery.com/pu…rm-none-linux-gnueabi.bin


    Um zügig arbeiten zu können, öffnet man am besten eine PuTTY/SSH Verbindung zur virtuellen Maschine des Cross-Compilers (im folgenden mit SSH-CC bezeichnet), eine weitere PuTTY/SSH Verbindung zum NAS (mit SSH-NAS bezeichnet), sowie je eine Samba (oder FTP) Verbindung zur virtuellen Maschine und zum NAS zwecks Dateiaustausch. Wenn man PuTTY verwendet, kann man die auszuführenden Befehle von hier einfach kopieren und per Maus-Rechtsklick in PuTTY einfügen.


    Wir fangen mit dem Cross-Compiler an. Zusätzlich zu der in der obigen Anleitung beschriebenen PATH Umgebungsvariablen müssen wir noch zwei weitere exportieren, also insgesamt:
    <SSH-CC>

    Code
    export PATH=$HOME/CodeSourcery/Sourcery_G++_Lite/bin:$PATHexport ARCH=armexport CROSS_COMPILE=arm-none-linux-gnueabi-


    Um alles dauerhaft zu speichern:
    <SSH-CC>

    Code
    echo 'export PATH=$HOME/CodeSourcery/Sourcery_G++_Lite/bin:$PATH' >> $HOME/.bashrcecho 'export ARCH=arm' >> $HOME/.bashrcecho 'export CROSS_COMPILE=arm-none-linux-gnueabi-' >> $HOME/.bashrc


    Nun kann es losgehen. Zunächst wird open-ssl entpackt, konfiguriert und kompiliert, da Teile daraus von XMail verwendet werden:
    <SSH-CC>

    Code
    tar xzvf openssl-0.9.8r.tar.gzcd openssl-0.9.8r./Configure linux-elf no-asmmake


    Das Kompilieren dauert eine Weile. Alle Compiler-Ausgaben müssen mit arm-none-linux.... beginnen, sonst stimmt etwas mit den Umgebungsvariablen nicht (dann unbedingt korrigieren, da man sonst für den Host und nicht das NAS kompiliert!).
    Nun kommt XMail dran:
    <SSH-CC>

    Code
    cd ..tar xzvf xmail-1.27.tar.gzcd xmail-1.27cp Makefile.lnx Makefile


    XMail ist nicht für das Cross-Compilieren vorbereitet. Wir müssen das kopierte 'Makefile' editieren, die ersten Zeilen (hinter den Kommentarzeilen) müssen wie folgt geändert werden (Pfad von openssl ggf. anpassen):

    Code
    SYSTYPE = linuxWITH_SSL_INCLUDE = $(HOME)/openssl-0.9.8r/includeWITH_SSL_LIB = $(HOME)/openssl-0.9.8rCC = $(CROSS_COMPILE)g++LD = $(CROSS_COMPILE)g++STRIP = $(CROSS_COMPILE)strip


    Etwas weiter unten müssen 5 Zeilen auskommentiert werden:

    Code
    # ifeq ($(wildcard /usr/include/sys/eventfd.h), )    SYSSRCS := $(SYSSRCS) SysOsEventfd_pipe.cpp#else#    SYSSRCS := $(SYSSRCS) SysOsEventfd_eventfd.cpp#    CFLAGS := $(CFLAGS) -DHAS_EVENTFD#endif


    Auch 'Makefile.common' benötigt eine Änderung:

    Code
    ${MKMACHDEPINC}: ${MKMACHDEP}#	./${MKMACHDEP} > ${MKMACHDEPINC}


    Die untere Zeile wird auskommentiert, da dieser Befehl auf dem Target-System (= NAS) ausgeführt werden muss.
    Und die vorletzte Zeile ändern in:

    Code
    rm -f *.o *~ ${MKMACHDEP}


    Nun folgt der erste Compiler-Lauf:
    <SSH-CC>

    Code
    make


    Der Fehler entsteht, weil ein .h File fehlt (wg. auskommentierter Zeile). Das müssen wir auf dem NAS erzeugen. Dazu wird die Datei


    xmail-1.27/bin/MkMachDep


    per Samba/FTP auf das NAS in ein von außen erreichbares Verzeichnis kopiert, z.B. Public/xmail (Pfad ggf. anpassen).
    <SSH-NAS>

    Code
    cd /share/Public/xmail./MkMachDep > SysMachine.h


    Jetzt kopieren wir 'SysMachine.h' in die virtuelle Maschine ins xmail-1.27 Verzeichnis. Es folgt der zweite Compiler-Lauf:
    <SSH-CC>

    Code
    make cleanmake


    Es sollte alles fehlerfrei durchlaufen. Alle Binärdateien aus


    xmail-1.27/bin/


    (also die 6 Dateien, die nicht mit .o enden) per Samba/FTP auf das NAS in ein von außen erreichbares Verzeichnis kopieren, z.B. Public/xmail.
    Auf dem NAS den Mailserver stoppen und die Dateien ins eigentliche Verzeichnis kopieren (Pfade ggf. anpassen!):
    <SSH-NAS>

    Code
    cd  /share/MD0_DATA/.qpkg/XDove./xdove.sh stopcp /share/Public/xmail/* /share/MD0_DATA/.qpkg/XDove/xmail/bin


    Optional können wir noch xdove.sh und xmail.conf anpassen, um ein anderes temporäres Verzeichnis (mit deutlich mehr Platz) nutzen zu können:
    In xdove.sh (befindet sich in /share/MD0_DATA/.qpkg/XDove) die folgende Zeile suchen und die Zeile dahinter einfügen:

    Code
    #create symbolic links for required files of xmail[ ! -d "${XMAIL_TEMP}" ] && /bin/mkdir -p "${XMAIL_TEMP}"


    und:

    Code
    #set the appropriate permissions/bin/chmod 777 "${XMAIL_TEMP}"


    und:

    Code
    find_baseQPKG_DIR="${QPKG_BASE}/.qpkg/XDove"XMAIL_TEMP="${QPKG_DIR}/xmail/tmp"


    In xmail.conf (befindet sich im selben Verzeichnis wie xdove.sh) im Abschnitt 'start_mail()' die folgende Zeile suchen und die Zeile dahinter einfügen:

    Code
    export DEFAULT_DOMAINexport XMAIL_TEMP


    Abspeichern und los geht's (XDove Pfad ggf. anpassen!):
    <SSH-NAS>

    Code
    cd  /share/MD0_DATA/.qpkg/XDove
    ./xdove.sh start


    Wenn alles glatt lief, starten beide Server und ihre pids werden angezeigt.


    phys1

  • Sunday
    Das würde dir aber auch nichts nutzen, da dein 239 Pro einen Intel Atom Prozessor hat, der TE aber ein NAS mit ARM-Prozessor besitzt.

    Zitat von "phys1"

    [NAS Typ:]Serie X10/X12/x19 (Marvell CPU)
    [QPKG:]Installiertes XDove 1.3 (mit XMail 1.25)