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.
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
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.
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
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.
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
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
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
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
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.
Il ne reste plus qu'à soumettre l'extension comme expliqué sur le Wiki.
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 : 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 au total. |
Vous pouvez
laissez un commentaire
sur cette page.