Où sommes nous ?

Creer une extension pour TCL

Comment créer son propre package pour TinyCoreLinux

Avec une distribution classique comme Gentoo, nos développements spécifiques n'ont généralement pas besoin d'être packagés : il suffit de les compiler et de les laisser s'installer dans /usr/local ...
Avec TinyCoreLinux, /usr/local est déjà squatté par les "extensions" que nous avons installées. S'il est généralement simple de spécifier un autre répertoire que nous laisserions statique, c'est aussi l'occasion de s'essayer au packaging pour gagner le chargement dynamique qui fait la force de TCL.

Comme exemple, nous allons créer une extension pour la librairie Paho-MQTT.c que j'utilise pour soumettre des données à ma domotique.

Environnement de développement

TinyCoreLinux arrivant quasiment nu, il faut en tout premier lieu installer les packages indispensables :

tce-load -wli compiletc squashfs-tools submitqc

Attention, ca prend pas mal de place (enfin, par rapport à une installation classique sous TCE).

Et comme dans mon cas, je vais récupérer les sources depuis internet, j'ai aussi besoin de git.

tce-load -wi git

Patho.MQTT.C

Téléchargement des dépendances

Dans notre cas, il s'agit d'OpenSSL

tc@GrosSvG1:~$ tce-load -lwi openssl-1.1.1-dev.tcz
openssl-1.1.1-dev.tcz.dep OK
Downloading: openssl-1.1.1-dev.tcz
Connecting to repo.tinycorelinux.net (89.22.99.37:80)
saving to 'openssl-1.1.1-dev.tcz'
openssl-1.1.1-dev.tc 100% |********************************************************************************| 2476k 0:00:00 ETA
'openssl-1.1.1-dev.tcz' saved
openssl-1.1.1-dev.tcz: OK

L'option -l indique qu'il ne faut pas que le package soit chargé au boot.

Téléchargement des sources à compiler

Par commodité, je renomme le répertoire vu que ma cible portera le même nom, que l'on crée au passage

/tmp$ mv paho.mqtt.c/ paho.mqtt.c_source
/tmp$ mkdir paho.mqtt.c

Compilation

Mes sources

Le Wiki de TCL

D'abord les options de compilations (dans mon cas, je cible une archi 32bits) :

export CFLAGS="-march=i486 -mtune=i686 -Os -pipe"
export CXXFLAGS="-march=i486 -mtune=i686 -Os -pipe"
export LDFLAGS="-Wl,-O1"

Puis on va dans le répertoire source et on lance la compilation.

cd /tmp/paho.mqtt.c_source/
make

Et on lance l'installation dans le répertoire temporaire

sudo make DESTDIR=/tmp/paho.mqtt.c install

Bon, il faut bien avouer que dans le cas de cette librairie, la procédure d'installation est bien pourrie et il faut mettre les mains dans le cambouis ... mais ce n'est pas l'objet de ce billet.

Ne pas oublier de striper tous les exécutables et librairies.

Création de l'extention

Le but est d'avoir une extension la plus petite possible : du coup, on supprime les documentations.

Ensuite, on crée un package contenant tout sauf usr/local/lib ... après bien sûr avoir fait une sauvegarde.

/tmp$ sudo rm -rf paho.mqtt.c_1.31/usr/local/lib

et on crée l'extension qui va bien

/tmp$ mksquashfs paho.mqtt.c_1.31 paho.mqtt.c-1.31-dev.tcz
Parallel mksquashfs: Using 1 processor
Creating 4.0 filesystem on paho.mqtt.c-1.31-dev.tcz, block size 4096.
[=================================================================================================================|] 91/91 100%

Exportable Squashfs 4.0 filesystem, gzip compressed, data block size 4096
compressed data, compressed metadata, compressed fragments, no xattrs
duplicates are removed
Filesystem size 113.33 Kbytes (0.11 Mbytes)
33.45% of uncompressed filesystem size (338.82 Kbytes)
Inode table size 459 bytes (0.45 Kbytes)
51.11% of uncompressed inode table size (898 bytes)
Directory table size 255 bytes (0.25 Kbytes)
66.06% of uncompressed directory table size (386 bytes)
Number of duplicate files found 0
Number of inodes 17
Number of files 12
Number of fragments 3
Number of symbolic links 0
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 5
Number of ids (unique uids + gids) 1
Number of uids 1
root (0)
Number of gids 1
root (0)

et on en profite pour créer la liste des fichiers

/tmp$ cd paho.mqtt.c_1.31/
/tmp/paho.mqtt.c_1.31$ find usr -not -type d > ../paho.mqtt.c-1.31-dev.tcz.list

Et on fait la même chose uniquement avec les librairies :

/tmp$ mksquashfs paho.mqtt.c_1.31 paho.mqtt.c-1.31.tcz
Parallel mksquashfs: Using 1 processor
Creating 4.0 filesystem on paho.mqtt.c-1.31.tcz, block size 4096.
[===============================================================================================================/] 473/473 100%

Exportable Squashfs 4.0 filesystem, gzip compressed, data block size 4096
compressed data, compressed metadata, compressed fragments, no xattrs
duplicates are removed
Filesystem size 975.82 Kbytes (0.95 Mbytes)
51.64% of uncompressed filesystem size (1889.50 Kbytes)
Inode table size 1221 bytes (1.19 Kbytes)
48.72% of uncompressed inode table size (2506 bytes)
Directory table size 177 bytes (0.17 Kbytes)
42.65% of uncompressed directory table size (415 bytes)
Number of duplicate files found 0
Number of inodes 16
Number of files 4
Number of fragments 0
Number of symbolic links 8
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 4
Number of ids (unique uids + gids) 1
Number of uids 1
root (0)
Number of gids 1
root (0)
/tmp$ cd paho.mqtt.c_1.31/
/tmp/paho.mqtt.c_1.31$ find usr -not -type d > ../paho.mqtt.c-1.31.tcz.list

Checksum

Pour être sûr que le package n'est pas corrompu, il faut fournir son checksum.

/tmp$ md5sum paho.mqtt.c-1.31-dev.tcz > paho.mqtt.c-1.31-dev.tcz.md5.txt
/tmp$ md5sum paho.mqtt.c-1.31.tcz > paho.mqtt.c-1.31.tcz.md5.txt

Dépendances

Il faut indiquer de quels autres extensions la notre dépend. Ici, il n'y en a pas hormis là -dev qui dépend de celle qui contient les librairies. Donc

/tmp$ echo "paho.mqtt.c-1.31.tcz" > paho.mqtt.c-1.31-dev.tcz.dep

Le fichier de description

Pour chacun des 2 extensions, fournir aussi un fichier .info de description. Ainsi, nous avons

Title:          paho.mqtt.c-1.31.tcz
Description: Eclipse Paho C Client Library for the MQTT Protocol
Version: 1.31
Author: eclipse.org/paho
Original-site: https://eclipse.github.io/paho.mqtt.c/
Copying-policy: Eclipse Public License - v 2.0 (https://www.eclipse.org/legal/epl-2.0/)
Size: 296K
Extension_by: Destroyedlolo
Tags: MQTT IoT
Comments: This extension contains only libraries
Check the original website for source code, licence and documentation
----
Compiled for TC 13.x
---
Change-log: 2022/11/14 First version, 1.31
Current: 2022/11/14 Initial version

Vérifions que tout est correct

Pour que submitqc fonctionne correctement, il faut qu'il soit lancé par l'utilisateur tc.

submitqc permet de vérifier que le package est pret à être soumis.

mkdir t
mv paho.mqtt.c-1.31.tcz* t

puis

tc@GrosSvG1:/tmp/t$ submitqc --libs

==============================================================
This is the Tiny Core extension submission quality testing tool.
This pre-release is UNDER TESTING for TC5/6 and x86/x86_64.

see --help for usage instructions.

Release: SOURCE RUN
==============================================================

Checking against Core release 13.x on x86 / 5.15.10-tinycore

submitqc: loading required extensions ... Done.
submitqc: removing old log files. Ok.
submitqc: making space for new log files. Done.
submitqc: checking http://repo.tinycorelinux.net/ (timeout 3 sec) ... Connected!
submitqc: fetching info.lst.gz ... Ok.

submitqc: paho.mqtt.c-1.31.tcz checks begin =====
submitqc: paho.mqtt.c-1.31.tcz squashfs tree has files in it? Ok.
submitqc: paho.mqtt.c-1.31.tcz info file structure ok? Ok.
submitqc: paho.mqtt.c-1.31.tcz info similar to others in repository? Ok.
submitqc: paho.mqtt.c-1.31.tcz dep file compared to repository copy? No dep file in repo - done.
submitqc: paho.mqtt.c-1.31.tcz dependencies exist? No dep file. Ok.
submitqc: paho.mqtt.c-1.31.tcz mountable? Passed mount check.
submitqc: paho.mqtt.c-1.31.tcz correct block size? Yes.
submitqc: paho.mqtt.c-1.31.tcz unsquashing for further tests ... Done.
submitqc: paho.mqtt.c-1.31.tcz squashfs tree ok? Ok.
submitqc: paho.mqtt.c-1.31.tcz startup files ok? None present. Ok, I think.
submitqc: paho.mqtt.c-1.31.tcz includes copyright notice?
    Copyright notice not found at usr/local/share/doc/paho.mqtt.c-1.31
    Confirm that this is not needed.
    Checking repo for copyright statement in paho.mqtt.c-1.31.tcz ...
    paho.mqtt.c-1.31.tcz not found on server.
submitqc: paho.mqtt.c-1.31.tcz file/directory ownerships & permissions ok? Ok.
submitqc: paho.mqtt.c-1.31.tcz binaries have been stripped? Ok.
submitqc: paho.mqtt.c-1.31.tcz list file looks ok? Ok.
submitqc: paho.mqtt.c-1.31.tcz comparing list to mirror copy. Not on mirror.
submitqc: paho.mqtt.c-1.31.tcz to enable library inclusion tests, use --libs.
    Without lib tests, check is considered incomplete.
submitqc: paho.mqtt.c-1.31.tcz checking md5.txt. Ok.
submitqc: paho.mqtt.c-1.31.tcz squash tree checks complete. Cleaning up ... Done.
submitqc: paho.mqtt.c-1.31.tcz creating new paho.mqtt.c-1.31.tcz.zsync Done.
submitqc: paho.mqtt.c-1.31.tcz.build-dep or build-dep included?
    Not found, but it is suggested/requested.
submitqc: paho.mqtt.c-1.31.tcz.tgz included?
    Not found, but it is suggested/requested.
submitqc: paho.mqtt.c-1.31.tcz: setting ownership & permissions of paho.mqtt.c-1.31.tcz* ... Ok!
submitqc: paho.mqtt.c-1.31.tcz checks end =====


submitqc: There are warnings or errors for your extensions. See:
        /tmp/submitqc/copyright
        /tmp/submitqc/missingdeps/paho.mqtt.c-1.31.tcz.dep-libs
    Some errors may have been corrected - see logs and above.
    Fix errors and run submitqc again before submitting.
    Log files will be destroyed the next time submitqc is run.
    Without warnings or errors, this message will go away.

Soumission

Il ne reste plus qu'à soumettre l'extension comme expliqué sur le Wiki.

PubSysFigures

mkdir -p pkg/usr/local/bin
mkdir -p pkg/usr/local/etc/init.d

in pkg/usr/local/etc/init.d/PubSubFigures

#!/bin/sh
/usr/local/sbin/PubSysFigures -Hbpi.chez.moi -s30

xxx

sudo mksquashfs pkg/ PubSysFigures.tcz

md5sum PubSysFigures.tcz > PubSysFigures.tcz.md5.txt

echo "paho.mqtt.c-1.31.tcz" > PubSysFigures.tcz.dep


Visitez :
La liste de nos voyages
Nos sorties Ski et rando
Copyright Laurent Faillie 2001-2024
N'oubliez pas d'entrer le mot de passe pour voir aussi les photos perso.
Contactez moi si vous souhaitez réutiliser ces photos et pour les obtenir avec une plus grande résolution.
Visites durant les 7 derniers jours Nombre de visites au total.

Vous pouvez laissez un commentaire sur cette page.