Trucos de Yum y RPM
Yum y Rpm son excelentes herramientas para manejar paquetes. Tienen algunas opciones y aplicaciones, no muy conocidas, que nos permiten hacer cosas interesantes. Probablemente no necesite usarlas con frecuencia, pero en el caso que las necesite, aquí las tendrá a mano.
Contents
- Obteniendo rpm para mostrar la arquitectura
- Reajustando los permisos de los ficheros
- Ver los logs de cambios (Changelog)
- ¿Dónde está la documentación?
- Origen de paquetes
- Extraer solo un fichero
- Consultar el orden y la fecha en la que fueron instalados los paquetes
- Consultar paquetes disponibles de un repositorio
- Buscar una cadena en los repositorios
- Preparando la reconstrucción de paquetes sin convertirse a root
1. Obteniendo rpm para mostrar la arquitectura
Este es un truco muy sencillo y útil, especialmente para la gente que usa los sistemas x86_64. Apenas una línea en ~/.rpmmacros ahorrará toda clase de apuro más adelante.
echo \"%_query_all_fmt %%{name}-%%{version}-%%{release}.%%{arch}\" >> ~/.rpmmacros
2. Reajustando los permisos de los ficheros
¿Usted ha hecho un desorden total de los permisos para un determinado paquete? No se preocupe, con RPM tiene la solución.
rpm –setperms
3. Ver los logs de cambios (Changelog)
Debido a que en el proveedor y en CentOS se ha aplicado backporting a los parches de seguridad, los números de versión pueden, a menudo ser, engañosos cuando usted busca arreglos de CVE. La comprobación del changelog de un paquete es una buena manera de ver si se ha puesto en ejecución la corrección. De nuevo, RPM viene al rescate.
rpm -q –changelog | less
Usar "less" no es necesario, pero para algunos paquetes como el kernel, el changelog puede ser bastante largo. Usar "less" facilitaría su lectura.
4. ¿Dónde está la documentación?
Para un rápido listado de la documentación de un paquete, se pueden usar las dos siguientes opciones:
rpm -qd <nombre-del-paquete>
Esto mostrará la documentación contenida dentro del rpm, y si solamente tienes un nombre de fichero, puedes hacer:
rpm -qdf /camino/al/fichero
y RPM mostrará la documentación del paquete que posee el fichero.
5. Origen de paquetes
En ocaciones es agradable saber de donde vienen ciertos paquetes, o cuántos paquetes tenemos instalados en nuestro sistema desde un repositorio o distribuidor en particular. Hay un par de opciones de búsqueda que usted puede utilizar que no están en las páginas man de RPM. Aunque no sean 100% perfectas, le pueden ser de ayuda. La mayoría de los repositorios de paquetes marcan sus paquetes con una etiqueta identificadora en la secuencia del lanzamiento. Por ejemplo rpmforge utiliza *rf* como su identificador. Usted puede utilizar esto para ver lo que tiene instalado de ellos.
rpm -qa release=\"*rf*\"
o si quiere solamente ver cuantos paquetes construidos por JohnnyHughes tiene instalado, puedes usar:
rpm -qa packager=\”Johnny*\”
Este truco funciona para casi todas las categorías visibles en
rpm -qi <nombre-del-paquete>
6. Extraer solo un fichero
Si usted necesita extraer solo un fichero de un rpm sin reinstalar el paquete completo, lo puede hacer con rpm2cpio. Por ejemplo, para extraer solo el fichero de configuración del rpm logrotate usted solo necesita hacer lo siguiente:
rpm2cpio logrotate-1.0-1.i386.rpm |cpio -ivd etc/logrotate.conf
7. Consultar el orden y la fecha en la que fueron instalados los paquetes
Util después de una actualización para buscar paquetes viejos que no fueron mejorados.
rpm -qa --last >~/RPMS_by_Install_Date
Constule el final de la salida del fichero con "less" para encontrar todos los RPMS anteriores a la fecha de instalación. Puede además, especificar (usando grep) los paquetes y ver cuando fueron instalados.
8. Consultar paquetes disponibles de un repositorio
Encuentra todos los paquetes disponibles de un repositorio específico, ej. RPMforge.
yum --disable "*" --enable "rpmforge" list available
9. Buscar una cadena en los repositorios
Encuentra paquetes que contienen una cadena en el nombre del paquete o en su descripción.
yum search buildrpmtree | less
10. Preparando la reconstrucción de paquetes sin convertirse a root
Algunas veces tiene que reconstruir un paquete, quizás solo para usar alguna opción de configuración que no está en el paquete oficial, o porque has encontrado algún paquete que no está en los repositorios, o porque el sitio solo le ofrece RPMs para otras distribuciones. Entonces tiene que tomar el fichero src.rpm y reconstruirlo por su cuenta. Pero realmente no necesita hacer esto como root. Entonces aquí está como reconstruir sus paquetes en su directorio home con su propia cuenta de usuario. Asumimos que lo hará en ~/redhat. Seguramente usted puede mover este directorio a otra parte.
10.1. Método A
Primero iremos al directorio donde queremos trabajar. Observe la semejanza a la estructura del directorio en /usr/src/redhat:
[testuser@shutdown ~]$ cd [testuser@shutdown ~]$ mkdir -p redhat/{SRPMS,RPMS,SPECS,BUILD,SOURCES} [testuser@shutdown ~]$ ls redhat/ BUILD RPMS SOURCES SPECS SRPMS [testuser@shutdown ~]$
Entonces intentamos algunos ajustes con los macros rpm, así el rpmbuild sabrá sobre usted y donde desea construir:
[testuser@shutdown ~]$ echo \"%_topdir /home/testuser/redhat\" >> .rpmmacros [testuser@shutdown ~]$ echo \"%packager Test User <testuser@example.com>\" >> rpmmacros [testuser@shutdown ~]$ cat .rpmmacros %_topdir /home/testuser/redhat %packager Test User <testuser@example.com> [testuser@shutdown ~]$
Eso es todo. La próxima vez que haga rpmbuild –rebuild foo.src.rpm, sus resultados estarán en ~/redhat/RPMS/i386 (o para cualquier arquitectura que haya reconstruido el paquete) ¿Fácil, verdad?
10.2. Método B
Configure el repositorio kbs-Extras (opcionalmente adicione kbs-Misc) desde la página Repositorios y ejecute "yum install fedora-rpmdevtools" usando "sudo" o "su -" como root. Como el usuario constructor (para esto puede ser necesario una cuenta especial con el objetivo de evitar problemas en el directorio home de su usuario normal) ejecute "fedora-buildrpmtree", luego un árbol de directorio ~/rpmbuild/... y el fichero ~/.rpmmacros serán creados automáticamente. (Observe "rpmbuild" contra "redhat" en el método A.)
Para CentOS-5 - Un paquete para rpmdevtool parece no estar disponible. El SRPM rpmdevtools-5.3-1.fc6.src.rpm de FC6 se construye y trabaja.
La siguiente adición a los macros puede ser necesaria para obtener los nombres apropiados para algunos paquetes (sustituya la versión de la distro por la apropiada "el4" según sea necesario.)
[testuser@shutdown ~]$ echo "%dist .el4" >> .rpmmacros