snap: Start snap support.

- Create a snapcraft.yaml file in snap directory.
  Couldn't put this in packaging directory.
- Use make-snapcraft.py to generate the snapcraft file.
- Use make-snap to make the snap from the snapcraft file.
- Eris is confined to only access projects in home.
- os.setpriority doesn't work in snaps.
- eris-webserver is run as "eris.webserver".
This commit is contained in:
Andrew Hamilton 2021-12-05 18:33:42 +10:00
parent abb9633e97
commit 0331a9da1e
5 changed files with 195 additions and 4 deletions

View file

@ -148,7 +148,7 @@ tools_for_extensions = [
[unrar]
dependencies = ["unrar"]
url = "http://www.rarlabs.com/"
command = "unrar l"
command = "unrar-nonfree l"
[7z]
dependencies = ["p7zip"]
@ -214,7 +214,7 @@ tools_for_extensions = [
has_color = true
[php8_syntax]
dependencies = ["php8.0-cli"]
dependencies = ["php-cli"]
url = "https://en.wikipedia.org/wiki/PHP"
command = "php --syntax-check"
@ -237,7 +237,7 @@ tools_for_extensions = [
[lua_syntax]
dependencies = ["lua5.3"]
url = "http://www.lua.org"
command = "luac -p"
command = "luac5.3 -p"
[js_syntax]
dependencies = ["nodejs"]

View file

@ -31,7 +31,8 @@ class Worker:
self.process = await create
pid_line = await self.process.stdout.readline()
self.child_pgid = int(pid_line.strip())
os.setpriority(os.PRIO_PGRP, self.child_pgid, 19)
if "SNAP" not in os.environ: # Can't do setpriority inside snaps.
os.setpriority(os.PRIO_PGRP, self.child_pgid, 19)
self.process.stdin.write(f"{self.compression}\n".encode("utf-8"))
async def run_tool(self, path, tool):

19
packaging/make-snap Executable file
View file

@ -0,0 +1,19 @@
#!/bin/bash
# Run this script from the project root.
# i.e. ./packaging/make-snap
set -e
set -x
# snap install lxd
# lxd init # Use defaults. Set size of loop device to at least 3GB.
snapcraft clean --use-lxd
snapcraft --use-lxd --debug
sudo snap remove eris
sudo snap install --dangerous eris_*_amd64.snap
/snap/bin/eris -h

70
packaging/make-snapcraft.py Executable file
View file

@ -0,0 +1,70 @@
#!/usr/bin/env python3.9
# -*- coding: utf-8 -*-
import textwrap
import eris.__main__
import eris.tools as tools
def main():
lines = eris.__main__.__doc__.splitlines()
summary = lines[2]
description = textwrap.indent("\n".join(lines[2:]), " ")
print(f"""\
name: eris
base: core20
version: 2021.11.29
summary: {summary}
description: |
{description}
grade: devel
confinement: strict
apps:
eris:
command: bin/eris
environment:
PYTHONPATH: $SNAP/lib/python3.9/site-packages:$SNAP/lib/python3.9/dist-packages:$PYTHONPATH
plugs:
- home
webserver:
command: bin/eris-webserver
environment:
PYTHONPATH: $SNAP/lib/python3.9/site-packages:$SNAP/lib/python3.9/dist-packages:$PYTHONPATH
plugs:
- home
- network-bind
passthrough:
layout:
$SNAP/usr/bin/php:
symlink: $SNAP/usr/bin/php7.4
parts:
eris:
plugin: python
source: .
python-packages:
- ./termstr
- ./lscolors
- ./fill3
- ./eris
requirements:
- ./termstr/requirements.txt
- ./fill3/requirements.txt
- ./eris/requirements.txt
build-environment:
- SNAPCRAFT_PYTHON_INTERPRETER: python3.9
stage-packages:
- python3.9-venv
- python3-distutils
- python3-pkg-resources
- """, end="")
print("\n - ".join(sorted(tools.dependencies())))
if __name__ == "__main__":
main()

101
snap/snapcraft.yaml Normal file
View file

@ -0,0 +1,101 @@
name: eris
base: core20
version: 2021.11.29
summary: Eris maintains an up-to-date set of reports for every file in a codebase.
description: |
Eris maintains an up-to-date set of reports for every file in a codebase.
A status indicator summarises the state of each report, and a report is viewed
by selecting this status indicator with the cursor.
The reports are cached in the codebase's root directory in a ".eris"
directory.
grade: devel
confinement: strict
apps:
eris:
command: bin/eris
environment:
PYTHONPATH: $SNAP/lib/python3.9/site-packages:$SNAP/lib/python3.9/dist-packages:$PYTHONPATH
plugs:
- home
webserver:
command: bin/eris-webserver
environment:
PYTHONPATH: $SNAP/lib/python3.9/site-packages:$SNAP/lib/python3.9/dist-packages:$PYTHONPATH
plugs:
- home
- network-bind
passthrough:
layout:
$SNAP/usr/bin/php:
symlink: $SNAP/usr/bin/php7.4
parts:
eris:
plugin: python
source: .
python-packages:
- ./termstr
- ./lscolors
- ./fill3
- ./eris
requirements:
- ./termstr/requirements.txt
- ./fill3/requirements.txt
- ./eris/requirements.txt
build-environment:
- SNAPCRAFT_PYTHON_INTERPRETER: python3.9
stage-packages:
- python3.9-venv
- python3-distutils
- python3-pkg-resources
- binutils
- coreutils
- cppcheck
- dpkg
- elinks
- file
- g++
- gcc
- genisoimage
- git
- golang-go
- html2text
- lua-check
- lua5.3
- mediainfo
- nodejs
- p7zip
- pandoc
- perl
- perl-doc
- php-cli
- pylint
- python3-bandit
- python3-cairosvg
- python3-coverage
- python3-mccabe
- python3-mypy
- python3-pdfminer
- python3-pillow
- python3-pycodestyle
- python3-pydocstyle
- python3-pyflakes
- python3-pygments
- python3-pytest
- python3-pytest-cov
- rakudo
- rpm
- ruby2.7
- shellcheck
- tar
- tidy
- unrar
- unzip
- wabt
- xz-utils
- yamllint