From: Kyle Moffett <mrmacman_g4@mac.com>
To: "Santi Béjar" <sbejar@gmail.com>, "Jeff Garzik" <jeff@garzik.org>
Cc: git@vger.kernel.org
Subject: Re: Using GIT to store /etc (Or: How to make GIT store all file permission bits)
Date: Sun, 10 Dec 2006 12:46:51 -0500 [thread overview]
Message-ID: <28E2300C-8F7A-406F-8FDA-F8786AE95B40@mac.com> (raw)
In-Reply-To: <8aa486160612100706y92bc722n93374e394fc58005@mail.gmail.com>
> On 12/10/06, Kyle Moffett <mrmacman_g4@mac.com> wrote:
>> I've recently become somewhat interested in the idea of using GIT
>> to store the contents of various folders in /etc. However after a
>> bit of playing with this, I discovered that GIT doesn't actually
>> preserve all permission bits since that would cause problems with
>> the more traditional software development model. I'm curious if
>> anyone has done this before; and if so, how they went about
>> handling the permissions and ownership issues.
>>
>> I spent a little time looking over how GIT stores and compares
>> permission bits; trying to figure out if it's possible to patch in
>> a new configuration variable or two; say "preserve_all_perms" and
>> "preserve_owner", or maybe even "save_acls". It looks like
>> standard permission preservation is fairly basic; you would just
>> need to patch a few routines which alter the permissions read in
>> from disk or compare them with ones from the database. On the
>> other hand, it would appear that preserving ownership or full
>> POSIX ACLs might be a bit of a challenge.
On Dec 10, 2006, at 10:06:14, Santi Béjar wrote:
> I have not used it, but you could try:
>
> http://www.isisetup.ch/
>
> that uses git as a backend.
Wow, umm, that's actually really interesting for me, given that I'm
most interested in these sorts of things on Debian. I can't find
much documentation on their site; the tools look vaguely immature but
I haven't really had much time to look at it yet.
On Dec 10, 2006, at 09:49:50, Jeff Garzik wrote:
> It's a great idea, something I would like to do, and something I've
> suggested before. You could dig through the mailing list archives,
> if you're motivated.
I have been digging through the archives; I was just holding out hope
that somebody else on the list had already halfway beat me to the
punch. Guess not :-D
> I actively use git to version, store and distribute an exim mail
> configuration across six servers. So far my solution has been a
> 'fix perms' script, or using the file perm checking capabilities of
> cfengine.
>
> But it would be a lot better if git natively cared about ownership
> and permissions (presumably via an option).
I was thinking about a standard config option in the GIT config file,
that way users could have a personal default and repositories could
specify it locally.
I started tinkering but quickly discovered that permissions handling
in general in GIT seems to be a mess; there's about 4 different tiers
where permissions data is manipulated in various formats. Some
places use network-endian 16-bit values, there's a couple functions
which do different truncations to 644 or 755 format. There are 2
functions which canonicalize the file mode based on symlink or
directory status, each in subtly different ways.
I'm slowly sorting through things but if I could get a few pointers
from someone intimately familiar with the code that would be most
appreciated: I'd like to try to add new entries to tree objects
which older versions of GIT would ignore but which newer versions of
GIT would use to store ACL or extended-attribute data.
The simplest solution which admittedly breaks the ability of older
GITs to read the data from a file with attributes (ignoring the ext-
attrs themselves) is to create a new "file-with-extended-attributes"
object which contains a binary concatenation (with length bytes and
attribute names and such) of the file and its extended attributes.
That breaks the old GIT assumption that permission and security data
is part of the directory not the file, but it's more in-line with the
way extended attributes are attached to the inodes in the filesystem
(although that doesn't really matter IMO).
Alternatively I might be able to add a new entry to each tree object
with invalid extended file mods bits (IE: Neither a directory, a
file, nor a symlink), or perhaps an entry with an empty name, which
points to a new "extended attribute table". That table could either
map from (entry, attribute) => (data) or from (entry) =>
((attribute,data),(attribute,data),[...]), depending on which would
be more efficient. It's essential that the overhead for non-ext-attr
repositories is O(1) and ideally the overhead for a bunch of files
with the same ext-attr is O(size-of-ext-attr) + O(number-of-files-
with-that-attr), although that may vary depending on implementation.
Advice, opinions, problems, and "this-has-no-chance-of-ever-even-
remotely-working" are all useful and welcome!
Cheers,
Kyle Moffett
next prev parent reply other threads:[~2006-12-10 17:47 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-10 13:40 Using GIT to store /etc (Or: How to make GIT store all file permission bits) Kyle Moffett
2006-12-10 14:49 ` Jeff Garzik
2006-12-10 15:30 ` Jakub Narebski
2006-12-10 18:10 ` Kyle Moffett
2006-12-10 18:18 ` Jakub Narebski
2006-12-10 18:26 ` Jakub Narebski
2006-12-10 18:35 ` Kyle Moffett
2006-12-11 10:39 ` Andreas Ericsson
2006-12-11 10:55 ` Jeff Garzik
2006-12-11 12:13 ` Josef Weidendorfer
2006-12-11 13:33 ` Johannes Schindelin
2006-12-11 15:07 ` Josef Weidendorfer
2006-12-10 15:06 ` Santi Béjar
2006-12-10 17:46 ` Kyle Moffett [this message]
2006-12-10 18:10 ` Jakub Narebski
2007-01-10 1:39 ` David Lang
2007-01-10 2:30 ` Shawn O. Pearce
2007-01-10 18:34 ` David Lang
2007-01-12 0:55 ` Shawn O. Pearce
2006-12-11 10:50 ` Nikolai Weibull
2006-12-12 3:45 ` Daniel Barkalow
2006-12-12 13:49 ` Kyle Moffett
2006-12-12 15:53 ` Andy Parkins
2006-12-12 22:49 ` Using git as a general backup mechanism (was Re: Using GIT to store /etc) Steven Grimm
2006-12-12 22:57 ` Johannes Schindelin
2006-12-12 23:06 ` Steven Grimm
2006-12-13 0:01 ` Johannes Schindelin
2006-12-12 23:15 ` Martin Langhoff
2006-12-12 23:23 ` Martin Langhoff
2006-12-12 23:43 ` Using git as a general backup mechanism Junio C Hamano
2006-12-14 23:33 ` Steven Grimm
2006-12-15 0:33 ` Junio C Hamano
2006-12-13 18:10 ` Using GIT to store /etc (Or: How to make GIT store all file permission bits) Daniel Barkalow
2006-12-14 5:06 ` Chris Riddoch
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=28E2300C-8F7A-406F-8FDA-F8786AE95B40@mac.com \
--to=mrmacman_g4@mac.com \
--cc=git@vger.kernel.org \
--cc=jeff@garzik.org \
--cc=sbejar@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).