OpenMandriva: Mageia (Mageia 9) 20/Agosto/2023 - Anuncio, Descargas.
Blogdrake recomienda descargar las imágenes de instalación (iso) vía torrent para evitar corrupción de datos, aprovechar mejor su ancho de banda y mejorar la difusión de las distribuciones.
Clase de empaquetado rpm. Parte 2 - Entendiendo el fichero SPEC
En esta segunda clase veremos como se trabaja y se edita el archivo SPEC, recuerden que estos archivos se guardan en
~/rpm/SPECS.
El archivo spec es donde guardamos toda la info sobre el paquete a trabajar, además que aquí le "decimos" al sistema
como y donde se va a instalar, veremos un spec sencillo, pondré las etiquetas con un ">" delante y debajo voy a comentar
sobre ellas, ademas en este mensaje van adjuntos un spec limpio y el spec de q4wine que vamos a ver.
>Name: q4wine
El nombre del programa, no debe tener espacios, generalmente es el mismo nombre del tarball.
>Version: 0.118
La versión del programa, también generalmente viene en el tarball.
>Release: %{mkrel 01}
Este es el número de release, en este caso el paquete quedaría Nombre-Versión-01bdk2010.1.noarch.rpm, en caso que por
alguna razón debamos reempaquetar, ya sea porque lo hemos hecho mal, o porque agregamos un patch, lo que hacemos es
aumentarle un dígito, a "02" quedando %{mkrel 02}, esto indicaría al sistema que es una update del anterior release. Yo
uso dos dígitos, la mayoría de los bdk-packagers usan solo 1, y quien usa los paquetes mib pueden notar que usan "69" o
algo así, nosotros usaremos "1" o "01".
>Summary: Q4Wine is a qt4 GUI for W.I.N.E
Esto es la descripción corta que muestra el mcc y urpmq, pueden tomarla del sitio o del "README" en el tarball.
También se puede agregar varias tags Summary para cada idioma, por ejemplo "Summary(es):", una debajo de la otra.
>Group: Emulators
Grupo en el cual va a aparecer el programa en el MCC, al fina les dejo la lista de grupos :D
>License: GPLv3
La licencia, generalmente esta explicitada en el "README" o "copying" que vienen en el tarball. Dependiendo de la
licencia el paquete puede ir a repos free o non-free. La lista de licencias se las dejo también debajo.
>URL: http://q4wine.brezblock.org.ua/
El sitio del proyecto, generalmente estos programas se encuentran en sitios como Google Code, Freeshmeat o Sourceforge,
traten de buscar la web aparte de estos sitios y no la página dentro de Google Code o de los demás.
>Source0: %{name}-%{version}.tar.bz2
>#Source0: http://ufpr.dl.sourceforge.net/project/q4wine/q4wine/q4wine%200.118/q4wine-0.118.tar.bz2
Aquí solo especificar el nombre y extensión del archivo, puede ser .zip, .tar, etc, va a tomar name y versión que están
definidas al principio. Debajo siempre comento una linea con el path de donde descargue el archivo, no es necesario, pero
puede facilitar la vida de otro empaquetador, además, si existen 2 tarball uno para x86 y otro para x86_64 esta bueno
que pongamos el link a ambos, ya que en bdk siempre un voluntario se ofrece para empaquetar para la otra arquitectura.
Es opcional :D
>BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}
Esta linea siempre es igual, no hay que cambiarla. Aquí se prepara el ambiente de trabajo, es donde especifíca que se trabaja en un ambiente fake.
>BuildRequires: cmake fuse-devel
En esta linea van las dependencias para el compilado del paquete, generalmente son paquetes *-devel y libs
>Requires: wine icoutils fuseiso wget sudo
Las dependencias que el programa pide para funcionar.
Tanto aqui como en el BuildRequires en lugar de usar el nombre explícito de la lib se debe usar %{_lib} continuado del nombre.
Ejemplo: BuildRequires: %{_lib}gtk+2.0_0-devel >= 2.6
>%description
>Q4Wine is a qt4 GUI for W.I.N.E. It will help you manage wine prefixes and installed applications.
La descripción, es más larga que el "Summary", generalmente se puede copiarla del sitio del proyecto o de algún archivo
en el tarball. También se puede poner la descripción para varios idiomas, luego veremos esto.
>%prep
>%setup -q
Estas lineas difícilmente las cambiaremos, luego al empaquetar veremos mejor para que sirven y algunas opciones. Solo
comentar que aquí es donde se desempaqueta el tarball.
>%build
>mkdir build
>cd build
>cmake ./ -DWITH_WINETRIKS=ON -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` ..
>make
La etiqueta %build va a contener todo lo que sea compilación y configuración, los "./configure" y "make" van en esta
etiqueta. Como pueden apreciar en esta oportunidad uso cmake, todo esto esta en el README o en el archivo INSTALL dentro
del tarball.
>%install
>rm -rf $RPM_BUILD_ROOT
>cd build
>make install DESTDIR=$RPM_BUILD_ROOT/
Lo mismo que el anterior, solo escribimos aquí lo que nos pide el INSTALL para que el programa se instale luego de
compilado. Ya que al empaquetar estamos instalando el programa en nuestra "jaula" rpmbuild el "DESTDIR=$RPM_BUILD_ROOT/"
le "dirá" al programa que se instale en esta jaula, luego en el sistema el "$RPM_BUILD_ROOT/" será sustituido por
nuestro /, si no ponemos esto el rpmbuild intentará instalar el programa en nuestro / y obtendremos un mensaje de error
por falta de permisos(estamos como no-root)
>%clean
>rm -rf $RPM_BUILD_ROOT
Limpieza, borrado de temporales. Esto lo dejaremos así, aunque se pueden agregar otras cosas, luego lo comentaremos.
>%post
>%{update_menus}
>%postun
>%{clean_menus}
Esto lo dejaremos para la próxima, solo comentar que los "update_menus" y "clean_menus" en este caso refrescan el menú,
pero se pueden agregar muchas cosas, luego se comentará al empaquetar nuestro primer programa.
>%files
>%defattr(0755,root,root)
%{_bindir}/q4wine
%{_bindir}/q4wine-cli
%{_bindir}/q4wine-helper
%{_libdir}/q4wine/libq4wine-core.so
%{_datadir}/applications/q4wine.desktop
%{_datadir}/man/man1/q4wine-cli.1.lzma
%{_datadir}/man/man1/q4wine-helper.1.lzma
%{_datadir}/man/man1/q4wine.1.lzma
%{_datadir}/pixmaps/q4wine.png
%{_datadir}/q4wine/i18n/en_us.qm
%{_datadir}/q4wine/i18n/es_es.qm
%{_datadir}/q4wine/i18n/it_it.qm
%{_datadir}/q4wine/i18n/pt_br.qm
%{_datadir}/q4wine/i18n/ru_ru.qm
%{_datadir}/q4wine/i18n/uk_ua.qm
%{_datadir}/q4wine/icons/eject.png
%{_datadir}/q4wine/icons/exec_wine.png
%{_datadir}/q4wine/icons/explorer.png
%{_datadir}/q4wine/icons/notepad.png
%{_datadir}/q4wine/icons/regedit.png
%{_datadir}/q4wine/icons/uninstaller.png
%{_datadir}/q4wine/icons/winecfg.png
%{_datadir}/q4wine/icons/wineconsole.png
%{_datadir}/q4wine/theme/nuvola/data/configure.png
%{_datadir}/q4wine/theme/nuvola/data/down.png
%{_datadir}/q4wine/theme/nuvola/data/edit.png
%{_datadir}/q4wine/theme/nuvola/data/exec.png
%{_datadir}/q4wine/theme/nuvola/data/exec_wine.png
%{_datadir}/q4wine/theme/nuvola/data/exit.png
%{_datadir}/q4wine/theme/nuvola/data/folder.png
%{_datadir}/q4wine/theme/nuvola/data/folder_open.png
%{_datadir}/q4wine/theme/nuvola/data/kill.png
%{_datadir}/q4wine/theme/nuvola/data/power.png
%{_datadir}/q4wine/theme/nuvola/data/prefix.png
%{_datadir}/q4wine/theme/nuvola/data/rebuild.png
%{_datadir}/q4wine/theme/nuvola/data/reload.png
%{_datadir}/q4wine/theme/nuvola/data/stop.png
%{_datadir}/q4wine/theme/nuvola/data/up.png
%{_datadir}/q4wine/theme/nuvola/data/wine.png
%{_datadir}/q4wine/theme/nuvola/data/wizard.png
Con %defattr(0755,root,root) le estoy marcando los permisos a todos los archivos, esto lo uso desde que lo vi en la wiki
de mandriva, pero existen variaciones que luego comentaremos como setear opciones y permisos para cada archivo. Debajo están listados todos los archivos que instala el rpm, hay que recordar que:
%{_datadir}/ es /usr/share/
%{_libdir}/ es /usr/lib/
%{_bindir}/ es /usr/bin/
Si dejamos vacía esta etiqueta, la primer vez que ejecutemos el rpmbuild nos va a listar todos estos archivos(2 veces, tomamos solo uno de los 2 listados), solo debemos copiarla a nuestro spec y cambiar "/usr/share/" por "%{_datadir}/", y lo mismo con los demás.
>%changelog
>* Thu Jun 3 2010 <mail.nosXw en gmail.com> 0.118-01bdk2010.1
>- Build for Mandriva 2010.1 ««blogdrake.net»»
Cuando empaquetemos para Mageia lo haremos en el buildsystem, y esta etiqueta se va a rellenar automáticamente, por
ahora lo hacemos a mano, contiene la fecha, el mail o nombre del empaquetador y alguna descripción.
Todo esto parece algo complicado, pero luego de la primera empaquetada nos va a parecer más simple, existen muchas cosas
que se pueden agregar, opciones a modificar, todo va a depender del paquete y del empaquetador.
Algunas cosas de home-work para ustedes:
Archivo SPEC más a fondo http://www.rpm.org/max-rpm-snapshot/s1-rpm-build-creating-spec-file.html y
http://wiki.mandriva.com/en/Development/Howto/RPM#Inside_the_spec_file
Algunos archivos spec de los packagers, así ven como fuimos mejorando :P ftp://ftp.blogdrake.net/mandriva/SPECS/
Este texto es un leve modificación de http://blogdrake.net/pipermail/packagers_blogdrake.net/2010-September/002169.html
Cualquier pregunta debe hacerse en la lista, respondiendo al thread de la clase, no pregunten en este hilo.
Respuestas a las preguntas frecuentes:
¿Qué tipo de archivo/fichero es el spec?
Un archivo de texto simple, editable con cualquier editor de texto, p.e.: nano, gedit, vim, kate, kwrite
¿Como puedo ver el spec de un rpm?
Se debe buscar el archivo src.rpm del rpm, están en el directorio SRPMS. El archivo se descomprime y deja tanto al tarball como el spec en sus directorios correspondientes(configurados en el .rpmmacros, ~/rpm...) con rpm -ivh camino-al-src.rpm. En los directorios SRPMS del repositorio blogdrake dentro de los directorios mageia/mageia%{version} (ej http://ftp.blogdrake.net/mageia/mageia6/SRPMS/) puede consultar los src.rpm de los paquetes que hemos construido. En http://svnweb.mageia.org/packages/updates/ se puede consultar todos los specs de los rpm de Mageia
Lo que prometí anteriormente:
Spec vacío: http://blogdrake.pastebin.com/RmabD73Q
Spec de ejemplo: http://blogdrake.pastebin.com/ARLbkxbu
Groups:
Accessibility
Archiving/Backup
Archiving/Cd burning
Archiving/Compression
Archiving/Other
Books/Computer books
Books/Faqs
Books/Howtos
Books/Literature
Books/Other
Communications
Databases
Development/C
Development/C++
Development/Databases
Development/GNOME and GTK+
Development/Java
Development/KDE and Qt
Development/Kernel
Development/Other
Development/Perl
Development/PHP
Development/Python
Development/Ruby
Development/X11
Editors
Education
Emulators
File tools
Games/Adventure
Games/Arcade
Games/Boards
Games/Cards
Games/Other
Games/Puzzles
Games/Sports
Games/Strategy
Graphical desktop/Enlightenment
Graphical desktop/FVWM based
Graphical desktop/GNOME
Graphical desktop/Icewm
Graphical desktop/KDE
Graphical desktop/Other
Graphical desktop/Sawfish
Graphical desktop/WindowMaker
Graphical desktop/Xfce
Graphics
Monitoring
Networking/Chat
Networking/File transfer
Networking/Instant messaging
Networking/IRC
Networking/Mail
Networking/News
Networking/Other
Networking/Remote access
Networking/WWW
Office
Publishing
Sciences/Astronomy
Sciences/Biology
Sciences/Chemistry
Sciences/Computer science
Sciences/Geosciences
Sciences/Mathematics
Sciences/Other
Sciences/Physics
Shells
Sound
System/Base
System/Cluster
System/Configuration/Boot and Init
System/Configuration/Hardware
System/Configuration/Networking
System/Configuration/Other
System/Configuration/Packaging
System/Configuration/Printing
System/Fonts/Console
System/Fonts/True type
System/Fonts/Type1
System/Fonts/X11 bitmap
System/Internationalization
System/Kernel and hardware
System/Libraries
System/Printing
System/Servers
System/X11
Terminals
Text tools
Toys
Video
Open Source licenses:
GPL
LGPL
GFDL
OPL
Artistic
CC-BY-SA
BSD
MIT
QPL
MPL
IBM Public License
Apache License
PHP License
Public Domain
Modified CNRI Open Source License
zlib License
CVW License
Ricoh Source Code Public License
Python license
Vovida Software License
Sun Internet Standards Source License
Intel Open Source License
Jabber Open Source License
Nokia Open Source License
Sleepycat License
Nethack General Public License
Common Public License
Apple Public Source License
X.Net License
Sun Public License
Eiffel Forum License
W3C License
Zope Public License
Non-Open Source licenses:
Proprietary
Freeware
Shareware
Charityware
- Blog de will
- Entra a tu cuenta o crea una para poder comentar.
Usuario
# 108307 Segunda lección y se complica la cosa.
Segunda lección y se complica la cosa.
En mis tímidos (timidísimos) intentos por aprender a empaquetar, sólo he sido capaz de llegar hasta las primeras líneas del spec, así que ya tengo más de dónde estudiar.
Muchas gracias.
Usuario
# 108313 Muchisimas gracias
Por fin encuentro algo sobre empaquetar muy claro y en español.
Muchas Gracias Will.
Saludos
El mejor día de tu vida es hoy.
Usuario
# 109412 ¿Dónde encontrar la
¿Dónde encontrar la información del tag>BuildRequires?
- Al hacer un ./configure en el make se van a revisar las dependencias, nos marcará lo que hace falta instalar. También en el README o en el INSTALL pueden estar dichas dependencias mencionadas.
Tilt at windmills, come on!!
http://www.youtube.com/watch?v=MAow3ufdK2Y
Usuario
# 109414 He revisado los ficheros spec
He revisado los ficheros spec que hay en: http://groups.google.com/group/bdk-packagers/files, y veo que todos son ligeramente distintos (varia el orden de algunos tags) y no se cual tiene el formato mas correcto.
- Para empaquetar para mandriva hay que seguir la documentación http://wiki.mandriva.com/en/Development/Howto/RPM#Inside_the_spec_file, y ayuda ler http://www.rpm.org/max-rpm-snapshot/s1-rpm-build-creating-spec-file.html
Tilt at windmills, come on!!
http://www.youtube.com/watch?v=MAow3ufdK2Y