# Comunicaciones Unificadas Con Elastix/Linux para Administradores Elastix

   Sólo los débiles hacen copias de seguridad en cintas: los hombres de verdad tan solo suben sus cosas importantes a un servidor ftp, y dejan que el resto del mundo las replique. -- Linus Torvalds, creador de Linux

## Introducción

En este capítulo se repasarán algunos conceptos útiles de Linux para facilitar la vida de los administradores de Elastix. Si usted ya conoce cómo administrar su Elastix desde la línea de comandos de Linux, sáltese este capítulo y vaya directamente al siguiente.
Debido a que este no es un libro de Linux no ahondaremos mucho en el tema, ni hablaremos de la historia de Linux, ni de sus ventajas, ni ahondaremos en detalles. Así que si en algún momento le parece que estoy abordando los temas de manera muy general... esa es la idea :)
Si al final de este capítulo aún siente que existen vacíos, le recomendamos capacitarse en administración de Linux, sin duda le facilitará las tareas de administración de Elastix.

## Línea de comandos de Linux

Una manera muy útil de administrar Elastix es desde la línea de comandos de Linux. La línea de comandos de Linux nos permitirá explotar al máximo el potencial de nuestro Servidor de Comunicaciones Unificadas.
Para ingresar a la línea de comandos lo podemos hacer directamente conectando un monitor y teclado a nuestro equipo instalado con Elastix o conectándonos remotamente a través del protocolo SSH.
Si estamos en un equipo Windows debemos descargar un programa cliente para podernos conectar remotamente. El programa que recomendamos aquí se llama PuTTY y basta hacer una búsqueda en Google por ese nombre para encontrar el sitio de descargas. Sólo asegúrese de hacerlo del sitio oficial.

## Comandos básicos

| Comando | Descripción |
| ls | Lista los archivos en el directorio actual |
| ls -la | Lista los archivos y sus atributos |
| cd | Cambia de directorio |
| cd .. | Cambia al directorio padre |
| cat | Muestra el contenido de un archivo en la pantalla |
| pwd | Muestra la ruta actual |
| cp | Copia un archivo o grupo de ellos |
| mv | Mueve un archivo. También se lo usa para renombrar archivos |
| rm | Elimina un archivo |
| tail -f nombre_archivo | Muestra las últimas líneas de un archivo en tiempo real |
| mkdir | Crea un directorio |
| tar -xvzf nombre_archivo.tar.gz | Descomprime un archivo tar.gz |
| top | Muestra un reporte en tiempo real de los procesos que se ejecutan en el sistema. Puede ser ordenado por consumo de memoria o CPU. Muy útil para diagnóstico |
| find | Permite buscar arhivos |
| vim | Programa para ver y editar archivos de texto plano |
| ifconfig | Muestra información de las interfaces de red y permite modificarlas temporalmente |
| ps -aux | Muestra un reporte de los procesos que se están ejecutando en el servidor |
| reboot | Reincia el equipo |
| shutdown -h now | Apaga el equipo |
| man comando | Muestra documentación sobre un determinado comando |

## Sistema de archivos

En Linux es muy importante la organización del sistema de archivos.
Esta organización le otorga a Linux robustez e interoperabilidad pues los programas pueden predecir con mayor exactitud dónde se encuentran ciertos archivos para su correcto funcionamiento y así mismo escribir archivos de manera que otros componentes los entiendan. Esto minimiza los conflictos y en conjunto con el sistema de permisos añade más seguridad al sistema operativo.

### Organización

La organización de directorios que se mostrará a continuación no es arbitraria. Es producto de años de evolución desde las primeras versiones de UNIX.
Esta estructura de carpetas está ubicada en lo que se llama directorio raíz, o directorio principal. Este directorio raíz es el directorio de más alto nivel en el sistema de archivos.
| Directorio | Descripción |
| /sbin | Incluye binarios que pueden ejecutados solo por el administrador |
| /bin | Contiene binarios necesarios para el correcto funcionamiento del sistema. Los binarios de esta carpeta pueden también ser utilizados por los usuarios del sistema |
| /boot | Este directorio contiene el kernel y otros archivos necesarios al momento de arranque |
| dev | Este directorio contiene archivos que representan dispositivos de hardware. Recordemos que en Linux prácticamente todo es un archivo |
| /etc | Este directorio contiene básicamente archivos de configuración para todo el sistema |
| /home | Aquí residen los directorios de los usuarios. Por ejemplo, el directorio /home/jorge es el directorio del usuario “jorge” |
| lib | Contiene básicamente las librerías compartidas que requieren los programas. Algo análogo a los archivos .dll en Windows |
| lost+found | Cuando por alguna razón el sistema de archivos se corrompe y hay que repararlo; los resultados de esa reparación se guardan en este directorio |
| /mnt | Este es un lugar común para montar otros sistemas de archivos o dispositivos. Por ejemplo una unidad de CDROM o un PEN DRIVE |
| /opt | Este directorio contiene paquetes de software que normalmente no son parte de la instalación original |
| /proc | Es un directorio virtual (ya que realmentereside en la memoria) donde el kernel y drivers escriben archivos para que otros programas los puedan leer. Por ejemplo, aquí es donde los drivers de zaptel escriben ciertos archivos en la ruta /proc/zaptel/ |
| /root | Este es el directorio del usuario root ya que este no tiene uno del tipo /home/root |
| /tmp | Este directorio contiene archivos temporales |
| /usr | Es uno de los más importantes directorios y contiene información para ser compartida como programas que pueden ser usados por los usuarios del sistema, la documentación de dichos programas y hasta librerías relacionadas, etc. |
| /var | Contiene información en constante cambio como logs o colas de emails. Por ejemplo, aquí reside el log de asterisk en la ruta /var/log/asterisk/full |

### Permisos

En Linux cada directorio o archivo tiene permisos de acceso y estos permisos pueden ser de básicamente 3 tipos:
* lectura
* escritura
* ejecución
Cada archivo también tiene un dueño y un grupo al cual pertenece y para cada una de estas entidades se pueden establecer permisos diferentes
Por último, también es deseable establecer permisos para otros usuarios que eventualmente pueden querer tener acceso sobre este archivo.
Dicho todo lo anterior podemos establecer la siguiente matriz de permisos que sería válida para un determinado archivo del sistema:
| | Dueño | Grupo Otros | Usuarios |
| lectura | x | x | x |
| escritura | x | | |
| ejecución | x | x | x |
Existe sin embargo una notación más sencilla para expresar la matriz de arriba. Esta notación, compuesta de 10 caracteres, simplifica el despliegue de la información de permisos y permite mostrarlos en una sola línea lo cual es muy útil cuando se quieren ver permisos de muchos archivos. Por ejemplo, la matriz de permisos del ejemplo anterior se puede expresar de la siguiente manera:
Donde,
* El carácter 0 representa el tipo de archivo. Si se llena con la letra “d” significa que se trata de un directorio.
* Los caracteres 1, 2 y 3 representan los permisos de lectura, escritura y ejecución para el dueño del archivo.
* Los caracteres 4, 5 y 6 representan los permisos de lectura, escritura y ejecución para el grupo al que pertenece el archivo.
* Los caracteres 7, 8 y 9 representan los permisos de lectura, escritura y ejecución para otros usuarios.
Ahora veamos un ejemplo de un listado largo donde podremos apreciar diferentes permisos:

### Representación numérica de permisos

Aparentemente vamos a complicar las cosas un poco más aquí pero ya veremos más adelante la utilidad de poder representar la dichosa matriz de permisos de una forma más condensada llamada representación numérica u octal de permisos.
La cuestión es que los 3 caracteres que definen los permisos para cada una de las tres entidades involucradas (dueño, grupo y otros) pueden ser representados por un solo número de tal manera que todos los permisos de un archivo pueden ser representados por 3 de estos números. Por ejemplo, 755. Donde el primer dígito representa los permisos del dueño, el segundo dígito los permisos del grupo y el tercer dígito los permisos de otros usuarios.
Puede ser complicado entender al principio pero sin duda se trata de un formato más condensado. De eso sí no cabe duda verdad?. Y basta ver el siguiente ejemplo:
Pero de dónde sale el famoso numerito?
Resulta que cada uno de los 3 caracteres que representan un permiso para una entidad dada puede ser reemplazado por 1 o 0 de tal manera que obtenemos un número binario, luego este número binario se traduce a su equivalente decimal (realmente deberíamos decir octal aquí). Veamos el ejemplo siguiente.
Transformado a binario tendríamos los siguientes tríos:
y ahora en su equivalente decimal
En fin, para los que no les gusta calcular binario les dejo la siguiente tablita.
| Versión Texto | Versión Binaria | Versión Octal |
| --- | 000 | 0 |
| --x | 001 | 1 |
| -w- | 010 | 2 |
| -wx | 011 | 3 |
| r-- | 100 | 4 |
| r-x | 101 | 5 |
| rw- | 110 | 6 |
| rwx | 111 | 7 |
Ahora sí se estarán preguntando para qué nos sirve esta notación numérica?
Bueno, resulta que de esta manera es mucho más fácil manipular los permisos de los archivos mediante comandos y eso es precisamente lo que veremos a continuación.

#### Cambiando permisos y dueños de archivos

Las tareas de cambio de permisos y dueños de archivos pueden ser realizadas fácilmente gracias a los comandos chmod y chown respectivamente.
chmod toma como parámetros los permisos en modo numérico y el nombre del archivo al que se desea realizar el cambio. Por ejemplo:
El comando chmod también se puede usar recursivamente para cambiar los permisos de todos los archivos dentro de una carpeta. Esto se hace con la opción R. Por ejemplo: “chmod –R 755 nombre_carpeta/”
Para cambiar el dueño y grupo asociado con un archivo determinado podemos usar el comando chown. Por ejemplo para cambiar los permisos del archivo anterior al usuario y grupo root ejecutamos lo siguiente.
Al igual que el comando chmod, el comando chown también soporta la opción R.

## RPMs y actualizaciones vía Yum

Los paquetes de software que se incluyen en Elastix vienen en un formato llamado RPM. RPM es un formato heredado de Red Hat y su nombre significa Red Hat Package Manager por sus siglas en inglés. Esto quiere decir que los instaladores de muchos paquetes de software adicional pueden ser instalados en Elastix de manera sencilla.
Los RPMs también nos permitirán actualizar paquetes de software y se encargarán de resolver las dependencias necesarias para que dichos paquetes no causen problemas en el sistema. Esto se logra gracias a que el sistema RPM mantiene una base de datos interna de todos los paquetes instalados con sus respectivas dependencias y versiones. Además nos provee con un comando muy útil para manipular las instalaciones, des- instalaciones, actualizaciones y otras tareas importantes.
A continuación algunas opciones de uso del comando “rpm”:
| Acción a Realizar | Comando |
| Instalación de RPMs | rpm -ivh nombre_del_paquete.rpm |
| Actualización de un RPM | rpm -Uvh nombre_del_paquete.rpm |
| Eliminación de un RPM | rpm -e nombre_del_paquete |
| Obtener información de un archivo RPM | rpm –qpi nombre_del_paquete.rpm |
| Obtener un listado de todos los RPMs instalados en el sistema | rpm -qa |

### Yum al rescate

La instalación manual de RPMs mediante el comando rpm está bien para muchas de las tareas, pero hay ocasiones en las cuales instalar RPMs de esta manera es tedioso y complicado. Un ejemplo de esto es cuando instalamos paquetes RPMs complejos que tienen muchas dependencias y al momento de instalar dicho paquete resulta que nos damos cuenta que tenemos que instalar otro paquete necesario y tenemos que buscarlo en Internet para instalarlo.
Muchas veces un RPM tiene decenas o hasta cientos de dependencias lo que por supuesto nos llevaría horas solucionar manualmente.
Adicionalmente a este problema de dependencias existe otro y es el de la confiabilidad de los RPMs. Es decir, luego de horas y horas de instalar nuestros paquetes manualmente nos damos cuenta de que uno de ellos sobrescribió un archivo importante del sistema y corrompió nuestro Elastix. Vaya dolor de cabeza!
Aquí es cuando entra en escena nuestro héroe llamado Yum!
Yum es una utilidad que nos ayuda a instalar paquetes RPMs desde repositorios y lo hace de una manera muy amigable.
La mayoría de las distribuciones serias, y Elastix no es la excepción, mantienen repositorios de paquetes oficiales de software accesibles gratuitamente a través de Internet y hacen el mayor esfuerzo porque dichos paquetes no tengan problemas de dependencias entre sí. Además los paquetes de los repositorios oficiales son probados para evitar molestias en los usuarios. Es por esta razón que si se usa Elastix lo recomendable es que se instalen paquetes desde el repositorio oficial.
Bueno, ahora vamos al grano y mostremos algunos comandos Yum útiles:
| Comando | Descripción |
| yum update | Actualizar TODO el sistema |
| yum update nombre_paquete | Actualiza solo el paquete especificado y todas sus dependencias |
| yum install nombre_paquete | Instala el paquete especificado y todas sus dependencias |