linea de comando

Repair tables Mysql – todo en uno solo

Para variar en mi experiencia como sysadmin, tengo que lidiar con problemas que a veces son faciles de resolver pero otras veces son tendiosos, como fue el caso de una base de datos de mysql que fue corrupta por falta de espacio en disco, esto tiene una facil solucion pero algo tedioso cuando mas de una 1 tabla ha sido marcada como crashed,

aqui les dejo un script bastante simple para evitarnos tener que escribir tanto :D

<br />
select concat('repair table ', table_name, ';') from information_schema.tables where table_schema='nombre_de_la_db';<br />

Al terminar esta linea, podran ver en el output todos los nombres de las tablas precedidos por el comando repair table y finalizados por el “;”
Asi que unicamente es de copiar la salida y eliminar los caracteres de pipe “|” para luego pegar en el CLI de mysql y esperar un poco para que todo quede como nuevo :P

ntop en centos/RHEL

Primero vamos a descargar la ultima version de Ntop (http://freshmeat.net/projects/ntop/)

ahora a poner todo el software necesario y pedido como pre-requisito:

<br />
yum install libpcap-devel libpcap glib gcc make libtool gdbm-devel<br />
zlib-devel libpcap-devel GeoIP GeoIP-devel php-pear python python-devel<br />
php-devel<br />

Antes de continuar necesitamos instalar el RRDTool en Centos/RHEL

<br />
yum install cairo-devel libxml2-devel pango-devel pango<br />
libpng-devel freetype freetype-devel libart_lgpl-devel<br />

<br />
cd /opt/<br />
wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.4.tar.gz<br />
cd rrdtool-1.4.4<br />
tar -zxvf rrdtool-1.4.4.tar.gz<br />
export PKG_CONFIG_PATH=/usr/lib/pkgconfig/<br />
./configure<br />

ahora vamos a compilarlo

<br />
make<br />
make install<br />
cd /usr/local/<br />
ln -s rrdtool-1.4.4 rrdtool/<br />
cd rrdtool<br />
ls -l<br />

Ahora si vamos a el Ntop

<br />
cd ntop<br />
./autogen.sh<br />
make<br />

si por alguna razon tenemos algun problema como este:
WARNING: You will need re2c 0.9.11 or later if you want to regenerate PHP parsers.,
vamos a instalar :

<br />
wget ftp://195.220.108.108/linux/dag/redhat/el4/en/i386/dag/RPMS/re2c-0.13.5-1.el4.rf.i386.rpm<br />
rpm -iah re2c-0.13.5-1.el4.rf.i386.rpm<br />

Repositorio bastante util

ahora los utlimos pasos:

<br />
make install<br />
make install-data-as<br />

<br />
useradd -M -s /sbin/nologin -r ntop<br />
chown ntop:root /usr/local/var/ntop/<br />
chown ntop:ntop /usr/local/share/ntop/<br />

ahora a colocar el password administrativo:

 ntop -A

iniciamos el ntop

<br />
/usr/local/bin/ntop -d -L -u ntop -P /usr/local/var/ntop &#8211;skip-version-check &#8211;use-syslog=daemon<br />

en donde :
* -i “eth0,eth1″ : en donde especificamos cual o cuales interfaces estaran monitoreando
* -d : correr como daemon el ntop
* -L : enviar todos los mensajes a (/var/log/messages) en lugar de la pantalla
* -u ntop : iniciar ntop como usuario ntop
* -P /usr/local/var/ntop : especificar que la base de datos guarde su DB en este lugar especifico.
* –skip-version-check : des habilitar el chequeo periodico de version que hace el ntop.
* –use-syslog=daemon : Use syslog daemon.

ahora si accedamos

http://localhost:3000/ 

nota: algun problema con el dot que grafica de trafico he aqui las instrucciones

Mejorando el rendimiento de Mysql en centos 5.1

La verdad es tan solo algunos settings que podemos poner a jugar para mejorar nuestro rendimiento

<br />
[mysqld]<br />
datadir=/var/lib/mysql<br />
socket=/var/lib/mysql/mysql.sock<br />
skip-name-resolve<br />
back_log = 75<br />
max_connections = 500<br />
key_buffer = 384M<br />
myisam_sort_buffer_size = 64M<br />
join_buffer_size = 1M<br />
read_buffer_size = 1M<br />
sort_buffer_size = 2M<br />
table_cache = 1800<br />
thread_cache_size = 384<br />
wait_timeout = 7200<br />
connect_timeout = 10<br />
tmp_table_size = 64M<br />
max_heap_table_size = 64M<br />
max_allowed_packet = 64M<br />
max_connect_errors = 1000<br />
read_rnd_buffer_size = 524288<br />
bulk_insert_buffer_size = 16M<br />
query_cache_min_res = 2K *<br />
query_cache_limit = 4M<br />
query_cache_size = 32M *<br />
query_cache_type = 1 *<br />
query_prealloc_size = 65536<br />
query_alloc_block_size = 131072<br />

* Valores que podemos jugar con respecto a nuestra memoria fisica y tipo de procesador

Recuperar clave de root en Mysql (5 pasos)

Vamos a recuperar nuestra clave de root en 5 simples pasos

<br />
1) #/etc/init.d/mysql stop</p>
<p>2) # mysqld_safe --skip-grant-tables &amp;</p>
<p>3) # mysql -u root<br />

Ahora vamos a CLI de Mysql

<br />
4)<br />
mysql&gt; use mysql;</p>
<p>mysql&gt; update user set password=PASSWORD(“password nuevo”) where user=’root’;</p>
<p>mysql&gt; flush privileges;</p>
<p>mysql&gt; quit<br />

Paso final

<br />
5) # /etc/init.d/mysql stop<br />

Ahora a probar los cambios realizados:

<br />
# /etc/init.d/mysql start</p>
<p># mysql -u root -p<br />

Android SDK en Ubuntu 64

pequeños detalles que tenemos que aprender a resolver, ahora que he iniciado mi aventura en el codigo fuente de Android 2.2.1 (froyo).

me he instalado el SDK de android en un server virtual de 64bits con Ubuntu server version, al inicio obtuve es problema y creo que es el mas evidente de incompatibilidad de librerias:

<br />
Failed to get the adb version: Cannot run program &quot;/home/techno/devtools/android/android-sdk-linux_x86/tools/adb&quot;: java.io.IOException: error=2, No such file or directory<br />

ahora bien vamos a resolver el problema de una vez por todas, debido a que en ubuntu 64 las librerias x86 no estan disponibles por defecto en la plataforma y debemos colocarlas, encontre un programilla que resuelve de lo mejor esta situacion: getlibs.

Al bajar e instalar este paquete podremos utilizarlo de la siguiente forma:

<br />
getlibs aapt<br />

con lo cual instalara y actualizara las siguiente librerias

<br />
The following NEW packages will be installed:<br />
  ia32-libs lib32asound2 lib32gcc1 lib32ncurses5 lib32stdc++6 lib32z1<br />
  libc6-i386<br />
The following packages will be upgraded:<br />
  libc6 libc6-dev<br />

Listo situacion resuelta!!!

iperf – Monitor de Ancho de banda

Iperf es una herramienta para medir el ancho de banda y la calidad de un enlace de red. Jperf puede estar asociada con Iperf para proporcionar una interfaz gráfica escrita en Java.

El enlace de red está delimitada por dos hosts que ejecutan Iperf.

La calidad de un enlace se puede probar de la siguiente manera:
- La latencia (tiempo de respuesta o RTT): se puede medir con el comando ping.
- Jitter (variación de latencia): se puede medir con una prueba de Iperf UDP.
- La pérdida de datagramas: se puede medir con una prueba de Iperf UDP.

El ancho de banda se mide a través de pruebas de TCP.

Para que quede claro, la diferencia entre TCP (Transmission Control Protocol) y UDP (User Datagram Protocol) es que el uso de TCP procesos para comprobar que los paquetes se envían correctamente al receptor, mientras que con UDP los paquetes se envían sin ningún control, pero con la ventaja de ser más rápido que TCP.
Iperf utiliza las diferentes capacidades de TCP y UDP para proporcionar estadísticas sobre los enlaces de red.

Por último, Iperf se puede instalar muy fácilmente en cualquier UNIX / Linux o sistema operativo de Microsoft Windows. Un host debe estar configurado como cliente, el otro como servidor.

Link | Tutorial iperf (ingles)

Nmon – Herramienta de monitoreo

NMon (por Nigel’s MONitor) es un sistema de monitoreo para Linux y AIX. Nos permite ver en pantalla los diferentes indicadores de nuestro sistema, o hacerlo de forma no interactiva guardando todos los datos a un CVS para luego procesar y graficar los datos recabados.

Es gratis, muy simple de instalar (hay ejecutables para las diferentes distribuciones) y si bien no tiene soporte oficial por parte de IBM, está disponible para bajar desde la wiki de AIX de IBM.

Con el podremos medir y graficar:

* Uso de CPU
* Uso de memoria
* Estadísticas del kernel y de la cola de ejecución de procesos
* I/O, transferencias, y tasas de lectura/escritura de los discos
* Espacio libre en file systems
* I/O, transferencias, y tasas de lectura/escritura de las interfaces de red
* Paginado de memoria
* Network File System (NFS)

Si queremos capturar datos para posterior análisis, utilizamos la opción -f. La opción -s configura el período de muestreo, y la opción -c la cantidad de muestreos.

Por ejemplo, para obtener muestras cada 30 segundos durante una hora (120 muestras), ejecutamos:
view source
print?
nmon -f -s 30 -c 120

Esto genera un archivo con nombre hostname_date_time.nmon con formato CSV, que luego puede ser interpretado por el NMon analyser. Por más info, ver la wiki de NMon analyser y la ayuda de NMon.

Link | Nmon Wiki
Link | Nmon descarga

debugging IAX en Asterisk 1.4

Debido a algunos problemas con un carrier de Voip que me provee sus enlaces via IAX2 he tenido que aprender a tomar la investigación por mi propia cuenta, en realidad voy a describir un poco las herramientas que he utilizado hasta el momento para tratar de encontrar el error.

Primero y lo mas basico vamos a habilitar los logs de asterisk a su mayor capacidad, para esto modificaremos el archivo Logger.conf

<br />
[root@srv-pbx asterisk]# pwd<br />
/etc/asterisk<br />
[root@srv-pbx asterisk]# ls -lha logger.conf<br />
-rw-r--r-- 1 root root 144 Sep  9 11:23 logger.conf<br />

En este archivo asterisk define tanto el nivel de reportes, como el nombre de los archivos generados para guardar los mismos.

  • debug
  • notice
  • warning
  • error
  • verbose
  • dtmf

Ejemplos:
debug => debug
console => notice,warning,error
messages => notice,warning,error
full => notice,warning,error,verbose
syslog.local0 => notice,warning,error

<br />
[root@srv-pbx asterisk]# cat logger.conf<br />
[logfiles]<br />
debug =&gt; debug<br />
console =&gt; notice,warning,error<br />
messages =&gt; notice,warning,error,debug,verbose<br />
full =&gt; notice,warning,error,verbose<br />

Luego de realizadas estas modificaciones desde nuestro CLI vamos a ejecutar “logger reload” para poner a funcionar los nuevos logs

para no perdernos entre tanta información que a veces asterisk despliega en su consola vamos a colocar un “mute

<br />
srv-pbx*CLI&gt; set verbose 0<br />
Verbosity is now OFF<br />

Seguido esto podemos iniciar a tomar trazas de nuestra actividad IAX2

<br />
srv-pbx*CLI&gt; iax2 set debug<br />
IAX2 Debugging Enabled<br />

De esto podremos obtener un poco de información que esta relacionada con nuestro trafico/registro/identificación

<br />
Rx-Frame Retry[ No] -- OSeqno: 000 ISeqno: 000 Type: IAX     Subclass: POKE<br />
   Timestamp: 00017ms  SCall: 03132  DCall: 00000 [172.20.1.141:4569]<br />
Rx-Frame Retry[ No] -- OSeqno: 000 ISeqno: 001 Type: IAX     Subclass: ACK<br />
   Timestamp: 00023ms  SCall: 03132  DCall: 00001 [172.20.1.141:4569]<br />
Tx-Frame Retry[000] -- OSeqno: 000 ISeqno: 000 Type: IAX     Subclass: POKE<br />
   Timestamp: 00004ms  SCall: 11911  DCall: 00000 [127.0.0.1:39767]<br />
Tx-Frame Retry[000] -- OSeqno: 000 ISeqno: 000 Type: IAX     Subclass: POKE<br />
   Timestamp: 00004ms  SCall: 07223  DCall: 00000 [172.20.1.169:4569]<br />
Tx-Frame Retry[000] -- OSeqno: 000 ISeqno: 000 Type: IAX     Subclass: POKE<br />
   Timestamp: 00004ms  SCall: 13976  DCall: 00000 [127.0.0.1:40726]<br />
Tx-Frame Retry[000] -- OSeqno: 000 ISeqno: 000 Type: IAX     Subclass: POKE<br />
Rx-Frame Retry[ No] -- OSeqno: 000 ISeqno: 000 Type: IAX     Subclass: POKE<br />
Rx-Frame Retry[ No] -- OSeqno: 000 ISeqno: 000 Type: IAX     Subclass: POKE<br />
   Timestamp: 00004ms  SCall: 07951  DCall: 00000 [172.20.1.141:4569]<br />
   Timestamp: 00004ms  SCall: 13976  DCall: 00000 [127.0.0.1:40569]<br />

si esta información no bastara vamos a bajar un poco mas de nivel utilizando tcpdump tanto en el puerto como protocolo

<br />
tcpdump -w trace.cap -p -n -s 0 &quot;udp&quot;<br />
tcpdump -w trace.cap -p -n -s 0 port 4569<br />

* -p : no iniciar en modo promiscuo y solo los paquetes de asterisk in/out seran capturados
* -n : no utilizar la resolución de DNS para evitarnos nombres innecesarios en nuestra traza
* -s 0 : aqui capturaremos todo el contenido de los paquetes tanto SIP como RTP debido a que nos interesa todo el trafico.
0 significa la información completa del frame.
* -w : con esto mandaremos a escribir la información a un archivo especifico
* 4569 es el puerto estandard en el cual se conecta asterisk via IAX2

ahora el archivo resultante lo podremos analizar mucho mejor con el Wireshark y sus plugs de telefonia

1 2 3 4 5  Scroll to top