From d90d71170353828ad162c2b44a19d9e9d90f12c2 Mon Sep 17 00:00:00 2001 From: Andrew Hamilton Date: Sun, 16 Jul 2017 12:14:14 +0100 Subject: [PATCH] Can build AppImages more successfully. - The meta/Recipes script doesn't run the post-install of debian packages, so some weren't installed correctly. - This scheme lets vigil install into a container as usual. - The files in the AppDir are calculated as the difference between the files in the initial debootstrapped container, and the container after the installation. --- appimage/AppRun | 20 +++++ appimage/libunionpreload.so | Bin 0 -> 22672 bytes appimage/make-appimage | 29 ------- appimage/make-appimage-yml.py | 48 ----------- appimage/vigil.desktop | 8 ++ appimage/{vigil-icon.png => vigil.png} | Bin make-appimage.py | 108 +++++++++++++++++++++++++ test_distributions.py | 8 +- vigil/worker.py | 5 +- 9 files changed, 141 insertions(+), 85 deletions(-) create mode 100755 appimage/AppRun create mode 100755 appimage/libunionpreload.so delete mode 100755 appimage/make-appimage delete mode 100755 appimage/make-appimage-yml.py create mode 100755 appimage/vigil.desktop rename appimage/{vigil-icon.png => vigil.png} (100%) create mode 100755 make-appimage.py diff --git a/appimage/AppRun b/appimage/AppRun new file mode 100755 index 0000000..988bc1d --- /dev/null +++ b/appimage/AppRun @@ -0,0 +1,20 @@ +#!/bin/sh + + +# This is a modified version of the AppRun made by AppImage's meta/Recipe. + + +set -e + + +HERE="$(dirname "$(readlink -f "${0}")")" +export UNION_PRELOAD="${HERE}" +export LD_PRELOAD="${HERE}/libunionpreload.so" +export LD_LIBRARY_PATH="${HERE}"/usr/lib/:"${HERE}"/usr/lib/i386-linux-gnu/:"${HERE}"/usr/lib/x86_64-linux-gnu/:"${HERE}"/usr/lib32/:"${HERE}"/usr/lib64/:"${HERE}"/lib/:"${HERE}"/lib/i386-linux-gnu/:"${HERE}"/lib/x86_64-linux-gnu/:"${HERE}"/lib32/:"${HERE}"/lib64/:"${LD_LIBRARY_PATH}" +export PYTHONPATH="/usr/local/lib/python3.5/dist-packages:${HERE}"/usr/share/pyshared/:"${PYTHONPATH}" +export XDG_DATA_DIRS="${HERE}"/usr/share/:"${XDG_DATA_DIRS}" +export PERLLIB="${HERE}"/usr/share/perl5/:"${HERE}"/usr/lib/perl5/:"${PERLLIB}" +export GSETTINGS_SCHEMA_DIR="${HERE}"/usr/share/glib-2.0/schemas/:"${GSETTINGS_SCHEMA_DIR}" +export QT_PLUGIN_PATH="${HERE}"/usr/lib/qt4/plugins/:"${HERE}"/usr/lib/i386-linux-gnu/qt4/plugins/:"${HERE}"/usr/lib/x86_64-linux-gnu/qt4/plugins/:"${HERE}"/usr/lib32/qt4/plugins/:"${HERE}"/usr/lib64/qt4/plugins/:"${HERE}"/usr/lib/qt5/plugins/:"${HERE}"/usr/lib/i386-linux-gnu/qt5/plugins/:"${HERE}"/usr/lib/x86_64-linux-gnu/qt5/plugins/:"${HERE}"/usr/lib32/qt5/plugins/:"${HERE}"/usr/lib64/qt5/plugins/:"${QT_PLUGIN_PATH}" +EXEC=$(grep -e '^Exec=.*' "${HERE}"/*.desktop | head -n 1 | cut -d "=" -f 2- | sed -e 's|%.||g') +exec ${EXEC} $@ diff --git a/appimage/libunionpreload.so b/appimage/libunionpreload.so new file mode 100755 index 0000000000000000000000000000000000000000..6eb2c126df44c5c34d16aaad891f1a07f2a2bb5d GIT binary patch literal 22672 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 literal 0 HcmV?d00001 diff --git a/appimage/make-appimage b/appimage/make-appimage deleted file mode 100755 index f21475f..0000000 --- a/appimage/make-appimage +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash - -# Copyright (C) 2017 Andrew Hamilton. All rights reserved. -# Licensed under the Artistic License 2.0. - - -set -e - - -VIGIL_PATH=$(realpath $(dirname $0)/..) -export VIGIL_PATH - - -function get_patched_recipe { - wget -c "https://github.com/AppImage/AppImages/raw/94d39b68d8d7ab56f31fde6f59bc8d2813d13599/recipes/meta/Recipe" - cp Recipe Recipe-patched - sed -i -e 's|delete_blacklisted|# delete_blacklisted|g' Recipe-patched - chmod +x Recipe-patched -} - - -[ $# -eq 0 ] && WORK_PATH=$(mktemp -d --suffix=-appimage) || WORK_PATH="$1" -cd "$WORK_PATH" -$VIGIL_PATH/appimage/make-appimage-yml.py > vigil.yml -get_patched_recipe -./Recipe-patched --no-di vigil.yml -mv out/Vigil* . -echo -echo "AppImage path: $(realpath Vigil*)" diff --git a/appimage/make-appimage-yml.py b/appimage/make-appimage-yml.py deleted file mode 100755 index 4718c64..0000000 --- a/appimage/make-appimage-yml.py +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright (C) 2017 Andrew Hamilton. All rights reserved. -# Licensed under the Artistic License 2.0. - - -import vigil.tools as tools - - -dist_deps = set() -for dependency in tools.dependencies("ubuntu"): - if "/" in dependency: - raise ValueError - else: - dist_deps.add(dependency) -dist_deps.update({"python3-pygments", "python3-pyinotify", "python3-docopt", - "util-linux", "python3-pil"}) -dep_list = "\n - ".join(sorted(dist_deps)) -print("""app: vigil-code-monitor -union: true - -ingredients: - packages: - - %s - dist: zesty - sources: - - deb http://archive.ubuntu.com/ubuntu/ zesty main universe - -script: - - export APPDIR=$(pwd) - - export PYTHONPATH=$APPDIR/usr/share/pyshared - - mkdir -p $PYTHONPATH - - (cd $VIGIL_PATH; /usr/bin/python3 setup.py install \ - --prefix=$APPDIR/usr --install-lib=$PYTHONPATH) - - cp $VIGIL_PATH/appimage/vigil-icon.png . - - cp -a $VIGIL_PATH/tests . - - cp $VIGIL_PATH/test-all tests - - cat > vigil.desktop <<\EOF - - [Desktop Entry] - - Type=Application - - Name=Vigil Code Monitor - - Comment=Vigil maintains an up-to-date set of reports for every file in a codebase. - - Exec=vigil - - Terminal=true - - Icon=vigil-icon.png - - Categories=Application; - - EOF -""" % dep_list) diff --git a/appimage/vigil.desktop b/appimage/vigil.desktop new file mode 100755 index 0000000..0ba820f --- /dev/null +++ b/appimage/vigil.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Type=Application +Name=Vigil +Comment= +Exec=vigil +Terminal=true +Icon=vigil +Categories=Application; diff --git a/appimage/vigil-icon.png b/appimage/vigil.png similarity index 100% rename from appimage/vigil-icon.png rename to appimage/vigil.png diff --git a/make-appimage.py b/make-appimage.py new file mode 100755 index 0000000..e605810 --- /dev/null +++ b/make-appimage.py @@ -0,0 +1,108 @@ +#!/usr/bin/python3 + +# Copyright (C) 2017 Andrew Hamilton. All rights reserved. +# Licensed under the Artistic License 2.0. + + +import os +import pickle +import sys +import tempfile + +import test_distributions + + +VIGIL_PATH = os.path.realpath(os.path.dirname(__file__)) +cmd = test_distributions.cmd + + +def all_paths(path): + for entry in os.scandir(path): + if entry.is_dir(follow_symlinks=False): + yield from all_paths(entry.path) + else: + yield entry.path + + +def relative_paths(root_path, paths): + root_len = len(root_path) + for path in paths: + yield "." + path[root_len:] + + +def make_sub_container(src_root, dest_root, paths): + for path in paths: + dest_path = os.path.join(dest_root, path) + os.makedirs(os.path.dirname(dest_path), exist_ok=True) + os.link(os.path.join(src_root, path), dest_path) + + +def filter_paths(paths, excluded): + return [path for path in paths if not excluded in path] + + +def make_ubuntu_base(): + if os.path.exists("base_paths"): + with open("base_paths", "rb") as file_: + base_paths = pickle.load(file_) + else: + test_distributions.build_ubuntu() + base_paths = relative_paths("ubuntu", all_paths("ubuntu")) + base_paths = filter_paths(base_paths, "python3") + with open("base_paths", "wb") as file_: + pickle.dump(base_paths, file_) + return base_paths + + +# FIX: This isn`t making the correct libunionpreload. +# def make_libunionpreload(): +# #See https://github.com/AppImage/AppImages/blob/master/recipes/meta/Recipe +# temp_dir = tempfile.mkdtemp() +# cmd("wget -q https://raw.githubusercontent.com/mikix/deb2snap/" +# "blob/847668c4a89e2d4a1711fe062a4bae0c7ab81bd0/src/preload.c " +# "-O - | sed -e 's|SNAPPY|UNION|g' | sed -e 's|SNAPP|UNION|g' | " +# "sed -e 's|SNAP|UNION|g' | sed -e 's|snappy|union|g' " +# "> %s/libunionpreload.c" % temp_dir) +# cmd("gcc -shared -fPIC %s/libunionpreload.c -o libunionpreload.so " +# '-ldl -DUNION_LIBNAME="libunionpreload.so"' % temp_dir) +# cmd("strip libunionpreload.so") + + +def make_app_dir(app_dir, new_paths): + os.mkdir(app_dir) + make_sub_container("ubuntu", app_dir, new_paths) + cmd("cp -a %s/tests %s" % (VIGIL_PATH, app_dir)) + cmd("cp -a %s/test-all %s/tests" % (VIGIL_PATH, app_dir)) + cmd("cp %s/appimage/* %s" % (VIGIL_PATH, app_dir)) + # if not os.path.exists("libunionpreload.so"): + # make_libunionpreload() + # cmd("cp libunionpreload.so " + app_dir) + + +def make_appimage(app_dir): + cmd("wget --continue https://github.com/AppImage/AppImageKit/releases/" + "download/continuous/appimagetool-x86_64.AppImage") + cmd("chmod +x appimagetool-x86_64.AppImage") + cmd("./appimagetool-x86_64.AppImage " + app_dir) + + +def main(work_path): + assert os.getuid() == 0 and os.getgid() == 0, "Need to be root." + os.chdir(work_path) + base_paths = make_ubuntu_base() + test_distributions.run_in_container("ubuntu", "./install-dependencies") + test_distributions.run_in_container("ubuntu", "pip3 install -I .") + post_install_paths = relative_paths("ubuntu", all_paths("ubuntu")) + new_paths = set(post_install_paths) - set(base_paths) + new_paths = filter_paths(new_paths, "/var/cache/apt/archives") + app_dir = "vigil.AppDir" + if os.path.exists(app_dir): + cmd("sudo rm -rf " + app_dir) + make_app_dir(app_dir, new_paths) + make_appimage(app_dir) + + +if __name__ == "__main__": + work_path = (tempfile.mkdtemp(prefix="make-appimage2-") + if len(sys.argv) == 1 else sys.argv[1]) + main(work_path) diff --git a/test_distributions.py b/test_distributions.py index 44cfbe4..9796d2c 100755 --- a/test_distributions.py +++ b/test_distributions.py @@ -126,9 +126,9 @@ def build_gentoo(): def main(): - WORK_PATH = (tempfile.mkdtemp(prefix="vigil-") if len(sys.argv) == 1 - else sys.argv[1]) - os.chdir(WORK_PATH) + work_path = (tempfile.mkdtemp(prefix="test_distributions-") + if len(sys.argv) == 1 else sys.argv[1]) + os.chdir(work_path) cmd("sudo apt-get install -y systemd-container debootstrap xz-utils wget") # FIX: Reenable: fedora debian archlinux opensuse pixel gentoo for distribution in ["ubuntu"]: @@ -151,7 +151,7 @@ def main(): globals()["remove_" + distribution]() except KeyError: cmd("sudo rm -rf " + distribution) - os.rmdir(WORK_PATH) + os.rmdir(work_path) print("Finished.") diff --git a/vigil/worker.py b/vigil/worker.py index 509cf4e..6f5a1c2 100755 --- a/vigil/worker.py +++ b/vigil/worker.py @@ -18,14 +18,11 @@ class Worker: self.result = None self.process = None self.child_pgid = None - self.script_path = (os.path.join( - os.environ["APPDIR"], "usr", "bin", "vigil-worker") - if "APPDIR" in os.environ else "vigil-worker") @asyncio.coroutine def create_process(self): create = asyncio.create_subprocess_exec( - self.script_path, stdin=asyncio.subprocess.PIPE, + "vigil-worker", stdin=asyncio.subprocess.PIPE, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, preexec_fn=os.setsid) self.process = yield from create