# Aggiornare sistema tramite script

## rakim

Prendendo le informazioni sparse nel forum ho fatto un piccolo script per l'aggiornamento del sistema.

Vorrei sapere se i comandi sono corretti e, se sì, spero che questo piccolo script possa servire ad automatizzare, seppur minimamente, l'aggiornamento:

```
#!/bin/bash

echo 'emerge-webrsync'

emerge-webrsync

echo 'emerge -uDpv'

emerge -uDpv world

echo 'control+d to abort command emerge -uDv world'

for time_slip in 1 2 3 4 5

do      

        echo $time_slip  

        sleep 1

done

echo 'emerge -uDv world'

emerge -uDv world

echo 'emerge -v depclean'

emerge -v depclean

echo 'revdep-rebuild -pv'

revdep-rebuild -pv

echo 'control+d to abort command revdep-rebuild -v'

for time_slip in 1 2 3 4 5

do

        echo $time_slip  

        sleep 1

done

echo 'revdep-rebuild -v'

revdep-rebuild -v

echo 'dispatch-conf'

dispatch-conf

```

Last edited by rakim on Thu Apr 07, 2005 5:01 pm; edited 2 times in total

----------

## fedeliallalinea

Io il depclean lo toglierei e' un'operazione un poco delicata

----------

## neryo

io mettere un controllo seguito da un opportuno messaggio per controllare la presenza di gentoolkit, e magari provvedendo a emergiarlo. Visto che revdep-rebuild fa parte di gentoolkit è giusto quantomeno segnalare che ha questo tipo di dipendenza...  :Wink: 

----------

## Benve

Non so cosa sia esattamente (ho letto solo il titolo) ma posto questo link che mi sembra in tema:

http://www.panhorst.com/glcu/

----------

## .:chrome:.

io mi ero messo a fare qualcosa, ma ho giusto iniziato e poi l'ho lasciato lì a fare muffa...

ti farò sapere quando mi deciderò a finirlo

----------

## rakim

 *fedeliallalinea wrote:*   

> Io il depclean lo toglierei e' un'operazione un poco delicata

 

Fatto

 *neryo wrote:*   

> io mettere un controllo seguito da un opportuno messaggio per controllare la presenza di gentoolkit, e magari provvedendo a emergiarlo

 

Lo farò a breve!

EDIT:

 *Benve wrote:*   

> Non so cosa sia esattamente (ho letto solo il titolo) ma posto questo link che mi sembra in tema:
> 
> http://www.panhorst.com/glcu/

 

E' interessante ma voglio qualcosa di meno funzionale =P

EDIT2:

Come bisogna fare per assegnare ad una variabile il risultato di un comando bash?

Ad esempio:

Come faccio ad assegnare a $comando

```
emerge -pv gentoolkit | grep gentoolkit | grep R
```

 :Question: 

----------

## comio

 *rakim wrote:*   

> 
> 
> Come bisogna fare per assegnare ad una variabile il risultato di un comando bash?
> 
> Ad esempio:
> ...

 

così:

```

comando=`emerge -pv gentoolkit | grep gentoolkit | grep R`

```

comuqnue io starei attento a quel grep R... 

ciao

----------

## gutter

Oppure anche:

```
comando=$(emerge -pv gentoolkit | grep gentoolkit | grep R)
```

----------

## rakim

 *comio wrote:*   

> [
> 
> comuqnue io starei attento a quel grep R... 
> 
> 

 

Potrei mettere direttamente:

grep 

```
 [ebuild   R   ] 
```

 ???

----------

## PboY

if [ -e "/usr/bin/etcat" ]; then echo esiste; fi;

senza l'uso di emerge vari che rallentano  :Smile: 

----------

## rakim

Ho "finito" il mio script:

```
#!/bin/bash

if [ ! -e "/usr/bin/etcat" ]; then # echo esiste; fi;

        while [[ "$scarica" != "y" && "$scarica" != "Y" && "$scarica" != "n" && "$scarica" != "N" ]]

        do

                echo 'You don`t have gentoolkit. Do you want to emerge it? (y/n)'

                read scarica

        done

        if  [ "$scarica" = "y" ] # || "$scarica" = "Y" 

        then

                echo 'emerge gentoolkit'

                # emerge gentoolkit

        fi

fi

echo 'emerge-webrsync'

emerge-webrsync

echo 'emerge -uDpv'

emerge -uDpv world

echo 'control+d to abort command emerge -uDv world'

for time_slip in 5 4 3 2 1

do

        echo -n $time_slip

        echo -n ' '

        sleep 1

done

echo

echo 'emerge -uDv world'

emerge -uDv world

echo 'revdep-rebuild -pv'

revdep-rebuild -pv

echo 'control+d to abort command revdep-rebuild -v'

for time_slip in 5 4 3 2 1

do

        echo -n $time_slip  

        echo -n ' '

        sleep 1

done

echo

echo 'revdep-rebuild -v'

revdep-rebuild -v

echo 'dispatch-conf'

dispatch-conf 
```

Vi prego, se avete qualche suggerimento, fatemi sapere!

Spero comunque che questo piccolo script possa rervire a qualcuno!  :Rolling Eyes: 

EDIT: di questo script ho anche un'altra versione che anzicchè fare il conto alla rovescia aspetta la pressione del tasto invio da parte dell'utente!

Se credete sia migliore, fatemi sapere! Mageri posto anche quella!

----------

## Cazzantonio

anche a me piace di più la versione senza conto alla rovescia  :Wink: 

inoltre gli farei lanciare anche un unclepine -u per vedere i pacchetti superflui  :Wink: 

----------

## rakim

 *Cazzantonio wrote:*   

> anche a me piace di più la versione senza conto alla rovescia 

 

Eccola qui:

```

#!/bin/bash

if [ ! -e "/usr/bin/etcat" ]; then # echo esiste; fi;

        while [[ "$scarica" != "y" && "$scarica" != "Y" && "$scarica" != "n" && "$scarica" != "N" ]]

        do

                echo 'You don`t have gentoolkit. Do you want to emerge it? (y/n)'

                read scarica

        done

        if  [ "$scarica" = "y" ] # || "$scarica" = "Y" 

        then

                echo 'emerge gentoolkit'

                # emerge gentoolkit

        fi

fi

echo 'emerge-webrsync'

emerge-webrsync

echo 'emerge -uDpv'

emerge -uDpv world | less

echo 'Press return to continue' 

echo 'Control+d to abort command emerge -uDv world'

read

echo 'emerge -uDv world'

emerge -uDv world

echo 'revdep-rebuild -pv'

revdep-rebuild -pv | less

echo 'Press return to continue' 

echo 'Control+d to abort command revdep-rebuild -v'

read

echo 'revdep-rebuild -v'

revdep-rebuild -v

echo 'dispatch-conf'

dispatch-conf

```

 *Cazzantonio wrote:*   

> inoltre gli farei lanciare anche un unclepine -u per vedere i pacchetti superflui 

 

L'unico problema è che unclepine non è ancora in portage (correggimi se sbaglio) e quindi potrebbe complicare un po'la vita ad un newbie (non che io non lo sia).

Penso infatti che questo piccolo script possa servire principalmente a chi è ancora alle primissime armi in modo da automatizzare l'aggiornamento.

Per quanto riguarda la differenza fra le due versioni (conteggio alla rovescia e con richiesta di invio) credo che siano entrambi utili perché,nel primo caso, se uno non può essere davanti al pc per aggiornare il sistema può ugualmente farlo perché, passati i 5 secondi, le operazioni vengono eseguite mentre nel secondo c'è bisogno che si confermi l'operazione. Io però consiglio vivamente quello con la richiesta di conferma per "obbligare" in un certo senso l'utilizzatore a stare davanti al pc durante l'aggiornamento perché bisogna SEMPRE osservare personalmente un'operazione così importante quale l'aggiornamento del sistema.

----------

## Cazzantonio

 *rakim wrote:*   

> Io però consiglio vivamente quello con la richiesta di conferma per "obbligare" in un certo senso l'utilizzatore a stare davanti al pc durante l'aggiornamento perché bisogna SEMPRE osservare personalmente un'operazione così importante quale l'aggiornamento del sistema.

 

io la vedo in maniera opposta... ovvero se hai la conferma con il return puoi andartene dove vuoi e quando torni davanti al pc non ti sei perso niente di prezioso e puoi continuare con l'aggiornamento....  :Rolling Eyes:  comunque dipende dalle esigenze  :Smile: 

----------

## rakim

Infatti, anch'io sono per il "return" e quando facevo riferimento a restare davanti al pc mi riferivo principalmente al fatto di dover sempre controllare l' emerge -pv <elemento>

----------

## Danilo

Proprio qualche giorno fa mi sono accorto dell'opzione -w di esync 

```

esync -w

```

e da allora lo uso al posto di emerge-websync.

A differenza di questi lancia l'eupdatedb (oltre a visualizzare i tutti pacchetti aggiornati).

IMHO sarebbe piu' indicato se vuoi usare l'esearch

----------

## rakim

Puoi darmi qualche delucidazione su esync?

Non l'ho mai utilizzato, non sapevo della sua esistenza e non so a cosa serva!  :Embarassed: 

----------

## gutter

 *rakim wrote:*   

> Puoi darmi qualche delucidazione su esync?

 

In pratica questo programma effettua un:

```
emerge sync
```

con la differenza che ti mostra tutti i pacchetti di portage che sono stati aggiornati rispetto al sync precedente.

----------

## Danilo

 *gutter wrote:*   

>  *rakim wrote:*   Puoi darmi qualche delucidazione su esync? 
> 
> In pratica questo programma effettua un:
> 
> ```
> ...

 

Mi sembra che emerge-sync non faccia l'eupdatedb.

Comunque l'esync dopo aver aggiornato portage lancia updatedb che indicizza i pacchetti e ti permette di usare 

```

esearch nomepacchetto

o 

esearch -S nomepacchetto

```

che essendo indicizzato e' piu' veloce di 

```

emerge -s nomepacchetto

o 

emerge -S nomepacchetto

```

esync da  come hoi accennato fa varie cose, quelle che si vedono (non avendo studiato il codice):

1) aggiornamento di portage (nuovi ebuild)

2) lancio eupdatedb (indicizzazione ebuilds)

3) visualizza nuovi pacchetti

Esync a differenza di emerge-websync usa il servizio rsync (e cosi' aggiorna il portage a qualche minuto fa per intenderci)

emerge-websync usa il wget di un tar (di regola risalente alla sera prima se lo lanci il mattino)

Avendo visto che tu usi emerge-websync ho pensato che avevi problemi di firewall (spesso nelle aziende si chiude la porta rsync e si lascia aperta una http su un proxy) per questo ti ho consigliato un esync -w (-w lancia appunto emerge-websync al posto di emerge sync del punto 1)

Ti ripeto se usi esearch (e non emerge -s o eix) puoi usare esync (se non la porta rsync chiusa) o esync -w (se puoi passare solo via http/ftp)

----------

## .:chrome:.

io sto lavorando a qualcosa di simile. se si può interessare, possiamo fare un merge delle due versioni.

io sono partito da alcuni principi che dal mio punto di vista sono abbastanza importanti

 - deve essere semplice nel concetto e nel funzionamento, e deve essere configurabile tramite un semplice file di testo, possibilmente in /etc

 - vorrei che sia qualcosa di semplice, in modo che ogni utente possa personalizzarlo a suo piacimento, se necessario; per questo ho escluso il programma in C che avevo ipotizzato all'inizio a favore di uno script

 - deve girare su macchine poco potenti, quindi ho scartato la possibilità di usare perl o python. bash è più che sufficiente

 - se qualcosa va male lo script si deve interrompere, per cui devono essere intercettati i return code di ogni comando invocato, e in caso di fallimento deve essere segnalato il motivo

 - deve fare un controllo sulla validità della configurazione e sul'integrità del world file

 - non deve appoggiarsi a nessun programma, se non a quelli forniti da portage e gentoolkit. unclepine & soci potrebbero non essere installati ovunque e l'amministratore potrebbe non volerli installare

 - gli aggiornamenti non devono essere effettuati automaticamente, ma si deve mandare una segnalazione all'amministratore del fatto che essi sono disponibili

@rakim: fammi sapere cosa ne pensi (comunque vale per tutti gli interessati: ogni suggerimento/commento è ben accetto)

EDIT: domenticavo due cose:

 - deve essere schedulabile in cron

 - l'unica cosa che deve installare e/o aggiornare automaticamente è gentoolkit

 - deve appoggiarsi a glsa-checkLast edited by .:chrome:. on Sun Apr 10, 2005 8:27 am; edited 1 time in total

----------

## rakim

CI STOOO!

Fammi sapere come collaborare...  :Wink: 

EDIT: Preso dall'euforia non ho scritto che concordo ad ogni tuo punto!

@Danilo: grazie della risposta: molto esauriente! Sinceramente concordo con k.gothmog sul fatto che lo script non debba avere molte dipendenze ma esearch lo utilizzerò a scopo personale perché è un programmino molto interessante! :Wink:  Grazie ancora!

----------

## .:chrome:.

 *rakim wrote:*   

> CI STOOO!

 

uhm... mi fa piacere che l'idea ti sia piaciuta.

ti faccio notare che ho aggiunto un paio di punti al mio post precedente.

puoi contattarmi via IM. se vai nel mio profilo trovi il link ad un ignobile ammasso di pagine php e in una di quelle c'è anche scritto come contattarmi  :Smile: 

----------

## .:chrome:.

riesumo questo vecchio thread...

probabilmente non gliene frega niente a nessuno, ma... ABEMUS PAPAM  :Shocked:   sorry, volevo dire... ABEMUS SCTIPT  :Laughing: 

alura... riassumo in sostanza quello che c'è:

prima di tutto, una funzione checkconfig verifica che siano leggibili alcuni file (make.conf e make.profile), e che esista mailx (che uso per mandare una mail all'amministratore). in caso di risposta negativa risponde picche ed esce.

poi parte l'update

prima viene fatto il sync di portage (ovviamente senza output), poi uso una versione modificata di glsa-check (alla quale ho tolto solo la parte di output in cui stampa i messagg di avviso) per avere una lista dei SA disponibili per il sistema, e se ce ne sono, viene mandata una mail all'amministratore, e vengono aggiornati automaticamente.

per quanto riguarda invece gli aggiornamenti di portage, lo script si limita a fare il sync. l'aggiornamento vero e proprio ho pensato di lasciarlo al sistemista

l'importante è che vengano soddisfatti i SA, e infatti quelli vengono aggiornati in modo tacito.

presto (entro martedì, giusto il tempo di collaudarlo un po' seriamente) pubblicherò anche il tutto. ci sono commenti?

----------

## Cazzantonio

utile  :Smile: 

magari per mail potrebbe mandare anche l'elenco di tutti gli aggiornamenti così l'amministratore sa se è il caso di aggiornare o meno....  :Rolling Eyes: 

 per l'etc-update dei paccehtti installati per via del glsa come fa? spero non faccia un aggiornamento barbaro  :Very Happy: 

----------

## .:chrome:.

 *Cazzantonio wrote:*   

> magari per mail potrebbe mandare anche l'elenco di tutti gli aggiornamenti così l'amministratore sa se è il caso di aggiornare o meno....

 

appunto. è quello che fa

 *Cazzantonio wrote:*   

> per l'etc-update dei paccehtti installati per via del glsa come fa? spero non faccia un aggiornamento barbaro 

 

no, no... dal momento che viene lasciato all'amministratore il compito di aggiornare, è ovvio che etc-update non viene richiamato.

personalmente credo sia una cosa un po' troppo delicata perché la si possa automatizzare

----------

## Cazzantonio

 *k.gothmog wrote:*   

> appunto. è quello che fa

 

avevo capito che mandava la mail solo nel caso ci fossero aggiornamenti suggeriti da glsa-check... mentre sarebbe comodo ricevere anche la lista di tutti gli aggiornamenti suggeriti da emerge -pvDu world  :Wink: 

----------

## .:chrome:.

 *Cazzantonio wrote:*   

>  *k.gothmog wrote:*   appunto. è quello che fa 
> 
> avevo capito che mandava la mail solo nel caso ci fossero aggiornamenti suggeriti da glsa-check... mentre sarebbe comodo ricevere anche la lista di tutti gli aggiornamenti suggeriti da emerge -pvDu world 

 

no, no... se salta fuori qualcosa da glsa-check lo aggiorna da solo senza chiedere conferma, e POI manda una mail di notifica.

invece i soliti aggiornamenti vengono segnalati per posta (viene inviato l'output di emerge "-uDp world --newuse")

----------

## Dr.Dran

@k.gothmog

ottimo ragazzi postate lo script, così lo possiamo commentare insieme ed eventulamente inserire modifiche e miglioramenti  :Very Happy: 

----------

## .:chrome:.

 *DranXXX wrote:*   

> ottimo ragazzi postate lo script, così lo possiamo commentare insieme ed eventulamente inserire modifiche e miglioramenti

 

lo farò, ma non ora. è ancora in evoluzione. ogni tre per due lo ribalto... prima arrivo a una versione stabile, poi ne parleremo  :Wink: 

----------

## Dr.Dran

Grande! rimango fervente in attesa e intanto provo a qualche cosina anche io!  :Wink:   :Cool:   :Very Happy: 

----------

## .:deadhead:.

 *rakim wrote:*   

> emerge-webrsync

 

Come mai non fai un ben più semplice ed efficace  esync (pacchetto esearch installato) o un emerge sync con uso di eix ?

Mi ricordo che c'è un motivo per cui avevo smesso di usare esearch, in favore di eix. Quest'ultimo nn ti mostra tutti i nuovi pacchetti aggiornati o aggiunti al portage ma è esser più veloce nelle ricerche e nella creazione della cache: https://forums.gentoo.org/viewtopic-t-278819-highlight-eix.html +  https://forums.gentoo.org/viewtopic-t-281999-highlight-eix.html

----------

## .:chrome:.

http://darkstar.ing.unibs.it/~gothmog/glau-20050425.tar.bz2

----------

## .:deadhead:.

Non è il caso di controllare la presenza di gentoolkit ed usare il glsa-check ivi contenuto, piuttosto che installare così brutalmente nel sistema? E se GLSA-check e/o portage cambiano? sarebbe meglio evitare sorprese, rendendo lo script il più modulare possibile  :Wink: 

----------

## .:chrome:.

 *.:deadhead:. wrote:*   

> Non è il caso di controllare la presenza di gentoolkit ed usare il glsa-check ivi contenuto, piuttosto che installare così brutalmente nel sistema? E se GLSA-check e/o portage cambiano? sarebbe meglio evitare sorprese, rendendo lo script il più modulare possibile 

 

infatti gentoolkit viene installato solo se non presente.

la modifica che mi sono permesso di fare a glsa-check è consistita solo nell'eliminazione di alcuni messaggi informatici all'inizio, in modo da avere, come output solo l'elenco delle SA. nulla di più

era più semplice fare così che scriversi un'espressione sed che selezionasse quello che volevo

----------

## gutter

 *k.gothmog wrote:*   

> 
> 
> personalmente credo sia una cosa un po' troppo delicata perché la si possa automatizzare

 

Concordo.

Io invierei anche la lista dei file da aggiornare.

----------

## .:chrome:.

 *gutter wrote:*   

> Io invierei anche la lista dei file da aggiornare.

 

a cosa ti riferisci? a quella prodotta da gentoolkit o a quella prodotta da emerge -u world?

secondo la mia idea, i security advisory segnalati da glsa-check vengono soddisfatti AUTOMATICAMENTE, e la cosa viene poi notificata all'amministratore

vene poi fatto un emerge -uD world --newuse e quell'output viene mandato per posta all'amministratore che, in base a quello che si trova, può decidere se aggiornare o no

----------

## gutter

 *k.gothmog wrote:*   

> 
> 
> vene poi fatto un emerge -uD world --newuse e quell'output viene mandato per posta all'amministratore che, in base a quello che si trova, può decidere se aggiornare o no

 

Era questa la lista a cui mi riferivo.

----------

## neryo

Se uno volesse solamente aggionare i security advisory presenti in glsa-check, senza doverli selezionare uno a uno tra i pacchetti da aggiornare?

----------

## gutter

 *neryo wrote:*   

> Se uno volesse solamente aggionare i security advisory presenti in glsa-check, senza doverli selezionare uno a uno tra i pacchetti da aggiornare?

 

Credo che k.gothmog usi il comando:

```
glsa-check -f all
```

vediamo lui che ci dice  :Wink: 

----------

## .:chrome:.

 *gutter wrote:*   

>  *neryo wrote:*   Se uno volesse solamente aggionare i security advisory presenti in glsa-check, senza doverli selezionare uno a uno tra i pacchetti da aggiornare? 
> 
> Credo che k.gothmog usi il comando:
> 
> ```
> ...

 

circa. comunque il mio script quegli aggiornamenti li fa da solo senza chiedere conferma

----------

## gutter

 *k.gothmog wrote:*   

> 
> 
> circa. 

 

Che vuoi dire? Che procedura adoperi?

----------

## neryo

 *k.gothmog wrote:*   

> 
> 
> circa. comunque il mio script quegli aggiornamenti li fa da solo senza chiedere conferma

 

Si ok.. io vorrei sapere se cè un modo per aggiornare solo ed esclusivamente i securtity advisory e non installare il resto! Grazie..  :Rolling Eyes: 

EDIT: chiaramente senza dover selezionare esplicitamente i pacchetti che ritrovo tramite un glsa-check..

----------

## gutter

Hai provato il comando che ho scritto sopra?

----------

## neryo

 *gutter wrote:*   

> Hai provato il comando che ho scritto sopra?

 

si lo sto provando ora... anche se mi preoccupa che mi ha dato questo qarning....

 *Quote:*   

> WARNING: This tool is completely new and not very tested, so it should not be
> 
> used on production systems. It's mainly a test tool for the new GLSA release
> 
> and distribution system, it's functionality will later be merged into emerge
> ...

 

Cmq sembra comportarsi come volevo io... thx  :Wink:   :Wink: 

----------

## neryo

[quote="neryo"] *gutter wrote:*   

> Hai provato il comando che ho scritto sopra?

 

si lo sto provando ora... anche se mi preoccupa che mi ha dato questo warning....daltronde questo era l'opzione dell'help: 

```
-f      --fix           : try to auto-apply this GLSA (experimental)
```

 *Quote:*   

> WARNING: This tool is completely new and not very tested, so it should not be
> 
> used on production systems. It's mainly a test tool for the new GLSA release
> 
> and distribution system, it's functionality will later be merged into emerge
> ...

 

Cmq sembra comportarsi come volevo io... thx  :Wink:   :Wink: 

----------

## .:chrome:.

dovrei avere sistemato tutto quanto.

se qualcuno lo vuole provare... http://darkstar.ing.unibs.it/~gothmog/glau-current.tar

----------

## neryo

 *k.gothmog wrote:*   

> dovrei avere sistemato tutto quanto.
> 
> se qualcuno lo vuole provare... http://darkstar.ing.unibs.it/~gothmog/glau-current.tar

 

ottimo dopo lo provo!  :Wink: 

----------

