linux - tag - Cómo hacer que las dependencias de autodepuración de rpm
mp3tag ubuntu (9)
He construido dos paquetes de RPM
proj1-1.0-1.x86_64.rpm
-
libtest1-1.0-1.x86_64.rpm
proj1
depende del archivo libtest1.so
está presente 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 proj1
falla debido a una dependencia faltante.
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 libtest1-1.0-1.x86_64.rpm
que libtest1-1.0-1.x86_64.rpm
se instala automáticamente durante la instalación de proj1-1.0-1.x86_64.rpm
?
--aid
opción --aid
con rpm -i
como se describe here pero no funcionó para mí.
¿Hay alguna otra manera?
Gracias por cualquier ayuda.
Cree un repositorio (local) y use yum
para que resuelva las dependencias por usted.
El wiki de CentOS tiene una buena página que brinda un tutorial sobre esto. CentOS wiki HowTos / CreateLocalRepos .
Resumido y minimizado aún más (no ideal, pero más rápido):
- Cree un directorio para su repositorio local, ej.
/home/user/repo
. - Mueva los RPM en ese directorio.
Repara algunos permisos de propiedad y del sistema de archivos:
# chown -R root.root /home/user/repo
Instala el paquete
createrepo
si aún no está instalado y ejecuta# createrepo /home/user/repo # chmod -R o-w+r /home/user/repo
Cree un archivo de configuración de repositorio, por ejemplo,
/etc/yum.repos.d/myrepo.repo
contenga[local] name=My Awesome Repo baseurl=file:///home/user/repo enabled=1 gpgcheck=0
Instala tu paquete usando
# yum install packagename
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.rpm
al 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 del sistema YUM.
Si tiene dependencias satisfechas por otros RPM que no están en los repositorios del sistema, este método no funcionará a menos que cada RPM también se especifique junto con packagename.arch.rpm
en la línea de comandos.
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 descubrir el orden correcto para instalar estos e instala los RPM.
La respuesta de Mateo despertó muchas emociones, debido al hecho de que todavía carece de un pequeño detalle. El comando general sería:
# yum --nogpgcheck localinstall <package1_file_name> ... <packageN_file_name>
El package_file_name
anterior 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 NO FALTA encontrar las dependencias allí, también usará cualquier repositorio de yum configurado y habilitado.
Ni el directorio de trabajo actual, ni las rutas de ninguno de package_file_name
buscarán, excepto cuando alguno de estos directorios se haya configurado previamente como un repositorio yum
habilitado.
Entonces en el caso del OP el comando yum
:
# 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ían las 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 invocaciones de yum
e rpm
solo sería visible si uno de los paquetes enumerados para su instalación tuviera dependencias adicionales en los paquetes que NO figuraban en la línea de comando.
En tal caso, rpm
solo se negarán a continuar, mientras que yum
usaría cualquier repositorio de 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 repositorio yum
habilitado.
Me encontré con esto y lo que funcionó para mí fue ejecutar yum localinstall enterPkgNameHere.rpm
desde el directorio donde se encuentra el archivo .rpm.
Nota: reemplace enterPkgNameHere.rpm
con el nombre de su archivo .rpm.
Para mí trabajó solo con
# yum install ffmpeg-2.6.4-1.fc22.x86_64.rpm
Y la autorización solicitada automáticamente 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
Para usuarios de dnf simplemente use dnf install *.rpm
, la instalación localinstall
ya no es necesaria.
Proceso de generación de RPM desde el archivo fuente:
- Descargue el archivo fuente con extensión .zz.
- Instale rpm-build y rpmdevtools desde yum install. (Se generará la carpeta rpmbuild ... Se generarán las carpetas SPECS, SOURCES, RPMS .. dentro de la carpeta rpmbuild).
- Copie el código fuente.gz a la carpeta SOURCES. (Rpmbuild / SOURCES)
- Deshazte de 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
httpd-2.22 carpeta se generará en la misma ruta. Compruebe si apr y apr-util y allí en la carpeta httpd-2.22 / srclib. Si apr y apr-util no existen, descargue la última versión del sitio de apache, desactívela y colóquela dentro de la carpeta httpd-2.22 / srclib. También asegúrese de tener una instalación Pcre en su sistema.
- vaya a la carpeta FUENTES: rpmbuild / SOURCES donde está presente el archivo tar. comando: por ejemplo
- Vaya a la carpeta extraída y escriba a continuación el comando:
./configure --prefix=/usr/local/apache2 --with-included-apr --enable-proxy --enable-proxy-balancer --with-mpm=worker --enable-mods-static=all
- Ejecutar debajo del comando una vez que la configuración sea exitosa:
make
- Después de ejecutar con éxito make make run: checkinstall en la misma carpeta. (Si no tiene el software checkinstall, descargue la última versión del sitio). También el software checkinstall tiene un error que puede resolverse de la siguiente manera: busque checkinstallrc y luego reemplace TRANSLATE = 1 a TRANSLATE = 0 usando el comando vim. También verifique si el paquete excluye: EXCLUDE = "/ selinux"
- checkinstall pedirá la opción (escriba R si desea tp rpm de compilación para el archivo fuente)
- ¡Hecho! El archivo .rpm se compilará en la carpeta RPMS dentro del archivo rpmbuild / RPMS.
Simple, simplemente ejecute el siguiente comando.
sudo dnf install *package.rpm
Ingrese su contraseña y listo.