2011-04-10 8 views
26

¿Hay alguna manera de extraer el archivo de especificación del paquete rpm (sólo tengo archivo RPM)extraer el archivo de especificación del paquete rpm

no por

rpm --scripts -qp my-great-app-1.1.2.rpm 

(esta sintaxis no obtener el archivo de especificaciones solo los scripts de las rpm)

+0

¿Estás seguro de que el archivo de especificación está almacenado en el RPM? En un .src.rpm, ciertamente, pero para un RPM normal no estoy seguro de eso en absoluto. – Mat

+0

así que si solo tengo el archivo rpm donde puedo obtener el archivo de especificación, por favor ayuda – jon

+0

busca el RPM de origen, o la página de inicio de ese paquete. – Mat

Respuesta

6

los archivos de especificaciones generalmente no están en rpm. Están en rpm de origen.

+0

¿puedo reconstruir de nuevo las rpm sin el archivo de especificaciones? – jon

+0

@jon: AFAIK, no es posible "compilarlo". Pero, creo, puedes escribir un archivo de especificaciones con solo una sección de instalación mirando los archivos empaquetados en las rpm binarias. –

+0

"mirando los archivos empaquetados en las rpm binarias "por favor explique? – jon

12

El archivo de especificación no se almacena en rpms binarios, a menos que el fabricante lo haya incluido específicamente por algún motivo (y realmente no hay motivo para hacerlo). La única información que puede obtener de un rpm binario es la información que devuelve rpm -qi <package> y los archivos que rpm -ql <package> enumeran. Si necesita más que eso, debe encontrar el paquete fuente. Si Google/el sitio web del proveedor no puede proporcionar eso para usted, debe haber información de contacto proporcionada en el campo de empaquetamiento para cualquier cosa empaquetada por cualquier persona competente. Por ejemplo, aquí hay un paquete que viene con RHEL y un paquete de un proveedor de terceros:

$ rpm --qf '%{Packager}\n' -q redhat-release 
Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla> 
$ rpm --qf '%{Packager}\n' -q cfengine-community 
CFEngine AS ([email protected]) 

Hay que tienen un sitio web y una dirección de correo electrónico, respectivamente, donde se puede preguntar acerca de un archivo de especificaciones o archivo srpm.

5

podría utilizar

yumdownloader --source < something.rpm 

a continuación:

rpm2cpio packagename | cpio -ivd 
+5

que solo obtiene los archivos que se instalarán, no el archivo de especificaciones. –

+1

rpm -i pkg.src.rpm lo extraerá en el directorio rpmbuild – qrtt1

15

Instalar rpmrebuild y extraer el archivo de especificaciones de su archivo rpm o su paquete ya instalado .

Ejemplos:

rpmrebuild --package --notest-install -e oracle-instantclient-basic-10.2.0.4-1.x86_64.rpm 
rpmrebuild -s hercules.spec hercules 
+10

Al mirar el código de rpmrebuild y luego probarlo, no "extrae" el archivo de especificación; regenera la mayor parte de un archivo de especificación (encabezado, registro, secuencias de comandos pre/post). Pero, críticamente para la reconstrucción, en realidad no obtiene las secciones% prep o% build; simplemente los deja en sus valores predeterminados (que son "make clean" y "make install", respectivamente). Sospecho que esto se debe a que/that/information no se almacena en RPM. Entonces, aunque esto debería funcionar en los casos más generales, no parece que funcionará universalmente (especialmente para paquetes con pasos de compilación complejos). :/ – dannysauer

+0

dannysauer: seguro, en realidad no es extracción porque es una reconstrucción del archivo de especificación ("extracto" era la pregunta). La especificación no es parte del paquete RPM y, por lo tanto, la reconstrucción es la única forma de obtener una "plantilla de especificación". Pero este podría ser un buen punto de partida en muchos casos. En el pasado, a veces me ayudó a arreglar paquetes de rpm binarios. – reichhart

1

rpmrebuild es su amigo. Use

rpmrebuild -e -p <rpm_file> 

Al abrir el archivo de especificaciones en un editor, también puede realizar cambios en las especificaciones de rpm.

+1

rpmrebuild ya fue mencionado hace 2 años – reichhart

2

Por respuesta de @RumpleStiltskin, los archivos de especificaciones originales se encuentran en fuentes rpms que se pueden extraer. Para obtener los rpms de origen, ejecute lo siguiente:

yum install yum-utils # Only required if yumdownloader is not installed 
yumdownloader --source <package name, like 'emacs-nox'> 

Esto instalará el paquete en el directorio actual. Para extraer correr:

rpm2cpio <package name>.src.rpm | cpio -civ '*.spec' 

El archivo .spec estará en el directorio actual.

Si no puede instalar yum-utils por alguna razón, mire los archivos en /etc/yum.repos.d/ y busque las secciones que hacen referencia a los repositorios de rpm de la fuente. Puede escribir los valores para baseurl en su navegador y buscar manualmente el paquete fuente. La extracción del .spec todavía requiere rpm2cpio.

Cuestiones relacionadas