viernes, 23 de noviembre de 2012

Ficheros de datos en paquete Python

Estructura para un proyecto de python, con algunos archivos de datos necesarios para la aplicación:
Para que todos los ficheros de datos se añadan al paquete de python és necesario indicar en el setup.py que deseamos añadir estos. Teniendo en cuenta una distribución de los directorios como la anterior, el programa setup.py quedaría de la siguiente manera:

#!/usr/bin/python

from setuptools import setup, find_packages
setup(
 name='mypkg',
 version='0.0.2',
 author='Miquel Perello Nieto',
 author_email='perello.nieto@gmail.com',
 url='perellonieto.com',
 packages = find_packages('src'),  # include all packages under src
 package_dir = {'':'src'},   # tell distutils packages are under src

 package_data = {
  # If any package contains *.txt files, include them:
  '': ['*.txt'],
  # And include any *.dat files found in the 'data' subdirectory
  # of the 'mypkg' package, also:
  'mypkg': ['data/*.dat'],
  }
    )



Resolviendo dependencias circulares en c++ con forward declaration

El problema de las dependencias circulares aparece en el momento en que dos clases distintas tienen una instancia o hacen referencia a la otra en su declaración.

Como ejemplo estas dos clases, las cuales tienen un puntero a una instancia de la otra:

class_a.h

#ifndef CLASS_A_H_
#define CLASS_A_H_

#include "class_b.h"

class ClassB; // Commenting this line compilation will fail

class ClassA
{
public:
 ClassA();

private:
 ClassB * b;
};

class_b.h

#ifndef CLASS_B_H_
#define CLASS_B_H_

#include "class_a.h"

class ClassA; // Commenting this line compilation will fail

class ClassB
{
public:
 ClassB();

private:
 ClassA * a;
};

En este caso hasta que una de las clases no haya sido totalmente interpretada por el compilador, éste no podrá interpretar la otra. Lo que hace que el compilador se queje de no conocer el objeto.

Para solucionar este problema se debe indicar al compilador en ClassB que ClassA es una clase, y lo mismo para la ClassA. A esta declaración "anticipada" se la llama "Forward declaration" (ver Wikipedia: Forward declaration).

En el código de arriba este problema está solucionado, pero si quereis reproducir el error comentar la linia que esta indicada.

Aqui teneis el resto de ficheros necesarios para hacer una prueba:

main.cpp

#include "class_a.h"
#include "class_b.h"

int main()
{
 ClassA a;
 ClassB b;

 return 0;
}

class_a.cpp

#include "class_a.h"
#include "cstdio"

ClassA::ClassA() {
 printf("Creating ClassA object\n");
}

class_b.cpp

#include "class_b.h"
#include "cstdio"

ClassB::ClassB() {
 printf("Creating ClassB object\n");
}

Para compilarlo todo:

Makefile

all: main

main: main.o class_a.o class_b.o
 g++ -o main main.o class_a.o class_b.o

main.o: main.cpp
 g++ -c main.cpp

class_a.o: class_a.cpp
 g++ -c class_a.cpp
 
class_b.o: class_b.cpp
 g++ -c class_b.cpp

clean: 
 rm -f *.o main

Ver explicación más detallada en la fuente : Stackoverflow

miércoles, 26 de septiembre de 2012

Dependencias proyecto Python


Para ver las dependencias de nuestro proyecto python, nos podemos ayudar de la erramineta snakefood, el qual nos puede crear de forma textual o en formato visual todas las dependencias de nuestro proyecto.

sudo apt-get install snakefood
 Una vez instalado se puede generar una grafica en formato ps con el siguiente comando:

sfood myproject | sfood-graph | dot -Tps > graph.ps
donde myproject es el directorio de tu proyecto.

Ejemplo de un trozo de grafica:


 fuente: http://furius.ca/snakefood/

Iconos del panel de gnome en movimiento

Ya me ha ocurrido varias veces que el panel superior de gnome; aun teniendo todos los iconos bloqueados; de vez en cuando me los desordenaba. Puede ser que fuera al cambiar la resolución de la pantalla, o al tener un monitor suplementario conectado al portatil.

Por lo que he visto buscando información, este problema fué solucionado en la ultima versión del panel, cuando este fue portado a GTK3, pero no se ha solucionado para las versiones antiguas. Así que he encontrado un script que hizo "bojo42", el qual bloquea el panel entero y lo desbloquea cuando queramos.

Lo suyo es guardar este script en algun lugar (por ejemplo en nuestro home "/home/USER/.gnome2_panel_block_down).
Darle permiso de ejecución.
Añadir en el panel de gnome un lanzador personalizado.
Poner como comando este mismo script.
Una vez hecho esto solo es cuestion de bloquear y desbloquear el panel con un simple click.



#!/bin/sh

### Config
NOTIFY=on #(on/off)
LOCK_TITLE="Panel Lock Down"
LOCK_MSG="Locking the GNOME panel"
UNLOCK_TITLE="Panel Lock Down"
UNLOCK_MSG="Unlocking the GNOME panel"
LOCK_ICON="/usr/share/icons/hicolor/48x48/apps/gdu-encrypted-lock.png"
UNLOCK_ICON="/usr/share/icons/hicolor/48x48/apps/gdu-encrypted-unlock.png"

### Dependency checking
if [ -z "$(which gconftool-2)" ]; then
 if [ -n "$(which gconftool-2)" ]; then
  zenity --warning --text "Error. No binary found for gconftool-2!" --title "Panel Lock Down"
 else
  echo "Panel Lock Down: Error. No binary found for gconftool-2!"
 fi
 exit 1
fi
if [ "$NOTIFY" = "on" ] && [ -z "$(which notify-send)" ]; then
 SCRIPT_LOCATION="$(pwd)/$(basename $0)"
 if [ -n "$(which zenity)" ]; then
  zenity --warning --text "Notifcations failed! Please install the libnotify-bin package or disable notifications in $SCRIPT_LOCATION" --title "Panel Lock Down"
 else
  echo "Panel Lock Down: Notifcations failed! Please install the libnotify-bin package or disable notifications in $SCRIPT_LOCATION"
 fi
 NOTIFY="off"
fi

### Main
if [ "$(gconftool-2 -g /apps/panel/global/locked_down)" = "true" ]; then
 [ "$NOTIFY" = "on" ] && notify-send -i $UNLOCK_ICON "$UNLOCK_TITLE" "$UNLOCK_MSG"
 gconftool-2 -s /apps/panel/global/locked_down --type=bool false
elif [ "$(gconftool-2 -g /apps/panel/global/locked_down)" = "false" ]; then
 [ "$NOTIFY" = "on" ] && notify-send -i $LOCK_ICON "$LOCK_TITLE" "$LOCK_MSG"
 gconftool-2 -s /apps/panel/global/locked_down --type=bool true
else
 if [ -n "$(which zenity)" ]; then
  zenity --warning --text "Error. Undefined state of global panel lock down!" --title "Panel Lock Down"
 else
  echo 'Panel Lock Down: Error. Undefined state of global panel lock down!'
 fi
 exit 1
fi



lunes, 27 de agosto de 2012

Pomorizer


Cuando uno trabaja delante de un ordenador, se hace difícil controlar el tiempo que lleva uno trabajando, y el tiempo que realmente no ha sido productivo por haber mirado e-mails o leyendo alguna noticia interesante. Y más aun si trabajas en casa, y te puedes distribuir el tiempo como te vaya mejor.
Por esa razón, hace ya tiempo que me había planteado usar algun tipo de programa que me permitiera con un par de botones controlar este tiempo, y de este modo me puse a buscar algo de información. Buscando encontré una técnica de administrar el tiempo de trabajo (o estudio) llamado Técnica Pomodoro ( "The Pomodoros Technique" ), la cual recomienda plantear-se trabajar 25 minutos seguidos sin ninguna distracción, y todo seguido tomarse 5 minutos de descanso. Esto, a demás de servir para descansar y mirar algo que te guste, sirve para despejar la mente, ya que en ocasiones se cree que se esta haciendo algo bien pero realmente se debería hacer de otro modo. Este tipo de descansos pueden ayudarte a no cometer algunos de estos errores.
Así que me he puesto a buscar algún programa sencillo con el objetivo que he comentado, y me he encontrado con algunas aplicaciones, que no me han convencido. Incluso para Android, las cuales me han parecido interesantes, pero la verdad es que teniendo el ordenador, prefiero verlo en la pantalla con un simple click.
Pues bueno, al final he decidido programarme mi propio Pomorizer, con QT y Python (ya que los estoy usando para el trabajo, y ahora mismo lo tengo fresco).
La aplicación es sencillamente un campo para introducir la cuenta atras (por ejemplo 25 minutos), un botón para empezar la cuenta atrás, o pausar-la. Un botón para resetearlo todo. Un display con el tiempo restante, una barra que va aumentando al acercarse al cero. Y al final unas pequeñas casillas para marcar cuantas veces llevamos realizando la cuenta atrás de 25 minutos (se que se puede hacer de otro modo, pero el hecho de hacer "tic" con el ratón a una casilla más me reconforta).
Bueno, dejo unas imágenes del programa, y el código ya veré si lo pongo si tengo un momento, o si por casualidad lo pidiera alguien (xDDD, algo que no creo que ocurra, ya que este Blog lo uso para apuntar mis problemas y soluciones).

jueves, 23 de agosto de 2012

Recuperando servidor con S.O. Slax


Slax es un sistema operativo linux que nos permite reparar errores en disco.
Para instalar en un pendrive :
http://www.slax.org/get_slax.php
seleccionar el .tar
Se descomprimer directamente en un USB formateado en FAT.
Se deja en la raiz del USB las carpetas /boot i /slax
Se accede mediante terminal a /boot i con permisos de root se ejecuta bootinst.sh
sudo ./bootinst.sh
Deberia aparecer un menu de instalacion advirtiendo que el USB va a quedar solo con el sistema operativo Slax.
Una vez instalado desmontar el USB y esta listo ser arrancado

Montar particion ext4 en S.O. Slax


Al parecer el S.O. Slax no permite montar particiones con formato ext4
Y he encontrado alguien que me ha dado la solución, así que la pego aqui
Primero utilizamos la herramienta tune2fs de la siguiente manera:
tune2fs -E test_fs /dev/sdaX
Luego montamos la partición y listo
mount -t ext4dev /dev/sdaX /home/
O podemos montarla simplemente con:
mount /dev/sdaX /home/
fuente: http://chamangt.wordpress.com/2010/02/14/montar-particiones-ext4-en-slax/

martes, 5 de junio de 2012

/lib64/libc.so.6: not found - Ubuntu 11.10


Cuando ejecutas matlab desde consola sale un mensaje como este

/usr/local/MATLAB/R2011a/bin/util/oscheck.sh: 605: /lib64/libc.so.6: not found

La solucion es la siguiente.

1. Verificar la instalacion de la libreria correspondiente
$ locate libc.so

/lib/i386-linux-gnu/libc.so.6
/lib/x86_64-linux-gnu/libc.so.6
/usr/lib/x86_64-linux-gnu/libc.so

2. Linkear la libreria real a la que necesita matlab

sudo ln -s /lib/x86_64-linux-gnu/libc.so.6 /lib64/libc.so.6

3. Correr matlab y voila!

Fuente: http://solucionesubuntu.blogspot.com/2011/10/lib64libcso6-not-found-ubun...

Matlab 2011 en Linux


Aqui un buen señor nos enseña como se instala Matlab en Linux.

http://ba-k.com/showthread.php?t=1979920

Un resumen (copy paste, sin dar formato)

Explicare la manera de instalación de la forma en que yo la realice en Ubuntu 11.04 (de igual manera lo instale en Arch y Fedora sin ningún problema ) aunque pueden encontrar mas formas dentro de la red.

Una vez descargado el ISO crearemos las carpetas necesarias para su instalación

~$ sudo mkdir /usr/local/MATLAB
~$ sudo mkdir /usr/local/MATLAB/R2011a
Ahora una carpeta donde montara el ISO (esto es opcional ya que lo pueden montar en cualquier otro directorio)

~$ mkdir Matlabv
Se procede con montar el Iso (solo habrá que cambiar la ruta del Iso asi como el lugar donde se montara, pero si extrajiste el iso en tu carpeta personal y creaste la carpeta anterior solo cambia 'usuario' por tu usuario)

~$ sudo mount -t iso9660 -o loop ml2011au.iso /home/'usuario'/Matlabv
Nos dirigimos al directorio

~$ cd /home/'usuario'/Matlabv
Y damos autorizaciones de root

~$ Sudo su
Y comenzamos con la instalación

~$ ./install

Seleccionamos custom esto para poder generar los enlaces simbólicos

Dejamos la ruta de instalación como esta y proseguimos

Activamos la opción de 'Create symbolick links to MATLAB scripts in:' y dejamos la ruta tal cual

Después de la instalación creamos el lanzador

Obtener imagen

~$ sudo wget http://upload.wikimedia.org/wikipedi...atlab_Logo.png -O /usr/share/icons/matlab.png
Y crear el lanzador

~$ sudo wget 'https://help.ubuntu.com/community/MATLAB?action=AttachFile&do=get&target=matlab-r2011a.desktop' -O /usr/share/applications/matlab.desktop

*Recuerden que tienen que tener instalado el soporte de java para su ejecución

TorrentFlux


Programa para descargar torrents desde un servidor Debian con servidor Web en php.

instalación:
sudo apt-get install torrentflux

seguir los pasos en la terminal (se necesita introducir password de root para mysql, de modo que cree un usuario nuevo).

Luego entrar en el http://"servidor"/torrentflux

introducir usuario torrentflux y el password que hayamos seleccionado.

Podemos ver una guia de uso muy bien explicada en:

http://dentoo.info/shop/quickstart-guide

Bajar y Subir lumionosidad Asus ULxxV


Brightness trick

$ setpci -s 00:02.0 f4.b=ff

from command line, ff can be anywhere from 00 to ff.

Apagando la targeta gráfica Nvidia G210M portatiles Asus ULxxV


Solution to switch off nvidia card in Linux Asus UL30Vt, UL50V, UL80V

If you are using Linux on an Asus UL30Vt, or Asus UL50Vt or Asus UL80Vt, keep reading...

One of the Linux users has found a solution to switch off the nvidia card in the UL30Vt models,
which by the looks of the DSDT tables, will also work for the UL50Vt and UL80Vt models with nvidia card.

For Ubuntu Karmic, download and install this package:

http://launchpadlibrarian.net/38458054/nvidia-g210m-acpi-source_0.1.0-1%...

Then once installed, run the following command on a terminal:

sudo modprobe nvidia_g210m_acpi

Pitidos de la BIOS


Alguna vez nos ha passado que escuchamos una serie de pitidos al arrancar el ordenador a los quales aveces no les prestamos mucha atención, hasta que un dia el ordenador no arranca. Así que ya me ha pasado varias veces que he tenido que buscar información sobre que numero de pitidos se corresponde con el error que está ocurriendo.

Buscando por internet he encontrado una descripción que en este caso me ha servido de gran ayuda ya que he podido ver que se trataba de la memoria RAM que tenia algun defecto (tres pitidos lentos) así que tras varios intentos quitando y volviendo-la a poner al final ha arrancado.

Dejo la lista copy-pasteada que me ha ayudado a solventar el problema:

Ningún tono: No se enciende el ordenador.
Mensaje de error: Ninguno.
Descripción: El suministro eléctrico no llega al equipo . Si el ordenador se enciende pero no se oye nada, entonces es posible que esté fallando únicamente el altavoz o la conexión a la placa base del mismo.

Tono ininterrumpido: No se enciende el ordenador.
Mensaje de error: Ninguno.
Descripción: Fallo en el suministro eléctrico. Llega mal la corriente, o la fuente de alimentación esta fastidiada

Tonos cortos constantes:
Mensaje de error: Ninguno.
Descripción: Placa base defectuosa, es decir, está rota, es de lo peor que nos puede ocurrir.

1 largo:
Mensaje de error: RAM Refresh Failure.
Descripción: Los diferentes componentes encargados del refresco de la memoria RAM fallan o no están presentes. Este errorr de memoria RAM, quiere decir que está mal puesta o que esté fastidiada.

1 largo y 1 corto:
Mensaje de error: Ninguno.
Descripción: Fallo general en la placa madre o en la ROM básica del sistema. Esto suele ocurrir mucho en placas base viejas.

1 largo y 2 cortos:
Mensaje de error: No video card found.
Descripción: Aplicable sólo a placas base que tengan tarjetas de vídeo incorporadas a la placa. Fallo en la tarjeta gráfica. Puede que el puerto falle, por lo que no habría más que cambiarla de puerto, pero también puede ser que la tarjeta gráfica sea defectuosa.

1 largo y 3 cortos:
Mensaje de error: No monitor connected.
Descripción: Aplicable sólo a placas base con tarjeta de vídeo conectada al sistema. Igual que la anterior Fallo en la tarjeta grafica.

1 largo y varios cortos:
Mensaje de error: Video related failure.
Descripción: Fallo en la tarjeta de video Pueden existir otra serie de pitidos que dependan de las tarjetas de vídeo, dependiendo de las diferentes configuraciones de bios existentes en el mercado. Para conocer más características de una determinada placa base, consulta el manual de tu placa.

2 largos y 1 corto:
Mensaje de error: No disponible.
Descripción: Fallo en la sincronización de las imágenes. Seguramente problema de la tarjeta gráfica.

2 cortos:
Mensaje de error: Parity Error.
Descripción: Error de paridad de memoria. La paridad no es soportada por la placa base. Esto ocurre en ordenadores que llevan la memoria de dos módulos en dos módulos. Esto significaría que uno de los módulos falla, o que no tenemose un número par de módulos de memoria.

3 cortos:
Mensaje de error: Base 64 Kb Memory Failure.
Descripción: Fallo de memoria en los primeros 64 Kbytes de la RAM. Esto nos indica que hay un error en los primeros 64Kb de la memoria RAM.

4 cortos:
Mensaje de error: Timer not operational.
Descripción: El temporizador o contador de la placa base se encuentra defectuoso. El Timer 1 de la placa no funciona.

5 cortos:
Mensaje de error: Processor Error.
Descripción: La CPU ha generado un error porque el procesador o la memoria de vídeo está bloqueada. Esto nos indica que el procesador o la tarjeta gráfica se encuentran bloqueados. Suele ocurrir cuando ha habido un sobrecalentamiento.

6 cortos:
Mensaje de error: 8042 - Gate A20 Failure.
Descripción: El controlador o procesador del teclado (8042) puede estar en mal estado. La bios no puede conmutar en modo protegido. Error en el teclado. Si ocurre esto yo probaría con otro teclado. Si aun así no funciona se trata del puerto receptor del teclado, en este caso el error se suele dar cuando se conecta/desconecta el teclado con el ordenador encendido.

7 cortos:
Mensaje de error: Processor Exception / Interrupt Error.
Descripción: La CPU ha generado una interrupción excepcional o el modo virtual del procesador está activo.

8 cortos:
Mensaje de error: Display Memory Read / Write error.
Descripción: El adaptador de vídeo ( tarjeta gráfica) del sistema no existe, está mal conectada o su memoria de vídeo (RAM) está fallando. No es un error fatal, aunque puede ser que tengas que cambiar tu tarjeta grafica. Mira si la tarjeta está bien conectada o si tiene alguna patilla doblada o defectuosa.

9 cortos:
Mensaje de error: ROM Checksum Error.
Descripción: El valor del checksum (conteo de la memoria) de la RAM no coincide con el valor guardado en la Bios. Hay que resetear la Bios.

10 cortos:
Mensaje de error: CMOS Shutdown Register / Read/Write Error.
Descripción: El registro de la CMOS RAM falla a la hora de la desconexión. Hay que resetear la Bios.

11 cortos:
Mensaje de error: Cache Error / External Cache Bad.
Descripción: La memoria caché externa está fallando. Te falla uno de los chips de memoria caché. Tienes que cambiarlo. Algunas veces nos suenan muchos de estos pitidos pero luego sigue funcionando con normalidad. En ese caso sería problema del detector de errores o del escaneo que nos hace al encender el ordenador. Piensa también que algunos de estos errores suponen cambiar elementos sensibles de tu placa, así que si no eres muy buen manitas...ya sabes.

Fuente : http://foro.elhacker.net/hardware/pitidos_del_ordenador-t94728.0.html
Fuente : http://www.viejoblues.com

Instalación de Asterisk en servidor Debian


Asterisk es un programa que permite convertir un ordenador en un servidor de llamadas telefónicas. A parte de hacer de centralita telefónica convencional podremos crear nuestras extensiones y/o cuentas VoIP para hablar con cualquier dispositivo que soporte esta tecnología.

En este momento me disponía a instalar-lo en un servidor Debian así que aprovecho para ir haciendo un tutorial de lo que he ido haciendo.

Primero de todo he actualizado el sistema mediante:


$sudo apt-get update
$sudo apt-get upgrade

Todo seguido he buscado que paquetes existian en los repositorios relacionados con Asterisk:

$apt-cache search asterisk

Observamos que hay varios paquetes para tener voces en distintos idiomas, interficies python para controlar Asterisk, librerias de desarroyo, y lo que me interesa ahora mismo a mi

asterisk - Open Source Private Branch Exchange (PBX)

así que lo instalamos:

$sudo apt-get install asterisk

Nos pedirá que si queremos instalar algunos paquetes, le decimos que sí.

Ahora en la instalación lo primero que nos pide és que le indiquemos el codigo numerico de nuestra region (en España es 34).

Al finalizar de instalar vemos que ha creado un usuario llamado asterisk al sistema, y lo ha añadido a los grupos 'dialout' y 'audio'.

Luego arranca automaticamente el servicio:

Starting Asterisk PBX: asterisk.

podemos comprobar que hay dos nuevos procesos en ejecución:

$ps aux | grep asterisk

Instalación de FreePBX en servidor Debian

FreePBX és una Interfaz Grafica de Usuario (GUI en inglés) con la que podremos configurar facilmente un servidor con Asterisk.

Primero de todo debemos tener instalado Asterisk en el servidor (podeis ver como se instala en otra publicación).

Una vez instalado Asterisk procedemos a hacer lo siguiente:
Primero le diremos a Asterisk que queremos crear un usuario para que pueda administrar-lo, así que entraremos en un directorio de configuracion de asterisk y haremos lo siguiente:

$cd /etc/asterisk/

En principio podriamos añadir el usuario al final del fichero manager.conf, pero viendo-lo por dentro me he fijado que importa todos los ficheros de configuración de /etc/asterisk/manager.d/*.conf, por lo tanto creamos un fichero nuevo (yo uso el editor vim, usad el que os plazca)

$sudo vim /etc/asterisk/manager.d/user.conf

y le añadimos lo siguiente:

[nombre_de_usuario]
secret=contraseña_para_usuario
deny=0.0.0.0/0.0.0.0
permit=127.0.0.1/255.255.255.0
read=system,call,log,verbose,command,agent,user
write=system,call,log,verbose,command,agent,user

Nos descargaremos las fuentes de la pagina oficial de freePBX (en este caso las dejo en /usr/src/)

$cd /usr/src
$sudo wget http://mirror.freepbx.org/freepbx-2.9.0.tar.gz

Una vez descargado vamos a descomprimir el paquete:

$sudo tar zxvf freepbx-2.9.0.tar.gz freepbx-2.9.0/

Esto nos habrá creado una carpeta, entramos en ésta y antes de nada deberiamos preparar un poco el entorno.
Primero deberiamos crear dos bases de datos en nuestro servidor MySQL (recomendaria que en vez de usar el usuari o root de la base de datos MySQL se creara un usuario especifico para Asterisk que solo tubiera permisos para tocar las bases de datos que vamos a realizar; en esta guia uso a root):

$mysql -u root -p

Introducimos el password de root y una vez en la consola de MySQL ejecutamos dos acciones:

create database asterisk;
create database asteriskcdrdb;
exit;

Ahora las completamos con dos codigos que estan en la carpeta SQL del directorio en el que hemos descomprimido el freepbx:

$mysql -u root -p asterisk < SQL/newinstall.sql

$mysql -u root -p asterisk < SQL/cdr_mysql_table.sql

ejecutamos los dos scripts:

$cd /freepbx-2.9.0
$sudo ./start_asterisk start
$sudo ./install_amp

En mi caso me dice que ya tenia Asterisk en ejecución pero que necesito tener PEAR DB así que instalo un par de paquetes para poder hacer el ./install_amp:

$sudo apt-get install php-pear php-db

Ahora si que me permite realizar la instalación así que repetimos:

$sudo ./install_amp

ahora os pedirá bastante información, vigilad que sea la hayas puesto en los pasos anteriores:

Enter your USERNAME to connect to the ‘asterisk’ database: root
Enter your PASSWORD to connect to the ‘asterisk’ database: < type MySQL’s root password >
Enter the hostname of the ‘asterisk’ database: < aprieta intro o escrive ‘localhost’ >
Enter a USERNAME to connect to the Asterisk Manager interface: < aqui ponemos el usuario que hemos puesto en el fichero /etc/asterisk/manager.d/user.conf >
Enter a PASSWORD to connect to the Asterisk Manager interface: < aqui ponemos el password que hemos puesto en el fichero /etc/asterisk/manager.d/user.conf >
Enter the path to use for your AMP web root: /var/www
Enter the IP ADDRESS or hostname used to access the AMP web-admin: < Indicad la IP del servidor que esta corriendo Asterisk, en mi caso es la misma maquina, pues pongo su IP >
Enter a PASSWORD to perform call transfers with the Flash Operator Panel: < dejamos el password por defecto passw0rd dandole al intro >
Use simple Extensions [extensions] admin or separate Devices and Users [deviceanduser]? < Aqui especificamos si cada extension que creamos corresponderá a un usuario en concreto 'extensions' o si por lo contrario se assignaran dinamicamente al conectar-se (por defecto si le dais a intro os pondrá 'extensions') >
Enter directory in which to store AMP executable scripts: < confirmar el directorio por defecto /var/lib/asterisk/bin dandole al intro >
Enter directory in which to store super-user scripts: < confirmar el directorio por defecto /usr/local/sbin dandole al intro >

Si al instalar aparece el error

Cannot redeclare __parse_dialrulesfile

repetid la instalación con el comando

$sudo ./install_amp

No me ha ocurrido pero indican que es un error conocido (al menos en una version antigua).

Lo que si que me ha ocurrido es que haya tenido que cancelar la instalacion, y al volver a instalar no me permita hacer nada porque el fichero de configuración está a medias, lo que he echo en ese caso es eliminar el fichero /etc/amportal.conf
puede que ahora si que os deje volver a instalar.

Ahora podremos entrar a la pagina web que nos ha creado freePBX.
Podria ser que el usuario www-data (el usuario por defecto de Apache) no tenga permisos para consultar los ficheros del grupo Asterisk, por lo que no podrés acceder correctamente a la pagina web. Así que dar los permisos oportunos, en mi caso:

$sudo adduser www-data asterisk

Y reiniciamos Apache

$sudo /etc/init.d/apache restart

Ahora debería cargar todo perfectamente.
Una vez dentro nos aparecen tres opciones, entraremos en FreePBX Administration, que nos pedirá un usuario y contraseña:

admin
admin

Una vez dentro vereis un cartelito naranja indicando que hay cambios en la configuración, así que si lo apretais se aplicarán.

Ahora deberiamos cambiar el nombre y contraseña del usuario admin, para esto ir a Setup -> Administrators, seleccionar a la derecha el usuario admin y poner el nombre i contraseña deseado. Luego picar abajo en Submit Changes.