# emerge: non ho capito

## .:chrome:.

quando si installa un nuovo pacchetto, mi è successo che non sempre questo venisse aggiunto al profilo world.

world dovrebbe contenere tutti i pacchetti installati, ma non è così. ogni tanto lancio regenworld che aggiunge quello che manca...

non capisco perché a volte i pacchetti non vengono aggiunti (notare che non uso mai --oneshot) e da dove regenworld prende le informazioni per aggiungere i pacchetti mancanti

----------

## Mithrandir81

Se tra le altre opzioni di emerge c'è -u, non aggiunge al world, altrimenti lo fa...

ex.:

1) emerge -uD <pacchetto-pallino> non aggiunge al world

2) emerge -D <pacchetto-pallino> lo aggiunge

Nel primo caso, appunto, basta fare regenworld e lo aggiunge...

Poi mi sono accorto che se fai un emerge -uD di un pacchetto installato, che non è nel world te lo aggiunge...infatti quando faccio un depclean, guardo l'elenco, e do' un emerge -uD dei pacchetti che voglio tenere (così li mette in world senza ricompilarli) e poi do' il definitivo depclean che elimina i rimanenti...

----------

## Ic3M4n

ma io avevo capito che se emerge un pacchetto questo mi viene aggiunto nel file di world ma tutte le sue dipendenze no. quindi è normale che non ci siano tutti i pacchetti che hai emerso. ho capito male?

----------

## fedeliallalinea

 *Ic3M4n wrote:*   

> ma io avevo capito che se emerge un pacchetto questo mi viene aggiunto nel file di world ma tutte le sue dipendenze no. quindi è normale che non ci siano tutti i pacchetti che hai emerso. ho capito male?

 

Esattamente. emerge aggiunge solo i pacchetti che emergi e non le sue dipendenze

----------

## lavish

@Mithrandir81 : non mi è mica chiaro quello che hai detto... o.O

@k.gothmog : le info le prende da /var/log/emerge.log ... ma non capisco perchè non usi mai --oneshot. Se devi emergere qualche dep a mano (caita per vari motivi), non devi mettere anche quella in world... ma forse ho capito male quello che intendevi...

----------

## Mithrandir81

 *lavish wrote:*   

> @Mithrandir81 : non mi è mica chiaro quello che hai detto... o.O

 

me ne sono accorto...  :Very Happy: 

meglio con un esempio...

quando voglio installare un nuovo programma io faccio:

```
emerge -pvuD <pacchetto>
```

Guardo l'elenco delle dipendenze, vedo se son felice e contento e decido di installarlo...e mi aspetto che il nome del pacchetto dato esplicitamente nel comando venga aggiunto al world e ovviamente le dipendenze invece no, il che accade tranquillamente...se non che, se il comando successivo è:

```
emerge -uD <pacchetto>
```

 questo non viene affatto aggiunto al world, ma rimedia alla cosa il 

```
regenworld
```

mentre:

```
emerge -D <pacchetto>
```

  si occupa subito di aggiungere il pacchetto (solo quello esplicitamente indicato nel comando, come ci si aspetta)

E' vero che a rigor di logica -u non ha senso se il pacchetto è nuovo per il sistema...però da quello che ha scritto lui nel primo post a proposito del regenworld, sapendo che il regenworld non aggiunge le mai dipendenze, ho pensato fosse questa la situazione (io me ne sono accorto proprio per l'abitudine di mettere -u sempre).

----------

## Josuke

 *fedeliallalinea wrote:*   

>  *Ic3M4n wrote:*   ma io avevo capito che se emerge un pacchetto questo mi viene aggiunto nel file di world ma tutte le sue dipendenze no. quindi è normale che non ci siano tutti i pacchetti che hai emerso. ho capito male? 
> 
> Esattamente. emerge aggiunge solo i pacchetti che emergi e non le sue dipendenze

 

Secondo me la spiegazione di fedeliallalinea è più che esaustiva...semplicemente quando emergi un pacchetto e quest'ultimo ha bisogno di altri pacchetti per funzionare...te li installa ma non te li mette nel word...mentre il pacchetto che hai scelto di emregere viene aggiunto...per esempio...se non so....gnomemeeting ha bisogno delle pwlib per essere installato...ti verrà installato e compilato anche questo pacchetto, se uscirà una versione nuova di pwlib però non ti verrà aggiornata...ti verrà aggiornata solamente se una versione futura di gnomemeeting avrà bisogno di una versione aggiornata di pwlib

----------

## .:chrome:.

 *fedeliallalinea wrote:*   

> Esattamente. emerge aggiunge solo i pacchetti che emergi e non le sue dipendenze

 

questa cosa mi lascia perplesso...

installo il pacchetto A che ha come dipendenza B... se B non viene aggiunto a world, emerge non me lo può nemmeno aggiornare, quando uscirà l'ipotetico aggiornamento... è davvero così o ho capito male? se è così non mi sembra una gran pensata

----------

## Mithrandir81

 *k.gothmog wrote:*   

>  *fedeliallalinea wrote:*   Esattamente. emerge aggiunge solo i pacchetti che emergi e non le sue dipendenze 
> 
> questa cosa mi lascia perplesso...
> 
> installo il pacchetto A che ha come dipendenza B... se B non viene aggiunto a world, emerge non me lo può nemmeno aggiornare, quando uscirà l'ipotetico aggiornamento... è davvero così o ho capito male? se è così non mi sembra una gran pensata

 

te lo aggiorna perchè quando fai un update del world, calcola le dipendenze (come sempre quando fai un emerge)  e si accorge che una delle dipendenze è da aggiornare...

----------

## Josuke

 *Mithrandir81 wrote:*   

>  *k.gothmog wrote:*    *fedeliallalinea wrote:*   Esattamente. emerge aggiunge solo i pacchetti che emergi e non le sue dipendenze 
> 
> questa cosa mi lascia perplesso...
> 
> installo il pacchetto A che ha come dipendenza B... se B non viene aggiunto a world, emerge non me lo può nemmeno aggiornare, quando uscirà l'ipotetico aggiornamento... è davvero così o ho capito male? se è così non mi sembra una gran pensata 
> ...

 

da quel che so io...te lo aggiorna solo se il pacchetto a per essere aggiornato ha bisogno di una nuova versione del pacchetto b ossia se il pacchetto nel word ha bisogno che le dipendenze vengano aggiornate..altrimenti non lo aggiorna

----------

## MoRPh3uSz

 *Mithrandir81 wrote:*   

> 
> 
> ```
> emerge -uD <pacchetto>
> ```
> ...

 

regenworld deve essere usato solo nel caso in cui si verifichi una corruzione del file world per riuscire a ripristinare (dalla storia delle varie compilazioni che si deduce da emerge.log) il ripristinabile, non deve essere usato per "aggiungere" pacchetti al world file, alla fine ci si trova con un file world gigantesco pieno di sporcizia che rende decisamente difficile una manutenzione dei pacchetti.

Io sono un fatanico della pulizia del file world, anche perchè è l'unico modo per mantenere il sistema pulito nel tempo grazie anche all'ottimo tool "unclepine", a mio parere nel file world deve apparire solo lo stretto necessario, cioè solo le applicazioni che sono state emerse esplicitamente, il resto deve essere gestito dal controllo automatico delle dipendenze.

----------

## Mithrandir81

 *MoRPh3uSz wrote:*   

>  *Mithrandir81 wrote:*   
> 
> ```
> emerge -uD <pacchetto>
> ```
> ...

 

infatti guarda che vengono aggiunte solo quelle emerse esplicitamente, non le dipendenze...anche il mio world contiene esattamente solo i pacchetti emersi esplicitamente da me   :Confused: 

----------

## MoRPh3uSz

 *Mithrandir81 wrote:*   

> infatti guarda che vengono aggiunte solo quelle emerse esplicitamente, non le dipendenze...anche il mio world contiene esattamente solo i pacchetti emersi esplicitamente da me  

 

```
tosorea morpheusz # cd /var/lib/portage/

tosorea portage # wc -l world

160 world

tosorea portage # cp world world_bkp

tosorea portage # rm world

tosorea portage # regenworld

.....

tosorea portage # wc -l world

238 world
```

Regenworld ha aggiunto 78 pacchetti al world file, tieni conto che non ho mai cancellato emerge.log da quando il 30 Nov 2003 ho installato gentoo, secondo me se lo cancellassi ogni tanto verrebbe creato un nuovo file world ancora più sporco.

----------

## Mithrandir81

mah...

```

root@agentsmith portage # cp world world.backup

root@agentsmith portage # rm world

root@agentsmith portage # regenworld

root@agentsmith portage # wc -l world.backup

82 world.backup

root@agentsmith portage # wc -l world

79 world

root@agentsmith portage #

```

e andando a guardare mi ha tolto ciò che di sporco c'era...

e ovviamente ciò che c'è di installato è...

```

root@agentsmith prog1 # qpkg -I >> log.txt

root@agentsmith prog1 # wc -l log.txt

414 log.txt

```

----------

## MoRPh3uSz

 *Quote:*   

> e andando a guardare mi ha tolto ciò che di sporco c'era...

 

Quindi possiamo dire che il file world non serve a niente se può essere rigenerato senza problemi, o sbaglio?

----------

## Mithrandir81

 *MoRPh3uSz wrote:*   

>  *Quote:*   e andando a guardare mi ha tolto ciò che di sporco c'era... 
> 
> Quindi possiamo dire che il file world non serve a niente se può essere rigenerato senza problemi, o sbaglio?

 

ah boh, ti riporto quello che ha fatto sul mio, evidentemente non si comporta in maniera troppo uniforme...

in generale non mi da problemi...le uniche volte che mi aggiunge qualcosa al world che non desidero, lo fa perchè gli faccio fare un emerge update esplicito di un qualche pacchetto che è dipendenza di altri...ma basta evitare di farlo...

per il resto, non mi comporta alcun problema...

----------

## MoRPh3uSz

 *Mithrandir81 wrote:*   

> in generale non mi da problemi...le uniche volte che mi aggiunge qualcosa al world che non desidero, lo fa perchè gli faccio fare un emerge update esplicito di un qualche pacchetto che è dipendenza di altri...ma basta evitare di farlo...
> 
> per il resto, non mi comporta alcun problema...

 

Pensandoci bene tu hai fatto il "wc -l" di due world file entrambi generati da regenworld, infatti il numero dei pacchetti presenti nel file world mi sembra decisamente basso (solo 79 su 414 pacchetti installati, mentre io ho 160 su 458), non è che ti manca qualcosa?

Hai mai provato ad usare unclepine per fare una scorsa dei pacchetti che hai installato ma che non sono referenziati né nel file world, né in system e che non sono dipendenza di nessuno?

----------

## Mithrandir81

 *MoRPh3uSz wrote:*   

>  *Mithrandir81 wrote:*   in generale non mi da problemi...le uniche volte che mi aggiunge qualcosa al world che non desidero, lo fa perchè gli faccio fare un emerge update esplicito di un qualche pacchetto che è dipendenza di altri...ma basta evitare di farlo...
> 
> per il resto, non mi comporta alcun problema... 
> 
> Pensandoci bene tu hai fatto il "wc -l" di due world file entrambi generati da regenworld, infatti il numero dei pacchetti presenti nel file world mi sembra decisamente basso (solo 79 su 414 pacchetti installati, mentre io ho 160 su 458), non è che ti manca qualcosa?
> ...

 

spè, non ti seguo....il mio world iniziale non è generato da regenworld, si è generato installando man mano i programmi con emerge...solo di tanto in tanto, ho installato qualche nuovo pacchetto dimenticando di togliere l'opzione -u (che è sempre presente nel mio comando di update del world) e allora ho dato un regenworld che ha aggiunto semplicemente quell'ultimo pacchetto...

A voler essere precisi il mio world quindi è un misto di entrambi...

Non ho provato unclepine...nel frattempo:

```

root@agentsmith prog1 # emerge -p --depclean

Calculating depclean dependencies ... done!

Packages installed:   413

Packages in world:    79

Packages in system:   62

Unique package names: 413

Required packages:    428

Number to remove:     0

```

ora provo unclepine...per togliermi questa curiosità

----------

## Mithrandir81

Questo primo dovrebbe mostrare i pacchetti inutili giusto?

```
root@agentsmith unclepine-release-0.1 # ./unclepine -su -u

[...]mucchina[...]

Analyzing....Please Wait

If you feel bored launch it with -v switch!

Unlinked Packages: 2

        * dev-java/jakarta-oro-2.0.8

        * pdev-java/jakarta-regexp-1.3-r1

```

beh, due pacchetti li ha beccati a quanto pare...

----------

## fedeliallalinea

 *k.gothmog wrote:*   

> questa cosa mi lascia perplesso...
> 
> installo il pacchetto A che ha come dipendenza B... se B non viene aggiunto a world, emerge non me lo può nemmeno aggiornare, quando uscirà l'ipotetico aggiornamento... è davvero così o ho capito male? se è così non mi sembra una gran pensata

 

No perche' se nell'aggiornamento metti -D ti aggiorna anche le dipendenze

PS: forse mette anche le RDEPEND nel world ma non ne sono sicuro

----------

## .:chrome:.

 *fedeliallalinea wrote:*   

>  *k.gothmog wrote:*   questa cosa mi lascia perplesso...
> 
> installo il pacchetto A che ha come dipendenza B... se B non viene aggiunto a world, emerge non me lo può nemmeno aggiornare, quando uscirà l'ipotetico aggiornamento... è davvero così o ho capito male? se è così non mi sembra una gran pensata 
> 
> No perche' se nell'aggiornamento metti -D ti aggiorna anche le dipendenze
> ...

 

interessante. devi rivedere molte mie idee su portage, allora...

mi viene da pensare una cosa: è più efficiente adere un world file con il massimo numero di pacchetti, in modo da diminuire i tempi di calcolo delle dipendenze o un world file snello, con solo l'essenziale, come suggerito da MoRPh3uSz, e guadagnare nella sua gestione, perdendo però tempo nel calcolo delle dipendenze?

----------

## fedeliallalinea

Il calcolo delle dipendenze per l'aggiornamento lo faccio 1 o 2 volte a settimana e a farlo ci mettera' 5/6 secondi, non vedo questo gran problema.

----------

## Thrain

Conviene mettere nel world solo le applicazioni "finali" e nessuna delle loro dipendenze, principalmente per motivi di pulizia!

Esempio, se il pacchetto A-1.0.0 richiede B-1.0.0, emerge A installerà sia A sia B, mettendo solo A nel world file. Ok, dopo un emerge sync (che aggiorna i pacchetti nel tree a A-1.2.0 e B-1.1.2), dai un emerge -u world. A-1.2.0, appena aggiornato, richiede sempre la stessa versione di B, quindi B non viene aggiornato (se invece di -u avessi dato -uD, avrebbe aggiornato anche B all'ultima versione disponibile).

Alla fine decidi che il pacchetto A non ti serve più: emerge -C A. Dopo averlo rimosso, dai emerge depclean che ti rimuoverà anche B (che ora è inutile visto che era solo una dipendenza di A e di null'altro).

Tenendo un world file in questo modo, la gestione dei pacchetti è quasi perfetta: per renderla perfetta bisogna utilizzare in modo corretto i vari file /etc/portage/{package.mask, package.unmask, package.keywords, package.use, profiles/package.provided}. Utilizzando portage in questo modo, emerge depclean non mi ha mai dato problemi! E il mio sistema, per quanto pieno zeppo di pacchetti (uso gli split ebuild per kde  :Very Happy:  ), non ne ha uno di troppo.

D'altro canto, immaginiamoci cosa sarebbe successo se B fosse entrato nel world file: emerge -u world avrebbe aggiornato B anche se non era necessario, emerge depclean dopo la rimozione di A non avrebbe rimosso B anche se era inutile tenerlo. Moltiplicato tutto questo per tutti i pacchetti inseriti... diventerebbe una zozzeria  :Very Happy:  !

Spero di esser stato chiaro!

Ciao

----------

## neryo

 *Thrain wrote:*   

> 
> 
> Esempio, se il pacchetto A-1.0.0 richiede B-1.0.0, emerge A installerà sia A sia B, mettendo solo A nel world file. Ok, dopo un emerge sync (che aggiorna i pacchetti nel tree a A-1.2.0 e B-1.1.2), dai un emerge -u world. A-1.2.0, appena aggiornato, richiede sempre la stessa versione di B, quindi B non viene aggiornato (se invece di -u avessi dato -uD, avrebbe aggiornato anche B all'ultima versione disponibile).
> 
> Alla fine decidi che il pacchetto A non ti serve più: emerge -C A. Dopo averlo rimosso, dai emerge depclean che ti rimuoverà anche B (che ora è inutile visto che era solo una dipendenza di A e di null'altro).
> ...

 

Direi che la tua spiegazione pratica e' stata la piu chiara del 3d!  :Wink: 

 *Thrain wrote:*   

> 
> 
> Tenendo un world file in questo modo, la gestione dei pacchetti è quasi perfetta: per renderla perfetta bisogna utilizzare in modo corretto i vari file /etc/portage/{package.mask, package.unmask, package.keywords, package.use, profiles/package.provided}. Utilizzando portage in questo modo, emerge depclean non mi ha mai dato problemi! E il mio sistema, per quanto pieno zeppo di pacchetti (uso gli split ebuild per kde  ), non ne ha uno di troppo.
> 
> D'altro canto, immaginiamoci cosa sarebbe successo se B fosse entrato nel world file: emerge -u world avrebbe aggiornato B anche se non era necessario, emerge depclean dopo la rimozione di A non avrebbe rimosso B anche se era inutile tenerlo. Moltiplicato tutto questo per tutti i pacchetti inseriti... diventerebbe una zozzeria  !
> ...

 

Si diciamo che, ad oggi, avere una libreria in piu o in meno fondamentalmente non da poi cosi fastidio... si sono daccordo che e' zozzeria, ma cmq per esempio  anche se non centra.. e' un po' come il problema della gestione della memoria di un tempo.. prima tutti si preoccupavano di risparmiare fino all'ultimo bit ora la questione e' diventata un po meno urgente, nel senso che ci si puo permettere di usare spazio disco per poi magari beneficiare di non installare una libreria che si ha gia' quando un pacchetto la richiede.. che fastidio da a parte che perdi tempo ad aggiornarla anche se non ti serve?

Cmq per quanto riguarda la pulizia del sistema e la corretta gestione meglio avere il world con solo i pacchetti neccessari... :Wink: 

----------

## Cazzantonio

@Tutti coloro che hanno dubbi sulla gestione delle dipendenze da parte di portage

Il funzionamento e il mantenimento corretto di portage prevede che le dipendenze non vengano messe in world, atrimenti sporchi il sistema e rendi impossibile la rimozione delle dipendenze morte (ovvero di quei pacchetti che erano dipendenza di qualcosa e ora non lo sono più, rimanendo come pacchetti fantasma a giro per il sistema)

un tool fondamentale per gestire portage è unclepine, di cui nello specifico vi consiglio la funzione -sw (show world) per dare un'occhiata al vostro file world e vedere quanti pacchetti dipendenti ci sono dentro....

----------

## .:chrome:.

recupero questo thread per un'altra domanda...

quello che emerge scarica finisce in /usr/portage/distfiles...

questa directory diventa, col tempo, un bel po' ingombrante. cancellarne il contenuto non crea problemi, ma se un domani devo ricompilare un pacchetto mi tocca riscaricarmelo.

sarebbe sufficiente fare in modo che, se ho installato il pacchetto X-1.0, nel momento in cui scarico X-2.0 e i sorgenti dell'1.0 non mi servono più, questi vengano eliminati... che casino, spero che si capisca  :Very Happy: 

esiste un modo per fare questo?

----------

## neryo

 *Cazzantonio wrote:*   

> 
> 
> un tool fondamentale per gestire portage è unclepine, di cui nello specifico vi consiglio la funzione -sw (show world) per dare un'occhiata al vostro file world e vedere quanti pacchetti dipendenti ci sono dentro....

 

Per chi ne avesse necessità....  :Laughing: 

https://forums.gentoo.org/viewtopic-t-249828-start-0.html

----------

## Cazzantonio

@k.gothmog

esistono una quantità di tool per fare questo

io uso distclean, uno script che ho raccattato non mi ricordo dove (o sul forum o su qualche sito tipo gentoo.it) e mi sono adattato alle mie necessità, ma ne esistono molti altri

----------

## fedeliallalinea

Eccone uno https://forums.gentoo.org/viewtopic.php?t=3011

----------

