Script per unione pacchetti

Postate qui se avete consigli per migliorare i pacchetti disponibili in questo sito o se avete problemi con installazione, funzionamento o altro.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il nome del pacchetto.
2) Specificare se discussione/suggerimento o richiesta d'aiuto.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
ilmich
Master
Master
Messaggi: 1645
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 15.0 64bit
Kernel: 5.15.27
Desktop: kde
Località: Roma

Script per unione pacchetti

Messaggio 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
#LiveSimple and #ProgramThings
https://github.com/ilmich
http://ilmich6502.it/

ilmich
Master
Master
Messaggi: 1645
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 15.0 64bit
Kernel: 5.15.27
Desktop: kde
Località: Roma

Re: Script per unione pacchetti

Messaggio 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)
#LiveSimple and #ProgramThings
https://github.com/ilmich
http://ilmich6502.it/

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Script per unione pacchetti

Messaggio 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.
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

ilmich
Master
Master
Messaggi: 1645
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 15.0 64bit
Kernel: 5.15.27
Desktop: kde
Località: Roma

Re: Script per unione pacchetti

Messaggio 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 :)
#LiveSimple and #ProgramThings
https://github.com/ilmich
http://ilmich6502.it/

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Script per unione pacchetti

Messaggio 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).
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

ilmich
Master
Master
Messaggi: 1645
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 15.0 64bit
Kernel: 5.15.27
Desktop: kde
Località: Roma

Re: Script per unione pacchetti

Messaggio 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
#LiveSimple and #ProgramThings
https://github.com/ilmich
http://ilmich6502.it/

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Script per unione pacchetti

Messaggio da ZeroUno »

a me sembra di averne visto uno tempo fa ma non mi ricordo quale
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Rispondi