Grupos de paquetes en RedHat

RedHat, con su gestor de paquetes yum, permiten la instalación de grupos de paquetes que tienen definidos por el fabricante y que facilitan la instalación o desinstalación de múltiples paquetes con un sólo comando.
yum permite listar los grupos instalados en el sistema, así como los disponibles y también desinstalar un grupo, actualizarlo o instalar uno nuevo. Todo ello de forma muy simple y eficaz.
Pero... ¿qué ventaja tiene usar los grupos de paquetes?
La gran ventaja que yo le veo es la instalación de todos los paquetes que se consideran necesarios para que un servicio funcione correctamente dando todo el soporte que RedHat tiene. Es decir, manualmente se puede instalar apache2 (httpd), pero eso no implica que nuestro servidor ahora sea un completo servidor web, sino que faltaría mysql, php, módulos de phyton, etc. Para evitar tener que ir instalando todos los paquetes recomendados, sería más lógico instalar el grupo Web Server.
Para instalar un nuevo grupo,
shell> yum groupinstall "Web Server"
Loaded plugins: rhnplugin
Setting up Group Process
Resolving Dependencies
--> Running transaction check
...

Si lo que nos interesa es obtener información acerca del grupo que hemos instalado o que vamos a instalar,
shell> yum groupinfo "Web Server"
Loaded plugins: rhnplugin
Setting up Group Process

Group: Web Server
 Description: Allows the system to act as a web server, and run Perl and Python web applications.
 Mandatory Packages:
   httpd
 Default Packages:
   crypto-utils
   httpd-manual
   mod_perl
   mod_ssl
   mod_wsgi
   webalizer
 Optional Packages:
   certmonger
   libmemcached
   memcached
   mod_auth_kerb
   mod_auth_mysql
   mod_auth_pgsql
   mod_authz_ldap
   mod_nss
   mod_revocator
   perl-CGI
   perl-CGI-Session
   perl-Cache-Memcached
   python-memcached
   squid
aquí se pueden ver todos los paquetes que forman parte del grupo y que se instalarán, así como una descripción de grupo.
También podemos obtener un listado completo de los grupos instalados, así como de aquellos que están disponibles para su instalación.
shell> yum grouplist
Loaded plugins: rhnplugin
Setting up Group Process
rhel-x86_64-server-6           | 1.5 kB     00:00
rhel-x86_64-server-fastrack-6  | 1.3 kB     00:00
rhn-tools-rhel-x86_64-server-6 | 1.3 kB     00:00
rhel-x86_64-server-6/group     | 1.0 MB     00:00
Installed Groups:
   Base
   Compatibility libraries
   E-mail server
   Fonts
   Georgian Support
   Graphical Administration Tools
   Hardware monitoring utilities
   Legacy UNIX compatibility
   MySQL Database client
   Networking Tools
   PHP Support
   Performance Tools
   Perl Support
   Web Server
Available Groups:
   Additional Development
   Afrikaans Support
   Albanian Support
   Amazigh Support
   Assamese Support
   Azerbaijani Support
   Backup Client
   Backup Server
   ...
   Zulu Support
   iSCSI Storage Client

Para más información, consultar la página del manual de yum.
shell> man yum
Leer más

Fallo al actualizar kubuntu a 11.10

No soy usuario de ubuntu ni de su versión con el escritorio KDE, pero hay veces que por un motivo u otro, toca sufrirlas. Hoy fue uno de esos días.
Recientemente salió una actualización a una nueva versión de Ubuntu/Kubuntu, que pasaba de la 11.04 (Natty Narwhal) a la 11.10 (Oneiric Ocelot), con una gran cantidad de mejoras y muchos paquetes por actualizar.
Para un usuario normal de a pie, esta actualización probablemente no tuviera problema alguno, pero si has modificado y jugado un poco con los permisos usando grupos, esto cambia. En mi caso, había 2 grupos que se usan para acceder al sistema y también para poder escalar privilegios. Estos son wheel y remote_user. En las configuraciones de pam.d por un lado y de sshd por el otro, se especifica que usen estos grupos para permitir convertirse en root y también para permitir el acceso al equipo vía ssh.
shell> getent group
usuariosremotos:x:55:javier, diego, roberto
wheel:x:56:javier, roberto
...
shell> cat /etc/ssh/sshd_config
PermitRootLogin no
AllowGroups usuariosremotos
...

shell> cat /etc/pam.d/su
auth     required       pam_wheel.so use_uid group=wheel
...
Tras realizar la actualización a la nueva versión, el acceso al equipo no está permitido y la posibilidad de convertirse en root, usando su tampoco. Sí es posible realizar todas las tareas desde un usuario local con permisos de sudo.
Después de un rato investigando, resulta que el problema está en que la actualización ha borrado los grupos que se crearon en su día en el sistema y por eso no permite el acceso.
Desde mi punto de vista, un fallo grave que una actualización decida eliminar los grupos preexistentes, ya que en equipos remotos que puedan hacer algo más que un desktop tradicional, esta actualización puede traer consecuencias inesperadas y algún que otro rompedero de cabeza para el administrador.
shell> getent group | grep wheel

shell> getent group | grep usuariosremotos

Leer más

Comandos interesantes: pydf

pydf es uno de esos comandos chorras que puedes no encontrarle una utilidad real en el primer momento, pero que al final terminas por cogerle cariño. Realmente es una representación más amigable del comando df, pero con un formato más entendible y también con mas color. Está escrito en python y disponible en los repositorios debian/ubuntu directamente.
Un ejemplo de uso:
shell> pydf 
Filesystem        Size  Used Avail Use%           Mounted on
/dev/sda3          27G 6720M   20G 23.9 [##.....] /         
/dev/sda1         463M   46M  393M 10.0 [#......] /boot     
/dev/sda5          37G   16G   19G 43.8 [####...] /home     
//10.0.0.7/datos/  14G 4471M   10G 31.2 [##.....] /mnt/win 
Leer más

Crear un fichero vacío desde línea de comandos

La flexibilidad de GNU/Linux es tan grande y permite múltiples combinaciones para realizar un mismo trabajo. En este caso, vamos a ver las diferentes formas de crear un fichero de texto vacío.


shell> touch file.txt
shell> truncate -s0 file.txt
shell> :> file.txt
shell> > file.txt
shell> cat /dev/null > file.txt

Y tú, ¿cuál usas?

Leer más

Instalar smbldap-tools en SLES

smbldap-tools es un conjunto de utilidades que en la mayoría de los casos resulta muy útil para manejar y montar PCD's en GNU/Linux. En sistemas debian/ubuntu existe un paquete que permite su instalación de forma simple e inmediata.


shell> apt-cache search smbldap-tools
 smbldap-tools - Scripts to manage Unix and Samba accounts
shell> apt-get install smbldap-tools
Sin embargo en otras distribuciones contar con este paquete también simplificaría mucho las tareas de montaje y administración, especialmente las primeras, pero no está disponible... o sí.
Suse SLES es una de esas distribuciones que si preguntas por el paquete no está disponible, pero sin embargo, éste sí está disponible dentro del paquete samba-doc. Tras instalarlo con yast, ya tenemos disponible este conjunto de herramientas.
Su localización, /usr/share/doc/packages/samba/examples/LDAP/smbldap-tools-X.X.X y dentro de esta carpeta están los script perl más comunes.
shell> ls
smbldap.conf       smbldap-groupmod   smbldap-populate
smbldap-useradd    smbldap-usermod    smbldap-groupadd
smbldap-groupshow  smbldap_tools.pm   smbldap-userdel
smbldap-usershow   smbldap_bind.conf  smbldap-groupdel
smbldap-passwd     smbldap-userinfo   smb.conf  

Aunque en distribuciones como SLES no resultan demasiado necesarios, especialmente lo de manejo de usuarios, ya que yast lo hace muy bien, el script smbldap-populate sí puede resultar en ocasiones muy útil.
Para usarlo, simplemente hay que copiar los ficheros smb.confsmbldap_bind.conf a /etc, tras lo cual funcionarán igual que en una distro cualquiera.
Leer más

MySQL: query profiler

Una de las grandes innovaciones de MySQL en la versión 5 fue incluir un pequeño truco, no muy extendido, que permite detectar problemas de rendimiento en nuestra BD: query profiler.
Esta funcionalidad, desactivada por defecto en MySQL, desglosa cada una de las partes de las que se compone una consulta. Está especialmente pensado para query's complejas, con varios join's. De esta forma se podrían optimizar mejor las consultas a la BD y así obtener un mejor rendimiento. Gracias a ella podemos descubrir en qué partes la consulta es más rápida y cual es la que le lleva más tiempo realizar. Un ejemplo:
mysql> set profiling=1;
Query OK, 0 rows affected (0.00 sec)

mysql> show databases;
+------------------------+
| Database               |
+------------------------+
| CV                     |
| documentacion          |
| gastos                 |
| mysql                  |
| test                   |
| viajes                 |
+------------------------+
23 rows in set (0.00 sec)

mysql> use gastos;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> show profiles;
+----------+------------+---------------------------+
| Query_ID | Duration   | Query                     |
+----------+------------+---------------------------+
|        1 | 0.00037500 | show databases            |
|        2 | 0.00012600 | SELECT DATABASE()         |
|        3 | 0.19438700 | select count(*) from fact |
+----------+------------+---------------------------+
6 rows in set (0.00 sec)

mysql> select count(*) from facturacion;
+----------+
| count(*) |
+----------+
|   239319 |
+----------+
1 row in set (0.19 sec)

mysql> show profile for query 3;
+--------------------------------+----------+
| Status                         | Duration |
+--------------------------------+----------+
| starting                       | 0.000011 |
| checking query cache for query | 0.000026 |
| Opening tables                 | 0.000009 |
| System lock                    | 0.000003 |
| Table lock                     | 0.000026 |
| init                           | 0.000008 |
| optimizing                     | 0.000003 |
| statistics                     | 0.000007 |
| preparing                      | 0.000004 |
| executing                      | 0.000004 |
| Sending data                   | 0.193768 |
| end                            | 0.000012 |
| query end                      | 0.000003 |
| freeing items                  | 0.000159 |
| storing result in query cache  | 0.000290 |
| logging slow query             | 0.000002 |
| logging slow query             | 0.000048 |
| cleaning up                    | 0.000004 |
+--------------------------------+----------+
18 rows in set (0.00 sec)

mysql> set profiling=0;
Query OK, 0 rows affected (0.00 sec)

La sintaxis del comando es:
SHOW PROFILE [type [, type] ... ]
    [FOR QUERY n]
    [LIMIT row_count [OFFSET offset]]
Donde type puede ser alguno de estos valores:
  • ALL: Muestra toda la información.
  • BLOCK IO: Muestra los bloqueos de I/O.
  • CONTEXT SWITCHES: Muestra las alternancias entre contextos voluntarios e involuntarios.
  • CPU: Tiempo de CPU.
  • IPC: Mensajes enviados y recibidos.
  • PAGE FAULTS: Contador de major y minor pages.
  • SOURCE: Muestra el nombre de las funciones del código y la línea.
  • SWAPS: Contador de swap.
Por ejemplo, la query anterior mostrando los consumos de CPU quedaría,
mysql> show profile cpu for query 6;
+---------------------------+----------+----------+------------+
| Status                    | Duration | CPU_user | CPU_system |
+---------------------------+----------+----------+------------+
| starting                  | 0.000011 | 0.000000 |   0.000000 |
| checking query cache for  | 0.000026 | 0.000000 |   0.000000 |
| Opening tables            | 0.000009 | 0.000000 |   0.000000 |
| System lock               | 0.000003 | 0.000000 |   0.000000 |
| Table lock                | 0.000026 | 0.000000 |   0.000000 |
| init                      | 0.000008 | 0.000000 |   0.000000 |
| optimizing                | 0.000003 | 0.000000 |   0.000000 |
| statistics                | 0.000007 | 0.000000 |   0.000000 |
| preparing                 | 0.000004 | 0.000000 |   0.000000 |
| executing                 | 0.000004 | 0.000000 |   0.000000 |
| Sending data              | 0.193768 | 0.140009 |   0.012001 |
| end                       | 0.000012 | 0.000000 |   0.000000 |
| query end                 | 0.000003 | 0.000000 |   0.000000 |
| freeing items             | 0.000159 | 0.000000 |   0.000000 |
| storing result in query   | 0.000290 | 0.000000 |   0.000000 |
| logging slow query        | 0.000002 | 0.000000 |   0.000000 |
| logging slow query        | 0.000048 | 0.000000 |   0.000000 |
| cleaning up               | 0.000004 | 0.000000 |   0.000000 |
+---------------------------+----------+----------+------------+
18 rows in set (0.00 sec)
La utilidad es grande, ya que si observamos que una parte concreta de la query tarda mucho en ejecutarse, podemos optimizar dicha parte, ya sea la propia query o pensar en realizar, por ejemplo un índice que la acelere.
Leer más

Tareas periódicas en MySQL: Su proceso cron

MySQL tiene una feature desde la versión 5.1, el event_scheduler, que no es más que un proceso interno del motor de base de datos que se está ejecutando en segundo plano y lanza las tareas programadas. Es algo similar al cron de los sistemas GNU/Linux. Para usarlo, debemos primero habilitarlo en el fichero de configuración (/etc/mysql/my.cfg) y reiniciar el servicio.
shell> cat /etc/mysql/my.cnf
    ...
    event_scheduler = 1
shell> /etc/init.d/mysql start
O directamente en el motor de base de datos, arrancar el proceso.
mysql> show variables like 'event_scheduler';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> SET GLOBAL event_scheduler=ON;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'event_scheduler';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | ON    |
+-----------------+-------+
1 row in set (0.00 sec)
Una vez el proceso iniciado, éste aparecerá en la lista de procesos que se están ejecutando en mysql. Muy similar al proceso cron del sistema.
mysql> show processlist;
+----+-----------------+-------+------+---------+------+--------
| Id | User            | Host  | db   | Command | Time | State
+----+-----------------+-------+------+---------+------+--------
| 21 | root            | local | NULL | Query   |    0 | NULL
| 22 | event_scheduler | local | NULL | Daemon  |   24 | Waiting
+----+-----------------+-------+------+---------+------+--------
2 rows in set (0.00 sec)
Ahora sólo queda añadir aquellas tareas repetitivas que deseamos programar. Esta sentencia puede ser casi cualquier que se nos pase por la cabeza que MySQL pueda ejecutar.
mysql> create event rep on schedule
every 30 second
on completion preserve enable
do repair table mysql.user;
Query OK, 0 rows affected (0.00 sec)

mysql> create event in on schedule
every 5 second
on completion preserve enable
do insert into test.test values (3,3);
Query OK, 0 rows affected (0.00 sec)
Tras crear los trabajos, éstos quedan almacenados en la table event, de la base de datos mysql. El proceso scheduler la consulta y realiza lo ahí descrito en el intervalo especificado. Al más puro estilo cron.
mysql> select db,name,body,interval_value from mysql.event;
+-----+----+-----------------------------------+--------------+
| db  |name|body                               |interval_value|
+-----+----+-----------------------------------+--------------+
|mysql|rep |repair table mysql.user            |           30 |
|test |in  |insert into test.test values (3,-3)|            5 |
+-----+----+-------------------------- --------+--------------+
2 rows in set (0.00 sec)
En el trabajo in, se inserta cada 5 segundos una tupla en la tabla test. Para comprobar que esto sí funciona, realizamos un count y vemos que con el tiempo, las tuplas van ascendiendo de forma automática.
mysql> select count(*) from test;
+----------+
| count(*) |
+----------+
|       10 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from test;
+----------+
| count(*) |
+----------+
|       12 |
+----------+
1 row in set (0.00 sec)
El trabajo rep, que se ejecuta cada 30 segundos se encarga de lanzar un proceso de reparación de la tabla user en la base de datos mysql.

Más información sobre este proceso de MySQL en la página oficial.
Leer más

Comandos interesantes: fuser

fuser es una de esas utilidades de las que uno nunca se acuerda, pero que suele ser muy interesante. Su funcionalidad es simple, lista los procesos que tienen bloqueado un determinado fichero o ficheros y permite matarlos y por lo tanto desbloquear el fichero.
Es una buena utilidad ya que permite matar aquellos procesos que quedaron abiertos y no lo sabemos y que, por ejemplo, nos impiden guardar un fichero por que está ya abierto o desmontar un pen por que todavía está en uso. A continuación tenemos un ejemplo de la lista de ficheros y el proceso que los tiene abiertos con la salida de fuser.
shell> fuser -u /var/log/*
 /var/log/atop.log:      29305 (root)
 /var/log/auth.log:       1277 (root)
 /var/log/cron.log:       1277 (root)
 /var/log/daemon.log:     1277 (root)
 /var/log/mail.log:       1277 (root)
 /var/log/msfupdate.log: 10485 (root) 10486 (root)
 /var/log/ntp:            1937 (ntp)
 /var/log/syslog:         1277 (root)

Leer más

Crear directorio en RAM

De todos es sabido que el acceso a memoria RAM es mucho más rápido que a disco, es por ello que en algunas ocasiones o lugares, optimizar el acceso a disco es muy importante para conseguir acelerar de manera notable ciertos programas.
Una buena idea sería tener todo el sistema en RAM, pero es algo que ahora mismo se podría considerar descabellado, sin embargo, localizar determinados directorios en RAM, puede acelerar considerablemente determinadas ejecuciones.
Un servicio que requiere mucha optimización, es por ejemplo, mysql, que siempre consume una gran cantidad de memoria. De cuanta más memoria disponga, mejor irá el sistema. Luego hay determinados datos que se procesan en directorio temporales. esto sucede en mysql, zabbix, apache, etc. Generalmente este directorio es /tmp y suele estar localizado en disco. La idea sería hacer que esté localizado en RAM y que al contener datos volátiles y "no importantes", aunque se pierdan no pasaría nada.
GNU/Linux para realizar esto, tiene un sistema de ficheros especial llamado tmpfs. Se puede usar configurando el /etc/fstab con los datos necesarios.
shell> cat /etc/fstab
...
tmpfs /tmp tmpfs rw,size=1G,nr_inodes=10k 0 0

En el caso puntual de que los ficheros no sean escritos por el usuario root, lo más lógico sería permitir escribir únicamente en ese espacio de memoria al usuario que lo necesite. Para eso, desde la propia línea de fstab se le pueden dar los permisos correctos.
Por ejemplo, para mysql,
shell> cat /etc/fstab
...
tmpfs /tmp/mysql tmpfs rw,uid=mysql,gid=mysql,size=1G,mode=700 0 0
Leer más

Comandos interesantes: lsof

lsof es un comando incluido en las distribuciones GNU/Linux y que permite lista todos los ficheros abiertos. Se podría considerar un comando de monitorización, puesto que permite controlar los ficheros, sockets y pipes que tiene un determinado proceso abierto. La información que nos muestra es muy similar a la que se puede obtener de /proc/$PID/fd, pero mucho más fácil de consultar.



Un ejemplo de cómo funciona,
shell> lsof  /var/log/auth.log
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
syslog-ng 542 root   9w    REG  202,2    28221 1491804 /var/log/auth.log

También permite consultar los ficheros abiertos por un determinado programa (pid), lo que facilita saber qué es lo que está realizando.
shell> lsof -p 542
COMMAND   PID USER   FD   TYPE     DEVICE SIZE/OFF      NODE NAME
syslog-ng 542 root  cwd    DIR      202,2     4096   1474716 /var/lib/syslog-ng
syslog-ng 542 root  mem    REG      202,2   113964   2973983 /lib/ld-2.11.2.so
syslog-ng 542 root   0r    CHR        1,3      0t0       545 /dev/null
syslog-ng 542 root   3u   unix 0xc2bfee00      0t0      2562 /dev/log
syslog-ng 542 root   4w   FIFO        0,8      0t0      2556 pipe
syslog-ng 542 root   8r    REG        0,3        0  26531988 /proc/kmsg
syslog-ng 542 root   9w    REG      202,2    28221   1491804 /var/log/auth.log
syslog-ng 542 root  11w    REG      202,2     8566   1491760 /var/log/daemon.log
syslog-ng 542 root  12w    REG      202,2        0   1492687 /var/log/kern.log
syslog-ng 542 root  13w    REG      202,2     2880   1491340 /var/log/syslog
syslog-ng 542 root  14u    REG      202,2    25703   1492016 /var/log/mail.log
syslog-ng 542 root  17w    REG      202,2     7363   1492346 /var/log/messages
syslog-ng 542 root  18w    CHR       4,10      0t0      1280 /dev/tty10
syslog-ng 542 root  19w   FIFO        0,5      0t0      2537 /dev/xconsole

lsof también permite pasarle como parámetro un puerto y ver qué proceso, ficheros o socket's lo están empleando.
Leer más

XenServer: backup de máquinas

XenServer, la versión de pago de xen, permite realizar backup's de las máquinas de una forma mucho más simple que la versión free, que se basa en los snapshot de lvm. Aunque internamente XenServer también lo hará, veremos cómo hacerlo desde el interfaz xen de forma mucho más simple y rápidamente.
La idea será crear un snapshot de una máquina en producción (en caliente) y a continuación volver a usarla para comprobar que el backup fue correcto. Los backup's desde línea de comandos, se realiza con el comando xe vm-snapshot.
shell> xe vm-snapshot vm=syslog \
       new-name-label=backup_syslog

Si la máquina de la que se va a realizar backup es un equipo Windows, para darle una mayor compatibilidad se podría usar el soporte VSS.
shell> xe vm-snapshot-with-quiesce vm=win_2k8 \
       new-name-label=backup_win_2k8

Cuando el backup finaliza, la salida que se obtiene es el UUID del snapshot, los cuales podremos ver con el comando xe snapshot-list. Si a éste comando se le pasa el UUID de una de las máquinas virtuales, listará todos los backup's que se han realizado para dicha máquina.
Por defecto, el snapshot de una máquina se crea como una template que luego se podría importar y crear nuevas máquinas a partir de ella. En este caso, lo que estamos realizando es un backup de una máquina, por lo que nos interesa tener dicha máquina y no una plantilla. Para transformar una template a máquina virtual,
shell> xe template-param-set is-a-template=false \
ha-always-run=false uuid=UUID_template

Y ahora exportamos la máquina a una imagen .xva.
shell> xe vm-export uuid=UUID_template filename=/mnt/syslog.xva

Cuando nos haga falta restaurarla, únicamente habrá que importarla en el sistema.
shell> xe vm-import filename=/mnt/syslog.xva preserve=true
Leer más

Ruby: consulta a BD multithread

Con todo lo aprendido hasta ahora relacionado con ruby y la apertura de socket's y manejo de bases de datos, vamos a unirlo todo en un pequeño programa ejemplo, que ilustrará la simpleza de código ruby.
Partimos de la siguiente tabla de la base de datos.
mysql> show create table users;
+-------+-----------------------------------------------+
| Table | Create Table                                  |
+-------+-----------------------------------------------+
| users | CREATE TABLE `users` (                        |
|       | `id` int(5) unsigned NOT NULL AUTO_INCREMENT, |
|       | `nombre` text NOT NULL,                       |
|       | `login` varchar(15) NOT NULL,                 |
|       | `passwd` varchar(33) NOT NULL,                |
|       | `is_admin` smallint(1) DEFAULT '0',           |
|       | `email` varchar(100) DEFAULT NULL,            |
|       | PRIMARY KEY (`id`) ) ENGINE=InnoDB            |
+-------+-----------------------------------------------+
1 row in set (0.00 sec)

Con el siguiente código nos conectamos a una base de datos y dejamos un servicio multithread a la escucha, que le devuelve a los clientes el resultado de una query. Aunque es sencillo, el código es muy simple y permitiría montar fácilmente un web service multithread rápidamente.
Leer más

Descubriendo virtualhosts bajo una IP

Recientemente descubrí las opciones avanzadas de búsqueda de bing y la verdad es que vi algo sorprendente y que, desde mi punto de vista, hace bien respecto a Google, que es almacenar la IP del site que indexa. bing permite lanzar búsquedas estilo "ip: 32.59.65.0" y también búsquedas filtrando los sitios, tipo "site: www.pepe.com" o "-site:www.pepe.com", que mostrará todos los resultados de la web pepe.com y todos los que no sean pepe.com, respectivamente.

Yo llevaba un tiempo buscando una forma de poder averiguar el número de virtualhost que hay detrás de una misma IP y la verdad es que no conseguía una herramienta simple y que lo hiciera de forma rápida, así que... aprovechando estas facilitys de bing, opté por investigar un poco más en ese sentido. Pues bien, resulta que hay una librería escrita en python que permite realizar búsquedas de forma rápida y simple usando bing, así que únicamente habría que probarla y escribir un pequeño script que realizase tal tarea. Mucho más fácil que usar curl o lynx! así que, manos a la obra.
  • Descargamos la librería pybing para poder usarla, tal como se indica en la página oficial.
    shell> mkdir pybing
    shell> export PYTHONPATH=~/pybing/
    shell> cd pybing
    shell> svn checkout http://pybing.googlecode.com/svn/trunk/ ~/pybing
    
  • Instalamos la librería httplib de python. Si usamos debian/ubuntu,
    shell> apt-get install python-httplib2
  • Obtenemos un ID válido de microsoft para usar la API de bing.
    Para ello vamos a la web oficial y pedimos un nuevo ID de desarrollador. Es necesario tener una cuenta hotmail/msn con la que asociarlo.
  • Finalmente, copiamos el script y sustituimos el ID de la API donde se indica.
Leer más

MySQL: problemas al crear procedimientos

Tras realizar una actualización del servidor MySQL a su última versión, al importar nuevos procedimientos al motor de base de datos, éste proceso falla y parece ser problema de que una tabla está corrupta.
mysql> source /home/javier/procedures.sql
ERROR 1548 (HY000):
Cannot load from mysql.proc. The table is probably corrupted
La forma de solucionarlo debería de ser simple. Si la tabla está corrupta, la reparamos con el comando repair de mysql y debería de desaparecer el problema.
mysql> repair table mysql.proc;
+------------+--------+----------+----------+
| Table      | Op     | Msg_type | Msg_text |
+------------+--------+----------+----------+
| mysql.proc | repair | status   | OK       |
+------------+--------+----------+----------+
1 row in set (0.00 sec)
Tras realizar esto, el problema persiste y no es por que la tabla esté corrupta. Como se observa en la salida del comando anterior, el estado de la tabla es correcto (OK). Por lo tanto, el problema no está en una tabla corrupta.
Investigando algo más, observé que el problema está en que tras la actualización no se hizo un upgrade de las tablas (mysql_upgrade), que no es necesario para el correcto funcionamiento de mysql, pero sí para, por ejemplo, crear nuevos procedimientos. 
shell> mysql_upgrade -u root -p
Enter passwd:
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck with default connection arguments
Running 'mysqlcheck with default connection arguments
mysql.host                                               OK
mysql.ndb_binlog_index                                   OK
mysql.plugin                                             OK
mysql.proc                                               OK
mysql.procs_priv                                         OK
mysql.proxies_priv                                       OK
...
Si ahora intentamos crear los procedimientos, ya es posible.
mysql> source /home/javier/procedures.sql
Query OK, 0 rows affected (0.00 sec)
Leer más

Instalar Percona en Red Hat 6

En la última versión de Red Hat (6.0), encontré un problema a la hora de instalar percona (mysql), que no fue otro que incompatibilidades con el software preinstalado del sistema con el nuevo servidor de base de datos, en su versión 5.5.
shell> yum install Percona-Server-server-55.x86_64
...
Transaction Check Error:
 file /usr/lib64/libmysqlclient.so from install of Percona-Server-shared-55-5.5.16-rel22.0.189.rhel6.x86_64 conflicts with file from package Percona-Server-shared-51-5.1.59-rel13.0.325.rhel6.x86_64
 file /usr/lib64/libmysqlclient_r.so from install of Percona-Server-shared-55-5.5.16-rel22.0.189.rhel6.x86_64 conflicts with file from package Percona-Server-shared-51-5.1.59-rel13.0.325.rhel6.x86_64
 file /usr/lib64/mysql/plugin/libfnv1a_udf.a from install of Percona-Server-shared-55-5.5.16-rel22.0.189.rhel6.x86_64 conflicts with file from package Percona-Server-shared-51-5.1.59-rel13.0.325.rhel6.x86_64
 file /usr/lib64/mysql/plugin/libfnv_udf.a from install of Percona-Server-shared-55-5.5.16-rel22.0.189.rhel6.x86_64 conflicts with file from package Percona-Server-shared-51-5.1.59-rel13.0.325.rhel6.x86_64
 file /usr/lib64/mysql/plugin/libmurmur_udf.a from install of Percona-Server-shared-55-5.5.16-rel22.0.189.rhel6.x86_64 conflicts with file from package Percona-Server-shared-51-5.1.59-rel13.0.325.rhel6.x86_64

Error Summary
-------------

Para solucionarlos, detallo a continuación los pasos.
  1. Agregar el respositorio oficial
    shell> rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm
    Retrieving percona.com/.../percona-release-0.0-1.x86_64.rpm
    Preparing...######################################### [100%]
       1:percona-release################################# [100%]
    
    o lo agregamos manualmente:
    shell> vi /etc/yum.repos.d/Percona.repo
    [percona]
    name = CentOS $releasever - Percona
    baseurl=http://repo.percona.com/centos/$releasever/os/$basearch/
    enabled = 1
    gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-percona
    gpgcheck = 1
    Si hacemos esto, también tenemos que agregar la clave GPG del repositorio,
    shell> vi /etc/pki/rpm-gpg/RPM-GPG-KEY-percona
    El contenido está en Percona GPG key.
Leer más

Comandos interesantes: dig




El comando dig sirve pare realizar consultas sencillas a un servidor DNS y obtener cualquier registro que interese de un dominio. Por defecto, el comando usa los servidores predeterminados de nuestro sistema, ubicados en /etc/resolv.conf y pide los registros de tipo A.





shell> dig google.es

; <<>> DiG 9.7.3 <<>> google.es
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode:QUERY, status:NOERROR, id:11789
;; flags:qr rd ra; QUERY:1, ANSWER:6, AUTHORITY:0, ADDITIONAL:0

;; QUESTION SECTION:
;google.es.   IN A

;; ANSWER SECTION:
google.es.    300   IN   A   209.85.148.104
google.es.    300   IN   A   209.85.148.106
google.es.    300   IN   A   209.85.148.103
google.es.    300   IN   A   209.85.148.105
google.es.    300   IN   A   209.85.148.99
google.es.    300   IN   A   209.85.148.147

;; Query time: 63 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Oct 11 17:13:38 2011
;; MSG SIZE  rcvd: 123

Los princiaples registros que DNS maneja son:
  • A, define la dirección IPv4.
  • AAA, define la dirección IPv6.
  • NS, define los servidores DNS.
  • MX, define los servidores de correo.
  • CNAME, permite definir alias de otros nombres.
  • SOA, contiene información sobre el servidor DNS primario
  • LOC, define la localización
Para pedir un registro específico al DNS, simplemente indicamos en el comando el tipo.
Leer más

lvm + xen, la combinación perfecta

La importación actual de lvm es tal, que está presente para poder ser usada incluso como particiones en sistemas de vurtualización, tales como xen o virtualbox. La versión xen gratuita, en sistemas debian/ubuntu, gracias al script xen-create-image puede crear nuevos volúmenes lógicos en un grupo y usarlos para la instalación del nuevo sistema operativo.
shell> xen-create-image --lvm=vg0 \
--hostname=syslog-server \
--memory=512M \
--ip=192.168.1.100 \
--role=udev
El resultado final es una fichero de configuración de la nueva máquina sobre el que se puede observar cómo las particiones están presentes sobre volúmenes lógicos y no sobre ficheros en disco, consiguiendo así un mayor rendimiento.
Leer más

XenServer: bonding ethX

Una de las desventajas que tiene la virtualización es justamente una de las ventajas, que todos los equipos, o cuando menos un gran número de los mismos, están sobre una única máquina física. Si ésta falla, todos los equipos que se estén ejecutando en ella, también falla. El método que hay para evitar estos fallos es la replicación de hardware. Por ejemplo, a nivel de discos duros/sistema operativo, lo que se hace es usar RAID, así aunque un disco falle, el sistema no falla, ya que está replicado. A nivel de tarjetas de red, existe algo similar, el  bonding. Para poder activarlo, simplemente es necesario que el kernel del sistema lo soporte y en caso de XenSever, sí está soportado.
Existen 7 modos de diferentes de bonding, que son:
  • mode=0 (balance-rr)
    Balanceo por round-robin.
    Permite tolerancia a fallos y balanceo de cargas. Los datos  son recibidos y enviados secuencialmente por cada interfaz del bond, empezando con el primero disponible. Si uno falla, es deshabilitado del balanceo.
  • mode=1 (balance-xor)
    Balanceo de respaldo activo.
    Los datos son enviados y recibidos por el interfaz activo del bond. Si éste falla, se empiezan a enviar por el otro disponible.
  • mode=2 (balance-xor)
    Balanceo XOR para tolerancia a fallos y balanceo de carga.
    Con este modo el interfaz tiene la dirección MAC de las peticiones entrantes con la dirección MAC de una de las NIC's del bond. Una vez que se establece un nuevo enlace, los datos son enviados secuencialmente comenzando con la primera interfaz disponible.
Leer más

puppet manifest for zabbix-agent

A continuación, el manifiesto necesario para instalar el agente zabbix en todos los sistemas cliente que deseemos sin esfuerzo alguno desde puppet.
Primero, creamos la subclase de parámetros, por si es necesario alguna modificación, sólo tocar este fichero.
class zabbix::params {
   $agent_packagename = $operatingsystem ? {
      debian=> "zabbix-agent",
      ubuntu=> "zabbix-agent",
      default=> "zabbix",
   }

   $server_packagename = $operatingsystem ? {
      debian=> "zabbix-server-mysql",
      ubuntu=> "zabbix-server-mysql",
      default=> "zabbix-server",
   }

   $provider = $operatingsystem ? {
      debian=> "debian",
      ubuntu=> "debian",
      default=> "init",
   }

   $agent_servicename = $operatingsystem ? {
      debian=> "zabbix-agent",
      ubuntu=> "zabbix-agent",
      default=> "zabbix",
   }

   $server_servicename = $operatingsystem ? {
      debian=> "zabbix-server",
      ubuntu=> "zabbix-server",
      default=> "zabbix-server-mysql",
   }

   $agent_configfiled = $operatingsystem ? {
      default=> "/etc/zabbix/zabbix_agentd.conf",
   }

   $agent_configfile = $operatingsystem ? {
      default=> "/etc/zabbix/zabbix_agent.conf",
   }

   $server_configfiled = $operatingsystem ? {
      default=> "/etc/zabbix/zabbix_server.conf",
   }

   $agent_dir = $operatingsystem ? {
      default=> "/etc/zabbix",
   }
}

La clase zabbix.
Leer más

Comandos interesantes: xentop

xentop es una herramienta de monitorización de dominios cero (dom 0) que, al igual que top, permite observar en tiempo real los cambios que se van produciendo en las máquinas virtuales así como en el dom 0. Está disponible tanto para XenServer como para xen no comercial.
shell> xentop
xentop - 11:13:29   Xen 4.0.1
6 domains: 1 running, 5 blocked, 0 paused, 0 crashed, 0 dying, 0 shutdown
Mem: 10485140k total, 10476364k used, 8776k free    CPUs: 4 @ 1995MHz
NAME     STATE  CPU(sec) CPU(%) MEM(k)  MEM(%) MAXMEM(k) MAXMEM(%) VCPUS NETS ...
apache   --b---  78413   0.1    2093312 20.0   2097152   20.0      1     1    ...
dhcp     --b---  30969   0.0     258304  2.5    262144    2.5      1     1    ...
Domain-0 -----r 260649   4.1    4625408 44.1   no limit  n/a       4     0    ...
mysql    --b---  85804   0.2    2093312 20.0   2097152   20.0      1     1    ...
puppet   -----r 171038   0.5     258304  2.5    262144    2.5      1     1    ...
win      --b---  94523   7.0    1052640 10.0   1052672   10.0      1     1    ...

Leer más

Deshabilitar el File Access Time del fs

Bajo ciertas circunstancias el rendimiento del sistema de ficheros es más importante que tener la fecha de la última escritura o del última acceso a un fichero. Por ejemplo, si el sistema de ficheros está únicamente dedicado a bases de datos (un MySQL) que necesitan mucho rendimiento de I/O, deshabilitar la escritura de acceso del sistema de ficheros puede permitirnos ganar en rendimiento.
Es por ello, que los sistemas de ficheros modernos integrados de GNU/Linux permiten deshabilitar dichas opciones cuando se montan para ser usados. Estas opciones son:
  • noatime
    no actualiza el inodo con el tiempo de acceso.
  • nodiratime
    no actualiza el inodo del directorio con el tiempo de acceso.
Y estos cambios pueden hacerse permanentemente si se escriben en /etc/fstab para que al montar la partición ya tengas estos valores por defecto, quedando tal que así.
#<file system> <mount point> <type> <options>        <dump> <pass>
/dev/sda3       /srv          xfs    noatime,nodiratime  0      0
Leer más

XenServer: instalar Windows 2008


En la última versión de XenServer, existe un fallo conocido por Microsoft que impide la instalación y correcto funcionamiento de Windows 2008 SBS como sistema virtualizado. Para evitar este fallo hay que realizar una serie de pasos, tal como se detalla en la página de soporte de Microsoft.

Los pasos a seguir para evitar que suceda el bug son:
  1. Instalar nuestro Windows 2008 desde la plantilla que provee XenServer.
  2. En el primer arranque presionar F8 para entrar en modo a prueba de fallos y entramos como administrador.
  3. Se modifica la entrada del registro HKLM\SYSTEM\CurrentControlSet\Services\HTTP y se añade el multi-string DependOnService y decimos que sea de tipo CRYPTSVC.
  4. Se reinicia el equipo.
Leer más

git (III)

Las ventajas de git ya se han comentado y también cómo instalarlo y configurarlo, así que ahora toca comenzar a usarlo en nuestros proyectos, para tener un control de versión de los ficheros y evitar cualquier contratiempo en el código o en los ficheros.
Comenzamos creando un directorio de trabajo para el nuevo proyecto, así como la estructura que deseemos para el mismo.
shell> mkdir ~/proyecto_1
shell> cd ~/proyecto_1
shell> mkdir bin src img

Será sobre este directorio sobre el que creemos un repositorio git.
shell> git init
Initialized empty Git repository in ~/proyecto_1/.git/

Si alguno de los ficheros y/o directorios no nos interesa que esté dentro del repositorio, lo añadimos al fichero .gitignore.
shell> echo "bin" > .gitignore

Y a continuación añadimos los ficheros al repositorio, como primer commit.
shell> git add .
shell> git commit -m "Comenzamos el proyecto"
[master (root-commit) e89cb3e] Comenzamos el proyecto
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 .gitignore

Comprobamos que todo fue correcto.
shell> git log
commit e89cb3ed08f2e3ada7d2c7132807d87cecba1dbb
Author: Javier
Date:   Tue Oct 18 20:07:44 2011 +0200

    Comenzamos el proyecto

Leer más

XenServer: comandos básicos (II)

Seguimos con la lista de comandos útiles para manejar XenServer desde la consola.





  • Listado de máquinas virtuales
    shell> xe vm-list
  • Listado de hosts por pool
    shell> xe host-list
  • Listado de máquinas en un host
    shell> xe vm-list resident-on=UUID
  • Listado de repositorios de almacenamiento
    shell> xe sr-list
Leer más

puppet manifest for git

Como se comentó en el último post sobre git, antes de comenzar a usarlo y crear repositorios, se muestra la clase que permite la configuración automática de git cuando un usuario se crea desde puppet.
class usuarios {
   define add_user($username, $git=false) {
      user { "$name":
         ensure        => present,
         membership    => inclusive,
         comment       => $username,
         home          => "/home/$name",
         provider      => useradd,
         shell         => "/bin/bash",
      }

      file { "/home/$name/":
         owner         => $name,
         group         => $operatingsystem ? {
            suse       => "users",
            default    => "$name",
         },
         mode          => 750,
         ensure        => directory;
      }
      if $key {
         file { "/home/$name/.gitconfig":
            owner      => $name,
            group      => $operatingsystem ? {
               suse    => "users",
               default => "$name",
            },
            mode       => 0600,
            require    => File["/home/$name"],
            content    => template("templates/gitconfig.erb");
         }
      }
   }
}
Leer más

XenServer: cómo instalar un hotfix

XenServer, como la mayoría del software existente tiene ciertas vulnerabilidades que van apareciendo con el tiempo y para solucionarlas, sacan parches que pueden ser instalados como upgrades a la versión que esté instalada. La forma de hacerlo desde consola es:

  1. Descargamos el parche desde la web oficial.
  2. shell> wget http://support.citrix.com/.../XS56ESP2010.zip
    
  3. Descomprimimos el parche.
  4. shell> unzip XS56ESP2010.zip
  5. Instalamos el parche con patch-upload.
  6. shell> xe patch-upload file-name=XS56ESP2010
    655996656-1d38-485e-8f9d-fa6fc4859591
    
  7. Aplicamos ahora el parche que se acaba de instalar con patch-pool-apply.
  8. shell> xe patch-pool-apply uuid=655996656-...
  9. Podemos ahora verificar que el parche está correctamente aplicado.
  10. shell> xe patch-list
    
  11. Se reinicia el servidor.
  12. shell> reboot
    
Leer más

XenServer: comandos básicos (I)

XenServer tiene la posibilidad de usarse desde interfaz gráfico, gracias a la potente herramienta que han desarrollado para tal efecto, pero también es posible su manejo desde consola. Para hacerlo, la forma más sencilla es interactuar con la API que provee: La XenAPI. En ella, prácticamente todos los comandos comienzan por xe vm-*.
A continuación veremos los comandos básicos para realizar las principales operaciones:

  • Arrancar
    shell> xe vm-start name-label=NAME
  • Apagar
    shell> xe vm-shutdown name-label=NAME
    Se le puede pasar la opción force=true, para forzar el apagado de la máquina, que sería como sacarle la corriente de la misma.
    shell> xe vm-shutdown name-label=NAME force=true
  • Reiniciar
    shell> xe vm-reboot name-label=NAME
    Al igual que en el apagado, se le puede pasar la opción force=true para forzar el reinicio en caso de que no responda.
    shell> xe vm-reboot name-label=NAME force=true
  • Migrar
    Se migra una máquina de un servidor físico a otro servidor físico. Para que este comando sea correcto, los servidores necesitarán estar en clúster y además tener un medio de almacenamiento compartido para la máquina a migrar.
    La máquina por su parte necesitará de las xen-tools instaladas para que todo el proceso sea correcto.
    shell> xe vm-migrate name-label=NAME host=server_02
  • Exportar
    Exporta la máquina como un fichero (una copia del disco) para poder hacer backup del mismo. La máquina en este caso necesita estar apagada. En otro post se indica cómo exportar una máquina encendida (en caliente).
    shell> xe vm-export name-label=NAME filename=/mnt/NAME.xva
  • Importar
    Permite importar la máquina desde un fichero previamente exportado, ya bien sea del mismo sistema o de otro sistema.
    shell> xe vm-import /mnt/NAME.xva

En todas las opciones se puede pasar el nombre de la máquina o el UUID de la misma. Aquí se muestran con el nombre por la simplicidad que ello conlleva para entenderse.
Leer más

git (II)

Prácticamente todos los sistemas GNU/Linux tienen en sus repositorios la versión de git para poder instalarla y comenzar a usarla.
La instalación de git en sistemas debian/ubuntu, como siempre, desde repositorios oficiales,

shell> apt-get install git-core
Para sistemas Windows: http://code.google.com/p/msysgit

Una vez terminada la instalación de git, queda configurarlo para poder usarlo de forma adecuada. Si la instalación es para un único usuario, lo más simple es ejecutar los siguientes comandos, que configuran el nombre, el email y establece colores para una mejor visualización de los datos de los repositorios.
shell> git config --global user.name "USER NAME"
shell> git config --global user.email "USER@COMPANY.COM"
shell> git config --global color.status auto
shell> git config --global color.branch auto

Estos comandos escriben en el fichero ~/.gitconfig la configuración propia del usuario. Y el contenido será similar al siguiente:
shell> cat ~/.gitconfig
[user]
 name  = Javier
 email = javier@company.com
[color]
 status = auto
 branch = auto

En el siguiente post sobre git, se explicará cómo poder instalarlo usando puppet y configurarlo para cada usuario que maneje puppet.
Leer más

puppet: creando grupos

Para crear o modificar un grupo del sistema desde puppet,
group {
   ssh:
      ensure => present,
      gid    => 55;
   usuariosremotos:
      ensure => present,
      gid    => 56;
}
Leer más

git (I)


La semana pasada vi como un buen colega recomendaba el uso de git para tener un control de versiones de una página web. Hablando con él, allí nos pusimos a comentar sobre repositorios, branch, etc. Ahí le dije que intentaría escribir algún post acerca de git y cómo usarlo, ya que desde hace tiempo, lo uso para tener un mejor control de las cosas que se hacen. En este primer post, se hará una introducción a git a nivel teórico, para luego pasar a un nivel práctico en las siguientes entradas.

git es un software de control de versiones, escrito inicialmente por Linus Torvalds, pensado para la eficiencia y la confiabilidad del mantenimiento de diferentes versiones de código fuente u otros archivos. El diseño de git surgió de la experiencia y necesidades de Linus, así como de la necesidad de mantener una gran cantidad de código distribuida entre mucha gente, en donde la rapidez y el rendimiento son importantes.

Las principales características son:
  • Fuerte apoyo al desarrollo no-lineal.
  • Gestión distribuida.
  • Compatibilidad con diferentes sistemas/protocolos ya existentes (http, ftp, rsync).
  • Eficiencia trabajando con grandes proyectos.
Dentro de la nomenclatura git, las partes más destacables son:
  • Repositorio
    Contiene todo el historial de las diferentes versiones en la línea temporal, con las ramas y etiquetas. En git, al ser un sistema distribuido, no existe un único repositorio central, sino que cada copia es un repositorio completo, por lo que suele existir un repositorio local y un repositorio remoto.
  • Rama (branch)
    Una rama es una copia del código principal sobre el que se realizarán determinados cambios y por ello merece un nombre especial. Para verlo más fácilmente, una rama es cada una de las versiones del kernel. Cada rama, cuelga del principal, pero con determinados cambios muy concretos. Por ejemplo, se podría tener una versión de una web y luego realizar una rama para cada implementación final. git facilita la creación de ramas y el trabajar rápidamente con ellas.
  • Etiqueta (tag)
    Una etiqueta es un concepto similar al de una rama, pero sin desviarse de la línea de código principal. Una etiqueta marca un punto concreto al que poder regresar para revertir cambios.
Leer más

Usando LVM (V)

Para borrar un volumen previamente creado, usaremos lvremove.
shell> lvremove /dev/vg0/home 
Do you really want to remove active logical volume home? [y/n]: y
  Logical volume "home" successfully removed
Leer más

Usando LVM (IV)

lvm, creación avanzada de volúmenes lógicos
lvm permite crear volúmenes más a medida y especificar determinados parámetros para obtener un mejor rendimiento a la hora de crear un volumen lógico.
La forma rápida de crear un volumen es, donde se crea un nuevo volumen de 2 Gb de tamaño, llamado tmp sobre el grupo vg0.
shell> lvcreate -L 2GB -n tmp vg0

lvcreate también permite crear un nuevo volumen con porcentajes de espacio libre o total referente al grupo al que pertenezca. Por ejemplo, para crear un nuevo volumen que tenga el 25% del espacio total del grupo, sería:
shell> lvcreate -l 25%VG -n tmp vg0

Y si nos interesa crear un volumen que tenga el 50% del espacio libre que haya en ese momento...
shell> lvcreate -l 50%FREE -n tmp vg0
Leer más

Zabbix: monitorizando log's

Zabbix nos permite obtener los log's de un determinado equipo y en función de su contenido, en base a expresiones regulares, sacar alertas. Esto puede ser algo muy útil por ejemplo, para controlar el número de accesos ssh fallidos a un determinado equipo en un tiempo X predeterminado.
Incluso si avanzamos más, se podrían escalar lo dicho anteriormente a toda la red, por lo que  si a un rango de red es atacada en el mismo momento por un acceso de ssh, puede ser que estén atacando a todos los equipos. Este tipo de avisos también los podremos controlar con zabbix.
Para comenzar a monitorizar los log's primero hay que asegurarse de que en la configuración del equipo agente esté correctamente configurado el nombre del equipo. El nombre que esté en zabbix_agentd.conf debe de coincidir con el nombre del equipo del zabbix-server. Esto es por que la monitorización de log's se realiza mediante check's activos, es el cliente el que envía los datos, no el servidor el que se los pide.
Leer más

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios