[eside-ghost] ln -s al arrancar el sistema?
Jon Ander Hernández
hernandez en movimage.com
Lun Jun 20 16:14:12 CEST 2005
Aupa a todos !!!
> Al arrancar el sistema, existen unos runlevels...
Lo malo es que esta solución sería un auténtico hack, y es que la
creación de los ficheros de dispositivo corre a cargo de udev
(user-space dev file-system) que los genera de una manera automática (y
además en el arranque udev ya tiene su script /etc/rcS.d/S36udev-mtab).
> Otra forma que se me ocurre es montarlo en el fstab, aunque si tienes
> que crear el enlace es porque posiblemente no te lo reconozca.
Efectivamente sin el fichero... el fstab poco puede hacer.
Independientemente de que esto se puede resolver de infinitas maneras yo
intentaría resolverlo tratando de averiguar que falla en udev, porque
ademas de que es el sistema que debería crear el fichero, también es una
interesante oportunidad para juguetear con udev.
> > Estoy aqui viendo un DVD, y me pasa una cosa curiosa: mi queridísima
> > Ubuntu no crea el dispositivo /dev/dvd al arrancar el sistema, con lo
> > que, para poder ver un DVD, tengo que hacer un ln -s /dev/hdc /dev/dvd
> > cada vez que reinicio el ordeñador.
Pues acabas de dar con un fallo de udev, pero desde luego esto no
debería ser asi... y es que en la configuración de udev por defecto esta
puesta para que cree un enlace de dvd al dispositivo de turno, por lo
que yo miraría a ver si actualizando udev se resuelve el problema.
Para que te sirva de refencia yo estoy usando ubuntu hoary y tengo la
versión 0.050-3ubuntu7.
De todas maneras si quieres descubrir que esta pasando y descubir un
poco como funciona la cosa te cuento. Udev usa unas reglas para crear
los nodos que estan albergadas en "/etc/udev/rules.d/", concretamente
para el tema de los cds, usa el fichero de reglas
"/etc/udev/rules.d/cd-aliases.rules".
En este fichero de reglas se indica que se debe ejecutar el
script /etc/udev/scripts/cdsymlinks.sh pasandole por parametro el nombre
del que debería ser el fichero de dispositivo normal con el fin de que
este script detecte las capabilities de tu unidad {cd,dvd}-{rom,rw} y en
función de ellas crear los enlaces de turno.
Ejemplo ilustrativo :
Yo tengo un unidad dvdrom conectada como master en el conector
secundario a.k.a hdc.
Y despues tengo una grabadora DVD conectada por USB, y parece ser que
esto es a.k.a sr0 (pero antes de escribir esto no lo sabia :D).
Por lo tanto primero $ cat /proc/sys/dev/cdrom/info
drive name: sr0 hdc
drive speed: 48 52
drive # of slots: 1 1
Can close tray: 1 1
Can open tray: 1 1
Can lock tray: 1 1
Can change speed: 1 1
Can select disk: 0 0
Can read multisession: 1 1
Can read MCN: 1 1
Reports media changed: 1 1
Can play audio: 1 1
Can write CD-R: 1 0
Can write CD-RW: 1 0
Can read DVD: 1 1
Can write DVD-R: 1 0
Can write DVD-RAM: 0 0
Can read MRW: 1 1
Can write MRW: 1 1
Can write RAM: 1 1
Esto nos revela el nombre que el kernel le da al dispositivo (hdc y sr0)
y tambien nos revela que capabilities esta detectando el kernel.
Ahora vamos a ver que enlaces nos esta devolviendo el
script /etc/udev/scripts/cdsymlinks.sh, como parte de la regla por
defecto de udev para cds.
$ /etc/udev/scripts/cdsymlinks.sh hdc
cdrom dvd
$ /etc/udev/scripts/cdsymlinks.sh sr0
cdrom2 cdrw1 dvd2 dvdrw1
Si llegados a este punto el script cdsymlinks no estuviera funcionando
como debiera por lo que sea, podriamos modificar la regla de udev y a
correr.
Pero sigamos, ahora vamos a ver que información nos dice udev.
$ udevinfo -q all -n /dev/hdc
P: /block/hdc
N: hdc
S: cdrom dvd
$ udevinfo -q all -n /dev/sr0
P: /block/sr0
N: scd0
S: cdrom1 cdrw dvd1 dvdrw sr0
P significa el path del dispositivo dentro de sysfs (sysfs es un sistema
de archivos del kernel que exporta información estructurada de los
drivers y subsistemas del nucleo, y es un sistema que pretende
reemplazar a la larga al sistema de archivos /proc).
Podemos por ejemplo hacer una prueba de sysfs, para ver que cosas
contiene este sistema.
Junto /sys/ + el path de este dispositivo que me comenta udevinfo
(/block/hdc) y hacemos :
$ ls -l /sys/block/hdc
total 0
-r--r--r-- 1 root root 4096 2005-06-20 15:54 dev
lrwxrwxrwx 1 root root 0 2005-06-20 15:54 device
-> ../../devices/pci0000:00/0000:00:0f.1/ide1/1.0
drwxr-xr-x 3 root root 0 2005-06-18 18:05 queue
-r--r--r-- 1 root root 4096 2005-06-20 15:54 range
-r--r--r-- 1 root root 4096 2005-06-20 15:54 removable
-r--r--r-- 1 root root 4096 2005-06-20 15:54 size
-r--r--r-- 1 root root 4096 2005-06-20 15:54 stat
Y bueno pues vemos como tenemos algunos ficheros que nos dan información
del dispositivo.
Volviendo al resultado de udevinfo de arriba, la N: nos dice algo que ya
sabiamos el nombre que el kernel le da al dispositivo, pero si
hicieramos :
$ udevinfo -q all -p /block/hdc
P: /block/hdc
N: hdc
S: cdrom dvd
es decir en vez de pasarle a udevinfo con el parametro -n (que indica el
nombre del dispositivo del kernel), le pasamos el parametro -p con la
ruta de dentro de /sys/ pues nos vuelve a sacar toda la información.
Y la S, son los enlaces que udev nos crea a /dev/hdc, de manera que en
el caso de mi grabadora USB me generá un monton de enlaces al mismo no
pa .... no se pa que ... pero me los genera xDDD
$ udevinfo -q symlink -n /dev/sr0
cdrom1 cdrw dvd1 dvdrw sr0
y si hacemos $ pushd /dev/; ls -l $(udevinfo -q symlink -n /dev/sr0);
popd;
lrwxrwxrwx 1 root root 4 2005-06-20 15:28 cdrom1 -> scd0
lrwxrwxrwx 1 root root 4 2005-06-20 15:28 cdrw -> scd0
lrwxrwxrwx 1 root root 4 2005-06-20 15:28 dvd1 -> scd0
lrwxrwxrwx 1 root root 4 2005-06-20 15:28 dvdrw -> scd0
lrwxrwxrwx 1 root root 4 2005-06-20 15:28 sr0 -> scd0
Osease todos apuntan al mismo nodo.
Vale lo de la regla que he comentado antes por si no funciona, a ver ...
$ cat /etc/udev/rules.d/cd-aliases.rules | grep -v ^#
BUS="ide", KERNEL="hd[a-z]", SYSFS{removable}="1",
PROGRAM="/etc/udev/scripts/cdsymlinks.sh %k", SYMLINK="%c{1} %c{2} %c{3}
%c{4} %c{5} %c{6}"
lo que hace eso es al dispositivo del kernel hda a la z que es removible
que ejecute el script ese pasandole por parametro el nombre del
dispositivo del kernel, osease en este caso hdx, y el resultado del
script lo usa para crear los links en /dev/, por lo podemos crear una
regla, por ejemplo :
$ cat > /etc/udev/rules.d/user.rules
BUS="ide", KERNEL="hd[a-z]", SYSFS{removable}="1", SYMLINK="cdrom
dvd"
> > Y eso resulta un poco coñazo, y sobre todo un tanto embarazoso, cuando
> > viene alguien a tu casa, le vas a poner un DVD, y tienes que arrancar
> > una consola delante suyo y empezar a enredar con enlaces simbólicos
> > para poder ver la peli. Siempre saltan algo de "¿Pero Linux no era
> > facil de usaaaar?"
jajajaja, de que me sonará esto, buahh la de veces que le he ido a
enseñar a alguien lo fácil que es un linux bien configurado y ... cuando
lo vas a enseñar a la o tienes un permiso mal, o actualizando algo lo
que antes estaba configurado ya no lo esta... xDDD. En fín aun nos queda
un poco para el lema "make it just work" con el que nació ubuntu.
> > Asi que, alguien sabe alguna forma elegante de hacer que se cree el
> > /dev/dvd al arrancar el sistema?
Thx por aguantarme hasta aqui!! xDDDD
Un saludo!
JonAn.
Más información sobre la lista de distribución eside-ghost