"Después del juego es antes del juego"
Sepp Herberger

viernes, 19 de diciembre de 2014

Cómo hacer funcionar jkiwi en amd64

Hace poco tuve que instalar la aplicación jkiwi en varias aulas para los ciclos formativos de peluquería y estética. En los Debian con arquitectura i386 no hubo mucho problema: bajé el paquete .deb de su página y la instalé con esta clase puppet:

class instala_jkiwi {

$version="0.9.5"
$paquete="jkiwi_${version}_ubuntu.deb"

file {"/var/cache/$paquete":
owner => root, group => root, mode => 755,
source => "puppet:///instala_jkiwi/$paquete",
notify => Exec["instala_jkiwi"]
}
exec { "instala_jkiwi":
path => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
command => "dpkg -i --force-confnew  --force-overwrite $paquete; apt-get -f -y install ",
cwd => "/var/cache",
unless => "dpkg -l | grep jkiwi | grep $version | grep ^ii",
require => File["/var/cache/$paquete"],
}

file {"/var/home/usuario/Desktop/jkiwi.desktop":
owner => usuario, group => usuario, mode => 755,
source => "puppet:///instala_jkiwi/jkiwi.desktop",
}
}

Cuando lo instalé en los Debian con arquitectura amd64 no hubo problemas hasta la hora de ejecutarlo. Al hacer doble click no hacía nada y al abrirlo desde terminal me daba el error:

java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
at utils.GtkStockIconSWT.createImage(GtkStockIconSWT.java:120)

viernes, 12 de diciembre de 2014

Copiar un mismo fichero a múltiples ubicaciones en Linux (y, de regalo, en Windows).

Cuando tenemos los homes de nuestros usuarios alojados en un servidor NFS frecuentemente nos encontramos con que tenemos que aplicar una configuración concreta a todos ellos. En Linux eso suele ser tan sencillo como copiar un fichero a una ruta concreta dentro del home. En mi caso me he visto en la necesidad de copiar un fichero mimeTypes.rdf dentro de la configuracion Firefox de cada usuario de mi red.

El problema es que la configuración Firefox no está dentro de una ruta fija en el home, sino que está dentro de .mozilla/firefox/<perfil>.default/mimeTypes.rdf, siendo <perfil> una ristra de números y letras que identifica el perfil del usuario.

¿Hay manera de copiar el mimeTypes.rdf independientemente de cual sera el nombre del directorio de perfil?. Pues si, con:

find /home -name 'mimeTypes.rdf' -print -exec cp -f /root/mimeTypes.rdf {} \;

Con esto buscamos todos los mimeTypes.rdf que hay en todos nuestros homes y los sobrescribimos con el que hay en /root/mimeTypes.rdf.

Si quisiéramos poner un acceso directo en todos los escritorios (independientemente de que el acceso directo existiese previamente o no) haríamos:

find /home -name 'Desktop' -print -exec cp -f /root/Rayuela.desktop {} \;

Ojo, asumimos que el escritorio está en la carpeta Desktop.

Bueno, pues hecho esto en los Linux quería hacerlo también en mis Windows. El problema es que los "homes" en los Windows están en las máquinas locales, y que no parece que se pueda hacer mediante código y tengamos que ir copiando cuenta por cuenta. Pues no, para mi sorpresa resulta que se puede hacer así:

for /f "tokens=*" %a  in ('dir /b/s "c:\documents and settings\mimetypes.rdf"') do copy /Y c:\ficheros\mimetypes.rdf  "%a"

Comentando:

  • Asumimos que todas las cuentas de Windows están en el directorio c:\documents and settings\*
  • El fichero origen está en c:\ficheros\mimetypes.rdf
  • El comando 'dir /b/s "c:\documents and settings\mimetypes.rdf"' es el meollo: busca dentro de "c:\documents and settings" todas las apariciones de mimetypes.rdf y devuelve su ruta completa.
  • Si metemos el código anterior dentro de un fichero .BAT la variable "%a" debe ser sustituida por "%%a" en sus dos apariciones. Cosas de los batch scripts.

Bueno, pues ha sido una sorpresa que el intérprete de comandos de Windows pueda hacer esto. ¡Larga vida a la línea de comandos!, dejemos el ratón y el copiar y pegar cual día de la marmota para los usuarios productivos.

viernes, 5 de diciembre de 2014

Montaje de un servidor WPKG

Para mantener actualizado el software de los Windows utilizo una herramienta llamada wpkg. Podría utilizar puppet como hacemos en los Linux, pero IMHO:

  1. Está muy verde.
  2. Se basa en ruby y mis Windows no están para esos trotes.

Wpkg permite instalar/actualizar/desinstalar programas y mantener algunas configuraciones aunque sea de forma rudimentaria. El esquema de funcionamiento en que se basa en wpkg es el siguiente:

  • Tenemos un servicio llamado WPKG Service que se ejecuta en cada arranque del ordenador.
  • Tenemos una carpeta compartida desde un Linux por samba, donde está el script principal wpkg.js (que es un completísimo Windows Script que hace todo el trabajo duro), la configuración con las órdenes a aplicar en un conjunto de ficheros .xml y los ejecutables y scripts de instalación y configuración que queremos aplicar a nuestros Windows.
  • El servicio ejecuta el script wpkg.js, que interpreta los .xml y aplica lo que en ellos dice sobre el PC donde se ejecuta.

Vamos a ver todos los pasos necesarios para configurarlo: