# costruire un ebuild: problemi con "make install" e

## teknux

salve a tutti,

ieri sera cercavo un player multimediale leggero e in gtk2. cercando su

freshmeat mi sono imbattuto in ammp (http://ammp.sf.net) che seppur giovane

promette bene, almeno per quello che mi serve  :Wink: 

ebbene non esiste un ebuild per questo programma, così ho deciso di cimentarmi

per la prima volta nella scrittura di un ebuild, del resto avevo già letto

qualche doc e qualche ebuild in generale, per cui ho pensato non dovesse

essere così impossibile. Dopo un'oretta di smanazzamenti vari giungo a una

bozza di ebuild che ho installato immediatamente ed ecco il problema:

i files sono pochissimi: i soliti doc di corredo, qualche pixmap per i

pulsanti, e un binario. purtroppo questi pixmaps andrebbero in

/usr/share/ammp/pixmaps ma stranamente non ci vanno! anzi me li ritrovo in

/usr/share e basta :-O

le ho provate tutte, ho anche installato il programma nella mia home a mano

per vedere se c'era qualcosa di errato nei makefiles generati dal ./configure

ma in quel caso è andato tutto ok. ho ricontrollato anche i prefix in fase di

"make install". niente da fare... ad ogni modo vi copio qui la parte di

ebuild, le sorprese non finiscono qui...

```

src_compile() {

    local myconf="--host=$CHOST --prefix=/usr"

    use nls  || myconf="${myconf} --disable-nls"

    ./configure ${myconf} || die "Configuration failed"

    make || die "Make failed"

}

src_install() {

    make install || die "Install failed"

    dodoc ABOUT-NLS AUTHORS INSTALL NEWS README ChangeLog

}

```

quel "make install" è molto strano: ricevo un errore di "ACCES DENIED" proprio

quando cerca di fare "mkdir -p -- /usr/share/ammp/pixmaps" e ovviamente

l'installazione fallisce :/

di contro, se uso "einstall" riottengo i files messi in luoghi sbagliati come

descritto sopra.

qualcuno potrebbe darmi un aiuto? grazie!

saluti,

teknux

----------

## cerri

Innanzitutto devi usare emake al posto di make.

Inoltre, non puoi usare make install come comando per installare. Dai un'occhiata qui.

----------

## teknux

si "avresti ragione" cerri, ma quello che ho postato e il risultato di alcune prove che avevo fatto in precedenza sullo stesso ebuild. Non solo, ho visto la struttura di alcuni ebuild scelti casualmente (gaim, giFToxic e altri che ora non ricordo) e ho notato che le sintassi sono spesso diverse, non capisco il perchè. In ultimo, la guida che mi hai linkato l'avevo già scaricata e letta, ed infatti tra le altre cose ho trovato questa frase:

```

emake    esegue un make parallelo, alcuni progetti non possono essere compilati in parallelo; usate make

```

e così ho fatto. ora faccio qualche altra prova poi ti faccio sapere. 

nel frattempo... grazie!  :Very Happy: 

teknux

----------

## cerri

Non sono un esperto di ebuild, tuttavia emake si occupa di tutta la gestione del make, ossia fa anche il make install nella directory temporanea.

Non puoi usare make install perche' ti viene bloccato dalla funzione sandbox: devi usare i comandi do?? per effettuare le installazioni varie.

Per capirci, se un make install fa

```
# mkdir -p /directory
```

devi fare

```
# dodir /directory
```

e via dicendo. 

Posto un ebuild fatto da me qualche tempo fa.

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

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

inherit eutils

MY_PV="$(echo ${PV} | cut -d. -f1,2)"

S="${WORKDIR}/quickrip"

DESCRIPTION="Basic DVD ripper written in Python and PyQT."

SRC_URI="http://www.tomchance.uklinux.net/projects/quickrip-$MY_PV.tar.gz"

HOMEPAGE="http://www.tomchance.uklinux.net/projects/quickrip.shtml"

LICENSE="GPL-2"

SLOT="0"

KEYWORDS="~x86 -ppc -mips"

RDEPEND="virtual/glibc

        >=dev-lang/python-2.2

        >=x11-libs/qt-3.1

        >=dev-python/PyQt-3.5

        media-video/mplayer

        media-video/transcode"

src_unpack() {

    unpack ${A}

}

src_install() {

        insinto /usr/share/quickrip

        doins *.py *.ui README LICENSE

        fperms 755 $INSDESTTREE/cli.py $INSDESTTREE/dvd.py $INSDESTTREE/gui.py $INSDESTTREE/quickrip.py

        dodir /usr/bin

        dosym $INSDESTTREE/quickrip.py /usr/bin/quickrip

}

```

----------

## teknux

rieccomi con un messaggio di errore fresco:

```

ACCESS DENIED  mkdir:     /usr/share/ammp

mkdir: cannot create directory `/usr/share/ammp': Permission denied

make[2]: *** [install-dataDATA] Error 1

make[2]: Leaving directory `/var/tmp/portage/ammp-2.2/work/ammp-2.2/pixmaps'

make[1]: *** [install-am] Error 2

make[1]: Leaving directory `/var/tmp/portage/ammp-2.2/work/ammp-2.2/pixmaps'

make: *** [install-recursive] Error 1

!!! ERROR: media-sound/ammp-2.2 failed.

!!! Function src_install, Line 35, Exitcode 2

!!! Install failed

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

LOG FILE = "/tmp/sandbox-ammp-2.2-6979.log"

mkdir:     /usr/share/ammp

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

```

ed è quello che ho già ricevuto quando ho usato "make install". stavolta, però, ho sostituito "make" e "make install" rispettivamente con "emake" ed "emake install", ma il risultato non è cambiato :/

----------

## teknux

ops! credo che abbiamo postato quasi in contemporanea, proverò a fare come mi hai spiegato, l'avevo pure letto sulla guida a proposito di "dodir" ma non ci ho pensato affatto  :Razz: 

grazie,

teknux

----------

## cerri

 :Smile: 

----------

## teknux

escludendo il supporto a NLS, che comunque è solo per francese, giapponese e russo, l'installazione è andata a buon fine, scrivendo in questo modo

```

src_install() {

    dodir /usr/share/ammp

    dodir /usr/share/ammp/pixmaps

    insinto /usr/share/ammp/pixmaps

    doins ${S}/pixmaps/*.png

    dodoc ABOUT-NLS AUTHORS INSTALL NEWS README ChangeLog

}

```

tuttavia temo che con il NLS attivato, potrebbe uscirne qualche casino, e di conseguenza non potrei proporre l'ebuild. pazienza  :Razz: 

grazie ancora cerri!

saluti,

tek

----------

## cerri

teknuk  :Smile: 

qual'e' l'errore che ti da l'NLS?

----------

## teknux

dunque:

1) nel mio ultimo post ho scritto una boiata immane, perchè non ho specificato di installare il resto del pacchetto, ad esempio il binario stesso   :Embarassed: 

2) riguardo NLS ho parlato al condizionale perchè da bravo distratto, avevo capito che se facevo col metodo del "doins" avrei dovuto specificare anche gli altri pacchetti, quindi avevo ipotizzato che avrei dovuto specificare i singoli path delle varie localizzazioni...

3) mentre riflettevo sul punto due, mi sono accorto solo dopo che avevo "generato" anche il problema al punto (1

temo di aver creato un caso di ricorsione nelle cavolate   :Shocked: 

alla fine ho provato cmq sto ammp, ma mi sono accorto che tutta sta fatica per quel player neanche ce la voglio sprecare, mi tengo il caro zinf (ex freeamp). tuttavia mi rimane sto dubbio sugli errori di installazione. eppure guardando altri ebuild (anche complessi) pensavo di aver capito come crearne uno, bah!   :Confused: 

----------

## cerri

Eh... ti consiglio di provare a creare semplici ebuild per capire il meccanismo, che non e' banale per niente...

Considera che l'ebuild che ti ho postato prima, se ci fai caso, non compila nemmeno... e' un semplice script perl o python, non ricordo.

Ma da li ho capito come fare a installare  :Smile: 

----------

## teknux

si hai ragione, so che non è banale creare un ebuild...

però considerando che mastico qualche linguaggio di programmazione, che provengo da slack dove i pkgs me li facevo da solo e che (soprattutto, ovviamente) avevo letto il "fucking manual", non mi restasse così difficoltoso. anche perchè il pacchetto scelto, è davvero semplice da installare, eppure non sono riuscito a farlo, GRRR!   :Evil or Very Mad: 

proverò alla prossima occasione con qualche altro pacchetto non ancora esistente   :Wink: 

ad ogni modo ho visto il tuo ebuild, si è in python, e quel tipo di pacchetti sono brutte bestie perchè devi digli tu dove andare, ricordo che quando pacchettizzai alcuni programmi in python per slack ci persi un bel po' di tempo  :Razz: 

saluti e alla prossima!

tek

----------

