Formas de pagamento Abuse

Como criar um pacote Snap Ubuntu 16

11.06.2021, 19:26

O Snap é uma tecnologia desenvolvida pela Canonical para facilitar a instalação de software na distribuição Ubuntu. É um desenvolvimento relativamente recente. O desenvolvimento do Snap decorreu ao longo de vários anos, mas só com o lançamento do Ubuntu 16.04 é que apareceu num estado em que está pronto a ser utilizado pelas massas.

A principal vantagem do Snap é a capacidade de instalar programas sem dependências. Todas as bibliotecas necessárias já estão no pacote com o programa e não é necessário nada do sistema para o executar. Ao atualizar, o utilizador tem de atualizar um pacote Snap sem fazer alterações no sistema e, em caso de falhas e erros, pode reverter o pacote para a versão anterior. Na Web, é frequente encontrar discussões entre os utilizadores sobre se a tecnologia snap é realmente boa ou se deve ser abandonada a favor dos pacotes deb. Mas o tempo e os testes dirão. De seguida, neste artigo, vamos ver o processo de criação de pacotes snap. Criá-los é um pouco mais fácil do que os mesmos pacotes deb.

Criando Snap Packages no Ubuntu 16.04

Para criar pacotes snap vamos usar uma ferramenta especial chamada Snapcraft. Esta é a ferramenta oficial para a criação de snap packages, que permite ao programador empacotar programas de forma a construir os ficheiros necessários em todo o sistema. O Snapcraft permite não só copiar ficheiros, mas também descarregar o código fonte e construir o programa.

De seguida, vamos ver como criar snap packages utilizando a aplicação Samplenote como exemplo.

Primeiro, instale o Snapcraft. Para obter a versão mais recente, adicione um PPA ao nosso sistema:

$ sudo add-apt-repository ppa:snappy-dev/tools

Agora, actualize a lista de pacotes e instale o programa:

$ sudo apt-get update
$ sudo apt-get install snapcraft

Quando a instalação do Snapcraft estiver concluída, podemos passar para a obtenção do código-fonte do programa. Primeiro, descarregue as fontes do GitHub e descompacte-as:

$ wget https://github.com/Automattic/simplenote-electron/releases/download/v1.0.1/Simplenote-linux-x64.1.0.1.tar.gz
$ tar xvzf Simplenote-linux-x64.1.0.1.tar.gz

Como o programa não precisa de ser compilado, a nossa tarefa é um pouco mais fácil. Vá para a pasta com o programa e inicialize o ambiente de compilação do Snapcraft lá:

$ cd Simplenote-linux-x64
$ snapcraft init

Depois de executar o último comando, o arquivo snapcraft.yml aparecerá na pasta. Ao editar o ficheiro, vamos configurar o processo de criação do nosso pacote snap. Precisaremos de um arquivo com o seguinte conteúdo:

name: simplenote
version: 1.0.1
summary: The simplest way to keep notes.
description: The simplest way to keep notes. Light, clean, and free.
apps:
simplenote:
command: usr/bin/wrapper
plugs:
- unity7
- opengl
- network
parts:
simplenote:
plugin: copy
stage-packages:
- libnss3
- fontconfig-config
- gnome-themes-standard
files:
Simplenote: Simplenote
wrapper: usr/bin/wrapper
icudtl.dat: icudtl.dat
snapshot_blob.bin: snapshot_blob.bin
natives_blob.bin: natives_blob.bin
resources*: resources
libnode.so: usr/lib/x86_64-linux-gnu/libnode.so
libffmpeg.so: usr/lib/x86_64-linux-gnu/libffmpeg.so

As primeiras quatro linhas são informações sobre o pacote em si, o nome do programa, a versão e uma descrição curta e completa.

Comando - este é o comando para iniciar o programa; mais adiante, utilizaremos o script warpper, porque precisamos de especificar variáveis de ambiente adicionais.

Plugs - estas são as interfaces que podem ser utilizadas pelo programa. A questão é que os programas snap funcionam num ambiente isolado, de onde não podem ter acesso ao hardware e aos dados pessoais. Para que o nosso programa funcione corretamente, precisa de dar acesso às interfaces opengl, unity7 e de rede.

Pode ver as interfaces disponíveis e os programas que as utilizam executando o comando:

$ snap interfaces

Na secção das partes é necessário especificar os ficheiros do programa. Especificamente, o que o snapcraft precisa de fazer ao criar um pacote. Como não precisamos de compilar nada, usamos o plugin copy para copiar ficheiros. Os ficheiros que precisam de ser copiados são listados na secção de ficheiros. Não existem apenas ficheiros executáveis, mas também todas as bibliotecas necessárias, para que o programa obtenha todos os componentes de que necessita.

O formato da entrada é o seguinte:

system_file: snap_package_file_path

Existe uma entrada não standard:

resources*: resources

O caractere curinga * permite copiar o diretório inteiro. Para evitar copiar todos os ficheiros do sistema, existe uma opção na secção site-packages para dizer ao programa quais os pacotes que devem ser instalados no pacote snap, no nosso caso são libnss3, fontconfig-config-config e gnome-themes-standard.

Para ver que bibliotecas o programa utiliza, pode usar o comando:

ldd Simplenote | grep Simplenote
libnode.so => /home/sergiy/test/Simplenote/Simplenote-linux-x64/./libnode.so (0x00007f05fb477000)
libffmpeg.so => /home/sergiy/test/Simplenote/Simplenote-linux-x64/./libffmpeg.so (0x00007f05f61ec000)

O importante é que estas bibliotecas são fornecidas com o programa, pelo que temos de as especificar no ficheiro de configuração snapcraft.yaml. Todas as outras bibliotecas estão disponíveis no sistema e serão detectadas pelo snapcraft automaticamente.

A seguir, vamos criar o ficheiro wrapper:

!/bin/sh
export FONTCONFIG_PATH=$SNAP/etc/fonts
export FONTCONFIG_FILE=$SNAP/etc/fonts/fonts.conf
export XDG_DATA_HOME=$SNAP/usr/share
export LD_LIBRARY_PATH=$SNAP_LIBRARY_PATH:$SNAP/usr/lib/x86_64-linux-gnu/
exec "$SNAP/Simplenote" "$@"

Isto é simples aqui - um script Bash. Defina os caminhos para as fontes e diga ao programa onde procurar as bibliotecas para que libnote. so e libffmpeg.so sejam encontradas com sucesso. E a última linha inicia o simplenote.

A próxima coisa a fazer é tornar este ficheiro executável:

$ chmod +x wrapper

Para começar a construir o pacote, execute:

$ snapcraft

A compilação pode demorar algum tempo, e assim que a compilação estiver completa pode instalar o pacote:

$ sudo snap install simplenote_1.0.1_amd64.snap

Pode usar o comando habitual para executar o programa:

$ simplenote

Agora o programa está instalado. Pode utilizar exatamente o mesmo método de criação de pacotes snap para empacotar as suas aplicações.