Design sistema di build distribuzione linux minimale

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.
miklos
Master
Master
Messaggi: 1505
Iscritto il: lun lug 16, 2007 17:39
Slackware: 14.1 64bit
Kernel: 3.16.3
Desktop: openbox 3.5.2
Località: Roma

Design sistema di build distribuzione linux minimale

Messaggioda miklos » gio gen 03, 2019 8:40

Ciao a tutti,

da un po di tempo a questa parte sto sviluppando una mini distribuzione linux per le blasonate board (ho un raspberry b+) utilizzando un sistema di avvio microscopico e alcuni tool presi da questa comunity https://suckless.org/
Non entro troppo nel merito del perchè non ne uso una già fatta nè sul perchè ho evitato tools come buildroot o yoctoproject perchè pensereste che mi piace fare uso di sostanze stupefacenti :)

In ogni caso vi chiedo un consiglio sul design del sistema che utilizzo per cross compilare e generare i pacchetti perchè la particolarità di questo sistema è che utilizzo i tools di slackware (tar nudi e crudi). Va da se che non sto pacchettizzando in alcun modo una versione mini di slackware.. sto sviluppando un sistema da zero dove però i binari sono dei pacchetti nel formato a noi ben noto.

Volendo, nel mio caso specifico, generare dei pacchetti minimali (non intendo compilare direttamente dal raspberry) attualmente ho inserito una pulizia nuda e cruda in ogni slackbuild, dove rimuovo man pages.. documentazione e files di sviluppo (include e roba varia).
Ma piu vado avanti nello sviluppo e piu' questa cosa non mi piace.

Il dubbio mi è venuto perchè per andare avanti con la compilazione ho necessità che i file di sviluppo vengano comunque installati in un 'filesystem' di appoggio a cui poi il compilatore fa riferimento, quindi i pacchetti da creare sarebbero due (uno minimale e l'altro no).

E qui nasce la domanda... secondo voi è piu' pulito che ogni slackbuild abbia l'opzione per generarsi un pacchetto minimale?!?! Oppure è meglio che sia una shell esterna a snellire quello generato!?!?! Voi che ne pensate!?!

Grazie in anticipo
Michele
ho visto cose che voi astemi non potete immaginare
https://github.com/ilmich

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2899
Iscritto il: mer feb 13, 2008 16:19
Slackware: 14.2
Kernel: 4.4.19
Desktop: KDE4
Località: Bulagna
Contatta:

Re: Design sistema di build distribuzione linux minimale

Messaggioda 414N » lun gen 07, 2019 23:51

Ciao,

caspita, qui ci diamo a "giochi" pesanti! ;)
A mio avviso ti stai avvicinando pian piano al "lato oscuro" dell'impacchetamento Debian-style, dove si tende a separare il separabile dai binari base di un programma. Forse mantenere un sistema coi requisiti che ti poni usando SlackBuild per la generazione dei pacchetti non è proprio il massimo, ma a scopo didattico va bene tutto ;-)

Premesso questo, come dici tu stesso, le strade che puoi percorrere sono principalmente due:
  • modularizzazione degli SlackBuild che usi mediante funzioni "standard" esterne agli script stessi, in modo da minimizzare la riscrittura delle stesse linee di comandi shell per ripulire i pacchetti ed impacchettare i vari pezzi in più sotto-pacchetti;
  • utilizzo di una procedura standard che, a fine compilazione di tutto il parco pacchetti, li minimizzi per produrre la versione installabile sulla scheda, possibilmente mantenendo una copia dei pacchetti interi per successive integrazioni

Il primo approccio era già stato perseguito, per certi versi, dall'autore della ormai vetusta (e defunta) Slamd64, Fred Emott, il quale aveva estrapolato una serie di funzioni dagli SlackBuild soliti (rinominati a quel punto in PHBuild) che venivano richiamate mediante "sourcing" di un file all'inizio di ogni script: i pkghelpers. Se vuoi vedere un esempio, eccoti il file PHBuild relativo al pacchetto di gstreamer distribuito in Slamd64-12.2: http://slackware.uk/slamd64/slamd64-12. ... er.PHBuild.
Per certi versi, questo approccio non stonerebbe neanche nella Slackware standard, visto che ogni SlackBuild presenta il 90% delle volte gli stessi comandi in certe sezioni, tipo per estrarre i sorgenti, sistemare i permessi degli stessi, comprimere man pages, info pages ecc.
Se scegli questa strada, potresti fare in modo di rendere parametriche le funzioni di utilità, in modo da poter indicare pacchetto per pacchetto eventuali deviazioni dagli "standard" riguardo a dove trovare gli header files da rimuovere dal pacchetto minimale, la documentazione/sample di codice ecc., lasciando come default le locazioni solite. Questo approccio permetterebbe una certa flessibilità, ma implica una riscrittura di un bel po' di SlackBuild.

Il secondo approccio ti permetterebbe di mantenere grosso modo inalterati gli SlackBuild che usi, dovendo però intervenire a latere sulla loro minimizzazione, magari pure dopo aver compresso gli archivi tar. A tale scopo, potresti dotarti di uno script o di un qualche sistema che si vada a "pescare" tutti i tarball da minimizzare da una directory ed esegua, per ogni pacchetto trovato, operazioni del tipo:
  1. spacchettamento archivio compresso
  2. individuazione contenuti superflui
  3. rimozione/spostamento contenuti superflui
  4. reimpacchettamento dei binari e degli eventuali pacchetti derivati (header files, docs, librerie statiche ecc.)
Potresti anche pensare di utilizzare uno strumento tipo Ansible per automatizzare certi task.

miklos
Master
Master
Messaggi: 1505
Iscritto il: lun lug 16, 2007 17:39
Slackware: 14.1 64bit
Kernel: 3.16.3
Desktop: openbox 3.5.2
Località: Roma

Re: Design sistema di build distribuzione linux minimale

Messaggioda miklos » gio gen 10, 2019 15:28

Ciao e grazie per l'interessamento :)

414N ha scritto:caspita, qui ci diamo a "giochi" pesanti!
con buona (più o meno) pace di mia moglie :lol:
Comunque non ricordo esattamente il momento in cui mi è venuta in mente quest'idea, forse noia lavorativa o noia delle miriadi distribuzioni 'leggere' che si avviano in minuti e occupano 1gb di spazio (non che sia un problema oggigiorno) ma sono sicuramente passato da https://github.com/bradfa/flaccid-linux.
In ogni caso e tempo permettendo l'obiettivo finale è un mini box che mi faccia da semplice gateway wireless per la domotica con domoticz

414N ha scritto:A mio avviso ti stai avvicinando pian piano al "lato oscuro" dell'impacchetamento Debian-style, dove si tende a separare il separabile dai binari base di un programma
diciamo che ho visto che alcuni pacchetti si portavano dietro mb di file di sviluppo (boost ad esempio) e a me quelli servono esclusivamente in fase di build del filesystem. sul sistema finale non verranno mai utilizzati.

414N ha scritto:Premesso questo, come dici tu stesso, le strade che puoi percorrere sono principalmente due:
modularizzazione degli SlackBuild che usi mediante funzioni "standard" esterne agli script stessi, in modo da minimizzare la riscrittura delle stesse linee di comandi shell per ripulire i pacchetti ed impacchettare i vari pezzi in più sotto-pacchetti;
utilizzo di una procedura standard che, a fine compilazione di tutto il parco pacchetti, li minimizzi per produrre la versione installabile sulla scheda, possibilmente mantenendo una copia dei pacchetti interi per successive integrazioni
alla fine dopo un po' di 'rigurgiti' ho optato per la seconda opzione.
Sostanzialmente ho diviso la compilazione in due fasi
  • compilazione del pacchetto full tramite slackbuild e installazione nella sysroot che utilizza il compilatore
  • tramite script di build principale, untar del pacchetto generato e ricompressione escludendo le directory 'inutili' mantenendo in ogni caso la copia di entrambi

Cosa ne pensi?!?!
ho visto cose che voi astemi non potete immaginare
https://github.com/ilmich

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2899
Iscritto il: mer feb 13, 2008 16:19
Slackware: 14.2
Kernel: 4.4.19
Desktop: KDE4
Località: Bulagna
Contatta:

Re: Design sistema di build distribuzione linux minimale

Messaggioda 414N » gio gen 10, 2019 22:00

Beh, direi che a meno di pacchetti particolari dovrebbe funzionare :thumbright: