Us faré un resum molt a piñon al tema, pero si el resum quedes curt o no acabés de funcionar per a les vostres necessitats en aquesta pagina trobareu l'explicació guai de cada part necessaria per a crear rpm's.
=== rpm's in 40 minutes ===
== introducción ==
Lo que explicaré es lo siguiente :
* Software necesario
* Generar una clave GnuPG para firmar digitalmente los paquetes creados. ( aunque no es indispensable)
* Configuración y creación de un chroot para rpmbuild. !!para no liarla con el resto del sistema!! ;)
* Creación de ficheros *.spec.
* Uso de rpmbuild.
== Software necesario ==
-Lo basico, probablemente ya este en el sistema
yum -y install gcc* automake* autoconf* rpm-build rpm-devel gnupg
* **Grafico y toda la pesca (meted los dos, asi se generaliza el software)**
*Gnome
yum -y install gcc* automake* autoconf* rpm-build rpm-devel gnupg
*KDE
yum -y install glib2-devel atk-devel pango-devel gtk2-devel libbonoboui-devel libgnomeui-devel gnome-vfs2-devel libwnck-devel gnome-panel-devel gnome-desktop-devel nautilus-devel gstreamer-devel gstreamer-plugins-devel
* **Para firmar y eso**
yum -y install seahorse gpgme
== Generar una clave GnuPG para firmar digitalmente los paquetes creados ==
Con del seahorse, crear una clave, supongo que no hace falta que me extienda más.
Nota: Ni se te ocurra ponerle fecha de caducidad, seria una tonteria. Aunque, no se, a lo mejor para algo podria ser útil.
== Configuración y creación de un chroot para rpmbuild ==
**Para que? **
Para no joderlo todo más que nada, se pueden hacer muchas guarradas con los rpm's, y seguro que no triunfas a la primera, esto va a ser tu armadura.
** Dato importante **
Esto se crea con un luser normal, no me jodas que querias hacerlo con root??? para que?, para conseguir una armadura de carton?? , hazme caso, y hazlo con un usuario standard, el que uses normalmente si quieres.
** Al lio**
*Paths
crea ~/.rpmmacros
(el mio es este)
%debug_package %{nil}
%_unpackaged_files_terminate_build 1
%_signature gpg
%_gpg_path %(echo "$HOME")/.gnupg
%_gpg_name Joan Marc Riera Duocastella ( Barcelona Media)
%_gpgbin /usr/bin/gpg
%_topdir /home/glicom/redhat
%_builddir %{_topdir}/BUILD
%_tmppath %{_topdir}/TMP
%packager Joan Marc Riera Duocastella
%distribution ElCorrector
%vendor Glicom
%desktop_vendor Glicom
Explicacion linea a linea
%{nil} es para que no haga paqueteria de depuracion, demasiado friki, tampoco me lo miraria
%_unpack.... se para la creacion si falta algo? 0=> no , 1=> si , (para que quieres un rpm si le falta algo?)
%_signatura el tipo
%_gpg path de donde la pillo
%_gpg name Nombre a mostrar
%_gpg bin ejecutable del gpg
%_topdir donde empieza mi chroot
%_builddir donde hago las guarrerias a la hora de crear (dentro de chroot claro)
%_tmppath lo que se puede borrar , y cambiara en cada intento (que no van a ser pocos) //esto se tiene que limpiar desde el .spec, porque sino se hace muy gordo el directorio, y es inutil.
%_packager el empaquetador que bien lo empaquete buen empaquetador sera
%_distribution distribuidor
%_vendor el que paga
%_desktop el que oficialmente paga
*Creacion del arbol de directorios
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SRPMS,SPECS,TMP}
mkdir -p ~/rpmbuild/RPMS/{athlon,i386,i586,i686,noarch}
== Creación de ficheros *.spec ==
* Opció A (rush mode, no aconsellable la primera vegada)
Instalar software deprecated , ja no el manté ningú. :p
yum -y install autospec
Si no esta al repositori => http://rpm.pbone.net/index.php3/stat/4/idpl/2194348/com/autospec-0.8-2.fc2.mok.noarch.rpm.html, autospec
Instalar el software que volem empaquetar, (normalment nostre, o d'algú altre amb patch)
$ tar xzf indent.2.2.6.tar.gz
$ cd indent-2.2.6
$ ./configure
$ make
$ make install
(a lo mejor iria bien algun ejemplo de ./config y makefile??)
En este caso me creo el .spec de Ripple. Esta en fase muy pre-alpha, por eso tantos numeros. (la parte del medio es estandarizada, que tipo de software estas empaquetando??)
tar -tzf SOURCES/Ripple-0.0.1_1.tar.gz | autospec -bd -g "System Environment/Base" -n Ripple-0.0.1 -l ''>SPECS/Ripple-0.0.1.spec
Vale, ya tenemos un .spec echo, pero si vamos a crear el .rpm nos dará problemas, vamos a echarle el vistazo por por dentro.
**No me deja ponerlo en negrita, pero pondre los comentarios a la derecha entre dos ASteriscos. **
[glicom@ocata4888 redhat]$ cat SPECS/Ripple-0.0.1.spec
# Initial spec file created by autospec ver. 0.8 with rpm 3 compatibility
Summary: Ripple
# The Summary: line should be expanded to about here -----^
Name: Ripple
Version: 0.0.1
Release: 1
Group: System Environment/Base
#License: unknown ** Primer error, esto tiene que ser GPL, sino allá tu consciencia. XD Es coña, pero ponle algo.**
Source: Ripple-%{version}-bin.tar.gz
#NoSource: 0
BuildRoot: %{_tmppath}/%{name}-root
# Following are optional fields
#URL: http://www.example.net/Ripple/
#Distribution: Red Hat Contrib-Net
#Patch: Ripple-%{version}.patch
#Prefix: /Ripple-0.0.1
#BuildArch: noarch ** Normalmente puedes dejarlo asi, pero aconsejo compilar para arquitecturas concretas, siempre queda todo más limpio**
#Requires: ** Si necesitas perl, apache, o lo que sea , ponlo aqui, luego pongo otro ejemplo donde hay requisitos.**
#Obsoletes:
#BuildRequires:
%description
Ripple version 0.0.1
%prep ** Preparación del entorno para crear el rpm**
%setup -c 'Ripple-%{version}' ** Limpiado de la carpeta donde lo vamos a construir**
#%patch ** No hay pach => no hay apartado , sino seria mover tal file, o lo que sea donde sea. Normalmente dentro de Ripple-%{version}**
%install
%__cp -a . "${RPM_BUILD_ROOT-/}" ** Donde se instalará, es probable, que os salga un directorio nuevo en el root. xD Pero eso es practicar. **
%clean
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT"
%files ** Esto es muy pesado, vale este proyecto es peque, pero esto crece, el autospec lo hace guai, pero a veces es posible que te interese meter un .tar dentro de tu .tar.gz del source, y aqui solo poner el tar. xD Y santas pascuas, eso si, descomprimir y todo eso lo vas a tener que hacer en el %prep y a manija.
%defattr(-,root,root)
%dir /Ripple-0.0.1/
/Ripple-0.0.1/rssearch.tar.gz
/Ripple-0.0.1/rsindex.tar.gz
/Ripple-0.0.1/pcode.tar.gz
/Ripple-0.0.1/nodo.tar.gz
%changelog
* Tue Dec 04 2007 glicom
- Initial spec file created by autospec ver. 0.8 with rpm 3 compatibility
* Opció B
**Pico pala**
Aquest serà el segon exemple: ( encara esta sense comentar)
[glicom@ocata4888 redhat]$ cat SPECS/elcorrector.spec
Name: ElCorrector # name
Version: 0.9.7 #main versión
Release: 7 # release, can change kind of easy, each time you compile for example, through a script is 'piece of cake'
URL: http://glicom.upf.es #as reference
Summary: El Corrector # you can extend yourself a bit more if you want
License: GPL # always open source, for God seek.
Group: Applications/Text #check yourself where on your menu bar (KDE) do you want your app to appear
Source: ElCorrector-%{version}.tar.gz #foo.tar.gz , your files.
Vendor: Computational Linguistics Group / Glicom #$$ the money owner. ;)
Packager: Joan Marc Riera Duocastella #put your mail here, if you do a good job may be a big company comes for you.
Buildroot: %{_tmppath}/%{name} #where is going to be your mad.
BuildArch: i386 #noarch is accepted, and also if you check your directory tree you'll see the other opcions, easy.
BuildRequires:, #i really don't know what is this
BuildPreReq:, # neither this option. :'(
Requires: mono-core >= 1.1.13.4-2 #this means that if in the client computer there is an older version of mono, or it does not have it, will install it (asking the user) , as you know de S/n question in the apt-get -i
Requires: perl-Wx >= 0.69-1 #the same with perl-Wx
Requires: wxGTK >= 2.6.3
Requires: wxGTK-devel >= 2.6.3
PreReq:,
%description
El Corrector.
Un corrector tipogrà fic, ortogrà fic i gramatical per al català .
%prep
%__rm -rf %{_builddir}/*
%__rm -rf %{_tmppath}/*
%setup -q
mv %{_builddir}/%{name}-%{version} %{_builddir}/%{name}
cp -r %{_builddir}/%{name} %{_tmppath}
tar -cf %{_tmppath}/%{name}.tar %{_tmppath}/%{name}
rm -rf %{_tmppath}/%{name}/*
cp %{_tmppath}/%{name}.tar %{_tmppath}/%{name}
mkdir %{_builddir}/%{name}-%{version}
%install
#echo "Instal·lant ElCorrector-%{version}_%{release}"
%clean
#%__rm -fr %{buildroot}
%preun
%post
# Descomprimim l'arxiu tar dins de /usr/share, i obtindrem /usr/share/ElCorrector
tar -xf /ElCorrector.tar -C /usr/share
# Aixo s'hauria de retocar, ha de ser cosa de %files
mv /usr/share/home/glicom/redhat/TMP/ElCorrector/ /usr/share/
rm -r /usr/share/home
#Desktop # #this is the way to put shortcuts on your desktop, pick anyone you have in your own and open it with vim, it's the best way to learn.
desktop-file-install /usr/share/ElCorrector/elcorrector.desktop --vendor Glicom
desktop-file-install /usr/share/ElCorrector/elcorrectoratura.desktop --vendor Glicom
desktop-file-install /usr/share/ElCorrector/elcorrectorinicia.desktop --vendor Glicom
# update-desktop-database #crec que no es necesari
rm -f /ElCorrector.tar
#Path editor propi
ln -s /usr/share/ElCorrector/ElCorrector.sh /usr/local/bin/ElCorrector
# iniciació
ln -s /usr/share/ElCorrector/serverCorrector /etc/rc5.d/S60elcorrector
chown root.users /etc/rc5.d/S60elcorrector
/etc/rc5.d/S60elcorrector start #inicia el corrector
#
export directory=/home/
export directori=""
for file in $( find $directory -maxdepth 1 -type d -name '*' | sort )
do
directori=$file"/Desktop"
if [ -e $directori ]; then
cp /usr/share/ElCorrector/elcorrector.desktop $directori
chown root.users $directori/elcorrector.desktop
chmod 777 $directori/elcorrector.desktop
fi
done
#Permisos
chown -R root.users /usr/share/ElCorrector/*
chmod -R 755 /usr/share/ElCorrector/*
chmod -R 777 /usr/share/ElCorrector/Data/ #Si no donen problemes les llibreries *.dll
#Profile
#echo "" >> /etc/profile
#echo "export PERL5LIB=/usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi" >> /etc/profile
#echo "export EL_CORRECTOR=\"/usr/share/ElCorrector\"" >> /etc/profile
#Add 'serverCorrector' to sudoers # # #this is done becouse my program needs root rights to start de server, not a very polite job, I know.
if test ! "`grep '#serverCorrector' /etc/sudoers`"; then
echo "#serverCorrector" >> /etc/sudoers
echo "ALL ALL=NOPASSWD:/usr/share/ElCorrector/serverCorrector" >>/etc/sudoers
fi
#Per dir aixó s'haurien de controlar posibles errors d'alguna manera. (sudoers, profile, chmod, chown, desktop...)
echo ""
echo "S'ha instal·lat El Corrector amb èxit"
echo ""
%postun
# matar tots els procesos actius d ElCorrector
sudo /usr/share/ElCorrector/serverCorrector stop
# Borrar archius propis
if [ $1 -eq 0 ]; then
rm -r -f /usr/share/ElCorrector
rm /etc/rc.d/rc5.d/S60elcorrector
#rm /usr/local/bin/ElCorrector.sh
rm /usr/local/bin/ElCorrector
update-desktop-database
#Eliminem les entrades que vam posar a l'arxiu /etc/profile
# grep -v "export PERL5LIB\|export EL_CORRECTOR" /etc/profile > /etc/profile2
# cp /etc/profile /etc/profile_elcorrector #copia de seguretat del profile original
# cp /etc/profile2 /etc/profile #copeim el nou profile
# rm /etc/profile2 # eliminem el que hem creat temporalment
#Desktop
# Aixo per borrar 3 links es una passada !!! 0_o!
export directory=/home/
export directori=""
for file in $( find $directory -maxdepth 1 -type d -name '*' | sort )
do
directori=$file"/Desktop/elcorrector.desktop"
if [ -e $directori ]; then
rm $directori
fi
done
#Borrar icones del menu
rm /usr/share/applications/Glicom-elcorrector*
#Clean sudoers
#chmod 777 /etc/sudoers
grep -v 'serverCorrector' /etc/sudoers > /etc/sudoers.temp
cat /etc/sudoers.temp > /etc/sudoers
rm -f /etc/sudoers.temp
#chmod 440 /etc/sudoers
#Falten els chekings
echo ""
echo "El Corrector s'ha desinstal·lat correctament del vostre ordinador!"
echo ""
fi
%files # # # Can be more polite, but in this way is ok
/ElCorrector.tar
%changelog
* Wed Jun 27 2007 Joan Marc Riera
- Afegeixo el gestor serverCorrector {start|stop|status|help}
- Gestió de les icones del menu
- Reinici no necesari
== Uso de rpmbuild ==
Construir solo un paquete RPM, sin generar *.src.rpm, a partir de un fichero *.spec: (basicamente este, el resto son para crear .src.rpm y otras chorradas)
rpmbuild -bb elnombrequelehayaspuesto_aliasFOO.spec
En cas de que un paquet no sigui orginal de la distribució s'hi ha d'afegir, es pot mirar a quin packet pertany en aquesta pàgina.
----------------
Destrozando mis orejas a base de : Marco V - Combi Nations (CD1)