So erstellen Sie Abhängigkeiten für die automatische Installation von RPM


138

Ich habe zwei RPM-Pakete erstellt

  • proj1-1.0-1.x86_64.rpm
  • libtest1-1.0-1.x86_64.rpm

proj1hängt von der vorhandenen Datei ab libtest1.sound wird in den hier gezeigten RPM-Paketen korrekt wiedergegeben:

user@my-pc:~$ rpm -qp --requires proj1-1.0-1.x86_64.rpm
libtest1.so()(64bit)

user@my-pc:~$ rpm -qp --provides libtest1-1.0-1.x86_64.rpm
libtest1.so()(64bit)

Die Installation von proj1schlägt aufgrund einer fehlenden Abhängigkeit fehl.

user@my-pc:~$ rpm -ivh proj1-1.0-1.x86_64.rpm
error: Failed dependencies:
libtest1.so()(64bit) is needed by proj1-1.0-1.x86_64.rpm

Wie stelle ich sicher, dass libtest1-1.0-1.x86_64.rpmdas bei der Installation von automatisch installiert wird proj1-1.0-1.x86_64.rpm?

Ich habe die --aidOption rpm -iwie hier beschrieben ausprobiert , aber sie hat bei mir nicht funktioniert.

Gibt es einen anderen Weg?

Vielen Dank für jede Hilfe.

Antworten:


102

Erstellen Sie ein (lokales) Repository und lassen Sie yumes die Abhängigkeiten für Sie auflösen.

Das CentOS-Wiki hat eine schöne Seite mit Anleitungen dazu. CentOS Wiki HowTos / CreateLocalRepos .


Zusammengefasst und weiter minimiert (nicht ideal, aber am schnellsten):

  1. Erstellen Sie ein Verzeichnis für Ihr lokales Repository, z /home/user/repo.
  2. Verschieben Sie die RPMs in dieses Verzeichnis.
  3. Beheben Sie einige Eigentums- und Dateisystemberechtigungen:

    # chown -R root.root /home/user/repo
    
  4. Installieren Sie das createrepoPaket, falls es noch nicht installiert ist, und führen Sie es aus

    # createrepo /home/user/repo
    # chmod -R o-w+r /home/user/repo
    
  5. Erstellen Sie eine Repository - Konfigurationsdatei, zum Beispiel /etc/yum.repos.d/myrepo.repoenthält

    [local]
    name=My Awesome Repo
    baseurl=file:///home/user/repo
    enabled=1
    gpgcheck=0
    
  6. Installieren Sie Ihr Paket mit

    # yum install packagename
    

46
Der von Ihnen bereitgestellte Link löste meinen Fall mit nur dieser einen Zeile : yum --nogpgcheck localinstall packagename.arch.rpm.
Matthew

@Matthew Cool, das würde die gesamten lokalen Repository-Schritte eliminieren. Poste das als Antwort, würde ich sagen.
Gertvdijk

Dies funktioniert nicht sehr gut, wenn Sie versuchen, RPM zu schreiben, um die Installation von YUM unter AIX wie ich zu automatisieren ;-)
Tricky

1
@ Max13, das ist yum localinstallund es ist das gleiche wie die Antwort, die hier bereits veröffentlicht wurde , mit den bereits diskutierten Nachteilen für Situationen, in denen Abhängigkeiten nicht in yum-Repos enthalten sind (siehe, diese Methode funktioniert nur, wenn [...] ein Teil vorhanden ist).
Gertvdijk

Ich habe dies auch herausgefunden, wenn keine Internetverbindung vorhanden ist sudo yum --disablerepo=* --enablerepo=local install packagename.arch.rpm, um sicherzustellen, yumdass nicht in andere Repositorys geschaut wird.
Anshuman Goel

194

Der bereitgestellte Link @gertvdijk zeigt einen schnellen Weg, um die gewünschten Ergebnisse zu erzielen, ohne ein lokales Repository zu konfigurieren:

$ yum --nogpgcheck localinstall packagename.arch.rpm

Wechseln packagename.arch.rpmSie einfach zu dem RPM-Dateinamen, den Sie installieren möchten.

Bearbeiten Nur zur Verdeutlichung werden automatisch alle Abhängigkeiten installiert, die bereits über System-YUM-Repositorys verfügbar sind.

Wenn Abhängigkeiten von anderen RPMs erfüllt werden, die sich nicht in den Repositorys des Systems befinden, funktioniert diese Methode nur, wenn jede RPM zusammen mit packagename.arch.rpmin der Befehlszeile angegeben wird.


7
Nein, dies funktioniert nur, wenn libtest1-1.0-1.x86_64.rpmes sich in einem anderen Repository befindet oder beide Pakete in der Befehlszeile angegeben sind, wie es " rpm -i" erfordern würde. Ich habe dies gerade am yum3.4.3 (Fedora 18) überprüft . Das Transkript hier zeigt, dass es updatesfür die Abhängigkeiten zum Repo geht , auch wenn die Dateien genau dort sind.
Aaron D. Marasco

3
@ AaronD.Marasco Vielleicht haben Sie Recht mit dem in der Frage beschriebenen speziellen Fall, aber dieser Einzeiler ist für jeden, der wie ich hier landet, viel einfacher und eine voll gültige Antwort auf die Frage im Titel "How to Abhängigkeiten von der automatischen Installation von RPM festlegen ".
Matthew

3
Nein, die Abhängigkeiten werden nicht automatisch installiert. Sie geben sie in der Befehlszeile an, genau wie bei " rpm -i". Die Verwendung yumbietet also keinen zusätzlichen Vorteil.
Aaron D. Marasco

2
Bitte lesen Sie noch einmal, was ich geschrieben habe. Alle Abhängigkeiten wurden aus einem Repository heruntergeladen, auch wenn sie lokal im Verzeichnis mit dem von Ihnen installierten RPM verfügbar waren.
Aaron D. Marasco

1
@ AaronD.Marasco Ich diskutiere nicht, dass die andere veröffentlichte Lösung besser für das spezifische Beispiel ist, nach dem OP gefragt hat. Meine Antwort ist jedoch richtig für die Beantwortung der Frage im Titel und viel schneller als die Konfiguration eines lokalen Repos. Sie hilft anderen, die hier landen wie ich, die einen schnellen Weg suchen, um yum dazu zu bringen, die Abhängigkeiten automatisch zu installieren U / min erfordert. Dies ist der Zweck des Stapelüberlaufs, um der Community bei der Suche nach Antworten zu helfen und nicht nur dem OP zu helfen.
Matthew

28

Für dnf-Benutzer nur verwenden dnf install *.rpm, localinstallwird nicht mehr benötigt.


1
Kam hierher, um genau das zu sagen
nawfel bgh

1
danke, ich kämpfe zu installieren mysql-workbenchmit rpm -ivh. endete schließlich mit diesem Beitrag. DNF hat es geschafft.
BlueBird

21

Für mich hat nur mit gearbeitet

# yum install ffmpeg-2.6.4-1.fc22.x86_64.rpm

Und automatisch um Autorisierung gebeten, die Abhängigkeiten herunterzuladen. Unter dem Beispiel verwende ich Fedora 22

[root@localhost lukas]# yum install ffmpeg-2.6.4-1.fc22.x86_64.rpm
Yum command has been deprecated, redirecting to '/usr/bin/dnf install  ffmpeg-2.6.4-1.fc22.x86_64.rpm'.
See 'man dnf' and 'man yum2dnf' for more information.
To transfer transaction metadata from yum to DNF, run:
'dnf install python-dnf-plugins-extras-migrate && dnf-2 migrate'

Last metadata expiration check performed 0:28:24 ago on Fri Sep 25 12:43:44 2015.
Dependencies resolved.
====================================================================================================================
 Package               Arch           Version                                  Repository                      Size
====================================================================================================================
Installing:
 SDL                   x86_64         1.2.15-17.fc22                           fedora                         214 k
 ffmpeg                x86_64         2.6.4-1.fc22                             @commandline                   1.5 M
 ffmpeg-libs           x86_64         2.6.4-1.fc22                             rpmfusion-free-updates         5.0 M
 fribidi               x86_64         0.19.6-3.fc22                            fedora                          69 k
 lame-libs             x86_64         3.99.5-5.fc22                            rpmfusion-free                 345 k
 libass                x86_64         0.12.1-1.fc22                            updates                         85 k
 libavdevice           x86_64         2.6.4-1.fc22                             rpmfusion-free-updates          75 k
 libdc1394             x86_64         2.2.2-3.fc22                             fedora                         124 k
 libva                 x86_64         1.5.1-1.fc22                             fedora                          79 k
 openal-soft           x86_64         1.16.0-5.fc22                            fedora                         292 k
 opencv-core           x86_64         2.4.11-5.fc22                            updates                        1.9 M
 openjpeg-libs         x86_64         1.5.1-14.fc22                            fedora                          89 k
 schroedinger          x86_64         1.0.11-7.fc22                            fedora                         315 k
 soxr                  x86_64         0.1.2-1.fc22                             updates                         83 k
 x264-libs             x86_64         0.142-12.20141221git6a301b6.fc22         rpmfusion-free                 587 k
 x265-libs             x86_64         1.6-1.fc22                               rpmfusion-free                 486 k
 xvidcore              x86_64         1.3.2-6.fc22                             rpmfusion-free                 264 k

Transaction Summary
====================================================================================================================
Install  17 Packages

Total size: 11 M
Total download size: 9.9 M
Installed size: 35 M
Is this ok [y/N]: y

einfachster Weg, den ich denke
Shams

Keine direkte Drehzahllösung, aber das gefällt mir am besten.
TFuto

Keine RPM-Lösung, aber der einfachste Weg, Abhängigkeiten mit nur einem Befehl zu installieren. Das hat bei mir einwandfrei funktioniert
Enrique Benitez

9

Ich habe eine einfachere Lösung gefunden. Wenn Sie alle RPMs im selben Verzeichnis haben, müssen Sie nur Folgendes tun:

$ sudo rpm -i *.rpm

rpm scheint die richtige Reihenfolge zu finden, um diese zu installieren und die RPMs zu installieren.


5
Dies ist immer noch nicht der Fall, wenn sich die Abhängigkeiten nicht im aktuellen Verzeichnis befinden.
Ding-Yi Chen

4

Matthews Antwort weckte viele Emotionen, weil ihr noch ein kleines Detail fehlt. Der allgemeine Befehl wäre:

# yum --nogpgcheck localinstall <package1_file_name> ... <packageN_file_name>

Das package_file_nameObige kann einen lokalen absoluten oder relativen Pfad enthalten oder eine URL (möglicherweise sogar eine URI) sein.

Yum sucht nach Abhängigkeiten zwischen allen in der Befehlszeile angegebenen Paketdateien. Wenn dies fehlschlägt, um die Abhängigkeiten dort zu finden, werden auch alle konfigurierten und aktivierten Yum-Repositorys verwendet.

Weder das aktuelle Arbeitsverzeichnis noch die Pfade eines der Verzeichnisse package_file_namewerden durchsucht, es sei denn, eines dieser Verzeichnisse wurde zuvor als aktiviertes yumRepository konfiguriert .

Also im Fall des OP der yumBefehl:

# cd <path with pkg files>; yum --nogpgcheck localinstall ./proj1-1.0-1.x86_64.rpm ./libtest1-1.0-1.x86_64.rpm

würde tun, wie würde das tun rpm:

# cd <path with pkg files>; rpm -i proj1-1.0-1.x86_64.rpm libtest1-1.0-1.x86_64.rpm

Der Unterschied zwischen diesen yumund rpmAufrufen wäre nur sichtbar, wenn eines der zu installierenden Pakete weitere Abhängigkeiten von Paketen hätte, die NICHT in der Befehlszeile aufgeführt sind.

In einem solchen Fall rpmwird nur die Fortsetzung verweigert, während yumkonfigurierte und aktivierte yum-Repositorys zur Suche nach Abhängigkeiten verwendet werden und möglicherweise erfolgreich sind.

Das aktuelle Arbeitsverzeichnis wird in keinem Fall durchsucht, es sei denn, es wurde zuvor als aktiviertes yumRepository konfiguriert .


0

Ich bin darauf gestoßen, und was für mich funktioniert hat, war, yum localinstall enterPkgNameHere.rpmaus dem Verzeichnis heraus zu laufen, in dem sich die RPM-Datei befindet.

Hinweis: Ersetzen Sie die enterPkgNameHere.rpmdurch den Namen Ihrer RPM-Datei.


0

Im Fall von openSUSE Leap 15 erhalte ich einen ähnlichen Fehler:

> sudo rpm -i opera-stable_53.0.2907.68_amd64.rpm 
[sudo] password for root: 
warning: opera-stable_53.0.2907.68_amd64.rpm: Header V4 RSA/SHA512 Signature, key ID a5c7ff72: NOKEY
error: Failed dependencies:
    at is needed by opera-stable-53.0.2907.68-0.x86_64

Ich führe diesen Befehl aus, um herauszufinden, welche Abhängigkeiten bestehen:

> sudo zypper install opera-stable_53.0.2907.68_amd64.rpm 
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 4 NEW packages are going to be installed:
  at libfl2 libHX28 opera-stable

4 new packages to install.
Overall download size: 50.3 MiB. Already cached: 0 B. After the operation, additional 176.9 MiB will be used.
Continue? [y/n/...? shows all options] (y): n

Dann führe ich diesen Befehl aus, um Abhängigkeiten zu installieren:

> sudo zypper in at
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 3 NEW packages are going to be installed:
  at libfl2 libHX28

3 new packages to install.
Overall download size: 208.6 KiB. Already cached: 0 B. After the operation, additional 600.4 KiB will be used.
Continue? [y/n/...? shows all options] (y): y

Dann führe ich dies aus, um die rpmDatei zu installieren :

> sudo rpm -i opera-stable_53.0.2907.68_amd64.rpm

Ich bin mir nicht sicher, ob es die beste Vorgehensweise ist, aber es hat mein Problem gelöst.


0

Schritt 1: Kopieren Sie alle U / min-Pakete an bestimmten Stellen

Schritt 2: Wenn createrepo nicht bereits installiert ist, wie es nicht standardmäßig der Fall ist, installieren Sie es.

[root@pavangildamysql1 8.0.11_rhel7]# yum install createrepo

Schritt 3: Erstellen Sie Repository-Metedaten und geben Sie die folgende Berechtigung

[root@pavangildamysql1 8.0.11_rhel7]# chown -R root.root /scratch/PVN/8.0.11_rhel7
[root@pavangildamysql1 8.0.11_rhel7]# createrepo /scratch/PVN/8.0.11_rhel7
Spawning worker 0 with 3 pkgs
Spawning worker 1 with 3 pkgs
Spawning worker 2 with 3 pkgs
Spawning worker 3 with 2 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@pavangildamysql1 8.0.11_rhel7]# chmod -R o-w+r /scratch/PVN/8.0.11_rhel7

Schritt 4: Erstellen Sie eine Repository-Datei mit folgendem Inhalt unter /etc/yum.repos.d/mysql.repo

[local]
name=My Awesome Repo
baseurl=file:///scratch/PVN/8.0.11_rhel7
enabled=1
gpgcheck=0

Schritt 5 Führen Sie diesen Befehl zur Installation aus

[root@pavangildamysql1 local]# yum --nogpgcheck localinstall mysql-commercial-server-8.0.11-1.1.el7.x86_64.rpm

-2

Führen Sie einfach den folgenden Befehl aus.

sudo dnf install *package.rpm

Geben Sie Ihr Passwort ein und Sie sind fertig.


-5

Prozess zum Generieren von RPM aus der Quelldatei: 1) Laden Sie die Quelldatei mit der Erweiterung.gz herunter. 2) installiere rpm-build und rpmdevtools von yum install. (Der Ordner "rpmbuild" wird generiert ... SPECS, SOURCES, RPMS .. Ordner sollten im Ordner "rpmbuild" generiert werden.) 3) Kopieren Sie den Quellcode.gz in den Ordner SOURCES (rpmbuild / SOURCES). 4) Entpacken Sie den Teerball mit dem folgenden Befehl. Gehen Sie zum Ordner SOURCES: rpmbuild / SOURCES, in dem die TAR-Datei vorhanden ist. Befehl: zB tar -xvzf httpd-2.22.tar.gz Der Ordner httpd-2.22 wird im selben Pfad generiert. Überprüfen Sie, ob apr und apr-util und dort im Ordner httpd-2.22 / srclib. Wenn apr und apr-util nicht vorhanden sind, laden Sie die neueste Version von der Apache-Site herunter, entpacken Sie sie und legen Sie sie im Ordner httpd-2.22 / srclib ab. Stellen Sie außerdem sicher, dass Sie pcre in Ihrem System installiert haben.

5) Gehen Sie zum extrahierten Ordner und geben Sie den folgenden Befehl ein: ./configure --prefix = / usr / local / apache2 --with-include-apr --enable-proxy --enable-proxy-balancer --with-mpm = worker --enable-mods-static = all 6) Führen Sie den folgenden Befehl aus, sobald die Konfiguration erfolgreich war: make 7) Nach erfolgreicher Ausführung od make command run: checkinstall in demselben Ordner. (Wenn Sie keine Checkinstall-Software haben, laden Sie bitte die neueste Version von der Website herunter.) Außerdem hat die Checkinstall-Software einen Fehler, der auf folgende Weise behoben werden kann: ::::: checkinstallrc suchen und dann TRANSLATE = 1 durch TRANSLATE = 0 mit dem Befehl vim ersetzen. Überprüfen Sie auch, ob das Paket ausgeschlossen ist: EXCLUDE = "/ selinux" 8) checkinstall fragt nach der Option (geben Sie R ein, wenn Sie RPM für die Quelldatei erstellen möchten). 9) Fertig. Die RPM-Datei wird im RPMS-Ordner in der RPM-Build / RPMS-Datei erstellt. .. Alles Gute ....

Grüße, Prerana


Wo hat jemand gefragt, ob er etwas bauen soll? Hier ging es darum, Abhängigkeiten eines bereits erstellten RPM aufzulösen.
Craig Jackson
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.