Rien de spécial
Le blog de Régis

Convertir un RPM en tgz

À mon travail, j’ai un compte Unix sur un serveur AIX sur lequel il n’y a pas tout ce que je veux…; Du coup j’ai envie d’en ajouter un peu…;

Première solution: compiler moi-même les programmes que je veux. Problème: il faut le compilateur, il faut arriver à compiler (et ce n’est pas toujours évident sous AIX — c’est un PowerPC, beaucoup de programmes systèmes ne sont pas identiques à Linux, l’assembleur d’IBM est buggé, etc.).

Deuxième solution; installer les RPM fournis par Redhat. Il faut bidouiller son .rpmmacros. Mais les RPM d’IBM sont mal conçus et ne sont pas relocalisables. Les RPM utilisent en dur /opt/freeware et ne sont pas relocalisables. Bouhhhh.

Dernière solution: extraire le contenu du RPM et l’utiliser tel quel. Je fais cela avec rpm2cpio et cpio. Mais comme le rpm2cpio d’AIX semble buggué, j’ai eu l’idée de faire ça sous Linux pour générer un tgz…; Voici mon programme:

[python]

#!/bin/sh

#verbose. set to ‘v’ for verbose mode

v= »

#the original working directory (in order to restaure context)

pwdorig=$(pwd)

if [ « $v » == « v » ] ; then

echo pwdorig=$pwdorig

fi

#catch interrupt

trap ‘echo « Cleaning up » >&2; cd « $pwdorig » ; rm -rf $tmp ; exit’ 1 2 3 15

RDS_extract() {

echo « Extract RPM $file »

cd $tmpdir

rpm2cpio $file cpio -id$v

}

RDS_tarball() {

echo « Build tarball $destfile »

cd $tmpdir

tar c${v}zf $destfile *

}

RDS_finish(){

echo « Cleaning temp files »

cd $pwdorig

cp $tmpdir/$destfile .

rm -rf $tmpdir

}

echo « rpm2tgz $* »

for file in $*

do

tmpdir=$(mktemp -d)

destfile=$(dirname $1)/$(basename $file .rpm).tgz

#$file is the absolute path of the file

if [ ! « $(echo $file cut -c 1) » = « / » ] ; then

file=$pwdorig/$file

fi

RDS_extract

RDS_tarball

RDS_finish

done

[/python]

Et oui, je sais: j’ai réinventé la roue.