• Einen eigenen PEAR-Channel nutzen

    von am 3. Dezember 2009
    Dieser Artikel wurde auf Wunsch der phphatesme Leser verfasst und wurde über die Ideenschmiede eingereicht. Falls du auch eine Idee für einen Artikel hast, dann füge sie doch einfach hinzu.

    Viele PHP Entwickler kennen PEAR (PHP Extension and Application Repository) und PECL (PHP Extension Community Library) zur einfachen Installation von PHP-Sourcen, bzw. PHP-Erweiterungen in C. Wenn man schon öfter das Problem hatte eine bestimmte Version einer Klassensammlung “global” in mehreren Projekten zur Verfügung zu stellen, kann PEAR eine Lösung sein.

    Dazu kann man einen eigenen PEAR-Channel aufbauen. Ich habe mich hier für Chiara entschieden, weil es recht einfach geht. _Vor_ der Installation sollte man aber immer darüber nachdenken, was man genau braucht. Hat man mehrere Projekte mit der Anforderung unterschiedliche Versionen der “globalen” Klassensammlung zu nutzen ist eventuell svn:externals besser als ein eigener PEAR-Channel.

    Falls man also zu dem Schluss gelangt, dass es gut sein könnte, seinen eigenen Channel zu haben werde ich mal die Installation und In-Betriebname kurz erläutern.

    Zur Installation:

    Die Installation des Chiara-PEAR-Channel funktioniert über PEAR selbst. Das ist sehr schön. Dazu muss natürlich PEAR installiert sein.
    Das kann man einfach über:

    pear config-show

    testen. Wenn das fehl schlägt sollte man mal in der Doku von PEAR schauen, wie man PEAR installiert. Falls alles gut geht, dann kann man zur Installation das Script nehmen, das alle notwendigen Files lädt und das Chiara – Installationsprogramm aufruft:


    #!/bin/bash
    #writepath is the directory to your homedir
    WRITEPATH=~;
    echo "Writepath = $WRITEPATH";
    cd $WRITEPATH;
    pear config-show;
    echo "press return if ok";
    read
    echo "Discovering chiara pear channel";
    pear channel-discover pear.chiaraquartet.net

    #####
    echo "Installing Packages from Pear"
    for pearpackageinst in  "MDB2-2.5.0b2" "MDB2_Driver_mysqli-1.5.0b2" "MDB2_Driver_mysql-1.5.0b2" "DB-1.7.13" "Date-1.5.0a1" "Validate-0.8.2" "DB_DataObject-1.8.11" "XML_Parser-1.3.2" "XML_DTD-0.5.2" "XML_Seria
    echo "Install: $pearpackageinst";
    pear install http://download.pear.php.net/package/"$pearpackageinst".tgz;
    if [ $? -gt 0 ];then
    echo "failed downloading "$pearpackageinst;
    fi
    done
    ########

    echo "Installing Packages from Chiara";
    for chiarapackageinst in "Chiara_PEAR_Server-0.20.0" "Chiara_PEAR_Server_Web-0.4.5" ;do
    echo "Install: $chiarapackageinst";
    pear install channel://pear.chiaraquartet.net/"$chiarapackageinst";
    if [ $? -gt 0 ];then
    echo "failed downloading "$chiarapackageinst;
    fi
    done;

    ###
    echo "Please enter the correct values for mysql"
    pear run-scripts chiara/Chiara_PEAR_Server
    echo "now you should be able to use the pear environment"
    exit 0;

    Die Installation sollte sehr smooth und einfach verlaufen. Ein paar Fehlermeldungen können kommen, wenn ihr bestimmte Pakete schon installiert habt. Das sollte aber nicht weiter schlimm sein. Wichtig ist hier jetzt, dass man ein mysql-Passwort angeben muss. Leere Passworte werden nicht akzeptiert. Falls man alles schon installiert hat kann man einfach:

    pear run-scripts chiara/Chiara_PEAR_Server

    nochmal aufrufen und bekommt den Einrichtungsdialog nochmal angezeigt.

    Wenn also der Channel installiert ist kann man nun über z.B.: die URL http://chiara.meinedomain.com auf das Admininterface zugreifen. Jetzt werden sich viele Fragen: “Und nu?!”. Zu recht. Wir haben zwar jetzt einen Channel aber noch keinen Inhalt den wir verteilen könnten. Den müssen wir also erstmal erstellen. Das machen wir, in dem wir Pakete bauen. Diese Pakete sind .tar.gz – Files mit einer s.g. package.xml drin. Diese Datei beschreibt dem pear installer (auf dem Zielsystem) wo, welche Dateien hin kopiert werden sollen.

    Ich nutze für meinen Channel das folgende Script. Zuerst muss über die Variablen CHIARADOMAIN, CHIARAADMINUSER und CHIARAADMINPASS festelegt werden, wie die Zugangsparameter zum eben installieren Chiara-Channel sind. Anschließend wird über den Parameter <packageName> ein Verzeichnis in /tmp angelegt, in das die aktuelle Version der Sourcen ausgescheckt werden. Dann wird die package.xml erstellt, das Paket gepackt und über CURL an den Server geladen.

    Man muss sich also keine Gedanken mehr darüber machen, wie man Paket installiert.


    #!/bin/bash

    CHIARADOMAIN="http://chiara.meinedomain.com/index.php"
    CHIARAADMINUSER="admin"
    CHIARAADMINPASS="test"

    #declare help message
    #@return int 0 (true);
    function showhelp()
    {
    echo "-h help message";
    echo "-v be verbose";
    echo "Usage: `basename $0` [-v|-h] <packageName> <svnuser> <svnpass> <svnurl> <svntag>";
    return 0;
    }

    function echovmessage()
    {
    if [ $verboseMode ];then
    echo "$1";
    fi
    return 0;
    }
    svnenable=1;

    #show help if required
    if [ "$1" == "-h" ];then
    showhelp;
    exit 0;
    fi

    #set verboseMode based on input param
    if [ "$1" == "-v" ];then
    verboseMode=1;
    packageName="$2";
    svnUser="$3";
    svnPass="$4";
    svnURL="$5";
    svnTag="$6";
    else
    verboseMode=0;
    packageName="$1";
    svnUser="$2";
    svnPass="$3";
    svnURL="$4";
    svnTag="$5";

    fi

    #if second argument (packageName) is not set, show help and exit with error
    if [ -z "$packageName" -o -z "$svnUser" -o -z "$svnPass" -o -z "$svnURL" ];then
    showhelp;
    exit 1;
    fi

    #for the svnTagStuff
    if [ -n "$svnTag" ];then
    svnCommand="svn export -r $svnTag";
    else
    svnCommand="svn export";
    fi

    #goto currentusershomedir
    echovmessage "Go to pearsourcerepository dir";
    mkdir /tmp/pearsourcerepository;
    cd /tmp/pearsourcerepository;

    echovmessage "Create package directory structure";
    echovmessage "mkdir '$packageName'Source/'$packageName'/'$packageName'";
    mkdir -p "$packageName"Source/"$packageName";

    echovmessage "Enter created dir";
    cd "$packageName"Source/"$packageName";

    echovmessage "Remove everything instead of package.xml";
    if [ -d ../"$packageName" ];then
    mv ./package.xml ../;
    rm -rf ./*;
    mv ../package.xml ./;
    fi

    echovmessage "svn checkout";
    $svnCommand --force --username $svnUser --password $svnPass $svnURL .;

    echovmessage "Create '$packageName' - subdir";
    mkdir "$packageName";

    echovmessage "mv everything to subdir";
    mv * "$packageName";

    echovmessage "mv  package.xml back";
    mv "$packageName"/package.xml .;

    echovmessage "execute pfm in current dir";
    pfm;
    if [ $? -gt 0 ];then
    echo "Please install pfm:";
    echo "pear install PEAR_PackageFileManager_Cli-0.3.0";
    exit 1;
    fi

    echovmessage "create the pear package from within package.xml created by pfm";
    pear package package.xml

    if [ $? -gt 0 ];then
    echo "Something is wrong with the packet creation";
    echo "Exiting";
    exit 1;
    fi

    echo "OK. Package is created.";
    echo "loading up now....";
    #add upload to CHIARADOMAIN
    uploadFile=`ls "$packageName"*.tgz`;

    echo "Login as admin to pear channel";
    curl -d "login=Submit&password="$CHIARAADMINPASS"&user="$CHIARAADMINUSER --cookie-jar /tmp/cookieCurl -s $CHIARADOMAIN > /dev/null;

    echo "Loading up the file formally created";
    curl -F release=@"$uploadFile" -F submitted=1 -F f=0 -F filename="$uploadFile"  --cookie /tmp/cookieCurl $CHIARADOMAIN > /tmp/uploadCheck;

    echo "Now YOU have to check if the upload was successfull";
    lynx /tmp/uploadCheck;

    echo "Deleting Session Cookie File";
    rm -f /tmp/installosCookieCurl;
    rm -f /tmp/uploadCheck;

    echo "Deleting created .tgz";
    rm -f *.tgz

    exit 0;

    Als nächstes kann ich dann testen ob mein Paket verfügbar ist. Dazu rufe ich einfach pear auf:


    pear channel-discover channel://chiara.meinedomain.com
    pear install chiara/<Paketname>

    Und nun sollte das Paket geladen werden.
    Ich wünsche viel Spaß mit PEAR.

    Buch-Tip: http://www.amazon.de/PHP-PEAR-Anwendung-Entwicklung-PHP-Programmierung/dp/3898425800
    PEAR-Manpage: http://pear.php.net/manual/de/index.php
    Package.xml – Example: http://icl.cs.utk.edu/projectsfiles/rest/package_maker_guide/rn02re39.html

    Mike Lohmann arbeitet zur Zeit als Software Architekt beim Verlag Gruner+Jahr AG & Co KG. Er arbeitet seit 1998 im IT-Bereich und seit 2000 im Bereich Webentwicklung.

    Zum Profil von Mike Lohmann

    3 Kommentare »


    • Sebastian Bergmann
      am 3. Dezember 2009 um 08:24 Uhr

      Alternativ kann man Pirum (http://www.pirum-project.org/) verwenden.


    • Mike Lohmann
      am 3. Dezember 2009 um 14:40 Uhr

      Stimmt. Das sieht sehr gut aus. Vielen Dank für die Info.


    • Sebastian
      am 4. Dezember 2009 um 20:59 Uhr

      Schade nur, das ich zu blöd bin, was Server und Konsole angeht^^Muss mir das mal aneignen.

    RSS Feed für Kommentare zu diesem Artikel. TrackBack URL

    Hinterlasse einen Kommentar

    Werbung
    PHP Magazin
    Ausgabe 02/2010

    Dieses Mal mit Artikeln zu den Themen OpenSocial und Apache Shindig, Graphentheorie, Smarty3

    t3n
    Ausgabe 19

    Social Media (R)evolution. Weitere Themen sind noSQL, Crowdsourcing ...

    PHP Journal
    Ausgabe 2/2010

    PHP & Windows optimal nutzen, die besten PHP-CMS im Überblick, Google-API mit Zend Framework nutzen.

    Wir wurden schon öfters gefragt, ob man uns nicht irgendwie unterstützen kann. Die Antwort war immer einfach: Klar! Am einfachsten ist es eure nächsten Einkäufe bei Amazon über unsere Link abzuwickeln. Damit würdet ihr uns schon sehr helfen. Über Co-Autoren freuen wir uns aber noch mehr.