Commit Graph

789 Commits

Author SHA1 Message Date
Alexander Larsson
69d7474bcd Don't lock the system repo when pulling to a child repo
This causes permission denied when installing to the system
repo using the helper.
2017-09-26 23:24:18 +02:00
Alexander Larsson
a265436574 run: Fix exporting the homedir if also exporting host
The FAKE_MODE_DIR support did not work correctly because of
a MAX() with a fallback value of 0, which is greater than
FAKE_MODE_DIR.
2017-09-26 20:12:19 +02:00
Alexander Larsson
b35177e4bf appstream update: Don't skip all arches if one is unchanged
Move skip_commit from a function global to a per-loop variable so
that it is reset for each architecture.
2017-09-26 16:34:30 +02:00
Alexander Larsson
c3cfc4aa78 Remove unused variables 2017-09-26 11:58:44 +02:00
Alexander Larsson
557803309b Disable min-free-space-percent by default
To many people are running into issues with this in the wild. We now
set this to zero by default. You can still manually override this.
2017-09-25 16:25:20 +02:00
Alexander Larsson
08aef072c9 Change how exposing symlinks are handled, allowing $HOME to be a symlink
We used to only expose symlinks if the path to one was explicitly exposed,
like --filesystem=/symlink, but if you did say --filesystem=/symlink/dir, then
we would make /symlink be a regular directory in the sandbox tmpfs.

This means all exports are fully resolved, which allows use to remove the
workaround for symlinks that we had with sorting by "level".

We also add a FAKE_MODE_DIR, which is used to ensure the homedir is there,
created on tmpfs if needed only, while handling symlinks correctly.

This means that flatpak works well even if $HOME is on a symlink.
2017-09-25 14:30:03 +02:00
Alexander Larsson
f1df5cb1d9 run: Fix some symlink handling issues
If the target of a direct bind, such as $home/.var/app/$appid/ is
a symlink, and the symlink contains absolute pathnames, then they
will not resolve correctly in the bwrap setup code due to the
fact that the final root is on /newroot, not /, so we resolve
the target paths before we call bwrap.
2017-09-25 14:08:19 +02:00
Alexander Larsson
5ca82643d2 flatpak-run: Correctly handle symlinks in flatpak_exports_path_is_visible
When we're resolving a symlink to see if the destination is visible, then
we have to actually append the rest of the path to look at the final
target, not just the intermediate symlinked directory.
2017-09-25 14:05:52 +02:00
Alexander Larsson
6d5beff5d3 Don't allow manual exports of /dev. These are handled by --dev= 2017-09-25 14:03:56 +02:00
Alexander Larsson
ac5f17203f Handle ~/.local/share/flatpak being a symlink
When we hide a directory like that and it is a symlink we need
to hide the symlink target. Additionally, when we're checking
whether we need to mount the tmpfs we need to check that the
target is an actual dir, rather than a symlink to a dir.

Fixes https://github.com/flatpak/flatpak/issues/1032
2017-09-25 11:05:32 +02:00
Alexander Larsson
c48d8f427f Add a repo-lock that protects against object removal
This is taken in exclusive mode whenever we prune the repo. Anything
that is not protected against object disappearing from the repo can
take the lock in a shared mode to avoid running at the same
time as a prune operation.

The two operations the are problematic in this respect is
Pull:
 * During the pull we see that some object we require is already available
   and doesn't need downloading. We can't have it be removed before we
   commit the transaction.
 * During the transaction commit we're moving the object to the
   repo, and they risk being pruned as unreachable until we have updated
   the ref.
Deploy:
 * Once we start checking out a particular ref we assume all the object
   from it is reachable. If the ref is updated in parallel some object
   can become unreachable and removed.

So, we take shared locks in these operations.

In the prune operation we take the block non-blocking, and skip
the prune entirely if some other operation is outstanding, because
we don't want to block a long time, and its likely that due to the other
operation we will run prune shortly anyway.

Note: Nothing protects the system-helper case when we download to a separate
repo. However, if there is a race we will get an error when importing this
to the system repo, so we'll never end up in an inconsistent state.
2017-09-22 16:35:18 +02:00
Alexander Larsson
98d3a58129 Update to latest libglnx and update tmpfile use for api change 2017-09-22 12:38:10 +02:00
Alexander Larsson
440389bc8e Add locale-subset property of extensions to match *.Locale behaviour
This way other types of extensions can also be subset by locale.
For instance, documentation.
2017-09-21 16:39:53 +02:00
Alexander Larsson
3e86ee750b run: Ensure the font cache dirs are never writable
Otherwise, if the host dirs don't exist we could end
up with a writable non-persistent directory where fontconfig
writes its caches.
2017-09-20 17:36:03 +02:00
Sam Spilsbury
e72d4b8172 dir: Factor out find_ref_for_refs_set 2017-09-20 09:07:18 +02:00
Sam Spilsbury
7be94770e3 builtins: Correctly support --no-pull option in install command
Previously we would still try to look up the remote information
to get the correct ref, this might not be supported in a case where
the user does not have an internet connection at the time that
applications are to be installed from the local repository.
2017-09-20 09:07:18 +02:00
Sam Spilsbury
0802d169bd dir: Add flatpak_dir_find_local_ref
Same thing as flatpak_dir_find_remote_ref except that it operates
on the local repo instead of the remote one.
2017-09-20 09:07:18 +02:00
Alexander Larsson
07d62fb86e generate_appstream: Add debug output when skipping commit
This might help us debug a weird behaviour on flathub where
it was never updating the appstream.
2017-09-19 16:34:26 +02:00
Alexander Larsson
66df733814 Expose fontconfig caches as well as fonts
This is the first step in increasing the startup performance for
font use in flatpak. Right now every app has its own cache
for the system font dirs, which means they must be fully regenerated
the first time the app starts.

With this we now expose the host system and per-use fontconfig caches
in the sandbox (read-only). This allows the sandbox to re-use caches
from the host, if the runtime fontconfig configuration is correct.

Unfortunately, this doesn't currently work, because the font caches
are looked up based on absolute paths to the font directories and they
are different in the host and the sandbox. There is some work in
progress to fix this in fontconfig here:
 https://bugs.freedesktop.org/show_bug.cgi?id=101889
2017-09-19 12:39:35 +02:00
Alexander Larsson
7eece97d3c build: Add --with-appdir
If specified, this exposes the ~/.var/app/$appid to the build
sandbox. Useful when testing uninstalled builds.
2017-09-19 11:52:27 +02:00
Philip Withnall
2faffecc42 common/utils: Fix is_number("") to return FALSE
Previously, it was possible to enter ‘ ’ (a space) at a number prompt,
and it would be stripped, passed to is_number() (which would erroneously
return TRUE), then passed to strtol() and the return value used
unconditionally.

Fix that by fixing is_number() to return FALSE for the empty string.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2017-09-18 15:36:24 +02:00
Alexander Larsson
2d0ceef446 flatpak_installed_ref_load_metadata: Find correct deploy directory
We're scoping the deploy directory by the subpaths these days, so
we need to take that into account when finding the metadata file.

Fixes https://github.com/flatpak/flatpak/issues/1014
2017-09-15 16:02:50 +02:00
Alexander Larsson
75c2db1a73 Fix some leaks
g_variant_dict_end() returns a floating reference, we have to
sink it before using it with a g_autoptr.
2017-09-14 13:07:12 +02:00
Alexander Larsson
40126c3e6f Fix crash when installing extra-data
We pass FLATPAK_RUN_FLAG_NO_A11Y_BUS_PROXY when running the
sandboxed apply_extra_data script, because otherwise we run into
a crash due to the lack of an .flatpak-info file (and also, because
it is not needed).
2017-09-14 08:55:30 +02:00
Alexander Larsson
1ee74fc5ea Expose host icons readonly in sandbox
Icons are really only a bunch of pngs, and the icon theme specification
has been stable since forever and never broke ABI. So, exposing the
host fonts should be pretty safe, comparable to the fonts that we
already expose.

This ends up being kind of important since a lot of things pick up the
icon theme from the host. In particular, it means that libXcursor can pick up
the correct cursor icons for the current cursor theme.
2017-09-13 14:54:49 +02:00
Alexander Larsson
4e97018bc6 Properly check the tmp dir mode
This was using a boolean && instead of a bitwise mask. Reported
by covertity.
2017-09-13 12:11:51 +02:00
Alexander Larsson
0b1e45c47f Add comment about why we're allowing xa.ref discrepancies sometimes
See https://github.com/flatpak/flatpak/pull/1013 for discussion.
2017-09-13 11:56:59 +02:00
Cosimo Cecchi
643f9d6e14 dir: relax requirements around xa.ref matching deployed commit
In case the summary file is GPG-signed, we already have other better
ways of verifying expectations around the installed ref.
If the deployed branch does not match xa.ref, simply warn instead of
aborting.

Based on a patch by Dan Nicholson <nicholson@endlessm.com>
2017-09-13 11:45:00 +02:00
Matthew Leeds
037a13cde0 completion: Make filename completions smarter
Many flatpak commands only work on *.flatpak or *.flatpakref files, so
the bash auto completion showing every file is distracting and
unnecessary. This commit makes flatpak only show relevant files when
possible by using the "-G globpattern" compgen option.
2017-09-12 16:14:43 +02:00
Jelle van der Waa
68ad3c84c1 Fix segfault on flatpak update
When ret is NULL object_path is filled with garbage and causes a
segfault g_dbus_proxy_new_for_bus_sync.
2017-09-12 16:12:05 +02:00
Alexander Larsson
2882897474 Fix Unknown argument --none=* errors from dbus proxy
There was a hardcoded value for the dbus policy enum values in the
code that caused problems with the new filtered policy.

Fixes https://github.com/flatpak/flatpak/issues/990
2017-09-04 08:37:08 +02:00
Alexander Larsson
de4b6840d2 Initial work on accessiblity support
This creates a dbus proxy for the a11y bus and sets AT_SPI_BUS_ADDRESS in the
environment to the filtered bus.

The app is only allowed to send a very limited amount of messages to
org.a11y.atspi.Registry on the bus, and nothing else.

This requires a patch to at-spi2-core to read the address from
AT_SPI_BUS_ADDRESS:
     https://github.com/flatpak/freedesktop-sdk-images/blob/1.6/at-spi2-core-address-env-var.patch

Fixes https://github.com/flatpak/flatpak/issues/79
2017-09-01 15:36:29 +02:00
Alexander Larsson
f9eebd7a54 run: Share the same dbus proxy for session and system bus 2017-08-31 16:55:46 +02:00
Alexander Larsson
fef8743f26 run: Always create a fontconfig cache dir in the app dir
Otherwise fontconfig falls back to a shared ~/.fontconfig dir
which means caches are not per-app, and is not necessarily accessible.
2017-08-31 16:10:08 +02:00
Alexander Larsson
0de2978a4d run: Allow calling personality with the current personality
Ideally we should also allow 0xffffffff, which is "read the current state",
but that doesn't seem possible with the current libseccomp.
2017-08-30 15:37:55 +02:00
Alexander Larsson
8f5e47fda5 run: Always set personality (to clear weird states) 2017-08-30 15:37:32 +02:00
Alexander Larsson
8b5aebafb9 Put system child repos in /var/tmp
As discussed in https://github.com/flatpak/flatpak/issues/975, it is
better to have the temporary repos for installing into the system repo
outside the home directory. This helps in the case when the home
directory is on a different filesystem. In particular it is more
likely to be on the same partition as the system repo in /var/lib.

There are multiple advantages if the two repos are on the same filesystem:
 * Less chance of filling up the space on a filesystem that is not
   the final target.
 * It is possible to use fs operations like reflink or copy_file_range to
   optimize the copies from the temporary repo to the system repo.
 * The home directory is more often on NFS or other weird filesystem
   type.
2017-08-30 14:07:54 +02:00
Alexander Larsson
0da103748a flatpakref: Add new SuggestRemoteName key support
If a flatpakref has this set, for instance:

 SuggestRemoteName=gnome-apps

Then flatpak install will ask if you want to configure
this as a "real" remote, rather than an origin remote (which
will only install that app).

This is useful when creating flatpakref files for remotes
that have multiple applications in them, such as e.g. flathub
or the gnome nightly builds. However, it should not be
set of one-application repositories.
2017-08-28 18:17:58 +02:00
Alexander Larsson
4178fbdc09 update-repo: Ensure we commit the appstream data with canonical permissions 2017-08-28 11:39:17 +02:00
Alexander Larsson
bad89eddeb Clean up the AccountService call by using g_autoptr 2017-08-25 14:54:45 +02:00
Alexander Larsson
2a661fd448 Fix regression in --devel
Commit 489bfddfb mistakenly ended a line with a comma instead of a semicolon which
caused --devel to break.
2017-08-25 14:44:57 +02:00
LinXuan Jiang
4fc222ac3b Get language list from AccountsService's dbus (#973)
* Get language list from AccountsService's dbus

Fixes issue #950

When xa.languages is not set in repo config, system installs will
get language list from AccountsService's dbus.
2017-08-25 14:25:09 +02:00
Alexander Larsson
706d13895e Inherit min-percent-free-space from system repo into child repo
This way you can at least work around the free space check in *some*
way.
See https://github.com/flatpak/flatpak/issues/975
2017-08-23 11:13:45 +02:00
Alexander Larsson
0305628758 common: Fix up error reporting for local extra data
Report the actual error message if we failed to read the file.
2017-08-21 10:40:20 +02:00
Manuel Quiñones
9e38de1556 extra-data: Support reading from local directory
Lookup extra-data files as
~/.local/share/flatpak/extra-data/SHA256/FILENAME, Similar to files
downloaded in the .flatpak-builder directory.

For now, if a corresponding file exists, assume it's the full download
and read bytes from it.  Then proceed to do the same checks as for the
bytes downloaded by Soup.

In the future this directory could be used to support resumed downloads
by storing partial downloads.
2017-08-21 10:33:15 +02:00
Alexander Larsson
18451644ff Update to latest libglnx (and fix some callers) 2017-08-18 15:34:29 +02:00
Philip Withnall
154187f4f1 common/dir: Refactor handling for pull options
Factor out the pull options which are common to the collection-based and
non-collection-based code paths. This should make the code a little
easier to read.

This introduces no functional changes.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2017-08-18 14:23:03 +02:00
Philip Withnall
bf537b3034 common: Ensure ostree-metadata pulls are cached
When the summary file is updated, it’s kept in a local cache, so that
parts of flatpak can refresh it at will without network impact. We need
the same for the ostree-metadata ref, which stores the repository’s
metadata when collection IDs and P2P are used.

Implement that by comparing the checksum of the ostree-metadata ref from
the summary file and from the local repository. If they differ, it’s
almost certainly going to be because the summary file is advertising a
more up-to-date ostree-metadata ref, which we should pull. If they don’t
differ, there’s no need to try and update the ref. Therefore, this
chains off the caching of the summary file.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2017-08-18 14:23:03 +02:00
Philip Withnall
dd63bdbd61 common: Prevent pulling ostree-metadata unless gpg-verify is true
Add a sanity check and error message which prevents pulling the
ostree-metadata ref (the repository metadata) unless GPG verification is
enabled, as it needs to be signed to be trusted.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2017-08-18 14:23:03 +02:00
Philip Withnall
0bbf8f3d21 common: Clarify some error and debug messages in flatpak-dir.c
Signed-off-by: Philip Withnall <withnall@endlessm.com>
2017-08-18 14:23:03 +02:00