# [TOOL] Qmerge(cercasi nome) - alias emerge -UDav world

## xchris

Edit 25/2/05:    NON + SUPPORTATO!

----------

Dopo molto tempo vi presento questo scriptozzo bash nato molto tempo fa e rimasto inattivo per molto.

Fatto inizialmente da solo nella versione + semplice e' stato rivisitato da "cerri" e poi finito semi-definitivamente da me.

Ho preferito sistemare i bug principali e renderlo disponibile subito.

Spero che a qualcuno stia simpatico.  :Smile: 

A cosa serve?

serve a semplificare (forse) l'upgrade ordinario di ogni giorno.

puo' essere visto come un 

```

emerge -UDav world

```

permette di selezionare attraverso dialog gli ebuild da aggiornare e di settarne interattivamente le use flags.

Il settaggio delle use flags e' possibile in 2 modalita:

simple     -- settaggio use comune agli ebuild selezionati

advanced -- settaggio use per ogni singolo ebuild

il settaggio attraverso advanced ha la precedenza!

consente di visualizzare una minima descrizione delle useflags (alla ufed per intenderci)

Puo' essere lanciato anche da user ma richiede che sia nel path o che lo si lanci dalla sua dir. (devo sistemare sta cosa)

Puo' effettuare prima di tutto un sync o esync

Se lanciato con ./Qmerge  mostra le opzioni.

```

Usage: Qmerge [options]

Options:

  -s , --sync     for run with emerge sync

  -es, --esync    for run with esync

  -ns, --not-sync for run without syncronization

```

[modifica di fedeliallalinea]

Il file sta qui:

http://xchris.altervista.org/GECHI/

[modificato per problema link diretti]

e qui un paio di vecchi screenshots: (con baco incluso,ora rimosso)

http://xchris.altervista.org/GECHI/simple_qmerge.jpg

http://xchris.altervista.org/GECHI/adv_qmerge.jpg

Non e' privo di bug. (chi potrebbe mai vantarsi del contrario?)

ben accette le critiche,i bug,gli insulti. (ahem non esagerate  :Smile:  )

ciao

----------

## fedeliallalinea

Propongo questa modifica per chi usa esync ma vorrei sapere se ho agiunto nel posto giusto

```
if [ ! -z $1 ]

then

   case $1

   in

   -s|--sync)

   root_check $1

   emerge sync || exit

   sleep 2

   ;;

   -es|--esync)

   root_check $1

   esync || exit

   sleep 2

   ;;

   *)

   echo -e "\nUsage: Qmerge [options]\n"

   echo -e "Options:"

   echo -e "  -s , --sync   for run with emerge sync"

   echo -e "  -es, --esync  for run with esync\n"

   exit

   ;;

   esac   

   

fi
```

----------

## fedeliallalinea

Per scaricare il file bisogna copiare l'url e incollarelo in una nuova finestra (o tab)

----------

## xchris

 *fedeliallalinea wrote:*   

> Propongo questa modifica per chi usa esync ma vorrei sapere se ho agiunto nel posto giusto
> 
> 

 

certo  :Smile: 

ciau

----------

## fedeliallalinea

Altra modifica. Aggiunta funzione usage

```
function usage

{

 echo -e "\nUsage: Qmerge [options]\n"

 echo -e "Options:"

 echo -e "  -s , --sync     for run with emerge sync"

 echo -e "  -es, --esync    for run with esync"

 echo -e "  -ns, --not-sync for run without syncronization\n"

 exit 1

} 
```

e quindi

```
if [ ! -z $1 ]

then

   case $1

   in

   -s|--sync)

   root_check $1

   emerge sync || exit

   sleep 2

   ;;

   -es|--esync)

   root_check $1

   esync || exit

   sleep 2

   ;;

   -ns|--not-sync)

   root_check $1

   sleep 2

   ;;

   *)

   usage

   ;;

   esac   

else

        usage

   

fi
```

Ho messo l'opzione --not-sync esplicita cosi' resta piu' chiaro per l'utilizzatore perche' se lo fa partire senza argomenti non sa che deve dare l'opzione -s o -es per sincronizzare.

----------

## xchris

ok perfect.

che te ne pare del settaggio delle USE?

a me pare che sia la parte effettivamente + comoda.

Quando ti sembra ok la parte che stai modificando mandamela che la uppiamo e aggiorno il primo post. (con i credits.. si intende)

ciau

----------

## fedeliallalinea

 *xchris wrote:*   

> che te ne pare del settaggio delle USE?

 

Si mi pare molto comoda per uno che inizia e non e come dici tu e' molto comoda.

 *xchris wrote:*   

> (con i credits.. si intende)

 

Non e' un problema anche se non li metti l'importante e' che funzioni a dovere  :Very Happy: 

----------

## xchris

ai tempi era nato per i problemi legati a emerge -UD world con pacchetti masked (che dipendevano da altri masked)

trovavo scomodo l'unmaskare...poi le use flags sono arrivate per maggior comodita'.

Ho aggiornato il link.Ora non ci sono problemi per il download.

ciao

----------

## Cagnulein

davvero molto interessante..me lo scarico subito   :Cool: 

----------

## FonderiaDigitale

interessante. solo una critica: se vogliamo davvero fare sto gechitoolkit, non sarebbe meglio rinominarlo in qualcosa di piu chiaro in relazione alla funzione che svolge? tipo useselect..

----------

## fedeliallalinea

 *xchris wrote:*   

> Quando ti sembra ok la parte che stai modificando mandamela

 

Te l'ho spedita via mail.

----------

## FonderiaDigitale

bug 1: check sull'esistenza delle dipendenze.

```
root@Goliath:/usr/src []# ./Qmerge

 

We're playing!

Please hold on while Qmerge initialize...

./Qmerge: line 275: dialog: command not found
```

fix: aggiungi in cima allo script

```
if [ ! -f `which dialog` ]

then

 echo "Dialog not found. emerge it please.

 exit

fi
```

----------

## fedeliallalinea

E se si aggiunge una nuova use si potrebbe integrare con lo scriptino mio che controlla pacchetti gia' installati che userebbero quella nuova use https://forums.gentoo.org/viewtopic.php?t=187724

----------

## xchris

non ti nascondo che mi spiacerebbe cambiargli nome..

ma per questo scopo sarei anche d'accordo.

useselect pero' nn mi sembra indicato. (sembra + un ufed2)

Qmerge effettivamente mergia... (non setta solo le USE)

era nato come QuickMerge.

ciauz

----------

## FonderiaDigitale

mmm... vedi tu, e' solo un suggerimento. il senso e' che altrimenti si finisce per fare come con gentoolkit, ovvero 400 piccoli tool dal nome criptico che non si sa cosa fanno  :Smile: 

----------

## xchris

 *FonderiaDigitale wrote:*   

> bug 1: check sull'esistenza delle dipendenze.
> 
> 

 

esiste gia' una sezione di controllo.

chiaramente manca su dialog!

10x

ciao

----------

## xchris

a dire il vero il controllo su dialog c'e'!

uhm.... vedo che lo hai lanciato da root..

which dialog?

ciao

----------

## mrfree

 *Quote:*   

> emerge -UDav world 

 

Ma non è fortemente sconsigliato l'uso dell'opzione -U ???   :Shocked: 

Premetto che non ho ancora esaminato Qemerge, forse quello che dici è solo per rendere l'idea; in caso contrario credo sarebbe utile adattare lo script in maniera tale da rendere pseudo-automatica o comunque più semplice/intuitivo l'aggiornamento del file 

```
/etc/portage/package.keywords
```

Riguardo l'opzione -U ci sono una marea di post nei vari forum (inglesi), non ricordo se ne abbiamo già parlato anche qui...   :Confused: 

----------

## FonderiaDigitale

non ho capito 'cosa non hai capito'...

-f controlla se e' un file, 'which dialog' passa il path preciso , loopando in cerca del file  all'interno della variabile di ambiente ${PATH}..

----------

## xchris

hihihi no!

lo script lo capisco.  :Smile: 

e ora ho capito l'errore idiota in qmerge.

(controlla l'esistenza dei file indispensabili e avvisa con una dialog... furbo eh?)

aggiorno!

10x

ciao

----------

## FonderiaDigitale

scusate se mi enfatizzo, ma volevo farvi presente un esempio, recente (5 minuti fa), di come il frutto dei nostri sforzi cominci a fruttare.

Vi propongo un esempio di utilizzo concreto:

```
# ./Qmerge

Qmerge has encountered an error.

Take a look at /tmp/qmerge.dupworld file

]# cat /tmp/qmerge.dupworld

 

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

 

Calculating world dependencies

!!! all ebuilds that could satisfy "sys-kernel/linux-headers" have been masked.

!!! possible candidates are:

- sys-kernel/linux-headers-2.0.40 (masked by: package.mask, -* keyword)

- sys-kernel/linux-headers-2.2.26 (masked by: package.mask, -* keyword)

- sys-kernel/linux-headers-2.4.21-r1 (masked by: package.mask)

- sys-kernel/linux-headers-2.4.21 (masked by: package.mask)

- sys-kernel/linux-headers-2.4.22 (masked by: package.mask)

- sys-kernel/linux-headers-2.4.23 (masked by: package.mask, -* keyword)

- sys-kernel/linux-headers-2.4.25 (masked by: package.mask, -* keyword)

- sys-kernel/linux-headers-2.4.26 (masked by: package.mask, -* keyword)

- sys-kernel/linux-headers-2.6.1 (masked by: package.mask, -* keyword)

- sys-kernel/linux-headers-2.6.3-r1 (masked by: package.mask, -* keyword)

- sys-kernel/linux-headers-2.6.4 (masked by: package.mask, -* keyword)

- sys-kernel/linux-headers-2.6.5 (masked by: -* keyword)

- sys-kernel/linux-headers-2.6.6 (masked by: -* keyword)

- sys-kernel/linux-headers-2.6.7 (masked by: -* keyword)

- sys-kernel/linux-headers-2.6.6-r1 (masked by: -* keyword)

!!!    (dependency required by "sys-apps/baselayout-1.9.4-r2" [ebuild])

 

!!! Problem with ebuild gnome-base/gconf-2.7.1

!!! Possibly a DEPEND/*DEPEND problem.

 

!!! Depgraph creation failed.

# ebuildcopy linux-headers-2.6.7 2.6.7-r1

 

Found package portage directory.

Found package version. Ebuild copied and renamed.

 

-rw-r--r--  1 root root 4174 23 giu 21:32 /usr/portage/overlay/sys-kernel/linux-headers/linux-headers-2.6.7-r1.ebuild

 

Do you want to edit it right now?y
```

modificato KEYWORDS="~x86" all'interno dell'ebuild

```
Creating digest for linux-headers version 2.6.7-r1...

 

>>> Generating digest file...

<<< linux-2.6.7.tar.bz2

>>> Generating manifest file...

<<< linux-headers-2.6.7-r1.ebuild

<<< files/bigendian-byteorder-fix.patch

<<< files/generate-asm-sparc

<<< files/linux-headers-2.6.0-appCompat.patch

<<< files/linux-headers-2.6.0-fb.patch

<<< files/linux-headers-2.6.0-strict-ansi-fix.patch

<<< files/linux-headers-2.6.0-sysctl_h-compat.patch

<<< files/linux-headers-2.6.3-appCompat.patch

<<< files/linux-headers-2.6.3-strict-ansi-fix.patch

<<< files/linux-headers-2.6.4-appCompat.patch

<<< files/linux-headers-2.6.4-unistd-nptl-fix.patch

<<< files/linux-headers-strict-ansi-fix.patch

<<< files/linux-headers-2.6.6-appCompat.patch

<<< files/linux-headers-2.6.7-appCompat.patch

<<< files/linux-headers-2.6.6-tcp_info-DRS-backport.patch

<<< files/digest-linux-headers-2.6.7-r1

>>> Computed message digests.

 

Done copying ebuild :)

# emerge linux-headers

Calculating dependencies ...done!

>>> emerge (1 of 1) sys-kernel/linux-headers-2.6.7-r1 to /

>>> md5 src_uri ;-) linux-2.6.7.tar.bz2

>>> Unpacking source...

>>> Unpacking linux-2.6.7.tar.bz2 to /usr/portage/tmp/portage/linux-headers-2.6.7-r1/work

[...]

 * Caching service dependencies...

>>> Auto-cleaning packages ...

 

>>> No outdated packages were found on your system.

 

 

 * GNU info directory index is up-to-date.

# ./Qmerge

```

Dopodiche ho fatto le mie modifiche  :Smile: 

----------

## xchris

bhe  :Smile:  ottimo!

secondo me lavorandoci su un po' il geKit potra' avere successo  :Smile: 

ho uploadato la versione con le modifiche di fedeliallalinea e la correzione per il bug #1 segnalato da fonderia. (e di uno nuovo fresco fresco)

ultima --> ver 0.4a

appena ho raccolto un po' di bugs riscrivo l'head del file con i dovuti credits.

ciao

----------

## xchris

 *mrfree wrote:*   

>  forse quello che dici è solo per rendere l'idea
> 
> 

 

infatti!

lui fa un Dupv!

gli ebuild che sono da downgradare li elenca si,ma uncheckkati!

e' poi l'utente che decide cosa fare..

ciao

----------

## mrfree

 *Quote:*   

> lui fa un Dupv!

 

Bene, questo mi conforta   :Wink: 

Penso proprio che lo proverò...

----------

## xchris

riporta poi le impressioni.

sono utili per migliorarlo.

piccola nota (che fara' storcere il naso ai shellari)

sotto X e possibile operare anche con il mouse. (grazie a dialog)

ciao

----------

## kender_m

Ehmmm ho provato ad usarlo ma mi dice che gli manca qpkg, visto che emerge -s (S) qpkg non hanno dato esito positivo, dove lo trovo?   :Shocked: 

----------

## fedeliallalinea

qpkg e' nel pacchetto gentoolkit

----------

## xchris

uhm che dici?

in qmerge metto la possibilita' di installare quello che manca?

P.S.:in realta' qpkg non serve! e' rimasto il controllo da una vecchia versione.Sistemo presto

----------

## xchris

Sistemato.

Ora quello che manca chiede se puo' installarlo.

(spero che questa volta sia corretto  :Smile:  )

ciao

----------

## FonderiaDigitale

```
# Qmerge

 

We're playing!

Please hold on while Qmerge initialize...

 

Usage: Qmerge [options]

 

Options:

  -s , --sync     for run with emerge sync

  -es, --esync    for run with esync

  -ns, --not-sync for run without syncronization

```

tre considerazioni:

1. la funzione dell'help dovrebbe stare prima che lo script inizializzi le sue funzioni

2. 'for run' e' una bestemmia...semmai 'to run' o semplicemente 'run'  :Smile: 

3. se uno non passa nessun parametro, probabilmente dovrebbe equivalere a -ns... mentre -h o --help mostra l'help.

un'ulteriore cosa: mi e' tornato alla mente che qmerge e' una funzione precisa della procedura di lancio di un ebuild:

 *man ebuild wrote:*   

>        qmerge This function installs all the files in the install directory to the live filesystem. The process works as  follows:  first,  the pkg_preinst()  function  (if specified) is run.  Then, the files are merged into the live filesystem, and  the  installed  files' md5  digests are recorded in /var/db/pkg/${CATEOGRY}/${PN}-[version-rev]/CONTENTS.  After all the files have been  merged,  the pkg_postinst() function (if specified) is executed.

 

Forse potrebbe essere equivoco.

----------

## fedeliallalinea

 *FonderiaDigitale wrote:*   

> 1. la funzione dell'help dovrebbe stare prima che lo script inizializzi le sue funzioni

 

Non cia avevo fatto caso

 *FonderiaDigitale wrote:*   

> 2. 'for run' e' una bestemmia...semmai 'to run' o semplicemente 'run' 

 

Errore mio (non sono bravo con l'inglese).

 *FonderiaDigitale wrote:*   

> 3. se uno non passa nessun parametro, probabilmente dovrebbe equivalere a -ns... mentre -h o --help mostra l'help.

 

Questo l'ho fatto perche' magari uno crede che faccia automaticamente il sync e non che deve dirlo esplicitamente.

----------

## xchris

 *FonderiaDigitale wrote:*   

> 
> 
> un'ulteriore cosa: mi e' tornato alla mente che qmerge e' una funzione precisa della procedura di lancio di un ebuild:
> 
> ...
> ...

 

e te pareva  :Smile: 

Inventero' qc altro!

ben accetti i consigli!

Per la questione -ns / -h devo dire che inizialmente era stato fatto senza sync con Qmerge solo (come comando di startup).

Mi pareva + rapido.

Forse cosi' è + chiaro.

Mi piacerebbe sentire anche l'opinione di qc altro che l'ha provato.

(se c'e'!)

EDIT: se modificassi Qmerge in modo che funzionasse come femerge?

(invece che un UDav world fisso, fare una richiesta da riga di comando in modo tale da usare la feature + interessante (le use))

ciao

----------

## kender_m

Sarebbe possibile implementare anche possibilità di un semplice fetch?

un'altra domanda, c'è per caso uno "storico" delle flag usate per i singoli pacchetti?   :Rolling Eyes: 

la seconda è solo una curiosità, mentre la prima.. beh è una cosa che potrebbe essere utile, imho...

----------

## xchris

 *kender_m wrote:*   

> Sarebbe possibile implementare anche possibilità di un semplice fetch?
> 
> 

 

si mi sembra una buona idea.

Anche se a questo punto visto che non ha senso settare le use trovo + comodo usare emerge direttamente...no?

(devi scusarmi ma da user viziato dalla fibra non mi e' proprio venuto in mente)

 * wrote:*   

> 
> 
> un'altra domanda, c'è per caso uno "storico" delle flag usate per i singoli pacchetti?  
> 
> 

 

al momento non c'e'! e' cmq cosa semplice implementarlo.

puoi cmq usare "etcat -u"

 * wrote:*   

> 
> 
> la seconda è solo una curiosità, mentre la prima.. beh è una cosa che potrebbe essere utile, imho...

 

concordo!

grazie e ciao.

----------

## kender_m

 *xchris wrote:*   

>  *kender_m wrote:*   Sarebbe possibile implementare anche possibilità di un semplice fetch?
> 
>  
> 
> si mi sembra una buona idea.
> ...

 

beh ma volendo solo scaricarne alcuni ed installarne altri...  :Wink: 

 *xchris wrote:*   

>  * wrote:*   
> 
> la seconda è solo una curiosità, mentre la prima.. beh è una cosa che potrebbe essere utile, imho... 
> 
> concordo!
> ...

 

Di nulla  :Very Happy: 

le mie sono solo osservazioni da utente  :Wink: 

ciau

----------

## xchris

per limitazioni sul comando dialog e' meglio usare il sistema:

./Qmerge -f  (fecth)

ciao

----------

## xchris

aggiunta l'opzione --fetch/-f e fatta qc correzione estetica e non (10x fonderiadigitale)

Se viene lanciato con -f non viene mostrato l'opzione delle USE perche' inutili.

kender_m vedi un po' com'e'  :Smile: 

ciao

----------

## FonderiaDigitale

fagli fare un output dei pacchettti che intende emergere una volta che esci da dialog. questo e' utile per chi, come me, usando ~x86, vuole riprendere certi merge saltandone altri.

A me farebbe comodo che redirigesse questa lista verso un file, tipo comando > file, ma mi rendo conto che e' una richiesta parecchio soggettiva  :Smile: 

----------

## xchris

non ci sono problemi a farlo e effettivamente puo' tornare comodo. 

Stavo portando avanti anche una versione particolare con le seguenti opzioni:

Qmerge -ns|-es|-s  [-b|-B|-f]  [-u] [TARGET]

TARGET:-ebuild-,world,system

dove i significati a parte le opzioni di sync coincidono con quelle di emerge.

In questo modo si puo' decidere non solo di fare un aggiornamento del sistema ma anche un installazione di nuovi ebuild con il "solito" controllo delle USE interattivo.

A me pare comodo anche perche' non specificando -b,-B,-f -u e TARGET si conserva la vecchia funzionalita'.

che ne dite? 

ciao

----------

## xchris

ho fatto la modifica suggerita da fonderiadigitale.

per il momento e' molto semplice:

salva in /root/Qmerge.list l'elenco

ebuild: use1 use2 use3

se non sono state settate alcune USE avremo solo l'elenco delgi ebuild

se sono state settate le USE generiche le si vedranno (tutte) su ogni riga

se sono state settate le USE specifiche le si vedrano (solo le specifiche) sulla riga

nel secondo caso non e' proprio il massimo ma consente cmq di proseguire in manuale l'emerge. 

ciao

----------

## kender_m

Ordunque.. ho provato la versione di Qmerge con il "fetch" ed ehmmmm non funziona.. cioè non mi riconosce -f e --fetch come opzioni valide..

inoltre stavo pensando.. non sarebbe più comodo poterla settare come flag nel menù, anziché come variabile d'avvio? (in modo da poter scegliere allo stesso tempo paccheti solo da scaricare, e pacchetti da installare)

----------

## xchris

che ver usi?

come lo lanci?

```

xchris@lyra Qmerge $ ./Qmerge -f -ns

You must be root to execute Qmerge.

Trying to became root..

Give root Password:

```

ciao

----------

## kender_m

 *xchris wrote:*   

> che ver usi?

 

0.4d

 *xchris wrote:*   

> come lo lanci?
> 
> ```
> 
> xchris@lyra Qmerge $ ./Qmerge -f -ns
> ...

 

Ah, ecco errore mio, pensavo funzionasse come le altre opzioni, davo solo 

```
./Qmerge -f
```

  :Rolling Eyes: 

----------

## xchris

dalla prima versione modificata da fedeliallalinea l'opzione di sync (-ns,-s,-es) e' necessaria.

Per quanto riguarda l'opzione che chiedi purtroppo non e' fattibile perche' dipende da dialog che non permette di flaggare un pkt in modo diverso.

Mi dispiace...

ciao

----------

## FonderiaDigitale

 *xchris wrote:*   

> ho fatto la modifica suggerita da fonderiadigitale.
> 
> per il momento e' molto semplice:
> 
> salva in /root/Qmerge.list l'elenco
> ...

 

sempre IMHO, a meno che l'utente non lo richieda esplicitamente (--verbose), lo script dovrebbe dare solo la lista dei pacchetti da inserire, separati da spazi, come fa emerge. questo xche cosi copia incolla e uno si emergia cio che vuole, ad es. se qualcosa va storto.

il file non dovrebbe essere creato in /root, ma in /tmp (/tmp/Qmerge-$date.list) (altrimenti ti assicuro che un utente medio si trova un miliardo di file sparsi  :Smile: 

----------

## xchris

 *FonderiaDigitale wrote:*   

> 
> 
> sempre IMHO, a meno che l'utente non lo richieda esplicitamente (--verbose), lo script dovrebbe dare solo la lista dei pacchetti da inserire, separati da spazi, come fa emerge. questo xche cosi copia incolla e uno si emergia cio che vuole, ad es. se qualcosa va storto.
> 
> 

 

si pero' cosi' si perde il settaggio delle use (feature forse + interessante)

recuperare l'elenco e' cmq cosa semplice (senza le use)

 * wrote:*   

> 
> 
> il file non dovrebbe essere creato in /root, ma in /tmp (/tmp/Qmerge-$date.list) (altrimenti ti assicuro che un utente medio si trova un miliardo di file sparsi 

 

si e' vero...

ma cosi' anche /tmp si riempe!  :Smile: 

cmq a rigor di logica e' meglio in /tmp

ciao

----------

## FonderiaDigitale

Si ma in /tmp e' molto piu facile pulire 'a spazzo' che in /root..

magari se -v non e' corretto, fare il contrario: mettere --quiet?

----------

## SilentShadow

Ciao, ho provato questo tool ed è molto comodo. Allo stesso tempo però stavo usando un'altro tool utilissimo che è EMESG https://forums.gentoo.org/viewtopic.php?t=244343. Ritieni che le due cose possano stare bene insieme?

Un'altra domanda:

se il eseguo un emerge -uDav world ho una lista di pacchetti che veranno installati ed il file world non dovrebbe essere modificato.

Se io installo ogni singolo paccketto a mano questo viene inserito nel file world.

Il tuo programma come agisce?

Ottimo lavoro ciao Dario

----------

## xchris

l'integrazione con emesg potrebbe essere molto interessante...

Il file world non dovrebbe essere toccato perche' emerge tutto con:

emerge =cat/app-ver che non modifica il world file

cmq  questo e' un tool mooooolto vecchio.

Sarebbe il caso di riscriverlo (perche' non mi soddisfa per nulla ora  :Smile: ) e implementare nuove funzioni  :Smile: 

ciao

----------

