SysAdmin

Gestionar configuración personalizada de vhost en plesk 10.4.4

0

Lo reconozco: con todo el tiempo de experiencia que tengo en administración de sistemas Linux, el tiempo que llevo administrando servidores web es bastante pequeño para lo que cabría esperar. Últimamente, en mi faceta de freelance, estoy trabajando bastante con un chaval que tiene montados un buen conjunto de páginas webs, y hoy me he encontrado con un problema bastante trivial pero que me ha complicado un poco la existencia debido a que la mayoría de la configuración básica la realizamos a través de Plesk por requerimiento de él.

Estaba instalando una wiki para temas de gestión documental cuando me he tropezado con la opción de implantar lo que ellos llaman Short URLs. En el paso final especifican que hay que incluir una línea de tipo:

Alias /wiki /path/to/your/wiki/index.php

El problema viene cuando la wiki está instalada en un subdominio y el hosting se comparte con el dominio principal. Hay que tocar la configuración del host virtual, pero si lo hace “a la brava” nos encontraremos con que la siguiente vez que queramos actualizar la configuración Plesk sobreescribirá nuestros cambios. Así que me pongo a mirar y veo soluciones que indican que hay que crear un fichero vhost.conf, pero no terminaba de funcionar…

Finalmente resulta que tal y como se puede ver en el Changelog de Plesk 10.4.4 han vuelto a cambiar la gestión de la configuración de subdominios. Ahora cada uno de ellos tiene su propio directorio en el directorio de virtual hosts y es ahí donde hay que crear el fichero vhost.conf (en el subdirectorio conf). Una vez creado se le indica a Plesk que regenere la configuración:

sudo /opt/psa//admin/sbin/httpdmng --reconfigure-domain <subdominio.dominio.com>

Y, sorprendentemente, tas esto hay que indicarle a apache que vuelva a cargar la configuración:

sudo apache2ctl graceful

Digo que sorprendentemente porque bajo mi punto de vista si el sistema regenera la configuración lo lógico sería que automáticamente enviara a apache la orden de recargar.

Los modelos actuales de monitorización son malos?

0

Hace un par días, un buen amigo me pasó un artículo llamado, literalmente, Why monitoring sucks – for now. El título me resultó llamativo y me apresuré a empezar a leer. Dos párrafos después me di cuenta de que la persona que estaba escribiendo ese artículo apenas tiene idea de lo que está hablando… ¿O sí?. El autor, Cliff Moon, parece un activo desarrollador que además y casualmente es CTO de Boundary, una empresa que se dedica a monitorización. Aquí hay que tener cuidado con 2 cosas:

  • Puede estar haciendo publicidad de su producto. Ojito, porque el artículo puede no ser imparcial, y sinceramente creo uqe para escribir un artículo con una afirmación afirmación así hay que procurar serlo lo máximo posible.
  • El rol principal de este hombre parece el de desarrollador, no del de SysAdmin. Y esto es un detalle muy importante a tener en cuenta, porque aunque hay desarrolladores que desempeñan muy bien las labores de administración de sistemas, la pura realidad es que la mayoría de los desarrolladores son administradores mediocres (¡ojo! y viceversa).

Sin ni siquiera entrar en materia de lo que dice: 3 casos prácticos

Quizá el caso en el que se hace más patente que el artículo que escribe este hombre es meramente promocional es el de mi actual empresa. Hace 5 años casi no se hacía monitorización sobre los sistemas (algo se hacía, pero manualmente, de forma muy básica y un par de veces al día). Aquello era un desastre: horas extra casi todos los días, verificaciones y más verificaciones de todos los datos porque nunca se estaba seguro de si los procesos habían ido bien o no, el personal quemado, porque a quien le tocaba de tarde normalmente no salía con menos de 1 o 2 horas de retraso, o incluso algunos días a las tantas de la mañana. Imaginad cuando había que instalar un nuevo sistema o actualizar algún software. Digamos que entre un 110% y un 140% de la jornada laboral se destinaba a corregir errores. Hasta que se empezó a implantar monitorización. Este es un caso especialmente “gracioso”, ya que el sistema de “monitorización” que se implantó no es más que un conjunto de scripts que nos envían mails cuando creen que falla algo, sin más. Ni Nagios, ni nada de nada, unos scripts pelados y mondados. Eso se complementó con un sistema arcaico de recolección de estadísticas que se van pintando en una gráfica para poder tener idea de la evolución del uso de CPU, RAM, cómo están de llenos los FileSystems y 4 chorradas básicas por el estilo. Tras desplegar todo esto, el tiempo que se destina a corregir errores se ha reducido hasta el 30%, más o menos. Encima la mayoría de ese tiempo se atribuye a bugs de software. Hay que tener en cuenta, además, que antes habían 5 personas en el equipo y ahora 3, por lo que ese 30% es en realidad aún menor. Esto con un sistema que es la antítesis del tiempo real (de entrada los emails de alarma de envían cada 5 minutos), y en uno de los entornos en los que es más crítico el tiempo real: mercados de valores.

Si nos remontamos más atrás en el tiempo, en otro sitio en el que trabajábamos con Nagios. Éramos unas 7 personas para administrar más de 500 servidores. OJO: hay que tener en cuentan que no habían cosas modelo “cloud”. Salvo 3 o 4 clusters relativamente pequeños (2 o 3 nodos) de bases de datos, el resto eran plataformas independientes entre sí. Tratad de imaginar la locura que puede ser mantener todos esos sistemas independientes con “tan poca gente”… Ninguno. Si bien es verdad que no nos aburríamos, era raro que algún día fuera realmente aogbiante.

Cuando trabajaba en otra empresa, tiempo atrás, para grandes clientes, se carecía de proceso de monitorización. Sólo se comprobaba el estado de los sistemas 1 vez al día. Nunca conseguimos bajar de las 100 incidencias abiertas.

Dejo al lecto que saque sus propias conclusiones, sin más preámbulo, paso a analizar lo que este hombre comenta en su post.

Modelo OODA e integración

OODA son las siglás de Observación, Orientación, Decisión y Actuación (afortunadamente coinciden en inglés y castellano :-) ). Es un modelo que nació en el ámbito estratega militar. Me parece una buena idea utilizar un modelo de estas características para la monitorización del sistema, pero discrepo con su visión sobre las herramientas de monitorización. Me explico: según comenta, Nagios es una herramienta que sólo cubre la parte de decisión y acción, y esto es una verdad a medias.

Efectivamente, Nagios “pelado” o “de casa” es así, pero que yo sepa hoy en día nadie lo utiliza de esta forma. La gran ventaja del software libre es su sencilla modificación del código. Hoy en día lo más habitual es disponer de Nagios con un sistema de recolección de datos (a la manera collectd, cubriendo Observación), un sistema de graficación (cubriendo la Orientación) y una wiki, de tal forma que no sólo tienes un modelo OODA completo sino además complementado con información sobre cada evento accesible a un sólo cilck. Si sabes decidir cómo monitorizar tu sistema y sabes instalar Nagios, sabes integrar estos módulos, si no, hay miles de tutoriales en internet, y si aún así te da pereza, tienes soluciones muy eficientes como Merlin/Ninja u OPS View que basan su código en Nagios pero que han resuelto este tipo de problemas.

¿Quieres algo que se instala con 2 clicks? Si bien el proceso de instalación de este tipo de plataformas está medianamente simplificado requiere de un cierto nivel de conocimientos de administración de sistemas. Pero yo me haría otra pregunta: si has dicho que sí a la primera pregunta, ¿realmente estás capacitado para planificar, diseñar desplegar una plataforma de monitorización?

Monitorización en tiempo real

¿De veras quieres monitorización en tiempo real? Cuando vi cómo este hombre clamaba las bondades de la monitorización de datos en tiempo real casi me caigo de la silla. A nivel teórico se vende muy bien: tienes todos tus datos aquí y ahora. A nivel de rendimiento no estoy tan seguro de que sea una buena idea.

Este hombre clama que la “nueva generación” de monitorización es aquella que que está diseñada para las plataformas altamente escalables. Sin embargo también insiste que los datos deben tomarse en tiempo real (puntos 3 y 4). Para mi esto es contradictorio. Pongamos el ejemplo de Facebook: un gigante que ha tenido que ir escalando rápidamente dado el volumen de petición por segundo que atiende. Tanto es así, que para optimizar la relación gastos/ingresos han modificado la implementación de la pila TCP/IP en el kernel linux de sus servidores web para minimizar el payload de pooling para atender nuevas conexiones. Me explico en castellano: tenemos un hilo que comprueba si en el puerto 80 hay una nueva petición de apertura de sesion. Si la encuentra, instancia un nuevo hilo, que será el que atenderá esa nueva sesión. Este sistema da por hecho que puede haber una sesión o no, por lo que en vez de crear directamente una sesión utiliza un hilo intermediario que se asegura de que realmente hay que hacerlo, y es bastante eficiente en cargas de trabajo bajas y medias. En cargas muy altas de trabajo casi merece la pena crear directamente la sesión y si no hay nada que atender destruirla, ya que casi siempre habrá una conexión pendiente. Facebook ha asumido este segundo modelo sólo por ahorrarse apenas unas operaciones elementales, pero que se repiten tantas veces por segundo que supone un aumento sensible de rendimiento. Imaginad que ahora llega este hombre y le dice que sus servidores web tienen que mandarle sus datos de monitorización en tiempo real.  Todo el rendmimento que han ganado desarrollándose su propia implementación del protocolo TCP/IP (con el dinero que cuesta eso), o incluso más, se lo va a “comer” el sistema de monitorización recolectando datos. Así que si quieres crecer, ve preparando el talonario, porque los márgenes de beneficio van a ser muy ajustados.

Por otro lado, no me quiero imaginar cuántos servidores de recolección de datos de monitorización se necesitarían para monitorizar sólo el frontend web de Facebook… ¡Y mover esa base de datos!

En resumidas cuentas: la monitorización en tiempo real sólo es sostenible en una plataforma pequeña, conforme ésta crece los costes comienzan a ahogar. El tiempo real realmente no es necesario si se diseña un timing de recolección de datos en función de la criticidad del servicio lo suficientemente bien pensado e implementado. La sensación de la necesidad de tiempo real suele derivar de la incapacidad (de la persona que ha de decidirlo) de:

  • Eestablecer correctamente la criticidad de los elementos que conforman su sistema.
  • Definir qué parámetros son los que realmente indican la evolución del sistema.

Inteligencia del sistema de monitorización

No nos engañemos, Nagios y derivados al final son meros recolectores y visualizadores de información. La verdadera inteligencia del sistema se encuentra en los scripts que recolectan y envían la información. De hecho son los scripts los que realmente deciden si se genera una alarma o no, por lo que si quieres si quieres un sistema inteligente “sólo” tienes que implementarla en tu script.  Puedes jugar con fórmulas estadísticas que detecten ciertas tendencias en la variaciones, por ejemplo. Al tener libertad de programar en el lenguaje que quieras esto no debería ser un problema.

Conclusión

Cliff Moon, entre otras cosas, es un buen comercial. Con una aparente poca experiencia en administración de sistemas está tratando de crear una necesidad al cliente potencial de una forma razonada, y en muchos casos creo que lo consigue.

Tal y como comenté al princpio, los desarrolladores se esfuerzan en ser administradores de sistemas y los administardores de sistemas nos esforzamos en ser desarrolladores, pero en muchos casos no alcanzamos el nivel de la otra disciplina, entre otras cosas porque no es la nuestra.

Creo que queda clarísimo que Cliff ha escrito el artículo con la intención de promocionar el producto de su empresa, que “casualmente” suple las carencias de las que él se queja. Sin embargo, y siempre bajo mi punto de vista, su producto es muy bonito a la vista, pero también muy caro y apenas aporta beneficio sobre lo que ya existe.

Solucionando problemas de arranque de GRUB2

2

Ayer tuve que reiniciar mi querido home server tras mucho tiempo sin hacerlo. Tal y como ocurre en la informática, las cosas de repente dejan de funcionar, y esta no es una excepción: el “currante” (que así que como llamo a mi home server) dejó de funcionar. Al conectar un monitor me encontré con la pantalla en negro y el mensaje “Welcome to GRUB!”. ¿Un error al iniciar? Dudoso, pero había que probarlo.

Tras reiniciar el equipo seguía ocurriendo lo mismo. Tal y como podéis ver en los posts donde explico cómo montar un home server utilizo Debian squeeze para dicha tarea, que actualmente monta GRUB2.Anteriormente me había encontrado alguna corrupción de GRUB2 en los ordenadorres de amigos que utilizan Ubuntu. Dicha distribución obtiene los paquetes de la versión inestable de Debian, así que lo lógico era pensar que estos errores se habían propagado. En mi caso no es así, y según he comprobado parece que GRUB2 ha dejado de funcionar con fit-pc2 (el equipo que utilizo para el “currante”) por problemas de compatibilidad con el chipset Poulsbo. De cualquier modo, es una buena oportunidad para explicar cómo solucionar problemas graves de GRUB.

Nombre de los dispositivos de disco

Para solucionar un problema de arranque en una máquina hay que tener claro cómo trabaja linux con los dispositivos de disco. Como ya sabréis, linux utiliza unos archivos especiales que se encuentran en el directorio /dev/ para trabajar con los distintos dispositivos hardaware (y algunos virtuales) y los discos no son una excepción.

De esta forma, si utilizamos discos antiguos con interface PATA, estos archivos se nombrarán de la siguiente manera:

  • /dev/hda -> Dispositivo PATA maestro conectado al primer canal IDE.
  • /dev/hdb -> Dispositivo PATA esclavo conectado al primer canal IDE.
  • /dev/hdc -> Dispositivo PATA maestro conectado al segundo canal IDE.
  • /dev/hdb -> Dispositivo PATA esclavo conectado al segundo canal IDE.
  • Y así sucesivamente.

Si por el contrario utilizamos cualquier otro tipo de disco (SCSI, SATA, disco USB, Pendrive o casi cualquier otra cosa) encontraremos la siguiente nomenclatura

  • /dev/sda -> Primer dispositivo detectado.
  • /dev/sdb -> segundo dispositivo detectado.
  • Y así sucesivamente.

En ambos casos las particiones se nombran numéricamente comenzando por el 1. Pongo unos ejemplos:

  • /dev/hda3 -> tercera partición del disco duro maestro conectado al primer canal IDE.
  • /dev/sda1 -> primera partición de, por ejemplo, un disco SATA.

De ahora en adelante yo trabajaré con /dev/sda como disco a reparar y /dev/sda1 como partición que contiene /boot.

Arrancar desde un sistema de rescate

Como estamos tratando problemas de GRUB doy por supuesto que no se puede arrancar. Ante esta situación la mejor solución es utilizar el sistema de rescate de nuestra distribución o una distribución Live, que arrancaremos mediante lector óptico, pendrive, red o como mejor nos parezca, sepamos y podamos. Eso sí, debemos tener en cuenta que la versión de kernel del entorno que utilicemos para arrancar debe ser suficientemente cercana a la del entorno a recuperar. En mi caso utilizo el Live CD de Ubuntu 9.04 por comodidad, ya que da un entorno muy usable nada más arrancar. De cualquier modo, una vez arrancado el sistema nos iremos a un terminal para ingresar en la instalación de linux que se encuentra en el disco duro. para ello primero hay que hacer algunos montajes:

sudo mkdir /target
sudo mount /dev/sda1 /target
sudo mount --bind /dev /target/dev
sudo mount -t sysfs sysfs /target/sys
sudo mount -t proc proc /target/proc

Veamos en qué consisten estos pasos:

  1. Creación de un punto de montaje, algo trivial. Puedes utilizar el que quieras cambiándolo en el resto de líneas.
  2. Esta línea monta la partición raíz en /target. Si tenemos directorios con otras particiones, tales como /boot, /var, /tmp, etc es necesario montarlas también.
  3. Montamos el sistema de ficheros virtual de dispositivos. Como no hemos arrancado el kernel del disco duro que hemos montado, indicamos a mount que utilice los ya existentes en el entorno de recuperación.
  4. Sysfs es un sistema de ficheros virtual que contiene información de hardware, drivers y parámetros de configuración del kernel. Realmente no sería necesario, pero lo monto por seguridad.
  5. Proc es otro sistema de ficheros virtual que contiene da acceso a mucha información sobre los procesos que están corriendo en el sistema. Es necesario tenerlos montado para poder ejecutar comandos.

Y accedemos al sistema de nuestro disco:

sudo chroot /target

A partir de este momento ingresaremos en un shell del sistema operativo del disco duro a recuperar, aislada casi completamente del entorno de rescate que hemos utilizado para arrancar la máquina.

Antes de reiniciar deberíamos de salir de la shell chroot y desmontar todo lo que hemos montado:

exit
umount /target/dev
umount /target/sys
umount /target/proc
umount /target
  • El primer comando sale de la shell chroot.
  • El resto desmonta todo.

Tras esto se puede reiniciar el sistema de forma segura.

Solución de problemas de GRUB2

Y llega el momento de ponerse manos a la obra. El procedimiento que muestro a continuación es para errores de instalación de GRUB2. Si tienes errores en la generación de los archivos de configuración te recomiendo que leas la Wiki oficial del proyecto GRUB. La mayoría de los problemas con GRUB2 se pueden solucionar con su reinstalación:

grub-install --recheck /dev/sda

Esta orden reinstalaría GRUB2 en mi disco duro SATA principal. La opción –recheck fuerza a regenerar el fichero devices.map que contiene el listado de discos. De esta forma nos aseguramos de que GRUB2 tiene la información de los discos correcta y actualizada, que suele ser el principal motivo por el que deja de funcionar. Tras esto reiniciar y comprobar el resultado.

Si aún así GRUB2 sigue resistiéndose, lee el manual que se encuentra en la Wiki oficial del proyecto GRUB.

Si lo anterior falla, volver a GRUB Legacy

Si como en mi caso has agotado todas las posibilidades y encuentras que hay un problema con GRUB2 y tu hardaware, sería conveniente volver a la versión antigua de GRUB para poder seguir arrancando el sistema y buscar o abrir un bug al respecto.

NOTA: instala GRUB Legacy como último recurso. Aunque es estable tiene pocas funciones y el código tiene problemas serios de diseño, a parte de que su ciclo de vida ha finalizado. Te recomiendo encarecidamente que no utilices este método a no ser que no tengas más remedio.

Tras reiniciar el entorno de rescate y acceder por chroot a tu sistema, lo primero sería desinstalar GRUB2:

aptitude purge grub-pc
rm -r /boot/grub

Te recomiendo que antes de lanzar esto hagas una copia de /boot/grub en cualquier sitio, por lo que pueda pasar. Tras haber desinstalado completamente GRUB2 instalamos el paquete de GRUB1:

aptitude install grub-legacy

Con este comando habremos instalado el paquete, sin embargo grub no se instalará en nuestro disco duro ni se configurará, para ello hay que realizar los siguientes pasos:

grub-install /dev/sda

Esto se puede quejar del stage1, ignoramos el error. Tras esto sería conveniente comprobar que la información de /boot/grub/device.map es correcta. En mi caso, para asegurarme que funciona, cambié el nuevo sistema de identificadores de disco por el archivo de dispositivo, quiere decir:

(hd0)   /dev/disk/by-id/ata-ST3400620AS_6QH00FGT

por

(hd0)   /dev/sda

Una vez hecho esto proseguimos la instalación y configuración:

grub #Entramos en grub. "grub>" representa el prompt de GRUB
grub> root (hd0,0)
grub> setup (hd0)
grub> quit
update-grub

Este último comando genera el fichero menu.lst y añade los kernels y sistemas operativos que tengamos instalados. Salimos del entorno de rescate tal y como indico más arriba y ¡listo! ya tenemos GRUB instalado, configurado y funcionando.

Purgar paquetes previamente desinstalados en Debian, ubuntu y derivados.

0

Hace poco me encontré con un problema bastante curioso. En casa Utilizo Debian Squeezee en mi máquina de trabajo habitual. Como esta versión se encuentra en fase testing, en ella van incluyendo las nuevas funcionalidades que tendrá el sistema en release. Una de estas nuevas funcionalidades es que finalmente pasan del sistema de arranque estático (asígnando un número a cada script de arranque que determinará cuándo arrancará) al sistema de arranque por dependencias que utiliza ubuntu. Quiere decir, ahora los scripts de arranque lo que contienen es la información sobre qué servicios necesita que estén activos para arrancar correctamente, y será el sistema quien arranque la aplicación cuando estime que puede hacerlo.

Al intentar hacer la migración al sistema nuevo, me encontré que no era posible porque no estaban purgados los paquetes de la rama 5.0 de MySQL, que unos días antes habían actualizado a 5.1. Entonces caí en la cuenta de que tanto apt como aptitude no purgan los ficheros de configuración cuando actualizan un paquete, tan sólo hacen un uninstall normal y corriente. Esto puede ocasionarnos más de un problema cuando instalamos actualizaciones, bien porque se lean configuraciones en formato antiguo o porque éstas interfieran con otros paquetes, como era mi caso. De cualquier modo, cuando se retiran paquetes de nuestro sistema porque están obsoletos o bien queremos purgar programas desinstalados hace tiempo, podemos ejecutar el siguiente comando:

aptitude purge ~c

Y de esta forma purgaremos todos los paquetes que hayamos desinstalado de nuestro sistema, bien por ser obsoletos o bien por el método estándar.

Instalación y configuración del entorno LAMP

0
This entry is part 5 of 5 in the series HOW-TO: homeserver linux

Una vez instalado y configurado el sistema operativo y compartidos los directorios por samba, es momento de terminar de configurar el entorno LAMP. Para ello vamos a instalar el servidor web Apache, php_mod para disponer de php en nuestro servidor y MySQL para poder trabajar con bases de datos.

Instalamos pues el software necesario:

sudo aptitude install apache2 libapache2-mod-php5 mysql-server-5.1
sudo aptitude install php5-gd php-fpdf

Cuando instalemos MySQL el sistema nos pedirá el password del usuario root.

Con esto ya tendremos instalados los paquetes de software principales necesarios para ejecutar las aplicaciones web más usuales en php. El siguiente paso sería activar las conexiones externas a mysql, de esta forma podremos, por ejemplo, gestionar nuestro servidor de forma gráfica desde nuestro equipo con las herramientas de gestión que provee MySQL. Para ello basta editar el archivo /etc/mysql/my.cnf y comentar la línea bind-address = 127.0.0.1 añadiendo una almohadilla (#) al principio de la línea. Una vez terminado reiniciamos el servidor mysql para que aplique los cambios de la configuración:

sudo /etc/init.d/mysql restart

El siguiente paso sería crear un superusuario propio en mysql y permitirle autenticar desde cualqueir máquina de nuestra red (o desde alguna específica, según queramos ajustar nuestro nivel de seguridad) para poder gestionar el servidor. De esta forma podremos crear usuario, bases de datos, etc desde nuestra máquina utilizando las herramientas gráficas de gestión.

mysql -u root -p mysql
CREATE USER 'nefeli'@'192.168.0.%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'nefeli'@'192.168.0.%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
quit

Con estas órdenes he hecho lo siguiente:

  • Conectar al MySQL con el usuario root (-u root), solicitando el password (-p) y conectando a la base de datos de gestión de MySQL (mysql). Esta base de datos contiene la información refenrente a las bases de datos que existen, los usuarios y sus privilegios, los parámetro de configuración del sistema, etc. El sistema nos pedirá el password de root para conectar.
  • Crear un usuario (en este caso nefeli), y habilitar la conexión de este usuario desde la red 192.168.0.0 (quiere decir, cualquier ordenador que IP empiece por 192.168.0). Además el usuario tendrá un password (en este caso password). Es importante incluir las comillas (‘) en el comando, ya que indicará a MySQL que lo que está contenido entre estas con cademas de caracteres.
  • Otorgar al usuario (en este caso nefeli) todos los privilegios de superusuario cuando se conecte desde la red 192.168.0.0), incluyendo el privilegio de otorgar privilegios (como dicen en inglés, esta frase es un poco tricky).
  • Recargar los privilegios de la base de datos.

De esta forma ya habremos creado un superusuario que con el que podremos trabajar desde cualquier punto de nuestra red. Sería una buena idea que, cada vez que instalemos una aplicación que necesite acceder a una base de datos, le creemos un usuario propio con los permisos justos que necesite, y de esta forma tener el acceso a todas nuestras bases de datos debidamente controlado y securizado.

Por último, algo a tener en cuenta es que todos los comando que metemos en mysql se guardan en un fichero de log en el directorio del usuario donde lo hemos creado. Como hemos puesto un password en texto normal, sería una buena idea borrar las líneas donde apareza para tener el sistema completamente seguro. El nombre de este fichero es .mysql_history.

Bueno, pues ya tenemos un pequeño entorno web corriendo en nuesta máquina, con el que podremos instalar aplicaciones web dentro de nuestra red casera. En mi caso ya tengo instalado y funcionando jinzora, que utilizo tal y como comenté en otro post para reproducir música en la wii.

Instalación y configuración de samba

2
This entry is part 4 of 5 in the series HOW-TO: homeserver linux

AVISO: este tema se encuentra en proceso de reconstrucción. Este fin de semana estará completamente reformado. Te recomiendo que esperes hasta entonces.

Ya que hemos preparado el acceso por red es hora de ponernos manos a la obra con los servicios que nuestro pequeño servidor ofrecerá. Pero antes de nada, sería conveniente crear un puñado de usuarios y grupo en el sistema. En concreto, yo crearé un usuario para mi pareja, que tendrá el mismo nombre y contraseña que ella tiene en su equipo con windows para que acceda de forma transparente (windows manda de forma automática las credenciales de usuario. Además está creados mi usuario (desde la instalación) y será creado un usuario invitado (para que pueda acceder al ssh y algunos recursos compartidos). En cuestión de grupos, crearé un grupo llamado “descargadores” que contendrá usuarios y demonios, un grupo llamado “habitantes” que contendrá los usuarios correspondientes a mi pareja y a mí, y uno de invitados (toda la sección de invitados no será incluida en este tutorial).

sudo useradd lucerita
sudo passwd lucerita
(salida por pantalla del proceso)
sudo groupadd descargadores
sudo groupadd habitantes
sudo usermod -G descargadores,habitantes yo
sudo usermod -G descargadores,habitantes lucerita

Es imprescindible asignar una password a los nuevos usuarios, ya que hasta que no se haga el usuario permanecerá desactivado y no podremos hacer nada con él.

Gestión de permisos: Listas de control de acceso (ACL)

Ante un sistema al que van a acceder varios usuarios surge un problema: la gestión de los permisos que dichos usuarios van a tener a los recursos compartidos. En el caso que estamos ilustrando, tenemos un grupo de usuarios (habitantes) que van a tener acceso total (lectura, modificación y ejecución) a una serie de recursos compartidos, y otro grupo (descargadores) a los que hay que aplicarles el mismo criterio para otros recursos.

Linux, Como buen sistema basado en UNIX, contaba inicialmente con el sistema estándar de estos entornos para controlar quién puede hacer qué dóne, el llamado UGO (user, group, others). Sin embargo en muchos casos este sistema es insuficiente, y para solventar esto aparecieron las listas de control de acceso. En nuestro home server su necesidad se hace patente, así que vamos a ver como se monta y configura. Si quieres ampliar tu conocimiento sobre este tema, te recomiendo que leas este completo HOWTO.

Vamos a ilustrar este ejemplo con el directorio de descargas del home server. Lo primero es crear el directorio que contenga los archivos descargados por programas que tengamos residentes en el sistema


sudo mkdir descargado
sudo chown yo:descargadores descargado
sudo chmod 775 descargado

Ambos demonios lo incluiremos posteriormente en el grupo “descargadores” al que le acabamos de dar permisos de lectura, escritura y ejecución en estos direcotrios, y de esta forma tenemos controlado el acceso de aplicaciones y usuarios al tiempo que no comprometemos el sistema. De estos directorios sólo compartiremos, en principio y como es lógico, descargado.

Pasamos pues a instalar samba. Para facilitar la tarea de administración de recursos compartidos podemos utilizar swat, que es un pequeño servicio web para configurar samba de una forma un poco más visual y agradable.

sudo aptitude install samba swat

Durante el proceso de instalación nos pedirá el grupo de trabajo. Por comodidad podemos especificarlo, aunque posteriormente también se puede cambiar de una forma fácil y cómoda. También mientras instalamos, samba leerá todo nuestro listado de usuarios, contraseñas y grupos y los inluirá para que puedan hacer login. Si posteriormente queremos agregar un nuevo usuario podemos utilizar el siguiente comando:

sudo smbpasswd -a <nombre_usuario_unix>

Cuando terminemos de instalar tendremos swat disponible, con lo que podríamos abrir un navegador  apuntar a http://<ip_de_la_maquina>:901. Nos pedirá el nombre de usuario y password, y para dentro!

Como se puede apreciar las opciones de configuración son muy numerosas y nos podemos perder fácilmente. Esto es debido a que samba no sólo está pensado para ofrecer recursos simples, sino que permite sincronizar con directorio activo de windows y dominios, de tal forma que todo esto se vuelve muy complejo. Así pues, un poquito de ayuda no viene mal.

En el apartado  global, pondremos la opción preferred master a True. ¿Qué significa esto? Veámoslo.

Las versiones de escritorio de windows son capaces de funcionar de forma descentralizada, esto quiero decir, sin servidor, o al menos sin ningún ordenador especialmente configurado para tal efecto. El problema de no utilizar un servidor central es que los ordenadores tienen que estar contínuamente enviando y recibiendo información para saber qué otro ordenadores están conectados a la red y qué cosas tienen, y posteriormente si siguien ahí o hay otros nuevos.

Esto genera un tráfico de red desmesuradamente alto, por lo que hay montada una solución intermedia, y es que la máquinas puedan funcionar como servidor pero con un sistema de autoconfiguración que sea complemente transparente para el usuario. Además este sistema tiene que ser capaz de tolerar las contínuas idas y venidas de equipos de la red. Así pues se ha creado un sistema de votación, en el que cuando se solicita, todos los equipos aportan una puntuación basada en varios criterios y eligen a un servidor central, que se encargará de memorizar el estado de todas las máquinas de la red y al que todo el mundo preguntará.

Esta opción permite que se lanze el proceso de votación cada vez que nuestra máquina samba se conecta a la red. Como samba posee una puntuación alta suele proclamarse ganador y se convierte en maestro. Esto nos viene de perlas, porque como el equipo estará siempre encendido podrá controlar perfectamente los ordenadores que se conectan y desconectan de la red y mantendrá el broadcast de nuestra red un poco más saneado (para lo que suele ser entornos Windows).

Tras esto nos vamos al apartado shares y añadimos recursos compartidos. Os dejo una plantilla de cómo he configurado yo los recursos:

[musica]

	path = /mnt/musica

	valid users = +habitantes

	read only = No

	create mask = 0774

	directory mask = 0775

Quiere decir, creo que recurso que se llama música, con path en /mnt/musica. Restrinjo los usuarios válids a los pertenecientes al grupo habitantes (el + indica que es un grupo de UNIX, quiere decir, un grupo existente en nuestro linux). Permito que el propietario y el grupo de usuarios tengan acceso completo a los archivos y directorios contenidos en este.

NOTA: La cláusula valid user implica que ningún usuario que no se haya autenticado como miembre de habitantes podrá acceder a este recurso.

Queda por resolver el tema del montaje de las unidades desde sistemas linux. Para ello es necesario utenticarse como el usuario que hemos elegido, pero si añadimos una línea en fstab para que el sistema se monte al iniciar el equipo el usuario que monta es root. Tampoco deseamos incluir a root en el montaje para evitar problemas de seguridad, además de que necesitamos encontrar un método seguro para no poner el password como texto plano el dicho archivo. esto lo solucionaremos creando un archivo de credenciales. Iniciamos una shell de de root y cremos un archivo (por ejemplo /root/montaje) con el siguiente contenido:

username=<usuario>

password=<mi_password>

Lo guardamos y cambiamos los permisos para que sólo root pueda acceder a él:

chmod 600 /root/montaje

A continuación añadimos el recurso en /etc/fstab:

//192.168.0.254/musica /mnt/musica smbfs credentials=/root/montaje,uid=1000,iocharset=utf8 0 0

Configuración de Debian

0
This entry is part 3 of 5 in the series HOW-TO: homeserver linux

Una vez terminado con el programa de instalación de Debian procederemos, como es lógico, a reiniciar el sistema. Ingresaremos como usuario root, ya que todavía no tenemos sudo y todas las operaciones que debemos hacer son de administración.

Lo primero que deberíamos hacer es configurar el pinning de repositorios para poder elegir desde dónde queremos instalar un paquete. Configuraremos el sistema de tal forma que por defecto instalará el software de la distribución estable, y cuando se lo indiquemos lo hará de la de pruebas (testing). Durante este proceso aprovecharemos también para añadir ramas del repositorio para tener disponible todo el software de podamos necesitar. Para ello debemos editar el archivo /etc/apt/sources.list y dejarlo de la siguiente forma:

#Repositorios de software de Debian estable
deb http://ftp.nl.debian.org/debian/ stable main non-free contrib
deb-src http://ftp.nl.debian.org/debian/ stable main non-free contrib
#Actualizaciones de seguridad de Debian
deb http://security.debian.org/ stable/updates main contrib
deb-src http://security.debian.org/ stable/updates main contrib

# Repositorios de Debian testing
deb http://ftp.nl.debian.org/debian/ testing main contrib non-free
deb-src http://ftp.nl.debian.org/debian/ testing main contrib non-free

El siguiente paso es configurar apt para que trate los paquetes de testing con una prioridad extremadamente baja. De esta forma nos aseguraremos que el sistema se comportará de forma que evitará en la medida de lo posible instalar paquetes de esa distribución. Así, cuando demos la orden de instalar un paquete (apt-get install), apt-get seleccionará todo el software de stable ignorando por completo que tiene también configurados los repositorios de testing (que en teoría deberían tener mayor prioridad dado que las versiones de software que contiene son mucho más recientes). Para conseguir esto creamos el fichero /etc/apt/preferences y añadimos el siguente contenido:


Package: *
 Pin: release n=stable
 Pin-Priority: 900

Package: *
 Pin: release n=testing
 Pin-Priority: -10

Una vez editado procedemos a la actualización:

apt-get update

El sistema realizará cambios sustancias, tales como cambiar GRUB por GRUB2 o implantar el nuevo sistema de arranque de servicios por dependencias que sustituirá al antiguo basado en números estáticos. Una vez terminada la actualización reiniciamos el equipo y comprobamos que GRUB2 se ejcuta sin problemas. Si es así, una vez iniciado el equipo y haber ingresado como root ejecutamos:

upgrade-from-grub-legacy

Actualización: con los nuevos kernels se ha corregido este problema y el workaround ya no es necesario. Como este tipo de cosas pueden resultarles útiles a alguien, lo dejaré en la entrada, pero tachado para evitar confusiones. Repito, el texto tachado está obsoleto y debe ser ignorado.

Un problema que se me ha planteado al cambiar al sistema de arranque por dependencias es montar los discos duros USB de forma manual a arrancar la máquina. Dado que no tenemos entorno gráfico que lo haga por nosotros, los discos duros USB no son montados automáticamente, sino que tenemos que hacerlo nosotros de forma manual. Lo normal es crear los puntos de montajes en /mnt e incluir en fstab las entradas correspondientes. La cuestión es que  en la máquina en la que lo estoy instalando el sistema el arraque por dependencias  intenta montar los discos antes de haber detectado los USBs, por lo que realmente no lo hace.

Esto se puede solucionar fácilmente recurriendo a /etc/rc.local. Este script es ejecutado cada vez que se termina de alcanzar un runlevel de multiusuario (2, 3, 4 o 5), por lo que poniendo aquí las instrucciones de montaje estas se ejecutarán una vez terminado el inicio del equipo. No es la solución más elegante, pero es temporal al fin y al cabo (hasta que se solucione el problema en el arranque por dependencias). Así pues, lo que haremos es añadir las entradas al fstab y añadir lo siguiente en /etc/rc.local:


mount -a

Lo siguiente sería instalar y configurar sudo para no tener que trabajar con root. La mayoría de los usuarios noveles en el sistema operativo del pingüino ignoran esto y prefieren trabajar con root. Cada uno es absolutamente libre de hacer lo que quiera, pero recomiendo encarecidamente utilizar sudo. Si hasta ahora no lo has hecho, quizá es el momento de dar el paso. Más de una vez te ahorrarás un susto y te acordarás de mi.

Cuando se instala el paquete de sudo, Debian crea un grupo de usuarios llamado “sudo” que nos realiza la configuración más básica posible: todo usuario añadido a ese grupo puede ejecutar cualquier comando como cualquier usuario. Para un homeserver realmente no sería necesario nada más, y más teniendo en cuenta que somos los únicos administradores, así que una vez instalado el paquete añadiremos a nuestro usuario al grupo “sudo”.

aptitude install sudo
usermod -A -G sudo <usuario>

Una vez instalado sudo deberíamos instalar un servidor ssh para poder trabajar con la máquina en remoto (ya sea desde nuestra propia máquina de red local o desde internet.

sudo aptitude install ssh

Esto instalará el servidor y el cliente. El cliente de ssh apenas ocupa unos Ks y nunca se sabe cuándo podemos necesitarlo, así que no está de más que nos lo instale. Yo he cambiado el puerto del servidor SSH para, de esta forma, evitar la mayoría de los ataques. para ello editaríamos /etc/ssh/sshd_config y la línea Port. También puede ser interesante cambiar el archivo /etc/issue.net para que oculte nuestra versión del sistema operativo y de paso ponga algún mensaje amenazador. Una vez terminados los cambios, reinicamos el servidor SSH para que nos aplique el cambio de puerto:

sudo /etc/init.d/ssh restart

A partir de este momento ya podemos quitar el teclado y el monitor de la máquina y acceder por SSH a la misma para continuar la instalación.

Instalación de Debian

0
This entry is part 2 of 5 in the series HOW-TO: homeserver linux

Como he comentado anteriormente, voy a utilizar Debian como sistema operativo para este pequeño proyecto. Esta distribución nos ofrece 3 ramas distintas que coexisten simultáneamente para que nos instalemos la que más nos conviene según nuestras necesidades. Estas son:

  • Estable: esta rama contiene versiones de software muy probadas y estables. Normalmente está pensada para instalarla en servidores de producción y el software que ofrece ya lleva un cierto tiempo funcionando. Esto es una ventaja en el sentido de que se ha tenido tiempo suficiente para probar su estabilidad, pero presenta la desventaja de que las versiones son relativamente antiguas.
  • Testing: las versiones de software que se ofrecen en esta rama son relativamente reciente, además de nuevas mejoras que se pretenden incluir en la siguiente versión estable de la distribución. Esto puede presentarnos la desventaja de que suele tener un volumen de actualizaciones bastante grande, y durante el proceso de actualización pueden dejar de funcionar algunas características del software que tengamos instalado debido a variaciones de configuraciones o la presencia de bugs que no se hayan detectado todavía debido, por ejemplo, al poco tiempo de testeo.
  • Unstable: contiene lo último de lo último. Todas las nuevas versiones y nuevas aplicaciones están incluidas en esta rama casi de inmediato. Por lo general, mantener esta rama en funcionamiento es bastante complicado y suele ser utilizada por desarrolladores para algún fin concreto.

¿Qué opción elegir? Aquí se presenta un gran dilema. Un home server se puede plantear como un sistema en producción, ya que es un equipo al que pediremos una cierta disponibilidad y un tiempo de mantenimiento bajo. No necesitamos la última versión de MySQL con procedimientos avanzados ni nada por el estilo, ya que el uso general del sistema es simple. Sin embargo podemos encontrarnos con un handicap: los clientes P2P. Aquí sí que necesitamos estar al día (o casi), ya que las mejoras entre versión y versión suelen implicar aumentos de rendimiento, funcionalidades importantes y mejoras de seguridad. Así pues, para nuestro proyecto vamos a utilizar una característica muy potente que nos provee el sistema operativo: instalar la distribución estable añadiendo ciertos programas (aMule y Deluge) de la testing, utilizando una técnica conocida como “pinning”.

Por otro lado, lo más habitual y recomendable es utilizar la imagen de netinstall para la instalación, ya que sólo ocupa entre 140 y 180 MB, con lo que se descarga rápidamente y minimizamos el uso de ancho de banda de los servidores y mirrors de Debian. Esta imagen contiene el programa de instalación de Debian y los archivos del sistema minimal, instalando el resto de paquetes directamente desde el repositorio que elijamos. Esta imagen puede descargarse desde aquí.

A la hora de instalar el sistema crearemos varias particiones para organizar correctamente la información. Os propongo un mapa de particionamiento y espacios a título orientativo. Comentarios y sugerencias son bienvenidos.

  • /: 1.5GB
  • /boot: 50MB
  • /tmp: 1GB (por precaución)
  • /usr: 2GB (debería de sobrar bastante)
  • /var/log: 30MB (no me gusta escatimar en logs)
  • Swap: 2GB (por lo que pueda pasar, el equipo dispone de muy poca RAM)
  • /var/download el resto del espacio

Sería una buena práctica instalar el sistema operativo en le idioma en el que lo queremos utilizar, ya que así nos ajustará los locales correctamente y no tendremos encontraremos problemas a la hora de leer ficheros con nombres especiales, por ejmplo.

Por otro lado, podemos aprovechar  la instalación para establecer una IP fija (tal y como yo he hecho) para el equipo. Ponerle IP fija en la LAN a la máquina es imprescindible para poder mapear los puertos necesarios al router posteriormente.

Le indicaremos al programa de instalación que nos instale lo imprescindible. En el momento en el que da a seleccionar los componentes a instalar (sistema estandar, sistema de escritorio, servidores, etc) dseseleccionaremos todas las opciones (incluso sitema estándar), ya que instalaremos exclusivamente el software que vamos a necesitar.

Introducción

2
This entry is part 1 of 5 in the series HOW-TO: homeserver linux

Vivir en un piso compartido puede ocasionar algunos problemas. Problemas de convivencia, de distribución de tareas, etc. Sin embargo hay un algo en lo que no solemos pensar: en compartir el ancho de banda. En este sentido el problema que suelo encontrar suele estar relacionado con el P2P. Este tipo de software tiene un problema grande hoy en día: utiliza mucho recursos del router creando largas tablas de enrutamiento dinámico y saturando así la pequeña CPU que incorporan estos.

Así pues, la solución puede pasar por montar un servidor unificado de descargas. De esta forma se puede tener una sola instancia de los programas de descarga P2P, optimizando el uso de los recursos de internet y recursos de red libres para la navegación. Además, este servidor puede utilizarse como un punto unificado de almacenamiento, teniendo así un lugar en el que compartir películas, música, etc. De esta forma podemos utilizar, por ejemplo, una consola para visualizar el contenido multimedia en el salón, a la par de tener un punto en el que compartir archivos entre todos los usuarios de la casa.

Para tal cometido podemos utilizar un ordenador poco potente y barato, y de esta forma abaratar los costes de adquisición de hardware, facilitando el reciclaje de un equipo antiguo, ya sea uno que tengamos, uno que nos regalen, o uno que compremos. Si elegimos esta última opción, podemos elegir el comprar un equipo antiguo de segunda mano o comprar uno nuevo basado en la plataforma intel Atom, como podría ser el fit-PC2 o en las plataformas de bajo consumo de VIA.

Comienzo pues una serie de artículos orientados a montar un servidor de descargas, almacenamiento en web y contenido multimedia corriendo bajo sistema operativo Debian GNU/Linux y orientado a ofrecer los servicios a usuarios de Linux, Windows y Mac.. El software elegido para dicho cometido es:

  • Debian GNU/Linux: será el sistema operativo que utilizaremos en la máquina. La distribución elegida es Squeeze o testing para obetener las versiones necesarias para que todo funcione. El sistema operativo en cuestión correrá sin entorno gráfico, ya que realmente no lo necesitamos y de esta forma ahorraremos recursos en la máquina que podremos utilizar para el resto de servicios. La administración de la máquina la llevaremos a cabo a través de consola por SSH.
  • SAMBA: servidor de archivos por protocolo SMB (utilizado por windows).
  • OpenSSH: utilizado para la administración remota del equipo.
  • Apache web server, php_mod y MySQL para soportar los servicios LAMP que montaremos.
  • aMule: corriendo en su versión demonio (el equivalente a servicio en windows) para ofrecer descargas en las redes e2k y kadmelia.
  • Servicio web de aMule: utilizado como interfaz de aMule, correrá en el servidor LAMP.
  • Deluge: potente cliente para la famosa red torrent. Incorpora funciones para trabajar como demonio y como e incluye un interface web.
  • Jinzonra: utilizado como gestor de biblioteca de música, tiene una versión del interfaz para la Wii accesible a través del canal internet.

Consideración a tener en cuenta: el sistema que aquí expongo no tiene control de usuario (en principio es un sistema monousuario), no lo que significa que todos los usuarios podan ver los archivos del resto y acceder a ellos. En principio en una casa normal o un piso compartido no es necesario poner este tipo de restricciones. Si en tu caso es necesario debería considerar el utilizar otro software, por ejemplo mldonkey. No se ha utilizado este software debido a la complejidad de su configuración y los problemas con la integración en las redes ed2k y kadmelia. Mldonkey se conecta a todos los servidores de ed2k que tiene en su lista y esto es considerado por dicha comunidad como leeching. Así pues, para hacer que este cliente funcione correctamente bajo estas redes hay que cambiar la identificación de cliente y otros parámetros, y considero que ya es demasiada complejidad para un home server.

Flash player para iceweasel en Debian Squeeze 64 bits

5

Hace tiempo que instalé la Debian Squeeze en 64 bits en mi máquina, para aprovechar las ventajas de algunas aplicaciones corriendo en 64 bits. Sin embargo uno de los problemas que me encontré fue que el flash funcionaba de forma anómala. Uno de los ejemplos más claros y rápidos de detectar es que lo vídeos en youtube se ven ralentizados y no suenan. Durante un tiempo he tenido una máquina virtual curriendo un XP en el que tengo instaldo software que me interesa, pero últimamente me ha dado por arreglar los pequeños problemillas que tengo en mi máquina, y la verdad es que muchas veces me daba bastante pereza cargar la máquina virtual (que va considerablemente bien) sólo para ver un vídeo o hacer cualquier otra chorrada por el estilo.

Actualizado: Existe el paquete flashplugin-nonfree paquete en el reposotorio non-free que contiene directamente el flash player de macromedia.

Pues bien, resulta que encuentro por la página de kike leo que en Adobe labs existe una beta del flash player 10 para linux x86_64. Así pues he estado trasteando un poco en el sistema. Lo primero es descargar el plugin:

Actualizado: Jorge Blengino nos informa que se ha actualizado la versión. Gracias, corregido.

wget http://download.macromedia.com/pub/labs/flashplayer10/libflashplayer-10.0.32.18.linux-x86_64.so.tar.gz
tar xvf libflashplayer-10.0.32.18.linux-x86_64.so.tar.gz

Una vez lo tenemos ahí el resto de operaciones se harán con root o con sudo. Lo primero es hacer un backup del plugin que trae Debian por defecto:

mv /usr/lib/swfdec-mozilla/libswfdecmozilla.so /usr/lib/swfdec-mozilla/libswfdecmozilla.so.bak

Copiamos el plugin nuevo y aplicamos los permisos del otro para no comprometer la seguridad del sistema:

cp libswfdecmozilla.so /usr/lib/swfdec-mozilla
chmod 644 /usr/lib/swfdec-mozilla/libswfdecmozilla.so

Reiniciamos el navegador y comprobaremos que el plugin está listo para usar

Ir arriba