Pasos esenciales para generar el RPM de tu Elastix Addon

Preview:

DESCRIPTION

Luis Abarca Elastix Development Engineer PaloSanto Solutions

Citation preview

PASOS ESENCIALES PARA GENERAR

EL RPM DE TU ELASTIX-ADDON

Dpto. Desarrollo Elastix

Luis Abarca

RPM

Dpto. Desarrollo Elastix

Un rpm es una forma de referirse al formato de archivos manejado

por el Administrador de Paquetes RPM, a los propios archivos con

este formato, a software empaquetado en estos archivos, y al propio

administrador de paquetes en si.

Nos referiremos en esta ocasión como rpms al software

empaquetado bajo este tipo de formato.

Estructura de un entorno

de Generación Básico

Dpto Desarrollo Elastix

Estructura de un Entorno

~/rpmbuild/SOURCES Paquete fuente prístina (Ej:, tarballs y

parches).

~/rpmbuild/BUILD Los archivos fuentes son desempaquetados y

compilados en un subdirectorio dentro de

este.

~/rpmbuild/BUILDROOT Los archivos son instalados bajo este directorio

durante la etapa %install.

~/rpmbuild/RPMS Los RPM binarios son creados y

almacenados bajo este directorio.

~/rpmbuild/SRPMS Los RPM fuente son creados y almacenados

bajo este directorio.

~/rpmbuild/SPECS Archivos de especificaciones RPM (.spec).

Dpto. Desarrollo Elastix

Generalidades al construir

un RPM

Dpto. Desarrollo Elastix

Visión GeneralEl código fuente.

Parches.

Administrar el desempaquetado, la construcción y la

instalación.

Controla el paquete.

Dpto. Desarrollo Elastix

Archivo SpecTodo lo que se hace con el paquete se encuentra

aquí.

Mantiene toda la información junta.

Provee de información.

Controla la construcción del paquete

Dpto. Desarrollo Elastix

Estructura RPM Elastix-

Addon

Dpto. Desarrollo Elastix

Estructura RPM-Elastix-Addon

El source debe tener la siguiente estructura:

Dpto. Desarrollo Elastix

NOMBREMODULO

-->modules

-->setup

-->menu.xml

Estructura RPM-Elastix-Addon

El source debe tener la siguiente estructura:

Dpto. Desarrollo Elastix

-->modules

-->moduloaddon

-->setup

-->delete

-->nombremoduloaddon

-->#number_nombremoduloaddon.sql

-->install

-->nombremoduloaddon

-->#number_schema.sql

-->update

-->nombremoduloaddon

-->version_sql

-->#number_#lastVersion_#newVersion.sql

-->db.info

-->menu.xml

Archivo: db.info

[myDBSqlite]

ignore_backup = no

engine = sqlite3

path = /var/www/db

deletable = no

[myDBMysql]

ignore_backup = no

engine = mysql

path = /var/lib/mysql

deletable = no

Dpto. Desarrollo Elastix

Archivo: menu.xml<?xml version="1.0" encoding="UTF-8"?>

<module>

<menulist>

<menuitem menuid="userListTest"

desc="Users List Test"

parent="" module="no" link=""

order="8"></menuitem>

<menuitem menuid="user_list"

desc="User List"

parent="userListTest" module="yes"

link="" order="1">

<permissions>

<group id="1"

name="administrator" desc="total

access"></group>

</permissions>

</menuitem>

</menulist>

</module>Dpto. Desarrollo Elastix

Ejemplo de Archivo SPEC.. (1/4)%define modname usertest

Summary: Elastix Module Example

Name: elastix-%{modname}

Version: 2.4.0

Release: 1

License: GPL

Group: Applications/System

Source0: %{modname}_%{version}-%{release}.tgz

BuildRoot: %{_tmppath}/%{name}-%{version}-root

BuildArch: noarch

Prereq: elastix-framework >= 2.4.0-10

%description

Elastix Module Example

%prep

%setup -n %{modname}

%install

rm -rf $RPM_BUILD_ROOT

# Files provided by all Elastix modules

mkdir -p $RPM_BUILD_ROOT/var/www/html/

mv modules/$RPM_BUILD_ROOT/var/www/html/

# The following folder should contain all the data

that is required by the installer,

Dpto. Desarrollo Elastix

Ejemplo de Archivo SPEC.. (2/4)# that cannot be handled by RPM.

mkdir -p

$RPM_BUILD_ROOT/usr/share/elastix/module_installer/%{

name}-%{version}-%{release}/

mv

setup/$RPM_BUILD_ROOT/usr/share/elastix/module_instal

ler/%{name}-%{version}-%{release}/

mv menu.xml

$RPM_BUILD_ROOT/usr/share/elastix/module_installer/%{

name}-%{version}-%{release}/

%pre

mkdir -p /usr/share/elastix/module_installer/%{name}-

%{version}-%{release}/

touch /usr/share/elastix/module_installer/%{name}-

%{version}-%{release}/preversion_%{modname}.info

if [ $1 -eq 2 ]; then

rpm -q --queryformat='%{VERSION}-%{RELEASE}'

%{name} >

/usr/share/elastix/module_installer/%{name}-

%{version}-%{release}/preversion_%{modname}.info

fi

%post

pathModule="/usr/share/elastix/module_installer/%{nam

e}-%{version}-%{release}"

# Run installer script to fix up ACLs and add module

to Elastix menus.

elastix-menumerge $pathModule/menu.xml

Dpto. Desarrollo Elastix

Ejemplo de Archivo SPEC.. (3/4)pathSQLiteDB="/var/www/db"

mkdir -p $pathSQLiteDB

preversion=`cat

$pathModule/preversion_%{modname}.info`

if [ $1 -eq 1 ]; then #install

# The installer database

elastix-dbprocess "install"

"$pathModule/setup/db"

elif [ $1 -eq 2 ]; then #update

elastix-dbprocess "update"

"$pathModule/setup/db" "$preversion"

fi

%clean

rm -rf $RPM_BUILD_ROOT

%preun

if [ $1 -eq 0 ] ; then # Validation for desinstall

this rpm

echo "Delete example menus"

elastix-menuremove "%{modname}"

# Here you should call to elastix-dbprocess for

deleting, the same way that it was for install, just

that instead of word “install” goes word

#“delete”. But this is not often used due to

the databases usually are not deleted.

fi

Dpto. Desarrollo Elastix

Ejemplo de Archivo SPEC.. (4/4)

%files

%defattr(-, asterisk, asterisk)

%{_localstatedir}/www/html/*

/usr/share/elastix/module_installer/*

%changelog

* Wed Aug 27 2014 Luis Abarca Villacis

<labarca@palosanto.com> 2.4.0-1

Initial version.

Dpto. Desarrollo Elastix

Pasos Finales

Dpto. Desarrollo Elastix

Pasos FinalesUna vez elaborado el RPM debe enviarlo a nuestro

Departamento de Addons.

Para mas información visite http://addons.elastix.org/

Dpto. Desarrollo Elastix

Demostración

Dpto. Desarrollo Elastix

Gracias….

Dpto. Desarrollo Elastix