Come compilare, creare e inviare estensioni Tiny Core (TC) (nome_estensione.tcz)
Panoramica del processo:
- generalmente si utilizza il processo di configure, make e make install
- separa i documenti, le traduzioni e i file di sviluppo per mantenere piccole le estensioni ad esempio:
- nome_estensione-locale.tcz (contiene informazioni sulla lingua)
- nome_estensione-dev.tcz (contiene file di sviluppo)
- nome_estensione-doc.tcz (contiene documentazione/pagina man)
- includi informazioni su copyright/licenza come richiesto dal software (la maggior parte della GPL non lo richiede)
- comprimi tutto nella tua estensione appena creata (nome_estensione.tcz)
- prepara file di supporto aggiuntivi:
nome_estensione.tcz.dep #solo se l’estensione richiede dipendenze
nome_estensione.tcz.info #visualizzato dall’Apps Browser, tce-ab
nome_estensione.tcz.list #elenca tutti i file/percorsi di estensione
nome_estensione.tcz.md5.txt #utilizzato per verificare l’integrità dell’estensione e gli aggiornamenti dei flag
nome_estensione.tcz.zsync #generato automaticamente durante l’esecuzione di submitqc prima dell’invio
nome_estensione.tcz.build-dep #informazioni facoltative per aiutare le future ricompilazioni - comprimi il tutto ed invialo come allegato a TC
NOTA: molti esempi qui di seguito si basano sulla preparazione dell’estensione del gioco roguelike denominata rogue.tcz da /tmp:
– la directory di compilazione temporanea utilizzata è /tmp/rog
– la directory di destinazione utilizzata è /tmp/rogue
– l’estensione finalizzata è stata chiamata rogue.tcz
– facile per esercitarsi con una sola dipendenza (ncurses-dev.tcz)
– codice sorgente scaricato direttamente dal sito web:
http://rogue.rogueforge.net/rogue-5-4/
Preparazione:
- carica compiletc e squashfs-tools
NOTA: potrebbe essere necessario caricare opzionalmente automake.tcz e autoconf.tcz
NOTA: potrebbe essere necessario caricare gettext.tcz se sono coinvolte delle traduzioni
- carica tutte le estensioni nome_dipendenza.tcz e nome_dipendenza-dev.tcz conosciute elencate come dipendenze del programma
NOTA: Non caricare le dipendenze richieste e le estensioni (compiletc, squashfs-tolls, submitqc) ondemand. Tulle le dipendenze per compilare e creare la nuova estensione devono essere caricate onboot o manualmente con il comando:tce-load -i nome_dipendeza-dev.tcz
NOTA: le estensioni nome_dipendenza-dev.tcz caricano e installano automaticamente nome_dipendenza.tcz
- estrai il tuo codice sorgente, ad esempio:
tar xvf nome_pacchetto.tar.bz2
- crea una directory di lavoro temporanea e copiare il codice sorgente, esempio:
mkdir /tmp/rog
mv /home/tc/Desktop/extracted_rogue_source/ /tmp/rog
Configure:
- passa alla directory di lavoro temporanea, esempio:
cd /tmp/rog
- controlla il file README del codice sorgente per la compilazione e le istruzioni di compilazione
- per elencare le opzioni di configurazione del codice sorgente esegui:
./configure --help
NOTA: alcuni sorgenti non verranno compilati senza specificare le opzioni in fase di compilazione nel comando ./configure
NOTA: alcuni codici sorgente non richiedono ./configure, ma solo make (rivedere i README del sorgente, vedere la sezione Make di seguito)
- scegli tra vari comandi di configurazione:
NOTA: utilizza il comando di base ./configure
solo per estensioni personali (potrebbe non funzionare su altro hardware, non inviare):
./configure --prefix=/usr/local --some-options
#sostituisci ‘–some-options’ con le opzioni di compilazione desiderate
- i seguenti flag sono necessari per garantire la conformità dell’estensione per l’invio, ad esempio il comando
./configure
:
CC="gcc -march=i486 -mtune=i686 -Os -pipe" CXX="g++ -march=i486 -mtune=i686 -Os -pipe -fno-exceptions -fno-rtti" ./configure --prefix =/usr/local --disable-static --localstatedir =/var
- se si riscontrano problemi durante la compilazione:
- aggiungi le dipendenze mancanti e riesegui il comando ./configure
- leggere e ricercare i messaggi di errore (google, vecchi post del forum, richiesta di assistenza)
- esaminare e abilitare le opzioni di configurazione applicabili per assistere con la risoluzione dei problemi, ad esempio:
–enable-debug # Debug in runtime
–enable-compile-warnings # Abilita gli avvisi dettagliati del compilatore
Make:
- esegui il comando
make
dopo./configure
completo e senza errori:make
- se il
make
fallisce:- chiudi e riapri un nuovo terminale e riprova;
- esegui “
make distclean
” e riprova ; - ricontrolla le opzioni
./configure
e ricomincia dall’inizio - elimina la directory di lavoro del codice sorgente, decomprimi di nuovo la sorgente, e ripeti dall’inizio
- leggi e ricerca i messaggi di errore (google, vecchi post del forum, richiesta di assistenza)
Make install:
- crea una directory di destinazione temporanea, esempio:
mkdir /tmp/rogue
- dall’interno della directory di lavoro (es. /tmp/rog) esegui:
‘sudo make install
‘, esempio:sudo make DESTDIR=/tmp/rogue install
NOTA: "DESTDIR=/tmp/rogue" punta "make install" nella directory di destinazione prevista
- se il comando -strip è supportato, puoi provare a eseguirlo per ottenere un’estensione più piccola:
sudo make DESTDIR=/tmp/rogue install-strip
- spostati nella directory di destinazione e rivedi i percorsi e i contenuti della tua futura estensione:
cd /tmp/rogue
#esplora i contenuti come desideri
NOTA: alcune applicazioni non sembrano supportare ‘DESTDIR = …’, in tal caso:
– potrebbe essere necessario creare manualmente percorsi di estensione, ad esempio:sudo mkdir -p /tmp/rogue/usr/local/bin
sudo mkdir -p /tmp/rogue/usr/local/share/doc
– e posiziona manualmente tutti gli eseguibili e i file di supporto, ad esempio:
sudo cp /tmp/rog/rogue /tmp/rogue/usr/local/bin/
sudo cp /tmp/rog/rogue-5.4.4 /tmp/rogue/usr/local/share/doc/
Pulisci e ottimizza:
- esegui strip dalla posizione binaria della directory di destinazione per ridurre la dimensione del binario, esempio:
cd /tmp/rogue/usr/local/bin
sudo strip -g * - se applicabile, questi comandi possono ridurre ulteriormente le dimensioni dell’estensione:
strip --strip-all
#prova a rimuovere su file eseguibili in bin, sbin, libexecstrip --strip-unneeded
#prova a rimuovere su librerie dinamiche, file *.so in libstrip --strip-debug
#prova a rimuovere su librerie statiche, file *.a in libstrip -g
#prova a rimuovere su librerie statiche, file *.a in lib
File desktop e icona del programma:
- Per la maggior parte delle estensioni dovrebbero essere forniti un file desktop e un’icona del programma
- il file deve essere inserito nel percorso /usr/local/share/applicatons, esempio di file manager MFM:
mkdir -p /tmp/mfm/utente/local/share/applications
touch /tmp/mfm/user/local/share/applications/mfm.desktop - semplice esempio di file desktop: [Desktop Entry]
Type=Application
Name=mfm
Exec=/usr/local/bin/mfm
Icon=mfm
X-FullPathIcon=/usr/local/share/pixmaps/mfm.png
Categories=Utility - sarà necessario creare un percorso per le icone, esempio:
mkdir -p /tmp/mfm/utente/local/share/pixmaps/
- quindi posizionare il .png, esempio:
cp /tmp/mfm.png /tmp/mfm/usr/local/share/pixmaps/
Autorizzazioni:
- le autorizzazioni e la proprietà dell’estensione dovrebbero essere valide se sudo è stato utilizzato con
“sudo make DESTDIR=/tmp/rogue install” precedentemente - altrimenti controlla la proprietà e le autorizzazioni di directory e file
- durante la ricerca sono state rilevate varie preferenze, alcune contrastanti:
- ricontrolla per garantire root: proprietà dello staff e permessi 775 per binario (es. /usr/local/bin/rogue)
NOTA: che i file lib degli oggetti condivisi (che finiscono in .so o .so *) sono trattati come eseguibili (root: proprietà dello staff, 775 permessi) - i file lib degli oggetti statici (che terminano con .a o .la) sono classificati come file normali (autorizzazione 644)
- i permessi dei collegamenti simbolici verranno visualizzati come 777, il che è normale
- tutti i file root:root, 644 per i file, 755 per gli eseguibili, 755 per le directory
- ricontrolla per garantire root: proprietà dello staff e permessi 775 per binario (es. /usr/local/bin/rogue)
- la preferenza personale è l’ultima elencata: tutti i file root:root, 644 per i file, 755 per gli eseguibili, 775 per le directory
- per cambiare proprietà, per esempio:
sudo chown -R root:staff /tmp/rogue
- per aggiornare i permessi dei file, per esempio:
sudo chmod 775 /tmp/rogue/usr/local/bin/rogue
Script di avvio:
- alcune estensioni richiedono script di avvio (nome estensione) per:
- evitare errori di esecuzione
- impostare i file di configurazione
- collegare i file di sistema
- caratteristiche di avvio
- il percorso dello script di avvio è /usr/local/tce.installed
- Sfoglia questo percorso nell’installazione del tuo TC per rivedere gli script di esempio
NOTA: se le estensioni installate non richiedono uno script di avvio, TC inserisce semplicemente un file nome_estensione vuoto in /tce.installed
Comprimi la tua nuova estensione:
infine comprimi l’estensione appena creata, esempio:mksquashfs /tmp/rogue tmp/rogue.tcz
Creare un file delle dipendenze se necessario (nome_estensione.tcz.dep):
- crea un file delle dipendenze solo se sono richieste dipendenze (es. rogue.tcz.dep)
- il contenuto del file non deve elencare il nome dell’estensione, ma solo le dipendenze
Se l’estensione non richiede dipendenze potete non inviare alcun file .dep ma scrivetelo nella mail per informare chi la controllerà oppure create un file .dep vuoto
- il file rogue.tcz.dep, ad esempio, dovrebbe contenere solo ncurses.tcz
- per controllare le dipendenze caricare l’estensione, navigare nell’eseguibile (/usr/local/bin) ed eseguire:
ldd binary_name (ad es. ldd rogue) - può anche provare quanto segue per trovare dipendenze, esempi:
ldd which rogue
ldd /usr/local/lib/librogue.so
Crea un file md5sum (nome_estensione.tcz.md5.txt),
esempio: md5sum /tmp/rogue.tcz > /tmp/rogue.tcz.md5.txt
Collauda:
- riavvia TC con i seguenti codici di avvio: base norestore
- carica manualmente la nuova estensione e provala
questo garantisce che la nuova estensione funzioni bene e possa caricare in modo indipendente tutte le dipendenze richieste
NOTA: è contro la politica del forum fornire link esterni a estensioni personali, utilizza i messaggi privati per scambiare l’estensione creata con altri utenti per i test.
Crea un file .list (nome_estensione.tcz.list):
- crea un file .list, che elenca il percorso e i nomi di tutti i file di estensione, ad esempio:
unsquashfs -l rogue.tcz > rogue.tcz.list
- modifica il file .list per rimuovere “squashfs-root” e nomi di percorsi duplicati
- esempio di un file .list modificato/ripulito:
/usr/local/bin/rogue
/usr/local/share/doc/rogue-5.4.4/LICENSE.TXT
/usr/local/share/doc/rogue-5.4.4/rogue.cat
/usr/local/share/doc/rogue-5.4.4/rogue.doc
/usr/local/share/doc/rogue-5.4.4/rogue.html
Crea un file .info (nome_estensione.tcz.info):
- crea un file .info per fornire informazioni sull’estensione (visualizzato da Apps, tce-ab)
Esempio di .tcz.infoTitle: package_name.tcz
Description: package description
Version: 0.1
Author: Author(s) name
Original-site: http://website.domain
Copying-policy: GPL v1
Size: 100K (of the package)
Extension_by: Your nickname
Tags: tag1 tag2 tag3 …
Comments: Information that you consider useful
for those who will be use this package.
----
Compiled for TC 12.x
----
PPI Compatible
Change-log: 2012/00/01 First version, 0.1
2012/01/01 Short change description
Current: 2012/02/01 Current short change description
Crea un file .build-dep (nome_estensione.tcz.build-dep):
- questo file di testo fornisce informazioni per aiutare con le future ricompilazioni può includere estensioni richieste per compilare, i flag usati, opzioni di configurazione, ecc
- esempio rogue.tcz.build-dep: Estensioni richieste per creare: ncurses-dev.tcz
Comando ./configure utilizzato:
CC="gcc -march=i486 -mtune=i686 -O2 -pipe" CXX="g++ -march=i486 -mtune=i686 -02 -pipe -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local --enable-allscores --enable-numscores=10 --disable-static --localstatedir=/var
- Controllo prima della presentazione:
- posiziona tutti i file di estensione (tcz, info, dep, ecc.) in una directory temporanea (es. /tmp/rogue_submission)
- installa ed esegui submitqc da questa cartella:
sudo submitqc
- submitqc genera il file extension_name.tcz.zsync, che dovrebbe essere inviato
- correggi eventuali errori segnalati prima di inviare l’estensione.
Invia l’estensione:
Nell’invio dell’estensione includi:
- file di estensione nome_estensione.tcz
- file nome_estensione.tcz.list
- file nome_estensione.tcz.md5.txt
- file nome_estensione.tcz.info
- file extension_name.tcz.dep
- file extension_name.tcz.zsync (generato automaticamente durante l'esecuzione di submitqc)
- file exension_name.tcz.build-dep
- extension_name-src.tcz (contiene il codice sorgente)
- comprimi tutti i file necessari e facoltativi, ad esempio con il comando:
tar zcf rogue.tar.gz rogue/
- invia un’e-mail a tcesubmit@gmail.com
NOTA: la crittografia dell’estensione in allegato non è richiesta.
NOTA: Se sono state create estensioni correlate aggiuntive (nome_estensione-doc.tcz, nome_estensione-locale.tcz) anche queste richiedono i file .dep, .info, .list, .md5.txt, .zsync.
Ringraziamenti e risorse:
Juanito, Misalf, curaga, Rich, coreplayer2, gutmensch
Sviluppatori e collaboratori di discussioni nei forum
Collaboratori Wiki
Into the Core contibutors
Into the Core: A Look at Tiny Core Linux (Lauri Kasanen et al), capitolo 15, PP 73-75
https://www.linuxsecrets.com/tinycorelinux-wiki/wiki:creating_extensions.html#submitting
http://wiki.tinycorelinux.net/wiki:creating_extensions
http://forum.tinycorelinux.net/
Autore: Nitram
Traduzione: Rullolex