# [ebuild] faire un ebuild

## Corto

Suite à la sortie de la nouvelle version de peercast, je suis allé voir ce que portage proposait en streamer. J'ai trouvé darkice mais pas l'interface graphique darksnow, développé par un brésilien.

L'installation est simplissime, make et make install suffisent. Mais je me suis dis que devant si peu de données à traîter (je ne suis ni programmeur ni linuxien de longue date  :Wink: ), je pourrais voir si je pouvais en faire un ebuild  :Razz: 

Mais ça marche pas !

J'ai fait un tour d'horizon des différents pbs relatés dans les docs mais j'ai toujours la même réponse quand je tente un emerge -p : 

```
These are the packages that I would merge, in order:

 

Calculating dependencies \!!! aux_get(): ebuild for 'portage/darksnow-0.4.4' does not exist at:

!!!            /usr/portage/portage/darksnow/darksnow-0.4.4.ebuild

emerge: create(): aux_get() error on portage/darksnow-0.4.4; aborting...

```

J'ai mis le ebuild dans le rep /usr/local/portage/darksnow comme nécessaire (si j'ai bien compris pour zapper l'arbre officiel). Il ressemble à ça :

```
# Copyright 1999-2004 Gentoo Technologies, Inc.

# Distributed under the terms of the GNU General Public License v2

# $Header:$

DESCRIPTION="Streaming GTK2 Front-End based in Darkice Ice Streamer"

HOMEPAGE="http://darksnow.radiolivre.org"

SRC_URI="http://darksnow.radiolivre.org/${P}.tar.gz"

SLOT="0"

KEYWORDS="x86"

IUSE=""

S=${WORKDIR}/${P}

LICENSE="GPL-2"

DEPEND="darkice? ( >=media-sound/darkice-0.14 )"

src_compile() {

   emake || die "Compilation failed"

}

src_install{

   einstall || die

}

```

Qu'est-ce que j'ai raté ?  :Question: 

----------

## ghoti

 *Corto wrote:*   

> Qu'est-ce que j'ai raté ? 

 

As-tu bien positionné la variable PORTDIR_OVERLAY dans /etc/make.conf ?

A part ça,  le programme Abeni pourrait peut-être t'aider à résoudre ce genre de choses.

----------

## Corto

 *ghoti wrote:*   

> As-tu bien positionné la variable PORTDIR_OVERLAY dans /etc/make.conf ?

  Oui j'ai bien 

```
PORTDIR_OVERLAY=/usr/local/portage
```

 de configuré dans make.conf  :Wink: 

 *ghoti wrote:*   

> A part ça,  le programme Abeni pourrait peut-être t'aider à résoudre ce genre de choses.

  Trop fort ! Je vais aller y jeter un oeil  :Smile: 

----------

## scout

 *Corto wrote:*   

> J'ai mis le ebuild dans le rep /usr/local/portage/darksnow comme nécessaire (si j'ai bien compris pour zapper l'arbre officiel).

 

Traditionnellement, on met d'abord un répertoire pour la catégorie, et après le répertoire pour le paquetage. typiquement il faut mettre ton ebuild dans /usr/local/portage/media-sound/darksnow/darksnow-0.4.4.ebuild , et là ton ebuild est dans la catégorie media-sound et portage est tout content ... d'ailleurs rien ne t'empèche de créér tes propres catégories, mais je crois que l'ebuild direct dans l'overlay comme tu as fait, il aime pas trop

----------

## cylgalad

Au lieu de /usr/local/portage/darksnow/ tu devrais le mettre dans /usr/local/portage/media-sound/darksnow/ ça paraitrait plus "logique" cap'taine  :Wink: 

Et faire un "ebuild digest" sur ton ebuild.

----------

## Corto

Pas faux   :Embarassed: 

Pour le digest ça marchait pas mais je vais le retester avec le nouveau rep  :Wink: 

EDIT : donc ça donne 

```
# ebuild darksnow-0.4.4.ebuild digest

/usr/sbin/ebuild.sh: line 23: src_install{: command not found

 

!!! ERROR: media-sound/darksnow-0.4.4 failed.

!!! Function einstall, Line 390, Exitcode 1

!!! no Makefile found

 

 

aux_get(): (0) Error in media-sound/darksnow-0.4.4 ebuild. (1)

               Check for syntax error or corruption in the ebuild. (--debug)

 

doebuild(): aux_get() error; aborting.

```

----------

## Corto

 :Laughing:  que je suis blond des fois...  :Very Happy: 

J'ai oublié les parenthèses dans 

```
src_install
```

  :Rolling Eyes: 

```
 

>>> Generating digest file...

<<< darksnow-0.4.4.tar.gz

>>> Generating manifest file...

<<< darksnow-0.4.4.ebuild

<<< files/digest-darksnow-0.4.4

>>> Computed message digests.

```

Là c'est mieux  :Wink: 

Par contre (paske ce serait trop facile), en tentant un emerge -B ça donne : 

```
# emerge -aB darksnow-0.4.4.ebuild

 

These are the packages that I would merge, in order:

 

Calculating dependencies ...done!

[ebuild  N    ] media-sound/darksnow-0.4.4

 

Do you want me to merge these packages? [Yes/No] y

>>> emerge (1 of 1) media-sound/darksnow-0.4.4 to /

>>> md5 src_uri ;-) darksnow-0.4.4.tar.gz

>>> Unpacking source...

>>> Unpacking darksnow-0.4.4.tar.gz to /var/tmp/portage/darksnow-0.4.4/work

>>> Source unpacked.

gcc -Wall -g `pkg-config --cflags gtk+-2.0` -I/usr/include/gtk-2.0  -DINTLPREFIX="\"/usr\"" -c darksnow.c -o darksnow.o

gcc -Wall -g `pkg-config --cflags gtk+-2.0` -I/usr/include/gtk-2.0  -DINTLPREFIX="\"/usr\"" -c interface.c -o interface.o

gcc -Wall -g `pkg-config --cflags gtk+-2.0` -I/usr/include/gtk-2.0  -DINTLPREFIX="\"/usr\"" -c config_files.c -o config_files.o

gcc -Wall -g `pkg-config --cflags gtk+-2.0` -I/usr/include/gtk-2.0 `pkg-config --libs gtk+-2.0` darksnow.o interface.o config_files.o -o darksnow

 

>>> Install darksnow-0.4.4 into /var/tmp/portage/darksnow-0.4.4/image/ category media-sound

install darksnow /usr/bin/darksnow

ACCESS DENIED  unlink:    /usr/bin/darksnow

install: ne peut enlever `/usr/bin/darksnow': Permission non accordée

make: *** [install] Erreur 1

 

!!! ERROR: media-sound/darksnow-0.4.4 failed.

!!! Function einstall, Line 388, Exitcode 2

!!! einstall failed

 

--------------------------- ACCESS VIOLATION SUMMARY ---------------------------

LOG FILE = "/tmp/sandbox-media-sound_-_darksnow-0.4.4-11918.log"

 

unlink:    /usr/bin/darksnow

--------------------------------------------------------------------------------

```

Je suppose qu'il faut désinstaller l'original ? (y a une commande je sais mais laquelle ?)

----------

## Corto

Bon c'était pas ça... j'ai effacé toutes les entrées de darksnow et le bug est toujours là...

Si j'ai bien compris il y a un pb d'accès à /usr/bon pour y mettre darksnow, non ? pourquoi m'sieur root il aurait des pb d'accès ????

----------

## scout

 *Corto wrote:*   

> pourquoi m'sieur root il aurait des pb d'accès ????

 

C'est là tout l'intéret de portage !   :Cool: 

lors du einstall (d'ailleurs faudrait plutot que t'essaye make install DESTDIR=${D}), le programme est cencé installer tout dans /var/tmp/portage/darksnow-0.4.4/image

Si il veux accéder à quelquechose en écriture et dehors de /var/tmp/portage/darksnow-0.4.4/, la sandbox de portage l'envoie balader:

 *Quote:*   

> --------------------------- ACCESS VIOLATION SUMMARY ---------------------------
> 
> LOG FILE = "/tmp/sandbox-media-sound_-_darksnow-0.4.4-11918.log"
> 
> unlink:    /usr/bin/darksnow
> ...

 

Alors il faut que tu te débrouilles pour qu'il mette ses fichier dans /var/tmp/portage/darksnow-0.4.4/image/usr

Après portage il fait la liste des fichiers de /var/tmp/portage/darksnow-0.4.4/image/ il les copie dans / de manière à ce que quand tu fasse un unmerge, il relis la liste et vire tous les fichiers.

Si ton programme a vraiment envie d'ecrire là ou il n'a pas le droit, tu peux lui faire croire qu'il a le droit grace à un inherit eutils au début de ton paquetage puis grace à l'utilisation de addpredict. Si cela t'intéresse, je te conseille d'emerge sandboxshell et de jouer un peu avec.

Dans la plupart des cas il suffit de faire inherit blabla, par exemple inherit kde-functions met les addpredict canoniques à la compilation des applis qt, pour pas qu'elles râlent. En gtk cela se produit nettement moins, et pour ton paquetage cela se fait juste à l'installation, alors il faut juste lui dire gentiment de mettre ses fichiers dans /var/tmp/portage/darksnow-0.4.4/image/usr/bin et pas /usr/bin

essaye make install DESTDIR=${D} au lieu de einstall, et si ça ne marche pas, bonne chance   :Wink: 

[EDIT] pour les inherit bidule, jette un coup d'oeil dans /usr/portage/eclass

----------

## Corto

Là c'est du chinois pour moi  :Wink: 

Mais je vais fouiller dedans (ça fera une pause entre chaque chapitre de La méthode simple pour en finir avec la cigarette  :Razz: ) et voir ce que je peux comprendre  :Wink: 

----------

## Corto

Marche pas et un peu confu... 

Si j'utilise 

```
make install DESTDIR=$[S]/usr/bin
```

 j'ai la même réponse. Mais je pense d'ailleurs que ce n'est pas le bon chemin à mettre... il doit y avoir une subtilité dans le concept du chemin que je n'ai pas saisi...

J'ai essayé de multiples chemins sans succès :-/

----------

## scout

Bon, je me suis dit qu'il fallait bien voir ce que c'était que ce darksnow ... alors jette un coup d'oeil au Makefile et tu va comprendre ce qui ne marche pas bien.

Je me suis bien amusé ! j'ai eu le droit d'aller voir comment  ça marche sed

```
# Copyright 1999-2004 Gentoo Technologies, Inc.

# Distributed under the terms of the GNU General Public License v2

# $Header:$

DESCRIPTION="Streaming GTK2 Front-End based in Darkice Ice Streamer"

HOMEPAGE="http://darksnow.radiolivre.org"

SRC_URI="http://darksnow.radiolivre.org/${P}.tar.gz"

SLOT="0"

KEYWORDS="x86"

IUSE=""

LICENSE="GPL-2"

DEPEND=">=x11-libs/gtk+-2

        >=media-sound/darkice-0.14"

src_unpack() {

        unpack ${A}

        einfo "Patching Makefile..."

        cd ${S}

        sed -i "s:^PREFIX=.*:PREFIX=${D}:" Makefile

        sed -i "s:^CFLAGS=:CFLAGS=${CFLAGS} :" Makefile

}

src_compile() {

        emake || die "Compilation failed"

}

src_install () {

        make install

}
```

Bonne chance pour comprendre   :Wink: 

----------

## Corto

 :Laughing: 

Pu**n ça marche !!!!!!!!!!!   :Cool: 

Bon alors, je googlise à mort...

----------

## scout

 *Corto wrote:*   

> Bon alors, je googlise à mort...

 

En gros les deux lignes sed, elles remplacent

PREFIX=/usr par

PREFIX=/var/tmp/portage/darksnow-0.4.4/image (si je ne me trompe pas)

et CFLAGS=blabla écris pas le programmeur qui fait que ça compile bien

par CFLAGS=tes cflags+blabla écris pas le programmeur qui fait que ça compile bien

et ça suffit à faire marcher le tout ...

----------

## fedeliallalinea

Pour faire rapidement les ebuild il y a 

```
*  app-portage/abeni [ Masked ]

      Latest version available: 0.0.9

      Latest version installed: [ Not Installed ]

      Size of downloaded files: 129 kB

      Homepage:    http://abeni.sf.net/

      Description: Integrated Development Environment for Gentoo Linux ebuilds
```

----------

## Corto

 *scout wrote:*   

>  *Corto wrote:*   Bon alors, je googlise à mort... 
> 
> En gros les deux lignes sed, elles remplacent
> 
> PREFIX=/usr par
> ...

 

Jusque là je suis mais je vois pas quel est le changement, puisque je ne connais pas la syntaxe de la commande.. Là je me suis fait détourné par un pote mais je reviendrais dessus demain  :Wink: 

----------

## Corto

OK je crois que j'ai compris mais la synthaxe de sed c'est du grand art à manier !

Donc en fait, il y avait de mauvaises infos dans le makefile et il fallait changer ces path, c'est ça ?

----------

## scout

 *Corto wrote:*   

> Donc en fait, il y avait de mauvaises infos dans le makefile et il fallait changer ces path, c'est ça ?

 

oui, si on peux appeller cela des "mauvaises infos"

----------

