viernes, 27 de marzo de 2009

ORACLE: reubicar los datafiles.

Soy conciente de que no soy el primero en escribir sobre esto, pero bueno me llegó el momento, y tuve que reubicar un par de datafiles para poder liberar algo de espacio de mi sistema de archivos.
Esto lo hice en un Oracle 11g sobre fedora 9.
  1. Saqué de línea el tablaspace en cuestión: alter tablespace mi_data offline;
  2. Moví los datafiles a una nueva ubicación con un move de linux: mv /u01/oradata/midata.dbf /u02/oradata/midata.dbf
  3. Luego hice esto mismo pero sobre el Oracle: alter database rename '/u01/oradata/midata.dbf' to '/u02/oradata/midata.dbf';
  4. Por último, volví a poner en línea el tablespace: alter tablespace mi_data online;
No sé si habrá algo oculto por atrás, pero en mi caso no me hizo falta reiniciar la base, todo anduvo de maravilla (por ahora).

viernes, 30 de enero de 2009

Configurando cliente de correo Mutt para el envío de notificaciones batch

Mi Linux no cuenta son servicios de correos activados, pero sí tengo acceso a la LAN de la empresa, en la cuál existe un servidor exchange.

Para que el cliente de correo mutt envíe los correos de salida a este servidor, me bastó con crear un archivo en el home de mi usuario, con el nombre .muttrc y la siguiente línea:

set smtp_url="smtp://mi_smtp_server.mi_dominio:mi_puerto_smtp"

Con esto fué suficiente, ahora soy feliz y puedo enviar correos desde mis shell scripts, con la siguiente sintaxis:

mutt -x -s "Mi subject" mi_correo@mi_dominio <<!
Mi contenido del mensaje
.
!

Muy interesante, no?

martes, 6 de enero de 2009

Apache + CGI + ANSI/C

Por un lado, hice el siguiente cambio en el archivo /etc/httpd/conf/httpd.conf


1.- Descomenté la línea:

AddHandler cgi-script .cgi


2.- Luego cambié este bloque...

<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

...por este otro...

<Directory "/var/www/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>


3.- Por último, reinicié el apache.

4.- Construí el programa CGI en base al siguiente fuente:

ejemplo.c (/var/www/cgi-bin/ejemplo.cgi):

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
int main(void) {
size_t qChr;
char *sStr;
qChr=strlen(getenv("QUERY_STRING"));
printf("Content-type: text/html\n\n");
printf("<html>\n");
printf("<body bgcolor=black text=lightgreen>\n");
sStr=(char*)malloc((qChr+1)*sizeof(char));
if(!sStr) {
printf("Error\n");
}
else {
memset((void*)sStr, (int)NULL, (qChr+1)*sizeof(char));
strcpy(sStr, getenv("QUERY_STRING"));
printf("%s\n", sStr);
}
printf("</body>\n");
printf("</html>\n");
return(0);
}

5.- Escribí el formulario HTML que invoca al programa CGI con el método GET:

/var/www/html/index.html:

<html>
<form action="
http://miweb/cgi-bin/ejemplo.cgi" method="GET"> Director: <input type="text" name="dir"> <br>
Producer: <input type="text" name="prod">
<input type="submit" value="Fire">
</form>
</html>

6.- La alternativa al método GET es el método POST, en el documento HTML sólo cambié el GET por el POST. Principalmente, lo que cambia son dos cosas: los pares campo valor, no son mostrados en la barra de direcciones, y en el servidor dichos valores son recibidos por el proceso a través de la entrada estandar (stdin) en lugar de la variable de ambiente QUERY_STRING. El fuente C queda de la siguiente forma:

int main(void) {
char sBuff[1000];
memset((void*)sBuff, (int)NULL, sizeof(sBuff));
printf("Content-type: text/html\n\n");
printf("<html>\n");
printf("<body bgcolor=black text=lightgreen>\n");
fgets(sBuff, sizeof(sBuff)/sizeof(char), stdin);
printf("%s\n", sBuff); printf("</body>\n");
printf("</html>\n");
return(0);
}


Esto fué un pequeño apunte de mi prueba. Una forma de probar mi programa CGI fué, conectándome con telnet al puerto http (80) de mi servidor, y pasarle el siguiente texto a ciegas:

GET /cgi-bin/ejemplo.cgi?dir=123&prod=456 HTTP/1.1
Host: miweb
User-agent: pepe
<<línea en blanco>>

Donde mi servidor me responde la salida generada por mi programa CGI.

Si el método utilizado es POST, la solicitud debería ser algo parecido a esto:

POST http://miweb/cgi-bin/ejemplo.cgi HTTP/1.0
Host: miweb
Accept: text/html, text/plain, text/css, text/sgml, */*;q=0.01
Accept-Encoding: gzip, bzip2
Accept-Language: en
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Lynx/2.8.6rel.2 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.8g
Referer:
http://miweb/ejemplo.html
Content-type: application/x-www-form-urlencoded
Content-length: 16
dir=123&prod=456
<<línea en blanco>>

"Espero os haya gustado"

miércoles, 15 de octubre de 2008

LINUX: Cambio de hora

Primero habría que configurar la hora del equipo, esto lo hice con el comando hwclock (hardware clock):

hwclock --set --date="MM/dd/YY HH24:MI:SS"

Luego sincronicé la hora del sistema con la hora previamente configurada:

hwclock --hctosys

Ahora hwclock -r y date deberían quedar sincronizados.

miércoles, 1 de octubre de 2008

FEDORA 9: Antes era Samba, ahora CIFS

Mirá vos de qué me vengo a enterar. Con razón mi Fedora 9 no reconocía la siguiente instrucción: mount -t smbfs ...
Para los que están tan desactualizados como yo, el nuevo tipo de FS ahora se denomina CIFS, no voy a entrar en detalles y conceptos, sólo voy a publicar la instrucción para montar un recurso compartido desde windows en linux.

mount -t cifs //maquina_remota/recurso_compartido /punto_de_montaje -o user=dominio\\usuario,pass=clave

En mi caso, obvié ponerle el parámetro pass y me lo solicitó el mismo servicio, evitando así que quede mi clave grabada en el histórico de comandos del shell.

Seguramente habrá otro despistado como yo, al que le servirá este post.

lunes, 29 de septiembre de 2008

LINUX: configurar proxy para aplicaciones en modo texto

Mi problema consistía en que deseaba acceder a internet pero desde mi terminal ssh, el problema era que mi acceso a internet era mediante un proxy sobre windows con autentificación.

Una técnica que encontré navegando, consistía en configurar las variables http_proxy y ftp_proxy de la siguiente forma:

export http_proxy="http://usuario:contraseña@proxy:puerto"

idem con ftp_proxy, y luego filtrar los dominios que no utilizarían el proxy de la siguiente forma:

export no_proxy="dominio.com"

De todas formas, esta técnica no me sirvió por tratarse de un proxy M$, así que seguí navegando y me topé con este programita construído en python, que finalmente me solucionó mi problema de conectividad en modo texto. Se trata de ntlmaps, donde solo hay que configurar el archivo server.cfg con el usuario y contraseña para autentificarse en el proxy, y el puerto por defecto donde escuchará las conexiones hacia el proxy. Una vez lanzado el programa en segundo plano, se configura las variables de ambiente antes mencionadas, para que accedan al puerto configurado, en forma local, por ejemplo:

export http_proxy="http://localhost:8888"

Y con esto, ya quería en condiciones de salir a internet por ejemplo con lynx o elinks.

miércoles, 10 de septiembre de 2008

ORACLE: Logré que me funcionara el TNS!!!

Gracias al siguiente a este enlace tengo una base de datos Oracle 11g corriendo sobre un Fedora 9 (ambos sistemas para arquitectura de 64 bits).

Pero el tip en este caso nace, porque a diferencia del 10g cuando generé la entrada LISTENER en el archivo listener.ora con el asistente netca, no me generó la entrada SID_LIST_LISTENER con lo cual no me reconocía el servicio de base de datos que quería publicar hacia la red.

Probablemente, sea algo que cualquier DBA principiante lo haya descubierto, creo que esta nota le servirá para otro autodidacta como yo.