Support for "bare-user" repo format
This format is pretty much the same as the "bare" format, except the file ownership and xattrs is not stored in the actual filesystem object, but rather on the side in a user xattr. This means two things: 1) An unprivileged user can store such a repo independent of the types of files in it or their xattrs. And you can later (as root) reconstruct the real filesystem tree with ownership. Although you can't do that using hardlink-sharing. This also means ostree fsck does a full verification. 2) Such a repository can be checked out with user-mode (checkout -U) as an unprivileged user using hardlinks for space sharing. Additionally, symlinks are stored as regular files (with the content being the symlink target) because user xattrs are not supported on symlinks. We know at checkout time if the file is a symlink because the original st_mode is stored in the xattr metadata. https://bugzilla.gnome.org/show_bug.cgi?id=741125
This commit is contained in:
1 parent
26a47b9cca
commit
47c612e5a0
4 files changed
+210
-21
No files matched your search
@@ -93,6 +93,22 @@ typedef enum {
|
||||
#define OSTREE_DIRMETA_GVARIANT_STRING "(uuua(ayay))"
|
||||
#define OSTREE_DIRMETA_GVARIANT_FORMAT G_VARIANT_TYPE (OSTREE_DIRMETA_GVARIANT_STRING)
|
||||
|
||||
/**
|
||||
* OSTREE_FILEMETA_GVARIANT_FORMAT:
|
||||
*
|
||||
* This is not a regular object type, but used as an xattr on a .file object
|
||||
* in bare-user repositories. This allows us to store metadata information that we
|
||||
* can't store in the real filesystem but we can still use a regular .file object
|
||||
* that we can hardlink to in the case of a user-mode checkout.
|
||||
*
|
||||
* u - uid
|
||||
* u - gid
|
||||
* u - mode
|
||||
* a(ayay) - xattrs
|
||||
*/
|
||||
#define OSTREE_FILEMETA_GVARIANT_STRING "(uuua(ayay))"
|
||||
#define OSTREE_FILEMETA_GVARIANT_FORMAT G_VARIANT_TYPE (OSTREE_FILEMETA_GVARIANT_STRING)
|
||||
|
||||
/**
|
||||
* OSTREE_TREE_GVARIANT_FORMAT:
|
||||
*
|
||||
@@ -130,13 +146,15 @@ typedef enum {
|
||||
* OstreeRepoMode:
|
||||
* @OSTREE_REPO_MODE_BARE: Files are stored as themselves; can only be written as root
|
||||
* @OSTREE_REPO_MODE_ARCHIVE_Z2: Files are compressed, should be owned by non-root. Can be served via HTTP
|
||||
* @OSTREE_REPO_MODE_BARE_USER: Files are stored as themselves, except ownership; can be written by user
|
||||
*
|
||||
* See the documentation of #OstreeRepo for more information about the
|
||||
* possible modes.
|
||||
*/
|
||||
typedef enum {
|
||||
OSTREE_REPO_MODE_BARE,
|
||||
OSTREE_REPO_MODE_ARCHIVE_Z2
|
||||
OSTREE_REPO_MODE_ARCHIVE_Z2,
|
||||
OSTREE_REPO_MODE_BARE_USER
|
||||
} OstreeRepoMode;
|
||||
|
||||
const GVariantType *ostree_metadata_variant_type (OstreeObjectType objtype);
|
||||
|
||||
Reference in new issue
Block a user