Snapcraft Guide (Linux)
Esta guía provee información sobre cómo empacar you aplicación en Electron para cualquier ambiente en Snapcraft, incluyendo el Centro de Software de Ubuntu.
Antecedentes y Requerimientos
Juntos con las amplia comunidad de Linux, Canonical busca arreglar algunos de los problemas comúnes de instalación de software con snapcraft
. Snaps son paquetes contenerizados de software que incluyen dependencias requeridas, auto-actualizaciones, y funcionan en las mayores distribuciones de Linux sin modificaciones del sistema.
Hay tres maneras de crear un archivo .snap
:
- Using Electron Forge or
electron-builder
, both tools that come withsnap
support out of the box. Esta es la opción más fácil. 2) Usingelectron-installer-snap
, which takes@electron/packager
's output. 3) Usando un paquete.deb
ya creado.
En algunos casos, deberás tener instalada la herramienta Snapcraft
. Instructions to install snapcraft
for your particular distribution are available here.
Usando electron-installer-snap
The module works like electron-winstaller
and similar modules in that its scope is limited to building snap packages. Puede instalarlo con:
npm install --save-dev electron-installer-snap
Paso 1: Empaqueta tu aplicación Electron
Package the application using @electron/packager (or a similar tool). Asegúrese de eliminar los node_modules
que no necesita en su aplicación final, ya que cualquier módulo que actualmente no necesite aumentará el tamaño de su aplicación.
La salida debería verse más o menos de esta forma:
.
└── dist
└── app-linux-x64
├── LICENSE
├── LICENSES.chromium.html
├── content_shell.pak
├── app
├── icudtl.dat
├── libgcrypt.so.11
├── libnode.so
├── locales
├── resources
├── v8_context_snapshot.bin
└── version
Paso 2: Ejecutando electron-installer-snap
Desde una terminal que tenga snapcraft
en su PATH
, ejecute electron-installer-snap
solo con el parámetro requerido --src
, el cual es la ubicación de su aplicación empaquetada Electron que se creo en el primer paso.
npx electron-installer-snap --src=out/myappname-linux-x64
Si tiene un pipeline de construcción existente, puede usar electron-installer-snap
programáticamente. For more information, see the Snapcraft API docs.
const snap = require('electron-installer-snap')
snap(options)
.then(snapPath => console.log(`Created snap at ${snapPath}!`))
Using snapcraft
with @electron/packager
Paso 1: Crear proyecto de Snapcraft de Ejemplo
Crea el directorio de tu proyecto y agrega lo siguiente al snap/snapcraft.yaml
:
name: electron-packager-hello-world
version: '0.1'
summary: Hello World Electron app
description: |
Simple Hello World Electron app as an example
base: core22
confinement: strict
grade: stable
apps:
electron-packager-hello-world:
command: electron-quick-start/electron-quick-start --no-sandbox
extensions: [gnome]
plugs:
- browser-support
- network
- network-bind
environment:
# Correct the TMPDIR path for Chromium Framework/Electron to ensure
# libappindicator has readable resources.
TMPDIR: $XDG_RUNTIME_DIR
parts:
electron-quick-start:
plugin: nil
source: https://github.com/electron/electron-quick-start.git
override-build: |
npm install electron @electron/packager
npx electron-packager . --overwrite --platform=linux --output=release-build --prune=true
cp -rv ./electron-quick-start-linux-* $SNAPCRAFT_PART_INSTALL/electron-quick-start
build-snaps:
- node/14/stable
build-packages:
- unzip
stage-packages:
- libnss3
- libnspr4
Si quiere aplicar este ejemplo a un proyecto existente:
- Reemplace
source: https://github.com/electron/electron-quick-start.git
consource: .
. - Reemplace todas las instancias de
electron-quick-start
con el nombre de su proyecto.
Paso 2: Construye el snap
$ snapcraft
<output snipped>
Snapped electron-packager-hello-world_0.1_amd64.snap
Paso 3: Instalar el snap
sudo snap install electron-packager-hello-world_0.1_amd64.snap --dangerous
Paso 4: Ejecutar el snap
electron-packager-hello-world
Usando un paquete de Debian existente
Snapcraft es capaz de tomar un archivo .deb
existente y convertirlo en un archivo .snap
. La creación de un a snap es configurado usando un archivo snapcraft.yaml
que describe las fuentes, dependencias, descripción y otros bloques de construcción.
Paso 1: Crear un paquete Debian
Si aún no tienes listo un paquete .deb
, usando electron-installer-snap
podría ser una forma más fácil para crear el paquete instantáneo. However, multiple solutions for creating Debian packages exist, including Electron Forge, electron-builder
or electron-installer-debian
.
Paso 2: Creando un snapcraft.yaml
For more information on the available configuration options, see the documentation on the snapcraft syntax. Veamos un ejemplo:
name: myApp
version: '2.0.0'
summary: A little description for the app.
description: |
You know what? This app is amazing! It does all the things
for you. Some say it keeps you young, maybe even happy.
grade: stable
confinement: classic
parts:
slack:
plugin: dump
source: my-deb.deb
source-type: deb
after:
- desktop-gtk3
stage-packages:
- libasound2
- libnotify4
- libnspr4
- libnss3
- libpcre3
- libpulse0
- libxss1
- libxtst6
electron-launch:
plugin: dump
source: files/
prepare: |
chmod +x bin/electron-launch
apps:
myApp:
command: bin/electron-launch $SNAP/usr/lib/myApp/myApp
desktop: usr/share/applications/myApp.desktop
# Correct the TMPDIR path for Chromium Framework/Electron to ensure
# libappindicator has readable resources.
environment:
TMPDIR: $XDG_RUNTIME_DIR
As you can see, the snapcraft.yaml
instructs the system to launch a file called electron-launch
. In this example, it passes information on to the app's binary:
#!/bin/sh
exec "$@" --executed-from="$(pwd)" --pid=$$ > /dev/null 2>&1 &
Alternativamente, si esta construyendo su snap
con aislamiento strict
, puede usar el comando desktop-launch
:
apps:
myApp:
# Correct the TMPDIR path for Chromium Framework/Electron to ensure
# libappindicator has readable resources.
command: env TMPDIR=$XDG_RUNTIME_DIR PATH=/usr/local/bin:${PATH} ${SNAP}/bin/desktop-launch $SNAP/myApp/desktop
desktop: usr/share/applications/desktop.desktop
Optional: Enabling desktop capture
Capturing the desktop requires PipeWire library in some Linux configurations that use the Wayland protocol. To bundle PipeWire with your application, ensure that the base snap is set to core22
or newer. Next, create a part called pipewire
and add it to the after
section of your application:
pipewire:
plugin: nil
build-packages: [libpipewire-0.3-dev]
stage-packages: [pipewire]
prime:
- usr/lib/*/pipewire-*
- usr/lib/*/spa-*
- usr/lib/*/libpipewire*.so*
- usr/share/pipewire
Finally, configure your application's environment for PipeWire:
environment:
SPA_PLUGIN_DIR: $SNAP/usr/lib/$CRAFT_ARCH_TRIPLET/spa-0.2
PIPEWIRE_CONFIG_NAME: $SNAP/usr/share/pipewire/pipewire.conf
PIPEWIRE_MODULE_DIR: $SNAP/usr/lib/$CRAFT_ARCH_TRIPLET/pipewire-0.3