New version of the fakeroot patch

Florent Thoumie flz at xbsd.org
Wed Dec 16 09:49:40 UTC 2009


On Mon, Dec 14, 2009 at 3:13 PM, Baptiste Daroussin
<baptiste.daroussin at gmail.com> wrote:
> Hi all,
>
> I have updated the fakeroot patch, it now can apply on an uptodate version of
> the ports.
>
> http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/133815
>
> For information the fakeroot patch is a port of the midnightbsd's mports fakeroot
> to freebsd's ports.
>
> What it does:
> - it is optional: you can activate it globally with USE_FAKE=yes in
>  /etc/make.conf or per ports by adding USE_FAKE=yes in the ports Makefile

I don't know if this should be a port setting. I think this should be
a user setting. So, I think WITH_FAKE / WITH_FAKEROOT is a better
choice. Obviously ports not working with fakeroot would have to define
something like IGNORE_FAKEROOT, the same kind of variable we have for
MAKE_JOBS.

> - it create a fakeroot directory in the WRKDIR where all the binary are
>  installed first
>
> - then it creates a package using the plist and finding its files only in the
>  fakeroot directory
>
> - in the end it installs the created packages
>
> - it respects the DESTDIR implementation (it is not the same kind of feature nor
>  the same goal)
>
> - it does not require any modification on actual ports (except for those which
>  are already not clean) but will allow to cleanup some ports if wanted.
>
> Why this patch:
> - it prevents installing crufts thing on users systems (only what is found in
>  the plist is really installed, so the package is always clean)
>
> I now that porters should take care of not breaking the plist, but it often
> happens, helping them by a system that completly use the plist file is IMHO a
> better thing, and it prevents users from being inpacted by a lazy porter.
>
> - it allow to create tinderbox that does not need to install a ports to get the
>  package build, only build-depends ports will be installed
>
> - it allow easier handling of NOPORTDOCS, NOPORTEXAMPLES and so on, because it
>  creates the packages first using plist to know which files should be packaged,
>  the porter should only take care of one case, the case everything is
>  installed, then he adapts the plists to have or not some files depending on
>  the options the user have.
>
> This should cleanup a lot some ports, and should easier the respectness of
> some porting guidelines
>
> What could be done:
> because it generates packages first we could imagine some lint programs that
> analyse the package content to test that it respects some of the freebsd
> recommandation for packages (usefull for porters), it could help the validation
> of new/update ports submission and help preventting commiting buggy stuff.

I'm thinking files could be moved from the fakeroot directory instead
of copied, that way you could run 'find ${FAKEDIR} ! -type d' and find
out if you've missed anything.

> Limitation:
> this path (currently activable on depend) add from disk usage than the way ports
> actually works:
>
> without the patch:
> build -> copy on the filesystem
> with the path:
> build -> copy-on-fakeroot->package_building->package-installing
>
> In the future it could be improved by provinding a version of pkg_create that
> fake the package creation by directly install on FS so that could become
> build->copy-on-fakeroot->package-installing

On pointyhat, a package will be generated at the end regardless. Also,
quite a lot of tools do make a package backup before deinstalling, so
I don't see this as a major issue. If people don't like the I/O
overhead, we could use pkg_add in slave mode, it will skip the package
building phase.

> This patch is not yet complete, it should work with classical ports that use
> gmake or make and with python, I have only done that currenly as a proof of
> concept.
>
> Tell me if you think that this patch could be interesting or not

As I mentioned it before, I think it's a very valuable feature to have.

-- 
Florent Thoumie
flz at FreeBSD.org
FreeBSD Committer


More information about the freebsd-ports mailing list