RedHat: Ist es möglich, Pakete in einer Art Scheinumgebung zu installieren, um RPMs zu erstellen?

10

Gibt es ein Tool, mit dem die Abhängigkeiten einer RPM-Spezifikation in einer isolierten Umgebung installiert werden können? Ich werde solche Abhängigkeiten nicht global auf dem System installieren und kann dies auch nicht, da ich keine Root-Rechte habe.

Der Grund

Ich möchte ein Paket A erstellen, das von einer neueren Version von B abhängt (die nicht global auf dem System installiert werden kann).

Ich mag die neuere Version bauen , B und lassen Sie das Build - Tool installieren B ‚s -develes in einer isolierten Umgebung alle notwendigen Dateien für den Build von bereitzustellen A .

Lösungen

  • Gibt es dafür Werkzeuge?
  • Wenn nicht, worauf sollte ich achten, wenn ich versuche, dies mit say zu tun chroot?
  • Wäre das eine schlechte Praxis?
versuchen Sie es endlich
quelle

Antworten:

8

Ja, das Tool heißt mockund ist in EPEL.

Typische Verwendung:

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

Dies ist tatsächlich die bevorzugte Methode zum Erstellen von RPMs, gerade weil dadurch der Prozess vom System isoliert wird, sodass unerwartete Abhängigkeiten nicht berücksichtigt werden.

Sie können die Dateien so ändern /etc/mock, dass sie Ihre eigenen Pakete, Ihr privates Repo usw. abrufen, oder in den Dokumenten nach Informationen zum mockmanuellen Hinzufügen von Paketen zur Chroot-Umgebung suchen.

Beachten Sie, dass Benutzer zur mockGruppe hinzugefügt werden sollten , damit sie verwendet werden können mock.

Nicht zufällig kojiruft der Build-Server, den Red Hat verwendet mock, jedes einzelne Paket auf. Wenn Sie ständig viele Pakete erstellen müssen, lohnt es sich möglicherweise, einen kojiBuild-Server einzurichten .

Michael Hampton
quelle
Danke Michael. Das klingt sehr gut und ich bin froh, dass meine Frage nicht so dumm war, wie ich dachte. ;)
versuchen-fangen-endlich
3

Ich denke, der Versuch, Pakete auf Produktionshosts zu erstellen, ist eine schlechte Praxis, und der Versuch, dies ohne Root-Rechte zu tun, ist komplizierter als das Aufrufen eigener Build-Maschinen. Was ich normalerweise mache, ist das Folgende.

  1. Installieren Sie VirtualBox oder ein ähnliches Tool auf Ihrem Desktop / Laptop
  2. Erstellen Sie 32/64 VMs des Betriebssystems, das Sie in der Produktion verwenden
  3. Installieren Sie die normalerweise scheinbaren Tools, rpmbuild usw.
  4. Erstellen Sie die RPMs für das Paket und alle zusätzlichen Deps für beide Bögen auf Ihren VMs
  5. Nach dem Testen schieben Sie die RPMs in Ihr internes Repo, um sie an Ihre Server zu verteilen
  6. Testen Sie erneut, um sicherzustellen, dass die richtigen Abhängigkeiten abgerufen werden
  7. Freigabe über Ihr Konfigurationsmanagement.
Ramin
quelle
Das wird funktionieren. Wie ist es besser als Mock? Ich würde denken, Mock wäre einfacher, aber ich vermute, dass so oder so ziemlich dasselbe passiert.
Emory
Ich habe kein Problem mit Mock und ich glaube, dass Sie es in fast allen "How to Make A RPM" -Dokumenten installieren müssen. Ohne Root-Zugriff bin ich mir jedoch nicht sicher, wie das OP sein Konto zur Mock-Gruppe hinzufügen, Mock installieren und so weiter. Durch saubere Build-VMs wird auch verhindert, dass ungerade Abhängigkeiten unbeabsichtigt zu Paketen hinzugefügt werden.
Ramin
Hervorragender Punkt. Das habe ich nicht berücksichtigt. In diesem Sinne denke ich, dass dies die richtige Antwort ist.
Emory
@emory Aufgrund Ihres Feedbacks habe ich klargestellt, warum Build-VMs meiner Meinung nach insgesamt eine bessere Lösung sind, was meiner Meinung nach eine bessere Antwort darstellt. Danke, dass du mich gestoßen hast. :-)
Ramin
@Ramin in meiner Situation (bei der Arbeit) Ich bin nur Benutzer . Das System ist ein dediziertes Build-System. Wenn alle Entwickler auf diesem Host über Root-Berechtigungen verfügen, wird diese Box nach 1 Woche nicht mehr gestartet. ;) Ein Tool wie Mock zu verwenden ist also genau das Richtige! Das Einrichten von VMs ist auch eine gute Idee, wenn sie automatisiert werden können. Ich denke, Vagrant (ich habe es noch nicht getestet) ist genau das richtige Werkzeug dafür.
versuchen-fangen-endlich