Differenze tra le versioni di "Creare un AppImage firmata di un progetto Gambas"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Questa lezione iniziata da Akrobaticone a seguito di questo suo post https://www.gambas-it.org/smf/index.php?topic=10305.msg53503#msg53503 e da questa mia successiva richiesta...")
 
 
(32 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Questa lezione iniziata da Akrobaticone a seguito di questo suo post https://www.gambas-it.org/smf/index.php?topic=10305.msg53503#msg53503 e da questa mia successiva richiesta di poter firmare le AppImage: http://gambaswiki.org/bugtracker/edit?object=BUG.2890&from=L21haW4
+
Questa lezione iniziata da [http://www.gambas-it.org/smf/index.php?action=profile;u=12348 Akrobaticone] a seguito di questo suo post https://www.gambas-it.org/smf/index.php?topic=10305.msg53503#msg53503 e da questa mia successiva richiesta di poter firmare le AppImage: http://gambaswiki.org/bugtracker/edit?object=BUG.2890&from=L21haW4
 
<br>Tale richiesta nasce da una riflessione fatta con l'Ing. Claus Dietrich coautore dal 2015 del libro tedesco su Gambas del Prof. Hans Lehmann e da miei infruttuosi tentativi di inscatolare le AppImage dei progetti Gambas dentro sandbox con Fairjail
 
<br>Tale richiesta nasce da una riflessione fatta con l'Ing. Claus Dietrich coautore dal 2015 del libro tedesco su Gambas del Prof. Hans Lehmann e da miei infruttuosi tentativi di inscatolare le AppImage dei progetti Gambas dentro sandbox con Fairjail
  
Riga 8: Riga 8:
 
<br>Ha come scopo la distribuzione di software binario indipendente dalla distribuzione Linux.
 
<br>Ha come scopo la distribuzione di software binario indipendente dalla distribuzione Linux.
 
<br>AppImage consiste quindi in un unico file che contiene in se tutto il necessario per poter eseguire l'applicazione su molte distribuzioni Linux
 
<br>AppImage consiste quindi in un unico file che contiene in se tutto il necessario per poter eseguire l'applicazione su molte distribuzioni Linux
<br>Per semplicare la lezione il test è stato fatto utilizzando un mio programma (un orologio a cucù) presente sulla Farm e facilmente scaricabile, nulla vi impedisce di fare la prova su un qualsiasi vostro programma.
+
<br>Per semplificare la lezione il test è stato fatto utilizzando un mio programma (un orologio a cucù) presente sulla Farm e facilmente scaricabile, nulla impedisce di fare la prova su un qualsiasi altro programma.
  
 
==Alcuni link utili:==
 
==Alcuni link utili:==
Riga 16: Riga 16:
 
*https://appimage-builder.readthedocs.io/en/latest/#
 
*https://appimage-builder.readthedocs.io/en/latest/#
  
 +
<br>
 
'''Procedimento''':
 
'''Procedimento''':
  
 
+
=Il giusto Sistema (Ubuntu 20.04.4 LTS)=
== 1 Il giusto Sistema (Ubuntu 20.04.4 LTS) ==
 
  
 
Al momento per poter creare un AppImage con Gambas dobbiamo farlo da Ubuntu oppure da una sua derivata.
 
Al momento per poter creare un AppImage con Gambas dobbiamo farlo da Ubuntu oppure da una sua derivata.
Riga 25: Riga 25:
 
<br>Questo significa anche che viene ribaltata la necessità che il nostro programma debba tener conto delle librerie presenti nella distribuzione come accade per la creazione dei pacchetti di installazione dove è facile che le librerie siano più vecchie di quelle usate dal nostro Gambas.
 
<br>Questo significa anche che viene ribaltata la necessità che il nostro programma debba tener conto delle librerie presenti nella distribuzione come accade per la creazione dei pacchetti di installazione dove è facile che le librerie siano più vecchie di quelle usate dal nostro Gambas.
 
<br>Infatti useremo sì un sistema “vecchio”, ma con installata l’ultima versione di Gambas che garantirà il buon funzionamento del nostro progetto.
 
<br>Infatti useremo sì un sistema “vecchio”, ma con installata l’ultima versione di Gambas che garantirà il buon funzionamento del nostro progetto.
<br>Per ottenere questo, se non state già usando un “vecchio” Ubuntu, dovreste installarlo su una VM (Virtualbox o meglio ancora una QEMU/KVM) oppure crearvi una nuova partizione dove posizionarlo.
+
<br>Per ottenere questo, se non stiamo già utilizzando un “vecchio” Ubuntu, dovremo installarlo su una VM (Virtualbox o meglio ancora una QEMU/KVM) oppure creiamo una nuova partizione dove posizionarlo.
===1.1 Il giusto Gambas===
+
=Il giusto Gambas=
Nel momento in qui aggiorno questa wiki, come detto, Benoit Minisini ha aggiunto la possibilità di firmare la nostra immagine con una chiave GnuPG, questo è possibile solo con la versione Master, ma non passerà molto tempo che la cosa verrà importata nella stabile.
+
Nel momento in cui aggiorno questa wiki, come detto, Benoit Minisini ha aggiunto la possibilità di firmare la nostra immagine con una chiave GnuPG, questo è possibile solo con la versione Master, ma non passerà molto tempo che la cosa verrà importata nella stabile.
 
<br>Per controllare la firma di un AppImage basta aprire il terminale nella cartella in cui è presente l’appimage e scrivere:<br>
 
<br>Per controllare la firma di un AppImage basta aprire il terminale nella cartella in cui è presente l’appimage e scrivere:<br>
 
   ./ <nome dell’appimage> --appimage-signature
 
   ./ <nome dell’appimage> --appimage-signature
 
<br>
 
<br>
   '''Nota''': La possibilità di creare un AppImage con Gambas è presente dalla versione 3.19 pertanto se non sei interessato alla firma puoi passare direttamente al capitolo 2.
+
   '''Nota''': La possibilità di creare un AppImage con Gambas è presente dalla versione 3.19 pertanto se non siamo interessati alla firma possiamo passare direttamente al capitolo 5.
===1.2 Creazione di una chiave GnuPG===
+
=Creazione di una chiave GnuPG=
 
Se non siamo ancora in possesso di una chiave GnuPG occorre crearla altrimenti possiamo saltare tranquillamente il paragrafo.
 
Se non siamo ancora in possesso di una chiave GnuPG occorre crearla altrimenti possiamo saltare tranquillamente il paragrafo.
<br>Prima di iniziare vi consiglio di prepararvi una passfrase che dovrete inserire in una finestra a un certo punto della procedura.  
+
<br>Prima di iniziare, il consiglio è di prepararci una '''passfrase''' che dovremo inserire in una finestra a un certo punto della procedura.  
<br>Non perdetela perché vi verrà richiesta ogni volta che userete la firma.
+
<br>'''Non perdiamola''' perché ci verrà richiesta ogni volta che useremo la chiave.
 
<br>Apriamo il terminale di Ubuntu 20.04 e scriviamo:
 
<br>Apriamo il terminale di Ubuntu 20.04 e scriviamo:
   gpg –full-gen-key
+
   gpg --full-gen-key
  il terminale risponderà:
+
il terminale risponderà:
 
   gpg (GnuPG) 2.2.19; Copyright (C) 2019 Free Software Foundation, Inc.
 
   gpg (GnuPG) 2.2.19; Copyright (C) 2019 Free Software Foundation, Inc.
 
   This is free software: you are free to change and redistribute it.
 
   This is free software: you are free to change and redistribute it.
Riga 49: Riga 49:
 
   (14) Chiave esistente dalla scheda
 
   (14) Chiave esistente dalla scheda
 
   Selezione?
 
   Selezione?
Qui dovremo rispondere '''1''' come da impostazione predefinita (nota che tutte le nostre risposte devono rispettare questo stesso criterio).
+
Qui dovremo rispondere '''1''' come da impostazione predefinita (da notare che tutte le nostre risposte devono rispettare questo stesso criterio).
 
<br>Proseguiamo con:
 
<br>Proseguiamo con:
Le chiavi RSA possono essere lunghe tra 1024 e 4096 bit.
+
  Le chiavi RSA possono essere lunghe tra 1024 e 4096 bit.
Che chiave vuoi? (3072)
+
  Che chiave vuoi? (3072)
Accettiamo il consiglio e scriviamo 3072
+
Accettiamo il consiglio e scriviamo '''3072'''
La dimensione chiave richiesta è 3072 bit
+
  La dimensione chiave richiesta è 3072 bit
Specificare la durata di validità della chiave.
+
  Specificare la durata di validità della chiave.
 
       0 = la chiave non scade
 
       0 = la chiave non scade
 
       <N>  = la chiave scade dopo N giorni
 
       <N>  = la chiave scade dopo N giorni
Riga 61: Riga 61:
 
       <N>m = la chiave scade dopo N mesi
 
       <N>m = la chiave scade dopo N mesi
 
       <N>y = la chiave scade dopo N anni
 
       <N>y = la chiave scade dopo N anni
Per quanto tempo deve essere valida la chiave? (0)
+
  Per quanto tempo deve essere valida la chiave? (0)
Accettiamo il consiglio e scriviamo 0
+
Scriviamo '''0'''
La chiave non scade affatto
+
  La chiave non scade affatto
È corretto? (y/N)
+
  È corretto? (y/N)
Scriviamo y (yes)
+
Scriviamo '''y''' (yes)
GnuPG deve costruire un ID utente per identificare la chiave.
+
  GnuPG deve costruire un ID utente per identificare la chiave.
Nome reale: (Qui scriviamo il nostro nome)
+
  Nome reale: (Qui scriviamo il nostro nome)
Indirizzo email: (Qui scriviamo la nostra e-mail)
+
  Indirizzo email: (Qui scriviamo la nostra e-mail)
Commento: (Qui possiamo scrivere un nostro commento)
+
  Commento: (Qui possiamo scrivere un nostro commento)
È stato selezionato questo USER-ID:
+
  È stato selezionato questo USER-ID:
 
     "nostro-nome (nostro-commento) <nostra@email>"
 
     "nostro-nome (nostro-commento) <nostra@email>"
Modificare (n)ome, (c)ommento, (e)mail oppure (o)k/(u)scire? (Qui Scriviamo o per ok oppure n se dovete apportare delle modifiche)
+
  Modificare (n)ome, (c)ommento, (e)mail oppure (o)k/(u)scire?  
A questo punto si apre una finestra in cui dovrete inserire la passfrase che vi siete preparati all’inizio, siate abbastanza veloci nell’inserirla e ripeterla uguale altrimenti occorrerà ripartire da zero.
+
Qui Scriviamo '''o''' per ok oppure es. '''n''' se dobbiamo apportare delle modifiche al nome...
È necessario generare molti dati casuali: per fare ciò è utile eseguire
+
<br><br>A questo punto si apre una finestra in cui dobbiamo inserire la '''passfrase''' che ci siamo preparati all’inizio, dobbiamo essere abbastanza veloci nell’inserirla e ripeterla uguale pena ripartire da zero.
qualche altra azione (scrivere sulla tastiera, muovere il mouse, usare i
+
  È necessario generare molti dati casuali: per fare ciò è utile eseguire
dischi) durante la generazione dei numeri primi; questo fornisce al
+
  qualche altra azione (scrivere sulla tastiera, muovere il mouse, usare i
generatore di numeri casuali migliori possibilità di raccogliere abbastanza
+
  dischi) durante la generazione dei numeri primi; questo fornisce al
entropia.
+
  generatore di numeri casuali migliori possibilità di raccogliere abbastanza
gpg: /home/mikey/.gnupg/trustdb.gpg: creato il trustdb
+
  entropia.
gpg: chiave F722E25B5602908A contrassegnata come considerata attendibile
+
Può essere richiesto di ripetere qualche azione
gpg: directory '/home/mikey/.gnupg/openpgp-revocs.d' creata
+
<br> Alla fine vedremo...
gpg: certificato di revoca archiviato come '/home/nostro-nome/.gnupg/openpgp-revocs.d/CHIAVE ALFANUMERICA.rev'
+
  gpg: /home/nostro-nome/.gnupg/trustdb.gpg: creato il trustdb
chiavi pubbliche e segrete create e firmate.
+
  gpg: chiave XXXXXXXXXX contrassegnata come considerata attendibile
pub  rsa3072 2024-06-06 [SC]
+
  gpg: directory '/home/nostro-nome/.gnupg/openpgp-revocs.d' creata
 +
  gpg: certificato di revoca archiviato come '/home/nostro-nome/.gnupg/openpgp-revocs.d/CHIAVE ALFANUMERICA.rev'
 +
  chiavi pubbliche e segrete create e firmate.
 +
  pub  rsa3072 2024-06-06 [SC]
 
       LA CHIAVE ALFANUMERICA DA USARE
 
       LA CHIAVE ALFANUMERICA DA USARE
uid                      mikey (topolino) <mikey@mikey>
+
  uid                      nome-utente (commento) <indirizzo@mail>
sub  rsa3072 2024-06-06 [E]
+
  sub  rsa3072 2024-06-06 [E]
1.3 Comandi utili
+
==Comandi utili==
ls .gnupg/
+
  ls .gnupg/
gpg –list-keys (serve a ottenere la chiave alfanumerica da utilizzare per la firma dell’appimage)
+
  gpg --list-keys (serve a ottenere la chiave alfanumerica da utilizzare per la firma dell’appimage)
gpg –list-secret-keys
+
  gpg --list-secret-keys
./<nome-appimage>.AppImage --appimage-signature
+
  ./<nome-appimage>.AppImage --appimage-signature
2 Preparare Ubuntu
+
=Preparare Ubuntu=
Nota: se copiamo i comandi da un file pdf, prima di incollarli nel terminale vanno copiati in un editor di testo e riformati in modo che essi non vadano a capo ma siano separati solo da uno spazio (dove serve).
 
 
Apriamo il terminale e diamo i seguenti comandi, sempre uno per volta:
 
Apriamo il terminale e diamo i seguenti comandi, sempre uno per volta:
scarichiamo ricorsivamente da internet Appimage builder:
+
<br><br>scarichiamo ricorsivamente da internet Appimage builder:
wget -O appimage-builder-x86_64.AppImage https://github.com/AppImageCrafters/appimage-builder/releases/download/v1.1.0/appimage-builder-1.1.0-x86_64.AppImage
+
  wget -O appimage-builder-x86_64.AppImage https://github.com/AppImageCrafters/appimage-builder/releases/download/v1.1.0/appimage-builder-1.1.0-x86_64.AppImage
 
lo rendiamo eseguibile con:
 
lo rendiamo eseguibile con:
chmod +x appimage-builder-x86_64.AppImage
+
  chmod +x appimage-builder-x86_64.AppImage
 
lo spostiamo con:
 
lo spostiamo con:
sudo mv appimage-builder-x86_64.AppImage /usr/local/bin/appimage-builder
+
  sudo mv appimage-builder-x86_64.AppImage /usr/local/bin/appimage-builder
 
installiamo le librerie per farlo funzionare con:
 
installiamo le librerie per farlo funzionare con:
sudo apt install -y binutils coreutils desktop-file-utils fakeroot fuse libgdk-pixbuf2.0-dev patchelf python3-pip python3-setuptools squashfs-tools strace util-linux zsync
+
  sudo apt install -y binutils coreutils desktop-file-utils fakeroot fuse libgdk-pixbuf2.0-dev patchelf python3-pip python3-setuptools squashfs-tools strace util-linux zsync
Fatto, chiudiamo il terminale
+
'''Fatto''', chiudiamo il terminale
3 Proviamo l’eseguibile
+
=Proviamo l’eseguibile=
 
Avviamo la IDE di Gambas.
 
Avviamo la IDE di Gambas.
Dalla Farm installiamo CuckooClock (occorre leggere tutto per attivare il pulsante).
+
<br>Dalla Farm installiamo CuckooClock (occorre leggere tutto per attivare il pulsante).
Apriamo il progetto senza avviarlo e dal menu Progetto  Compiliamo tutto.
+
<br>Apriamo il progetto senza avviarlo e dal menu ''Progetto'' ''Compiliamo tutto''.
Sempre dalla IDE creiamo un eseguibile lasciandolo all’interno del progetto.
+
<br>Sempre dalla IDE creiamo un eseguibile lasciandolo all’interno del progetto.
Chiudiamo la IDE e navighiamo all’eseguibile avviandolo con un doppio click.
+
<br>Chiudiamo la IDE e navighiamo all’eseguibile avviandolo con un doppio click.
NOTA: Occorre provare l’eseguibile per vedere se funziona correttamente altrimenti è inutile proseguire e conviene fare la prova con un’altra applicazione funzionante.
+
  '''Nota''': Occorre provare l’eseguibile per vedere se funziona correttamente altrimenti è inutile proseguire e conviene fare la prova con un’altra applicazione funzionante.
4 Siamo pronti per creare l’Appimage
+
=Siamo pronti per creare l’Appimage=
 
Riavviamo la IDE di Gambas e apriamo il progetto CuckooClock senza avviarlo.
 
Riavviamo la IDE di Gambas e apriamo il progetto CuckooClock senza avviarlo.
Dal menu Progetto clicchiamo su Crea un pacchetto di installazione… si aprirà la prima pagina dell’omonima finestra in cui volendo potete scrivere la mail, l’indirizzo del vostro sito cambiare il nome ecc. Il progetto ricreerà l’eseguibile, va bene così.
+
<br>Dal menu Progetto clicchiamo su ''Crea un pacchetto di installazione…'' si aprirà la prima pagina dell’omonima finestra in cui volendo possiamo scrivere la mail, l’indirizzo del nostro sito cambiare il nome ecc. <br>Il progetto ricreerà l’eseguibile, va bene così.
Clicchiamo sul pulsante  >> Seguente e scriviamo qualcosa per il Changelog del tipo: primo test per la creazione di un AppImage
+
<br>Clicchiamo sul pulsante  ''>> Seguente'' e scriviamo qualcosa per il Changelog del tipo: ''primo test per la creazione di un AppImage''
Clicchiamo ancora sul pulsante  >> Seguente e spuntiamo la voce AppImage
+
<br>Clicchiamo ancora sul pulsante  ''>> Seguente'' e spuntiamo la voce ''AppImage''
Clicchiamo ancora sul pulsante  >> Seguente  
+
<br>Clicchiamo ancora sul pulsante  ''>> Seguente''
(Inserire immagine)
+
 
Scegliamo la giusta distribuzione di Ubuntu dalla casella a discesa e clicchiamo sul pulsante Ottiene la configurazione corretta del sistema (Nota: se siamo su una derivata occorre scrivere l’indirizzo del repository di Ubuntu quello della foto va bene oppure uno internazionale come http://archive.ubuntu.com/ubuntu/)
+
[[File:appimage-builder.jpg|500px]]
Spuntiamo la casella per l’inserimento della firma e nella casella di testo che si attiva inseriamo la corretta stringa alfanumerica   
+
 
A questo punto abbiamo immesso tutti i dati utili per la formazione dell’AppImage e possiamo agire sul pulsante Crea il pacchetto ora
+
Scegliamo la giusta distribuzione di Ubuntu dalla casella a discesa e clicchiamo sul pulsante '''Ottiene la configurazione corrente del sistema''' (Nota: se siamo su una derivata occorre scrivere l’indirizzo del repository di Ubuntu quello della foto va bene oppure uno internazionale come ''http://archive.ubuntu.com/ubuntu/'')
Fatto se tutto è andato bene apparirà la scritta I pacchetti sono stati creati in modo corretto.
+
<br>Spuntiamo la casella per l’inserimento della firma e nella casella di testo che si attiva inseriamo la corretta stringa alfanumerica   
Chiudiamo la IDE di Gambas.
+
<br>A questo punto abbiamo immesso tutti i dati utili per la formazione dell’AppImage e possiamo agire sul pulsante '''Crea il pacchetto ora'''
Troveremo l’Appimage del programma nella cartella Home per renderlo eseguibile aprite il terminale e date questo comando
+
<br><br>'''Fatto''', se tutto è andato bene apparirà la scritta ''I pacchetti sono stati creati in modo corretto''.
./Cuckoo*.AppImage --appimage-signature
+
<br>Chiudiamo la IDE di Gambas.
-----BEGIN PGP SIGNATURE-----
+
<br>Troveremo l’Appimage del programma nella cartella Home per renderlo eseguibile apriamo il terminale e diamo questo comando
iQGzBAABCgAdFiEEvTStVY3IVP0tTamN9yLiW1YCkIoFAmZhvqwACgkQ9yLiW1YC
+
  chmod a+x Cuckoo*.AppImage
kIoN7wv/cEdn9fXYPOmRzN7w4dIsiNYyW9o22sjA12Wepb+rP2qMuIKUyIpUQLjg
+
Controlliamo la firma con
AhYoGZ3lnHZIZotmz82p0RLZ7jSn5ATuCp8pVtvlOM6fTbAv7qPcWRc3d1VPdeM2
+
  ./CuckooClock-0.1.7-x86_64.AppImage --appimage-signature
slGX6cBVfhePCv0lwEw1llkI+cjIKQhccbSoWpZysgrf5/aJeWopExXshTJ2hrnY
+
<br>
oTLaLWbMrCaArYwXSxdY/McrMAJdL4pmmYo16NxJ6bh8XKV8ppuEhSfCXa4WjP45
+
  -----BEGIN PGP SIGNATURE-----
8joaHXzXBO2fQbFs2Q+Wb4AQ5W6kyFJlF2baAKd7R/QV9E+mad3kcUXsJb2/w/If
+
 
ZHJ6Xori1bZmrzUeVO32JZTHs+UYRsm5pbhT8QGJqKZUtsMXmz+3y+aU/sGAPTM6
+
  iQGzBAABCgAdFiEEvTStVY3IVP0tTamN9yLiW1YCkIoFAmZoT0QACgkQ9yLiW1YC
Fd7g8MTvteGUHcGyXiObqE26YFze4NmYB017dn5K/+JSUPGaAvb/zY8tVrqJuKkF
+
  kIpziQv+NxXs8AL5DasqyYQVKe6+UJx7szcuhrspdMFLmfmB+e0zbuaKse3HjnNi
m8PSJ41OKVFNqIhN+GJzd/omYKdbyCdlYY11+oSPX6jpSa5apkqnhncNHA1Z0HRI
+
  ZtlEffVF8C+eDFgQdIwRndOApfLgWXNHrzz6rXcaJXiMcOyEIBrye5+Il77/tkNI
U9JdF+Fj
+
  nbEhevF3RBuJTLvi/tSpLkeONiTS0XBDLF7IS7v+ekHbYHrXSfs+ylUr1EhfOBM0
=GuvC
+
  gugun9IVyKkwEs16GKuNgJgyKtAyKIYIZbX6mb7WLcj83siAZIzKRnnWyxedA5eG
-----END PGP SIGNATURE-----
+
  Y/CAxiZCiOHa9neG4WFjyPvNNtBCbrC1dkaglwkb8nrvilWAL5AeK+Txwh8668iq
chmod a+x Cuckoo*.AppImage
+
  L2epWrIJca1uTVkQDD6MKGs/zcvxYDWnXrzbGu3fc9Wwe713jfsee41nG3AE3va5
a questo punto possiamo dare un doppio click per vedere se il programma funziona.
+
  ZRCENNXQT5COLbAl2Z4/KtBk/fxl5glirE4o6Hv10OtllQ2WOYTW5bZJQsDU/StR
5 L’Appimage non parte
+
  ZdOjoGa6KO2/sca8VdfSGYgxdShw2r3zcYIYBRlTXujX4xXhOhFwcpx52+y0kan6
 +
  pp8TlrUt
 +
  =S9C+
 +
  -----END PGP SIGNATURE-----
 +
 
 +
 
 +
a questo punto possiamo dare un doppio click sull'AppImage per vedere se il programma funziona.
 +
=L’Appimage non parte=
 
Se l'Appimage non parte entro pochi secondi occorre provare dal Terminale con il comando:
 
Se l'Appimage non parte entro pochi secondi occorre provare dal Terminale con il comando:
./Cuckoo*.AppImage
+
  ./Cuckoo*.AppImage
 
in questo modo possiamo vedere la risposta del terminale.
 
in questo modo possiamo vedere la risposta del terminale.
Se il terminale risponde:
+
<br>Se il terminale risponde:
dlopen(): error loading libfuse.so.2
+
  dlopen(): error loading libfuse.so.2
AppImages require FUSE to run.
+
  AppImages require FUSE to run.
You might still be able to extract the contents of this AppImage
+
  You might still be able to extract the contents of this AppImage
if you run it with the --appimage-extract option.  
+
  if you run it with the --appimage-extract option.  
See https://github.com/AppImage/AppImageKit/wiki/FUSE  
+
  See https://github.com/AppImage/AppImageKit/wiki/FUSE  
for more information
+
  for more information
 
Questo normalmente accade su un sistema vergine (senza Gambas installato)
 
Questo normalmente accade su un sistema vergine (senza Gambas installato)
Sebbene molte distribuzioni abbiano una configurazione FUSE funzionante, potrebbe essere necessario installare e configurare FUSE manualmente.
+
<br>Sebbene molte distribuzioni abbiano una configurazione FUSE funzionante, potrebbe essere necessario installare e configurare FUSE manualmente.
Ad esempio su Ubuntu 22.04 occorre aprire il terminale e digitare:
+
<br>Ad esempio su Ubuntu 22.04 occorre aprire il terminale e digitare:
sudo add-apt-repository universe
+
  sudo add-apt-repository universe
sudo apt install libfuse2
+
e
Attenzione: Per i comandi corretti per la nostra distribuzione fare riferimento alla pagina di aiuto:
+
  sudo apt install libfuse2
https://github.com/AppImage/AppImageKit/wiki/FUSE
+
<br>
come consigliato nella risposta del terminale.
+
  '''Attenzione''': Per i comandi corretti per la nostra distribuzione fare riferimento alla pagina di aiuto:
5.2 Il link della prova:
+
  ''https://github.com/AppImage/AppImageKit/wiki/FUSE''
https://paste.c-net.org/LuciusCream
+
  come consigliato nella risposta del terminale.
 +
==Il link della prova:==
 +
https://paste.c-net.org/HealthyBehaving

Versione attuale delle 08:49, 16 giu 2024

Questa lezione iniziata da Akrobaticone a seguito di questo suo post https://www.gambas-it.org/smf/index.php?topic=10305.msg53503#msg53503 e da questa mia successiva richiesta di poter firmare le AppImage: http://gambaswiki.org/bugtracker/edit?object=BUG.2890&from=L21haW4
Tale richiesta nasce da una riflessione fatta con l'Ing. Claus Dietrich coautore dal 2015 del libro tedesco su Gambas del Prof. Hans Lehmann e da miei infruttuosi tentativi di inscatolare le AppImage dei progetti Gambas dentro sandbox con Fairjail


Premessa

Come recita Wikipedia: AppImage è un formato per la distribuzione di software portatile su Linux senza la necessità di autorizzazioni di superutente per installare l'applicazione.
Ha come scopo la distribuzione di software binario indipendente dalla distribuzione Linux.
AppImage consiste quindi in un unico file che contiene in se tutto il necessario per poter eseguire l'applicazione su molte distribuzioni Linux
Per semplificare la lezione il test è stato fatto utilizzando un mio programma (un orologio a cucù) presente sulla Farm e facilmente scaricabile, nulla impedisce di fare la prova su un qualsiasi altro programma.

Alcuni link utili:


Procedimento:

Il giusto Sistema (Ubuntu 20.04.4 LTS)

Al momento per poter creare un AppImage con Gambas dobbiamo farlo da Ubuntu oppure da una sua derivata.
Occorre anche tener conto del fatto che più il sistema operativo (Ubuntu) è vecchio meglio è perché vuol dire che il nostro progetto potrà funzionare su una più ampia gamma di sistemi.
Questo significa anche che viene ribaltata la necessità che il nostro programma debba tener conto delle librerie presenti nella distribuzione come accade per la creazione dei pacchetti di installazione dove è facile che le librerie siano più vecchie di quelle usate dal nostro Gambas.
Infatti useremo sì un sistema “vecchio”, ma con installata l’ultima versione di Gambas che garantirà il buon funzionamento del nostro progetto.
Per ottenere questo, se non stiamo già utilizzando un “vecchio” Ubuntu, dovremo installarlo su una VM (Virtualbox o meglio ancora una QEMU/KVM) oppure creiamo una nuova partizione dove posizionarlo.

Il giusto Gambas

Nel momento in cui aggiorno questa wiki, come detto, Benoit Minisini ha aggiunto la possibilità di firmare la nostra immagine con una chiave GnuPG, questo è possibile solo con la versione Master, ma non passerà molto tempo che la cosa verrà importata nella stabile.
Per controllare la firma di un AppImage basta aprire il terminale nella cartella in cui è presente l’appimage e scrivere:

 ./ <nome dell’appimage> --appimage-signature


 Nota: La possibilità di creare un AppImage con Gambas è presente dalla versione 3.19 pertanto se non siamo interessati alla firma possiamo passare direttamente al capitolo 5.

Creazione di una chiave GnuPG

Se non siamo ancora in possesso di una chiave GnuPG occorre crearla altrimenti possiamo saltare tranquillamente il paragrafo.
Prima di iniziare, il consiglio è di prepararci una passfrase che dovremo inserire in una finestra a un certo punto della procedura.
Non perdiamola perché ci verrà richiesta ogni volta che useremo la chiave.
Apriamo il terminale di Ubuntu 20.04 e scriviamo:

 gpg --full-gen-key

il terminale risponderà:

 gpg (GnuPG) 2.2.19; Copyright (C) 2019 Free Software Foundation, Inc.
 This is free software: you are free to change and redistribute it.
 There is NO WARRANTY, to the extent permitted by law.
 Selezionare il tipo di chiave:
  (1) RSA e RSA (impostazione predefinita)
  (2) DSA ed Elgamal
  (3) DSA (solo firma)
  (4) RSA (solo firma)
  (14) Chiave esistente dalla scheda
 Selezione?

Qui dovremo rispondere 1 come da impostazione predefinita (da notare che tutte le nostre risposte devono rispettare questo stesso criterio).
Proseguiamo con:

 Le chiavi RSA possono essere lunghe tra 1024 e 4096 bit.
 Che chiave vuoi? (3072)

Accettiamo il consiglio e scriviamo 3072

 La dimensione chiave richiesta è 3072 bit
 Specificare la durata di validità della chiave.
      0 = la chiave non scade
     <N>  = la chiave scade dopo N giorni
     <N>w = la chiave scade dopo N settimane
     <N>m = la chiave scade dopo N mesi
     <N>y = la chiave scade dopo N anni
 Per quanto tempo deve essere valida la chiave? (0)

Scriviamo 0

 La chiave non scade affatto
 È corretto? (y/N)

Scriviamo y (yes)

 GnuPG deve costruire un ID utente per identificare la chiave.
 Nome reale: (Qui scriviamo il nostro nome)
 Indirizzo email: (Qui scriviamo la nostra e-mail)
 Commento: (Qui possiamo scrivere un nostro commento)
 È stato selezionato questo USER-ID:
   "nostro-nome (nostro-commento) <nostra@email>"
 Modificare (n)ome, (c)ommento, (e)mail oppure (o)k/(u)scire? 

Qui Scriviamo o per ok oppure es. n se dobbiamo apportare delle modifiche al nome...

A questo punto si apre una finestra in cui dobbiamo inserire la passfrase che ci siamo preparati all’inizio, dobbiamo essere abbastanza veloci nell’inserirla e ripeterla uguale pena ripartire da zero.

 È necessario generare molti dati casuali: per fare ciò è utile eseguire
 qualche altra azione (scrivere sulla tastiera, muovere il mouse, usare i
 dischi) durante la generazione dei numeri primi; questo fornisce al
 generatore di numeri casuali migliori possibilità di raccogliere abbastanza
 entropia.

Può essere richiesto di ripetere qualche azione
Alla fine vedremo...

 gpg: /home/nostro-nome/.gnupg/trustdb.gpg: creato il trustdb
 gpg: chiave XXXXXXXXXX contrassegnata come considerata attendibile
 gpg: directory '/home/nostro-nome/.gnupg/openpgp-revocs.d' creata
 gpg: certificato di revoca archiviato come '/home/nostro-nome/.gnupg/openpgp-revocs.d/CHIAVE ALFANUMERICA.rev'
 chiavi pubbliche e segrete create e firmate.
 pub   rsa3072 2024-06-06 [SC]
      LA CHIAVE ALFANUMERICA DA USARE
 uid                      nome-utente (commento) <indirizzo@mail>
 sub   rsa3072 2024-06-06 [E]

Comandi utili

 ls .gnupg/
 gpg --list-keys (serve a ottenere la chiave alfanumerica da utilizzare per la firma dell’appimage)
 gpg --list-secret-keys
 ./<nome-appimage>.AppImage --appimage-signature

Preparare Ubuntu

Apriamo il terminale e diamo i seguenti comandi, sempre uno per volta:

scarichiamo ricorsivamente da internet Appimage builder:

 wget -O appimage-builder-x86_64.AppImage https://github.com/AppImageCrafters/appimage-builder/releases/download/v1.1.0/appimage-builder-1.1.0-x86_64.AppImage

lo rendiamo eseguibile con:

 chmod +x appimage-builder-x86_64.AppImage

lo spostiamo con:

 sudo mv appimage-builder-x86_64.AppImage /usr/local/bin/appimage-builder

installiamo le librerie per farlo funzionare con:

 sudo apt install -y binutils coreutils desktop-file-utils fakeroot fuse libgdk-pixbuf2.0-dev patchelf python3-pip python3-setuptools squashfs-tools strace util-linux zsync

Fatto, chiudiamo il terminale

Proviamo l’eseguibile

Avviamo la IDE di Gambas.
Dalla Farm installiamo CuckooClock (occorre leggere tutto per attivare il pulsante).
Apriamo il progetto senza avviarlo e dal menu Progetto Compiliamo tutto.
Sempre dalla IDE creiamo un eseguibile lasciandolo all’interno del progetto.
Chiudiamo la IDE e navighiamo all’eseguibile avviandolo con un doppio click.

 Nota: Occorre provare l’eseguibile per vedere se funziona correttamente altrimenti è inutile proseguire e conviene fare la prova con un’altra applicazione funzionante.

Siamo pronti per creare l’Appimage

Riavviamo la IDE di Gambas e apriamo il progetto CuckooClock senza avviarlo.
Dal menu Progetto clicchiamo su Crea un pacchetto di installazione… si aprirà la prima pagina dell’omonima finestra in cui volendo possiamo scrivere la mail, l’indirizzo del nostro sito cambiare il nome ecc.
Il progetto ricreerà l’eseguibile, va bene così.
Clicchiamo sul pulsante >> Seguente e scriviamo qualcosa per il Changelog del tipo: primo test per la creazione di un AppImage
Clicchiamo ancora sul pulsante >> Seguente e spuntiamo la voce AppImage
Clicchiamo ancora sul pulsante >> Seguente

Appimage-builder.jpg

Scegliamo la giusta distribuzione di Ubuntu dalla casella a discesa e clicchiamo sul pulsante Ottiene la configurazione corrente del sistema (Nota: se siamo su una derivata occorre scrivere l’indirizzo del repository di Ubuntu quello della foto va bene oppure uno internazionale come http://archive.ubuntu.com/ubuntu/)
Spuntiamo la casella per l’inserimento della firma e nella casella di testo che si attiva inseriamo la corretta stringa alfanumerica
A questo punto abbiamo immesso tutti i dati utili per la formazione dell’AppImage e possiamo agire sul pulsante Crea il pacchetto ora

Fatto, se tutto è andato bene apparirà la scritta I pacchetti sono stati creati in modo corretto.
Chiudiamo la IDE di Gambas.
Troveremo l’Appimage del programma nella cartella Home per renderlo eseguibile apriamo il terminale e diamo questo comando

 chmod a+x Cuckoo*.AppImage

Controlliamo la firma con

 ./CuckooClock-0.1.7-x86_64.AppImage --appimage-signature


 -----BEGIN PGP SIGNATURE-----
 
 iQGzBAABCgAdFiEEvTStVY3IVP0tTamN9yLiW1YCkIoFAmZoT0QACgkQ9yLiW1YC
 kIpziQv+NxXs8AL5DasqyYQVKe6+UJx7szcuhrspdMFLmfmB+e0zbuaKse3HjnNi
 ZtlEffVF8C+eDFgQdIwRndOApfLgWXNHrzz6rXcaJXiMcOyEIBrye5+Il77/tkNI
 nbEhevF3RBuJTLvi/tSpLkeONiTS0XBDLF7IS7v+ekHbYHrXSfs+ylUr1EhfOBM0
 gugun9IVyKkwEs16GKuNgJgyKtAyKIYIZbX6mb7WLcj83siAZIzKRnnWyxedA5eG
 Y/CAxiZCiOHa9neG4WFjyPvNNtBCbrC1dkaglwkb8nrvilWAL5AeK+Txwh8668iq
 L2epWrIJca1uTVkQDD6MKGs/zcvxYDWnXrzbGu3fc9Wwe713jfsee41nG3AE3va5
 ZRCENNXQT5COLbAl2Z4/KtBk/fxl5glirE4o6Hv10OtllQ2WOYTW5bZJQsDU/StR
 ZdOjoGa6KO2/sca8VdfSGYgxdShw2r3zcYIYBRlTXujX4xXhOhFwcpx52+y0kan6
 pp8TlrUt
 =S9C+
 -----END PGP SIGNATURE-----


a questo punto possiamo dare un doppio click sull'AppImage per vedere se il programma funziona.

L’Appimage non parte

Se l'Appimage non parte entro pochi secondi occorre provare dal Terminale con il comando:

 ./Cuckoo*.AppImage

in questo modo possiamo vedere la risposta del terminale.
Se il terminale risponde:

 dlopen(): error loading libfuse.so.2
 AppImages require FUSE to run.
 You might still be able to extract the contents of this AppImage
 if you run it with the --appimage-extract option. 
 See https://github.com/AppImage/AppImageKit/wiki/FUSE 
 for more information

Questo normalmente accade su un sistema vergine (senza Gambas installato)
Sebbene molte distribuzioni abbiano una configurazione FUSE funzionante, potrebbe essere necessario installare e configurare FUSE manualmente.
Ad esempio su Ubuntu 22.04 occorre aprire il terminale e digitare:

 sudo add-apt-repository universe

e

 sudo apt install libfuse2


 Attenzione: Per i comandi corretti per la nostra distribuzione fare riferimento alla pagina di aiuto:
 https://github.com/AppImage/AppImageKit/wiki/FUSE
 come consigliato nella risposta del terminale.

Il link della prova:

https://paste.c-net.org/HealthyBehaving