sábado, 9 de noviembre de 2013

Construcción de un paquete rpm

Los paquetes de distribución de software que usan las distribuciones linux Red Hat y CentOS son en formato rpm. En debian y derivados, como ubuntu, los paquetes son en formato deb. Entre los objetivos a conocer para el RHCSA es necesario saber construir un paquete rpm.

Los paquetes rpm deben ser construidos en una estructura de directorios predeterminada:

BUILD

BUILDROOT

RPMS

SOURCES

SPECS

SRPMS

Esta estructura y para hacernos el trabajo más simple se puede generar con el comando rpmdev-setuptree, las estructura se genera en la carpeta incial del usuario bajo la carpeta rpmbuild.

Para construir un paquete rpm necesitamos un fichero, .spec, que le indique a la aplicación rpmbuild que construir y como. Al instalar el paquete rpmdevtools, en la carpeta /etc/rpmdevtools/ se nos dejan varios ficheros plantilla y en nuestro caso usaremos el fichero spectemplate-minimal.spec. También se puede hacer uso del comando rpmdev-newspec, el cual genera el mismo fichero con el nombre newpackage.spec. El fichero .spec debe estar colocado en la carpeta SPECS.

Para generar el paquete rpm necesitamos basarnos en un fichero .tar con el contenido de nuestro paquete. El fichero se debe colocar en la carpeta SOURCES. Para este ejemplo he generado una carpeta que contiene lo siguiente:

./vsconf-personal:

total 8

-rwxr-xr-x. 1 root root    0 nov  9 18:31 configure

drwxr-xr-x. 3 root root 4096 nov  3 20:15 etc

drwxr-xr-x. 3 root root 4096 nov  9 09:23 opt

./vsconf-personal/etc:

total 4

drwxr-xr-x. 2 root root 4096 nov  9 09:22 vsftpd

./vsconf-personal/etc/vsftpd:

total 8

-rw-------. 1 root root 4617 nov  3 20:06 mi_vsftpd.conf

./vsconf-personal/opt:

total 4

-rw-r--r--. 1 root root    0 nov  9 09:23 fileone

-rw-r--r--. 1 root root    0 nov  9 09:23 filetwo

drwxr-xr-x. 2 root root 4096 nov  9 09:23 uno

./vsconf-personal/opt/uno:

total 0

-rw-r--r--. 1 root root 0 nov  9 09:23 Oneeee

 

-rw-r--r--. 1 root root 0 nov  9 09:23 Twoooo

Atención al fichero configure (Se usa para configurar un fuente antes de compilarlo, en nuestro caso no lo usaremos), vacío y con permisos de ejecución. La idea es que el fichero mi_vsftpd.conf se coloque en la carpeta /etc/vsftpd. En la carpeta /opt se generan dos ficheros (fileone y filetwo). Además se crea la carpeta uno con los fichero Oneeee y Twoooo en su interior. De esta estructura generamos un fichero vsconf-personal.tar

Tras renombrar el fichero newpackage.spec como vsconf-personal.spec que inicialmente tiene la siguiente información:

Name:           

Version:        

Release:        1%{?dist}

Summary:        

 

Group:          

License:        

URL:            

Source0:        

 

BuildRequires:  

Requires:       

 

%description

 

 

%prep

%setup -q

 

 

%build

%configure

make %{?_smp_mflags}

 

 

%install

rm -rf $RPM_BUILD_ROOT

make install DESTDIR=$RPM_BUILD_ROOT

 

%clean

rm -rf $RPM_BUILD_ROOT

 

%files

%defattr(-,root,root,-)

%doc

 

 

%changelog

Editamos el fichero y lo dejamos de la siguiente manera:

Name:          vsconf-personal

Version:       1.0 

Release:        1%{?dist}

Summary:       This is a summary test 

License:       GPL

Source0:        vsconf-personal.tar

 

%description

Desc1

Desc2

Desc3

Desc4

 

%prep

#%setup -q

%setup -n vsconf-personal

 

 

#%build

#%configure

#make %{?_smp_mflags}

 

 

%install

rm -rf $RPM_BUILD_ROOT

#make install DESTDIR=$RPM_BUILD_ROOT

mkdir $RPM_BUILD_ROOT

cp -r * $RPM_BUILD_ROOT/

rm -f $RPM_BUILD_ROOT/configure

 

%clean

rm -rf $RPM_BUILD_ROOT

 

 

%files

%defattr(-,root,root,-)

%doc

#%dir /opt/uno

/etc/vsftpd/mi_vsftpd.conf

/opt/fileone

/opt/filetwo

/opt/uno/Oneeee

/opt/uno/Twoooo

 

 

%changelog

%setup -n vsconf-personal --> Con este cambio indicamos durante la construcción donde está el fichero .tar a usar.

Con las lineas mkdir $RPM_BUILD_ROOTcp -r * $RPM_BUILD_ROOT/ generamos una carpeta  y copiamos nuestros ficheros que luego se empaquetan en nuestro rpm. La linea rm -f $RPM_BUILD_ROOT/configure elimina el fichero configure del paquete.

%files --> Ponemos los ficheros que queremos que se copian al instalar el paquete rpm.

El paquete rpm se genera ejecutando el comando rpmbuild -bb vsconf-personal.spec. El resultado se deja en la carpeta rpmbuild/RPMS/x86_64/vsconf-personal-1.0-1.el6.x86_64.rpm . El parámetro -bb hace que se genere el instalador binario.