Ricompilare tutti i pacchetti SBo installati sul sistema

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
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.
Avatar utente
joe
Iper Master
Iper Master
Messaggi: 2900
Iscritto il: ven apr 27, 2007 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Ricompilare tutti i pacchetti SBo installati sul sistema

Messaggioda joe » mer giu 13, 2018 21:13

Sul mio sistema ho installato pacchetti:
- ufficiali precompilati
- precompilati di terze parti (alien, slacky, ecc)
- ricompilati da me con slackbuilds vari, miei, ufficiali ecc ecc
- compilati via SBo, anche e soprattutto usando il tool "sbopkg"

Siccome ho aggiornato la maggior parte dei pacchetti precompilati (quelli ufficiali e quelli di alien principalmente), volevo ricompilare anche tutti i pacchetti compilati via SBo. E visto che sono tanti stavo cercando una soluzione per automatizzare l'operazione.
In pratica dovrei:
- fare la lista dei pacchetti installati targati "SBo". Facile...
- ricompilarli tutti usando eventualmente anche sbopkg con una "coda" corretta e adattata al parco pacchetti che ho installato

Il problema si riconduce a determinare l'ordine corretto di compilazione dei pacchetti SBo. Prima quelli che servono come dipendenza ad altri e poi appunto tutti gli altri.

Però c'è un particolare:
non voglio compilare pacchetti SBo nuovi, che non sono già installati.
Ci potrebbe essere il caso ad esempio che ho la libreria "pippo-alien". E che questa serva come dipendenza a "pluto-SBo".
Io vorrei solo ricompilare pluto-SBo e non sostituire pippo-alien con un eventuale pippo-SBo (presente appunto anche sul repo SBo).
In questo modo otterrò un pacchetto pluto-SBo compilato "contro" la libreria pippo-alien instalalta sul sistema (che probabilmente servirà così com'è a qualche altro pacchetto targato anch'esso alien).

Quindi determinare l'ordine dei pacchetti SBo da ricompilare non è banale.
Ho chiesto la stessa cosa su LinuxQuestions e se ho ben capito mi hanno consigliato un tool automatico chiamato: "slackrepo":
http://idlemoor.github.io/slackrepo/
https://lists.slackbuilds.org/pipermail ... 21580.html

Ma per fare quello che ho in mente va bene secondo voi?
ripeto l'obiettivo:
- ricompilare tutti i pacchetti SBo installati sul sistema
- nell'ordine giusto in modo che siano soddisfatte tutte le dipendenze
- e in modo da compilare i pacchetti SBo "contro" le librerie presenti sul sistema installate con pacchetti "extra-SBo"

Qualcuno conosce e usa slackrepo?
Può fare quanto richiesto?

Grazie in anticipo! :)
Ultima modifica di joe il gio giu 28, 2018 18:33, modificato 1 volta in totale.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 2900
Iscritto il: ven apr 27, 2007 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Re: Qualcuno usa il tool slackrepo?

Messaggioda joe » gio giu 14, 2018 13:13

Ho provato a creare uno script bash piuttosto semplice che cerca tutti i pacchetti SBo installati sul sistema.
Per ogni pacchetto trovato ne crea la coda di dipendenze, se non è già presente in /var/lib/sbopkg/queues. E la scrive su un file temporaneo di appoggio eliminando eventuali righe di commento che si hanno nei file delle code sbo (vedere per esempio mpv.sqf).

Alla fine in questo file temporaneo ci dovrebbe essere la lista di tutti i pacchetti da ricompilare, in un ordine che mi pare corretto dal punto di vista delle dipendenze, ma ci saranno molti nomi di pacchetti ripetuti N volte. Lo script elimina tutte le righe coi doppioni e tiene solo la prima ricorrenza di un certo pacchetto: ad esempio nel mio caso il pacchetto "ghc" appariva moltissime volte, dopo l'operazione appare solo nella prima riga della coda.

Il file così ottenuto rappresenta la coda dei pacchetti SBo da ricompilare nell'ordine giusto.
Ma c'è un problemam che avevo già accennato.
Sul sistema voglio ricompilare solo i pacchetti SBo già installati e non altri (sempre da SBo) di dipendenza che andrebbero a sostituire versioni extra-SBo già presenti sul sistema.
Esempio "mpv", dipende da "ffmpeg".
Ma sul mio sistema ho già installato ffmpeg da alien (ricompilandolo tra l'altro). Mpv invece l'ho compilato con sbopkg quindi fa parte del parco software targato SBo.
Quindi voglio ricompilare solo "mpv" e non "ffmpeg", anche se "ffmpeg" è presente nella coda totale creata sopra.

Allora in pratica per ogni pacchetto della coda totale bisogna verificare se è installato sul sistema (e questo dovrebbe essere dato certo) e se è targato SBo.
Se è targato SBo, lo mettiamo in un ulteriore file-coda finale.
Se non è targato SBo invece lo lasciamo perdere.

Il file-coda finale così ottenuto conterrà solo i pacchetti SBo presenti sul sistema (tutti) e disposti nell'ordine giusto in modo che siano soddisfatte le dipendenze. O almeno dovrebbe...
Infatti la prova del nove non mi torna, perchè mentre ho installati 255 pacchetti SBo, la coda di rebuild conta 234 pacchetti.

Lo script è piuttosto semplice, sono poche righe...
Se qualcuno ci vuole dare un'occhiata, benvenga. :thumbright:


EDIT:
Versione aggiornata, con questa la prova del nove è verificata: tutti e soli i pacchetti nella coda sono quelli _SBo presenti sul sistema (nel mio caso 255 installati e visibili in /var/log/packages, e 255 nella coda creata).
La versione precedente era ceffata alla grande.
sbo-rebuild.sh
(1.65 KiB) Scaricato 16 volte

Includo anche la lista pacchetti SBo che ho installati sul sistema e la coda creata.
installati-da-SBo.txt
(8.17 KiB) Scaricato 16 volte

2018.06.14-17.42-sborebuild.queue.log
(3.25 KiB) Scaricato 11 volte

In pratica dovrebbero essere gli stessi, ma mentre la lista degli installati, non ha un ordine particolare, nella coda creata i pacchetti sono in ordine di dipendenza soddisfatta. Significa che dando quella coda in pasto a sbopkg non dovrebbe avere problemi a compilare nessun software per colpa di dipendenze non soddisfatte. Questo perchè appunto la coda dovrebbe essere ordinata in modo corretto.

Non è testato in pratica, nel senso che non ho dato la coda in pasto a "sbopkg". In ogni caso lo script non dovrebbe fare danni perchè di fatto crea un banale file di testo.
Commenti sempre benvenuti

:D