Mis Tribulaciones Con Unos Scripts

por | 4 septiembre, 2008

Hola, al final se ha conseguido el objetivo de poder debianizar los scripts para nautilus realizados por Javielinux, bajo la ayuda de Alberto. Ha costado pero se ha llegado a buen puerto. Lo más costoso ha sido que Nautilus no permite que instalemos los scripts en el root, así que había que ingeniárselas para que se instalasen en la home de cada usuario y con los permisos correctos. Pero vayamos poco a poco.
Bien, lo primero es que al bajar los scripts y descomprimirlos nos damos cuenta de que no contienen ningún fichero de compilación e instalación (los típicos configure, make o scons); así pues vamos a tener que debianizarlos a mano, sin posibilidad de utilizar comandos como debuild. Pues visto lo visto tendremos que montar los directorios a mano.
Para ello creamos una carpeta en nuestro home llamada scripts y dentro de ella iremos metiendo todo lo necesario y en su sitio. Primero meteremos los ficheros de la licencia y del copyright, no son mas que ficheros de texto creados por nosotros mismos con Gedit. Tenemos que meterlos en la ruta que toca, y que será: /usr/share/doc/javielinux-nautilus-scripts/, esto es tan sencillo como ir creando estas carpetas de forma anidada y en el orden especificado, dentro de la carpeta scripts. Vale, ya tenemos una cosa hecha, vamos a por la siguiente.
Ahora deberíamos meter los scripts en donde tocan, por lo general debería de ser en la ruta /usr/share/gnome2/nautilus-scripts/ o en alguna equivalente, pero desgraciadamente nautilus no nos permite hacer esto, me lo confirmaron por e-mail los mismos desarrolladores del proyecto. Así pues debemos instalarlos en el único sitio que se nos permite, a saber: /home/nuestrousuario/.gnome2/nautilus-scripts, pero claro no podemos crear esta ruta a manos porque la carpeta o directorio que he llamado “nuestrousuario” es un nombre variable, es decir, cambia según el nombre del usuario que vaya a instalar el paquete debianizado, así pues problemón difícil de solventar, pero no imposible
Recordé el paquete sun-java6-doc que tenemos en los repositorios y lo que hacía para instalar la extensa documentación de java. Para instalar correctamente este paquete tenemos que bajarnos primero de la web oficial de Sun la documentación y moverla a /tmp, para finalmente instalar sun-java6-doc nediante Synaptic, Adept o terminal; el cual lleva metido un fichero o script de postinstalación el cual se encarga de descomprimir la documentación de Java y moverla a la ruta deseada, aunque este script no limpia lo de tmp, pero nosotros sí lo limpiaremos, ya veréis.
Vale peña, hasta aquí ya tenía claras muchas ideas y montado mi propio organigrama mental del proyecto este. Seguidamente lo que hice fue crearme la ruta de carpetas /tmp/nautilus-scripts/ dentro de /scripts, y meter allí dentro los scripts de javielinux, ¡No olvidéis esta ruta porque va a ser clave chavales!
Ahora dentro de loa carpeta scripts hay que crear unba carpeta llamada DEBIAN (ha de ser en mayúsculas obligado), y ahí meteremos los ficheros: control, md5sums, postinst y prerm. El fichero control es el fichero en el cual especificamos el nombre del paquete o programa, su versión, arquitectura en la que se va a instalar, el nombre y e-mail del creador del deb, las dependencias del paquete y una descripción del programa. Para nuestro caso el fichero control tendrá el contenido siguiente:

  1. Package: javi-nautilus-scripts
  2. Version: 1.0-1ubuntu1
  3. Section: gnome
  4. Priority: extra
  5. Installed-Size: 4502
  6. Maintainer: Cristobal Lopez <lopeztobal@gmail.com>
  7. Architecture: all
  8. Depends: nautilus, python, python-dev, python-eyed3, python-nautilus, vorbis-tools, lame, mplayer, mp3splt, id3, dvdauthor, dvd-slideshow (>= 0.8.0), dvd-slideshow-themes (>= 0.8.0), sox, ffmpeg, mkisofs, mp3info, pdftk, pdfjam, imagemagick, ufraw, mencoder, mpgtx
  9. Homepage: http://nautilus-scripts.javielinux.com/
  10. Description: Scripts de Javielinux
  11.  Conjunto de scripts realizados por Javielinux para nautilus bajo licencia GPL3. Con ellos podras manipular tus ficheros de audio, dvd, imagenes o pdf, entre otros.

El fichero md5sums es un fichero que lo que hará es verificar que todos los archivos que contienen el paquete debianizado no están corruptos, vamos que son de confianza. La forma de crearlo os pongo al final del artículo un enlace para verlo, no es difícil. Antes de pasar a explicar los ficheros postinst y prerm os pongo un árbol de cómo debe quedar la colocación de los distintos ficheros y carpetas del paquete a debianizar dentro del directorio padre que hemos llamado en este artículo /scripts.

  1. .
  2. |-- DEBIAN
  3. |   |-- control
  4. |   |-- md5sums
  5. |   |-- postinst
  6. |   `-- prerm
  7. |-- tmp
  8. |   `-- nautilus-scripts
  9. |       |-- Audio
  10. |       |   |-- Convertir Mp3 a Ogg
  11. |       |   |-- Convertir Mp3 a Wav
  12. |       |   |-- Convertir Ogg a Mp3
  13. |       |   |-- Convertir Ogg a Wav
  14. |       |   |-- Convertir Wav a Mp3
  15. |       |   |-- Convertir Wav a Ogg
  16. |       |   |-- Convertir Wma a Mp3
  17. |       |   |-- Convertir Wma a Ogg
  18. |       |   |-- Dividir Mp3
  19. |       |   |-- ID3 con datos de directorio y archivo
  20. |       |   `-- Ver datos ID3
  21. |       |-- Comandos en ventana
  22. |       |   |-- Añadir o Ejecutar Programa
  23. |       |   |-- Procesar al vuelo juntos
  24. |       |   |-- Procesar al vuelo uno a uno
  25. |       |   |-- add_command.jpg
  26. |       |   |-- add_parameter.jpg
  27. |       |   |-- commands.xml
  28. |       |   |-- doc_anadir_o_editar_programa.xml
  29. |       |   |-- main.jpg
  30. |       |   `-- sample_parameter.jpg
  31. |       |-- Comentarios
  32. |       |   |-- Añadir comentarios a directorio
  33. |       |   `-- Añadir comentarios a fotografías
  34. |       |-- DVD
  35. |       |   `-- Crear DVD de fotografias
  36. |       |-- Imagenes
  37. |       |   |-- Agregar borde
  38. |       |   |-- Conversor de RAW a JPG
  39. |       |   |-- Conversor de imágenes
  40. |       |   |-- Convertir a polaroid
  41. |       |   |-- Crear foto collage
  42. |       |   |-- Crear miniaturas
  43. |       |   |-- Crear mosaico fotográfico
  44. |       |   |-- Crear mosaico polaroids
  45. |       |   |-- Espejo Horizontal
  46. |       |   |-- Espejo Vertical
  47. |       |   |-- Redimensionar
  48. |       |   |-- Reducir Calidad
  49. |       |   |-- Rotar a la derecha
  50. |       |   `-- Rotar a la izquierda
  51. |       |-- Otros
  52. |       |   `-- Renombrar ficheros
  53. |       |-- PDF
  54. |       |   |-- Combinar imágenes en PDF
  55. |       |   |-- Comprimir PDF
  56. |       |   |-- Extraer páginas JPG de un PDF
  57. |       |   |-- Reducir páginas PDF
  58. |       |   `-- Unir archivos PDF
  59. |       |-- Process.py
  60. |       |-- Process.pyc
  61. |       `-- Video
  62. |           |-- Extraer AVI
  63. |           `-- Extraer MPEG
  64. `-- usr
  65.     `-- share
  66.         `-- doc
  67.             `-- javielinux-nautilus-scripts
  68.                 |-- LICENCIA
  69.                 |-- LICENSE
  70.                 `-- copyright

Bien, pasemos pues a la parte más difícil del asunto, el fichero postinst. En realidad postinst va a ser un script (así pues deberemos darle permisos de ejecución). Este script se llama postinst porque va a ser un script que llevará metido un conjunto de órdenes escritas, en este caso en lenguaje script, que se realizarán durante la instalación del paquete e inmediatamente después de habernos puesto la licencia y los scripts en /tmp, de ahí su nombre, postinst es la abreviatura de post-installation (post-instalación).
Del código de este fichero tenía claro lo de copiar o mover la carpeta /nautilus-scripts a /home/nuestrousuario/.gnome2/, y que debía cambiar los premisos de todos esos directorios, tanto de propietario y grupo con el comando chown, lo que pasa es que no sabía cómo declarar eso en el script para que el sistema lo identificase por él mismo, ya que recordad que el nombre de usuario en este caso es variable, no es fijo, varía según el que vaya a instalar el programa; ¡yo no conozco a to kiskiii!!!
El otro escollo era que esto se debía de instalar para todos los posibles usuarios que estuviesen el Linux dionde se instalase el programa, de esto no sabía nada de cómo hacerlo; de lo del chown todavía intuía que debí9a haber algún tipo de variable identificativa como la de $HOME, pero desconocía sus nombres; ya que mis conocimientos de lenguaje script son bastante pobres, aunque ahora he aprendido bastante
Y aquí es donde entra en acción mi colega Alberto de Diario De Un Linux3ro, le conté por mensajero lo que quería y en 5 minutos ya lo tenía hecho, ¡tio eres el puto amo de los scripts! ¡Crack! Pues nada, después de no se cuántos intentos de prueba, más que nada porque soy un patoso, el script postinst tiene el siguiente código:

  1. #! /bin/sh
  2. cd
  3. find /home/ -maxdepth 1 -type d -name "*" -exec basename '{}' \; > usuarios.txt
  4. grep -v "home" usuarios.txt > usuarios_b.txt
  5. rm usuarios.txt
  6. mv usuarios_b.txt usuarios.txt
  7. usuario="algo"
  8. while [ ! -z "$usuario" ]
  9. do
  10. read usuario
  11. if [ ! -z "$usuario" ]
  12. then
  13.   if `grep -e "^$usuario:.*" /etc/passwd >/dev/null`
  14. then
  15.         uiid=`grep -e "^$usuario:.*" /etc/passwd | cut -d ":" -f 3 >/dev/null`
  16.         if [ ! -d /home/$usuario/.gnome2/nautilus-scripts/ ]; then
  17.             cd /home/$usuario/.gnome2/
  18.         mkdir nautilus-scripts
  19.         cd
  20.         fi
  21.     cd /tmp/nautilus-scripts
  22.     cp -r Audio Comandos\ en\ ventana Comentarios DVD Imagenes Otros PDF Video Process.py Process.pyc  /home/$usuario/.gnome2/nautilus-scripts/
  23.     cd
  24.     cd /home/$usuario/.gnome2/nautilus-scripts/
  25.         chown -R $usuario.$uiid *
  26.         chmod -R +x *
  27.         chmod -x Process.py Process.pyc
  28.         cd Comandos\ en\ ventana
  29.         chmod -x *.xml
  30. fi
  31. fi
  32. done < ./usuarios.txt
  33. cd
  34. rm usuarios.txt
  35. rm -R /tmp/nautilus-s*
  36.  
  37. [/code]
  38.  
  39. Bueno no voy a pararme a explicarme todo ese código porque esto se esta haciendo bastante largo, y hay cosas que no entiendo todavía muy bien
  40. Ahora me falta explicaros el prerm, éste también va a ser un script, el cual va a tener unas funciones a realizar claves, a saber, nos va a borrar los scripts de javielinux cuando desinstalemos el paquete debianizado o cuando lo actualicemos a una nueva versión. Esto se hará antes de instalar el programa durante la instalación del deb, por eso su nombre de <strong>prerm, abreviatura de pre-romove (pre-borrado)</strong>. No me costó mucho ya crear este script, me fijé en el que había en el sun-java6-doc y en el del postinst, además de coregírmelo cada dos por tres Alberto. El código de este script es:
  41.  
  42. [code]
  43. #! /bin/sh
  44. cd
  45. find /home/ -maxdepth 1 -type d -name "*" -exec basename '{}' \; > usuarios.txt
  46. grep -v "home" usuarios.txt > usuarios_b.txt
  47. rm usuarios.txt
  48. mv usuarios_b.txt usuarios.txt
  49. usuario="algo"
  50.  
  51. if [ "$1" = remove ] || [ "$1" = upgrade ]
  52. then
  53.    while [ ! -z "$usuario" ]
  54.    do
  55.     read usuario
  56.     if [ ! -z "$usuario" ]
  57.     then
  58.     if `grep -e "^$usuario:.*" /etc/passwd >/dev/null`
  59.     then
  60.         uiid=`grep -e "^$usuario:.*" /etc/passwd | cut -d ":" -f 3 >/dev/null`
  61.         if [ -f /home/$usuario/.gnome2/nautilus-scripts/Process.py ]
  62.         then
  63.            cd /home/$usuario/.gnome2/nautilus-scripts/
  64.            rm -R Audio
  65.            rm -R Comandos\ en\ ventana
  66.            rm -R Comentarios
  67.            rm -R DVD
  68.            rm -R Imagenes
  69.            rm -R Otros
  70.            rm -R PDF
  71.            rm -R Video
  72.            rm Process.py
  73.            rm Process.pyc
  74.         fi
  75.      fi
  76.     fi
  77.    done < ./usuarios.txt
  78.  cd
  79.  rm usuarios.txt
  80. fi
  81.  
  82. [/code]
  83.  
  84. En este script también hemos tenid que hacer la búsqueda de usuarios, conm el trozo de código:
  85. [code]
  86. find /home/ -maxdepth 1 -type d -name "*" -exec basename '{}' \; > usuarios.txt
  87. grep -v "home" usuarios.txt > usuarios_b.txt
  88. rm usuarios.txt
  89. mv usuarios_b.txt usuarios.txt
  90. usuario="algo"

Lo que más me interesó fue la siguiente instrucción:

  1. if [ "$1" = remove ] || [ "$1" = upgrade ]

Esta condición de if es muy importante, ya que si $1 es remove (borrar) o update (actualizar) hará lo que haya dentro del if, en este caso borrar los scripts de javielinux donde estaban instalados. Es importante porque las opciones remove y update son precisamente las opciones que podríamos haber especificado por terminal con el programa apt-get o aptitude, y que nujestro Linux ya reconoce al ejecutar el script con este if y porque el script lo hemos llamado prerm y no otra cosa.
Pues vale, hasta aquí ya lo tenemos todo montado chavales, ha cvostado eh? Ahora nos queda debianizarlo, ¿cómo?, con los siguientes comandos: (suponiendo que en la terminal nos encontramos en nuestro propio home)

  1. cd scripts
  2. dpkg -b /home/tobal/scripts /home/tobal/javi-nautilus-scripts_1.0-1ubuntu1_all.deb

Y con esto ya tenemos construido nuestro paquete debianizado, tan sólo queda insttalarlo, disfrutarlo y compartirlo

Enlaces de consulta:

Videotutorial Debianizar Sin Autotools
Debianizando Programas. Parte 2
Scripting. Diario De Un Linux3ro

Los scripts de Javielinux para nautilus los podéis descargar PINCHANDO AQUÍ

Saludos :-h

6 pensamientos en “Mis Tribulaciones Con Unos Scripts

  1. albertjh

    Menuda explicación que te has montado tío… ahora solo queda que todo el mundo se lo instale gracias a ti

    Por cierto son 10.000 xD !

    En cuanto a lo de Valencia… pues más o menos me ha dicho mi padre que estaremos moviéndonos por varios sitios, así que no creo que pueda ser tomar algo, pero yo prometo que el año que viene me apunto a la campus y si no me apunto me hago un viaje y quedamos para tomar lo que sea y donde sea xDDD
    Es más puede que dentro de muy poco vuelva a ir por que tengo un amigo que se va y queremos darle una sorpresita yendo a Alicante, que no me importa subir para Valencia después… así que ya te contaré

    Saludos!!!

  2. espartaco

    Enhorabuena Cristóbal. Yo cuando sea mayor quiero “debianizar” como tu.

    Sólo una pequeña petición , creo que este paquete se podría hacer para arquitectura=all y así poder instalarlo en sistemas que no sean i386 y compatibles.

    Un saludo.

  3. Cristobal

    Espartacus me voy a poner colorado :>
    Lo que dices ya lo he corregido en el artículo y en el deb que se lo he mandado por e-mail a Javielinux, en breve lo tendrás disponible en su web
    Sí lo había hecho para todas las arquitecturas pero tuve un desliz en el fichero control, siento mucho las molestias causadas.
    Saludos

  4. Pingback: Websites tagged "uiid" on Postsaver

Los comentarios están cerrados.