jueves, 17 de julio de 2008

Tratamiento de líneas con awk

A veces resulta muy útil generar un texto a partir de una consulta u otro texto. Para esto es interesante poder recorrer las diferentes líneas. En awk utilizamos una variable propia que es un puntero que apunta a la línea actual. Esta variable es NR.

Es decir, imaginemos que queremos generar unos índices de Oracle, a partir de una consulta generamos un fichero spool en el que obtenemos los CREATE y ANALYZE.

Pero claro, los tenemos todos en un mismo spool. Si queremos separarlos en diferentes ficheros para podemos lanzar las creaciones de índice en paralelo podemos hacer lo siguiente:

#Quitamos las líneas vacías

sed '/^ *$/d'/tmp/genera_indices_renombrado.txt>/tmp/genera_indices_renombrado.txt.new
#Quitamos las líneas vacías. Este punto es muy incesante ya que Oracle es muy
#propenso a colocarnos líneas vacías. Más si vamos a trabar con NR de awk

#Primero cargamos el spool con los datos
cat /tmp/genera_indices_renombrado.txt.new|awk '

#Ahora nos situamos en la primera línea con NR y comenzamos un bucle

{q=0}{linea[NR]=$0}

END {

for(i=1;i<=NR;i=i+1)

#Si la línea comienza con CREATE entramos en la condición

{if (linea[i] ~ /CREATE/)
#Abrimos el fichero con un spool hacia el log
print "spool /tmp/spooltemp"q".log;">>"/tmp/sqltemp"q".sql";
# Y escribimos la línea del CREATE
print linea[i]>>"/tmp/sqltemp"q".sql"}

else
#Si no entramos en la condición escribimos la línea del ANALYZE
{print linea[i]>>"/tmp/sqltemp"q".sql"
#Y cerramos el fichero actual (con un spool off y con un exit).
print "spool off">>"/tmp/sqltemp"q".sql";
print "exit;">>"/tmp/sqltemp"q".sql";
#pasamos al siguinte fichero

q=q+1; }

}
#Escribimos el último exit
{print "exit;">>"/tmp/sqltemp"q".sql"}}'

Y con esto hemos separado las líneas que nos interesaban en diferentes ficheros.

Cositas sobre ssh

El ssh o Secure Shell es un protocolo y un aplicativo que nos otorga un control total sobre un sistema remoto. Además nos sirve para copiar ficheros de forma cifrada, gestionar claves publicas RSA, permitiéndonos no escribir claves al conectar a las máquinas. Finalmente también nos permite pasar los datos de cualquier otra aplicación por un canal seguro tunelizadomediante SSH.
En principio es muy similar a telnet, pero la información viaja cifrada, lo que impide que cualquier persona con un sniffer pueda captar el usuario y contraseña y comprometa la seguridad del sistema.
Un dato interesante es que SSH es propietario http://www.ssh.com/ (permiten el uso domestico y académico de forma gratuita pero las empresas deben pagar la licencia) , aunque existe una versión libre que es OpenSSH (http://www.openssh.com/). Por otro lado, es muy recomendable utilizar la versión SSH2 y no la SSH1 que esta obsoleta.
Este sistema utiliza una conexión por medio de "llaves", que consisten en un numero cifrado. En realidad es como una llave y una cerradura. En el servidor existe una llave pública ( esta sería la cerradura) y en el cliente una llave privada (esta sería nuestra llave, propiamente dicha)
La generación de llaves puede hacerse con:ssh-keygen -t dsa
esto generará una llave pública, normalmente en ~/.ssh/id_dsa.pub y una llave privada en ~/.ssh/id_dsa (protegida por una palabra clave que nosotros definimos). La llave privada, como su nombre indica, es privada ( secreta) y cumple la función de password, por el contrario la llave pública vista por cualquiera y no hace falta protegerla ya que es completamente inútil sin la llave privada.Para la conexión automática se debe volcar la llave pública en el fichero ~/.ssh/authorized_keys en la máquina que queremos conectarnos.Cuando nos intentemos conectar desde nuestra máquina local a la remota ya no se tendrá que dar la clave de autentificación sino la palabra clave con la que protegió su llave privada. Es más la palabra clave se puede dar una sola vez y las siguientes veces que nos conectemos desde nuestra máquina local ya no nos la pedirá.
Para iniciar una sesión en un sistema remoto: ssh remote_ip
shh username@remote_ip
Como copiar archivos:
scp local_file user_name@remote_ip:remote_file
scp user_name@remote_ip:remote_file local_fie

miércoles, 16 de julio de 2008

CIFS: VFS server not responding

Nos estrenamos con un problema que mas de uno se va a encontrar en Ubuntu 8.04 cuando instale Samba.

Hace unos dias instalé samba en mi Ubuntu y me encontré que al apagar o reiniciar la maquina me salia este mensaje:

CIFS: VFS server not responding
CIFS: No response for cmd 50 mid 3


El problema es que NetworkManager se apaga antes que samba, de manera que samba devuelve ese error al no tener red cuando intenta desmontar las unidades sin red.

Buscando en Google encontre varias respuestas que voy a resumir aquí.
Lo que debemos hacer es cambiar el orden de los procesos en su arranque/apagado:

keteflips | @ moya | mié jul 16 | 20:20:21 | /etc/rc6.d |
$ -> cd /etc/rc0.d

keteflips | @ moya | mié jul 16 | 20:20:48 | /etc/rc0.d |
$ -> ls -la

Como podeis ver tenemos S[num]wpa-ifupdown el numero seguramente será 15
y S[num]umountnfs.sh que el numero seguramente será 31.

También debemos revisarlo en /etc/rc6.d


keteflips | @ moya | mié jul 16 | 20:26:18 | /etc/rc1.d |
$ -> cd /etc/rc6.d

keteflips | @ moya | mié jul 16 | 20:26:23 | /etc/rc6.d |
$ -> ls -la


Lo que debemos hacer en los dos directorios es cambiar el orden en el que se apagan los dos demonios. Para eso solo debemos renombrar estos archivos de manera que wpa-ifupdown siempre se apague después de umountnfs:

keteflips | @ moya | mié jul 16 | 20:26:35 | /etc/rc6.d |
$ ->
sudo mv S31umountnfs.sh S14umountnfs.sh

Lo repetimos en los dos directorios claro y ya podemos apagar nuestras maquinas son ese molesto problema.

Saludos.

Presentación

Hola,

Somos Arturo Morales e Iván Martinez, actualmente trabajamos como administradores de sistemas en Hewlett-Packard. Estamos especializados en la administración de entornos Unix con cierta debilidad por Linux, especialmente Ubuntu.

Este blog lo hemos creado con la intención de que sea un repositorio de conocimiento, un lugar donde ir dejando todas las cosas que vamos averiguado, problemas resueltos o curiosidades relacionadas con la administración de sistemas informáticos.

Esperamos que os sea útil e interesante.