• LAMPP mit ftp, openSSL, msmtp, webalizer und phpmyadmin in einer chroot

    In diesem Tutorial geht es darum ein LAMPP (Linux: apache+mysql+perl+php) innerhalb einer chroot zu installieren.
    Darüber hinaus wird erklärt, wie man einen ftp-Server aufsetzt.
    OpenSSL sowie msmtp, webalizer und phpmyadmin gehören ebenso dazu.

    Inhaltsverzeichnis:


    Installation (up)
    Ein paar Dinge, die ich hier einfach angenommen habe, die dann auf die individuellen Bedürfnisse angepasst werden müssen:
    Passwort für mysql-user root:
    deinwunschpasstwortfuermysql

    Passwort für mysql-user pureftpd:
    deinftppasswort

    Verzeichnis für htdocs:
    /htdocs

    Verzeichnis für phpmyadmin:
    /htdocs/phpmyadmin

    port für apache:
    80

    port für ftp:
    21

    port für mysql:
    3306


    Zu den verwendeten Versionen. Im Laufe der Zeit wird es von jeder Software wohl eine neue Version geben, bei der dann jeweils zu schauen, in wieweit sich etwas gegenüber den hier benutzten Versionen getan haben wird. Ratsam ist es, stets die aktuellen Versionen zu benutzen!
    buildchroot
    3.0

    apache
    2.2.6

    cband
    0.9.7.5

    mysql
    5.0.45

    openssl
    0.9.8e

    php
    5.2.4

    phpMyAdmin
    2.11.0

    pure-ftpd
    1.0.22

    ioncube loader
    5.1

    msmtp
    1.4.13

    webalizer
    2.01-10


    Vorbereitungen (up)
    Begonnen wird mit der buildchroot von sven:
    Code:
    cd /src/
    
    wget http://download.berlios.de/buildroot/buildrootv31.tar.bz2
    
    entpacken:
    Code:
    tar -xvjf buildrootv31.tar.bz2
    
    das entpackte in das Verzeichnis /chroots/ verschieben und anschließend umbenennen
    Code:
    mv Buildrootv3 /chroots/LAMPPBuildroot
    
    Damit aus der chroot auch der passende DNS-Server zur Namensauflösung gefunden werden kann muss die Datei /etc/resolv.conf berücksichtigt werden:
    Code:
    cat /etc/resolv.conf > /chroots/LAMPPBuildroot/etc/resolv.conf
    
    Das überschreibt den Inhalt der Datei mit dem, wie sie auf dem Server vorhanden ist.


    proc mounten
    Darüber hinaus wird außerhalb der chroot noch proc gemountet:
    Code:
    mount -tproc proc /chroots/LAMPPBuildroot/proc
    
    Zeitzone in der chroot verfügbar machen
    Um die korrekte Zeit und die korrekte Zeitzone vom Hauptlinux in eine chroot zu übernehmen:

    Sofern das Verzeichnis noch nicht existieren sollte, erstellen:
    Code:
    mkdir /chroots/LAMPPBuildroot/usr/share
    
    Dann die Infos vom Hauptlinux kopieren:
    Code:
    cp /etc/localtime /chroots/LAMPPBuildroot/etc/
    cp -a /usr/share/zoneinfo /chroots/LAMPPBuildroot/usr/share/
    
    Update der Programme
    Nun in die neue chroot wechseln:
    Code:
    chroot /chroots/LAMPPBuildroot /bin/sh
    
    in das source-Verzeichnis wechseln:
    Code:
    cd src
    
    Nun werden ein paar grundlegende Dinge installiert, sofern sie noch nicht vorhanden sind. Vorher einmal die Pakete updaten.
    Code:
    apt-get update
    
    apt-get dist-upgrade
    
    apt-get upgrade
    
    apt-get install gcc g++ binutils make libc6-dev bin86 \
    libncurses5-dev libfreetype6 libfreetype6-dev libjpeg62 \
    libjpeg62-dev libungif4g libungif4-dev flex bison \
    libgdbm-dev libpng12-dev libttf2 libttf-dev wget \
    libxml2-dev bzip2 libbz2-dev libxslt1-dev \
    libcurl3 curl libcurl3-dev libmcrypt4 libmcrypt-dev \
    libmhash-dev libmhash2 libreadline5 libreadline5-dev \
    libc-client-dev libmm14 libmm-dev libtidy-dev libtidy-0.99-0 \
    libgdbmg1 libgd-dev perl-modules perl-modules
    
    apache (up)
    Die Installation von Programmen, die selbst kompiliert werden beginnt immer im Verzeichnis /src/
    Code:
    cd /src/
    
    Auf dieser Seite nach einer aktuellen httpd-Version schauen
    Code:
    wget http://netmirror.org/mirror/apache.org/httpd/httpd-2.2.6.tar.bz2
    
    entpacken:
    Code:
    tar -xvjf httpd-2.2.6.tar.bz2
    
    Nun wird in das Verzeichnis des httpd gewechselt
    Code:
    cd /src/httpd-2.2.6
    
    konfigurieren und installieren:
    Code:
    ./configure --prefix=/srv/apache2 --enable-cgi --enable-vhost-alias  \
    --enable-rewrite --enable-so  --enable-info --enable-ssl
    
    make && make install
    
    Apache ist nun installiert.

    Nun wird es noch ein wenig modifiziert.

    user für apache hinzufügen:
    Code:
    adduser lampp-apache2
    
    ihm die notwendigen Rechte einräumen:
    Code:
    chown -R lampp-apache2:lampp-apache2 /srv/apache2
    
    Dann den vorhandenen Datenmüll entfernen...
    Code:
    su lampp-apache2
    
    rm -R /srv/apache2/htdocs
    
    mkdir /srv/apache2/htdocs
    
    Nun kommt die conf-Datei:
    Code:
    vi /srv/apache2/conf/httpd.conf
    
    folgende Punkte ändern:
    • Listenport ändern auf den gewünschten port (Standard ist 80) (Zeile 39)
    • daemon ändern in lampp-apache2 (Zeilen 64+65)
    • ServerAdmin root@domain.tld (Zeile 85) (hier natürlich eine existierende Adresse eintragen)
    • ServerName sollte folgenden Wert bekommen: ServerName? localhost:80
    • DocumentRoot anpassen: /htdocs (Zeile 101)
    • Directory anpassen (Zeile 127)
    • aus Options Indexes FollowSymLinks folgendes machen: Options -Indexes FollowSymLinks (Zeile 141)
    • aus AllowOverride None folgendes machen: AllowOverride All (Zeile 150)
    vi beenden
    Code:
    [ESC]:wq[Enter]
    
    Eventuell muss in die Datei /etc/hosts (anlegen, wenn noch nicht existierend) folgendes eingetragen werden:
    Code:
    127.0.0.1       localhost
    127.0.0.1       debian
    
    damit eine Namensaufllösung auf den eigenen Rechner stattfinden kann.

    Ich habe mich dazu entschieden die htdocs in /htdocs zu haben.
    Dieses Verzeichnis muss dann noch erstellt werden:

    Daher zu erst den user zu root wechseln
    Code:
    exit
    
    Und dann das Verzeichnis erstellen:
    Code:
    cd /
    
    mkdir htdocs
    
    Und dann noch die Rechte anpassen!
    Code:
    chown -R lampp-apache2:lampp-apache2 /htdocs/
    
    Den Prozess umbenennen und testweise einmal starten (unter den Rechten des users!)
    Code:
    su lampp-apache2
    
    cp /srv/apache2/bin/httpd /srv/apache2/bin/lampp-apache2
    
    /srv/apache2/bin/lampp-apache2
    
    exit
    
    Dann testweise mal eine index.html mit Inhalt füllen:
    Code:
    echo "<h1>Baustelle</h1>Bitte später wiederkommen." > /htdocs/index.html
    
    testen ob es im browser aufrufbar ist: http://www.domain.tld:port

    Dann den apachen wieder stoppen:
    Code:
    killall lampp-apache2
    
    Nun wird cband installiert:
    Code:
    cd /src
    
    wget http://cband.linux.pl/download/mod-cband-0.9.7.5.tgz
    
    tar -xzvf mod-cband-0.9.7.5.tgz
    
    cd mod-cband-0.9.7.5
    
    ./configure --prefix=/srv/mod_cban --with-apxs=/srv/apache2/bin/apxs
    
    make && make install
    
    Zum Schluss werden noch 2 cgi-Skripte entfernt:
    Code:
    rm /srv/apache2/cgi-bin/printenv
    
    rm /srv/apache2/cgi-bin/test-cgi
    
    mysql (up)
    Nun ist mysql an der Reihe.

    herunterladen und entpacken:
    Code:
    wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.45.tar.gz/from/ftp://ftp.fu-berlin.de/unix/databases/mysql/
    
    tar -xvzf mysql-5.0.45.tar.gz
    
    in das Verzeichnis wechseln:
    Code:
    cd /src/mysql-5.0.45
    
    konfigurieren:
    Code:
    ./configure \
    --prefix=/srv/mysql \
    --localstatedir=/srv/mysql/mysqldata \
    --enable-thread-safe-client \
    --enable-local-infile \
    --enable-assembler \
    --with-comment \
    --with-vio \
    --with-extra-charsets=all \
    --with-gnu-ld \
    --with-isam \
    --with-unix-socket-path=/tmp/mysql.5.0.sock \
    --without-bench \
    --without-debug \
    --without-docs \
    --without-man \
    --without-innodb \
    --with-charset=utf8 \
    --with-collation=utf8_general_ci \
    --with-mysqld-user=lampp-mysql \
    --with-tcp-port=3306
    
    und installieren:
    Code:
    make && make install
    
    Dann den user hinzufügen, unter dem mysql laufen soll:
    Code:
    adduser lampp-mysql
    
    dann die Rechte erteilen:
    Code:
    chown -R lampp-mysql:lampp-mysql /srv/mysql
    
    den Prozess zur eindeutigen Identifikation umbenennen:
    Code:
    cp /srv/mysql/libexec/mysqld /srv/mysql/libexec/lampp-mysql
    
    dann symlinks erzeugen:
    Code:
    cd /lib
    
    ln -s /srv/mysql/lib/mysql/libmysqlclient.so.15
    
    ln -s /srv/mysql/lib/mysql/libmysqlclient.so.15.0.0
    
    für die lib-Verwaltung
    Code:
    ldconfig
    
    Code:
    su lampp-mysql
    
    /srv/mysql/bin/mysql_install_db
    
    Verzeichnis für log-file erstellen:
    Code:
    cd /srv/mysql
    
    mkdir logs
    
    mysql starten:
    Code:
    /srv/mysql/libexec/lampp-mysql \
    --log-error=/srv/mysql/logs/error.log \
    -u lampp-mysql \
    --port=3306 \
    --socket=/tmp/mysql.sock &
    
    jetzt muss noch zum starten der socket verbogen werden:
    Code:
    cd /tmp
    
    ln -s mysql.sock mysql.5.0.sock
    
    Administrator-Passwort festlegen
    Code:
    /srv/mysql/bin/mysqladmin -u root password 'deinwunschpasstwortfuermysql'
    
    Mit der Konsole bei mysql anmelden
    Code:
    /srv/mysql/bin/mysql -u root -pdeinwunschpasstwortfuermysql
    
    dort dann in die mysql-Konsole eingeben:
    Code:
    connect mysql
    
    update user SET Password=PASSWORD('deinwunschpasstwortfuermysql');
    
    Konsole mit
    Code:
    exit
    
    beenden

    mysql beenden:
    Code:
    killall lampp-mysql
    
    mysql neu starten:
    Code:
    /srv/mysql/libexec/lampp-mysql \
    --log-error=/srv/mysql/logs/error.log \
    -u lampp-mysql \
    --port=3306 \
    --socket=/tmp/mysql.sock &
    
    user beenden
    Code:
    exit
    
    openssl (up)
    Zu erst herunterladen und entpacken:
    Code:
    cd /src
    
    wget http://www.openssl.org/source/openssl-0.9.8e.tar.gz
    
    tar -xzvf openssl-0.9.8e.tar.gz
    
    konfigurieren und installieren:
    Code:
    cd openssl-0.9.8e
    
    ./config
    
    make && make test && make install
    
    key für pure-ftpd:
    Code:
    mkdir -p /etc/ssl/private
    
    /usr/local/ssl/bin/openssl req -x509 -nodes -newkey rsa:1024 -keyout \
      /etc/ssl/private/pure-ftpd.pem \
      -out /etc/ssl/private/pure-ftpd.pem
    
    chmod 600 /etc/ssl/private/*.pem
    
    key für apache:
    Code:
    /usr/local/ssl/bin/openssl dsaparam -rand -genkey -out myRSA.key 1024
    
    /usr/local/ssl/bin/openssl gendsa -des3 -out myca.key myRSA.key
    
    /usr/local/ssl/bin/openssl req -new -x509 -days 365 -key myca.key -out new.crt
    
    cd /srv
    
    mkdir openssl
    
    mv myca.key /srv/openssl/server.key
    
    mv new.crt /srv/openssl/server.crt
    
    Damit SSL auch genutzt werden kann muss in der httpd.conf die Zeile 401 das Kommentarzeichen entfernt werden. Anschließend muss der apache neugestartet werden.

    Dann wird in der /srv/apache2/conf/extra/httpd-ssl.conf der vhost auskommentiert. Das betrifft die Zeilen 74 bis 231.
    Wichtig ist, dass entweder in der httpd-ssl.conf (standardmäßig) oder in der httpd.conf folgendes steht:
    Code:
    Listen 443
    
    Denn das ist der port, auf dem die verschlüsselte Verbindung aufgebaut wird.

    Dann sollte in der Datei, in welcher auch die vhosts definiert werden (/srv/apache2/conf/extra/httpd-vhosts.conf) ein Eintrag wie dieser vorhanden sein:
    Code:
    <VirtualHost _default_:443>
      DocumentRoot /htdocs/errorssl
      ServerName domain.tld
      ServerAdmin root@domain.tld
      ErrorLog /htdocs/logs/defaultssl-error_log
      CustomLog /htdocs/logs/efaultssl_log common
      TransferLog logs/defaultssl-access.log
      SSLEngine on
      SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
      SSLCertificateFile /srv/openssl/server.crt
      SSLCertificateKeyFile /srv/openssl/server.key
      <FilesMatch "\.(cgi|shtml|phtml|php|php5|phps)$">
        SSLOptions +StdEnvVars
      </FilesMatch> <Directory "/srv/apache2/cgi-bin">
        SSLOptions +StdEnvVars
      </Directory>
      BrowserMatch ".*MSIE.*" \
      nokeepalive ssl-unclean-shutdown \
      downgrade-1.0 force-response-1.0
    </VirtualHost>
    
    Dieser wird immer dann benutzt, wenn kein anderer passender chost gefunden wurde In der Datei /srv/apache2/conf/extra/httpd-vhosts.conf muss dann auch folgendes stehen:
    Code:
    NameVirtualHost *:80
    NameVirtualHost *:443
    
    Dann sollten die vhosts für ssl funktionieren.

    Natürlich muss das Verzeichnis /htdocs/errorssl dann noch erstellt werden - und eine Datei mit Inhalt bekommen!

    Anschließend muss der apache einmal neugestartet werden.



    php (up)
    php-source herunterladen und installieren
    Code:
    cd /src
    
    wget http://www.php.net/get/php-5.2.5.tar.bz2/from/de3.php.net/mirror
    
    tar -xvjf php-5.2.5.tar.bz2
    
    cd php-5.2.5
    
    ./configure \
    --prefix=/srv/php \
    --with-mysql=/srv/mysql \
    --with-mysqli=/srv/mysql/bin/mysql_config \
    --with-config-file-path=/srv/php \
    --with-exec-dir=/htdocs \
    --with-pear=/srv/php/pear \
    --with-xmlrpc \
    --with-xsl \
    --with-zlib \
    --with-zlib-dir=/usr/include/ \
    --with-apxs2=/srv/apache2/bin/apxs \
    --with-bz2 \
    --with-curl \
    --enable-bcmath \
    --enable-calendar \
    --enable-ctype \
    --enable-dbase \
    --enable-discard-path \
    --enable-exif \
    --enable-force-cgi-redirect \
    --enable-ftp \
    --enable-gd-native-ttf \
    --enable-inline-optimization \
    --enable-mbstring=all \
    --enable-shmop \
    --enable-sigchild \
    --enable-simplexml \
    --enable-soap \
    --enable-sqlite-utf8 \
    --enable-sysvmsg \
    --enable-sysvsem \
    --enable-sysvshm \
    --enable-sockets \
    --enable-wddx \
    --with-gd \
    --with-gdbm \
    --with-gettext \
    --with-kerberos \
    --with-jpeg-dir=/usr \
    --with-mcrypt \
    --with-mhash \
    --with-mm \
    --with-png-dir=/usr \
    --with-readline \
    --with-iconv \
    --with-ttf \
    --with-pdo-sqlite \
    --with-pdo-mysql=/srv/mysql \
    --with-tidy \
    --with-kerberos \
    --with-imap \
    --with-imap-ssl \
    --with-openssl
    
    Code:
    make
    
    make test
    
    killall lampp-apache2
    
    make install
    
    den Benutzer wechseln:
    Code:
    su lampp-apache2
    
    Hier
    Code:
    vi /srv/apache2/conf/httpd.conf
    
    nun folgende Änderungen/Ergänzungen:

    (Zeile 308+309)

    Code:
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
    
    und (Zeile 164)
    Code:
    DirectoryIndex index.html
    
    durch
    Code:
    DirectoryIndex index.html index.php index.htm
    
    ersetzen

    Dann die Zeile 388 auskommentieren.

    vhost werden dann in der Datei /chroots/MAILBuildroot/srv/apache2/conf/extra/httpd-vhosts.conf angelegt.

    Nun muss vor einem start mind. ein vhost definiert sein:
    Code:
    vi /srv/apache2/conf/extra/httpd-vhosts.conf
    
    die beiden default-Einträge zu einem ändern:
    Code:
    <VirtualHost *:80>
        ServerAdmin root@domain.tld
        DocumentRoot "/htdocs"
        ServerName domain.tld
        ServerAlias www.domain.tld
        ErrorLog "logs/domain.tld-error_log"
        CustomLog logs/domain.tld_log common"
    </VirtualHost>
    
    Wenn der port auf dem der apache lauscht unterhalb von 1024 ist, dann muss erst der user verlassen werden um den apachen zu starten, andernfalls gilt diese Reihenfolge:

    Apachen starten:
    Code:
    /srv/apache2/bin/lampp-apache2
    
    Nun wieder den Benutzer verlassen
    Code:
    exit
    
    phpmyadmin (up)
    Code:
    cd /htdocs
    
    su lampp-apache2
    
    wget http://belnet.dl.sourceforge.net/sourceforge/phpmyadmin/phpMyAdmin-2.11.2.1-all-languages.tar.bz2
    
    tar -xvjf phpMyAdmin-2.11.2.1-all-languages.tar.bz2
    
    exit
    
    mv phpMyAdmin-2.11.2.1-all-languages.tar.bz2 /src/phpMyAdmin-2.11.2.1-all-languages.tar.bz2
    
    su lampp-apache2
    
    mv phpMyAdmin-2.11.2.1-all-languages/ phpmyadmin
    
    cd phpmyadmin/
    
    Jetzt eine config-Datei erstellen und testen. Es existiert eine Datei namens config.sample.inc.php. Diese wird kopiert:
    Code:
    cp config.sample.inc.php config.inc.php
    
    Dort kann die Datei dann beliebig erweitert werden.

    Mein Inhalt lautet:
    Code:
    $cfg['Servers'][$i]['port']          = '3306';
    $cfg['Servers'][$i]['connect_type']  = 'tcp';
    $cfg['Servers'][$i]['socket']        = '';
    $cfg['Servers'][$i]['extension']     = 'mysql';
    $cfg['Servers'][$i]['compress']      = FALSE;
    $cfg['Servers'][$i]['controluser']   = 'root';
    $cfg['Servers'][$i]['controlpass']   = 'PASSWORT';
    $cfg['Servers'][$i]['auth_type']     = 'http';
    $cfg['Servers'][$i]['user']          = 'root';
    $cfg['Servers'][$i]['password']      = 'PASSWORT';
    $cfg['Servers'][$i]['only_db']       = '';
    $cfg['Servers'][$i]['verbose']       = '';
    $cfg['Servers'][$i]['pmadb']         = 'phpmyadmin';
    $cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
    $cfg['Servers'][$i]['relation']      = 'pma_relation';
    $cfg['Servers'][$i]['table_info']    = 'pma_table_info';
    $cfg['Servers'][$i]['table_coords']  = 'pma_table_coords';
    $cfg['Servers'][$i]['pdf_pages']     = 'pma_pdf_pages';
    $cfg['Servers'][$i]['column_info']   = 'pma_column_info';
    $cfg['Servers'][$i]['history']       = 'pma_history';
    $cfg['Servers'][$i]['verbose_check'] = TRUE;
    $cfg['Servers'][$i]['AllowRoot']     = TRUE;
    $cfg['Servers'][$i]['AllowDeny']['order'] = '';
    $cfg['Servers'][$i]['AllowDeny']['rules'] = array();
    
    pma ist dann so aufrufbar: http://www.domain.tld:port/phpmyadmin/



    pureftp (up)
    Herunterladen und entpacken:
    Code:
    wget http://download.pureftpd.org/pub/pure-ftpd/releases/snapshots/pure-ftpd-1.0.22.tar.gz
    
    tar -xzvf pure-ftpd-1.0.22.tar.gz
    
    in das Verzeichnis wechseln:
    Code:
    cd pure-ftpd-1.0.22
    
    und installieren:
    Code:
    ./configure \
       --prefix=/srv/pureftpd/ \
       --without-inetd \
       --with-largefile \
       --with-ratios \
       --with-quotas \
       --with-ftpwho \
       --with-peruserlimits \
       --with-tls \
       --with-certfile=/etc/ssl/private/pure-ftpd.pem \
       --with-mysql=/srv/mysql/
    
    
    make install-strip
    
    Dann wird die ID des apache-users erfragt:
    Code:
    cat /etc/passwd | grep lampp-apache2
    
    In meinem Falle ist das die 1000

    dann wird eine ftp-user-Gruppe erzeugt. Der Vorteil ist der, dass der ftp-user und der apache-user dann in der gleichen Gruppe sind und somit weitere Probleme beim späteren Betrieb reduziert werden.

    Code:
    groupadd -g 1000 ftpgroup
    
    useradd -u 1000 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser
    
    Dann 2 Verzeichnisse erstellen:
    Code:
    mkdir /etc/pure_ftpd/
    
    mkdir /etc/pure_ftpd/conf
    
    Nun werden ein paar Config-Dateien angelegt und mit Inhalt gefüllt:
    Code:
    echo "YES" > /etc/pure_ftpd/conf/CreateHomeDir
    
    echo "YES" > /etc/pure_ftpd/conf/ChrootEveryone
    
    sowie:
    Code:
    vi /etc/pure_ftpd/mysql.conf
    
    mit dem Inhalt:
    Code:
    MYSQLSocket     /tmp/mysql.sock
    #MYSQLServer     localhost
    #MYSQLPort       3306
    MYSQLUser       pureftpd
    MYSQLPassword   deinftppasswort
    MYSQLDatabase   pureftpd
    #MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext
    MYSQLCrypt      md5
    MYSQLDefaultUID 1000
    MYSQLGetPW      SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
    MYSQLGetUID     SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
    MYSQLGetGID     SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
    MYSQLGetDir     SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
    MySQLGetQTASZ   SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
    MySQLGetQTAFS   SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
    
    via mysql-console (Erstellen der db):
    Code:
    CREATE DATABASE pureftpd;
    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'deinftppasswort';
    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'deinftppasswort';
    FLUSH PRIVILEGES;
    
    via mysql-console (Erstellen der Struktur):
    Code:
    CREATE TABLE `ftpd` (
      `User` varchar(16) NOT NULL default '',
      `status` enum('0','1') NOT NULL default '1',
      `Password` varchar(64) NOT NULL default '',
      `Uid` varchar(11) NOT NULL default '1000',
      `Gid` varchar(11) NOT NULL default '1000',
      `Dir` varchar(128) NOT NULL default '/htdocs/',
      `ULBandwidth` smallint(5) NOT NULL default '0',
      `DLBandwidth` smallint(5) NOT NULL default '0',
      `comment` tinytext NOT NULL,
      `ipaccess` varchar(15) NOT NULL default '*',
      `QuotaSize` smallint(5) NOT NULL default '0',
      `QuotaFiles` int(11) NOT NULL default '0',
      UNIQUE KEY `User` (`User`)
    );
    
    via mysql-console (Erstellen des ersten users):

    Code:
    INSERT INTO `pureftpd`.`ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`)
    VALUES ('user', '1', MD5('password'), '1000', '1000', '/htdocs/', '0', '0', '', '*', '0', '0');
    
    Dann noch den Dienst-Namen umbenennen:
    Code:
    cp /srv/pureftpd/sbin/pure-ftpd /srv/pureftpd/sbin/lampp-ftp
    
    Server starten:
    Code:
    /srv/pureftpd/sbin/pure-ftpd2 --tls=2 -0 stats:/srv/pureftpd/logs/pureftpd.log -S21 -l mysql:/etc/pure_ftpd/mysql.conf -A -E -D -c50 -C5 &
    
    ioncube (up)
    Hier nach der aktuellen Version schauen. Die Linux (x86) als tar.bz2 ist die Ggesuchte!
    Code:
    wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.tar.bz2
    
    tar -xvjf ioncube_loaders_lin_x86.tar.bz2
    
    cd ioncube
    
    mkdir /srv/apache2/modules
    
    cp ioncube_loader_lin_5.1.so /srv/apache2/modules
    
    dort in der php.ini sehr weit unten (etwa Zeile 1211) folgenden Eintrag ergänzt:
    Code:
    [Zend]
    zend_extension = /etc/php5/apache2/ioncube_loader_lin_5.1.so
    
    anschließend den apachen neustarten

    (in der chroot)
    Code:
    killall lampp-apache2
    
    /srv/apache2/bin/apachectl start
    
    in der phpinfo(); findet man jetzt:

    This program makes use of the Zend Scripting Language Engine: Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies with the ionCube PHP Loader v3.1.23, Copyright (c) 2002-2006, by ionCube Ltd.

    und unter Additional Modules ist der ioncube Loader gelistet.




    msmtp (up)
    Das ganze beschreibt wie man msmtp im Hauptlinux installiert. Wenn das erfolgreich geklappt hat, kann man in crontab -e oben einfach anstatt root, die emailadresse eintragen an die man alle meldungen von crons geschickt haben will. Wenn man gewisse crons keinerlei ausgaben machen lassen will, einfach ein > /dev/null hintendran, das sollte reichen.

    Installation von msmtprc
    Code:
    cd /src/
    
    wget -dv http://surfnet.dl.sourceforge.net/sourceforge/msmtp/msmtp-1.4.13.tar.bz2
    
    tar -xjvf msmtp-1.4.13.tar.bz2
    
    cd msmtp-1.4.13
    
    ./configure --prefix=/srv/msmtp
    
    make
    
    make install
    
    cd /srv/msmtp
    
    mkdir etc
    
    cd etc
    
    touch msmtprc
    
    vi msmtprc
    
    In die Datei folgendes reinschreiben:
    Code:
    # Set default values for all following accounts.
    defaults
    tls off
    logfile /var/log/msmtp.log
    syslog LOG_MAIL
    # A freemail service
    account rootMailAccount
    host localhost
    from email@domain.tld
    auth on
    user email@domain.tld
    password pwDerEmailAdresse
    
    # Set a default account
    account default : rootMailAccount
    
    Austauschen: email@domain.tld und pwDerEmailAdresse

    Jetzt noch das alte sendmail sichern und mittels einem symlink das neue benutzen:
    Code:
    cd /usr/sbin/
    
    mv sendmail sendmail.bak
    
    ln -s /srv/msmtp/bin/msmtp /usr/bin/sendmail
    
    ln -s /srv/msmtp/bin/msmtp /usr/sbin/sendmail
    
    ln -s /srv/msmtp/lib/msmtp /usr/lib/sendmail
    
    test ob es funktioniert:

    ein .sh-script erstellen (chmod nicht vergessen) und folgendes reinschreiben:

    Code:
    echo -e "Subject: Test" > /mail.txt
    echo -e "\n" >> /mail.txt
    echo "Das ist ein Test" >> /mail.txt
    cat /mail.txt | /usr/sbin/sendmail -v empfänger@domain.tld
    rm /mail.txt
    
    empfänger@domain.tld austauschen und ausführen

    In der crontab

    Code:
    crontab -e
    
    muss dann lediglich noch in die erste Zeile:
    Code:
    MAILTO=empfänger@domain.tld
    
    Fortan werden alle (!) Meldungen per mail verschickt.

    dann php configure nochmal neu ausführen und apache neustarten!
    Code:
    cd /src/php-5.2.4
    
    make clean
    
    make distclean
    
    ./configure --prefix=/srv/php --with-mysql=/srv/mysql --with-mysqli=/srv/mysql/bin/mysql_config \
    --with-_lib=lib --with-config-file-path=/srv/php --with-exec-dir=/htdocs --with-pear=/srv/php/pear \
    --with-xml --with-xmlrpc --with-xsl --with-zip --with-zlib --with-zlib-dir=/usr/include/ \
    --with-apxs2=/srv/apache2/bin/apxs --with-bz2 --with-curl --with-freetype --with-ftp \
    --enable-bcmath --enable-calendar --enable-ctype --enable-dbase --enable-discard-path \
    --enable-exif --enable-filepro --enable-force-cgi-redirect --enable-ftp --enable-gd-imgstrttf \
    --enable-gd-native-ttf --enable-inline-optimization --enable-mbstr-enc-trans --enable-mbstring=all \
    --enable-memory-limit --enable-shmop --enable-sigchild --enable-simplexml --enable-soap --enable-sqlite-utf8 \
    --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-sockets --enable-track-vars --enable-trans-sid \
    --enable-wddx --with-gd --with-gdbm --with-gif-dir=/usr --with-gettext --with-kerberos --with-jpeg-dir=/usr \
    --with-mcrypt --with-mhash --with-mm --with-png-dir=/usr --with-readline --with-iconv --with-ttf \
    --with-pdo-sqlite --with-pdo-mysql=/srv/mysql --with-tidy --with-imap --with-imap-ssl --with-openssl
    
    killall lampp-apache2
    
    make && make test && make install
    
    su lampp-apache2
    
    /srv/apache2/bin/lampp-apache2
    
    exit
    
    webalizer (up)
    webalizer wird zwar nicht mehr weiterentwickelt, stellt aber noch immer ein sehr angenehmes tool dar, um die Besucherzahlen grafisch darzustellen.
    Code:
    wget ftp://ftp.mrunix.net/pub/webalizer/webalizer-2.01-10-src.tar.bz2
    
    
    
    tar -xjvf webalizer-2.01-10-src.tar.bz2
    
    cd webalizer-2.01-10
    
    ./configure --prefix=/srv/webalizer --with-language=german
    
    make
    
    make install
    
    cron (up)
    Um den cron-Dienst in der chroot nutzen zu können, muss dieser seperat gestartet werden.

    kopieren:
    Code:
    cd /usr/sbin
    
    umbenennen
    Code:
    cp cron lampp-cron
    
    starten:
    Code:
    ./lampp-cron
    
    Wartung (up)
    Im zweiten Teil des Tutorials gehe ich davon aus, dass die Installation geklappt hat. Fertig ist man damit jedoch nicht! Es kommen immer wieder einige Punkte Arbeit auf einen zu. Einige sollen hier angerissen werden.




    Dienste starten (up)
    Um einzelne Dienste zu starten hier eine kleine Übersicht:

    apache:
    Code:
    /srv/apache2/bin/lampp-apache2
    
    mysql:
    Code:
    su lampp-mysql
    
    /srv/mysql/libexec/lampp-mysql \
    --log-error=/srv/mysql/logs/error.log \
    -u lampp-mysql \
    --port=3306 \
    --socket=/tmp/mysql.sock &
    
    exit
    
    pureftp:
    Code:
    /srv/pureftpd/sbin/lampp-ftp --tls=2 -0 stats:/srv/pureftpd/logs/pureftpd.log -S21 -l mysql:/etc/pure_ftpd/mysql.conf -A -E -D -c50 -C5 &
    
    cron:
    Code:
    /usr/sbin/lampp-cron
    
    Code:
    proc:
    
    Code:
    mount -tproc proc /proc/
    
    Dienste stoppen (up)
    Um gewisse Dienste zu stoppen:

    apache:
    Code:
    killall lampp-apache2
    
    mysql:
    Code:
    killall lampp-mysql
    

    pureftp:

    Code:
    killall pure-ftpd2
    
    cron:
    Code:
    killall lampp-cron
    
    lighttpd:
    Code:
    killall lampp-lighttpd
    
    proc:
    Code:
    umount /chroots/LAMPPBuildroot/proc/
    
    Domains (up)
    Subdomains und Domains werden als vHost in der Datei /chroots/LAMPPBuildroot/srv/apache2/conf/extra/httpd-vhosts.conf eingetragen.




    php.ini und httpd.conf (up)
    Die Datei php.ini befindet sich unter diesem Pfad /chroots/LAMPPBuildroot/srv/php/php.ini

    Die Datei httpd.conf befindet sich unter diesem Pfad
    /srv/apache2/conf/httpd.conf




    ftp-Verbindung (up)
    dazu muss als Servertyp 'FTP über TLS (Explizite Verschlüsselung)' eingestellt werden, sowie als Transfermodus, der 'passive Modus' aktiviert werden.



    apache-Tricks (up)
    mittels dem apachectl script, kann man folgendes beim apache machen:

    startet den apache
    Code:
    /srv/apache2/bin/apachectl start
    
    stoppt den apache
    Code:
    /srv/apache2/bin/apachectl stop
    
    stop und startet den apache
    Code:
    /srv/apache2/bin/apachectl restart
    
    testet die aktuellen config-dateien vom apache ob sie okay sind und er so startet könnte
    Code:
    /srv/apache2/bin/apachectl configtest
    
    beenden und startet den apache erst dann neu wenn alle aktuellen verbindungen und downloads zuende sind
    Code:
    /srv/apache2/bin/apachectl graceful
    
    webalizer nutzen (up)
    um die webalizer-Statistiken zu aktualsisieren empfiehlt sich folgendes in ein Skript zu schreiben und per cronjob aufzurufen:
    Code:
    cd /htdocs/webalizer/
    /srv/webalizer/bin/webalizer -n "www.domain.tld" /srv/apache2/logs/access_log >> /scripts/logs/webalizer.log
    
    db-backup (up)
    Wie man mit der shell ein db-Backup machen kann wird in diesem Tutorial ausführlich beschrieben:
    -> [shell] datenbank backup per konsole



    shell-Skript zum starten (up)
    Ein solches Shell-Skript könnte zB so aussehen:
    Code:
    #!/bin/sh
    
    # proc
    mount -tproc proc /proc/
    
    # apache
    /srv/apache2/bin/lampp-apache2
    
    # cron
    /usr/sbin/lampp-cron
    
    # ftp
    /srv/pureftpd/sbin/lampp-ftp --tls=2 -0 stats:/srv/pureftpd/logs/pureftpd.log -S21 -l mysql:/etc/pure_ftpd/mysql.conf -A -E -D -c50 -C5 &
    
    # mysql
    /srv/mysql/libexec/lampp-mysql --log-error=/srv/mysql/logs/error.log -u lampp-mysql --port=3306 --socket=/tmp/mysql.sock &
    
    shell-Skript zum beenden (up)
    Das Skript um die komplette chroot zu beenden sieht so aus:
    Code:
    #!/bin/sh
    
    # proc
    umount /proc/
    
    # apache
    killall lampp-apache2
    
    # cron
    killall lampp-cron
    
    # ftp
    killall lampp-ftp
    
    # mysql
    killall lampp-mysql
    
    Jetzt solltet Ihr eigentlich in der Lage sein, eine LAMPP-chroot zu erstellen. Ich gehe allerdings davon aus, dass der Regelfall eintritt und Probleme auftauchen. Für diesen Fall - und auch für den Fall, dass ihr Fragen zu diesem Tutorial haben solltet, so schreibt bitte einen Beitrag im Server-Forum mit einem Verweis auf dieses Tutorial.
    Danke.

    Natürlich habe ich mir beim Erstellen dieses Tutorials große Mühe gegeben. Kleine Fehler lassen sich aber bei dem Umfang nicht immer vermeiden, auch wenn es schon vor der Veröffentlichung mehrfach von verschiedenen Personen getestet wurde.
    Weiterhin gibt es - auch für Kleinigkeiten - von euch möglicherweise gute Ideen, wie man das eine oder andere besser umsetzen oder vereinfachen könnte.
    Über Mitteilungen dieser Art bin ich dankbar.


    Ich hoffe, dass ich Euch hier etwas weiterhelfen konnte.

    Grüße Jann Hendrik



    Nachtrag:
    Es gibt inzwischen eine neuere Version der buildchroot:
    http://developer.berlios.de/project/...ease_id=135350
  • Neue Blog-Einträge

    Adventure-PHP-Framework 1.12 erschienen

    Ich bin bisher nicht dazu gekommen - und wollte eigentlich die beiden links nennen: :arrow: http://www.golem.de/1008/77097.html :arrow:...

    20.08.2010 16:09

    Britische Regierung hält am IE6 fest

    Man könnte auch sagen "Tot erhoffte leben länger" :arrow: http://www.golem.de/1008/77035.html Leider sind halt in vielen Unternehmen speziell an den IE angepasste Programme im Einsatz, die es...

    20.08.2010 16:12

    Hosting-Dienst GitHub erreicht Millionen-Marke

    Während ich persönlich noch immer gerne SVN einsetze, ist git gerade voll im Trend. GitHub hatte die Tage zu vermelden, dass es mehr als eine Million Softwareprojekte "unter seinem Dach" hat....

    20.08.2010 16:15

    Screenshot unter Windows vom aktiven Fenster erstellen

    Der Trend, nicht nur einen Bildschirm bei der Arbeit am PC zu verwenden ist imho vorhanden. Wer - wie ich - gerne zwischendurch einen screenshot macht, der dürfte sich ggf. manches Mal geärgert...

    20.08.2010 16:20

    ListView-Spalten Automatisch ausrichten

    Listviews begegnen uns eigentlich jeden Tag aufs neue bei der täglichen Arbeit. Genauso oft nervt es, wenn man z.b. im Explorer Spalten verschieben muss, um einen Dateinamen einer Datei vollständig...

    24.08.2010 13:10
  • Neue Beiträge

    Sekundentakt

    Hi,

    ich weiß nicht genau, wie Deine Subselects aussehen. Aber falls die sich so ähnlich formulieren lassen:

    Code:
    SELECT something
    

    CONCAT_WS mit LEFT JOIN

    Sekundentakt 01.09.2010 15:30 Gehe zum letzten Beitrag
    DasMööp

    *ohje ... Antwort: Subselect *rolleye, damit fällt dann der JOIN weg.

    CONCAT_WS mit LEFT JOIN

    DasMööp 31.08.2010 13:29 Gehe zum letzten Beitrag
    DasMööp

    Hallo,

    bei einer Abfrage von zwei Tabellen ist in einer in zwei Spalten je die ID der einen hinterlegt und diese brauche ich in der CONCAT.

    CONCAT_WS mit LEFT JOIN

    DasMööp 31.08.2010 12:17 Gehe zum letzten Beitrag
    floppy

    Hallo DEVWinC, Hallo Spezialisten,

    ich stehe zur Zeit auf dem gleichen Problem, bei mir gibts beim BartPE (XP) nur einen BlueScreen nach

    [Booten] ISO-Images mit Bootloader starten & BartPE

    floppy 31.08.2010 10:48 Gehe zum letzten Beitrag

Impressum · Tutorials · Nutzungsbedingungen · thematisch sortierte Linklisten · Spendenaufruf · Team · Partnerprojekte

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48