Cómo hacer que las dependencias de instalación automática de rpm


138

He construido dos paquetes RPM

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

proj1depende del archivo libtest1.sopresente y se refleja correctamente en los paquetes RPM como se ve aquí:

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)

La instalación de proj1falla debido a una dependencia que falta.

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

¿Cómo me aseguro de que libtest1-1.0-1.x86_64.rpmse instala automáticamente durante la instalación de proj1-1.0-1.x86_64.rpm?

Probé la --aidopción rpm -icomo se describe aquí, pero no funcionó para mí.

¿Hay alguna otra manera?

Gracias por cualquier ayuda.

Respuestas:


102

Cree un repositorio (local) y utilícelo yumpara que resuelva las dependencias por usted.

El wiki de CentOS tiene una buena página que proporciona un tutorial sobre esto. CentOS wiki HowTos / CreateLocalRepos .


Resumido y aún más minimizado (no ideal, pero más rápido):

  1. Cree un directorio para su repositorio local, por ejemplo /home/user/repo.
  2. Mueva los RPM a ese directorio.
  3. Arregle algunos permisos de propiedad y sistema de archivos:

    # chown -R root.root /home/user/repo
    
  4. Instale el createrepopaquete si aún no está instalado y ejecute

    # createrepo /home/user/repo
    # chmod -R o-w+r /home/user/repo
    
  5. Crear un archivo de configuración del repositorio, por ejemplo, que /etc/yum.repos.d/myrepo.repocontenga

    [local]
    name=My Awesome Repo
    baseurl=file:///home/user/repo
    enabled=1
    gpgcheck=0
    
  6. Instale su paquete usando

    # yum install packagename
    

46
El enlace que ya ha proporcionado resuelto mi caso con sólo esta línea: yum --nogpgcheck localinstall packagename.arch.rpm.
Mateo

@Matthew Cool, eso eliminaría todos los pasos del repositorio local. Publica eso como una respuesta, diría.
gertvdijk

Esto no funciona muy bien si está intentando hacer un script RPM para automatizar la instalación de YUM en AIX como yo ;-)
Tricky

1
@ Max13, eso es yum localinstally es lo mismo que la respuesta ya publicada aquí , con las desventajas ya discutidas para situaciones en las que las dependencias no están en repositorios yum (vea que este método no funcionará a menos que sea parte).
gertvdijk

También pensé en este si no hay conexión a Internet sudo yum --disablerepo=* --enablerepo=local install packagename.arch.rpmpara asegurarse de yumque no se vea en otros repositorios.
Anshuman Goel

194

El enlace @gertvdijk proporcionado muestra una forma rápida de lograr los resultados deseados sin configurar un repositorio local:

$ yum --nogpgcheck localinstall packagename.arch.rpm

Simplemente cambie packagename.arch.rpmal nombre de archivo RPM que desea instalar.

Editar Solo una aclaración, esto instalará automáticamente todas las dependencias que ya están disponibles a través de los repositorios YUM del sistema.

Si tiene dependencias satisfechas por otros RPM que no están en los repositorios del sistema, entonces este método no funcionará a menos que también se especifique cada RPM junto con packagename.arch.rpmla línea de comando.


77
No, esto no funcionará a menos que libtest1-1.0-1.x86_64.rpmesté en un repositorio en otro lugar, o ambos paquetes se especifiquen en la línea de comandos como " rpm -i" lo requeriría. Acabo de verificar esto en yum3.4.3 (Fedora 18). Transcripción aquí que muestra que va al updatesrepositorio de las dependencias, incluso cuando los archivos están allí.
Aaron D. Marasco

3
@ AaronD.Marasco tal vez tenga razón sobre el caso específico descrito en la pregunta, pero esta frase es mucho más fácil para cualquiera que termine aquí como yo, y es una respuesta totalmente válida para la pregunta en el título, "Cómo hacer dependencias de instalación automática de rpm ".
Mateo

3
No, no se trata de "instalación automática" de las dependencias: las está especificando en la línea de comandos, de la misma manera que lo haría con " rpm -i", por lo que el uso yumno le proporciona ningún beneficio adicional.
Aaron D. Marasco

2
Por favor, vuelva a leer lo que escribí. Las dependencias se descargaron de un repositorio, incluso si estaban disponibles localmente en el directorio con el RPM que instaló.
Aaron D. Marasco,

1
@ AaronD.Marasco No estoy debatiendo que la otra solución publicada es mejor para el ejemplo específico por el que OP estaba preguntando. Sin embargo, mi respuesta es correcta para responder la pregunta en el título y es mucho más rápido que configurar un repositorio local, y ayudará a otros que terminen aquí como yo, que quieren una forma rápida de obtener yum para instalar automáticamente las dependencias que rpm requiere. Ese es el propósito del desbordamiento de la pila, para ayudar a la comunidad a buscar respuestas y no solo a ayudar al OP.
Mateo

28

Para usuarios de dnf solo use dnf install *.rpm, localinstallya no es necesario.


1
Vine aquí para decir exactamente esto
nawfel bgh

1
gracias, he tenido problemas para instalar mysql-workbenchcon rpm -ivh. finalmente terminó con esta publicación. DNF hizo el truco.
BlueBird

21

Para mí trabajé solo con

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

Y automáticamente solicitó autorización para descargar las dependencias. Debajo del ejemplo, estoy usando 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

La forma más fácil que creo
Shams

No es una solución directa de rpm, pero me gusta más.
TFuto

No es una solución RPM, pero es la forma más fácil de instalar dependencias con un solo comando. Esto funcionó sin problemas para mí
Enrique Benitez

9

Encontré una solución más simple. Si tiene todos los RPM en el mismo directorio, todo lo que necesita hacer es,

$ sudo rpm -i *.rpm

rpm parece averiguar el orden correcto para instalarlos e instala los RPM.


55
Eso todavía no maneja el caso si las dependencias no están en el directorio actual.
Ding-Yi Chen

4

La respuesta de Matthew despertó muchas emociones, debido al hecho de que todavía carece de un detalle menor. El comando general sería:

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

Lo package_file_nameanterior puede incluir una ruta local absoluta o relativa, o ser una URL (posiblemente incluso un URI).

Yum buscaría dependencias entre todos los archivos de paquete dados en la línea de comando Y SI FALTA encontrar las dependencias allí, también usará los repositorios yum configurados y habilitados.

No package_file_namese buscará en el directorio de trabajo actual ni en las rutas de ninguno de ellos, excepto cuando alguno de estos directorios se haya configurado previamente como un yumrepositorio habilitado .

Entonces, en el caso del OP, el yumcomando:

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

haría, como haría el rpm:

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

La diferencia entre estas yumy las rpminvocaciones solo sería visible si uno de los paquetes enumerados para instalar tuviera más dependencias de los paquetes que NO figuran en la línea de comandos.

En tal caso rpm, simplemente se negará a continuar, mientras yumque usaría cualquier repositorio yum configurado y habilitado para buscar dependencias, y posiblemente tenga éxito.

El directorio de trabajo actual NO se buscará en ningún caso, excepto cuando se haya configurado previamente como un yumrepositorio habilitado .


0

Me encontré con esto y lo que funcionó para mí fue ejecutar yum localinstall enterPkgNameHere.rpmdesde dentro del directorio donde se encuentra el archivo .rpm.

Nota: reemplace el enterPkgNameHere.rpmcon el nombre de su archivo .rpm.


0

En el caso de openSUSE Leap 15, recibo un error similar:

> 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

Ejecuto este comando para descubrir cuáles son las dependencias:

> 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

Luego ejecuto este comando para instalar dependencias:

> 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

Luego ejecuto esto para instalar el rpmarchivo:

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

Estoy no está seguro de si es la mejor práctica, sin embargo, resolvió mi problema.


0

Paso 1: copie todos los paquetes de rpm en ubicaciones determinadas

Paso 2: si createrepo aún no está instalado, ya que no lo estará de manera predeterminada, instálelo.

[root@pavangildamysql1 8.0.11_rhel7]# yum install createrepo

Paso 3: cree metedata de repositorio y otorgue el siguiente permiso

[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

Paso 4: Cree un archivo de repositorio con los siguientes contenidos en /etc/yum.repos.d/mysql.repo

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

Paso 5 Ejecute este comando para instalar

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

-2

Simple simplemente ejecute el siguiente comando.

sudo dnf install *package.rpm

Ingrese su contraseña y ya está.


-5

Proceso de generar RPM desde el archivo fuente: 1) descargar el archivo fuente con extensión.gz. 2) instale rpm-build y rpmdevtools desde yum install. (se generará la carpeta rpmbuild ... las carpetas SPECS, SOURCES, RPMS ... se generarán dentro de la carpeta rpmbuild). 3) copie el código fuente.gz a la carpeta FUENTES (rpmbuild / SOURCES) 4) Desarme la bola de alquitrán usando el siguiente comando. vaya a la carpeta FUENTES: rpmbuild / SOURCES donde está presente el archivo tar. comando: por ejemplo, tar -xvzf httpd-2.22.tar.gz La carpeta httpd-2.22 se generará en la misma ruta. Compruebe si apr y apr-util y allí en la carpeta httpd-2.22 / srclib. Si no existen apr y apr-util, descargue la última versión del sitio apache, descomprímalo y colóquelo dentro de la carpeta httpd-2.22 / srclib. También asegúrese de tener pcre install en su sistema.

5) vaya a la carpeta extraída y luego escriba el siguiente comando: ./configure --prefix = / usr / local / apache2 --with-included-apr --enable-proxy --enable-proxy-balancer --with-mpm = trabajador --enable-mods-static = all 6) ejecutar debajo del comando una vez que la configuración sea exitosa: make 7) después de la ejecución exitosa del comando make run run: checkinstall en la misma carpeta. (si no tiene el software checkinstall, descargue la última versión del sitio). Además, el software checkinstall tiene un error que se puede resolver de la siguiente manera ::::: busque checkinstallrc y luego reemplace TRANSLATE = 1 a TRANSLATE = 0 usando el comando vim. Verifique también el paquete de exclusión: EXCLUDE = "/ selinux" 8) checkinstall le pedirá la opción (escriba R si desea construir tp rpm para el archivo fuente) 9) El archivo .rpm hecho se construirá en la carpeta RPMS dentro del archivo rpmbuild / RPMS. .. Todo lo mejor ....

Saludos, Prerana


¿Dónde preguntó alguien sobre construir algo? Se trataba de resolver dependencias de un RPM ya construido.
Craig Jackson
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.