Modifier un paquet Debian rapidement (méthode sale)
By grapsus on Sunday 10 January 2010, 00:01 - Permalink
Parfois on veut modifier juste un petit bout de fichier de configuration dans un paquet Debian. L'utilisation du classique apt-get source, apt-get build-dep et dpkg-buildpackage est alors très longue et lourde, sans parler de tous les paquets, nécessaires à la recompilation, à installer.
Voici deux scripts de mon cru qui permettent de décompresser un paquet binaire, faire les changements nécessaires et reconstruire le paquet. C'est une méthode qui est sale dans la mesure où elle ne respecte pas les procédures de construction de paquets chez Debian, mais elle est très rapide lorsqu'il faut déployer rapidement une configuration personnalisée.
deb-dirty-extract.sh :
1 2 3 4 5 6 7 8 9 10 11 12 | #!/bin/bash if [ ! -f "$1" ] ; then echo "No such file" fi DIR=${1%%.deb} mkdir "$DIR" && cd "$DIR" ar x "../$1" mkdir data control cd data && tar -zxf ../data.tar.gz && cd .. cd control && tar -zxf ../control.tar.gz |
deb-dirty-rebuild.sh :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/bin/bash if [ ! -f 'debian-binary' -o ! -d 'control' -o ! -d 'data' ] ; then echo "No extracted deb file here" exit 1 fi if [ -z "$1" -o ! -f "$1" ] ; then PKG="../"$(basename $PWD)"-custom.deb" else PKG="$1" fi echo "Writing new package to $PKG..." rm -f control.tar.gz data.tar.gz "$PKG" cd data && tar -zcf ../data.tar.gz ./ && cd .. cd control && tar -zcf ../control.tar.gz ./ && cd .. ar rc "$PKG" debian-binary control.tar.gz data.tar.gz |
Utilisation typique :
wget http://.../.../paquet.deb deb-dirty-extract.sh paquet.deb cd paquet [...] # vos modifications deb-dirty-rebuild.sh
Comments
Merci pour le script deb-dirty-extract.sh c'est impec. Je m'en sert pour m'inspirer des Makefile
ar n'était pas pré-installé sur mon sytème, la commande est dans le paquet binutils
Pour ce qui est de l'utilisation typique j'ajouterais une méthode pour récupérer un paquet de la distro utilisée
# apt-get install -d paquet
# cd /var/cache/apt/archives/
Pénible ton thème pour copier/coler des sources ... il met la numérotation des lignes :-)
pas le Makefile mais les fichiers postinst et postrm pardon ;-)
Merci pour ton commentaire. Je ne m'étais pas rendu compte du problème avec ma coloration syntaxique.
Pour télécharger des paquets il suffit d'utiliser
aptitude download paquet
J'ai oublié de le préciser.
Merci pour ce script (2 ans après).
Juste une petite chose ... préciser qu'il faut jouer "deb-dirty-rebuild.sh" dans le répertoire décompressé du paquet, soit si on a mis tes fichier dans un ./Dirty et décompressé dedans :
cd ./monpaquet
sh ../deb-dirty-rebuild.sh
cd ..
ll ./monpaquet-custom.deb
Des paquets contiennent des data.tar.lzma (google-earth p.ex). J'ai modifié les scripts ainsi :
deb-dirty-extract.sh. Lignes 10 à 12 remplacées par :
if [ -f ./data.tar.gz ]; then
mkdir data && cd data && tar -zxf ../data.tar.gz && cd ..
elif [ -f ./data.tar.lzma ]; then
mkdir data && cd data && tar --lzma -xf ../data.tar.lzma && cd ..
fi
mkdir control && cd control && tar -zxf ../control.tar.gz
Pour deb-dirty-rebuild.sh j'ai remplacé les lignes 15 à 19 par:
PKGDATA="data.tar.gz"
if [ -f data.tar.gz ]; then
rm -f data.tar.gz && cd data && tar -zcf ../data.tar.gz ./ && cd ..
elif [ -f data.tar.lzma ]; then
rm -f data.tar.lzma && cd data && tar -c ./ | lzma > ../data.tar.lzma && cd ..
PKGDATA="data.tar.lzma"
fi
rm -f control.tar.gz && cd control && tar -zcf ../control.tar.gz ./ && cd ..
ar rc "$PKG" debian-binary control.tar.gz $PKGDATA