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. :)