Pagina 1 di 1

Script per unione pacchetti

Inviato: lun 24 feb 2014, 10:07
da ilmich
Ciao a tutti,

per automatizzare alcuni processi di setup e imparare qualcosa di nuovo mi sono messo a scrivere lo script in oggetto. Sostanzialmente dato un certo numero di pacchetti slackware ne volevo creare uno che li contenesse tutti, salvaguardando pero' il funzionamento dei tool di gestione e di aggiornamento dei singoli pacchetti.
Partendo da una directory temporanea, per ottenere lo scopo ho adottato la seguente soluzione per ogni singolo pacchetto della lista in input:
  • lancio del comando explodepkg con redirezione dello standard output dentro il file var/log/packages/<nome-completo-pacchetto>
  • spostamento del file install/doinst.sh in var/log/scripts/<nome-completo-pacchetto>
  • aggiunta della riga var/log/scripts/<nome-completo-pacchetto> in un file doinst.sh temporaneo in modo che in fase di installazione venga lanciato
dopo aver eseguito questi passi per tutti i pacchetti, creo partendo dalla directory temporanea il pacchetto finale con makepkg.

Ho 'partorito' questa soluzione perchè ho tenuto conto di
  • i file dentro var/log/packages/ servono in fase di upgrade dei pacchetti per capire se un determinato pacchetto è installato oppure no
  • dopo l'esecuzione dello script doinst.sh in fase di post installazione viene spostato all'interno della directory var/log/scripts/ percio' spostando quelli di ogni singolo pacchetto in questo path e lanciandoli uno ad uno nel doinst.sh principale dovrei aver 'simulato' l'installazione manuale di ogni singolo pacchetto
ho fatto dei test e sembra tutto 'funzionare' (ho qualche dubbio sull'upgrade di ogni singolo pacchetto perchè i file contenuti dentro var/log/scripts/ sono un po' diversi da quelli prodotti normalmente) però chiedo lumi a gente piu' esperta di me se mi sono perso per strada qualche pezzo.

ciau

Re: Script per unione pacchetti

Inviato: lun 24 feb 2014, 12:34
da ilmich
Quant'e' bella Slackware :D Dato che il suo sistema di pacchetti è scritto in bash ho avuto modo di togliermi tutti i dubbi che avevo, oltre ad aver scoperto altre cosine che non sapevo
1) il comando explodepkg è un semplice untar del pacchetto quindi posso replicarne il comportamento creando pero' i file di installazione sotto var/log/packages in modo molto piu' conforme a quelli standard
2) i file sotto var/log/packages servono solo al comando upgradepkg per capire se tale pacchetto è installato, non vengono ispezionati internamente quindi il punto precedente potrei benissimo evitarmelo, ma visto che voglio fare le cose fatte bene
3) dopo aver installato il pacchetto, il doinst.sh viene in realtà lanciato con il parametro --install :o e mi piacerebbe sapere (se qualcuno lo sa) perchè in fase di rimozione non viene lanciato magari col parametro --uninstall che potrebbe essere utile in qualche caso (oltre ad essere una feature presente in altri sistemi di gestione dei pacchetti)

Re: Script per unione pacchetti

Inviato: lun 24 feb 2014, 15:11
da ZeroUno
miklos ha scritto:2) i file sotto var/log/packages servono solo al comando upgradepkg per capire se tale pacchetto è installato, non vengono ispezionati internamente quindi il punto precedente potrei benissimo evitarmelo, ma visto che voglio fare le cose fatte bene
il contenuto di quel file viene ispezionato da upgradepkg/removepkg per rimuovere il pacchetto, altrimenti non saprebbe cosa rimuovere. Anche il timestamp del file è importante per identificare quando è stato installato il pacchetto (importante in caso di upgradepkg/removepkg), quindi il tuo doinst.sh dovrebbe dare un touch ad install-time di tutti quei file.
mi piacerebbe sapere (se qualcuno lo sa) perchè in fase di rimozione non viene lanciato magari col parametro --uninstall che potrebbe essere utile in qualche caso (oltre ad essere una feature presente in altri sistemi di gestione dei pacchetti)
Questa credo che sia una cosa proposta più volte e da tanti a Pat, e nessuno ha mai capito realmente il perchè non voglia implementarlo.
Questo e tante altre utili feature.

Re: Script per unione pacchetti

Inviato: lun 24 feb 2014, 16:55
da ilmich
ZeroUno ha scritto:il contenuto di quel file viene ispezionato da upgradepkg/removepkg per rimuovere il pacchetto, altrimenti non saprebbe cosa rimuovere
sei sicuro?!?!?! io ho visto che praticamente durante l'upgrade il fatto che installi prima il nuovo.. disinstalli il vecchio e reinstalli il nuovo serve allo scopo
io da quello che ho visto mi sa che fa il test dell'esistenza del file e basta

ma potrei sbagliarmi :)

Re: Script per unione pacchetti

Inviato: lun 24 feb 2014, 17:21
da ZeroUno
il contenuto di /var/log/packages/nomepacchetto contiene l'elenco dei file del pacchetto stesso. Questo elenco è usato da removepkg per sapere quali file rimuovere (come farebbe altrimenti a sapere cosa rimuovere?).

si, upgradepkg di suo effettua solo il controllo dell'esistenza di /var/log/packages/nomepacchetto , tuttavia upgradepkg chiama removepkg, e di conseguenza necessita del contenuto di quel file.


in fase di upgrade viene prima installato il nuovo pacchetto e poi rimossi i file del vecchio che non siano nel nuovo. Questo perchè se fai prima la rimozione e dopo l'installazione, rischi di ritrovarti nell'intervallo con file o librerie mancanti (immagina che stai upgradando 'tar'; se prima rimuovi tar poi non sapresti come installare il nuovo tar visto che è ovviamente un requisito di installpkg).

Re: Script per unione pacchetti

Inviato: lun 24 feb 2014, 18:15
da ilmich
ZeroUno ha scritto:Questo elenco è usato da removepkg per sapere quali file rimuovere (come farebbe altrimenti a sapere cosa rimuovere?).
scusami, hai perfettamente ragione :D
Tarero' lo script di esplosione del pacchetto in modo che crei quei file nel modo corretto.
Ho visto che al netto di alcune informazioni (tipo la dimensione del pacchetto esploso) dovrebbe essere semplice quanto concatenare lo slack-desc e l'output dell'untar con gli appositi indicatori ('PACKAGE DESCRIPTION e FILELIST').
removepkg prende la lista dei file tramite regular expression, quindi sostanzilamente punta a cio' che c'e' dopo FILELIST percio' credo di poter 'saltare' tranquillamente alcune informazioni.
ZeroUno ha scritto:Questa credo che sia una cosa proposta più volte e da tanti a Pat, e nessuno ha mai capito realmente il perchè non voglia implementarlo.
Questo e tante altre utili feature.
tra l'altro a memoria non ho mai visto un doinst.sh che utilizzi il parametro --install

Re: Script per unione pacchetti

Inviato: lun 24 feb 2014, 18:29
da ZeroUno
a me sembra di averne visto uno tempo fa ma non mi ricordo quale