Rpm

download Rpm

If you can't read please download the document

Transcript of Rpm

Lo primero esinstalar los paquetes y herramientas necesarias para poder crear rpms(rpm-build y rpmdevtools):# yum install rpm-build rpmdevtools -yVamos a trabajar con un usuario sin privilegios y comenzamoscreando una carpeta en nuestra home que contendr los ficheros que formarn el RPM:$ ls -l test-package-1.0/total 8-rw-rw-r--. 1 alex alex 27 Nov 10 16:04 README.txt-rw-rw-r--. 1 alex alex 92 Nov 10 16:06 test-check-rwxr--r--. 1 alex alex 0 Nov 10 16:38 configureComo podis ver simplemente he creado un fichero de texto README.txt y un script en bash llamado test-check.El fichero configure es necesario aunque no vayamos a compilar nadade cdigo fuente, si no lo inclus os aparecer un error al crear el RPM:/var/tmp/rpm-tmp.zzXus7: line 32: ./configure: No such file or directoryerror: Bad exit status from /var/tmp/rpm-tmp.zzXus7 (%build)$ touch configure $ chmod 0744 configureEsto va a ser todo lo que contendr nuestro RPM. Para poder comenzar a crearlo antes debemoscrear en nuestra home la estructura de directorios necesaria para la gestin de rpms, cdigo fuente, specs, etc. En lugar de crearlo a mano utilizamos el comando rpmdev-setuptree disponible gracias a la instalacin de los paquetes del comienzo de la entrada:$ rpmdev-setuptreeY ya tenemos la estructura creada:$ ls -ltrh rpmbuild/total 20Kdrwxrwxr-x. 2 alex alex 4.0K Nov 10 16:08 RPMSdrwxrwxr-x. 2 alex alex 4.0K Nov 10 16:08 SOURCESdrwxrwxr-x. 2 alex alex 4.0K Nov 10 16:08 SPECSdrwxrwxr-x. 2 alex alex 4.0K Nov 10 16:08 SRPMSdrwxrwxr-x. 2 alex alex 4.0K Nov 10 16:08 BUILDLo siguiente que debemos hacer escomprimir las sources de nuestro paquete(carpeta test-package-1.0/) y copiarla o moverla a la carpetaSOURCESdentro de rpmbuild:$ tar -czvf test-package-1.0.tar.gz test-package-1.0/test-package-1.0/test-package-1.0/README.txttest-package-1.0/test-check$ cp -p test-package-1.0.tar.gz rpmbuild/SOURCES/El ltimofichero que tenemos que crear para poder construir el rpm es el fichero.spec. Este ficherocontiene toda la informacin del paquete rpm: nombre, nmero de versin, arquitectura, descripcin, dependencias, ordenes de ejecucin para la instalacin no es necesario crearlo desde cero. Podemos ejecutar el siguiente comando dentro de la carpeta SOURCES para que nos cree uno de muestra:$ rpmdev-newspec Skeleton specfile (minimal) has been created to "newpackage.spec".Lo copiamos o renombramos con el nombre de nuestro paquete:$ cp -p newpackage.spec test-package.specAhora lo editamos aadiendo los parmetros correspondientes, los ms importantes seran:Elnombredel paquete rpm:Name: test-packageNmero deversin:Version: 1.0Releasede la distribucin (lo dejamos por defecto):Release: 1%{?dist}Summary, simplemente descriptivo. Indica el contenido del rpm, no es necesario:Summary: Paquete de muestra que contiene un fichero de texto y un ejecutableGrouphace referencia al grupo al que pertenece el paquete (definidos en un XML en el sistema), en nuestro caso no pertenece a ningn grupo concreto (Base, System Environment, Database) as que ponemos uno genrico:Group: MiscellaneousTambin podemos especificar trminos de licencia del paquete y URL en la que revisarlos:License: RPM de prueba sin licenciaURL: http://rm-rf.esOjo con el siguiente parmetro pues s que es importante, especifica donde se encuentran las sources (del paquete, en este caso nuestro tar.gz (podra ser una url remota), no se especifica rpmbuild/SOURCES porque es la ruta en la que tienen que estar:Source0: test-package-1.0.tar.gzEn nuestro caso no hay ninguna dependencia para el paquete RPM, pero para paquetes complejos puede ser necesario que algn paquete extra est instalado para el funcionamiento correcto, los especificaramos en este punto:#BuildRequires:#Requires:Podemos especificar unadescripcindel paquete que se ver al buscarlo poryumo el comandorpm:%descriptionEste es un paquete de prueba para el artculo de http://rm-rf.esLos dos comandos siguientes sirven parapreparar el cdigo fuente antes de su instalacin, en este caso bsicamente descomprimirn el .tar.gz en el directorio rpmbuild/SOURCES:%prep%setup -qEl siguiente apartado sirve paracompilarel cdigo fuente (cuando es necesario). Como nuestro RPM es muy sencillo y no necesita compilacin comentamos las lneas:%build#%configure#make %{?_smp_mflags}El siguiente apartado (%install) es en el que se especifican lasacciones a realizar cuando instalemos el RPM. En nuestro caso bsicamente es crear una nueva carpeta en /usr/local y copiar ah los ficheros. Por defecto aparece as:%installrm -rf $RPM_BUILD_ROOTmake install DESTDIR=$RPM_BUILD_ROOTLo que hace es en primera instancia borrar cualquier resto de instalaciones anteriores del mismo paquete y despus ejecuta un make si hemos realizado tareas de compilacin. Vamos a comentar el make ya que nosotros no compilamos nada:%installrm -rf $RPM_BUILD_ROOT#make install DESTDIR=$RPM_BUILD_ROOTinstall -d -m 0755 /var/tmp/test-packageinstall -m 0644 README.txt /var/tmp/test-packageinstall -m 0755 test-check /var/tmp/test-packageEl comando install -d nos permite crear un directorio e install -m mover ficheros. Lo instalamos en /var/tmp simplemente porque es un rpm de prueba, lo normal sera /usr/local, /opt o lo que quisierais. Finalmente se limpian restos de la instalacin:%cleanrm -rf $RPM_BUILD_ROOTAs quedara nuestro test-package.spec:Name: test-packageVersion: 1.0 (importante que la carpeta que se ha comprimido, tenga la sintaxis ${$name+$version})Release: 1%{?dist}Summary: Paquete de muestra que contiene un fichero de texto y un ejecutable

Group: MiscellaneousLicense: RPM de prueba sin licenciaURL: http://rm-rf.esSource0: test-package-1.0.tar.gzBuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

#BuildRequires: #Requires:

%descriptionEste es un paquete de prueba para el artculo de http://rm-rf.es

%prep%setup -q

%build#%configure#make %{?_smp_mflags}

%installrm -rf $RPM_BUILD_ROOT#make install DESTDIR=$RPM_BUILD_ROOTinstall -d -m 0755 /var/tmp/test-packageinstall -m 0644 README.txt /var/tmp/test-packageinstall -m 0755 test-check /var/tmp/test-package

%cleanrm -rf $RPM_BUILD_ROOT

%files%defattr(-,root,root,-)%doc

%changelogEl ltimo paso ya esempaquetar todo y crear el RPM, para ello utilizamos el siguiente comando pasando como argumento el ficherospec. Debemos esperar un exit 0 al final para descartar fallos:$ rpmbuild -ba rpmbuild/SOURCES/test-package.spec Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.9azqfP+ umask 022+ cd /home/alex/rpmbuild/BUILD+ cd /home/alex/rpmbuild/BUILD+ rm -rf test-package-1.0+ /bin/tar -xf -+ /usr/bin/gzip -dc /home/alex/rpmbuild/SOURCES/test-package-1.0.tar.gz+ STATUS=0+ '[' 0 -ne 0 ']'+ cd test-package-1.0+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .+ exit 0Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.VqJuDV+ umask 022+ cd /home/alex/rpmbuild/BUILD+ cd test-package-1.0+ CFLAGS='-O2 -g -march=i386 -mtune=i686'+ export CFLAGS+ CXXFLAGS='-O2 -g -march=i386 -mtune=i686'+ export CXXFLAGS+ FFLAGS='-O2 -g -march=i386 -mtune=i686'+ export FFLAGS+ ./configure --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --program-prefix= --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info+ exit 0Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.U4egr2+ umask 022+ cd /home/alex/rpmbuild/BUILD+ cd test-package-1.0+ rm -rf /home/alex/rpmbuild/BUILDROOT/test-package-1.0-1.el6.i386+ install -d -m 0755 /var/tmp/test-package+ install -m 0644 README.txt /var/tmp/test-package+ install -m 0755 test-check /var/tmp/test-package+ /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildrootfind: `/home/alex/rpmbuild/BUILDROOT/test-package-1.0-1.el6.i386': No such file or directory+ /usr/lib/rpm/brp-compress/usr/lib/rpm/brp-compress: line 8: cd: /home/alex/rpmbuild/BUILDROOT/test-package-1.0-1.el6.i386: No such file or directory+ /usr/lib/rpm/brp-stripfind: `/home/alex/rpmbuild/BUILDROOT/test-package-1.0-1.el6.i386': No such file or directory+ /usr/lib/rpm/brp-strip-static-archivefind: `/home/alex/rpmbuild/BUILDROOT/test-package-1.0-1.el6.i386': No such file or directory+ /usr/lib/rpm/brp-strip-comment-notefind: `/home/alex/rpmbuild/BUILDROOT/test-package-1.0-1.el6.i386': No such file or directoryProcessing files: test-package-1.0-1.el6.i386Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/alex/rpmbuild/BUILDROOT/test-package-1.0-1.el6.i386warning: Could not canonicalize hostname: CentOSWrote: /home/alex/rpmbuild/SRPMS/test-package-1.0-1.el6.src.rpmWrote: /home/alex/rpmbuild/RPMS/i386/test-package-1.0-1.el6.i386.rpmExecuting(%clean): /bin/sh -e /var/tmp/rpm-tmp.byNcVu+ umask 022+ cd /home/alex/rpmbuild/BUILD+ cd test-package-1.0+ rm -rf /home/alex/rpmbuild/BUILDROOT/test-package-1.0-1.el6.i386+ exit 0

Vemos que todo ha ido bien as queya deberamos tener nuestro nuevo RPM en la carpeta RPMS:$ ls -l rpmbuild/RPMS/i386/test-package-1.0-1.el6.i386.rpm -rw-rw-r--. 1 alex alex 1365 Nov 10 16:43 rpmbuild/RPMS/i386/test-package-1.0-1.el6.i386.rpmY el RPM de las sources:$ ls -l rpmbuild/SRPMS/test-package-1.0-1.el6.src.rpm -rw-rw-r--. 1 alex alex 2458 Nov 10 16:43 rpmbuild/SRPMS/test-package-1.0-1.el6.src.rpmLo podemos instalar como cualquier otro rpm:# rpm -ivh rpmbuild/RPMS/i386/test-package-1.0-1.el6.i386.rpmPreparing... ########################################### [100%]1:test-package ########################################### [100%]Vemos que se ha instalado correctamente:# ls -l /var/tmp/test-package/total 8-rw-r--r--. 1 alex alex 27 Nov 10 16:43 README.txt-rwxr-xr-x. 1 alex alex 92 Nov 10 16:43 test-checkY podemos ver tambin toda la informacin del paquete rpm que indicamos en el fichero spec:# rpm -qi test-packageName : test-package Relocations: (not relocatable)Version : 1.0 Vendor: (none)Release : 1.el6 Build Date: Install Date: Sat 10 Nov 2012 04:45:12 PM CET Build Host: CentOSGroup : Miscellaneous Source RPM: test-package-1.0-1.el6.src.rpmSize : 0 License: RPM de prueba sin licenciaSignature : (none)URL : http://rm-rf.esSummary : Paquete de muestra que contiene un fichero de texto y un ejecutableDescription :Este es un paquete de prueba para el artculo de http://rm-rf.esEste es el modo de crear un paquete rpm muy bsico, a partir de aqu es cuestin de buscar ms informacin para poder tener vuestras aplicaciones empaquetadas ;)

-Creando nuestro primer RPM (RHT6)-