Comment créer des dépendances d'installation automatique de rpm

138

J'ai construit deux packages RPM

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

proj1dépend du fichier libtest1.soprésent et il est correctement reflété dans les packages RPM comme indiqué ici:

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)

L'installation de proj1échoue en raison d'une dépendance manquante.

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

Comment puis-je m'assurer qu'il libtest1-1.0-1.x86_64.rpmest installé automatiquement lors de l'installation de proj1-1.0-1.x86_64.rpm?

J'ai essayé l' --aidoption avec rpm -icomme décrit ici mais cela n'a pas fonctionné pour moi.

Est-ce qu'il y a un autre moyen?

Merci pour toute aide.

HAL
la source

Réponses:

102

Créez un référentiel (local) et utilisez-le yumpour résoudre les dépendances à votre place.

Le wiki CentOS a une belle page fournissant un guide à ce sujet. HowTos du wiki CentOS / CreateLocalRepos .


Résumé et minimisé (pas idéal, mais le plus rapide):

  1. Créez un répertoire pour votre référentiel local, par exemple /home/user/repo.
  2. Déplacez les RPM dans ce répertoire.
  3. Corrigez certaines autorisations de propriété et de système de fichiers:

    # chown -R root.root /home/user/repo
    
  4. Installez le createrepopackage s'il n'est pas encore installé et exécutez

    # createrepo /home/user/repo
    # chmod -R o-w+r /home/user/repo
    
  5. Créez un fichier de configuration de référentiel, /etc/yum.repos.d/myrepo.repocontenant par exemple

    [local]
    name=My Awesome Repo
    baseurl=file:///home/user/repo
    enabled=1
    gpgcheck=0
    
  6. Installez votre package en utilisant

    # yum install packagename
    
gertvdijk
la source
46
Le lien que vous avez fourni résolu mon cas avec cette seule ligne: yum --nogpgcheck localinstall packagename.arch.rpm.
Matthieu
@Matthew Cool, cela éliminerait toutes les étapes du référentiel local. Postez cela comme une réponse que je dirais.
gertvdijk
Cela ne fonctionne pas très bien si vous essayez de script RPM pour automatiser l'installation de YUM sur AIX comme moi ;-)
Tricky
1
@ Max13, c'est yum localinstallet c'est la même chose que la réponse déjà postée ici , avec les inconvénients déjà discutés pour les situations où les dépendances ne sont pas dans yum repos (voir la méthode cette ne fonctionnera que si [...] une partie).
gertvdijk
J'ai également compris celui-ci s'il n'y a pas de connexion Internet sudo yum --disablerepo=* --enablerepo=local install packagename.arch.rpmpour s'assurer yumqu'il ne regarde pas dans d'autres référentiels.
Anshuman Goel
194

Le lien @gertvdijk fourni montre un moyen rapide d'obtenir les résultats souhaités sans configurer de référentiel local:

$ yum --nogpgcheck localinstall packagename.arch.rpm

Changez simplement packagename.arch.rpmle nom de fichier RPM que vous souhaitez installer.

Modifier Juste une clarification, cela installera automatiquement toutes les dépendances qui sont déjà disponibles via les référentiels système YUM.

Si vous avez des dépendances satisfaites par d'autres RPM qui ne sont pas dans les référentiels du système, cette méthode ne fonctionnera que si chaque RPM est également spécifié avec packagename.arch.rpmsur la ligne de commande.

Matthieu
la source
7
Non, cela ne fonctionnera pas à moins que ce ne libtest1-1.0-1.x86_64.rpmsoit dans un référentiel ailleurs, ou que les deux packages soient spécifiés sur la ligne de commande comme rpm -ile demanderait " ". Je viens de vérifier cela sur yum3.4.3 (Fedora 18). Transcription montrant ici qu'il va au updatesdépôt pour les dépendances, même lorsque les fichiers sont là.
Aaron D. Marasco
3
@ AaronD.Marasco peut-être que vous avez raison sur le cas spécifique décrit dans la question, mais ce one-liner est beaucoup plus facile pour quiconque se retrouve ici comme je l'ai fait, et est une réponse pleinement valable à la question dans le titre, "Comment faire faire des dépendances d'installation automatique de rpm ".
Matthieu
3
Non, ce n'est pas une "installation automatique" des dépendances - vous les spécifiez sur la ligne de commande, de la même manière que vous le feriez avec " rpm -i", donc l'utilisation yumne vous donne aucun avantage supplémentaire.
Aaron D. Marasco
2
Veuillez relire ce que j'ai écrit. Toutes les dépendances ont été téléchargées à partir d'un référentiel, même si elles étaient disponibles localement dans le répertoire avec le RPM que vous avez installé.
Aaron D. Marasco
1
@ AaronD.Marasco Je ne suis pas en train de débattre du fait que l'autre solution publiée est meilleure pour l'exemple spécifique qu'OP demandait. Ma réponse, cependant, est correcte pour répondre à la question dans le titre et est beaucoup plus rapide que de configurer un dépôt local, et aidera les autres qui se retrouvent ici comme moi et qui veulent un moyen rapide pour yum d'installer automatiquement les dépendances qu'un rpm nécessite. C'est le but du débordement de pile, pour aider la communauté à chercher des réponses et pas seulement aider le PO.
Matthieu
28

Pour les utilisateurs de dnf dnf install *.rpm, utilisez simplement , localinstalln'est plus nécessaire.

mimoralea
la source
1
Je suis venu ici pour dire exactement ceci
nawfel bgh
1
merci, j'avais du mal à installer mysql-workbenchavec rpm -ivh. a finalement fini avec ce post. DNF a fait l'affaire.
BlueBird
21

Pour moi, j'ai travaillé juste avec

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

Et a automatiquement demandé l'autorisation de télécharger les dépendances. Ci-dessous l'exemple, j'utilise 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
user5377363
la source
façon la plus simple je pense
Shams
Pas une solution de régime direct, mais j'aime mieux ça.
TFuto
Ce n'est pas une solution RPM, mais c'est le moyen le plus simple d'installer des dépendances avec une seule commande. Cela a fonctionné parfaitement pour moi
Enrique Benitez
9

J'ai trouvé une solution plus simple. Si vous avez tous les RPM dans le même répertoire, tout ce que vous avez à faire est,

$ sudo rpm -i *.rpm

rpm semble trouver le bon ordre pour les installer et installe les RPM.

Rajaram
la source
5
Cela ne gère toujours pas le cas si les dépendances ne sont pas dans le répertoire courant.
Ding-Yi Chen
4

La réponse de Matthew a réveillé de nombreuses émotions, du fait qu'il manque encore un petit détail. Le commandement général serait:

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

Ce qui package_file_nameprécède peut inclure un chemin d'accès absolu ou relatif local, ou être une URL (peut-être même un URI).

Yum recherchera les dépendances parmi tous les fichiers de package donnés sur la ligne de commande ET SI ELLE ÉCHOUERA pour trouver les dépendances, il utilisera également tous les référentiels yum configurés et activés.

Ni le répertoire de travail actuel, ni les chemins de l'un de package_file_namene seront recherchés, sauf si l'un de ces répertoires a été précédemment configuré en tant que yumréférentiel activé .

Donc, dans le cas de l'OP, la yumcommande:

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

ferait, tout comme le ferait rpm:

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

La différence entre ceux yum- ci et les rpmappels ne serait visible que si l'un des packages listés à installer avait d'autres dépendances sur des packages NON listés sur la ligne de commande.

Dans un tel cas, rpmil refusera simplement de continuer, alors yumqu'il utilisera n'importe quel référentiel yum configuré et activé pour rechercher des dépendances, et peut éventuellement réussir.

Le répertoire de travail actuel ne sera en aucun cas recherché, sauf s'il a été précédemment configuré en tant que yumréférentiel activé .

Artur Opalinski
la source
0

J'ai rencontré cela et ce qui a fonctionné pour moi était de courir à yum localinstall enterPkgNameHere.rpmpartir du répertoire où se trouve le fichier .rpm.

Remarque: remplacez le enterPkgNameHere.rpmpar le nom de votre fichier .rpm.

specialk1st
la source
0

Dans le cas de openSUSE Leap 15, je reçois une erreur similaire:

> 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

J'exécute cette commande pour déterminer quelles sont les dépendances:

> 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

Ensuite, j'exécute cette commande pour installer les dépendances:

> 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

Ensuite, je lance ceci pour installer le rpmfichier:

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

Je ne sais pas si c'est la meilleure pratique, mais cela a résolu mon problème.

user3405291
la source
0

Étape 1: copiez tout le paquet rpm dans des emplacements donnés

Étape 2: si createrepo n'est pas déjà installé, comme il ne le sera pas par défaut, installez-le.

[root@pavangildamysql1 8.0.11_rhel7]# yum install createrepo

Étape 3: créez des métedonnées de référentiel et donnez l'autorisation ci-dessous

[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

Étape 4: Créez un fichier de référentiel avec le contenu suivant dans /etc/yum.repos.d/mysql.repo

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

Étape 5 Exécutez cette commande pour installer

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

Simple, exécutez simplement la commande suivante.

sudo dnf install *package.rpm

Entrez votre mot de passe et vous avez terminé.

Subham Debnath
la source
-5

Processus de génération de RPM à partir du fichier source: 1) télécharger le fichier source avec l'extension.gz. 2) installez rpm-build et rpmdevtools à partir de yum install. (le dossier rpmbuild sera généré ... SPECS, SOURCES, RPMS .. les dossiers devront être générés dans le dossier rpmbuild). 3) copiez le code source.gz dans le dossier SOURCES (rpmbuild / SOURCES) 4) Décompressez la balle tar à l'aide de la commande suivante. allez dans le dossier SOURCES: rpmbuild / SOURCES où le fichier tar est présent. commande: par exemple, le dossier tar -xvzf httpd-2.22.tar.gz httpd-2.22 sera généré dans le même chemin. Vérifiez si apr et apr-util et là dans le dossier httpd-2.22 / srclib. Si apr et apr-util n'existent pas, téléchargez la dernière version depuis le site apache, décompressez-la et placez-la dans le dossier httpd-2.22 / srclib. Assurez-vous également que pcre est installé sur votre système.

5) allez dans le dossier extrait et tapez la commande ci-dessous: ./configure --prefix = / usr / local / apache2 --with-included-apr --enable-proxy --enable-proxy-balancer --with-mpm = worker --enable-mods-static = all 6) exécuter la commande ci-dessous une fois la configuration réussie: make 7) après une exécution réussie de la commande make run: checkinstall dans le même dossier. (si vous ne disposez pas du logiciel checkinstall, veuillez télécharger la dernière version du site). Le logiciel checkinstall a également un bogue qui peut être résolu de la manière suivante ::::: localisez checkinstallrc puis remplacez TRANSLATE = 1 par TRANSLATE = 0 en utilisant la commande vim. Vérifiez également le package d'exclusion: EXCLUDE = "/ selinux" 8) checkinstall demandera l'option (tapez R si vous voulez tp build rpm pour le fichier source) 9) Le fichier .rpm terminé sera construit dans le dossier RPMS dans le fichier rpmbuild / RPMS. .. Bonne chance ....

Cordialement, Prerana

user3248738
la source
Où quelqu'un a-t-il demandé quelque chose à propos de la construction? Il s'agissait de résoudre les dépendances d'un RPM déjà construit.
Craig Jackson