Difference between revisions of "Create snap package"

From Lazarus wiki
Line 17: Line 17:
 
   myapp:
 
   myapp:
 
     plugin: nil
 
     plugin: nil
     source: https://somehost/source/location
+
     source: .
     source-type: subversion
+
     source-type: local
 
     build-packages:  
 
     build-packages:  
 
     - fpc
 
     - fpc
Line 65: Line 65:
 
       install -m 755 Install/deb/myapp.desktop $ROOT/usr/share/applications
 
       install -m 755 Install/deb/myapp.desktop $ROOT/usr/share/applications
 
     stage:
 
     stage:
 +
      - etc
 +
      - lib
 +
      - usr
 
       - usr/share/myapp
 
       - usr/share/myapp
 
       - usr/share/applications/myapp.desktop
 
       - usr/share/applications/myapp.desktop
Line 73: Line 76:
 
     desktop: usr/share/applications/myapp.desktop
 
     desktop: usr/share/applications/myapp.desktop
 
</pre>
 
</pre>
See [https://snapcraft.io/docs/snapcraft-yaml-reference Snapcraft.yaml reference] for full list of supported properties.
+
:* See [https://snapcraft.io/docs/snapcraft-yaml-reference Snapcraft.yaml reference] for full list of supported properties.
 
+
:* Lazarus still uses old Gtk2 libraries. See [https://snapcraft.io/docs/gtk2-applications GTK2 Applications] page.
 
* Build snap using '''snapcraft''' command
 
* Build snap using '''snapcraft''' command
 
* Install newly created snap with '''sudo snap install --dangerous --devmode myapp_1.0.0_amd64.snap'''
 
* Install newly created snap with '''sudo snap install --dangerous --devmode myapp_1.0.0_amd64.snap'''

Revision as of 22:28, 24 April 2021

Create snapcraft.yaml

  • Install snapcraft to your Ubuntu machine with sudo apt install snapcraft
  • Create snap subdirectory in your project
  • Execute snapcraft init to create snap/snapcraft.yaml initial file
  • Example file:
name: myapp
version: '1.0.0'
summary: Short description of package.
description: |
  Some more detailed multi-line description.
confinement: devmode
base: core20
grade: devel

parts:
  myapp:
    plugin: nil
    source: .
    source-type: local
    build-packages: 
    - fpc
    - lazarus
    - lcl
    - lcl-utils
    stage-packages:
    # Autodetected dependencies
    - libatk1.0-0
    - libcairo2
    - libdatrie1
    - libfontconfig1
    - libfreetype6
    - libfribidi0
    - libgdk-pixbuf2.0-0
    - libgraphite2-3
    - libgtk2.0-0
    - libharfbuzz0b
    - libpango-1.0-0
    - libpangocairo-1.0-0
    - libpangoft2-1.0-0
    - libpixman-1-0
    - libpng16-16
    - libthai0
    - libx11-6
    - libxau6
    - libxcb-render0
    - libxcb-shm0
    - libxcb1
    - libxcomposite1
    - libxcursor1
    - libxdamage1
    - libxdmcp6
    - libxext6
    - libxfixes3
    - libxi6
    - libxinerama1
    - libxrandr2
    - libxrender1
    override-build: |
      lazbuild --build-mode=Release myapp.lpi
      ROOT=/root/parts/myapp/install
      install -d -m 755 $ROOT/usr/share/myapp
      install -s -m 755 myapp $ROOT/usr/share/myapp
      install -d -m 755 $ROOT/usr/share/applications
      install -m 755 Install/deb/myapp.desktop $ROOT/usr/share/applications
    stage:
      - etc
      - lib
      - usr
      - usr/share/myapp
      - usr/share/applications/myapp.desktop

apps:
  myapp:
    command: myapp
    desktop: usr/share/applications/myapp.desktop
  • Build snap using snapcraft command
  • Install newly created snap with sudo snap install --dangerous --devmode myapp_1.0.0_amd64.snap

snapcraft.yaml file in non-standard subdirectory

Snapcraft normally expect snapcraft.yaml file in snap directory. If your project has packaging for multiple other packaging formats, then you need to use build workaround script. Such shell script can put into directory like myapp/install/snap/local as build.sh file.

#!/bin/bash
ln -s install/snap ../../../snap
pushd ../../..
snapcraft
popd
rm ../../../snap

Register app in snap store

Setup build on Launchpad

Snap packages can be built automatically on Launchpad. Open Create snap package link form your application branch page.

See also