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

martes, 30 de enero de 2018

Instalación de una aplicación mediante wine para todos los usuarios.

Hace poco me pidieron instalar la aplicación PhotoFiltre en Ubuntu ya que necesitaban usar una aplicación sencilla de retoque fotográfico. Solo tiene versión Windows, pero tras descargar el instalador y lanzarlo con wine confirmé que era totalmente funcional.

El problema que tiene wine es que la instalación de las aplicaciones va asociada al usuario, lo cual me obligaría a instalar la misma aplicación una y otra vez en todas las cuentas necesarias. En este caso la única molestia es el tiempo perdido apretando una y otra vez la misma tuerca, pero en aplicaciones que ocupan mucho espacio tenemos además el problema del disco desperdiciado con instalaciones idénticas en el home de cada alumno/profesor.

Según recuerdo con Codeweavers Crossover podías hacer una sola instalación de una aplicación Windows en una bottle (wine->bottle, son unos cachondos) y reusar luego esa bottle en distintas cuentas de usuario. Pero Crossover es de pago y yo tengo que usar wine de forma gratuita.

Así que buscando una manera de hacer una única instalación por máquina encuentro ésto y pruebo a ponerlo en práctica:

Creamos un usuario "windows" local con home en /var/home (para no interferir con nuestro /home en NFS):
# adduser --home /var/home/windows windows
Hago login con el nuevo usuario, descargo el PhotoFiltre y los ficheros de idioma español y los instalo con:
$ wine pf7-setup-en-7.2.1.exe
Después instalo el idioma español copiando el fichero según comentan en la página del programa.

El programa se ha instalado como es normal en wine, en la ruta:
/var/home/windows/.wine/drive_c/Program\ Files\ \(x86\)/PhotoFiltre\ 7/
habiéndose creado un acceso directo en el escritorio del usuario "windows". Si lo lanzamos desde dicho acceso directo se abre y funciona sin problema.

El reto está en hacer que funcione para los otros usuarios de la máquina sin tener que volver a instalarlo. Para ellos vamos a hacer uso de "sudo", que nos permitirá adoptar la identidad del usuario "windows" y ejecutar el programa desde otras sesiones de usuario. Empezamos tocando en el fichero sudoers:
# cat /etc/sudoers
..........
..........
# Configuracion Wine:
User_Alias WINDOWS_USERS = %teachers
Cmnd_Alias WINDOWS = /usr/bin/wine,/usr/bin/winecfg,/var/home/windows/pf7

Defaults:WINDOWS_USERS env_reset
Defaults:WINDOWS_USERS env_keep += DISPLAY
Defaults:WINDOWS_USERS env_keep += XAUTHORITY

WINDOWS_USERS ALL = (windows) NOPASSWD: WINDOWS

En este sudoers damos permisos a todos los usuarios del grupo "teachers" (aquí especificaremos los usuarios o grupo de usuario que queramos) a ejecutar wine, winecfg y el script /var/home/windows/pf7 con la identidad del usuario "windows". El contenido del script pf7 sería:
# cat /var/home/windows/pf7
#!/bin/bash
env WINEPREFIX="/var/home/windows/.wine" wine C:\\Program\ Files\ \(x86\)\\PhotoFiltre\ 7\\PhotoFiltre7.exe
exit 0
Lo que hace es fijar un WINEPREFIX en el directorio donde está wine y lanzar el ejecutable. Esta ruta está sacada del interior archivo .desktop que comentamoss anteriormente, creado por la aplicación en el escritorio durante su instalación con wine.

Ahora tenemos que establecer el medio para que los otros usuarios arranquen el script /var/home/windows/pf7 con la identidad del usuario "windows". Para ello definimos un nuevo script en una carpeta accesible para todo el mundo:
# cat /usr/bin/pf7
#!/bin/bash
xhost +
sudo -u windows -H /var/home/windows/pf7
exit 0
En él ponemos "xhost +" para permitir al usuario "windows" abrir aplicaciones dentro de nuestra sesión Xorg y hacemos el "sudo .../var/home/windows/pf7" para ejecutar el programa con la identidad "windows" sin que nos pida contraseña alguna.

Por último nos hace falta un fichero .desktop para poner en el escritorio de los usuario que vayan a ejecutar la aplicación:
# cat PhotoFiltre7.desktop
[Desktop Entry]
Name=PhotoFiltre 7
Exec=/usr/bin/pf7
Type=Application
StartupNotify=true
Path=/usr/bin
Icon=/usr/share/icons/hicolor/pf7.png
El icono /usr/share/icons/hicolor/pf7.png lo he extraido del .EXE con la aplicacion wrestool:
# wrestool -x fichero.exe -o .
Ultimando las cosas hemos creado una carpeta /wine con propietario "windows" y mapeado z: y "Mis Documentos" sobre ella usando winecfg con la cuenta "windows". De esta manera la aplicación podrá guardar sus datos en una carpeta accesible y fácil de encontrar.



Para finalizar, bloqueamos el login en la cuenta "windows", para que nadie trastee con ella y solo esté accesible a través de sudo:
# passwd -l windows
Y con esto ya tenemos hecha la tarea. A modo de recapitulación las ventajas son:
  • Realizamos una sola instalación y configuración por máquina, ahorrando espacio y trabajo.
  • Si la aplicación se estropea o deja de funcionar (en aplicaciones wine no es infrecuente, ya que el usuario tiene acceso total a la carpeta Archivos de Programa) no tenemos nada más que hacer una copia previa del directorio .wine con tar.gz y descomprimirla para dejar todo otra vez funcionando para todos los usuarios.
Y los inconvenientes:
  • Todos los usuarios de un mismo PC comparten la misma aplicación y carpeta de datos en /wine.
  • La aplicación va vinculada a la máquina y no al usuario. Si se mueve a otro PC no tiene acceso a sus datos o incluso puede no tener acceso a la aplicación
Por tanto, corresponde a cada cual valorar si merece o no la pena hacerlo así o de la forma tradicional.

Vamos que nos vamos.



No hay comentarios:

Publicar un comentario