Como criar AppDir? (appimages)

Olá, baixei o lxterminal e extrai seus arquivos usando o dpkg-deb, agora tenho uma pasta com o programa e as dependencias dele… O que eu quero saber é como eu posso fazer esta pasta se tornar um AppDir funcional… :sweat_smile:

Já mudei o path de binarios e libs, tentei inclusive varias das funções presentes no programa pkg2appimage e li a documentação do appimage e ate mesmo do rox filer sobre AppDir, mas, não consegui entender o que falta para concluir o processo… Alguem pode me ajudar??? :pray:

Admito que só fiz um AppImage uma vez de brincadeira, mas até onde eu sei é baixar o AppImageTool daqui e rodar:

./appimagetool-x86_64.AppImage lxterminal.AppDir

Caso esteja atrás da estrutura ideal de um AppDir, tá aqui.

1 Curtida

O meu problema ta sendo justamente a criação do appdir… :pensive:

Edit: O appimagetool funciona, porem, so posso usar ele se eu conseguir criar o AppDir…

Qual sistema e qual versão?

Estou usando debian testing e a versão do lxterminal é a 0.3.0

Se me permite perguntar… O sistema que eu uso pode impedir a criação de um AppDir?
O bash ou algum programa terá um comportamento diferente por este motivo? :thinking:

Geralmente o programa lá que cria AppImages vai te encher o saco se você não estiver rodando o Ubuntu mais antigo ainda suportado pela Canonical ou o Debian stable “equivalente”, que deveriam ser a base comum.

Ainda não entendi exatamente qual o problema. Você já tem uma pasta lxterminal.AppDir com:

  • /AppRun, um link para o programa em si ou um script que inicia ele;
  • /usr/bin , contendo o LXTerminal em si e os programas que ele usa para funções extra;
  • /usr/lib com todas as dependências do programa (Arquivos .so.XXXX);
  • /usr/share/applications/lxterminal.desktop com um arquivo .Desktop (tem um exemplo que você pode adaptar no link que eu mandei)
  • /usr/share/icons/hicolor/<tamanho>/lxterminal.png (onde o tem potências de 2, por exemplo 32x32, 128x128, 256x256, 64x64 etc. e o lxterminal.png tem essa resolução)
  • /lxterminal.png com o ícone (semelhante ao do /usr/share)
  • /lxterminal.desktop (semelhante ao .desktop do /usr/share)

Se tiver já feito e o script se recusa, na saída tem as instruções pra ferramenta não ligar para se você está num Debian/Ubuntu jurrássico ou não.

1 Curtida

É por causa do glibc, economiza 10 MB no AppImage resultante

O que vc pode fazer é construir uma recipe pto pkg2appimage, seria mais ou menos assim:

app: LXTerminal

ingredients:
  dist: xenial
  sources: 
    - deb http://archive.ubuntu.com/ubuntu/ xenial main universe

Salva com um nome tipo LXTerminal.yml e roda assim:

pkg2appimage LXTerminal.yml

Que ele gera

1 Curtida

Pegando o embalo da dica:

E as mods, vc coloca em uma pasta zipada, para que quando o pkg2appimage estiver montando os diretórios, ele ao seguir essa Receita (recipe), pegue essa fonte, baixe (se estiver disponível por algum site como o google drive ou o github), e descompacte essa fonte nos diretórios do seu futuro appimage, e depois ele gere.

Para que ele automatize a montagem. já que toda a vez que você gerar o AppImage pela receita, ele vai apagar a pasta *.AppDir. Ai com a sua fonte de mod em uma pasta compactada, a receita automaticamente vai jogar os seus mods aonde você quer.

1 Curtida

É um pouco dificil entender meu problema realmente :sweat_smile: Porque na realidade meu objetivo não é criar o appimage mas sim entender como é criado o AppDir para replicar com outros programas sem depender do pkg2appimage…

Porém estou esbarrando no problema que meu AppDir não esta funcional :thinking: eu tento rodar o AppRun mas ele não roda e por isso estou querendo saber o que esta faltando

Na saida do seu terminal, informa que falta alguma lib?

Eu fiz isso quando estava no ubuntu e utilizando a receita havia dado certo, porém, neste caso o meu objetivo é compreender e não utilizar, só que dentro do meu debian nem mesmo usando o pkg2appimagetool eu gero o appimage, então acabou se tornando uma necessidade entender “na unha” o que o programa faz para poder replicar :sweat_smile:

Tá informando que falta a lib cairo, mas, tendo um AppDir do lxterminal funcional aqui percebo que na realidade isso não um problema pois em meu sistema ela já existe e portanto o comportamento deveria ser o de reconhecer a mesma e executa-la, mas, isso não acontece com o AppDir que eu gero e sim apenas com o gerado pelo programa :thinking:

Edit: Vi que no pkg2appimage existe um comando chamado compile-glib-schemas, que funciona caso exista esta lib dentro das dependencias do app, no caso do lxterminal isso é verdadeiro, mas, ao tentar realizar o processo ele reclama que não possui um arquivo de configuração para executar o comando…

Pelo que estou vendo no arquivo functions.sh que o pkg2appimage baixa ao gerer, na linha 165, informa que ele baixa o script AppImageAssistant e é por meio dele que ele empacota o AppImage, com o comando:

./AppImageAssistant ./$APP.AppDir/ …/out/$APP"-"$VERSION".glibc"$GLIBC_NEEDED"-"$ARCH".AppImage"

1 Curtida

Basicamente ele baixa recursivamente todas as dependências de um pacote exceto esses, no caso isso inclui as dependências também:

https://raw.githubusercontent.com/AppImage/pkg2appimage/master/excludedeblist

Feito isso ele extrai os pacotes, a questão do glibschema é apenas de existir schemas, ele faz isso entrando na pasta:

"usr/share/glib-2.0/schemas/"

E rodando o comando glib-compile-schemas . (não esquece o . no final)

Feito isso ele baixa o inicializador e colocar na raiz do AppDir com o nome AppRun (ele que diz pro sistema onde procurar as libs)

Por fim ele copia o ícone

É basicamente isso quando o app não usa caminhos absolutos

1 Curtida

Isso é antigo, lá do padrão iso… Não é usado mais

Eu ia dizer a mesma coisa sobre esta parte…
sobre o que falasse, a pasta “usr/share/glib-2.0/schemas/” existe mas fica vazia e por isso ele da um erro reclamando que não há arquivo de configuração

Mas parece que o pkg2appimage ainda está construindo desse modo.

Dentro do functions.sh tem 2 funções de criação de appimages

l.165 generate_appimage
l.209 generate_type2_appimage

Porém no programa pkg2appimage apenas o 2º comando é utilizado, porque o 1º é antigo, ele executa o appimagetool no AppDir, e funciona muito bem até, o problema é que o AppDir precisa estar funcionando para isso dar certo, ou seja, se você tentar iniciar ele clicando em cima de AppRun ele irá rodar normalmente.

Me corrijam se eu estiver errado, eu acredito que o 1º também precisa de um AppDir funcionando para criar o appimage… acho que vou inclusive testar :thinking:

Se tá vazia não precisa

1 Curtida