Upload
elastix
View
653
Download
1
Embed Size (px)
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
<[email protected]> 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