Mit UPKG ein Paket erstellen und installieren

From Paldo

Jump to: navigation, search

Diese Anleitung erklärt Euch, wie Ihr ein Source-Paket mit Upkg für Paldo erstellt und installieren könnt.

Die Paldo-Philosophy ist ja, ein Programm für eine Aufgabe. Nur manchmal ist man auf ein Programm angewiesen oder will ein bestimmtes seinem Paldo-System hinzufügen. Mit Upkg und einer lokalen Repository ist dies kein Problem.

Erstellung einer lokalen Paldo Repository

Zuerst benötigen wir eine Ordnerstruktur, wohin wir unsere Sourcen packen. Wo sich diese Struktur befindet ist egal. Ich hab meine im Home-Ordner.

  [amnon@amsoft:~]$mkdir PaldoRepo
  [amnon@amsoft:~]$mkdir PaldoRepo/binaries
  [amnon@amsoft:~]$mkdir PaldoRepo/sources
  [amnon@amsoft:~]$mkdir PaldoRepo/specs

Nun müssen wir Upkg noch mitteilen, wo es die Repository findet. Editiere Deine /etc/upkg.conf als Root. Sie sollte dann zum Beispiel so aussehen:

  $ su
  Password: enter your root password
  #  sed -i -e 's%<repositories>%&\n<repository>Pfad zu Deiner lokalen Repository</repository>%' /etc/upkg.conf

Sich die Quellcode eines Programms besorgen

Nun ladest Du die Source von dem Programm herrunter, welches Du installieren möchtest. Ich nehme für dieses Beispiel den " Tarball von gFTP her. Upkg benötigt das Source-Archiv als tar (tar-Datei) oder als tar.bz2-Datei (bzip2 komprimierte tar-Datei). Seit der Version 0.236 werden auch tgz-Archive unterstützt. Achte darauf, dass das Source-Archiv das entsprechende Dateiformat hat. Kopiere es dann in den sources-Ordner Deiner lokalen Repository.

Upkg wird das Paket nur finden, wenn Du's unter $REPOSITORYVERZEICHNIS/sources/$PaketNAME speicherst.

Da mein Archiv sich gftp-2.0.18.tar.bz2 nennt, belasse ich es dabei und werde das Paket gftp nennen.

 [amnon@amsoft:~/sources/gftp]ls gftp-2.0.18.tar.bz2
 [amnon@amsoft:~/sources/gftp]mv gftp-2.0.18.tar.bz2 ~/PaldoRepo/sources/gftp/

Falls Du doch tar.gz benutzen willst, musst Du diese Kompression Upkg mitteilen:

<archive name="gftp-$VERSION" compression="gz">

Ist Dein Archiv ein tgz-Archiv und Du hast mindestens die Version 0.236 von UPKG installiert kannst Du UPKG dies folgendermaßen mitteilen:

<archive name="gftp-$VERSION" type="tgz">

Dann würde UPKG nach gftp-2.0.18.tgz suchen.

Buggy Packaging

Manchmal gibt es falsch gepackte Archive. Ein Beispiel:

  ./foo-1.0/bar

Um den Pfad bar zubekommen kannst Du nun folgendes machen um dies zu erreichen:

<archive strip="2" name="foo-$VERSION" type="tgz">

Es ist auch mal notwendig strip komplett zu entfernen. Dies geht mit:

<archive strip="0" name="lazarus-$VERSION">

Dies ist notwendig wenn das Paket keinen Hauptordner hat und alle Dateien die benötigt werden einfach in ein Archiv gepackt wurden. Siehe lazarus

strip="1" ist standard somit müsst Ihr es nicht aufführen.

Erstellung der Spec-Datei für Upkg

Nun müssen wir Upkg mitteilen, wie der Paketmanager mit dem Quellcode umgehen soll. Dies geschieht durch eine simple XML-Datei. Der Name des Titels sollte der Paketname sein. Im Beispiel ist dieser gftp. Die Datei schaut wie folgt aus:

  <?xml version="1.0"?>
  <package name="gftp">
  	<description>GNOME FTP Client</description>
  	<releases>
  		<release version="2.0.18" revision="1" branch="testing">
  			<build>
  				<script>
  					<archive name="gftp-$VERSION">
  						<cmd>./configure --prefix=/usr --mandir=/usr/share/man --disable-textport</cmd>
  						<cmd>make -j 2</cmd>
  						<cmd>make install</cmd>
  					</archive>
  				</script>
  			</build>
  		</release>
  	</releases>
  </package>

Diese Datei wird dann in den specs-Ordner als gftp.xml gespeichert. Upkg benötigt die .xml-Endung, da es sonst das Paket nicht finden würde.

Falls Dein Paket Abhängigkeiten zu anderen Paket hat sieht die XML-Datei so aus:

  <?xml version="1.0"?>
  <package name="PaketNAME">
  	<description>PaketBESCHREIBUNG</description>
  	<releases>
  		<release version="VERSIONSNUMMER" revision="1" branch="stable">  
  			<deps>
  				<dep name="ABHÄNGIGKEITSNAME"/>
  				<dep name="ABHÄNGIGKEITSNAME"/>
  			</deps>                          
  			<build>
  				<script>
  					<archive name="PaketNAME-$VERSION">
  						<cmd>./configure --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --sysconfdir=/etc</cmd>
  						<cmd>make</cmd>
     						cmd>make install</cmd>
  					</archive>
  				</script>
  			</build>
  		</release>
  	</releases>
  </package>

Schaut auf unsere Hompage, um die Namen der Abhängigkeiten (Dependencies) herauszubekommen:

Hier ein Beispiel:

  <deps>
     <dep name="libgnomeui-2.0"/>
     <dep name="gtk+-2.0"/>
     <dep name="glib-2.0"/>
     <dep name="libglade-2.0"/>
     <dep name="gstreamer-0.8"/>
  </deps>

Wie man die Abhängigkeiten herausbekommt:

  • Lese die Datei configure.in oder configure.ac in der Source-Distribution. Du wirst zum Beispiel diese Zeile finden: PKG_CHECK_MODULES(GNOME, libgnomeui-2.0 gtk+-2.0 >= 2.4.0 glib-2.0 >= 2.4.0 libglade-2.0 gstreamer-0.8,,exit). In diesem Fall ist es recht einfach die Abhängigkeiten herauszubkommen. Sie sind alle in der PKG_CHECK_MODULES-list gelistet. Paldo benutzt meist die gleichen Paketnamen. libgnomeui-2.0 ist in der Paldo-Repository auch unter libgnomeui-2.0 gelistet.
  • Ließ die README, INSTALL,... Dateien. Manche Projekte listen dort die Abhängigkeiten auf.
  • Kopiers von einer anderen Distribution. Falls nichts hilft kannst Du immer noch bei anderen Distributions nachschauen, was die für eine Abhängigkeitsliste haben.

Die finale gftp.xml würde so aussehen:

  <?xml version="1.0"?>
  <package name="gftp">
  	<description>GNOME FTP Client</description>
  	<releases>
  		<release version="2.0.18" revision="1" branch="testing">
  			<settings>
  				<environment name="LDFLAGS">$LDFLAGS -Wl,--as-needed</environment>
  			</settings>
  			<deps>
  				<dep name="glib-2.0"/>
  				<dep name="gtk+-2.0"/>
  				<dep name="openssl"/>
  			</deps>
  			<build>
  				<script>
  					<archive name="gftp-$VERSION">
  						<cmd>./configure --prefix=/usr --mandir=/usr/share/man --disable-textport</cmd>
  						<cmd>make -j 2</cmd>
  						<cmd>make install</cmd>
  					</archive>
     				</script>
  			</build>
  		</release>
  	</releases>
  </package>

Starten der Compilierung und Installation

Nun sind wir bereit das Paket zu compilen und das Programm somit zu installieren. Folgendes Kommando startet das Ganze:

  [amnon@amsoft:~]#su
  [amnon@amsoft:~]#password:
  [root@amsoft:~]# upkg-build gftp
  Generating script...
  Writing script...
  Executing script...
  The following extra packages will be installed:
  gftp
  The following packages will be built from source:
  gftp
  
  Do you want to continue? [Y/n]
  Building gftp-2.0.18-1 (stable)...
  [root@amsoft:~]#

Wenn Du die Meldungen der Compilierung sehen willst starte die Installation mit:

  [root@amsoft:~]# upkg-build --verbose gftp

Um das Paket wieder zu entfernen führe folgendes Kommando aus:

  [root@amsoft:~]# upkg-remove gftp

Somit ist das Paket dann restlos von Deinem System deinstalliert.

[edit] Spec-Template

  <?xml version="1.0"?>
  <package name="PaketNAME">
  	<description>PaketBESCHREIBUNG</description>
  	<releases>
  		<release version="VERSIONSNUMMER" revision="1" branch="testing">  
  			<deps>
  				<dep name="ABHÄNGIGKEITSNAME"/>
  				<dep name="ABHÄNGIGKEITSNAME"/>
  			</deps>                          
  			<build>
  				<script>
  					<archive name="PaketNAME-$VERSION">
  						<cmd>./configure --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --sysconfdir=/etc</cmd>
  						<cmd>make -j 2</cmd>
     						<cmd>make install</cmd>
  					</archive>
  				</script>
  			</build>
  		</release>
  	</releases>
  </package>
Personal tools