Commit Graph

277 Commits (db191015d4a269e425afa6980c654605add9ddec)
 

Author SHA1 Message Date
Alexander Larsson db191015d4 xdg-app-dir: Move exports to update_exports
During installation of an app we rewrite and clean up the
deployed export directory, but don't actually export it.

Instead we export only the "current" version of the application
when we run update_exports (passing in which app changed). This way
we ensure that any newly exported files in the current app are exported
before we remove all dangling symlinks.

To make the symlinks properly dangle we also make the export symlinks
point use the "current" and "active" symlinks so non-current deployed
dirs don't keep an old symlink from being removed.
2015-03-11 10:25:18 +01:00
Alexander Larsson c71c8d0b5b Make sure we initialize variables that auto-cleanup 2015-03-11 10:25:18 +01:00
Alexander Larsson e0e23ee181 Add make-app-current 2015-03-11 10:25:15 +01:00
Alexander Larsson e2fdfc531c Track which branch of an app is current
When installed a branch is made current, and we list this in list-apps.
This means nothing atm, but will be used to limit exports to the current
branch of an app.
2015-03-10 16:26:51 +01:00
Alexander Larsson e055d84285 uninstal: Fix the cleanup of empty dirs 2015-03-10 16:25:21 +01:00
Alexander Larsson f32a228887 builtins-list: Use the new helper to list refs 2015-03-10 15:31:38 +01:00
Alexander Larsson 737a516ce1 Add xdg_app_dir_list_refs[_for_name] helpers
These lists all the deployed refs in a given directory.
2015-03-10 15:30:53 +01:00
Alexander Larsson b9e09e6df3 Remove old code handling per-app data
We no longer store the per-app data in the xdg-app dir.
2015-03-10 10:38:09 +01:00
Alexander Larsson 961c3afb1d Move update_exports out of deploy/undeploy
We call this in the builtins rather than the lowlevel deploys,
which lets us call it less times if we're doing multiple deploys
in an operation.
2015-03-10 10:14:12 +01:00
Alexander Larsson c90f9473e1 deploy: Split the file rewriting and prefix checkout out from the exporting
We need this so that we can export an app multiple times, if you're e.g.
switching between deployed versions.
2015-03-09 17:13:04 +01:00
Alexander Larsson 957bf050bd Mount system fonts in /run/host/fonts 2015-03-06 11:26:07 +01:00
Alexander Larsson 5bfee405b1 Add metadata option to limit DRI access 2015-03-05 15:55:36 +01:00
Alexander Larsson da62eccc46 Mount /run/media if mount-host-fs
This is where things like usb sticks etc, show up, so its important to
include.
2015-03-05 11:22:16 +01:00
Alexander Larsson e2edb99f7c xdg-app-helper: Sort the command line parsing
This makes it easier to add new ones and avoid duplication
2015-03-05 10:35:18 +01:00
Alexander Larsson a6a43333f4 xdg-app-helper: Flesh out usage output 2015-03-05 10:34:52 +01:00
Alexander Larsson 86cb39d30e Run each app in a custom systemd user scope (if available) 2015-03-04 14:40:17 +01:00
Alexander Larsson c40eba6e97 Check for sys/capability.h via AC_CHECK_HEADER instead 2015-03-02 12:36:56 +01:00
Alexander Larsson c7c201faa9 Revert "Look for libcap pkg-config file for cflags to ensure we have the headers"
This breaks gnome-continuous which doesn't have a pc file for libcap.

This reverts commit 26d9596730.
2015-03-02 12:27:09 +01:00
Alexander Larsson 26d9596730 Look for libcap pkg-config file for cflags to ensure we have the headers
We don't actually link to the library though.
2015-03-02 11:55:31 +01:00
Alexander Larsson e3d5c2d801 Fix warning in add-remote if no summary.
We were always ref:ing the hashtable, so always allocate it.
2015-03-02 11:38:37 +01:00
Alexander Larsson 471cdba23e Move writable area from /var to ~/.var/app/$appid
Having /var writable is pretty weird for a desktop app, this
is typically a system location. Instead of doing this
we assume the user writes writable data into  ~/.var/app/$appid.
This means an app following this can run both as standalone or
as an xdg-app without changes.

If the app has access to the home directory, then this just works.  If
it does not, then we ensure we have this directory in the volatile
home directory and then bind mount in the real directory there.

We also pre-create config/data/cache subdirectories in this
directory and set XDG_DATA/CONFIG/CACHE_HOME to point to them, which
means apps that use these "just work".
2015-02-19 22:52:01 +01:00
Alexander Larsson 82895f5e36 xdg-app run: Make the helper command line a bit shorter
Now that we use getopt we can combine flags in the
commandline.
2015-02-19 20:57:53 +01:00
Alexander Larsson bac241d2e0 xdg-app-helper: Add bool type and use 2015-02-19 20:49:06 +01:00
Alexander Larsson 08227a2002 xdg-app-helper: Use getopt to parse args
This removes some code.
2015-02-19 20:42:42 +01:00
Alexander Larsson c8dc4d1755 xdg-app build - clean the environment
For builds, reproducability and not accidentally getting
the host environment details into the build is pretty important,
so we rebuild the entire environment, controlling exactly
what gets into it.
2015-02-19 19:52:17 +01:00
Alexander Larsson 81c3c0c586 xdg-app-helper: Minor cleanup
This splits the file contents writing to another function.
This will be needed in another place later.
2015-02-19 17:44:34 +01:00
Alexander Larsson cf2a39fe84 Use bind mounts instead of mknod
Instead of creating real device nodes we just bind mount the system
ones. This means that we require no mknod capabilities, which is good
in itself, but it also allows us to eventually run completely
unprivileged with user namespaces.
2015-02-19 17:44:34 +01:00
Alexander Larsson 6584ba71e3 Merge pull request #53 from stbergmann/master
Fix path
2015-02-17 16:58:39 +01:00
Stephan Bergmann d9fabbde86 Fix path 2015-02-17 16:54:56 +01:00
Alexander Larsson d7f186c118 build-finalize: Ensure we always create the export dir
Otherwise build-export fails to see we ran finalize
2015-02-17 16:20:33 +01:00
Alexander Larsson d8ac76d467 Revert "Add share/pixmaps to build-finish exports"
It should be easy to just move the icons to the icons supdirectory.
Lets get rid of share/pixmap...

This reverts commit 2cacc3a67a.
2015-02-13 21:30:47 +01:00
Alexander Larsson bcf2b13279 Don't double-quote command when rewriting desktop files 2015-02-13 11:45:13 +01:00
Alexander Larsson 2cacc3a67a Add share/pixmaps to build-finish exports 2015-02-13 11:45:00 +01:00
Alexander Larsson 7017710201 Apply metadata and --allow --forbid switches in xdg-app build 2015-02-13 10:57:56 +01:00
Alexander Larsson cedcd0ab2b Move allow/forbid env setup to xdg-app-run.c 2015-02-13 10:53:19 +01:00
Alexander Larsson 453423c350 Add xdg_app_run_verify_environment_keys helper 2015-02-13 10:33:36 +01:00
Alexander Larsson 884040dfcc Move run helpers from builtin-run to xdg-app-run.c file 2015-02-13 10:29:41 +01:00
Alexander Larsson 0cb23de365 export: Ensure all exported files are prefixed by the app name
All exported regular files (not directories) need to have a filename
that starts with the application name, followed by either a dot or
any character that is invalid in an app name.

For instance, given an app name of org.gnome.gedit, these filenames
are exported:
org.gnome.gedit
org.gnome.gedit.png
org.gnome.gedit.plugin1.png
org.gnome.gedit-symbolic.svg (- is not a valid character)

However, these are not exported:

org.gnome.geditor
gedit.png

This has several advantages. First of all it ensures that there are no
conflicts between unrelated applications, secondly we also only allow
applications to install dbus services and desktop ids that are the
same as the app id, or sub-services of it.
2015-02-11 14:32:45 +01:00
Alexander Larsson d9c10e5103 export: keep the original name for modified desktop/service files
Rather than keeping around a symlink to the temporary file we rename
the temporary over the original name. Also we keep all seen
files and temporary files in a hashtable so we don't accidentally
process anything twice.
2015-02-11 14:30:53 +01:00
Alexander Larsson c1a0b41a7d Ensure all exported dbus service files have the right name
We're enforcing that the dbus name and the filename has to be the same,
or we're not exporting the file.
2015-02-11 14:29:16 +01:00
Alexander Larsson 1d2baf96d8 Verify app/runtime names and branches in various operations
Whenever we create, install, update, uninstall or run apps we
verify that all app names and branch names are valid.
2015-02-11 12:39:17 +01:00
Alexander Larsson baeb666215 Add utils to validate app/runtime names and branches
There are several reasons to verify these. First of all
we use these as filename elements, so we need to sure that dangerous
things like "..", "/" etc don't appear in them.

Secondly, we want to guarantee that app names are valid dbus well
known bus names as they are used as app-ids in e.g. desktop files.

We also want to enforce the app name as prefix for exported files to
avoid conflicts. This means we disallow two-element names like
"org.gnome", and we disallow "-" in app names, so that "-" can be used
to separate the app name prefix from the rest of the filename. In
particular, this is important for icons, like
"org.gnome.app-symbolic.svg", where we want the only valid prefix to be
org.gnome.app.
2015-02-11 12:31:53 +01:00
Alexander Larsson 29ccfbea89 Copy /etc/localtime instead of making a symlink
This way we inherit timezone updates from the host at
least for the current timezone.
2015-02-10 13:12:00 +01:00
Alexander Larsson cdeeaee4a9 Never mount /root in the app 2015-02-10 10:55:58 +01:00
Alexander Larsson a3e97d256a Make /dev and /dev/dri readonly 2015-02-10 10:55:44 +01:00
Alexander Larsson 72f1bd9b07 Merge pull request #50 from matthiasclasen/run-env2
Add an --allow option to the run command
2015-02-10 09:25:08 +01:00
Alexander Larsson cd3289e0cb Merge pull request #52 from matthiasclasen/repo-title
repo-title
2015-02-10 08:53:50 +01:00
Matthias Clasen f184fbb603 Improve completion
The options of the add-remote command were not being completed.
2015-02-09 17:40:37 +01:00
Matthias Clasen 1e69e3fc42 Make add-remote use title from summary
When we add a remote, load the summary from the repository, and
use the title if there is one. This at the same time serves as
(minimal) validation of the repository url.
2015-02-09 17:18:10 +01:00
Matthias Clasen 34dda64b95 Add a --title option to repo-update
This stores a human-readable title in the additional metadata
of the repo summary. We use xa.title as the key.
2015-02-09 17:17:19 +01:00