domingo, 21 de octubre de 2007

Es Lunes pero da Igual.

Aunque sea duro volver al trabajo, siempre habrá un fin de semana. Aqui os dejo un par de temitas para hacerlo más llevadero. :)



sábado, 20 de octubre de 2007

Abra la boca y diga : AAAAaaaa!!!

>> Doctor , Doctor
<< Subase la camisa
>> Doctor, Doctor
<< A ver hombre haga el favor
>> Solo me duele el pie Doctor
...

Primero los cd's luego los dvd's las memorias Disk on Flash... Esto eran los medios de almacenamiento que usaba hasta que me dí cuenta que con el tiempo se jodían. De hecho e de la colección de cd's me queda la mitad. Cuando había asumido esto me decante por usar solo el disco duro y si me quedo sin espacio me compro otro y fiesta. Mas que nada por la accesibilidad a los datos. No tener que andar buscando cd's y tal.
Pero por desgracia también se estropean. De hecho el año pasado perdí un disco duro.

Ha sido esta semana cuando me entere de la existencia de la tecnología S.M.A.R.T que no es nada nueva. Y que sirve para darnos un informe de los fallos que se producen en el disco duro. De esta manera podemos saber de antemano cuanta vida le queda a nuestro disco duro. Y salvar los datos en otro dispositivo antes de que sean inaccesibles para nosotros (por que se haya roto el disco).

S.M.A.R.T (Self Monitoring Analysis and Reporting Technology) nos da información de distintos parámetros del disco duro como : velocidad de los platos en el disco, sectores defectuosos, errores de calibración, temperatura del disco, tasa de errores de búsqueda Seek ,....

Para tener toda esta información disponible desde nuestro Ubuntu deberemos cumplir con los siguientes requisitos :

  • Nuestra placa y BIOS soporte esta función de S.M.A.R.T
  • Nuestro disco duro lo tenga también
  • Tener instalado el paquete : smartmontools
Lo primero reiniciar el equipo y comprobar en la BIOS que la función de S.M.A.R.T esta activada y sino activarla. Mirar si nuestro disco duro soporta esta función (vía pegatina del disco o en internete). Comprobar si nuestro ubuntu tiene el paquete instalado y sino instalarlo.

Si todo ha salido como debiera , ahora dispondremos de dos programas más en nuestro ubuntu que nos aportaran info sobre el estado del disco : smartd y smartctl.


Más info en : WikiPedia , SigT

jueves, 18 de octubre de 2007

Veo Veo ...


> Que ves ?
< Una Cosita
> Y de que color es ?
....

Por fin y después de medio añito ya con Ubuntu por fin me entero por que le llaman servidor de X al sistema grafico de Linux.

Lo que voy a explicar en este post es como ejecutar en una maquina una aplicación y que el entorno gráfico (la ventana ) se muestre en otro equipo. Para ello habra que decirle al servidor de la X que envie la información a una IP. Y en el equipo que queremos visualizar la aplicación configurar el cliente para que procese la información enviada por el servidor y la muestre por pantalla.

Esta solución para ver las aplicaciones desde otro equipo consume mucho ancho de banda, asi que abstenerse de usar esto a traves de internet; a menos que tengais una señora conexión. Esto es práctico para entornos LAN.

En el equipo donde queremos que se visualice la aplicación tenemos que configurar el cliente en este caso usaremos gdm. Para que todo este bien verificar que en el fichero : /etc/gdm/gdm.conf tiene la propiedad disalowedTCP a false Una vez comprobado esto ejecutar :


$ xhost +
// reiniciamos las X para que guarde los cambios
$ /etc/init.d/gdm restart

En el equipo donde se ejecuta la aplicación os podeis meter en el por ssh y realizar la siguiente modificación :


$ EXPORT DISPLAY= ip_cliente :0.0
$ ejecutar la aplicacion que querais que se vea en el otro equipo

Como veis es muy sencillo de realizar y nos da la posilibidad de tener el equipo donde corre la aplicación sin monitor.


domingo, 7 de octubre de 2007

Memoria de Pez

Yo como el de la foto. Pérdidisimo por no saber nunca donde dejo las llaves. Y ya no digo nada de encontrar mis ficheros en el ordenata y más aún ahora que he cambiado a Ubuntu.

La solución Recoll un buscador al más puro estilo de Google. Además reconoce los siguientes tipos de ficheros para realizar su busqueda : msword, ogg, pdf, postscript, ms-excel, ms-powerpoint, calc, cal-template,
.... Lo malo es que genera una base datos para indexar las búsquedas, no es muy rápido haciéndolo (pero así hace las búsquedas mu rapido), por culpa de esto hay que acordarse de regenerar este indice para que aparecezcan los nuevos ficheros generados. Pero esto tiene fácil solución con ayuda de nuestro queridisimo cron (leer post : El tiempo es oro). Para regenrar el indice basta con ejecutar el siguiente comando :

$ recollindex

Os podéis bajar el paquete *.deb para ubuntu de esta dirección web. Su instalación es muy sencilla doble-click sobre el fichero descargado y fiesta. El aspecto del Recoll es el siguiente y si sois como yo que nunca sabe donde guarda la musica (lee los ide3 tags de los mp3) o un documento con info que quiero leer es una buena solución.







miércoles, 26 de septiembre de 2007

El tiempo es Oro


No se porque pero muy pocas veces consigo que el ordenador trabaje por mi, siempre acabo reinventando la rueda y al final trabajo para el ordenador.

Para no caer en este error. Voy a explicaros como programar tareas en ubuntu. Deciros donde se ubican los programas que trae ubuntu y podáis empezar a investigar que hacen esos programas y así os iréis enterando de que hay un montón de cosas que están hechas ya y no existe la necesidad de volverlas a programar.

El programa que vamos a usar para programar las tareas es el cron que viene de serie con ubuntu. Si queréis tener un interface gráfico para este programa os podeis bajar el gnome-sheulde e instalarlo. Tal que asi:

fichero de instalación : gnome-shedule_INSTALL.sh

Primero crear y editar el fichero de instalación: $gedit gnome-shedule_INSTALL.sh

#!/bin/bash
sudo apt-get install gnome-shedule

le dais permisos de ejecución : $chmod +x gnome-shedule_INSTALL.sh
y lo ejecutais : $./gnome-sheduler_INSTALL.sh

Si todo ha salido bien deberías tener un lanzador en : Aplicaciones/Herramientas del Sistema/Horario si hacéis click sobre él, os debería de aparecer el siguiente formulario :

Para programar una tarea basta con hacer click en el botón de nuevo. donde se nos preguntara si lo que queremos es que se repita la tarea con una frecuencia ó que solo se ejecute una vez. En función de nuestra selección se nos presentaran los siguientes formularios para terminar de completar la definición de la tarea y cuando ha de ejecutarse.

En la siguiente imagen podéis ver lo sencillo que es programar una tarea.


Para programar una tarea que no sea repetitiva lo único que cambia es que en vez de especificar un frecuencia de ejecución, se nos da la posibilidad de escoger fecha y hora.

Ahora bien para los amantes de la consola. O la gente que quiera saber por que en vista previa pone
*/2 * * * * ls vamos a explicar como configurar el cron desde la linea de comandos. El programa debería estar en /usr/bin/cron y para inicializarlo, pararlo o reiniciarlo, pues como todos los servicios. Nos vamos /etc/init.d/ y visualizamos el fichero /etc/init.d/cron que tiene este aspecto :

#!/bin/sh
# Start/stop the cron daemon.
#
### BEGIN INIT INFO
# Provides: cron
# Required-Start: $syslog $time
# Required-Stop: $syslog $time
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Regular background program processing daemon
# Description: cron is a standard UNIX program that runs user-specified
# programs at periodic scheduled times. vixie cron adds a
# number of features to the basic UNIX cron, including better
# security and more powerful configuration options.
### END INIT INFO


test -f /usr/sbin/cron || exit 0

#LSBNAMES='-l' # Uncomment for LSB name support in /etc/cron.d/

. /lib/lsb/init-functions

case "$1" in
start) log_daemon_msg "Starting periodic command scheduler" "crond"
start-stop-daemon --start --quiet --pidfile /var/run/crond.pid --name cron --startas /usr/sbin/cron -- $LSBNAMES
log_end_msg $?
;;
stop) log_daemon_msg "Stopping periodic command scheduler" "crond"
start-stop-daemon --stop --quiet --pidfile /var/run/crond.pid --name cron
log_end_msg $?
;;
restart) log_daemon_msg "Restarting periodic command scheduler" "crond"
start-stop-daemon --stop --retry 5 --quiet --pidfile /var/run/crond.pid --name cron
start-stop-daemon --start --quiet --pidfile /var/run/crond.pid --name cron --startas /usr/sbin/cron -- $LSBNAMES
log_end_msg $?
;;
reload|force-reload) log_daemon_msg "Reloading configuration files for periodic command scheduler" "crond"
# cron reloads automatically
log_end_msg 0
;;
*) log_action_msg "Usage: /etc/init.d/cron {start|stop|restart|reload|force-reload}"
exit 2
;;
esac
exit 0

Como podéis ver si os fijáis en este script de sh acepta los siguientes parametros : start , stop, restart, reload, force-reload esto es así para todos los servicios de ubuntu. Los scripts que se encuentran en este directorio se ejecutan cuando arranca el sistema, entonces si no queremos que se ejecute al servicio al inicio lo que debemos hacer es quitarle los permisos de ejecución al servicio en cuestión. Para ello basta con hacer lo siguiente :

$ cd /etc/init.d
$ chmod -x nombre_servicio

Bueno ahora vamos a configurar el cron ya que sabemos como iniciarlo y pararlo. Como todos los programas su configuración esta en /etc si hacemos :

$ ls /etc | grep cron
cron.d //Los scripts en este directorio se ejecutan al arranque del cron
cron.daily //Los scripts dentro de este directorio se ejecutan diariamente
cron.hourly //Aqui cada hora
cron.monthly // Cada mes
crontab // fichero de configuración
cron.weekly // Cada semana
Como veis hay 5 directorios y un fichero (crontab). Los directorios contienen scripts que se ejecutaran con una cierta frecuencia. Si visualizamos el fichero crontab entenderemos por que esto es así y la linea de vista previa comentada antes.
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
Los campos y los valores permitidos son :
m --> minutos --> 0-59 y *
h --> horas --> 0-23 y *
dom --> dia del mes --> 1-31 y *
mon --> mes --> 1-12 y *
dow --> dia de la semana --> 0-7 y *
user --> usuario --> indica con que permisos de usuario del sistema se va a ejecutar el comando.
command --> comando a ejecutar --> comando que se encuentre en algún path de los indicados en PATH.

El valor * significa todos los valores. Quiero decir que si el campo minuto tiene el valor de * se ejecutara cada minuto. Si por ejemplo ponemos */10 se ejecutará cada diez minutos. Otra alternativa seria poner 0,10,20,30,40,50. Si queremos otra interface para configurar el cron, podemos usar el comando :


$ crontab -e

Se nos abre un fichero con la misma sintaxis, pero con la peculiaridad de que estas tareas se ejecutaran para el usuario que ha ejecutado el comando.


Y que pasa si queremos que las tareas no se ejecuten a una hora determinada o con una frecuencia determinada, sino lo que queremos es que se ejecute una tarea cuando suceda algo en el sistema. Vamos que podamos programar tareas en función de algún evento que suceda. Pues la solución para esto es el
icron . Este servicio no viene de serie en Ubuntu. En esta dirección tenéis la info necesaria para instalarlo.

icrontab -e : abre la tabla para la edición
icrontab -l : lista el contenido de la tabla
icrontab -r : borra el contenido de la tabla


La tabla tiene el siguiente formato

ruta evento comando


Eventos disponibles

IN_ACCESS Acceso de lectura
IN_MODIFY Acceso de escritura
IN_ATTRIB Metadatos Modificados (inodo o atributo)
IN_CLOSE_WRITE Fichero abierto para escritura y luego cerrado
IN_CLOSE_NOWRITE Fichero abierto sin escritura y luego cerrado
IN_CLOSE Fichero cerrado
IN_OPEN Fichero abierto
IN_MOVED_FROM Fichero movido a otro directorio
IN_MOVED_TO Fichero movido a este directorio
IN_MOVED Fichero movido
IN_DELETE Fichero borrado
IN_DELETE_SELF El directorio supervisado ha sido borrado
IN_ALL_EVENTS Que ocurra algun evento de los mencionados
Parametros para los comandos :

$@ Proporciona la ruta
$# Nombre del fichero que ha disparado el evento
$% Muestra el evento disparado
$$ El propio signo dolar
Alá pos ahora ya sabemos como hacer para que nuestro sistema haga cosas de forma repetitiva, en un momento determinado o cuando suceda algo. Es decir ya tenemos la capacidad para programar algo. Ahora solo nos hace falta los programas que lanzar. Para ello investigar en /usr/bin y en /usr/sbin

martes, 18 de septiembre de 2007

Internet : La red de Redes


Si le llaman la red de redes es por algo y estoy convencido que la mayoría de la gente lo asocia con el internet explorer. Y que en internet lo único que hay son paginas web. Y se olvidan que internet son un montón de ordenadores conectados entre si con un protocolo en común "internet protcol" IP. Que nos aporta esto??? el poder identificar los ordenadores en la red y poder acceder a ellos. Y esto para que sirve ?? pues para permitir a los programas que tenemos en nuestro ordenador hablar con otros programas de otros ordenadores, con esto quiero decir que puedan localizar al programa con el que se quiere hablar.

Dado que lo que se hace es dar la posibilidad de localizar un ordenador en la red para que hablen dos programas entre si, aquí es donde aparecen los conceptos de cliente y servidor. Donde el servidor es un programa que espera a que le hablen, le pregunten,.... y el cliente es el programa que hace las preguntas,... Un servidor web es un programa que espera que le pidan paginas web y el "internet explorer" , "firefox",... son clientes que le piden al servidor una pagina especifica. En este post no voy a explicar como montar un servidor web ni configurarlo (todo se andará), pero aprovechando el ejemplo del post : Trankilo pero Expectante, donde se explicaba como obtener la ip publica con la que se conectaba el router de una tipica red LAN casera. Voy a explicar como tener a nuestro ordenador localizado en la red y poder acceder a él desde cualquier ordenador que tenga internet. Seguidamente daré las pautas mínimas para montar un servidor de ftp y scp en nuestra maquina con Ubuntu y de esta manera tendremos acceso a los archivos de nuestra maquina desde cualquier sitio con internet. También servirá para poder enviarlos ficheros a nuestro ordenador.

#!/usr/bin/expect

set ipaddr [lindex ${argv} 0]
set usr [lindex ${argv} 1]
set pwd [lindex ${argv} 2]

spawn telnet ${ipaddr}

set timeout 600

expect -nocase "Login: " {
sleep 1
send "${usr}\r"
sleep 1
} timeout {
send_user "ERROR: Timeout intentando copia SCP"
exit 1
}



set timeout 600

expect -nocase "Password: " {
sleep 1
send "${pwd}\r"
sleep 1
} timeout {
send_user "ERROR: Timeout intentando copia SCP"
exit 1
}


send -- "ip list interfaces\r"
sleep 3
send -- "user logout\r"


interact
Nota : RECORDAR que esto es para un router especifico, "Xavi 7868r". En este script se ha modificado un poco para que pueda aceptar parámetros. Si combinamos este script en expect con este otro en bash. conseguimos que se nos mande a una dirección de correo electrónico nuestra IP pública.
#/bin/bash
expect -f Obtener.Ip.Publica 192.168.1.1 1234 1234 | grep "ppp-0" > ip.publica
mail -s "jeje" direccion@gmail.com < ip.publica

192.168.1.1 ip del router
1234 usuario del router
1234 password del router
"jeje" asunto del mail que se envia
Este script lo que hace es ejecutar el script de expect y guardar en el fichero "ip.publica" la ip publica de nuestro router y con el programa mail enviarlo a una dir de correo electrónico. Ahora ya tenemos 2 scripts que nos permiten enviar nuestra Ip a dirección de correo electrónico. Ahora lo que nos falta para que este todo perfecto es que esta tarea se repita o que se realice cuando nos cambie la ip del router. Lo de enviar la ip cuando cambie os lo dejo para vosotros (el comando diff de bash compara ficheros). Ahora lo que queda es configurar el cron o el icron para que realice la tarea de consulta de ip pública y el envío de mail a dir de correo si miráis el post : El tiempo es Oro viene explicado como configurar el cron y el icron para que realicen estas tareas.

Con esto siempre que estemos en un equipo con internet, podremos consultar nuestra cuenta de correo y ver cual es la ip de nuestro equipo. La finalidad de todo esto es poder cojer o enviar ficheros para nuestro equipo. Para ello habrá que instalar con un servidor que nos permita envío y la recepción de ficheros. La opción mas fácil es usar SCP pero windows no da soporte por defecto para este protocolo. Ubuntu lo trae por defecto. Hay que activar el servicio del ssh y configurar el fichero /etc/shh. Para los casos que no tengamos la disponibilidad de usar scp podemos montar un servidor de ftp. Ya que windows y el internet explorer trae un cliente de ftp por defecto. Para instalar un servidor de ftp basta ejecutar la siguiente linea de comandos.

$ sudo apt-get install vsftpd
Para configurar este servidor de ftp hay que editar este fichero de configuración : /etc/vsftpd.conf las opciones que nos permite son las siguientes :
anonymous_enable Si el valor de esta directiva es YES cualquier usuario se puede conectar al servidor dando el nombre de usuario anonymous o ftp. Por razones de seguridad se debe poner NO (anonymous_enable=NO)
local_enable
Esta línea indica que si se permite o no el acceso de usuarios locales a sus respectivas carpetas privadas. Si se permite el acceso habría que poner local_enable=YES (local_enable=NO en caso contrario).
chroot_local_user Permite enjaular a los usuarios dentro de su propio directorio personal. Si en el fichero de configuración aparece chroot_local_user=NO, entonces el usuario tiene acceso a todo el sistema de archivos, en función de los permisos asignados. Cuando un usuario local se conecta y en el fichero de configuración aparece chroot_local_user=YES, entonces enjaulamos a los usuarios dentro de su propio directorio personal, sin posibilidad de acceder a todo el sistema de ficheros. Se mejora por tanto la seguridad.
write_enable Con esta directiva se puede permitir o denegar la subida de ficheros al servidor FTP. Si se permite que los usuarios suban archivos al servidor FTP habría que poner write_enable=YES.
local_umask
Se pueden establecer los permisos con los que quedará el archivo al subirlo al servidor FTP. local_umask=022 indicará que los permisos de los archivos serán 644, es decir, lectura y escritura para el propietario del fichero, y sólo lectura para el grupo y los demás.
anon_upload_enable Esta directiva indica si los usuarios anónimos pueden cargar archivos en el servidor. anon_upload_enable=YES permite que los usuarios anónimos puedan subir ficheros.
anon_mkdir_write_enable Si esta directiva tiene el valor YES se permitirá la creación de directorios en el servidor.
ftpd_banner Con esta directiva se puede mostrar un mensaje de bienvenida cuando un usuario se conecte al servidor FTP. ftpd_banner=?Bienvenido a mi servidor FTP?. anon_max_rate Se utiliza para limitar la tasa de transferencia a usuarios anónimos. En el siguiente ejemplo se limita la tasa de transferencia a los usuarios anónimos a 10Kb/s: anon_max_rate=1024
local_max_rate Se utiliza para limitar la tasa de transferencia en bytes por segundo a los usuarios locales del servidor. En el siguiente ejemplo se limita la tasa de transferencia a 10Kb/s: local_max_rate=1024
max_clients Indica el número máximo de cliente que podrán conectarse simultáneamente al servidor. En el siguiente ejemplo son 5: max_clients=5
Para iniciar parar o reiniciar el servidor de ftp usar :
# sudo /etc/init.d/vsftpd {start|restart|stop}

Ahora si lo que queremos es usar el scp o el ssh, necesitaremos instalarnos un servidor de ssh. Para ello más de lo mismo :

# sudo apt-get install openssh-server
Así instalamos el servidor y para configurarlo en /etc/ igualito que el servidor de ftp distintas opciones pero más de mismo. Si la maquina que estamos usando tiene linux (la que no es la nuestra) y queremos acceder a nuestro equipo de casa. Lo tenemos ya todo de serie. Con estos comandos ya podemos subir / bajar / controlar nuestro equipo remotamente. Para ello :

# ssh ip // abrimos una sesion en nuestro equipo
# ftp ip // abrimos una sesión de ftp para subir o bajar ficheros
# scp ip // abrimos una sesión de scp para subir o bajar ficheros
Donde la ip es la que leemos de nuestra cuenta de correo. Advertencia si estamos detrás de un router abra que direccionar los puertos a nuestra maquina. Para ello hay que modificar los parámetros de NAT del router. Donde hay que especificar los puertos del router externos los direccione a nuestra IP local de la maquina a tal puerto. Por defecto el ftp usa el puerto 21 y el ssh el 22. Esto se puede configurar a gusto de cada uno. En los ficheros de configuración de los servidores.

Si por el contrario estamos trabajando con Windows necesitaremos de unos programas para poder abrir estas sesiones contra nuestra maquina para ello descargarse estos programas que son libres y gratuitos :

ssh : usar el putty
scp : usar el winSCP
ftp : usar Filezilla
Alá pos ya tenemos acceso a nuestro equipo de casa y tenemos la posibilidad de lanzar comandos desde la consola en nuestra maquina de casa(ssh) y de subir y bajar ficheros a nuestro equipo de casa gracias al servidor de (ftp y scp). Ya no tenemos que cargar con nuestra pinza de usb, cd, dvds u medios de almacenamiento para transportar nuestros datos. Lo único que necesitamos es una conexión a internet.

Para los que no quieran tener el equipo de casa siempre encendido. Existe una forma de encenderlo remotamente. Para ello la tarjeta de red que usemos y nuestra placa base ha de tener la característica de WOL (wake on lan). También es necesario un programa externo que nos permita enviar a nuestra maquina un Magic Packet, para que encienda el equipo. Pero esto os lo dejo a vosotros para que investigues algo.


domingo, 2 de septiembre de 2007

Scripts en Bash

Bash, es un interprete de comandos, hay otros como pueden ser ksh, csh, tcsh, Bourne Shell (Bash). Ubuntu trae por defecto bash. Para ver que interprete de comandos se esta ejecutando cuando abres una terminal. Para averiguar esto introduce :

$ echo $shell
/bin/bash
$ echo $BASH_VERSION
3.2.13(1)-release
Esta es la versión que me vino a mi instalada con la versión 7.04 de Ubuntu. Por que usar scripts en bash u otro interprete de comandos. En linux casi todo es un fichero, y los comandos de bash nos permiten manipular ficheros, los programas equivalen a comandos. A parte de esto bash permite el uso de variables , operaciones matemáticas, trabaja con expresiones regulares, permite capturar las señales del sistema,...

Para escribir un scirpt es bash es muy sencillo solo hay que editar un fichero y darle permisos de ejecución. El fichero es de texto plano. Otra característica de los interpretes de comandos es que son lenguajes interpretados no compilados. Vamos con el primer ejemplo un "Hola Mundo" que clásico.

Vamos a usar los siguientes comandos : echo, touch, chmod y cat. "echo" lo que hace es sacar por la salida standard (la pantalla) lo que se le pasa por parámetro, puede ser texto o una variable que es lo que vimos en el ejemplo de antes. "touch" lo usaremos para crear un fichero vacio y "chmod" para cambiarle los permisos al fichero y hacerlo de esta manera ejecutable. "cat" muestra el contenido de un fichero.

Que vamos a hacer en nuestro primer script. Crearemos un fichero vacio con touch, con echo iremos direccionando la salida standard al fichero que hemos creado para ir escribiendo en el. Después le daremos permisos de ejecución al usuario. Una vez hecho esto ejecutaremos el script para ver el resultado y visualizaremos el contenido de nuestro script.

¿? Como es el formato de un fichero para que sea interpretado como un script. Pues el formato es muy sencillo. La primera linea ha de especificar la ubicación del interprete que se va a usar. El resto de lineas equivalen a los comandos. Para escribir los comentarios se usa el caracter de escape #.

#!/bin/bash
#
# Esto es un comentario
#
comando
comando
comando
.....

Vamos allá para crear nuestro primer script abrir una terminal ( Aplicaciones/Accesiorios/Terminal) hacer click e introducir lo siguiente :

$ touch Hola_Mundo.sh
$ echo '#!/bin/bash' > Hola_Mundo.sh
$ echo '#' >> Hola_Mundo.sh
$ echo '# 1º script : Hola Mundo' >> Hola_Mundo.sh
$ echo '#' >> Hola_Mundo.sh
$ echo 'echo "Hola Mundo"' >> Hola_Mundo.sh
$ chmod +x Hola_Mundo.sh
$ ./Hola_Mundo.sh
Hola Mundo
$ cat Hola_Mundo.sh
#!/bin/bash
#
# 1º script : Hola Mundo
#
echo "Hola Mundo"

En los scripts venideros abstenerse de crealos así. Quiero decir las próximas veces que vayáis a hacer un script usar un editor de textos ("gedit" Aplicaciones/Accesorios/Editor de Textos) o si os gusta más la consola podéis usar el vi o el Emacs. En este ejemplo lo hemos hecho así para que aprendieses más de un comando y no solo el echo. Para introduciros en el mundo de las tuberías. A ver si os ibais a pensar que la imagen que esta en el post no tenia nada que ver con su contenido. Por cierto si hacéis click sobre la imagen podéis echaros una partidilla , es un juego :).

Las tuberías lo que vienen a hacer en linux es controlar los flujos de datos generados por los programas, pudiendo coger la salida de un programa y pasársela a otro como parámetro. En este ejemplo que acabamos de hacer no hay ninguna tubería pero si direccionamientos. El carácter que se usa para los direccionamiento es el ">" ó "<". Con este carácter podemos coger la salida de un programa y enviársela a otro programa o a un fichero como en este caso. También se puede hacer al revés coger el contenido de un fichero y pasárselo a un programa. En el ejemplo usamos el > para pasar la salida del echo a un fichero. Luego de este usamos ">>" para que escriba a modo "append" en el fichero, quiero decir añadiendo lineas y no sobreescribiendo la primera.

En este ejemplo también se muestra la forma de ejecutar un script, se puede hacer de 2 maneras :

$ ./ [script]
ó
$ source [script]

Bueno si el tema os ha parecido interesante podéis esperar a que escriba el siguiente post sobre el tema o ir leyéndoos este manual sobre bash que ta bastante bien para gente que se inicia en el mundillo. Si con ese no os llega seguir con este bash avanzado.


sábado, 1 de septiembre de 2007

NoSoloLinux


Lo que hace que me mueva es la música. Por ello no si quedara sin su espacio en mi blog. Pero con el paso del tiempo me vuelto vago y ya no me informo. La culpa de las radios de internet. Han conseguido que deje bajar música, bueno grabo las emisoras, con lo que les he perdido la pista a mis artistas favoritos. Lo único bueno de esto es cuando voy a verlos en directo, me sorprenden aún más si cabe.

Ahora mismo a lo que toi enganchadisimo es al minimal, pero lo curioso de esto es que la radio que escucho es de Rusia, curioso nunca me había fijado en este país en lo que se refiere a musica electrónica.

Este es el link : Deep Mix Moscow Radio

Pero a mi lo que me gusta es el Technazo y cuanto más harto mejor. Eso si el schranz ya me parece que esta entre la delgada linea del ruido y la musica. Como emisora de radio preferida de technazo tengo esta : Addictivebeat lo malo de esta emisora es que no siempre es techno, pero la mayor parte del día si. Y no veas vaya sesiones me he grabado yo de aki, jejeje.

Escucho más emisoras de radio pero estas dos son mi fuente. Y claro esto para estar en casa, por que depues lo que tira de mi son las estampas como las de la foto, atardecer en Monegros. Joer que recuerdos. Menos mal que lo repiten todos los años pq al final no da tiempo a na.


viernes, 31 de agosto de 2007

Escribir en RAM

Otra forma de usar el mount y el fichero de /etc/fstab. Hemos visto como cojer la info de un dispositivo y mover la a otro sitio y accecer a sus datos. montando esta info especificando el sistema de ficheros, pero con mount se pueden hacer mas cosas.

Como acceder a carpetas de red, montar en otros sitios como por ejemplo la memoria RAM. Hasta ahora hemos visto como realizar montajes con mount y hemos hecho referencia a un fichero /etc/fstab que al parecer hacia lo mismo.

Este fichero lo usan 3 programas : Dump, fsdisk y mount. Lo usan solo para leer y hacen esto cuando arranca la maquina. De esta manera se puede especificar en este fichero los montajes que queremos que haga al iniciar, por si hay alguno que no se hace por defecto o es tan curioso como este de la RAM.

El fichero se edita y nos permite meter 6 campos, de los cuales 4 los usa mount, 1 dump y el que queda para el fsdisk.

Si queremos montar un directorio en RAM de 60m que no sea dumpeable y que no se checkee con sfdisk en el arranque seria tal que asi

ramfs /work ramsfs size=60m 0 0

  1. Describe lo que se va a montar dispositivo o sistema de ficheros remoto
  2. punto de montaje : ubicación del montaje
  3. describe el tipo de sistema de ficheros que se va a montar
  4. opciones para el sistema de ficheros a montar si hay mas de uno se separan por comas
  5. flag que le indica al dump si va a ser dumpeable o no
  6. flag que le indica al sfdisk si va a ser checkeado o no

Bueno como veis en ejemplo lo que se hace es crear una carpeta en /work con una capacidad de 60m. Que cuando escribamos en ella lo estaremos haciendo la memoria RAM, esto puede ser inutil para la mayoria de los casos. Pero si os haceis un live CD con vuestra distro tuneada necesitareis algo parecido ha esto.

jueves, 30 de agosto de 2007

Tranquilo pero Expectante

Hay por ahí un lenguaje por llamarle algo, de nombre EXPECT. Lo curioso de este lenguaje es que esta pensado para realizar dialogos, tomando como canal de comunicación la entrada y la salida standard. ¿Y que para que sirve eso? Pues para automatizar tareas o realizar scripts que tengan que dialogar con otras aplicaciones.

La sintaxis del lenguaje es muy sencilla y los 3 comandos básicos son spawn (ejecutar un comando o script), expect (espera a recibir algo) y send (envia lo que le digas por la salida standard). Hay más os podeis documentar aki.

Antes de nada hay que instalar Expect en vuestra maquina con Ubuntu, para ello os podeis hacer un script de instalación que contendría las siguientes lineas:

#!/bin/bash
gksudo apt-get install expect


El ejemplo típico es el de automatizar la bajada y/o subida por ftp. Yo en este post pondré como ejemplo como sacar la ip publica con la que esta conectado mi router. El modelo de router que estoy utilizando es "router inalámbrico Xavi 7868r". El modelo de router nos va a determinar que comandos habrá que enviarle por telnet para que nos diga la IP. De todos los router que han pasado por mis manos todos tienen telnet y un juego de comandos para configurarlo o ver su configuración, esto a parte del servidor web. Por lo que creo esto vale para cualquiera que tenga un router y este interesado en saber su IP pública.

Antes de nada intentaros conectar a vuestro router, por telnet desde la consola. Para ello hacer:

$ telnet [ip del router]


Una vez hecho esto quedaros con la linea escrita por pantalla que os pide el login. Introducir el login.
Fijaros como os pregunta el router el password. Y fijaros como es promtp de la consola. Una vez hecho esto tenenis que averiguar que comando os dice la IP pública y aqui os toca investigar, probar introduciendo help, ? , ... para conseguir un listado de los comandos disponibles. Cuando sepais esto averiguar cual es el comando para salir. Una vez logrado esto ya teneis toda la información necesaria para realizar este script de expect con exito. Datos que hay que apuntar :
  • texto que usa el router para preguntar el login
  • idem para el password
  • idem pero para el prompt de la consola
  • comando para saber la ip pública
  • comando para salir
  • usuario y password
Si habéis conseguido toda esta información o tenéis un router como el mio ya podeis ejecutar este script para saber cual es la IP pública de casa en un moment sin tener que preguntarselo a mano al router. O para usar esta info en otros programas. En mi caso lo uso para tener mi equipo localizado ya como tengo IP dinámica, nunca se que ip tiene y no puedo acceder a ordenata. Hay otras alternativas como usar servicios gratuitos de terceros que te asignan una DNS a tu ip dinámica, pero se necesita de un cliente y se depende de la empresa que te el servicio. Yo con ayuda de otro script me envío a mi dir de correo electrónico la ip de mi equipo cuando esta ha cambiado. Y de esta manera siempre que tengo internet puedo acceder a mi maquina. :)

Script que escupe la ip publica del router :

#!/usr/bin/expect
#lanzamos un cliente de telnet
spawn telnet 192.168.1.1
#esperamos a que nos pida el login
expect "Login:"
#enviamos nuestro login
send "1234\r"
#esperamos a que nos pregunte el pass
expect "Password:"
#enviamos el password
send "1234\r"
#esperamos a que envie el prompt de la linea de comandos
expect -exact "-->"
#enviamos el comando para que nos liste las interfaces de red
send "ip list interfaces\r"
expect -exact "-->"
#enviamos el comando de salida
send "user logout\r"


Lo que va entrecomillado es la info que se envía que variara en función de cada router. Si tenéis el mismo router que yo. solo tenéis que cambiar el usuario y el password.



Montamelo !!!

Aunque nos hayamos deshecho de Windows y usemos otro sistema Operativo. Siempre tendremos convivir con Windows queramos o no. En este post voy a explicar como acceder a las carpetas compartidas de Windows. Desde la consola o bien editando un fichero del sistema para tenerla siempre disponible.

Que se necesita ¿? hay que tener el kernel que se este utilizando soporte para SAMBA. Y con esto suficiente.

El comando a utilizar es mount, el mismo que hemos explicado en posts anteriores para montar imagenes de dispositivos. En este caso habrá que pasarle otros parametros extra para montar el directorio en nuiestro sistema.

$ mount -t smbfs -o dmask=777,rw,usermane=[usuario de Windows],password=[password]
,workgroup=[grupo de trabajo] [carpeta destino] [punto de montaje]
Como podeis observar la filosofia es la misma un origen de datos y el destino en nuestro equipo. Como el origen esta en la red hay que indicar donde se encuentra el usuario y la contraseña para el acceso, el tipo de acceso. Mas ayuda en la páginas man de mount.

Si nos interesa que este montaje sea permanente hay que editar el fichero
/etc/fstab que realizará los montajes que ahi esten indicados cuando se cargue
el sistema. Esto nos sera util si compartimos red con equipos con Windows y necesitemos tener siempre acceso a datos en estos equipos y reusemos ha escribir
el comando siempre.

miércoles, 29 de agosto de 2007

Esto no cabe, que si joer!!!

Toc Toc !!

Siempre hay que llamar antes de entrar y pensar las cosas antes de hacerlas.

Pero este no es el caso. Y como no consigo imaginar en que va degenerar esto del blog, se me hace difícil crearos un índice o menú del blog para que podais encontrar la info de una forma sencilla y rápida. Más que nada por que la mayoría de las cosas son tips o mini mini tutoriales de cosas que solo tienen un denominador en común linux.

Por esta razón en la sección de "Encuentra lo que buscas" os dejo a vuestra disposición del motor de búsqueda de google que solo busca en este blog. De esta manera os será más sencillo encontrar las entradas que estén relacionadas y distanciadas en el tiempo y no compartan una etiqueta común.

De todas formas intentaré esmerarme en etiquetar bien todos los post, para que quede bien to clasificado y sea sencillo navegar por el blog. Pero ya con lo que de las entradas que aparecen de primera la ultima y los tutoriales los empiezo por el principio, cuando leo mi blog me da la sensación de estar dentro de la peli de Memento.

Avisarme cuando encontréis la salida que quiero entrar.

martes, 28 de agosto de 2007

A donde vamos ¿?

Como se suele de decir "no se sabe nada hasta que no sabemos de donde venimos". Para los iniciados en el mundo Linux como yo. Realmente es complicado entender toda la jerga de los linuxeros y más si tenemos en cuenta todas las versiones y distribuciones que hay.

Para aclararos un poco las cosas aquí os dejo la historia de las distribuciones de linux y su evolución. A ver si os sirve para haceros una idea general.


Como podeis observar hay un monto de distros y cada una con su nombre. Para que os hagais una idea todas ellas comparten el mismo kernel (pueden ser distintas versiones) y se diferencian en las aplicaciones que traen consigo, la manera de arrancar el sistema y poco mas.

Y para que os queden claros otro tipo de conceptos sobre este sistema aquí os dejo un documental, donde hablan los creadores de linux y la historia de este sistema.




Código Linux


Acceder a los datos de la imagen

Como se mostró en el post anterior se puede volcar el contenido de un dispositivo a un fichero. Teniendo de esta forma en el fichero contenida toda la información del dispositivo usado. ¿? Pero ahora como hacemos para acceder a la información de la imagen. A los datos que hay ahi dentro.

Para realizar esto nos valdremos de 2 comandos : sfdisk y mount.

Con sfdisk podemos ver como esta formateada la imagen (ver el sistema de ficheros y si esta particionado o no). Y el comando mount nos sirve para "relacionar" , "asignar" una "direccion de memoria" "carpeta" a ese sistema de ficheros.

Es decir si hacemos :

$ sfdisk -l [nombre de la imagen]
   Disp.    Inic   Princ.   Fin    Nºcil    Nºbloq      Id    Sistema
feveflash.beta1p1 * 0+ 949 950- 957568+ 83 Linux
feveflash.beta1p2 950 1014 65 65520 5 Extendida
feveflash.beta1p3 0 - 0 0 0 Vacia
feveflash.beta1p4 0 - 0 0 0 Vacia
feveflash.beta1p5 950+ 1014 65- 65488+ 82 Linux swap / Solaris
Nos lista el numero de particiones que tiene el fichero y el sistema de ficheros que se esta usando

$ sfdisk -d [nombre de la imagen]
feveflash.beta1p1 : start=       63, size=     1915137,   id=83, bootable
feveflash.beta1p2 : start= 1915200, size= 131040, id= 5
feveflash.beta1p3 : start= 0, size= 0, id= 0
feveflash.beta1p4 : start= 0, size= 0, id= 0
feveflash.beta1p5 : start= 1915263, size= 130977, id=82
Nos lista también el numero de particiones pero nos dice donde empieza y termina cada una de las particiones existentes. De aqui el dato importante para realizar el montaje es saber en que bloque empieza la partición. Con esta info, la multiplicamos por 512 y se lo pasamos al comando mount de esta manera
# mount -o loop,offset=32256  [nombere de la imagen] [punto de montaje]
Esto para el caso de que este particionado, si no es asi bastaria con :

$ mount [nombee de la imagen] [punto de montaje]

Para ver los datos basta con :

$ cd
$ ls

Y así listaríamos el contenido de la imagen.

lunes, 27 de agosto de 2007

Crear Imagenes

Aquí voy a explicar como hacer una imagen de un disco duro, cd, diskette, memoria flash, sd o de cualquier dispositivo de memoria de vuestra maquina. Esto lo vamos a partir de un comando de bash, que nos permite coger la información contenida en un dispositivo y volcarla a un fichero tal cual y viceversa.

Esto en otro sistemas no es tan sencillo de hacer y no lo entiendo, ya que es una funcionalidad básica, tengo un dispositivo que almacena información y quiero mover esta información a otro dispositivo. No debería de ser necesario utilizar distintas aplicaciones en función de los dispositivos que tengamos. Además se entiende que toda la movida va de esto, manipular la información, visualizarla y moverla.

Dicho y hecho, el comando a utilizar es dd. Y lo vamos usar con los siguientes parámetros : if 'input file' , of 'output file' y bs 'block size'. Para mas ayuda sobre la sintaxis del comando ejecutar : # man dd. Como podéis comprobar los parámetros se refieren a ficheros y no a dispositivos, pero claro en Linux todo es un fichero. Los dispositivos que ha reconocido tu linux se encuentran en /dev/ . Donde hda y hdb son tus discos duros y van acompañados de un numero que indica la partición hda1, hdb2, ... también podrias tener un hdc. Si tus discos duros son scsi te apareceran como sda1 , etc..

Tanto nombre nuevo como aclararse, pues a golpe de comando si se ejcuta el comando fdisk nos mostrara la información de como esta particionado y donde se encuentran en mi caso la salida este comando es tal que asi :

$ sudo fdisk -l

Disco /dev/sda: 160.0 GB, 160041885696 bytes
255 cabezas, 63 sectores/pista, 19457 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes

Disposit. Inicio Comienzo Fin Bloques Id Sistema
/dev/sda1 15181 19457 34355002+ 83 Linux
/dev/sda2 1 43 345366 82 Linux swap / Solaris
/dev/sda3 44 15180 121587952+ 83 Linux

Las entradas de la tabla de particiones no están en el orden del disco

Visto lo visto, ya sabéis por lo menos el nombre de un dispositivo y como averiguar que nombres tenéis en el caso de que sea un disco duro de lo que queráis hacer una imagen. Entonces para copiar todo el contenido de un disco duro en un fichero tal cual como esta escrito se haria de la siguiente forma :

# dd if=/dev/sda of=[fichero de destino] bs=2048

Ala pues ya tendremos nuestra imagen de disco duro. Esto es igual para un USB, Memoria SD, Memoira Flash, Diskette, CD-ROM,... Solo hay que saber que fichero en linux representa cada uno de los dispositivos nombrados.


A mi me convencieron.

Todo empezó cosa así de 8 meses, inserción en el mundo laboral, donde tropecé por primera vez con maquinas donde corrían Linux, lo de la Universidad y Linux fue de broma e igual que todos los intentos fallidos de instalar Linux en mi maquina de casa.

Después de unos días trabajando con ese sistema, empecé a comprender de verdad como funcionan los ordenadores y a darme cuenta que las cosas son mucho mas sencillas de lo que parecen. Y con todos los dientes largos que se me quedaban cada vez que volvía a casa y no sabia reproducir en mi maquina todas las cosas que hacia en la oficina, ya que, corría Windows sobre ella, me frustraba.

Basto quitarme los cascos, olvidarme del minimal y el ectro por unos minutos, para descubrir la discusión de cada día, el frente linux vs. frente windows. Aqui fui cuando escuche por primera vez : UBUNTU. Pasaron pocos días para que dejase el frente Windows. Ahora saco los dientes y muerdo.

Y aquí van las razones por las que me hicieron cambiar de sistema :

  • Virus : la mayoría por no decir todos están hechos para ejecutarse en Windows.
  • La mayoria del software es gratuito.
  • Mensajeria Instantanea, Paginas web , correo electronico, musica y peliculas : esto se usa de la misma forma en UBUNTU.
  • Video Juegos , programas específicos : UBUNTU tiene Wine que es una aplicación que hace de capa sobre ubuntu para simular la API de windows y asi puedan ejecutarse en UBUNTU la mayoria de las aplicaciones.
A mi con lo de los virus y sea gratis me llego. Cuando me dí cuenta que el resto era mejor me convenció.

Inauguración

Hola a tod@s. Inauguro este blog, por que he dado el cambiazo a Ubuntu y para contribuir con mis experiencias sobre este Sistema. Esta es una razón y la otra para ayudar a otros usuarios, ya que mi mayor fuente de información de este sistema viene de internet y de mi trabajo.

Siempre me ha resultado desproporcionado los manuales y la cantidad de ayuda que encuentro siempre en internet. De la cual siempre me he aprovechado y este me parece un buen momento para hacer mi pequeña contribución realizando este blog.

Los temas que intentare tratar en este blog son Ubuntu , sistemas linux y programación. Más que unas clases o unos tuturiales plasmare en el blog las cosillas que voy haciendo. Pueden ser configuración de servidores, configuración de redes, scripting, recompilar kernel, gestion de usuarios, administración del sistema, programación de aplicaciones en general, clonar discos,...

Bueno espero estar a la altura y mantener este blog. :)