Source: http://docplayer.es/2099698-Proyecto-teambox-software-appliance.html
Timestamp: 2017-09-20 04:22:17+00:00

Document:
PROYECTO "Teambox Software Appliance" - PDF
PROYECTO "Teambox Software Appliance"
Download "PROYECTO "Teambox Software Appliance""
Ana María González Saavedra
1 PROYECTO "Teambox Software Appliance" Memoria Final TFC - Plataforma Gnu Linux Profesora: Helena Rifá Pous Consultor: Jordi Massaguer Pla Melilla, 13 de junio de 2011
2 A Nuria, Javi e Irene... por las horas robadas, por los momentos a solas, por los días y noches sin padre,... y seguir a mi lado. A mi familia, por su apoyo incondicional durante mis estudios. A mis profesores del Grado Superior por despertarme el interés por el software libre. A Jordi Romeu Crespo, tutor de la UOC, por su excelente servicio de tutoría prestado durante este años. A Jordi Massaguer Pla, consultor del TFC, por su inestimable ayuda y sus consejos para la elaboración de esta memoria. A todos, muchas gracias! Página 2 de 45
3 TFC Plataforma GNU Linux Teambox software appliance Índice de contenido 1 Introducción y objetivos Descripción del proyecto Tareas Hitos/Entregas Programación Generar LiveCD con distribución linux Servicios de red Servicio de DHCP Servicio de DNS Servidor de aplicaciones Mecanismos de seguridad Instalación y configuración de Teambox Instalación de dependencias Instalación Teambox Personalización de la distribución Datos de ejemplo Página de bienvenida Inicio del servidor Teambox Arranque desatendido Personalización interfaz gráfica Página 3 de 45
4 7 Finalización de la distribución Eliminar paquetes innecesarios Obtención del LiveCD Personalización de la ISO Puesta en marcha LiveCD Pruebas finales Líneas de Desarrollo Bibliografía ANEXO I Esta obra está bajo una licencia Reconocimiento-No comercial-sin obras derivadas 2.5 España de Creative Commons. Puede copiarlo, distribuirlo y transmitirlo públicamente siempre que cite al autor y la obra, no se haga un uso comercial y no se hagan copias derivadas. La licencia completa se puede consultar en Página 4 de 45
5 1 Introducción y objetivos Las organizaciones que hayan emprendido algún proyecto saben lo difícil que resulta hacer un seguimiento detallado. Más difícil si cabe si el proyecto depende de contribuciones de diferentes personas, si no están todas en el mismo lugar físico, y más si este equipo de trabajo lo realiza de forma altruista. El responsable del proyecto necesita saber el estado real de éste en cada momento: que actividades están en plazo, cuales van retrasadas y los porqués de estos retrasos. Este responsable necesita mantener un canal constante de comunicación con los colaboradores, y darle visibilidad acerca del proyecto al resto de la organización. Para mejorar la visibilidad, gestión y productividad del proyecto, y para mostrar de una manera clara el estado real de cada actividad, existen en el mercado numerosas aplicaciones colaborativas como Microsoft Project, Basecamp, Doolphy, BSCW, Gantter, Project HQ (OpenSource), activecollab, Collabtive (OpenSource), o Teambox (OpenSouce). En nuestro caso la solución escogida es Teambox. El motivo de esta elección es que además de las opciones colaborativas comunes como: tareas, calendario, documentos en linea, etc, nos permite aplicar microblogging a nuestros proyectos. Esto permite, con la ventaja de la síntesis y la brevedad, aumentar el conocimiento del proyecto. Teambox se distribuye de dos formas: como aplicación SaaS(Software as a service), o para instalarla en un servidor local. La versión de instalación en servidores propios se distribuye bajo licencia GNU, lo que nos permite modificar, adaptar y redistribuir la aplicación. Esta opción no está a disposición de cualquier organización ya que su puesta en marcha es mucho mas complicada ya que requiere tener configurado un servidor con Ruby on Rails, Apache y MySQL. El objetivo de este TFC es obtener un LiveCD con Teambox operativo, para poder probarlo o instalarlo en un servidor de una forma fácil y asequible a cualquier organización 2 Descripción del proyecto El proyecto va ha consistir en montar un servidor con lo necesario para integrar en red local todo lo requerido para probar el software colaborativo Teambox. Los requerimientos necesarios para ejecutar Teambox de forma local son: 'You ll need a UNIX-based machine, like Linux or Mac. We can t offer support for Windows. Make sure you have the following installed: Git, so you can download the source. Check with git --version Ruby You may have it already, check ruby -v to make sure. RubyGems, extract it and run sudo ruby setup.rb. Check with gem -v Bundler. Install with gem install bundler -v '~> rc', check with bundle -v MySQL, the database we are using. Check with mysql --version. (You can also try any other ActiveRecord-supported database, like PostgreSQL.) ImageMagick so you can resize images. On Mac OS X, easiest way is with Homebrew: brew install imagemagick. Check with convert -version' Estas información se puede consultar en la wiki de la comunidad de desarrollo. https://github.com/teambox/teambox/wiki/installing-locally. Página 5 de 45
6 Además de los requerimientos descritos, es necesario instalar un servidor de aplicaciones web. Ya que la aplicación está basada en una arquitectura web de 3 capas. Para poder resolver el nombre del servidor local dentro de la red, es necesario instalar un servicio de resolución de nombres (DNS). Como consecuencia de lo anterior, y para que los datos de configuración de la red se propaguen de forma correcta al resto de equipos, es necesario instalar un servicio de servidor dinámico de direcciones de red (DHCP). Esta aplicación corporativa y los servicios asociados para que funcione de forma autónoma se entregarán como un LiveCD. 2.1 Tareas 1.- Generar un LiveCD con una distribución de Linux. Se estudiarán diferentes métodos y aplicaciones para realizar distribuciones live de linux que puedan ser personalizadas. Elección y descarga de la imagen de la distribución de linux que se empleará como base para la entrega de la LiveCD. 2.- Instalar el software para dar servicio de red. En concreto deben estar disponibles los siguientes servicios: Asignación automática de direcciones IP. Resolutor de nombres DNS. Servidor de aplicaciones web. El servidor de aplicaciones ofrecerá páginas sobre el protocolo https. Se generarán los certificados necesarios, y cuando se libere en la versión Community la navegación segura, se emplearán para servir páginas sobre SSL. 3.- Se configurará e instalará Teambox para que sea funcional. Se instalarán los siguientes paquetes y dependencias. Se instalará RubyGems y Bundler. Se subirá de versión Ruby a Ruby Enterprise Edition. Se instalará Passenger. Se configurará el servidor de aplicaciones web para que emplee Passenger. Se configurá el host para nuestro dominio. Se instalará Teambox desde el repositorio de la empresa distribuidora. 4.- Personalización de la distribución Se generarán datos de ejemplo/demo en el portal Teambox para quedar preinstalados en el livecd Al iniciarse la distribución, un navegador web abrirá de forma automática un documento html que contendrá una pequeña introducción de uso, el usuario y password que esté configurado y un enlace a la aplicación web. 5.- Comprimir la distribución personalizada. Se eliminarán las aplicaciones innecesarias y los datos temporales de la instalación. Se preparará la instalación para ser empaquetada y almacenada en una ISO autoejecutable. Página 6 de 45
7 Una vez finalizado los pasos anteriores, se creará la imagen ISO de la distribución. Una vez obtenida la imagen, se comprobará su funcionalidad ejecutándola en una máquina virtual. La versión final de la LiveCd se subirá a una carpeta compartida de una cuenta de Dropbox. 2.2 Hitos/Entregas abril. Entrega 30% del seguimiento del proyecto mayo. Entrega 70% del seguimiento del proyecto junio. Memoria final y entrega de producto software junio. Presentación y vídeo. 2.3 Programación La programación del proyecto recoge cronológicamente los hitos que hay que superar. Las tareas deben de ser realizadas antes de la finalización del tiempo estimado para su ejecución para cumplir los plazos establecidos en el punto 2.3 Hitos/entregas. Se adjunta un cronograma y un diagrama de Gantt con las tareas a realizar y las fechas estimadas para su ejecución. Cronograma Página 7 de 45
8 Diagrama de Gantt Página 8 de 45
9 3 Generar LiveCD con distribución linux Se estudiarán diferentes métodos para generar una distribución personalizada de linux. Una vez elegido el método a emplear se selecciona la distribución que mejor se le adapte. Uno de los métodos escogidos para la preparación de la distribución, es aislar la distribución en una jaula. Durante el proceso de ejecución de las X en el entorno chroot hay que configurar donde debe de iniciarse sesión gráfica del sistema que está en la jaula. En la documentación consultada hay que modificar el fichero /etc/gdm/gdm.conf (http://library.gnome.org/admin/gdm/2.32/preface.html), pero esta documentación está desactualizada ya que el fichero de configuración de la versión de gnome referenciada (2.32) es /etc/gdm/gdm.schemas Se descarta este método y se consultan diferentes aplicaciones para personalizar distribuciones linux. Comparadas las soluciones de las diferentes fuentes, se tienen en consideración los siguientes: UCK. Ubuntu Customization Kit1. Esta herramienta nos permite añadir o quitar a las distribuciones oficiales de Ubuntu y Kubuntu los paquetes que queramos. Esta solución no puedo utilizarla ya que no me permite instalar la aplicación Teambox ya que no está en los repositorios. CustomNimbleX2. Esta distribución nos permite personalizarla antes de distribuirla, pero al igual que en el punto anterior, está limitada a los paquetes disponibles en los repositorios. Sin posibilidad de añadir datos personalizados. Revisor3. En este caso la distribución base es Fedora, pero nos encontramos de nuevo con las limitaciones de los paquetes disponibles en el repositorio. Reconstructor4. Aplicación WEB que nos permite la personalización de nuestra distribución Ubuntu. Esta aplicación no la he valorado ya que para su uso hay que registrarse. Según he leído en varios artículos, su funcionamiento es similar al de SUSE Estudio. Remastersys5. Es una aplicación que nos permite crear una LiveCD de nuestro sistema tal y como esté en ese momento. Realizo un par de pruebas de concepto y en principio satisface los objetivos de este proyecto. De entre las soluciones anteriores, la solución escogida es Remastersys. Una de las limitaciones de Remastersys, es que ésta herramienta solo es operativa en Debian, Ubuntu o sus derivadas. Por tanto la distribución base está limitada estas distribuciones. Se han sopesado las siguientes distribuciones como base para la realización del proyecto: Debian: Apuesta por separar en sus versiones el software libre del software no libre. El modelo de desarrollo del proyecto es ajeno a motivos empresariales o comerciales, siendo llevado adelante por los propios usuarios. Esto hace que no todo el hardware esté soportado haciendo que su instalación en algunos equipos de sobremesa, y en muchos portátiles sea compleja. Es una de las distribuciones más estables que hay en el mercado y es muy recomendable para ejecutarse en entornos críticos https://projects.lumentica.com/projects/reconstructor/wiki 5 Página 9 de 45
10 Ubuntu: Ubuntu es un sistema operativo que utiliza un núcleo Linux, y su origen está basado en Debian. Ubuntu está orientado en el usuario promedio, con un fuerte enfoque en la facilidad de uso y mejorar la experiencia de usuario. Está compuesto de múltiple software distribuido bajo una licencia libre o de código abierto. Desde el instalador de software tenemos la posibilidad de habilitar los repositorios restringidos e instalar a golpe de ratón software privativo. Linux Mint: Linux Mint es una distribución basada en Ubuntu, y a partir del 2010 también está disponible una edición basada en Debian. Linux Mint mantiene un inventario actualizado, un sistema operativo estable para el usuario medio, con un fuerte énfasis en la usabilidad y facilidad de instalación. Es reconocido por ser fácil de usar, especialmente para los usuarios sin experiencia previa en Linux. Las mayores diferencias entre Ubuntu y Linux Mint están en el escritorio ya que Linux Mint está diseñado para ser empleado en el hogar. UserLinux: Es un proyecto para crear una distribución Linux basada en Debian y enfocada a clientes de negocios. La finalidad era proveer un sistema operativo acompañado por certificaciones, servicio, soporte y alta calidad de ayuda, ventajas que el soporte del proyecto Debian no puede ofrecer. El proyecto fue iniciado a finales de 2003 y por desgracia en 2006 cesó toda actividad. Knoppix: Es la distribución live más famosa del mercado. El sistema puede iniciarse desde un CD y reconocer automáticamente la mayor parte del hardware del ordenador soportado por Linux. Se caracteriza por ser totalmente libre y con programas libremente distribuibles. Está basado en Debian y en LXDE, pero algunos paquetes no se consideran actualmente estables, además de realizar modificaciones a los paquetes de autodetección si estar testeados ni aprobados por la comunidad de Debian. En base a los comentarios anteriores, la decisión de la elección de la distribución base se encuentra entre Debian y el tandem Ubuntu/Linux Mint. Finalmente lo que ha decantado la balanza hacia Ubuntu/Linux Mint es la facilidad de instalación en cualquier equipo, al permitir la posibilidad de emplear controladores propietarios desde un entorno gráfico, que un usuario no experto es capaz de manejar, frente a las dificultades que entraña un proceso similar en Debian. Ante la tesitura del empleo de Ubuntu o Linux Mint, cualquier decisión tomada hubiese sido correcta, ya que ambas distribuciones cumplen de sobra con las necesidades del usuario al cual va dirigido el producto software de este proyecto. Emplearemos la distribución Ubuntu como base para nuestro producto software, ya que por una parte la comodidad de uso que en mi caso tiene Ubuntu, y por otra parte la gran cantidad de información y documentación que Ubuntu tiene en la red gracias a las aportaciones desinteresadas de la comunidad. Una vez escogida Ubuntu como distribución, emplearemos la versión Ubuntu Lucid Lynx, en vez de Ubuntu Maverick Meerkat. El motivo es que Ubuntu LTS tiene soporte de larga duración. Este soporte se prolongará por espacio de 3 años para los equipos de escritorio y 5 para los servidores. En cambio Ubuntu Maverick Meerkat tan solo tiene 18 meses de soporte. El motivo de escoger la versión de escritorio en lugar de la de servidores, es la de proveer de un interface amigable para el usuario final de la distribución. El modo en el que Remastersys obtiene una LiveCD, es realizar un backup completo de la distribución que hemos personalizado. Para instalar y personalizar nuestra distribución tenemos dos opciones: instalarla sobre un equipo físico, o virtualizarla con un software de virtualización. La mejor opción es la virtualización ya nos permite la captura de estados de la máquina, permitiéndonos la reversibilidad en caso de errores o estados indeseados en las instalaciones que realicemos. Existen diversas opciones de virtualización, las dos más populares son VMware Workstation 7 y VirtualBox La elección del software virtualización está basada en el tipo de licenciamiento que ofrecen, ya que ambas soluciones son estables, fiables y tienen empresas de software solventes que respaldan ambas soluciones. Oracle en el caso de VirtualBox y Vmware en el caso de Vmware Workstation. Página 10 de 45
11 Pero mientras que VirtualBox es software Open Source con licencia GPL V2, Vmware es software privativo, y ya que el proyecto promueve el uso de software libre, no tendría sentido usar una solución privativa habiendo una solución libre que además es robusta y fiable. Preparación entorno de trabajo Una vez escogida la aplicación Remastersys como software de creación de LiveCd, el entorno de trabajo que se va a crear es el siguiente: Descarga de la distro Ubuntu Descarga e instalación de Virtual Box Creación de máquina virtual e instalar Ubuntu10.04 Una vez que se está ejecutando Ubuntu10.04 virtualizado descargamos e instalamos Remastersys. Nos descargamos el paquete.deb de instalación de la aplicación para distribuciones Ubuntu desde Descarga Ubuntu10.04 Desde los repositorios oficiales de Canonical, descargamos la distribución de Ubuntu que hemos decidido emplear como base para su personalización. wget :01:39-- Resolviendo releases.ubuntu.com , 2620:0:dc0:1800:214:4fff:fe7d:1b9, 2001:6b0:e:2018::1337,... Conectando a releases.ubuntu.com :80... conectado. Petición HTTP enviada, esperando respuesta OK Longitud: (687M) [application/x-iso9660-image] Guardando en: «ubuntu desktop-i386.iso.1» 0% [ ] K/s 1h 56m Software Virtualización. Virtual Box 4.0 El entorno de virtualización que se usará a lo largo de este proyecto es Virtual Box. Para instalarlo se ejecuta la siguiente línea en la consola sudo sh -c 'echo "deb maverick contrib non-free" >> /etc/apt/sources.list' Se añade la clave pública a nuestra lista de claves. wget -q -O sudo apt-key add - Y por último se actualiza el repositorio y se instala la aplicación. sudo apt-get update sudo apt-get install virtualbox-4.0 Una vez que tengamos VirtualBox funcionando, nos crearemos una máquina virtual instalaremos la distribución elegida con la instalación por defecto. e Una vez tengamos finalizada la instalación y estemos trabajando sobre ella, instalaremos el software de creación de LiveCD. Software de empaquetado de LiveCD El software de personalización de distribuciones lo descargamos desde la web del programador. Seguiremos las instrucciones de instalación ofrecidas por el desarrollador. Página 11 de 45
12 Nos descargamos la versión adecuada para Ubuntu 10.04LTS wget :46:40-http://www.geekconnection.org/remastersys/repository/karmic/remastersys_ _all.deb Resolviendo Conectando a :80... conectado. Petición HTTP enviada, esperando respuesta OK Longitud: (165K) [text/plain] Guardando en: «remastersys_ _all.deb» 100%[======================================>] ,1K/s en 2,2s :46:43 (76,1 KB/s) - «remastersys_ _all.deb» guardado [168756/168756] Con la utilidad gdebi se instala el paquete y sus dependencias. sudo gdebi remastersys_ _all.deb Reading package lists... Done Building dependency tree Reading state information... Done Building data structures... Done Building data structures... Done Los siguientes paquetes NO están AUTENTICADOS: libdebian-installer4 cryptsetup dmraid keyutils discover1 xresprobe discover-data ecryptfs-utils libecryptfs0 localechooser-data bogl-bterm python-pyicu casper libdmraid1.0.0.rc16 ubiquity-ubuntu-artwork dialog ubiquity squashfs-tools user-setup libdiscover2 discover rdate reiserfsprogs ubiquity-frontend-debconf ubiquity-casper libdebconfclient0 Requiere la instalación de los siguientes paquetes: libdebian-installer4 cryptsetup dmraid keyutils discover1 xresprobe discover-data ecryptfs-utils libecryptfs0 localechooser-data bogl-bterm python-pyicu casper libdmraid1.0.0.rc16 ubiquity-ubuntu-artwork dialog ubiquity squashfs-tools user-setup libdiscover2 discover rdate reiserfsprogs ubiquity-frontend-debconf ubiquity-casper libdebconfclient0 Ubuntu and variant system remaster This script creates a livecd of the installed system. You can either make a distributable livecd or backup of your system. For more information, please visit Quiere instalar el paquete de software? [s/n]:s Done lucid/main bogl-bterm ubuntu4... Rebuilding /usr/share/applications/desktop.es_es.utf8.cache... Procesando disparadores para python-support... Comprobaremos que la instalación se ha realizado Página 12 de 45
13 4 Servicios de red Como hemos descrito en la memoria, para poder propagar de forma correcta los parámetros de configuración de la red encargada de dar soporte a nuestra distribución es necesario instalar los servicios de DNS -resolución de nombres del dominio local- y de DHCP -distribución de la configuración de redcomo requisito previo a la instalación de cualquiera de estos dos servicios de red, es necesario que la IP de nuestro servidor esté configurada como estática. Se ha elegido el rango de red /24 como rango de red privada por defecto ya que cumple con las buenas prácticas recomendadas en el documento Address Allocation for Private Internets RFC1918. La dirección elegida para nuestro servidor es la /24. La dirección del gateway deberá ser la /24. Desde consola ejecutamos: sudo nano /etc/network/interfaces Comentamos las siguientes líneas # auto eth0 # iface eth0 inet dhcp En nuestro caso, el dispositivo de red que vamos a configurar es eth0. auto eth0 iface eth0 inet static address netmask gateway network broadcast Guardamos los cambios y reiniciamos la red sudo /etc/init.d/networking restart 4.1 Servicio de DHCP El servicio Dynamic Host Configuration Protocol (DHCP) asigna dinámicamente las direcciones IP y otras configuraciones de red a otros ordenadores clientes que se conecten. Esto simplifica la administración de la red y hace que la conexión de nuevos equipos a la red sea mucho más fácil. El servidor DHCP puede proporcionar los ajustes de configuración utilizando dos métodos : Rango de Direcciones Dirección MAC Rango de direcciones Este método se basa en la definición de un grupo de las direcciones IP para los clientes DHCP (Denominado IP Address Pool) que suministran sus propiedades de configuración de forma dinámica según lo soliciten los ordenadores cliente. Cuando un cliente DHCP ya no está en la red durante un período determinado, la configuración caduca y la dirección IP es liberada y puede ser usada por otros clientes. Dirección MAC Este método se basa en utilizar el protocolo DHCP para identificar la dirección de hardware única de cada tarjeta de red conectada a la red y luego es asignada una configuración constante así como la misma dirección IP cada vez que la configuración de DHCP del cliente realiza una petición al servidor DHCP desde el mismo dispositivo de red. Página 13 de 45
14 Como desconocemos el hardware de los equipos que se van a conectar, el método que emplearemos será el de Rango de direcciones. El servicio de DHCP de las distribuciones basadas en Debian es dhcp3-server, por lo que procederemos a instalarlo desde los repositorios ofrecidos en la distribución. Para instalar el servicio DHCP ejecutamos desde consola: sudo apt-get install dhcp3-server Una vez finalizado el proceso configuraremos nuestro servidor DHCP. Seleccionaremos qué tarjeta de red escuchará las peticiones DHCP, en nuestro caso como sólo tenemos una, configuramos el sistema para que despache las peticiones por la tarjeta eth0. Editamos el archivo /etc/default/dhcp3-server y comprobamos que la variable INTERFACES tenga el valor eth0. sudo nano /etc/default/dhcp3-server Configuraremos nuestro servidor DHCP mediante el método de rango de direcciones (IP Pool) Lo primero que haremos será una copia de seguridad del archivo de configuración: cp /etc/dhcp3/dhcpd.conf /etc/dhcp3/dhcpd.conf.back Editamos la configuración tecleando: sudo nano /etc/dhcp3/dhcpd.conf Y en este archivo realizamos las siguientes modificaciones: # # # # attempt to do a DNS update when a lease is confirmed. We default to the behavior of the version 2 packages ('none', since DHCP v2 didn't have support for DDNS.) ddns-update-style none; Comentamos esta línea Añadimos las siguientes # Configuracion para que comuniquen DHCP y DNS ddns-updates on; ddns-domainname "teambox.local"; ddns-rev-domainname "in-addr.arpa"; ddns-update-style ad-hoc; Opciones comunes para todas las redes de este servidor # option definitions common to all supported networks... option domain-name "teambox.local"; Nombre del dominio option domain-name-servers ; Nombre serv. DNS default-lease-time 600; max-lease-time 7200; Página 14 de 45
15 y por último añadimos al final la siguiente sección # Configuracion para la red interna del servidor # teambox-server. subnet netmask { range ; option routers ; option broadcast-address ; } } Guardamos y salimos del archivo. Las modificaciones señaladas configuran nuestro servidor DHCP con los siguientes parametros: Asignación a los clientes direcciones IPs del rango de hasta Prestara la dirección IP por un mínimo de 600 segundos, y como máximo permitido de 7200 segundos. Determina la mascara de subred a Dirección de broadcast de Como gateway/pasarela de red/router la dirección Y los servidores como sus servidores DNS Ahora reiniciamos el servidor dhcp ejecutando el siguiente comando: sudo /etc/init.d/dhcp3-server restart 4.2 Servicio de DNS El servicio DNS es un sistema de nomenclatura jerárquica para ordenadores, servicios o cualquier otro recurso conectado a una red. Este sistema asocia direcciones IP con nombres de dominios asignados a cada uno de los equipos conectados a una red. Su función más importante, es resolver -traducir- los nombres de los servidores en direcciones IP con el propósito de poder localizar y direccionar las peticiones a los equipos. El servidor DNS utiliza una base de datos que almacena información asociada a nombres de dominio en redes. La integración de DNS en esta distribución permitirá resolver el nombre del servidor local -teambox.local- y sus servicios asociados. El servicio de DNS de las distribuciones linux es bind9, por lo que procederemos a instalarlo desde los repositorios ofrecidos en la distribución. Desde una consola tecleamos: sudo apt-get install bind9 [sudo] password for teambox: Leyendo lista de paquetes... Hecho Creando árbol de dependencias Leyendo la información de estado... Hecho * Starting domain name service... bind9 [ OK ] Una vez finalizada la instalación por defecto, lo personalizaremos para nuestras necesidades. Lo primero es indicarle que resuelva las peticiones externas de nuestra red en un servidor DNS externo. Página 15 de 45
16 Primero realizaremos una copia de seguridad de dicho fichero. sudo cp /etc/bind/named.conf.options{,.original} sudo nano /etc/bind/named.conf.options Una vez realizada la copia de seguridad, editamos el fichero de configuración /etc/bind/named.conf.options y le añadimos el siguiente contenido // Resolutores DNS externos. Open DNS. forwarders { ; }; En la captura de pantalla podemos ver como queda el citado fichero. El siguiente paso es crear nuestra zona de resolución directa que va a manejar nuestro dominio local -teambox.localen el directorio /etc/bind/zones nos creamos el fichero que contendrá la configuración de nuestro dominio. sudo mkdir /etc/bind/zones sudo nano /etc/bind/zones/teambox.local y copiamos en su interior lo siguiente: $ORIGIN teambox.local. $TTL IN SOA ns1 server ( ; serial, fecha AAAA-MM-DD + serial 8H ; refresco, en segundos 2H ; reentrar, segundos 4W ; expira, segundos 1D ) ; minimo, segundos NS ns1 ; Definimos los host ns1 A server A www A Básicamente en este fichero establecemos: El dominio a resolver, teambox.local. Debemos notar que al final de cada dominio viene un punto, que identifica la raíz de este. Página 16 de 45
17 @TTL (Time To Live), es el número de segundos que los registros se mantienen activos en los servidores NS caché antes de volver a preguntar su valor real. El Servidor de nombres primario (SOA) Registro de estado de autoridad (SOA). Indica el servidor de nombres considerado como el mejor recurso de información para este dominio. El resto de los parámetros son: Serial: es un identificador del archivo, puede tener un valor arbitrario pero se recomienda que tenga la fecha con una estructura AAAA-MM-DD y un consecutivo. Refresco: número de segundos que un servidor de nombres secundario debe esperar para comprobar de nuevo los valores de un registro. Reintentos: número de segundos que un servidor de nombres secundario debe esperar después de un intento fallido de recuperación de datos del servidor primario. Expiración: número de segundos máximo que los servidores de nombre secundarios retendrán los valores antes de expirarlos. Y por último los recursos de registros de tipo Host, Alias y Nombre del servidor. Los cuales indican que los nombres 'ns1', 'server' y 'www' pertenecen al host A continuación creamos el archivo de resolución inversa /etc/bind/zones/ para la zona inversa: sudo nano /etc/bind/zones/ e incluimos el siguiente contenido: $ORIGIN in-addr.arpa. $TTL ; 1 IN SOA ns1.teambox.local. server.teambox.local. ( 2 ; N Serie 6H ; Refresco (6 horas) 1H ; Reintentos (1 hora) 2W ; Expire (2 semanas) 3H ; Mínimo (3 horas) ) IN NS ns1.teambox.local. 10 IN PTR Básicamente en este fichero establecemos: La direccion de red a resolver in-addr.arpa. Debemos notar que al final de cada dominio viene un punto, que identifica la raíz de (Time To Live), es el número de segundos que los registros se mantienen activos en los servidores NS caché antes de volver a preguntar su valor real. El Servidor de nombres primario (SOA) Registro de estado de autoridad (SOA). Indica el servidor de nombres considerado como el mejor recurso de información para este dominio. El resto de los parámetros son: Serial: es un identificador del archivo, puede tener un valor arbitrario pero se recomienda que tenga la fecha con una estructura AAAA-MM-DD y un consecutivo. Refresco: número de segundos que un servidor de nombres secundario debe esperar para comprobar de nuevo los valores de un registro. Reintentos: número de segundos que un servidor de nombres secundario debe esperar después de un intento fallido de recuperación de datos del servidor primario. Expiración: número de segundos máximo que los servidores de nombre secundarios retendrán los valores antes de expirarlos. Página 17 de 45
18 Y por último los recursos de registros el cual indica que el host número 10, corresponde al servidor 'www.teambox.local' Editamos el archivo /etc/bind/named.conf.local para añadirles las zonas de resolución directa 'teambox.local' y las zonas de resolución inversa ' in-addr.arpa'. Previamente le hacemos una copia de seguridad. sudo cp /etc/bind/named.conf.local{,.original} sudo nano /etc/bind/named.conf.local Y le añadimos el siguiente contenido: zone "teambox.local" { type master; file "/etc/bind/zones/teambox.local"; notify no; allow-update { ; ; }; }; zone " in-addr.arpa" { type master; file "/etc/bind/zones/ "; notify no; allow-update { ; ; }; }; Editamos el archivo /etc/resolv.conf para añadir la IP del servidor DNS local. sudo nano /etc/resolv.conf nameserver domain teambox.local search teambox.local Reiniciamos nuestro servidor y comprobamos si funciona correctamente. sudo service bind9 restart * Stopping domain name service... bind9 * Starting domain name service... bind9 [ OK ] [ OK ] Resolución directa dig ; <<>> DiG P1 <<>> ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;www.teambox.local. IN A IN A ;; AUTHORITY SECTION: teambox.local IN NS ns1.teambox.local. ;; ADDITIONAL SECTION: ns1.teambox.local IN A ;; ANSWER SECTION: ;; ;; ;; ;; Query time: 1 msec SERVER: #53( ) WHEN: Mon Apr 11 21:07: MSG SIZE rcvd: 85 Página 18 de 45
19 Resolución inversa dig -x ; <<>> DiG P1 <<>> -x ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6986 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ; in-addr.arpa. IN PTR ;; ANSWER SECTION: in-addr.arpa IN PTR ;; AUTHORITY SECTION: in-addr.arpa IN NS ;; ADDITIONAL SECTION: ns1.teambox.local IN A ;; ;; ;; ;; ns1.teambox.local. Query time: 2 msec SERVER: #53( ) WHEN: Mon Apr 11 21:07: MSG SIZE rcvd: Servidor de aplicaciones Como se ha descrito en el punto 2.- Descripción del proyecto, es necesario instalar un servidor de aplicaciones web, ya que la aplicación está basada en una arquitectura web de 3 capas. Un servidor de aplicaciones web, o servidor de páginas http es un programa que procesa aplicaciones del lado del servidor realizando conexiones con una aplicación cliente, generando una respuesta en el lado del cliente. La respuesta recibida por el cliente suele ser compilada y ejecutada por un navegador web. Para la transmisión de todos estos datos suele utilizarse el protocolo HTTP perteneciente a la capa de aplicación del modelo OSI. En la elección del servidor aplicaciones se han barajado diversas soluciones como: Apache. Dispones de versiones para Windows y Linux. Tiene soporte para Rubi on Rails y Passenger. Se dispone de abundante documentación, tanto por Apache como por la comunidad. Cherokee. Dispone de versión para Windows y para linux. Tiene soporte para Rubi on Rails, pero no soporta Passenger. lighttpd. Dispone de versión para Windows y para linux. Tiene soporte para Rubi on Rails. Hay poca documentación para la instalación de Passenger, y recomiendan que no se emplee en un servidor en producción. KF Web Server. Queda descartado ya que solo tiene versión para Windows. Abyss Web Server X1. Dispone de versión para Windows y para Linux. La versión disponible es de pago. Ironwall. Queda descartado ya que solo tiene versión para Windows. Home Web Server. Queda descartado ya que solo tiene versión para Windows El servidor de aplicaciones que cumple todos los requisitos necesario para la instalación de Teambox es el software ofrecido por la Fundación Apache. La versión que se distribuye desde los repositorios de la distribuición es 'apache2'. Página 19 de 45
20 Desde una consola lanzamos la siguiente orden: sudo apt-get install apache2 Leyendo lista de paquetes... Hecho Creando árbol de dependencias Leyendo la información de estado... Hecho Se instalarán los siguientes paquetes extras: apache2-mpm-worker apache2-utils apache2.2-bin apache2.2-common libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap Paquetes sugeridos: apache2-doc apache2-suexec apache2-suexec-custom Se instalarán los siguientes paquetes NUEVOS: apache2 apache2-mpm-worker apache2-utils apache2.2-bin apache2.2-common libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap 0 actualizados, 9 se instalarán, 0 para eliminar y 57 no actualizados. Necesito descargar 3330kB de archivos. Se utilizarán 10,1MB de espacio de disco adicional después de esta operación. Desea continuar [S/n]? s AVISO: No se han podido autenticar los siguientes paquetes! libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap apache2.2-bin apache2-utils apache2.2-common apache2-mpm-worker apache2 Instalar estos paquetes sin verificación [s/n]? s Des:1 lucid/main libapr build1 [116kB]... Enabling module authn_file. Enabling module authz_host. Enabling module reqtimeout. Configurando apache2-mpm-worker ( ubuntu8.4)... * Starting web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using for ServerName [ OK ] Configurando apache2 ( ubuntu8.4)... Procesando disparadores para libc-bin... ldconfig deferred processing now taking place Para la configuración inicial con esto es suficiente. Para comprobar que funciona correctamente en un navegador tecleamos www y nuestro servidor de aplicaciones responderá. 4.4 Mecanismos de seguridad La transmisión de información entre el cliente y el servidor de aplicaciones emplea el protocolo de comunicaciones HTTP. Este protocolo transmite la información de forma plana. Para evitar que se puedan ser violadas las transmisiones entre cliente y servidor, las comunicaciones se cifrarán empleando el protocolo de comunicación HTTPS. El sistema HTTPS utiliza un cifrado basado en SSL/TLS para crear un canal cifrado más apropiado para el tráfico de información sensible que el protocolo HTTP. De este modo se consigue Página 20 de 45
21 que la información sensible (usuario y claves de paso normalmente) no pueda ser usada por un atacante que haya conseguido interceptar la transferencia de datos de la conexión, ya que lo único que obtendrá será un flujo de datos cifrados que le resultará imposible de descifrar. SSL proporciona servicios de seguridad a la pila de protocolos, encriptando los datos salientes de la capa de Aplicación antes de que estos sean segmentados en la capa de Transporte y encapsulados y enviados por las capas inferiores. La versión más actual de SSL es la 3.0. que usa los algoritmos simétricos de encriptación DES, TRIPLE DES, RC2, RC4 e IDEA, el asimétrico RSA, la función hash MD5 y el algoritmo de firma SHA-1. Los algoritmos, longitudes de clave y funciones hash de resumen usados en SSL dependen del nivel de seguridad que se busque o se permita, siendo el más habitual el siguiente: RSA + Triple DES + SHA-1: soportado por las versiones 2.0 y 3.0 de SSL, es uno de los conjuntos más fuertes en cuanto a seguridad, ya que son posibles 3.7 * 1050 claves simétricas diferentes, por lo que es muy difícil de romper. Para emplear conexiones seguras a nuestro servidor, generaremos certificados de servidor de aplicaciones y los habilitaremos. Para poder certificar nuestro servidor web debemos: Generar un certificado raíz que será la Autoridad Certificadora. Generar una llave privada Con la llave privada generar una Petición de Certificado Web Con el Certificado de la Autoridad Certificadora firmar la Petición de Certificado Web Instalación del Certificado Web firmado por la Autoridad Certificadora en nuestro Servidor de Aplicaciones. Generación del certificado raíz Desde nuestra terminal como root ejecutaremos la utilidad openssl con los siguientes parámetros: req -x509 -newkey rsa:2048 : creamos una CA para certificados X509, siendo éste el estándar UIT-T para infraestructuras de claves públicas (PKI). El algoritmo de encriptación que se va a emplear es 'RSA' de 2048 bytes. -keyout CAkey.pem: le indicamos que la clave privada se almacene en el fichero cakey.pem -out CAcert.pem: le indicamos que el certificado de la CA se almacene en el fichero cacert.pem -days 3650: indicamos que la CA no expire en 10 años. Seguidamente nos pedirá un password para nuestra CA. También nos pedirá una serie de datos por ejemplo país, nombre de empresa, etc., que nos identifica como CA. openssl req -x509 -newkey rsa:2048 -keyout CAkey.pem -out CAcert.pem -days 3650 Generating a 2048 bit RSA private key writing new private key to 'CAkey.pem' Enter PEM pass phrase: teambox Verifying - Enter PEM pass phrase: teambox ----You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----Country Name (2 letter code) [AU]:SP State or Province Name (full name) [Some-State]:España Página 21 de 45
22 Locality Name (eg, city) []:España Organization Name (eg, company) [Internet Widgits Pty Ltd]:Teambox Organizational Unit Name (eg, section) []:Teambox Common Name (eg, YOUR name) []:Teambox Address Ya tenemos nuestro certificado raíz. Generación de la llave privada. Generamos una llave privada que emitirá la solicitud del certificado web seguro. Para esto desde nuestra terminal ejecutaremos la utilidad openssl con los siguientes parámetros: genrsa -des3 2048: Nos generamos una clave RSA con un algoritmo de cifrado des3. -out teambox.pem: le indicamos que la clave privada se almacene en el fichero teambox.pem -passout pass:teambox : le indicamos la contraseña de la clave privada es 'teambox' openssl genrsa -des3 -out teambox.pem -passout pass:teambox 2048 Generating RSA private key, 2048 bit long modulus e is (0x10001) Solicitud certificado SSLWEB Ahora, con la clave privada, nos generamos una solicitud de certificado digital para nuestra web, que será autentificado por nuestro certificado raíz. Desde nuestra terminal como root ejecutaremos la utilidad openssl con los siguientes parámetros: req -new: indicamos que genere una petición de certificado -subj "/O=Teambox, S.L./OU=Teambox/CN=www.teambox.local": Va a contener los datos a quien pertenece el certificado. Para ello ponemos entre comillas cada uno de los apartados que le identifican separados por '/'. -key teambox.pem: Esta es la clave privada del certificado -passing pass:teambox: La contraseña de la clave privada -out SolicitudCertificadoWEB.pem: SolicitudCertificadoWEB.pem El fichero que contiene la petición se almacenará en openssl req -new -subj "/O=Teambox, S.L./OU=Teambox/CN=www.teambox.local" -key teambox.pem -passin pass:teambox -out SolicitudCertificadoWEB.pem Y generamos en un fichero de texto la configuración del certificado que vamos a emplear: basicconstraints=critical, CA:FALSE, para que el certificado cumpla con la normativa X509v3 y con la RFC3280 y además no va a ser una Autoridad Certificadora. extendedkeyusage=serverauth, el propósito es para un servidor WEB. echo "basicconstraints = critical,ca:false " > configsslweb.cfg echo "extendedkeyusage = serverauth" >> configsslweb.cfg cat configsslweb.cfg basicconstraints = critical,ca:false extendedkeyusage = serverauth Página 22 de 45
23 Firma del certificado En estos momentos, con el Certificado Raíz, la solicitud de certificado y el fichero de certificación ejecutamos la utilidad openssl con los siguientes parámetros: x509: orden multipropósito, la usaremos para firmar la petición de certificado - CA cacert.pem: certificado raíz. - CAkey cakey.pem: clave privada del certificado raíz. -passin pass:teambox clave de nuestro certificado raíz. -req -in SolicitudCertificadoWEB.pem: le indicamos de dónde tiene que tomar los datos del peticionario del certificado -days 3650: indicamos que el certificado no expire en 10 años -extfile configsslweb.cfg : indicamos el fichero de configuración del certificado -sha1: se empleará algoritmo de cifrado SHA -CAcreateserial: Autonumeración del certificado emitido -out servidor-cert.pem: certificado firmado. openssl x509 -CA../CA/CAcert.pem -CAkey../CA/CAkey.pem -passin pass:teambox -req -in SolicitudCertificadoWEB.pem -days extfile configsslweb.cfg -sha1 -CAcreateserial -out servidor-cert.pem Signature ok subject=/o=teambox, S.L./OU=Teambox/CN=www.teambox.local Getting CA Private Key ls -l total 16 -rw-r--r-- 1 teambox teambox :00 -rw-r--r-- 1 teambox teambox :45 -rw-r--r-- 1 teambox teambox :54 -rw-r--r-- 1 teambox teambox :50 configsslweb.cfg servidor-cert.pem SolicitudCertificadoWEB.pem teambox.pem Configurar Apache Una vez generado el certificado para nuestra web, configuramos apache para servir páginas web seguras. Como ya tenemos instalado apache, comenzaremos habilitando el módulo SSL para conexiones seguras. sudo a2enmod ssl [sudo] password for teambox: Enabling module ssl. See /usr/share/doc/apache2.2-common/readme.debian.gz on how to configure SSL and create selfsigned certificates. Run '/etc/init.d/apache2 restart' to activate new configuration! Modificamos el fichero /etc/apache2/ports.conf para que acepte peticiones por el puerto 80 y por el puerto 443. NameVirtualHost *:80 Listen 80 <IfModule mod_ssl.c> # SSL name based virtual hosts are not yet supported, therefore no # NameVirtualHost statement here Listen 443 </IfModule> Modificamos el fichero /etc/apache2/sites-available/default-ssl para indicar dónde están los certificados SSL del servidor, que previamente hemos copiado a la carpeta /etc/ssl/certs y /etc/ssl/private. Página 23 de 45
24 sudo cp /home/teambox/certificados/teambox/servidor-cert.pem./certs/ sudo cp /home/teambox/certificados/teambox/teambox.pem./private/ sudo nano /etc/apache2/sites-available/default-ssl # A self-signed (snakeoil) certificate can be created by installing # the ssl-cert package. See # /usr/share/doc/apache2.2-common/readme.debian.gz for more info. # If both key and certificate are stored in the same file, only the # SSLCertificateFile directive is needed. # SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem # SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key SSLCertificateFile /etc/ssl/certs/servidor-cert.pem SSLCertificateKeyFile /etc/ssl/private/teambox.pem Creamos un enlace simbólico de la página segura sudo ln -s../sites-available/default-ssl 001-default ls -l total 0 lrwxrwxrwx 1 root root : default ->../sites-available/default lrwxrwxrwx 1 root root : default ->../sites-available/default-ssl Reiniciamos apache. sudo /etc/init.d/apache2 restart * Restarting web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using for ServerName... waiting apache2: Could not reliably determine the server's fully qualified domain name, using for ServerName Apache/ mod_ssl/ (Pass Phrase Dialog) Some of your private key files are encrypted for security reasons. In order to read them you have to provide the pass phrases. Server :443 (RSA) Enter pass phrase: teambox OK: Pass Phrase Dialog successful. [ OK ] Comprobamos que el servicio funciona correctamente. Página 24 de 45
25 Para evitar tener que teclear la contraseña del certificado SSL cada vez que reiniciamos el servicio de apache realizamos las siguientes modificaciones: Editar el archivo de configuración de apache2 (httpd.conf) y sustituimos el siguiente comando: SSLPassPhraseDialog builtin SSLPassPhraseDialog exec:/bin/clave.sh Creamos el shellscript /bin/clave.sh que deberá contener: #!/bin/sh echo "teambox" Clave de nuestra CA Y le damos permisos de ejecución sudo chmod 755 /bin/clave.sh 5 Instalación y configuración de Teambox Una vez finalizada la instalación de los servicios de red, iniciamos el proceso de instalación de Teambox en el dominio teambox.local en la ubicación /var/www/teambox.local Lo primero que se debe hacer es crear los directorios donde se alojarán los ficheros que componen la aplicación. cd /var/www/ ls index.html sudo mkdir teambox.local sudo mkdir teambox.local/logs 5.1 Instalación de dependencias Una vez creado los directorios de trabajo, instalamos las dependencias necesarias descritas en el punto 2.- Descripción del Proyecto, del presente documento. Las instalaciones las debemos realizarlas como 'root': apt-get update Obj lucid Release.gpg Obj lucid-updates/multiverse Sources Descargados 2153kB en 1min 7s (31,9kB/s) Leyendo lista de paquetes... Hecho apt-get install build-essential ruby ruby-dev irb libmysqlclient15-dev sqlite3 libsqlite3-dev libcurl4-openssl-dev libopenssl-ruby libpcre3-dev libxml2-dev libxslt-dev Procesando disparadores para libc-bin... ldconfig deferred processing now taking place Abandonamos la cuenta de root e instalamos el JDK de java6 con sudo. sudo apt-get install sun-java6-jdk Instalamos MySQL con sudo. sudo apt-get install mysql-server Ahora descargaremos el resto de dependencias: Rubygems y Sphinx. wget Página 25 de 45
26 sphinx-0.9.9/ wget mkdir sphinx tar -C sphinx -zxvf sphinx tar.gz mkdir rubygems tar -C rubygems -zxvf rubygems tgz Procederemos con la instalación de Rubygems cd rubygems/ sudo su cd rubygems-1.3.7/ ruby setup.r ln -s /usr/bin/gem1.8 /usr/bin/gem Una vez finalizada la instalación de Rubygems, instalaremos bundler. gem install bundler Compilaremos Sphinx. cd sphinx cd sphinx-0.9.9/ make make install Instalaremos Ruby Enterprise Edition para una mejor productividad de Ruby siguiendo las instrucciones descritas en wget dpkg -i ruby-enterprise_ _i386_ubuntu10.04.deb /usr/local/bin/passenger-install-apache2-module Editaremos la configuración de apache para habilitar los módulos de Passenger nano /etc/apache2/mods-available/passenger.conf PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger PassengerRuby /usr/local/bin/ruby nano /etc/apache2/mods-available/passenger.load LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger3.0.2/ext/apache2/mod_passenger.so Habilitaremos mod_passenger en apache a2enmod passenger Enabling module passenger. Run '/etc/init.d/apache2 restart' to activate new configuration! /etc/init.d/apache2 restart * Restarting web server apache2 [ OK ] 5.2 Instalación Teambox Una vez resueltas las dependencias del apartado anterior, y siguiendo los manuales de la comunidad de Teambox, se iniciará la instalación. Descargaremos a nuestro directorio los fuentes de Teambox desde los repositorios de Git cd /var/www/teambox.local sudo git clone git://github.com/teambox/teambox.git Esto creará un nuevo directorio denominado teambox con las últimas fuentes elaboradas. Página 26 de 45
27 Procedemos a instalarlas. cd teambox/ sudo bundle install Configuración de Teambox Una vez instaladas las fuentes desde los repositorios oficiales, se creará una instancia de base de datos en MySQL y se le otorgará los permisos necesarios. mysql -u root -proot Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 40 Server version: ubuntu12.10 (Ubuntu) Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create database teamboxdb; mysql> grant usage on *.* to identified by 'root'; mysql> grant all privileges on teamboxdb.* to mysql> exit Se edita el fichero de configuración de base de datos de Teambox. Ubicado en el directorio /var/www/teambox.local/teambox/config/database.yml cp config/database.example.yml config/database.yml nano config/database.yml Buscamos los parámetros de production y cumplimentamos el usuario myslq, su password y el nombre de la bbdd. Empleamos éste apartado ya que la instalación es un software preparado para trabajar en producción. En caso de ser un servidor de pruebas cumplimentaríamos otras etiquetas. production: adapter: mysql host: localhost username: root password: root database: teamboxdb Creamos el esquema de la base de datos. bundle exec rake db:create db:schema:load RAILS_ENV=production El fichero config/teambox.yml contiene las opciones de configuración genéricas de la instalación. nano config/teambox.yml Nombre de nuestro dominio app_domain: teambox.local Si vamos a ofrecer nuestra página mediante SSL debe de estar activado. Solo version Premium. No habililitado en version Community. secure_logins: false Activamos esta opción si queremos habilitar time tracking. Como esta característica está en desarrollo la desactivo. allow_time_tracking: false Deshablitamos la búsqueda. Opción por defecto allow_search: false Y por último seleccionamos nuestra zona horaria time_zone: UTC Página 27 de 45
28 Este proyecto no contempla un servicio de correo, por lo tanto configuraremos el envío y recepción de con una cuenta de correo de un tercero. allow_outgoing_ true smtp_settings: :domain: :address: :port: :authentication: :user_name: :password: google.com smtp.google.com 587 :plain sateambox uocteambox # the domain your s will come from # SMTP server used to send s # Set to true when using Gmail :enable_starttls_auto: true :safe_from: false Configuraremos el fichero vhosts de Apache. sudo nano /etc/apache2/sites-available/ Y copiamos lo siguiente al final del sitio por defecto. Con esto creamos el host virtual que servirá las peticiones a 'teambox.local'. # Configuracion del Virtual Host para Teambox <VirtualHost teambox.local:80> Options +Indexes ServerAdmin ServerName teambox ServerAlias teambox.local *.teambox.local teambox *.teambox DocumentRoot /var/www/teambox.local/teambox/public RailsEnv production <Directory "/var/www/teambox.local/teambox/public"> Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all Options -MultiViews </Directory> </VirtualHost> La descripción de las diferentes opciones es: ServerAdmin: Dirección de que el servidor incluye en los mensajes de error que se envían al cliente. En la configuración del servidor es la creada para la plataforma teambox. ServerName: Nombre de host que el servidor usa para identificarse. ServerAlias: Nombre alternativo del host principal, por si es accesible desde más de un DNS diferente. DocumentRoot: Directorio principal que contiene la estructura de directorios visible desde la Web. Railsenv production: Seleccionamos el entorno por defecto de Rails como 'production' Directory "/var/www/teambox.local/teambox/public": Engloba a un grupo de directivas que se aplicarán solamente al directorio del sistema de ficheros especificado y a sus subdirectorios. Options Indexes FollowSymLinks: Permite seguir los enlaces simbólicos. AllowOverride All: Habilita el uso de.htaccess Order allow,deny: Se controla el acceso del servidor usando el nombre del servidor y la IP del cliente consultando primero en la lista de 'allow' y después en la de 'deny' Allow from all: Permite acceder a todo el mundo Página 28 de 45
29 Options -MultiViews: Permite negociar los contenidos con el navegador para elegir la mejor representación de acuerdo con sus preferencias. Cargamos la nueva configuración sudo /etc/init.d/apache2 reload * Reloading web server config apache2 apache2: Could not reliably determine the server's fully qualified domain name, using for ServerName [ OK ] Configuraremos el fichero httpd.conf para eliminar la alerta apache2: Could not reliably determine the server's fully qualified domain name al iniciar el servicio. sudo nano /etc/apache2/httpd.conf #ServerName ServerName teambox.local Reiniciamos apache sudo /etc/init.d/apache2 restart Arrancamos el servidor Rails para realizar una prueba de concepto. sudo rails server -e production [sudo] password for teambox: DEPRECATION WARNING: RAILS_ENV is deprecated. Please use ::Rails.env. (called from [] at /usr/local/lib/ruby/gems/1.8/bundler/gems/choices-675faa587554/lib/choices.rb:19) => Booting Mongrel => Rails application starting in production on => Call with -d to detach => Ctrl-C to shutdown server La aplicación Teambox está operativa. Para facilitar la navegación desde otros equipos de red, se redireccionan todas las peticiones al puerto 3000, desde donde está sirviendo Rails. Esto es posible de varias formas, en este caso editaremos o creamos el fichero de configuración.htaccess y le añadimos una petición de redirección. sudo nano /var/www/teambox.local/teambox/public/.htaccess Redirect 301 / Página 29 de 45
30 Porqué no servimos sobre SSL Después de muchos errores y pruebas para poder servir Teambox de forma segura, se encuentran los siguientes post relacionados con el tema: Éste está datado el 16 de Diciembre de 2009, en el cual https sólo está disponible para versiones premium. En este otro post de 4 de Mayo de 2011, se vuelve a reincidir sobre el tema, de cómo añadir SSL a dominios propios. El post es cerrado por el administrador ya que está siendo discutido con 'Charles'? 6 Personalización de la distribución Para mejorar la experiencia del usuario, se personalizará la distribución añadiendo en la solución de software datos de ejemplo que ayuden a comprender el alcance y la filosofía de trabajo de Teambox. Una página de bienvenida se abrirá de forma automática con información genérica de la distribución y unas instrucciones para poner en marcha el servidor de Teambox. En el escritorio se creará un botón que arrancará de forma manual el servidor de Teambox. Página 30 de 45
31 Finalmente para dotar a esta distribución de una personalidad propia, se rediseñará el aspecto gráfico del software, personalizando el fondo de pantalla y detalles gráficos del aspecto de las ventanas. 6.1 Datos de ejemplo Para generar datos de ejemplo con usuarios, conversaciones y tareas, se puede realizar de forma automática ejecutando bundle con los siguientes parámetros 'bundle exec rake db:seed' cuando la instalación esté finalizada. Desde una consola ejecutaríamos: sudo bundle exec rake db:seed Pero para esta distribución, se van a generar datos de ejemplo de forma manual. Se adjuntan algunas capturas de pantalla para ilustrar los primeros pasos. Debemos crear el administrador del proyecto Página 31 de 45
32 Una vez finalizado. Se debe crear el primer proyecto Y posteriormente invitar a las personas que integran el proyecto Generamos la lista de tareas que componen el proyecto Página 32 de 45
33 A partir de aquí, el proceso de trabajo es muy intuitivo. Se adjuntan capturas genéricas que se hubiesen generado en el desarrollo de este proyecto. Página 33 de 45
34 Página 34 de 45
35 6.2 Página de bienvenida. La página de bienvenida se abrirá de forma automática con información genérica de la distribución y unas instrucciones para poner en marcha el servidor de Teambox. En la dirección /var/www/ se ha creado un directorio denominado bienvenida, en el cual se ha generado una web estática. Esta web suministra información genérica sobre el proyecto y los requisitos de funcionamiento, además de unas indicaciones sencillas de cómo funciona la aplicación Teambox. La página nos da acceso a los siguientes contenidos: 1.- Antecedentes Las organizaciones que hayan emprendido algún proyecto saben lo difícil que resulta hacer un seguimiento detallado. Más difícil si cabe si el proyecto depende de contribuciones de diferentes personas, si no están todas en el mismo lugar físico, y más si este equipo de trabajo lo realiza de forma altruista. El responsable del proyecto necesita saber el estado real de éste en cada momento: que actividades están en plazo, cuales van retrasadas y los porqués de estos retrasos. Este responsable necesita mantener un canal constante de comunicación con los colaboradores, y darle visibilidad acerca del proyecto al resto de la organización. Para mejorar la visibilidad, gestión y productividad del proyecto, y para mostrar de una manera clara el estado real de cada actividad, existen en el mercado aplicaciones colaborativas que facilitan estas labores Esta distribución recoge a Teambox como plataforma colaborativa. Teambox se distribuye de dos formas: como aplicación SaaS(Software as a service), o para instalarla en un servidor local. La versión de instalación en servidores propios se distribuye bajo licencia GNU, lo que nos permite modificar, adaptar y redistribuir la aplicación. El objetivo de este TFC es obtener una LiveCD con Teambox operativo, para poder probarlo o instalarlo en un servidor de una forma fácil y asequible a cualquier organización. Página 35 de 45
36 2.- Puesta en Marcha Prerrequisitos Para que la distribución funcione correctamente, es necesario que se ejecute la livecd en una red sin servidor DHCP, ya que interferiere en el funcionamiento de éste. La distribucion live contiene su propio servidor de DHCP y de DNS. Para que Teambox esté completamente operativo, es necesario disponer de conexión con Internet. La puerta de acceso/router debe estar configurada en la direccion con el servicio de DHCP deshabilitado. Arrancar el servicio Teambox 1.- Hacer doble clic sobre el icono "Teambox Server" que se encuentra en el escritorio. 2.- Una consola se abrirá y mostrará el estado del servidor. Tenga paciencia, debido a que estamos ejecutando la LiveCD en memoria, el servicio se demora, aunque los mensajes de información indiquen que está funcionando. 4.- Puede acceder a la aplicación haciendo clic aquí, o desde otro equipo en red apuntado a 3.- Para detener el servidor haga foco sobre la consola y pulse 'Ctrl+C'. 3.- Manuales de Uso Se construye una página con una breve descripción del funcionamiento del software, y un video promocional. 4.- Proyecto TFC Enlace a este documento, en formato Portable Document File 6.3 Inicio del servidor Teambox En el escritorio se crea un botón que arranca el servidor de Teambox. El motivo de tener que lanzar de forma manual este servicio, es para acelerar el proceso de arranque de la distribución ya que al realizarlo de forma automática el proceso de inicio se demora tanto tiempo que parece que el equipo está congelado. Cuando realmente está iniciando los servicios de Rails. El botón arrancará el servidor de Rails sin tener que autentificarnos con sudo. Lo construiremos de la siguiente forma: Creamos en el directorio /home/teambox un script en shell que lance el servidor de Rails para que ejecute Teambox. nano teambox.sh #!/bin/bash # # TFC GNU-LINUX Teambox Software Appliance # # # Script que ejecuta los servicios de Rails # y lanza la aplicacion colaborativa Teambox # cd /var/www/teambox.local/teambox rails server -e production Le damos permisos de ejecución chmod 755 teambox.sh Y le cambiamos el propietario a root teambox:~$ sudo chown root:root teambox.sh Página 36 de 45
37 ls -l teambox.sh -rwxr-xr-x 1 root root :50 teambox.sh Editamos el fichero de configuración de sudoers para que el usuario teambox pueda ejecutar el script que acabamos de crear como superusuario sin necesidad de poner contraseña. Se añade lo siguiente al final del fichero. sudo nano /etc/sudoers # Para inicial el script como superusuario sin poner contraseña teambox ALL=NOPASSWD: /home/teambox/teambox.sh Y se le crea un acceso directo en el escritorio. nano TeamboxServer.desktop #!/usr/bin/env xdg-open [Desktop Entry] Version=1.0 Type=Application Terminal=true Icon[es_ES]=gnome-panel-launcher Name[es_ES]=Teambox Server Exec=sudo "/home/teambox/teambox.sh" Name="Teambox Server" Icon=/var/www/bienvenida/img/Teambox.png Y en último lugar se guarda el fichero y se le otorgan permisos de ejecución. chmod 755 TeamboxServer.desktop En caso de poner el equipo en producción, sería necesario que este servicio arrancase de forma automática. Existen varias forma de hacerlo, una de ellas sería añadir al autoarranque del usuario teambox este script. En la distribución entregada no está creado. Sería necesario editar o crear el fichero ~/.config/autostart/teambox.desktop y añadir lo siguiente: [Desktop Entry] Type=Application Exec=sudo "/home/teambox/teambox.sh" Hidden=false NoDisplay=false X-GNOME-Autostart-enabled=true Name[es_ES]=TeamboxServer Name=TeamboxServer Comment[es_ES]= Teambox Server Comment= 6.4 Arranque desatendido Por un lado, configuraremos la Pantalla de Acceso para que el usuario inicie sin necesidad de contraseñas, y por otro lado, una vez que el sistema inicia, un navegador arranca de forma automática con una página que contiene información de la distribución. Se corrige la configuración de la red, y se programa en un script, ya que no se conserva la configuración establecida en el apartado Servicios de red de este documento. Inicio desatendido Para que el equipo se inicie sin necesidad de contraseñas iniciales, se configurará el inicio para acceder de forma automática en nuestro escritorio sin necesidad de introducir nombre y contraseña de usuario en la ventana de bienvenida. Para ello se realizarán las siguientes acciones: Página 37 de 45
38 1.- Sistema > Administración > Pantalla de acceso. 2.- Introducimos nuestro password. 3.- Seleccionamos 'Acceder como' automáticamente. Los cambios se aplicarán cuando reiniciemos nuestro sistema. Inicio de navegador web Para que el usuario final tenga acceso directo al manual de funcionamiento que se distribuye junto con la distribución, se modificará la configuración de inicio del usuario Teambox, para que arranque el navegador y abra por defecto la página 'bienvenido.html'. Editaremos o crearemos el fichero ~/.config/autostart/firefox.desktop y añadiremos lo siguiente: sudo nano.config/autostart/firefox.desktop [Desktop Entry] Type=Application Exec=firefox 'http://localhost/bienvenida/index.html' Hidden=false NoDisplay=false X-GNOME-Autostart-enabled=true Name[es_ES]=Firefox Name=Firefox Comment[es_ES]= Comment= Autoconfiguración de red En las pruebas de arranque realizadas, se detecta que la configuración de red no se conserva, sino que se establece por asignación dinámica. Afectando al funcionamiento de los servicios de red como DNS y DHCP configurados en esta distribución. Se realiza un script que se ejecuta en el proceso de inicio del usuario teambox, que modifica el fichero /etc/network/interfaces, configurándolo con la dirección estática /24 tal y como viene reflejado en el apartado Servicios de red de este documento. Editaremos o crearemos el siguiente archivo /etc/network/interfaces.seg y copiamos el siguiente contenido sudo nano /etc/network/interfaces.seg auto eth0 iface eth0 inet static address netmask gateway network broadcast Página 38 de 45
39 Creamos el script que automatiza el proceso de reconfiguración de la red y de los servicios asociados a ella de una forma sencilla. nano lanconfig #!/bin/bash # # TFC GNU-LINUX Teambox Software Appliance # # Script que reconfigura el dispositivo de red # y los servicios asociados a ella # echo "Iniciando..." # Paramos los servicios de red /etc/init.d/networking stop # Copiamos la nueva configuración de red rm /etc/network/interfaces cp /etc/network/interfaces.seg /etc/network/interfaces # Arrancamos los nuevos servicios de red /etc/init.d/networking restart # Reiniciamos los servicios asociados /etc/init.d/dhcp3-server restart /etc/init.d/bind9 restart /etc/init.d/apache2 restart echo OK. Reconfiguracion finalizada Le damos permisos de ejecución chmod 755 lanconfig Y se le cambia el propietario a root teambox:~$ sudo chown root:root lanconfig ls -l lanconfig.sh -rwxr-xr-x 1 root root :23 lanconfig Se mueve a la carpeta /etc/init.d/ sudo mv lanconfig /etc/init.d/ Se configura para que arranque en /etc/rc.local añadiendo lo siguiente sudo gedit /etc/rc.local /etc/init.d/lanconfig exit Personalización interfaz gráfica Para dotar a esta distribución de una personalidad propia, se modifica el fondo de pantalla y algunos detalles del aspecto de las ventanas. Página 39 de 45
40 Pulsando el botón derecho del ratón sobre el escritorio cambiamos el fondo de escritorio seleccionando un tapiz que hemos realizado para esta distribución y modificamos el aspecto y color de las ventanas para adecuarla a las tonalidades escogidas en el tapiz. 7 Finalización de la distribución Una vez finalizado el proceso de instalación de los servicios de red, instalado el software colaborativo Teambox, y comprobado que todos los requisitos del software se cumplen,vamos a proceder a la obtención de la ISO para ser distribuida. Eliminaremos los paquetes innecesarios y los rastros de descarga de paquetes, y generaremos el fichero teambox.iso. Finalmente modificaremos la imagen obtenida para personalizar el arranque de la distribución. 7.1 Eliminar paquetes innecesarios Para aligerar la distribución final, se eliminan los siguientes paquetes que no son necesarios para el objetivo final de nuestra distribución. sudo apt-get remove pitivi rhythmbox totem transmission-* f-spot empathy gwibber gnome-games-common gbrainy sudo apt-get remove simple-scan sudo apt-get remove openoffice.org-* Se eliminan además rastros de la instalación y de descargas de paquetes desde el navegador. rm -rf /home/teambox/descargas/* sudo rm Desktop Página 40 de 45
41 7.2 Obtención del LiveCD Previamente al proceso de creación de la distribución, y para que nos permita el autoarranque con el usuario Teambox modificamos el fichero /usr/bin/remastersys y comentamos la línea rm -rf $WORKDIR/dummysys/etc/gdm/custom.conf sudo gedit /usr/bin/remastersys... rm -rf $WORKDIR/dummysys/etc/gdm/gdm.conf-custom # rm -rf $WORKDIR/dummysys/etc/gdm/custom.conf Linea a comentar ls $WORKDIR/dummysys/var/lib/apt/lists grep -v ".gpg" grep -v "lock"... Para evitar que la aplicación gvfsd-metadata nos dé error en la LiveCD, borramos la siguiente carpeta de nuestro usuario. sudo rm -rf ~/.local/share/gvfs-metadata Comprobaremos que no tenemos ninguna aplicación innecesaria en ejecución, tales como: navegadores, procesadores de texto, reproductores de música, etc. Ya estamos en condiciones de generar nuestra distribución, desde una consola ejecutaremos lo siguiente: sudo remastersys backup teambox.iso Al cabo de unos minutos tendremos la distribución preparada para ser grabada. 7.3 Personalización de la ISO Una vez obtenida la ISO de la distribución finalizada vamos a modificar el GRUB de arranque para que los menús que aparecen estén traducidos al castellano, y además el fondo de pantalla este acorde con la distribución que acabamos de finalizar. Emplearemos la aplicación ISO Master para modificar los ficheros isolinux.cfg y splash.png, que contienen el menú de arranque y su gráfico asociado. Iniciamos la aplicación ISO Master y modificamos el contenido de las carpetas : Abrimos la aplicación ISO Master Abrimos la ISO de Teambox que acabamos de obtener. Navegamos hasta la carpeta /isolinux/ y extraemos el fichero 'isolinux.cfg'. Una vez extraído eliminamos de la distribución 'isolinux.cfg' y 'splash.png' Página 41 de 45

References: resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 Resolución 
 Resolución