Main /

Ebuild selbst erstellen

Ebuild selbst erstellen

Ein gentoo ebuild selbst erstellen

Dies hier ist ein kleines Tutorial, wie ein ebuild das aus dem Internet kommt, aber nicht im Gentoo-Portage Tree vorhanden ist, installiert werden kann. Als Basis dient eine Demo-Ebuild-Datei - > Download hier

Das neue ebuild sollte im $(PORTDIR_OVERLAY) Verzeichnis gespeichert werden. In diesem Verzeichnis liegen die eigenen Ebuilds.
Noch kein Portage overlay vorhanden? Ok, dann richten wir schnell eins ein:

In /etc/make.conf ein Zeile hinzufügen:

PORTDIR_OVERLAY=/usr/portage-overlay

und dann natürlich dieses Verzeichnis anlegen:

mkdir /usr/portage-overlay

Der Name Verzeichnisname portage-overlay ist willkürlich, das Verzeichnis kann also theoretisch auch weisswurst oder klopapier genannt werden, solange es auch so in die make.conf eingetragen wird. Tests an Labormäusen haben aber ergeben, dass solche Verzeichnisnamen nicht sinnvoll sind.

Bei jedem emerge wird nun zusätzlich zu /usr/portage auch alles aus /usr/portage-overlay mit berücksichtigt. Allerdings erwartet emerge noch eine zusätzlich Verzeichnisebene für die Kategorien, genau wie sie im "echten" portage-tree /usr/portage/ auch existieren. Es muss also noch ein Unterverzeichnis angelegt werden. Das muss eines aus den in /usr/portage existierenden sein, andere Kategorienamen werden nicht akzeptiert. Wir haben uns hier für app-misc entschieden, das triffts am besten:

mkdir /usr/portage-overlay/app-misc

Das obige ebuild nun in /usr/portage-overlays/app-misc/EBuildDemo speichern. Und das ganze testen mit:

emerge EBuildDemo

Ausgabe:

 >>> emerge (1 of 1) app-misc/EBuildDemo-0.1-r1 to /
 !!! No package manifest found: /usr/portage-lla/app-misc/EBuildDemo/Manifest

Da mit *.ebuild Files Sourcecode automatisch aus dem Internet geholt werden kann, aber das Internet nicht so sicher ist wie viele glauben, gibt es zu jeder Datei eine Prüfsumme. Die Manifest Datei enthält die Prüfsummen. Stimmen die Prüfsummen nicht, verweigert emerge die Arbeit. Da wir aber eine eigene Datei haben und der vertrauen wollen und auch keine Manifest Datei haben, gibt es einen Parameter 'digest' für ebuild um alle benötigten Prüfsummen zu erstellen. Das ginge aber auch von Hand viel Spaß dabei...

 ebuild /usr/portage-overlay/app-misc/EBuildDemo/EBuildDemo-0.1.ebuild digest

Das erstellt jetzt alle Prüfsummen, so daß ebuild damit arbeiten kann, da auch vom *.tar.gz die Prüfsumme gebraucht erstellt wird, wird geprüft ob die Datei schon im distfiles Directory vorhanden ist und wenn nicht wird die Datei aus dem Internet geholt.

Jetzt ist die Manifest Datei da, die Prüfsummen sind gebuildet und die *.tar.gz Datei ist im distfiles Directory vorhanden

 MyPC ~Iam # emerge -s EBuildDemo
 Searching...
 [ Results for search key : EBuildDemo ]
 [ Applications found : 1 ]

 *  app-misc/EBuildDemo
      Latest version available: 0.1-r1
      Latest version installed: 0.1
      Size of downloaded files: 0 kB
      Homepage:    http://www.elsniwiki.de/index.php/Main/EbuildDemo
      Description: EBuildDemo is a simple demonstration how to create an own ebuild.
      License:     GPL-2
 emerge EBuildDemo

packt das tar.gz aus, baut es und installiert es in /usr/bin/EBuildDemo, ein EBuildDemo aus der Shell aufrufen, voila.

 MyPC EBuildDemo # EBuildDemo
 Hallo Stephan, little ebuild demonstration.

Wenn die Ausgabe erscheint, haben wir ein Overlay Directory, und können Prüfsummen für eigene ebuilds erstellen und diese per emerge installieren.

Vom Source zum ebuild

Das EBuildDemo kann als kleines Projekt angesehen werden. Dafür soll ein ebuild erstellt werden, so daß andere es in Gentoo einfachst per emerge EBuildDemo installieren können. Die EBuildDemo Sourcen bestehen aus einem Makefile und einer C++ Datei hello.cc

Inhalt kurz: Ein kleines C++ Programm und ein Makefile, das Makefile kann mittels make das C++ Programm übersetzen, der Text im Source stimmt nicht mit der Ausgabe überein, zur weiteren Demonstration ist im ebuild ein Patch mittels sed vorgenommen worden. winking smiley

Projekt packen

Die beiden eben genannten Dateien stehen jetzt z.B. in einem Projekt-Verzeichnis, daraus machen wir ein *.tar.gz. Gentoo ebuilds haben fast immer eine Revisionsnummer im Dateinamen. Ein

tar czf EBuildDemo-0.1.tar.gz Projekt

hätte sowas zwar auch, aber beim Auspacken mittels tar xzf * wird in das Verzeichnis Projekt entpackt, wir wollen aber unser Projekt nicht jedesmal umbenennen nur weil für andere eine neue Revision entsteht, also kann man mit einem Softlink arbeiten.

Ein Softlink erstellen mit ln -s Projekt EBuildDemo?-0.1 und beim packen den Parameter -h nicht vergessen.

tar chzf EBuildDemo-0.1.tar.gz EBuildDemo-0.1

Troubleshooting

Sollte sich die Datei EbuildDemo-0.1.tar.gz nicht richtig downloaden lassen, hat man in GENTOO_MIRRORS vermutlich einen Server drin, der nicht nur eine Fehlernummer sondern auch eine Fehlermeldungsdatei liefert, den am besten gleich aus GENTOO_MIRRORS entfernen. ftp.tu-clausthal.de ist so einer frowning smiley.

Das *.tar.gz file kann auch von Hand geholt, und nach /usr/portage/distfiles kopiert werden. md5sum -b liefert: bf6f26c6aa12170d45d95e4476756b2b

Fragen? ja, mir fehlt die Brücke vom ebuild-demo zu einem eigenen Projekt, z.B. wie definiere ich die Abhängigkeiten?
Wäre cool, wenn wir mal irgendwann mal eine seite machen könnten, die wie ein Tutorial beschreibt wie man unter Linux ein C++-Projekt erstellt (makefile, automake configure usw.), es in CVS bzw. Subversion verwaltet (als Referenz kann man dann immer noch auf die CVSBentzen? Seite linken) und daraus ein ebuild macht. Am besten an Hand eines Beispielprojektes, das mindestens eine Abhängigkeit hat, also z.B. ein kleines ncurses "Hallo-Welt" Programm oder so. Machen wir.

Frische Änderungen | Menü editieren
zuletzt geändert am 06.03.2006 14:06 Uhr von Lars
Edit Page | Page History