# \[empaqueté\] opencv 1.1

**URL:** <https://www.debian-fr.org/t/empaquete-opencv-1-1/16889>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 6:36 UTC](https://www.debian-fr.org/t/empaquete-opencv-1-1/16889 "2016-02-20T18:36:16Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![antalgeek1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/a6a055/32.png) [@antalgeek1](https://www.debian-fr.org/u/antalgeek1)\
**Post date:** [Février 20, 2016, 6:36 UTC](https://www.debian-fr.org/t/empaquete-opencv-1-1/16889/1 "2016-02-20T18:36:16Z")

</div>

Salut

Une nouvelle version de opencv est disponible sur sourceforge : la 1.1pre1.  
La version actuelle dans SID (et peut-être Lenny) est la 1.0.0. Elle se décline en 3 paquets debian principaux :

- libcv1
- libcvaux1
- libhighgui1  
Plus les paquets -dev, de la doc et un wrapper python.  
Hier j’ai fait un empaquetage debian pour cette nouvelle version en repartant de 0 au niveau du changelog (-\>Initial release) et j’ai généré les paquets suivant :
- libcv1.1
- libcvaux1.1
- libhighgui1.1

Mais je me retrouve avec un dilemme :  
Soit je conserve cette structure et je dois refaire mes autres paquets qui dépendent d’opencv en stipulant les dépendances sur les versions 1.1 plutôt que 1.  
Soit je refais l’empaquetage d’opencv sur la base d’une version 1.1.0-1 mais qui me génère les paquets libcv1, libcvaux1… Et je n’ai plus à refaire mes autres paquets perso. Par contre je dois faire un peu attention au numéro de révision.

Etant donné que je ne suis pas encore très à l’aise avec l’empaquetage je me demande quelle est la meilleure solution.

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 6:36 UTC](https://www.debian-fr.org/t/empaquete-opencv-1-1/16889/2 "2016-02-20T18:36:16Z")

</div>

La 2, pour avoir été fréquemment dans cette situation, c’est une source de soucis à venir de s’écarter de la structure d’un paquet existant dans Debian et d’en modifier le nom. Le principe est simple: tu mets tes paquets dans un dépot personnel prioritaire, et tu installes par apt-get.

---

<div class="post-metadata">

**Author:** ![antalgeek1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/a6a055/32.png) [@antalgeek1](https://www.debian-fr.org/u/antalgeek1)\
**Post date:** [Février 20, 2016, 6:36 UTC](https://www.debian-fr.org/t/empaquete-opencv-1-1/16889/3 "2016-02-20T18:36:16Z")

</div>

ok  
merci du conseil  
je vais lancer ça

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 6:36 UTC](https://www.debian-fr.org/t/empaquete-opencv-1-1/16889/4 "2016-02-20T18:36:16Z")

</div>

Fais même attention au numéro de version. Pour les paquets clamav, j’ai longtemps fait des mises à jour sur clamav parce que volotile n’existait pas encore puis réagissait trop longtemps et pas (croyais je) pour potato/woody. Les numéros de versions étaient backport-0.82 par exemple et non 0.82. J’ai récemment recollé à la dénomination de volatile mais j’ai du mettre quelques personnes dans la panade: Ces personnes utilisaient mon dépot et n’ont pas eu la mise à jour de clamav (remarque que ça m’a enlevé de la pression, quand volatile n’existait pas ça se justifiait mais maintenant c’est moins critique). Pense à cezux qui utiliseront tes paquets même si il n’y en a qu’un.

---

<div class="post-metadata">

**Author:** ![antalgeek1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/a6a055/32.png) [@antalgeek1](https://www.debian-fr.org/u/antalgeek1)\
**Post date:** [Février 20, 2016, 6:36 UTC](https://www.debian-fr.org/t/empaquete-opencv-1-1/16889/5 "2016-02-20T18:36:17Z")

</div>

Donc pour résumer et voir si je ne me goure pas :

- la version actuelle sous Lenny/Sid est 1.0.0-6  
paquets libcv1…
- sous Etch 0.9.7-4  
paquets libcv…
- je me gère aussi un backport-1.0.0-4 sous Etch  
paquets libcv1…
- la version que je vais faire (toujours pour Etch) : 1.1.0-1  
paquets libcv1…

Donc normalement si je me colle la 1.1.0-1 sur un dépôt je ne met personne dans la panade et je peux même faire des révisions 1.1.0-2, 1.1.0-3…tant qu’il n’y a pas de .deb officiel.

---

<div class="post-metadata">

**Author:** ![antalgeek1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/a6a055/32.png) [@antalgeek1](https://www.debian-fr.org/u/antalgeek1)\
**Post date:** [Février 20, 2016, 6:36 UTC](https://www.debian-fr.org/t/empaquete-opencv-1-1/16889/6 "2016-02-20T18:36:20Z")

</div>

Encore une petite question.  
Bon soit je n’ai pas encore suffisamment compris l’empaquetage debian, soit je fais une connerie avec mon automake. Une combinaison des 2 n’est pas à exclure.

J’explique : j’ai fait mon empaquetage d’opencv 1.1 en suivant les conseils de fran.b. Tout s’est bien passé car je me suis inspiré de l’empaquetage des .deb officiels.  
J’installe ma nouvelle version…pas de stress

J’installe un paquet deb perso fait avec l’ancienne version backport-1.0.0-4, pas de soucis.  
Je le lance et j’ai le message suivant :

`vidalert: error while loading shared libraries: libcxcore.so.1: cannot open shared object file: No such file or directory
`  
Et pour cause qu’il ne trouve pas libcxcore.so.1, mon paquet lui a généré le lien libcxcore.so.2.

Alors du coup je suis en train de regarder du côté de mon debian/rules pour comprendre comment est généré le lien.  
Mais il est possible que le soucis vienne de mon autre paquet…compilé avec les pieds.

---

<div class="post-metadata">

**Author:** ![antalgeek1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/a6a055/32.png) [@antalgeek1](https://www.debian-fr.org/u/antalgeek1)\
**Post date:** [Février 20, 2016, 6:36 UTC](https://www.debian-fr.org/t/empaquete-opencv-1-1/16889/7 "2016-02-20T18:36:36Z")

</div>

Bon, manifestement ce qui m’arrive est normal et faut recompiler ses programmes avec la nouvelle librairie.  
Chez Red Hat ils ont même packagé le bouzin en libcv2…mais moi ça ne me plait pas.

Du coup j’ai géré le truc au niveau du debian/control de cette sorte :

`Package: libcv1
Section: libs
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Conflicts: libcv1 (<< 1.1.0-1)
Replaces: libcv1 (<< 1.1.0-1)`  
Comme ça les paquets construits avec l’ancienne version vont se faire dégager.

Pour les 3 pelés et les 2 tondus qui pourraient être intéressés je mettrait les paquets sur [deb-indus.org](http://deb-indus.org) dans la soirée.

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 6:36 UTC](https://www.debian-fr.org/t/empaquete-opencv-1-1/16889/8 "2016-02-20T18:36:57Z")

</div>

Comment sont fabriquées les dépendances, usuellement les dépendances avec les librairies sont fabriquées automatiquement, un script parcourt les binaires et regardes les librairies utilisées et le paquet où elles sont. C’est bizarre qu’utilisant libcxcore.so.1, il ne l’ait pas mis dans les dépendances…

---

<div class="post-metadata">

**Author:** ![antalgeek1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/a6a055/32.png) [@antalgeek1](https://www.debian-fr.org/u/antalgeek1)\
**Post date:** [Février 20, 2016, 6:37 UTC](https://www.debian-fr.org/t/empaquete-opencv-1-1/16889/9 "2016-02-20T18:37:07Z")

</div>

Et bien pour tout te dire je me suis inspiré de l’empaquetage de la version 1.0.0 qui est sur les dépôts officiels.  
Pour les dépendances j’ai effectivement fait tourné le script qui est dans le manuel du nouveau responsable debian.  
Pour info le voici :

` strace -f -o /tmp/log ./configure
       # ou make à la place de ./configure, si votre paquet n'utilise pas autoconf
       for x in `dpkg -S $(grep open /tmp/log|\
                           perl -pe 's!.* open\(\"([^\"]*).*!$1!' |\
                           grep "^/"| sort | uniq|\
                           grep -v "^\(/tmp\|/dev\|/proc\)" ) 2>/dev/null|\
                           cut -f1 -d":"| sort | uniq`; \
             do \
               echo -n "$x (>=" `dpkg -s $x|grep ^Version|cut -f2 -d":"` "), "; \
             done`  
Mais il me renvoyait une liste longue comme le bras.  
Donc je me suis borné à utiliser les variables de substitution que sont ${shlibs:Depends}, ${misc:Depends} et qui dont effectivement alimentées par un script.  
Après j’ai utilisé les champs conflict et replace uniquement car je récupérais un .so.2 au lieu du .so.1.  
D’ailleurs en prenant le tarball de sourceforge je récupère la même chose après :

`./configure
make
make install
ldconfig`

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 6:37 UTC](https://www.debian-fr.org/t/empaquete-opencv-1-1/16889/10 "2016-02-20T18:37:08Z")

</div>

Hum, le paquet libcv devrait s’appeler libcv2 du coup, puis tu fais un conflict avec libcv1. Tu peux suivre par exemple les évolutions de libclamav1 puis 2,3 et maintenant 4…

---

<div class="post-metadata">

**Author:** ![antalgeek1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/a6a055/32.png) [@antalgeek1](https://www.debian-fr.org/u/antalgeek1)\
**Post date:** [Février 20, 2016, 6:37 UTC](https://www.debian-fr.org/t/empaquete-opencv-1-1/16889/11 "2016-02-20T18:37:11Z")

</div>

Certes, j’y ai pensé et d’ailleurs c’est ce qui a été fait pour l’empaquetage rpm.  
Ce qui m’a gêné c’est que la lib est encore en version 1, mais ça n’a effectivement rien à voir avec le nom du paquet.  
Je vais peut-être aller demander sur la liste de dev pkg-scicomp comment ils voient le truc vu que c’est eux qui feront le paquet officiel s’il voit le jour.
