RedHat: est-il possible d'installer des packages dans une sorte d'environnement simulé pour construire des RPM

10

Existe-t-il un outil qui permet d'installer les dépendances d'un RPM .spec dans un environnement isolé? Je n'installerai pas de telles dépendances globalement sur le système et je ne suis pas en mesure de le faire car je n'ai pas de privilèges root.

La raison

Je veux construire un package A qui dépend d'une version plus récente de B (qui ne peut pas être installée globalement sur le système).

J'aime construire la nouvelle version de B et de laisser l'outil de construction installer B « s -develdans un environnement isolé pour fournir tous les fichiers nécessaires à la construction de A .

Solutions

  • Existe-t-il des outils pour le faire?
  • Sinon, à quoi dois-je faire attention lorsque j'essaie de le faire avec say chroot?
  • Serait-ce une mauvaise pratique?
essayer-attraper-enfin
la source

Réponses:

8

Oui, l'outil est appelé mocket il est en EPEL.

Utilisation typique:

rpmbuild -bs mypackage.spec
mock -r epel-6-x86_64 mypackage-0.1-1.src.rpm

Il s'agit en fait de la méthode préférée pour créer des RPM, précisément parce qu'elle isole le processus du système afin que les dépendances inattendues ne soient pas récupérées.

Vous pouvez modifier les fichiers /etc/mockpour qu'ils récupèrent vos propres packages, repo privé, etc., ou consultez la documentation pour savoir comment ajouter mockmanuellement des packages à l' environnement chroot.

Notez que les utilisateurs doivent être ajoutés au mockgroupe pour être autorisés à utiliser mock.

Pas par coïncidence, le kojiserveur de build que Red Hat utilise mockpour appeler chaque package individuel. Si vous devez créer de nombreux packages tout le temps, il peut être utile de chercher à configurer un kojiserveur de build.

Michael Hampton
la source
Merci Michael. Cela semble très bien et je suis content que ma question ne soit pas aussi stupide que je le pensais. ;)
try-catch-finally
3

Je pense que tenter de construire des packages sur des hôtes de production est une mauvaise pratique et tenter de le faire sans les privilèges root est plus compliqué que d'amener vos propres machines de build. Ce que je fais normalement est le suivant.

  1. Installez VirtualBox ou un outil similaire sur votre ordinateur de bureau / portable
  2. Créez 32/64 VM du système d'exploitation que vous utilisez en production
  3. Installez les outils généralement fictifs, rpmbuild, etc.
  4. Créez les RPM pour le package et tous les dépôts supplémentaires pour les deux arches sur vos machines virtuelles
  5. Après le test, poussez les RPM dans votre référentiel interne pour les distribuer à vos serveurs
  6. Testez à nouveau pour vous assurer que les dépendances appropriées sont récupérées
  7. Libérez via votre gestion de configuration.
Ramin
la source
Cela fonctionnera. Comment est-ce mieux que d'utiliser une maquette? Je pense que la simulation serait plus facile, mais je soupçonne que dans les deux cas, la même chose se produit.
emory
Je n'ai aucun problème avec Mock et je crois que presque tous les documents "comment faire un rpm" vous ont installé. Cependant, sans accès root, je ne sais pas comment l'OP va ajouter leur compte au groupe fictif, installer mock, etc. Le fait d'avoir des machines virtuelles de construction propres permet également d'éviter que des dépendances étranges ne soient involontairement ajoutées aux packages.
Ramin
Excellent point. Je n'ai pas réfléchi à cela. Dans cet esprit, je pense que c'est la bonne réponse.
emory
@emory sur la base de vos commentaires, j'ai clarifié pourquoi je pense que les machines virtuelles de construction sont globalement une meilleure solution qui, je pense, fait une meilleure réponse. Merci de m'avoir poussé. :-)
Ramin
@Ramin dans ma situation (au travail) Je ne suis qu'un utilisateur . Le système est un système de construction dédié et bien, si tous les développeurs sur cet hôte avaient des privilèges root, cette boîte ne démarrerait pas après 1 semaine. ;) Donc, utiliser un outil comme Mock est exactement la bonne chose à utiliser! La configuration de VM est également une bonne idée si elle peut être automatisée. Je pense que Vagrant (je ne l'ai pas encore testé) est juste le bon outil pour ça.
try-catch-finally