# Gepackte Dateien zu ebuild konvertieren?

## Battlestar Gentoo

Hallo,

gibt es eigentlich eine Möglichkeit, gepackte Dateien, bzw Sourcecode mithilfe der configure- und make-Files zu einem ebuild zu konvertieren. Ich bilde mir ein schon mal davon gelesen zu haben, kann aber keine Information mehr darüber finden. Weiß jemand etwas darüber?

----------

## Pegasus87

Hmm, ich kann mir nicht vorstellen, dass das so einfach ist...

Ebuilds sollten schon von Hand geschrieben werden, damit auch schwierige Abhängigkeiten richtig aufgelöst werden können. Guck dir doch ein einfach ebuild an und versuchs dann auf deinen Sourcecode zu übertragen.

----------

## STiGMaTa_ch

Wie sollte das gehen? Ein ebuild macht nichts weiter als die Schritte des kompilierens zu automatisieren. 

Das bedeutet aber nicht:

1.) Runterladen

2.) entpacken

3.) kompilieren

fertig

Sondern Ein ebuild macht vieles mehr. z.B. nötige Patches einspielen (Beispiel: Programm X hat hardcoded /usr/local/bin/xxx drinn, ein Patch passt dies auf  /usr/bin/xxx an.) oder benötigte Verzeichnisse erstellen, Rechte setzen, Configdateien kopieren oder anhand der Systemumgebung spezielle Configs erzuegen, eventuell benötigte Benutzer erstellen, chroot Umgebungen zusammenstellen und, und und...

Ganz nebenbei führt es dann auch noch die entsprechenden ./configure -xx -yy oder make Befehle durch. Und je nachdem wieviele Optionen du da geben kannst muessen USE Flags dafür benutzt werden.

Also nochmals die Frage; wie sollte das gehen? Wie soll irgend ein Script wissen welches Tar File welchen Patch, welchen User, welche Verechtigungen etc. benötigt?

Gehen würde das schon, jedoch würdest du dann einen Script/ein Programm erstellen, dass die selben Infos wie ein ebuild enthält. Wozu dann aber doppelspurig fahren?

Lieber Gruss

STiGMaTa

----------

## Mr.Big

ich denke er sucht  etwas in der Art von: 

http://www.thedarkproject.de/main.php?page=projects&sub=mkebuild-ng&PHPSESSID=4a117679a2780920aa1bc71ff6b9f60f

----------

## Battlestar Gentoo

Ebuilds sollten schon von Hand geschrieben werden, damit auch schwierige Abhängigkeiten richtig aufgelöst werden können. Guck dir doch ein einfach ebuild an und versuchs dann auf deinen Sourcecode zu übertragen.

Das ist nicht so einfach, da es nicht mein Programm ist. Ich will dieses Programm (http://www.tkgate.org/) aber nicht manuell installieren und Dateien, die ich nicht mehr raus bekomme, im halben System verstreut haben.

@Stigmata

Das sollte doch technisch kein Problem sein, obwohl viele Faktoren zu berücksichtigen sind. 

ich denke er sucht etwas in der Art von: http://www.thedarkproject.de/main.php?page=projects&sub=mkebuild-ng&PHPSESSID=4a117679a2780920aa1bc71ff6b9f60f

Im Prinzip ja, nur scheint es nicht im gentoolkit- oder gentoolkit-dev-Paket enthalten zu sein, da es wahrscheinlich noch "alpha unstable" ist.

----------

## schmutzfinger

mhh... 

https://bugs.gentoo.org/show_bug.cgi?id=110277

----------

## musv

 *Battlestar Gentoo wrote:*   

> 
> 
> Das ist nicht so einfach, da es nicht mein Programm ist. Ich will dieses Programm (http://www.tkgate.org/) aber nicht manuell installieren und Dateien, die ich nicht mehr raus bekomme, im halben System verstreut haben.
> 
> 

 

Dafür gibt's

```
make uninstall
```

----------

## UncleOwen

Was spricht gegen selbst ebuild schreiben? Wenns wirklich nur ./configure; make; make install ist, dann ist das ebuild ziemlich trivial.

----------

## b3cks

 *UncleOwen wrote:*   

> Was spricht gegen selbst ebuild schreiben? Wenns wirklich nur ./configure; make; make install ist, dann ist das ebuild ziemlich trivial.

 

Wie schmutzfinger bereits verlinkt hat, gibt es bereits ein ebuild. Also muss man sich noch weniger mühe machen.

Vielleicht noch an die aktuelle Version anpassen, ab ins Overlay und gut.

----------

## Battlestar Gentoo

Naja, offensichtlich scheint es beim Installieren doch noch ziemliche Problem zu geben:

```
root@gentoo files # emerge tkgate

Calculating dependencies... done!

>>> Emerging (1 of 1) sci-electronics/tkgate-1.8.5 to /

 * tkgate-1.8.5.tgz MD5 ;-) ...                                           [ ok ]

 * tkgate-1.8.5.tgz RMD160 ;-) ...                                        [ ok ]

 * tkgate-1.8.5.tgz SHA1 ;-) ...                                          [ ok ]

 * tkgate-1.8.5.tgz SHA256 ;-) ...                                        [ ok ]

 * tkgate-1.8.5.tgz size ;-) ...                                          [ ok ]

 * checking ebuild checksums ;-) ...                                      [ ok ]

 * checking auxfile checksums ;-) ...                                     [ ok ]

 * checking miscfile checksums ;-) ...                                    [ ok ]

 * checking tkgate-1.8.5.tgz ;-) ...                                      [ ok ]

>>> Unpacking source...

>>> Unpacking tkgate-1.8.5.tgz to /var/tmp/portage/tkgate-1.8.5/work

 * Applying tkgate-1.8.5-imake-error.patch ...                            [ ok ]

>>> Source unpacked.

>>> Compiling source in /var/tmp/portage/tkgate-1.8.5/work/tkgate-1.8.5 ...

./configure --prefix=/usr --host=i686-pc-linux-gnu --mandir=/usr/share/man --infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc --localstatedir=/var/lib --build=i686-pc-linux-gnu

C compiler: gcc

Auto-configuring language to 'en' (LANG=de_AT@euro).

Tcl/Tk Version: 8.4

Configuring for Western language support.

Tcl script files found in: /usr/X11R6/lib/tcl8.4

Tk script files found in: /usr/X11R6/lib/tk8.4

bison found

flex found

lex test OK.

yyrestart found.

found X11/Xlib.h in: /usr/X11R6/include

long long supported

getopt does not use optreset.

getopt ok

*** updating config.h

tail: »+377« kann nicht zum Lesen geöffnet werden: Datei oder Verzeichnis nicht gefunden

*** doing xmkmf

In Datei, eingefügt von ./Imakefile:19,

                 von /usr/lib/X11/config/Imake.tmpl:2194,

                 von Imakefile.c:35:

./config.h:385: Fehler: #endif ohne #if

./config.h:387: Fehler: #endif ohne #if

imake: Exit code 1.

  Stop.

In Datei, eingefügt von ./Imakefile:2,

                 von /usr/lib/X11/config/Imake.tmpl:2194,

                 von Imakefile.c:35:

./../../config.h:385: Fehler: #endif ohne #if

./../../config.h:387: Fehler: #endif ohne #if

imake: Exit code 1.

  Stop.

In Datei, eingefügt von ./Imakefile:18,

                 von /usr/lib/X11/config/Imake.tmpl:2194,

                 von Imakefile.c:35:

./../../config.h:385: Fehler: #endif ohne #if

./../../config.h:387: Fehler: #endif ohne #if

imake: Exit code 1.

  Stop.

In Datei, eingefügt von ./Imakefile:2,

                 von /usr/lib/X11/config/Imake.tmpl:2194,

                 von Imakefile.c:35:

./../../config.h:385: Fehler: #endif ohne #if

./../../config.h:387: Fehler: #endif ohne #if

imake: Exit code 1.

  Stop.

In Datei, eingefügt von ./Imakefile:18,

                 von /usr/lib/X11/config/Imake.tmpl:2194,

                 von Imakefile.c:35:

./../../config.h:385: Fehler: #endif ohne #if

./../../config.h:387: Fehler: #endif ohne #if

imake: Exit code 1.

  Stop.

*** doing includes

Makefile:8: *** missing separator.  Schluss.

*** doing dependencies

Makefile:8: *** missing separator.  Schluss.

*************************************************************

Configuration Results:

  Language Support: Western (English and European)

  C Compiler:       gcc

  Tcl/Tk Version:   8.4

  Library Path:      -L/usr/X11R6/lib

  Include Path:      -I/usr/X11R6/include

  Libraries:         -ltk8.4 -ltcl8.4 -lX11 -ldl -lnsl -lm

  Primary Home:     /usr/X11R6/lib/tkgate-1.8.5

  Secondary Home:   /var/tmp/portage/tkgate-1.8.5/work/tkgate-1.8.5

  optreset usage:   0

  long long usage:  1

  Ephemeral Signal: 1

  Use sigset:       0

  Yacc:             bison -y

  Lex:              flex -l

  No yyrestart:     0

*************************************************************

* Configuration complete - type 'make' to compile.

*************************************************************

Makefile:8: *** missing separator.  Schluss.

!!! ERROR: sci-electronics/tkgate-1.8.5 failed.

Call stack:

  ebuild.sh, line 1546:   Called dyn_compile

  ebuild.sh, line 937:   Called src_compile

  tkgate-1.8.5.ebuild, line 26:   Called die

!!! (no error message)

!!! If you need support, post the topmost build error, and the call stack if relevant.

!!! This ebuild is from an overlay: '/usr/local/portage_overlay'

```

Sieht für mich so aus, als ob das Make-File fehlerhaft wäre.

----------

## franzf

Schau mal die Kommenatre in dem Bug:

1) gibts mittlerweile tkgate-1.8.6

2) Dafür hat schon wer ein patch für das tail-Problem bereitgestellt.

Einfach das ebuild kopieren, wie angegeben eine Zeile hinzufügen (epatch ...), den Patch runterladen und ins files-directory

Dann klappt es hoffentlich  :Wink: 

Grüße

Franz

----------

## Battlestar Gentoo

Naja, es fängt zumindest schon mal an zu kompilieren, aber nach ca einer Minute passiert das hier:

```
gmac.c:29:21: Fehler: grammar.h: Datei oder Verzeichnis nicht gefunden

gmac.c: In Funktion »Code_generate«:

gmac.c:719: Fehler: »MICROCODE« nicht deklariert (erste Benutzung in dieser Funktion)

gmac.c:719: Fehler: (Jeder nicht deklarierte Bezeichner wird nur einmal aufgeführt

gmac.c:719: Fehler: für jede Funktion in der er auftritt.)

gmac.c: In Funktion »main«:

gmac.c:843: Fehler: »MACROCODE« nicht deklariert (erste Benutzung in dieser Funktion)

gmac.c:844: Fehler: »MICROCODE« nicht deklariert (erste Benutzung in dieser Funktion)

gmac.c:845: Fehler: »MAP« nicht deklariert (erste Benutzung in dieser Funktion)

make[1]: *** [gmac.o] Fehler 1

make[1]: Leaving directory `/var/tmp/portage/tkgate-1.8.6/work/tkgate-1.8.6/src/gmac'

make: *** [all] Fehler 2

!!! ERROR: sci-electronics/tkgate-1.8.6 failed.

Call stack:

  ebuild.sh, line 1546:   Called dyn_compile

  ebuild.sh, line 937:   Called src_compile

  tkgate-1.8.6.ebuild, line 31:   Called die

!!! emake failed

!!! If you need support, post the topmost build error, and the call stack if relevant.

!!! This ebuild is from an overlay: '/usr/local/portage_overlay'

```

----------

## Finswimmer

Dann such mal, in welchem Paket die grammar.h ist. Installiere es, und sag es dem Bug.

Tobi

----------

## xillix

 *Quote:*   

> Battlestar Gentoo hat Folgendes geschrieben:
> 
> Das ist nicht so einfach, da es nicht mein Programm ist. Ich will dieses Programm (http://www.tkgate.org/) aber nicht manuell installieren und Dateien, die ich nicht mehr raus bekomme, im halben System verstreut haben.
> 
> Dafür gibt's
> ...

 

make uninstall ist aber, soviel ich weiß nicht bei jedem tarball möglich und deshalb für mich keine gute Lösung, wenn überhaupt eine.Viel lieber wär mir aus einem .tbz2 oder .targz selbst ein Binärpaket erstellen zu können, sowie unter Debian mit checkinstall -D <packet> das ja auch möglich ist.

Ich hab da mal was von quickpkg und buildpkg gehört, weiß aber nicht wie ich damit mit einem .tbz2 umgehen soll - hab leider noch keine passenden docs dafür gefunden  :Sad:  , doch falls es damit möglich ist, wär es zumindest ein einfacherer Weg, als selbst ein ebuild zu schreiben.

Wenn jemand welche kennt, wäre ein link dorthin ganz hilfreich...

lg xillix

----------

## SinoTech

 *xillix wrote:*   

> 
> 
> [...]
> 
> Ich hab da mal was von quickpkg und buildpkg gehört, weiß aber nicht wie ich damit mit einem .tbz2 umgehen soll - hab leider noch keine passenden docs dafür gefunden  , doch falls es damit möglich ist, wär es zumindest ein einfacherer Weg, als selbst ein ebuild zu schreiben.
> ...

 

Beides benötigt ein funktionierendes ebuild. "quickpkg" erstellt dir aus einem bereits installierten Paket ein tbz2 Archiv (Also ein binärpaket) das dann bei einem erneuten emergen benutzt werden kann (in dem Fall würde dann das erneute kompilieren wegfallen). Aber wie gesagt, das Paket muss bereits installiert sein.

1. Paket emergen

```

$ emerge foo

```

2. tbz2 Archiv erstellen

```

$ quickpkg foo

```

3. Paket neu installieren unter Verwendung des vorher erstellten Archivs

```

$ emerge foo --usepkg

```

Das "--buildpkg" Flag , das dir emerge bereitstellt, erstellt dir nachdem kompilieren der Sources ein tbz2 Archiv. Kommt praktisch auf das selbe heraus wie "quickpkg", nur das du das Binärpaket direkt bekommst ohne einen zustäzlichen Aufruf machen zu müssen. Aber auch hier brauchst du ein funktionierendes ebuild.

1. Paket emergen

```

$ emerge foo --buildpkg

```

2. Paket neu installieren unter Verwendung des vorher erstellten Archivs

```

$ emerge foo --usepkg

```

Beide Möglichkeiten sind sehr nützlich wenn man ein Paket auf mehreren Rechnern braucht, da man es nur einmal kompilieren muss (oder um vom gcc ein backup zu machen falls man ihn mal schrottet  :Wink: ), aber beides setzt natürlich voraus das das Paket zumindest einmal komplett von portage kompiliert wurde.

Cheers

Sino

----------

## xillix

 *Quote:*   

> Beide Möglichkeiten sind sehr nützlich wenn man ein Paket auf mehreren Rechnern braucht, da man es nur einmal kompilieren muss (oder um vom gcc ein backup zu machen falls man ihn mal schrottet ), aber beides setzt natürlich voraus das das Paket zumindest einmal komplett von portage kompiliert wurde.
> 
> 

 

Danke mal für deine hilfreiche Auskunft, das bringt mir viel, wenn ich wie gesagt ein Paket auf mehreren Rechnern installieren will vorausgesetzt es sind die gleichen Architekturen.

Aber eine vergleichbare Option, wie beim debian-System gibt es wahrscheinlich bei Gentoo nirgends, was ich eigentlich sehr schade finde, denn somit wird das ganze portage für mich eher unbrauchbar  :Sad:  da ich einige Programme installieren möchte, die nicht, oder nicht mehr im portage sind und ein ebuild zu schreiben anscheinend nicht so einfach ist. 

Weiß vielleicht jemand, wo`s eine gute Doku dafür gibt? Vielleicht krieg ichs ja trotzdem hin ...   :Wink: 

lg xillix

----------

## nikaya

 *xillix wrote:*   

> 
> 
> Weiß vielleicht jemand, wo`s eine gute Doku dafür gibt? Vielleicht krieg ichs ja trotzdem hin ...  
> 
> 

 

http://devmanual.gentoo.org/ebuild-writing/index.html

http://www.gentoo.org/proj/en/devrel/handbook/handbook.xml?part=2

man 5 ebuild

----------

## Ampheus

Oder du siehst auf dem Bugtracker nach. Da findest du häufig experimentelle ebuilds.

----------

## dmaus

Kleinere Sachen installiere ich aus den Quellen heraus mittels 

```
./configure --prefix=$HOME/.local

make

make install

```

funktioniert ganz gut. 

Der Übersichthalber kann man das noch mit einer simplen Paketverwaltung kombinieren, mit deren Hilfe man nach $HOME/.local installierte Pakete wieder einfach deinstallieren kann. Hier hilft mir "paco" (paco.sf.net).

----------

## xillix

für paco gibt es sogar eine GUI allerdings weiß ich nicht, wo man die herbekommen soll. Auf der homepage die mir dmaus netterweise gezeigt hat hab ich zumindest keinen link dafür gefunden...

Ist aber momentan auch nicht so wichtig - paco hört sich für mich jedenfalls interessant an.

@dmaus: ich hoffe, du mußt dir damit nicht alle deine sourcepakete ins /home-verzeichnis installieren ... wär wohl auf Dauer ein wenig zu klein   :Wink: 

lg xillix

----------

## dmaus

Paco: Die/Das GUI ist im tarball von paco mit enthalten. Paco war lange Zeit meine Paketverwaltung unter LFS -- wobei ich die/das GUI nie wirklich genutzt habe.

@xillix: Doch doch, ich installiere alle meine sourcepakete in /home -- es sind halt wirklich nicht viel: 

```

david@boden ~/.local $ ls bin

gaffitter

trm

paco

david@boden ~/.local $
```

----------

