Hola a todos. Por lo que yo he deducido, para hacernos un rpm propio, lo primero que necesitamos es instalarnos el paquete rpm-devel y también el gcc, el make... en pocas palabras, un entorno de compilación en c operativo, ¿olvido algo? También necesitaremos un fichero .spec, que no es otra cosa que un pequeño listado con nuestros datos, la descripción del nuevo rpm y de los ficheros que queremos meter en él ¿cierto? He leido que lo más fácil es empezar "cogiendo prestado" un fichero .spec de un rpm que tengamos a mano y modificandolo para nuestras necesidades, ¿no?. Pues bien, para empezar, ¿cómo hago para extraer un .spec? Se que también existe el krpmbuilder, que creo que facilita la labor, pero todavía me faltan conocimientos para entender su funcionamiento, lo siento :-( Después otra cosa: en las documentaciones consultadas, veo que parten siempre de un código_fuente.tar.gz que debemos tener y compilar, pero, ¿no es posible empaquetar binarios o ficheros de datos directamente? Y para finalizar (por ahora): he visto que todo esto hay que colocarlo en determinados directorios (SOURCE, SEPCS), pero no acabo de ver claro si esos directorios cuelgan de /usr/src o si pueden estar en el home del usuario o si eso simplemente es a gusto del consumidor. Saludos desde Ibiza y hasta pronto. Miquel.
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Sunday 01 August 2004 11:21, Miquel A. Noguera wrote:
Hola a todos.
Por lo que yo he deducido, para hacernos un rpm propio, lo primero que necesitamos es instalarnos el paquete rpm-devel y también el gcc, el make... en pocas palabras, un entorno de compilación en c operativo, ¿olvido algo?
Creo que no.
También necesitaremos un fichero .spec, que no es otra cosa que un pequeño listado con nuestros datos, la descripción del nuevo rpm y de los ficheros que queremos meter en él ¿cierto?
Correcto. Es el núcleo de un paquete rpm. Ahí esta todo: las descripciones, las dependencias, los ficheros que lo componen...
He leido que lo más fácil es empezar "cogiendo prestado" un fichero .spec de un rpm que tengamos a mano y modificandolo para nuestras necesidades, ¿no?. Pues bien, para empezar, ¿cómo hago para extraer un .spec?
Utiliza el siguiente scrip bash (que yo llamo rpmrip) para destripar un src.rpm (fíjate que es un fuente rpm). - -------- #! /bin/sh # # Script para destripar un funete rpm # Uso # rpmrip nombre_del_rpm rpm2cpio $1 | cpio -i -d - --------- En el directorio que hayas ejecutado el script tendras descompuesto todas las fuentes necesarias (por ejemplo 'tar.gz'), los parches ... y el fichero 'spec'.
Se que también existe el krpmbuilder, que creo que facilita la labor, pero todavía me faltan conocimientos para entender su funcionamiento, lo siento :-(
Puede servir para cosas muy sencillitas
Después otra cosa: en las documentaciones consultadas, veo que parten siempre de un código_fuente.tar.gz que debemos tener y compilar, pero, ¿no es posible empaquetar binarios o ficheros de datos directamente?
También es posible. Fíjate que el fichero spec lo que dice en definitiva es y qué ficheros poner y dónde. Lo habitual es que los ficheros a instalar se obtengan a traves de una compilación, pero pueden utilizarse ficheros precompilados, como yo he hecho con el último rpm de azureus (si quieres ver su spec bajate el src.rpm y destrípalo).
Y para finalizar (por ahora): he visto que todo esto hay que colocarlo en determinados directorios (SOURCE, SEPCS), pero no acabo de ver claro si esos directorios cuelgan de /usr/src o si pueden estar en el home del usuario o si eso simplemente es a gusto del consumidor.
Es una cosa propia del RPM. Cada distribución utiliza sus propias definiciones y macros. En el caso de suse puedes verlas en los ficheros /usr/lib/rpm/macros /usr/lib/rpm/suse_macros ahí viene la localización de los ficheros. Los directorios especiales SPEC -> Donde se ponen los spec RPMS -> donde se colocan los rpm binarios compilados SRPMS -> donde se colocan los src.rpm que han sido construidos SOURCES -> donde deben ponerse todos las fuentes y parches a utilizar para construir el rpm BUILD -> donde se descomprimen las fuentes y se parchean si es preciso, y donde realmente tiene lugar la compilación. En suse todos esos ficheros cuelgan de /usr/src/packages IDEA FINAL BASICA: En el proceso de construcción de un RPM se trata de dejar en un directorio, que se designa con la macro ${RPM_BUILD_ROOT} (y que se suele definir al principio de los ficheros spec con BuildRoot: ) la estructura de directorios y ficheros que despues se instalará sobre el directorio raiz '/' de nuestro sistema, simplemente. Por ejemplo, mientras construyo el rpm de gambas, se crea en el directorio temporal '/var/tmp' un directorio 'gambas-0.95-build' y en él se van instalando todos los ficheros, de modo que lo que hay en /var/tmp/gambas-0.95-build/lo_que_sea se instalará, cuando instalemos el RPM, en el path '/lo_que_sea' de nuestro sistema. Quedan muchos detalles de macros a utilizar en el proceso de instalacion de fuentes, compilación e instalación en el buildRoot, pero eso se puede ir viendo poco a poco.
Saludos desde Ibiza y hasta pronto.
Buen sitio ;). Desde Granada, Guillermo - -- Guillermo Ballester Valor gbv@oxixares.com Ogijares, Granada SPAIN Linux user #117181. See http://counter.li.org/ Public GPG KEY http://www.oxixares.com/~gbv/pubgpg.html -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.2-rc1-SuSE (GNU/Linux) iD8DBQFBDL3rOA2UfsyErNQRAhHNAJ4gZ/iVix1t63VsgZkdEUD1FKxYAQCeKsXo IvFzT5MqZuSp0f69GRXfecU= =13WG -----END PGP SIGNATURE-----
El Domingo, 1 de Agosto de 2004 11:54, Guillermo Ballester Valor escribió:
Utiliza el siguiente scrip bash (que yo llamo rpmrip) para destripar un src.rpm (fíjate que es un fuente rpm).
-------- #! /bin/sh # # Script para destripar un funete rpm # Uso # rpmrip nombre_del_rpm rpm2cpio $1 | cpio -i -d
Ok: hago "copiar", lo "pego" en el 'kate' (cambio 'funete' por 'fuente' ;-) y lo guardo con el nombre "rpmrip". Después tecleo: chmod +x rpmrip mv rpmrip /usr/local/bin y el script está a punto para ser usado :-)
¿no es posible empaquetar binarios o ficheros de datos directamente?
También es posible [...] como yo he hecho con el último rpm de azureus (si quieres ver su spec bajate el src.rpm y destrípalo).
Vale, dicho y hecho. Veo que salen los siguientes archivos: a) Azureus_2.1.0.4_linux.GTK.tar.bz2, que supongo que contiene "una copia de seguridad" con todos los ficheros necesarios (binarios, datos, lo que sea) b) azureus.sh, un simple lanzador para la aplicación que al concluir la instalación estará ubicado en... ¿/usr/azureus.sh?. c) azureus.spec, que abro (me da un poco de miedo ver cuan largo es) e intento analizarlo :-( Mejor antes de empezar a preguntar le echo un vistazo, pero así a lo rápido, entiendo que las distintas secciones (%prep, %build, %install...) ¿existirán siempre? ¿pueden dejarse vacías si no son necesarias? Saludos y hasta pronto. Miquel.
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hola, On Sunday 01 August 2004 14:25, Miquel A. Noguera wrote:
El Domingo, 1 de Agosto de 2004 11:54, Guillermo Ballester Valor escribió:
Utiliza el siguiente scrip bash (que yo llamo rpmrip) para destripar un src.rpm (fíjate que es un fuente rpm).
-------- #! /bin/sh # # Script para destripar un funete rpm # Uso # rpmrip nombre_del_rpm rpm2cpio $1 | cpio -i -d
Ok: hago "copiar", lo "pego" en el 'kate' (cambio 'funete' por 'fuente' ;-) y lo guardo con el nombre "rpmrip". Después tecleo:
chmod +x rpmrip mv rpmrip /usr/local/bin
y el script está a punto para ser usado :-)
¿no es posible empaquetar binarios o ficheros de datos directamente?
También es posible [...] como yo he hecho con el último rpm de azureus (si quieres ver su spec bajate el src.rpm y destrípalo).
Vale, dicho y hecho.
Veo que salen los siguientes archivos:
a) Azureus_2.1.0.4_linux.GTK.tar.bz2, que supongo que contiene "una copia de seguridad" con todos los ficheros necesarios (binarios, datos, lo que sea)
Es una de los paquetes fuentes utilizados. Mira en el spec, se trata de Source0
b) azureus.sh, un simple lanzador para la aplicación que al concluir la instalación estará ubicado en... ¿/usr/azureus.sh?.
Es el Source1. Esa fuente es de mi cosecha, lo tuve que hacer para que se pudiese lanzar azureus desde la consola con el comando 'azureus'. Se instala en '/usr/bin'
c) azureus.spec, que abro (me da un poco de miedo ver cuan largo es) e intento analizarlo :-(
Mejor antes de empezar a preguntar le echo un vistazo, pero así a lo rápido, entiendo que las distintas secciones (%prep, %build, %install...) ¿existirán siempre? ¿pueden dejarse vacías si no son necesarias?
Se pueden dejar cosas vacias. Si no le tienes miedo al inglés, este manual me ayudó a entender algunas macros file:/usr/share/doc/packages/rpm/RPM-HOWTO/index.html PD. Si quieres ver otros spec más sencillitos puedes leer, por ejemplo, mi spec del paquete 'gd', deriva del de SUSE. Hasta pronto... Guillermo - -- Guillermo Ballester Valor gbv@oxixares.com Ogijares, Granada SPAIN Linux user #117181. See http://counter.li.org/ Public GPG KEY http://www.oxixares.com/~gbv/pubgpg.html -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.2-rc1-SuSE (GNU/Linux) iD8DBQFBDRpsOA2UfsyErNQRAu8+AKCwj2+CQKE/h/4UsThbVPkHC694QQCfX6nT fQ8MpkL9ObfvPmoC9zOHaZ8= =rBKr -----END PGP SIGNATURE-----
El Domingo, 1 de Agosto de 2004 11:54, Guillermo Ballester Valor escribió:
IDEA FINAL BASICA: En el proceso de construcción de un RPM se trata de dejar en un directorio, que se designa con la macro ${RPM_BUILD_ROOT} (y que se suele definir al principio de los ficheros spec con BuildRoot: ) la estructura de directorios y ficheros que despues se instalará sobre el directorio raiz '/' de nuestro sistema, simplemente.
Vale... creo que hasta aquí lo voy entendiendo. Si me permites podríamos porner un ejemplo, que puede servir para ir practicando y corrigiendo. Digamos que quiero hacerme un rpm con varios fondos de pantalla: fondo1.jpg, fondo2.jpg y fondo3.jpg, que ahora están en mi home, pero que una vez instalados estarán en /opt/kde3/share/wallpapers. Luego empezamos así: mkdir -p opt/kde3/share/wallpapers cp fondo1.jpg fondo2.jpg fondo3.jpg opt/kde3/share/wallpapers tar -cvzf fondos.tar.gz opt/ cp fondos.tar.gz /usr/src/packages/SOURCES Del mismo modo, deberíamos crear el fichero fondos.spec y ubicarlo en /usr/src/packages/SPECS ¿voy bien? ¿que se me olvida? Y a partir de ahí, ¿como sigo? Miquel.
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Tuesday 03 August 2004 20:55, Miquel A. Noguera wrote:
El Domingo, 1 de Agosto de 2004 11:54, Guillermo Ballester Valor escribió:
IDEA FINAL BASICA: En el proceso de construcción de un RPM se trata de dejar en un directorio, que se designa con la macro ${RPM_BUILD_ROOT} (y que se suele definir al principio de los ficheros spec con BuildRoot: ) la estructura de directorios y ficheros que despues se instalará sobre el directorio raiz '/' de nuestro sistema, simplemente.
Vale... creo que hasta aquí lo voy entendiendo. Si me permites podríamos porner un ejemplo, que puede servir para ir practicando y corrigiendo.
Digamos que quiero hacerme un rpm con varios fondos de pantalla: fondo1.jpg, fondo2.jpg y fondo3.jpg, que ahora están en mi home, pero que una vez instalados estarán en /opt/kde3/share/wallpapers. Luego empezamos así:
mkdir -p opt/kde3/share/wallpapers cp fondo1.jpg fondo2.jpg fondo3.jpg opt/kde3/share/wallpapers tar -cvzf fondos.tar.gz opt/ cp fondos.tar.gz /usr/src/packages/SOURCES
No, casi bien, la secuencia sería, antes de meterse en rpm: tar -cvzf fondos.tar.gz fondo*.jpg cp fondos.tar.gz /usr/src/packages/SOURCES después, tienes que definir eso como fuente de tu paquete. En el fichero fondos.spec tiene que ir una línea - ------ Source0: fondos.tar.gz - ------ En la fase de preparación: - ------ %prep %setup -n fondos -a 0 - ------ con ello, rpm primero crea un directorio fondos en '/usr/src/packages/BUILD' y a continuación hace un cd a dicho directorio y descompirme la fuente 0 (fondos.tar.gz). Bien, y ahora la fase install, al meterse en build se hace un 'cd fondos' de forma uatomática: - ------ %build mkdir -p ${RPM_BUILD_ROOT}/opt/kde3/share/wallpapers cp fondo*.jpg ${RPM_BUILD_ROOT}/opt/kde3/share/wallpapers - ------ Por último tienes que definir qué ficheros componen tu rpm: - ------ %file /opt/kde3/share/wallpapers/*jpg - ------ Y para terminar un changelog - ------ %changelog Tue Aug 03 2004 - Miguel A. Noguera - - Mi primer rpm de fondos - ------
Del mismo modo, deberíamos crear el fichero fondos.spec y ubicarlo en /usr/src/packages/SPECS
Resumiendo todo y añadiendo algunas cosillas, para crear fondos-0.1-1.i586.rpm, este sería fondos spec, con traducción y todo para nuestra lengua (puede haber algun fallo). - -------------------------------------------------- # spec file for package fondos # Summary: Desktop screens Summary(es): Fondos de pantalla Name: Fondos Version: 0.1 Release: 1 License: GPL Buildroot: %{_tmppath}/%{name}-%{version}-build Source0: fondos.tar.gz ######## %description Nice images for your desktop Author - ------ Miguel A. Noguera ######## %description -l es Hermosos fondos paratu escritorio Author - ------ Miguel A. Noguera ######## %prep %setup -n fondos -a 0 ######## %build mkdir -p ${RPM_BUILD_ROOT}/opt/kde3/share/wallpapers cp fondo*.jpg ${RPM_BUILD_ROOT}/opt/kde3/share/wallpapers ######## %file /opt/kde3/share/wallpapers/*jpg ######## %changelog Tue Aug 03 2004 - Miguel A. Noguera - - Mi primer rpm de fondos - ----------------------------------------------------- Saludos, Guillermo - -- Guillermo Ballester Valor gbv@oxixares.com Ogijares, Granada SPAIN Linux user #117181. See http://counter.li.org/ Public GPG KEY http://www.oxixares.com/~gbv/pubgpg.html -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.2-rc1-SuSE (GNU/Linux) iD8DBQFBD+kNOA2UfsyErNQRAlLGAJ0Xw+YFXbsdAulVHbDqGh9snYFuswCfVSVd a2pqPy6jxN6KFY3d7FSDY4E= =tTEl -----END PGP SIGNATURE-----
El 2004-08-01 a las 11:21 +0200, Miquel A. Noguera escribió:
Por lo que yo he deducido, para hacernos un rpm propio, lo primero que necesitamos es instalarnos el paquete rpm-devel y también el gcc, el make... en pocas palabras, un entorno de compilación en c operativo, ¿olvido algo?
Si, con todas sus dependencias.
También necesitaremos un fichero .spec, que no es otra cosa que un pequeño listado con nuestros datos, la descripción del nuevo rpm y de los ficheros que queremos meter en él ¿cierto?
Si.
He leido que lo más fácil es empezar "cogiendo prestado" un fichero .spec de un rpm que tengamos a mano y modificandolo para nuestras necesidades, ¿no?. Pues bien, para empezar, ¿cómo hago para extraer un .spec?
Lo más facil, para andar por casa, es crear el rpm mediante checkinstall (está en la distro). Consiste simplemente en substituir la fase "make install" de compilación del programa que quieras instalar por "checkinstall". Este script (es un script bash ¡de 71k!) llama a "make install" tomando nota de lo que se instala, y creando un rpm. De hecho, intercepta la instalación, él ejecuta el programa rpm al final para instalar el rpm recién creado - o lo deja sin instalar para que lo hagas tu. Ahora bien, si quieres crear un rpm para distribuir por ahí, entonces es mejor que hagas el spec manualmente. El checkinstall sirve fundamentalmente para instalar tus propias compilaciones manteniendo la base de datos del rpm informada. -- Saludos Carlos Robinson
El Domingo, 1 de Agosto de 2004 13:17, Carlos E. R. escribió:
Lo más facil, para andar por casa, es crear el rpm mediante checkinstall (está en la distro).
He visto que no se instala por defecto, así que me lo he instalado a mano.
Consiste simplemente en substituir la fase "make install" de compilación del programa que quieras instalar por "checkinstall".
¡¡¡ menudo gustazo !!! Acabo de bajarme la libdvdcss y en cuestión de segundos ya me he fabricado mi primer rpm. Con este script es tan fácil que da gusto. Gracias por tu recomendación. Miquel.
Miquel A. Noguera wrote:
El Domingo, 1 de Agosto de 2004 13:17, Carlos E. R. escribió:
Lo más facil, para andar por casa, es crear el rpm mediante checkinstall (está en la distro).
He visto que no se instala por defecto, así que me lo he instalado a mano.
Consiste simplemente en substituir la fase "make install" de compilación del programa que quieras instalar por "checkinstall".
¡¡¡ menudo gustazo !!!
Acabo de bajarme la libdvdcss y en cuestión de segundos ya me he fabricado mi primer rpm.
Con este script es tan fácil que da gusto. Gracias por tu recomendación.
Miquel.
ya que hablamos del checkinstall, alguien podria explicar como crear el script que va en /etc/init.d para iniciar/parar/reiniciar servicios ya que al crear el rpm con checkinstall, no se crea este script ? Saludos Leo
El 2004-08-03 a las 22:38 +0200, Leo escribió:
ya que hablamos del checkinstall, alguien podria explicar como crear el script que va en /etc/init.d para iniciar/parar/reiniciar servicios ya que al crear el rpm con checkinstall, no se crea este script ?
Pues nada, coges el editor de tu gusto, escribes el script tecla a tecla, lo grabas en el lugar adecuado, etc etc etc. :-P Ni el checkinstall ni el rpm tienen nada que ver con los script de inicio de servicios. Esos se crean a mano o se copian y adaptan. Si la fase "make install" crea ese script (que nunca lo he visto hacer así), pues checkinstall lo pondrá. Si lo creas a mano, pues puedes hacer que el fichero .spec lo mencione y entonces se grabe en el rpm de marras hecho a mano. Truco: Si estás substituyendo un rpm de suse que ya trae su script de inicio, copiálo de ahí. En algunos casos, algunos fuentes traen un script, que puede ser para suse (de una version antigua, habitualmente, pero adaptable) o de otro linux. Sirven de punto de partida. Documentación: - man init.d - capítulo "The SuSE boot concept" en el libro de administración. - fichero '/etc/init.d/skeleton' como punto de partida. - programa 'chkconfig' o 'yast' para instalarlo. -- Saludos Carlos Robinson
Miquel A. Noguera wrote:
Hola a todos.
Por lo que yo he deducido, para hacernos un rpm propio, lo primero que necesitamos es instalarnos el paquete rpm-devel y también el gcc, el make... en pocas palabras, un entorno de compilación en c operativo, ¿olvido algo?
También necesitaremos un fichero .spec, que no es otra cosa que un pequeño listado con nuestros datos, la descripción del nuevo rpm y de los ficheros que queremos meter en él ¿cierto?
He leido que lo más fácil es empezar "cogiendo prestado" un fichero .spec de un rpm que tengamos a mano y modificandolo para nuestras necesidades, ¿no?. Pues bien, para empezar, ¿cómo hago para extraer un .spec?
Se que también existe el krpmbuilder, que creo que facilita la labor, pero todavía me faltan conocimientos para entender su funcionamiento, lo siento :-(
Después otra cosa: en las documentaciones consultadas, veo que parten siempre de un código_fuente.tar.gz que debemos tener y compilar, pero, ¿no es posible empaquetar binarios o ficheros de datos directamente?
Y para finalizar (por ahora): he visto que todo esto hay que colocarlo en determinados directorios (SOURCE, SEPCS), pero no acabo de ver claro si esos directorios cuelgan de /usr/src o si pueden estar en el home del usuario o si eso simplemente es a gusto del consumidor.
Saludos desde Ibiza y hasta pronto.
Miquel.
Para crear rpm´s desde Tar.gz existe un programita llamado "checkinstall". Para mi es casi fundamental desde que lo conocí. Se debe ejecutar el checkinstall en lugar de make install y listo. Buscar en google.com checkinstall+download y sale enseguida. Saludos y espero sirva Leo
participants (4)
-
Carlos E. R.
-
Guillermo Ballester Valor
-
Leo
-
Miquel A. Noguera