Unknown mailing list, search.

Re: git-diff-files and fakeroot

Previous thread: Re: Cancelling certain commits by Junio C Hamano on Monday, January 16, 2006 - 7:43 pm. (2 messages)

Next thread: Cogito wishlist: ability to set merge strategy by H. Peter Anvin on Monday, January 16, 2006 - 11:29 pm. (3 messages)
To: Git Mailing List <git@...>
Date: Monday, January 16, 2006 - 10:10 pm

I've been trying to track down a strange issue with building kernels
(and scripts/setlocalversion) and finally realized the problem was the
when run under fakeroot, git-diff-files thinks everything is changed
(deleted, I believe)

Oddly, running "git status" seems to correct things.

Looking at strace output, I can't see a difference that appears meaningful,

I can probably work around this, some other way, but knowing if
this is something that is fixable in git itself or not would be nice.

Thanks!

--

Ryan Anderson
sometimes Pug Majere

To: Ryan Anderson <ryan@...>
Cc: <git@...>
Date: Monday, January 16, 2006 - 10:36 pm

BTW, Ryan, I suspect this is where you try to append "-dirty" to
the version number. But I wonder why you are doing the build
under fakeroot to begin with? Wasn't the SOP "build as
yourself, install as root"?

-

To: Junio C Hamano <junkio@...>
Cc: <git@...>, <linux-kernel@...>
Date: Tuesday, January 17, 2006 - 1:27 am

That's exactly what started this search, because I was running
"make deb-pkg". (Effectively.) dpkg-buildpackage wants to think it is
running as root, either via sudo or via fakeroot. I had my build
environment switched over entirely to fakeroot, as it just seems to be a
better practice, but I've temporarily switched back to sudo.

However, your explanation has pointed out to me how I can solve this -
run "fakeroot -u" instead of "fakeroot", and I think it will be fixed.

lkml cc:ed to hopefully stick this in an archive where someone else will
find it.

--

Ryan Anderson
sometimes Pug Majere
-

To: Ryan Anderson <ryan@...>
Cc: Junio C Hamano <junkio@...>, <git@...>, <linux-kernel@...>
Date: Tuesday, January 17, 2006 - 1:59 am

You should run "make" first, then after that completes run "fakeroot
make deb-pkg". I think this is similar to what the Debian package
"kernel-package" does, except it substitutes an alternate "debian/"
directory. IIRC, it just runs "make install" as a normal user to a
staging directory, then runs "$(ROOTCMD) dpkg-deb -b [...]" to build
the package. IMHO it's somewhat of a cleaner solution, and I've used
it for several years now with no issues.

Cheers,
Kyle Moffett

--
I have yet to see any problem, however complicated, which, when you
looked at it in the right way, did not become still more complicated.
-- Poul Anderson

-

To: Kyle Moffett <mrmacman_g4@...>
Cc: Junio C Hamano <junkio@...>, <git@...>, <linux-kernel@...>
Date: Tuesday, January 17, 2006 - 2:08 am

Right "make all && fakeroot make deb-pkg" was failing, because with
CONFIG_LOCALVERSION_AUTO set, I was both getting a "-dirty" string
appended to the version, as well as something awfully close to a full
rebuild due to the version number changing, and on top of all that, the
dpkg-buildpackage would fail, as "-dirty" doesn't have a number in it
(hence why you see dfsg1 or ubuntu0 in version strings.)

I think I might take your suggestion, and fix up the builddeb script to
do the "run as root" part itself, rather than needing to do it outside.
It would make it possible to just run "make oldconfig deb-pkg" which
would make things a little bit simpler.

--

Ryan Anderson
sometimes Pug Majere

To: Ryan Anderson <ryan@...>
Cc: Junio C Hamano <junkio@...>, Kyle Moffett <mrmacman_g4@...>, <git@...>, <linux-kernel@...>
Date: Tuesday, January 17, 2006 - 2:10 pm

If we do something it must be consistent for all *-pkg targets.
So fixing up builddeb is not enough, we must fix it for rpm etc also.

Not that I have looked into what is needed, but we shall not have
inconsistent behavious between the different *-pkg targets.

Sam
-

To: Ryan Anderson <ryan@...>
Cc: <git@...>
Date: Monday, January 16, 2006 - 10:33 pm

How does fakeroot keep track of fake ownerships?

That is, I suspect:

$ date >foo
$ ls -l foo
-rw-rw-r-- 1 junio junio 29 Jan 16 18:29 foo
$ fakeroot sh -i
# ls -l foo
-rw-rw-r-- 1 root root 29 Jan 16 18:29 foo

which means that under fakeroot, stat would give file ownerships
for *my* files as if they are owned by root.

And of course .git/index records the as me and fakeroot has no
way of knowing me maps to root in that fake environment.

"git status" includes "git update-index --refresh", which reads
from the stat bits and ownerships, notices that file contents have
not changed, and writes a new index file that records these stat
bits (so git thinks they are now owned by root).

If you come out of the fakeroot environment, I am reasonably
sure that you would find all the index entries are dirty again,
for exactly the same reason. index thinks things are owned by
root, the files are owned by you, so without looking at file
contents, it says "these things might have changed".

-

Previous thread: Re: Cancelling certain commits by Junio C Hamano on Monday, January 16, 2006 - 7:43 pm. (2 messages)

Next thread: Cogito wishlist: ability to set merge strategy by H. Peter Anvin on Monday, January 16, 2006 - 11:29 pm. (3 messages)