Compilando cliente-afirma en Linux

Como @vsuarez estaba interesado en mi experiencia compilando el cliente-afirma comparto aquí mis conclusiones provisionales:

Ya he conseguido compilar (tanto Fedora 24 como 26), pero sólo con JDK 1.8 de Oracle.

  • la compilación predeterminada también compila el cliente-afirma webstart
  • no he comprobado si con OpenJDK 9 ya incorpora javaws y que compile del tirón
  • creo que podría compilarse con OpenJDK 1.8 si quitamos del pom.xml la dependencias relacionadas WS

Mi entorno de compilación:

dnf install java-1.8.0-oracle-devel java-1.8.0-oracle-plugin maven

Ojo pq no son los paquetes corrientes, pero deberá valer cualquier instalación equivalente.

código fuente

Descarga del código fuente:

git clone https://github.com/ctt-gob-es/clienteafirma-docs
git clone https://github.com/ctt-gob-es/jmulticard
git clone https://github.com/ctt-gob-es/clienteafirma
git clone https://github.com/ctt-gob-es/clienteafirma-external

preparación:

editar ficheros:

    joe clienteafirma/pom.xml 

    # eliminar
    #       <module>afirma-keystores-capiaddressbook</module>

    joe clienteafirma/afirma-simple/pom.xml
    
    # eliminar dependencia applejavaextensions

Aún no he preparado parches para automatizar ese cambio, pero son menos de 10 líneas en total.

compilar:

    cd jmulticard/
    mvn install -Dmaven.test.skip=true 

    cd ../clienteafirma-external
    mvn install -Dmaven.test.skip=true 
    
    cd ../clienteafirma
    mvn install -Dmaven.test.skip=true 

Y en teoría ya va del tirón.

Pendiente

Ver ahora cómo recopilo los jars para montarme la aplicación en las rutas de mi elección para no tener que usar el instalador javero que han creado al efecto.

FYI

4 Me gusta

He estado mirando la compilación y he creado un pequeño fichero pom.xml para compilar directamente sin cambiar de directorios.

aquí lo dejo

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>net.hacklabalmeria.afirma</groupId>
	<artifactId>afirma-parent</artifactId>
	<packaging>pom</packaging>
	<version>1.0.0-SNAPSHOT</version>
	<name>Compilacion cliente Afirma</name>
	<modules>
		<module>jmulticard</module>
		<module>clienteafirma-external</module>
		<module>clienteafirma</module>
	</modules>
</project>

y para compilar solo hay que hacer:

$ mvn install -Dmaven.test.skip

Estoy revisando lo que me preguntaste por telegram @olea y si encuentro algo te digo. Suerte mañana con lo de flatpak yo no puedo ir en situ pero si puedo ayudo en algo.

1 me gusta

qué chulo

Otra cosa: ¿tienes idea si en un pom se pueden añadir condicionales que incluyan/excluyan dependencias en función de la plataforma? Porque esas son las dos ediciones que se necesitan para compilar en Linux y si se pudieran añadir aguas arriba simplificamos otro poco el procedimiento :-m

pues si compilase todo en openjdk 9 sin más cambios nos podemos olvidar de quitar nada relacionado con el javaws. yo no lo he probado porque aún no tengo el entorno necesario.

Gracias :slight_smile:

no creo que haga falta mucho más que pelearse con las marranerías de manejar java en flatpak:

https://twitter.com/toxicbits/status/950807959533228033

Se puede. Tienes que crear un profile para poder añadir o quitar estas dependencias o modulos.

Si quieres después te pongo un ejemplo y lo vemos…

ferpecto.

Por actualizar con alguna de las conclusiones a partir del encuentro de ayer tarde en mis progresos preparando un flatpak para cliente-afirma:

  • ya hay una extensión flatpak para openjdk: incluye versiones 8 y 9 usa v8 para construir v9 que es la que finalmente empaqueta;
  • por ahora no lleva incluidas de serie herramientas de construcción como maven o ant, aunque parece que se pueden hacer apaños instalando binarios ya compilados disponibles en, por ejemplo: http://mirrors.ocf.berkeley.edu/apache/
  • hice una prueba de compilación del cliente-afirma con openjdk 9 pero no me ha funcionado quejándose de algo relacionado con maven; realmente no sé si es fácil de resolver;
  • por otro lado por ahora no se puede compilar con openjdk 8 porque éste no distribuye bits relacionados con javaws y el proceso de compilación exige esa dependencia; a día de hoy no sé si se pueden excluir estas dependencias (dado que el objetivo propuesto no parece que deba necesitar javaws) así que haré una consulta al respecto.
  • no he subido todavía a ningún sitio mi manifest para flatpak porque por ahora es una pura guarrería.

En fins. Seguiremos informando.

PD: cositas corregidas.

He estado trabajando en esto y he podido crear unos profile maven para excluir si es necesario las dependencias.

Dejo aquí un fichero .patch para que lo apliqueis al repo de cllienteafirma. Este fichero si va bien lo mandamos a la gente de afirma por si quieren apllicarlo. O sino se le manda un PR.

En principio he compilado con open-jdk8.

Os iré informando.

1 me gusta

Actualización:

Han publicado actualizaciones bonitas:

Además ahora ponen paquetes ya compilados en el repositorio público de maven: https://search.maven.org/#search|ga|1|es.gob.afirma

Y ahora parece que clienteafirma/afirma-simple/ se compila con OpenJDK v1.8 sin más problema con:

mvn install -Denv=install  -Dgpg.skip -Dmaven.test.skip=true

Personalmente me quedan cosas por comprobar:

  • compilación en OpenJDK v9;
  • dirimir exactamente la secuencia de compilación de los componentes contenidos en clienteafirma/* necesarios para clienteafirma/afirma-simple;
  • dirimir cuáles son los demás componentes externos de los que depende para preparar una compilación controlada y reproducible;
  • comprender exactamente cuáles son los ficheros a empaquetar para el cliente Linux;
  • y pasar a hacer pruebas funcionales de la aplicación y verificar que todo funciona como se espera.

Aprovecho para decir que la cooperación del miembro del equipo Carlos Gamuci está siendo fantástica.

FYI

No se si este empaquetado te puede ayudar para saber qué ficheros necesitas:

Es un poco viejito. De cuando autofirma se llamaba simpleafirma.

autoafirma, @firma, simpleafirma, clienteafirma, afirmasimple… menudo despliegue de ingenio en las nomenclaturas X-D

Esto de abandonar las applets y usar un programa independiente para firmar me parece una gran decisión.

No me gusta tanto el extraño instalador que genera unas claves de forma opaca (y “antidebian”) para asegurar la conexión entre Autofirma y tu navegador. Sobre todo porque el mismo proceso se podría hacer mediante scripts y comandos de sistema. Al menos en Linux.

Don @olea ¿cómo va ese gran proyecto de empaquetar autofirma en un flatpak?
Me es muy interesante.

Aún no he llegado a la parte del instalador. Ando revisando primero que puedo compilarlo con los JDK que tengo disponibles. Para la siguiente fase de integración me puedo esperar de todo.

Si puedes adelantarnos detalles pues se agradecería.

Este tema se cerró automáticamente 20 días después del último post. No se permiten nuevas respuestas.