#howtodev - Pacchettizzare in Appimage
Nonostante Appimage ha perso molto terreno rispetto a Flatpak, rimane un formato pacchetto valido, flessibile, leggero ma soprattutto portatile e decentralizzato, due plus da non sottovalutare che rendono questo formato uno dei più compatibili.
Perché quindi non spiegare come impacchettare un software con Appimage?
Obiettivi
In questo articolo verrà spiegato:
- come creare un pacchetto Appimage
- creare un avviatore che prelevi anche i parametri
- inserire le librerie necessarie all’avvio
Prerequisiti
Non è necessario alcun particolare prerequisito, son gradite però:
- Conoscenza della struttura delle cartelle in un file system linux.
- Conoscenza di programmazione degli script bash.
Tool richiesto
Il tool richiesto per la creazione di un Appimage è AppImageTool da AppImagekit.
Posizioniamoci nel percorso che più ci aggrada e scarichiamo il pacchetto:
wget https://github.com/probonopd/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
impostiamolo quindi come eseguibile:
chmod +x appimagetool-x86_64.AppImage
Ho scritto un programma, come creo un Appimage?
Supponendo che il software sia collocato in una singola cartella, creiamo una Desktop Entry al suo interno:
[Desktop Entry]
Name=NOME APP
Icon=percorso/icona
Type=Application
Categories=CATEGORIE
Come si può notare, manca la chiave Exec, poichè questa non è necessaria dato che il punto di avvio dell’applicazione sarà un file script bash chiamato Apprun, dove si potrà poi richiamare manualmente l’eseguibile del programma. Ecco un esempio del contenuto:
#!/bin/sh
exec /percorso/eseguibile
Una volta creati questi file, possiamo costruire la nostra AppImage tramite AppimageTool che abbiamo scaricato poco fa:
ARCH=ARCHITETTURA /percorso/appimagetool-x86_64.AppImage CartellaProgetto nomeApp.AppImage
Immaginando ad esempio una build per le seguenti condizioni:
- Architettura 64 bit.
- Cartella progetto posizionata in
/home/utente/workspace/MioProgetto
. - AppimageTool posizionato in
/home/utente/appimagetool-x86_64.AppImage
.
Il comando da dare sarà:
ARCH=x86_64 /percorso/appimagetool-x86_64.AppImage CartellaProgetto MioProgetto.AppImage
Al posto di x86_64 potete mettere l’architettura che più preferite, è ovviamente possibile utilizzare i percorsi relativi.
Un Apprun migliore
Potrebbe essere necessario specificare alcune opzioni per un AppRun più robusto, ad esempio controllando alcune impostazioni di sistema come l’assenza di connessione, prima di avviare il programma.
Indicare la cartella dell’appimage
Ad esempio se l’eseguibile che avviamo è a sua volta all’interno all’Appimage, è necessario specificare la cartella in cui si trova. Possiamo fare questo con l’ausilio di dirname
:
#!/bin/sh
cartellaEseguibile="$(dirname "$0")"
exec "$cartellaEseguibile"/nomeeseguibile
La cartella verrà risolta al runtime, nota che non sarà la cartella dell’Appimage vera e propria, ma una copia del progetto estratta in /tmp
.
Indicare i parametri a linea di comando
Chi dice che le AppImage non possano essere utilizare da linea di comando?
Per applicazioni che supportano parametri da riga di comando, è necessario istruire il nostro AppRun per trasferire questi al comando originale:
#!/bin/sh
cartellaEseguibile="$(dirname "$0")"
exec "$cartellaEseguibile"/nomeeseguibile "$@"
notiamo "$@"
il quale si occupa di passare tutti gli argomenti a nomeeseguibile
. Quindi passando ad AppRun uno o più argomenti:
nomeApp.AppImage n1 n2 n3
questi verranno letto dal nostro comando originale: nomecomando n1 n2 n3
, comportandosi come da programmazione.