splitout_tdeb(1) Extraire un TDeb Debian a partir d'un .deb a la volee

Description

Separe un paquet Debian en un TDeb Debian et un paquet Debian plus petit en depaquetant, deplacant les fichiers appropries et en repaquetant avec une note dans la description et en ajoutant le suffixe de version +t1.

Lors de la creation d'un depot contenant des TDebs, il est fortement recommande de specifier les fichiers .changes de facon a ce que le depot puisse inclure les sources originaux, pour des raisons juridiques.

Si un fichier existe avec le meme nom dans le repertoire de sortie, il sera ecrase.

Copyright et Licence

 Copyright (C) 1997-2000  Roman Hodek <[email protected]>
 Copyright (C) 2000-2002  Colin Watson <[email protected]>
 Copyright (C) 2002-2004  David Schleef <[email protected]>
 Copyright (C) 2004  Nikita Youshchenko <[email protected]>
 Copyright (C) 2004  Raphael Bossek <[email protected]>
 Copyright (C) 2007-2008  Neil Williams <[email protected]>

Ce logiciel est libre; vous pouvez le redistribuer selon les termes de la licence GNU General Public License telle que publiee par la Free Software Foundation; en prenant la version 3 de la licence ou (selon votre choix) n'importe quelle version subsequente.

Ce logiciel est distribue dans l'espoir qu'il soit utile, mais AUCUNE GARANTIE n'est donnee tant pour des raisons COMMERCIALES que pour REPONDRE A UN BESOIN PARTICULIER. Consulter la Licence Publique Generale GNU pour plus de details.

Vous devriez avoir recu une copie de la Licence Publique Generale de GNU avec ce programme. Sinon, voir <http://www.gnu.org/licenses/>.

Convertir vers TDebs

L'idee ici est basee sur dpkg-cross :

 1. recoit un .deb ou un .changes comme une option de la ligne de commande
 2. depaquette le .deb comme le fait dpkg-cross
 3. cree les donnees de controle pour le nouveau TDeb
 4. replace les fichiers dans le TDeb
 5. repaquette le .deb avec un suffixe de version TDeb.
 6. reconstruit le .deb original et modifie le .changes de facon a ce que
     le source original puisse etre maintenu.

Aussi peu de dependances que possible X ce script devrait etre transforme en une gestion de TDeb plus utilisable.

Les versions futures auront aussi a comprendre les classes Dpkg mais jusqu'a ce que celles-ci soient implementees, la force brute est utilisee.

Automatisation

Relativement simple, mais quelques verifications sont necessaires dans le cas ou votre liste de paquets possibles inclut des paquets deja traites par dpkg-cross.

 #!/bin/sh
 set -e
 DIR=/tmp/myrepo/
 for deb in `ls /var/cache/apt/archives/*.deb`; do
    cross=`echo $deb | grep "\-.*-cross" || true`
    if [ ! -z "$cross" ]; then
        echo "skipping dpkg-cross package: $deb"
        continue
    fi
    /usr/share/emdebian-tools/splitout_tdeb -o $DIR $deb
 done

Un script similaire devrait etre capable de se debrouiller avec les fichiers .changes obtenus pour maintenir les paquets source.

Bien qu'utilisant dcut en interne, splitout_tdeb n'est pas concu pour obtenir les fichiers .changes directement a partir de http://incoming.debian.org, un script d'encapsulation sera necessaire.

Une encapsulation supplementaire sera certainement necessaire pour permettre a un depot TDeb de X rattraper X les miroirs Debian existant, par exemple si le premier telechargement vers le depot TDeb est un telechargement binaire seul sans un .orig.tar.gz reference. Voir emdebian-grip pour la facon dont ceci pourrait fonctionner.

splitout_tdeb s'assure que le .tar.gz est copie dans le repertoire de sortie et que reprepro peut localiser les fichiers appropries si l'option --ignore=missingfile est activee. Helas, cette fonctionnalite n'est pas preservee dans le mode processincoming de reprepro.

Problemes

Beaucoup. :-)

Plus de travail est necessaire, pour permettre (ou definir par defaut) a l'option de *ne pas* reconstruire le paquet binaire mais cela depend du binaire utilisant deja un TDeb. Pour le moment, il s'agit d'un bricolage rapide pour obtenir des TDebs facilement. splitout_tdeb ne merite probablement pas d'entrer dans la distribution stable, la fonctionnalite devrait etre implementee directement dans les builds Debian.

Les Tdeb generes utilisent le nom du paquet source ce qui va compliquer les choses si vous essayez de generer les TDebs a partir des binaires appartenant au meme paquet source X preferez plutot dpkg-gentdeb ou dh_gentdeb de l'interieur du build (natif) du paquet.

Aussi, les dependances strictes ne sont pas alterees par splitout_tdeb X si un autre paquet (typiquement provenant du meme paquet source) a une dependance stricte envers un paquet reconstruit par splitout_tdeb, ce paquet a des chances de devenir ininstallable. Par exemple, si foo depend de bar (= 1.2.3-4) et que bar est reconstruit par splitout_deb, bar va devenir 1.2.3-4+t1 et foo va devenir ininstallable. Comme precedemment, la solution est de preparer le TDeb a partir de la construction normale de paquet. emdebian-grip a aussi resolu ce probleme mais splitout_tdeb est seulement un script de convenance et n'utilise pas (encore) cette prise en charge.

Utilisez l'option --verbose pour voir le contenu du fichier de controle genere du TDeb et du paquet binaire modifie.

splitout_tdeb ne permet pas (encore) +t2 ou les autres revisions de TDeb X cela necessite une gestion dans dpkg pour .diff1.gz pour que le +t2 puisse etre envoye sans affecter le(s) paquet(s) binaire(s). Le mecanisme entier de mise a jour des TDebs par les traducteurs est encore a implementer.