Difference between revisions of "InkBox GUI user apps"

From InkBox
Jump to navigation Jump to search
m
Line 35: Line 35:
==== <code>app-lib</code> ====
==== <code>app-lib</code> ====
This directory contains the libraries the application needs to have to function properly. If it is based on Qt, there is no need to bundle it in there, as it will be provided in the <b>system-lib</b> directory. In this example, the application requires <code>libzip.so</code>, so it has been put there. <code>LD_LIBRARY_PATH</code> environment variable is automatically adjusted by the main launch script.<br>Applications can access this location at <code>/app-lib</code>.
This directory contains the libraries the application needs to have to function properly. If it is based on Qt, there is no need to bundle it in there, as it will be provided in the <b>system-lib</b> directory. In this example, the application requires <code>libzip.so</code>, so it has been put there. <code>LD_LIBRARY_PATH</code> environment variable is automatically adjusted by the main launch script.<br>Applications can access this location at <code>/app-lib</code>.
==== <code>sys</code> ====
This directory contains a mounted <code>sysfs</code> filesystem used by the chroot.
==== <code>dev</code> ====
==== <code>dev</code> ====
This directory contains a mounted <code>devtmpfs</code> filesystem used by the chroot.
This directory contains a mounted <code>devtmpfs</code> filesystem used by the chroot.
==== <code>proc</code> ====
==== <code>proc</code> ====
This directory contains a mounted <code>proc</code> filesystem used by the chroot.
This directory contains a mounted <code>proc</code> filesystem used by the chroot.
==== <code>sys</code> ====
==== <code>etc</code> ====
This directory contains a mounted <code>sysfs</code> filesystem used by the chroot.
This directory contains a mounted <code>tmpfs</code> filesystem used by the chroot.
==== <code>system-lib</code> ====
==== <code>system-lib</code> ====
This directory contains the system's Qt libs and are made available so that the application can launch.<br>Applications can access this location at <code>/system-lib</code>.
This directory contains the system's Qt libs and are made available so that the application can launch.<br>Applications can access this location at <code>/system-lib</code>.
==== <code>system-bin</code> ====
This directory contains the system's binaries made available to the application (e.g. BusyBox).<br>Applications can access this location at <code>/system-bin</code>.
==== Other files ====
==== Other files ====
Those may include a main binary, a launch script and an application icon that will be read by the GUI.
Those may include a main binary, a launch script and an application icon that will be read by the GUI.

Revision as of 14:24, 11 June 2022

This page describes the internals of InkBox GUI's user applications feature.

Description

This GUI feature permits the user to run digitally signed external Qt/FB applications available at https://23.163.0.39/bundles/inkbox/apps.
User applications in are executed in their own chroot jail as an unpriviledged user, to prevent external access to parts of the filesystem and increase security. They are also mounted read-only, with some exceptions.

Application package

Contents

App packages have the .isa extension. Signature files (digests) have the .isa.dgst extension. A standard application package layout will look like this:

.
├── app-data
├── app.json
├── app-lib
│   └── libzip.so
├── dev
├── etc
│   └── passwd
├── proc
├── sanki
├── sanki.bin
├── sanki.png
├── sys
└── system-lib

app.json

This file contains a description of the application in the JSON format that will be parsed by the GUI. A sample app.json may look like this:

{
  "app": {
    "Author": "John Doe",
    "AuthorContact": "johndoe@johndoe.com"
    "Enabled": true,
    "ExecPath": "SampleApp",
    "IconPath": "SampleApp.png",
    "Name": "SampleApp",
    "SupportedDevices": "all",
    "Version": "0.1-testing"
  }
}

app-data

This directory contains the only read-write part of the extension package. It is actually a bind mount of the related path .apps-data/<app-name> in the exported USB mass storage. Applications can store their user data, such as preferences, files and stats, there.
Applications can access this location at /app-data.

app-lib

This directory contains the libraries the application needs to have to function properly. If it is based on Qt, there is no need to bundle it in there, as it will be provided in the system-lib directory. In this example, the application requires libzip.so, so it has been put there. LD_LIBRARY_PATH environment variable is automatically adjusted by the main launch script.
Applications can access this location at /app-lib.

sys

This directory contains a mounted sysfs filesystem used by the chroot.

dev

This directory contains a mounted devtmpfs filesystem used by the chroot.

proc

This directory contains a mounted proc filesystem used by the chroot.

etc

This directory contains a mounted tmpfs filesystem used by the chroot.

system-lib

This directory contains the system's Qt libs and are made available so that the application can launch.
Applications can access this location at /system-lib.

system-bin

This directory contains the system's binaries made available to the application (e.g. BusyBox).
Applications can access this location at /system-bin.

Other files

Those may include a main binary, a launch script and an application icon that will be read by the GUI.

GUI launch process

The main Qt GUI will launch the application in the chroot jail as an unpriviledged user, based on its JSON file's ExecPath property. Once the program has finished running, the GUI will restart itself.

Backend setup

The service gui_apps in the main root filesystem manages the setup of user applications.