Facebook
Twitter
Google+
Kommentare
3

Einen eigenen PEAR-Channel nutzen

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

Über den Autor

Mike Lohmann

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.
Kommentare

3 Comments

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen