# domanda su portage [e una proposta!]

## LucaMartinetti

Ciao a tutti! Ho una domanda abbastanza semplice su portage.. allora..

C'è un modo (magari un opzione di emerge) per dire ad emerge di saltare i pacchetti che non riesce a compilare durante un "emerge -uD world" e continuare con gli altri?

Mi chiedevo se fosse possibile dato che il mio script di update che gira con cron ogni sab si ferma anche quando un solo ebuild fallisce.

Se l'opzione non esiste anche qualche riga di shell script sarebbe ben accetta   :Smile: .

Grazie.

----------

## codadilupo

 *LucaMartinetti wrote:*   

> Ciao a tutti! Ho una domanda abbastanza semplice su portage.. allora..
> 
> C'è un modo (magari un opzione di emerge) per dire ad emerge di saltare i pacchetti che non riesce a compilare durante un "emerge -uD world" e continuare con gli altri?
> 
> Mi chiedevo se fosse possibile dato che il mio script di update che gira con cron ogni sab si ferma anche quando un solo ebuild fallisce.
> ...

 

al momento mi viene in mente solo 

```
# emerge -i pacchetto
```

 che pero' andrebbe fatto solo dopo aver verificato che il tal pacchetto non si compila. In oltre, non é un buon metodo, saltare a pie' pari i pacchetti, perché potrebbero essere davvero importanti. Il mio suggerimento, quindi, é: fai in modo che il tuo script lanci prima bugzilla.py (programmino di morellik, invero moooolto utile) che trovi su www.gentoo.it : se il programma non trova bug noti, allora puoi lanciare l'emerge vero e proprio: al 90% non ci dovrebbero essere problemi.

Coda

----------

## shev

 *codadilupo wrote:*   

> al momento mi viene in mente solo 
> 
> ```
> # emerge -i pacchetto
> ```
> ...

 

Soprattutto presuppone l'intervento manuale, cosa che il nostro amico non vorrebbe visto che parla di update automatico e cron. Sinceramente non so se nelle recenti versioni di portage ci sia un'opzione che permetta a portage di proseguire nonostante gli errori, cmq ci sono diverse cose che mi lasciano perplesso a riguardo:

- imho è sconsigliabile lanciare automaticamente update di sistema se non si è presenti a controllare. Va bene essere fiduciosi, ma un pizzico di sicurezza non guasta mai

- non credo sia una cosa saggia voler proseguire cmq con l'aggiornamento se c'è qualche intoppo, visto che il pacchetto che non compila dovrebbe/potrebbe servire, minando la stabilità del sistema

- se si usa il ramo stabile di gentoo non dovrebbero esserci problemi con gli update, quindi nno dovrebbe fallire la compilazione di nessun pacchetto ne esserci bisogno quindi di opzioni dedicate

Insomma, non so se esiste ciò che chiedi, ma potrebbe essere un bene: certe cose imho vanno fatte con l'amministratore presente  :Wink: 

----------

## codadilupo

 *Shev wrote:*   

> Soprattutto presuppone l'intervento manuale, cosa che il nostro amico non vorrebbe visto che parla di update automatico e cron.

 

Beh, in realtà si puo' automatizzare... un po' di grep e | mi pare possano bastare...

 *Quote:*   

>  Sinceramente non so se nelle recenti versioni di portage ci sia un'opzione che permetta a portage di proseguire nonostante gli errori, cmq

 

Questo si'. Apposto ho suggerito di inserire il bugzilla di morellik: solo se non ci sono problemi noti, allora si puo' andare sula fiducia (e non  essere presenti)  :Wink: 

Coda

----------

## LucaMartinetti

le tue considerazioni sono giustissime ma..

 *Quote:*   

> 
> 
> - imho è sconsigliabile lanciare automaticamente update di sistema se non si è presenti a controllare. Va bene essere fiduciosi, ma un pizzico di sicurezza non guasta mai
> 
> 

 

anche se il server in questione non è assulutamente mission critical (p2p server di casa)

in effetti hai ragione.. sono un pò troppo fiducioso del portage tree.. se la mia fiducia fosse ben riposta tutto si compilerebbe

 *Quote:*   

> 
> 
> - non credo sia una cosa saggia voler proseguire cmq con l'aggiornamento se c'è qualche intoppo, visto che il pacchetto che non compila dovrebbe/potrebbe servire, minando la stabilità del sistema
> 
> 

 

portage compila in sandbox e sovrascrive nel / solo se la compilazione è andata a buon fine, e non si sognerebbe mai di installare qualcosa senza le rispettive dependencies.. non vedo dove sia il problema..

 *Quote:*   

> 
> 
> - se si usa il ramo stabile di gentoo non dovrebbero esserci problemi con gli update, quindi nno dovrebbe fallire la compilazione di nessun pacchetto ne esserci bisogno quindi di opzioni dedicate
> 
> 

 

magari.. giuro di usare kernel stable e nessuna cflag esotica!

 *Quote:*   

> 
> 
> Insomma, non so se esiste ciò che chiedi, ma potrebbe essere un bene: certe cose imho vanno fatte con l'amministratore presente 
> 
> 

 

in alcuni ambiti sono d'accordissimo.. ma la cosa bella di gentoo è la facilità di aggiornamento dei pacchetti.. allora perchè non scriptare tutto?

Che ne dite di una feature request per portage?

idee, commenti, flame, tutto graditissimo..

----------

## MyZelF

Credo che portage abbia già tutto il necessario per fare quello che dici...

Fai uno script che verifichi l'exit status di "emerge -u" e, in caso di errori, lo rilanci con

```
# emerge --resume --skipfirst
```

(in modo ricorsivo)

----------

## shev

Ragazzi, sia chiaro: non ho detto che non si può scriptare il tutto e automatizzarlo. Ho detto che non credo ci sia già un'opzione di emerge che lo faccia, tutto qui. Che poi si possa sempre rimediare con due righe di codice non ci piove, ci mancherebbe  :Very Happy: 

Sulla scelta poi di automatizzare o meno la cosa non discuto oltre, sono scelte soggettive e come tali hanno sempre il mio rispetto. Ho solo manifestato le mie perplessità nel caso non fossero state prese in considerazione, ma se si sono valutati pro e contro allora prego, buon divertimento  :Wink: 

----------

## MyZelF

 *Shev wrote:*   

> Che poi si possa sempre rimediare con due righe di codice non ci piove

 

ma proprio due di numero... nel senso che --skipfirst è pensata apposta per riprendere la compilazione in seguito ad un errore (ignorandolo)...  :Confused: 

 *Shev wrote:*   

> Sinceramente non so se nelle recenti versioni di portage ci sia un'opzione che permetta a portage di proseguire nonostante gli errori

 

vedila come una risposta a questa affermazione, non alla possibilità di scriptizzare il tutto...  :Wink: 

----------

## shev

 *MyZelF wrote:*   

>  *Shev wrote:*   Sinceramente non so se nelle recenti versioni di portage ci sia un'opzione che permetta a portage di proseguire nonostante gli errori 
> 
> vedila come una risposta a questa affermazione, non alla possibilità di scriptizzare il tutto... 

 

Quindi non c'è nessuna opzione che faccia ciò che chiede il nostro amico in automatico (lanciare l'aggiornamento, SE c'è qualche errore lo ignora automaticamente e prosegue oltre). Perchè quella che giustamente tu riporti presuppone che si sia prima lanciato l'aggiornamento, questo si sia bloccato su un pacchetto e quindi venga lanciato il resume ignorando l'ultimo pacchetto. Procedimento che di per sè richiede l'intervento manuale dell'amministratore (ignorando la possibilità di scriptare la cosa, sto parlando solo di opzioni di portage ovviamente). Credo non ci piova, no?  :Wink: 

Poi che usando queste opzioni e mettendole in uno script si ottenga la soluzione è assodato.

/me che sta solo chiarendo il suo discorso (a sè stesso  :Laughing: ), solo che gli ci vogliono tredici post dopo i vaneggiamenti febbrili degli ultimi tre giorni  :Razz: 

----------

## MyZelF

Diciamo che questo è il meglio che emerge possa offrire al momento per risolvere la questione. O almeno credo.

----------

## LucaMartinetti

emerge dice:

 *Quote:*   

> 
> 
>        --skipfirst
> 
>               This option is only valid in a resume situation. It removes the
> ...

 

Quindi le dependencies non vengono ricalcolate..  nel nostro script se fallisce un ebuild richiesto da altri.. una volta saltato falliranno anche gli altri a catena.. triste ma abbastanza ragionevole..

C'è qualcuno che ha già affrontato la questione e puo darmi una mano con lo script? 

Grazie a tutti.

----------

## MyZelF

Qualcosa del genere?

```
#!/bin/sh

function resume () {

    emerge --resume --skipfirst || resume

}

emerge -uD world || resume

```

----------

## cerri

Myzelf, molto carino.

Ecco il mio:

```
#!/bin/sh

if [ `id -u` -ne 0 ]; then

        echo Rootati.

        exit 0

fi

echo Procedo all\'emerge -eD world.

echo Hai 5 secondi per interrompere.

echo

sleep 5

echo Procedo al calcolo delle dipendenze.

PORTAGE_NICENESS=-20 emerge -eDp world | grep ebuild > /tmp/emerge-eDp

echo Calcolo completato.

echo

if [ -f /tmp/emerge-eDp_done ]; then

        echo Alcuni ebuild risultano già ricompilati: li salto.

else

        echo Compilazione da zero.

        touch /tmp/emerge-eDp_done

fi

for EB in `cat /tmp/emerge-eDp | awk '{ print $4 }'`; do

        if [ `grep $EB /tmp/emerge-eDp_done | wc -l` -ne 0 ]; then

                echo L\'ebuild $EB risulta già compilato.

        else

                PORTAGE_NICENESS=-20 emerge `etcat -v $EB | grep "*" |

awk '{ print $2 }'`

                if [ $? -eq 0 ]; then

                        echo Compilato con successo.

                        echo $EB >> /tmp/emerge-eDp_done

                else

                        echo L\'emerge ha riportato un errore.

                        echo $EB >> /tmp/emerge-eDp_errors

                fi

        fi

done

```

----------

