Comment construire un package RPM à partir des fichiers installés?


8

Il existe deux machines, version / arche identique de SLES.

Sur la machine #A, un logiciel "foo" est installé que nous pouvons voir utiliser rpm -qa.

Sur la machine #B, le logiciel "foo" doit être installé.

Le foo.rpmn'est disponible auprès d'aucune source, sur Internet, etc.

Question

Étant donné que le package a foo.rpmété installé sur la machine #A, pouvons-nous créer un foo.rpmfichier à partir des fichiers déjà installés?

Il y a aussi des scripts pré / post dans les rpm, je pense. Ainsi, le foo.rpm( avec les dépendances? ) Peut être installé.


Vous pouvez presque trouver tous les packages rpm d'ici. rpmfind.net/linux/RPM
Ramesh

Réponses:


11

Il est possible mais très difficile de le faire pour que cela se fasse correctement. Si vous êtes désespéré, vous pouvez créer un nouveau .specfichier RPM et construire un "faux" fichier RPM source (SRPM) que vous pouvez ensuite utiliser pour construire un fichier RPM résultant en utilisant rpmbuild --rebuild.

Je continuerais plutôt de rechercher le RPM réel. Vous ne précisez pas lequel dans votre question, mais d'après mon expérience, vous pouvez trouver n'importe quoi sur Internet si vous savez comment le rechercher. J'ai trouvé d'anciennes versions de RPM pour les distributions Red Hat qui n'ont pas été utilisées depuis plus de 10 ans, donc j'ai du mal à croire qu'il n'y ait aucun vestige de ce RPM nulle part.

Vous pouvez également souvent revenir à la source de l'application contenue dans le RPM et l'utiliser pour reconstruire le RPM également. Souvent, les applications source incluent un .specfichier nécessaire qui est utilisé pour reconstruire le RPM.

Enfin, vous pouvez obtenir la source et le .specfichier à partir d'un service de construction tel que Koji pour les distributions basées sur Red Hat. SuSE gère également des services de génération similaires afin que vous puissiez les rechercher pour obtenir d'anciens artefacts de génération.

Prendre les binaires tels quels

Vous pouvez utiliser cette méthode pour soulever les exécutables réels d'un système et les tarer pour le déploiement sur un autre système.

machine A

$ rpm -ql <packageNameHere> | xargs tar -zcvf /tmp/program.tgz

machine B

$ tar -zxvf /path/to/your/program.tgz

Version SLES de RPM

Selon l'un des articles de ce fil de discussion: Re: Comment créer des packages installés par RPM rpm sur SLES est censé avoir le commutateur --repackage. Cela n'existe pas sur la version Red Hat (dans Fedora ou CentOS). Mais selon l'article, vous pouvez l'utiliser comme suit:

$ rpm -e --repackage <somepackage>

Après cela, vous trouverez votre RPM accessible ici:

/var/spool/repackage

Utilisation de rpmerizor

Rpmerizor est un outil / script tiers que vous pouvez installer qui reconditionnera les fichiers source dans un RPM correspondant. L'utilisation de ce script est accessible ici, intitulée: page de manuel de rpmerizor .

extrait

Rpmerizor est un script qui vous permet de créer un package RPM à partir des fichiers installés. Il vous suffit de spécifier des fichiers sur la ligne de commande et de répondre à quelques questions interactives pour renseigner les métadonnées rpm (nom du package, version ...). Vous pouvez également l'utiliser en mode batch avec des options de ligne de commande pour les métadonnées.

Utilisation de rpmrebuild

À ne pas confondre avec l'outil de construction rpmbuild, rpmrebuildest un autre script tiers que vous pouvez utiliser pour effectuer un reconditionnement d'un RPM déjà installé.

extrait

rpmrebuild est un outil pour construire un fichier RPM à partir d'un package qui a déjà été installé dans une utilisation de base, l'utilisation de rpmrebuild ne nécessite aucune connaissance en construction rpm. (Sur debian, le produit équivalent est dpkg-repack).

Exemple

Disons que nous voulons reconditionner le serveur openssh.

$ rpm -aq | grep openssh-server
openssh-server-6.2p2-8.fc19.x86_64

Maintenant, emballez-le:

$ rpmrebuild openssh-server-6.2p2-8.fc19.x86_64
/usr/lib/rpmrebuild/rpmrebuild.sh: WARNING: some files have been modified:
..?......  c /etc/ssh/sshd_config
..?......  c /etc/sysconfig/sshd
Do you want to continue ? (y/N) y
Do you want to change release number ? (y/N) n
result: /root/rpmbuild/RPMS/x86_64/openssh-server-6.2p2-8.fc19.x86_64.rpm

Références


de toute façon, c'est: jdk-1.6.0_02-fcs.rpm :) Ce n'est pas sur "internet"
evachristine

Vous pouvez obtenir des RPM officiels pour n'importe quelle version de JDK ici: oracle.com/technetwork/java/javase/downloads/… . Cela vous amènera à 1.6u2 qui est la même version.
slm

comment savoir que "jdk-1.6.0_02-fcs.rpm" est "1.6u2"? : O
evachristine

1
Je l'ai trouvé!! MERCI! il a été nommé: jdk-6u2-linux-i586.rpm MERCI!
evachristine

1
@evachristine - yup c'est celui-là, heureux d'avoir résolu le problème.
slm

0

En règle générale non.

Avec un peu de chance rpm -qiet rpm -q --changelogdonnez un aperçu de l'origine du colis.

S'il a été construit sur le système sur lequel il fonctionne, vous pouvez toujours avoir le fichier spec utilisé pour faire le rpm réel, sinon les deux.

En règle générale, je ne recommande pas de copier les fichiers / binaires, mais la plupart des métadonnées se trouvent dans la base de données RPM et vous avez les fichiers réels.

rpm -q --list <pkg_name> affiche tous les fichiers qu'un package déploie.

rpm -q --scripts <pkg_name> pour montrer tous les scripts qui sont exécutés en installant (ou en supprimant) le package peut fournir au moins autant d'informations sur son objectif que les fichiers qui sont déployés.

Et toutes les dépendances à installer peuvent être trouvées avec rpm -q --requires <pkg_name>.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.