web-dev-qa-db-fra.com

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

J'ai construit deux packages RPM

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

proj1 dépend du fichier libtest1.so présent et il est correctement reflété dans les paquetages 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 que libtest1-1.0-1.x86_64.rpm est installé automatiquement lors de l'installation de proj1-1.0-1.x86_64.rpm?

J'ai essayé l'option --aid avec rpm -i comme décrit ici mais cela n'a pas fonctionné pour moi.

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

Merci pour toute aide.

128
HAL

Créez un référentiel (local) et utilisez yum pour le résoudre à votre place.

Le wiki CentOS a une page Nice fournissant un tutoriel à ce sujet. HowTos de wiki de 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. Correction de certaines autorisations de propriété et de système de fichiers:

    # chown -R root.root /home/user/repo
    
  4. Installez le paquet createrepo s'il n'est pas encore installé et lancez

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

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

    # yum install packagename
    
95
gertvdijk

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

$ yum --nogpgcheck localinstall packagename.Arch.rpm

Remplacez simplement packagename.Arch.rpm par le nom de fichier RPM que vous souhaitez installer.

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

Si des dépendances sont satisfaites par d'autres RPM qui ne figurent 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.rpm sur la ligne de commande.

181
Matthew

Pour les utilisateurs de DNF, n'utilisez que dnf install *.rpm, localinstall n'est plus nécessaire.

26
mimoralea

Pour moi a travaillé juste avec

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

Et automatiquement demandé l'autorisation de télécharger les dépendances. En dessous de 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
16
user5377363

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 comprendre le bon ordre pour les installer et installer les RPM.

9
Rajaram

La réponse de Matthew suscita de nombreuses émotions, car il lui manquait encore un détail mineur. La commande générale serait:

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

Le package_file_name ci-dessus peut inclure un chemin absolu ou relatif local, ou être une URL (éventuellement même un URI).

Yum rechercherait des dépendances parmi tous les fichiers de paquet indiqués sur la ligne de commande ET EN CAS D'ÉCHEC pour y trouver des 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 d'accès d'aucun de package_file_name ne seront recherchés, sauf si l'un de ces répertoires a déjà été configuré en tant que référentiel activé yum.

Donc, dans le cas du PO, la commande yum:

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

ferait, comme ferait la 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 ces invocations yum et rpm ne serait visible que si l'un des packages listés pour être installé avait d'autres dépendances sur des packages non listés sur la ligne de commande.

Dans un tel cas, rpm refusera simplement de continuer, tandis que yum utiliserait n'importe quel référentiel yum configuré et activé pour rechercher des dépendances, et pourrait éventuellement réussir.

Dans tous les cas, le répertoire de travail en cours ne fera PAS l'objet d'une recherche, sauf s'il a déjà été configuré en tant que référentiel activé yum.

3
Artur Opalinski

Dans le cas d'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

Je lance cette commande pour comprendre 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, je lance cette commande pour installer des 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 fichier rpm:

> Sudo rpm -i opera-stable_53.0.2907.68_AMD64.rpm

Je suis pas sûr que ce soit la meilleure pratique, mais cela a résolu mon problème.

0
user3405291

J'ai rencontré ceci et ce qui a fonctionné pour moi a été d'exécuter yum localinstall enterPkgNameHere.rpm à partir du répertoire où se trouve le fichier .rpm.

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

0
specialk1st

Étape 1: copier tous les emballages RPM dans des emplacements donnés

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

[root@pavangildamysql1 8.0.11_rhel7]# yum install createrepo

Étape 3: créez les métedonnées du 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
0
Pavan Gilda