[Buildroot] [PATCH] Fix dhcp symlink in target/var/lib/dhcp
Arnout Vandecappelle
arnout at mind.be
Thu Oct 6 19:22:50 UTC 2016
On 06-10-16 19:38, Jerry Van Baren wrote:
> Hi Arnout,
>
> On Wed, Oct 5, 2016 at 7:20 PM, Arnout Vandecappelle <arnout at mind.be> wrote:
>>
>>
>> On 28-09-16 18:07, Root, Build wrote:
>>> The symlink was to /tmp causing an error on the target install step:
>>> rsync: chgrp "/<path>/output/target/var/lib/dhcp" failed: Operation
>>> not permitted
>>
>> Could you explain this a little more? The install step of this package only
>> calls $(INSTALL), not rsync or 'make install' or anything like that. So how does
>> this happen?
>
> I have not dug to the bottom of this, but the issue is the DHCP
> (server, not client)
> package is creates
> /var/lib/dhcp/dhcpd.leases
> which ends up in /tmp/dhcpd.leases without the patch. With the patch it ends up
> in .../output/target/tmp/dhcpd.leases.
I forgot to explain this in my original mail: it doesn't (or shouldn't) matter
if the dhcpd.leases file is lost, because (in many situations) a tmpfs will be
mounted on /tmp at runtime so the pre-installed dhcpd.leases is lost anyway.
Moreover, the dhcp package doesn't even install this leases file. I just tested
it here: with any combination of DHCP sub-options, no leases file is installed
in output/target/tmp or output/target/var/lib/* or anywhere else.
>
> (Informed guessing here) When buildroot creates the file system image, it does a
> rsync with chgrp (and chown) to the proper owner (root.root), but that
> is not allowed
> as an unprivileged user running buildroot on the host's /tmp directory.
Actually, no, buildroot doesn't do any rsyncing. It only rsyncs the skeleton
from package/skeleton to the target directory, but that is at the beginning of
the build before anything else is done.
There is also an rsync of the BR2_ROOTFS_OVERLAY directories at the end of the
build. Aha, that is probably what happens: you have a var/lib/dhcp/dhcpd.leases
in you overlay!
>
> I'm running very stock Ubuntu 14.04.5 x86 "server" installation cross compiling
> to an ARM target.
>
> I did not have a problem with older versions of Buildroot, it was when we pulled
> our baseline forward to 2016.08 that we had the problem (previously was 2014
> timeframe).
Aha bis: the symlink logic for the dhcp package has been there since 2005, but
the --keep-dirlinks argument of the rootfs overlay's rsync command was added
this year.
>
>> Also note that we don't have such failures in the autobuilders. And anyway, I
>> thought that a failing chgrp in rsync was non-fatal?
>
> Not for me. :-/ I will look into it further. Total speculation: it may
> be a double fault
> where the chown root fails followed by a chgrp root which also fails,
> aborting the script.
My rsync 3.1.1 doesn't complain when I use the -a option and it can't preserve
owner or group.
>
> As you note, the autobuilders are not catching it, so it might be
> something in how
> my build machine is set up.
>
>>> Changing the symlink to "../../tmp" rather than "/tmp" references the
>>> target's /tmp directory rather than the build machine's /tmp directory.
>>
>> The problem is that /var/lib itself may be a symlink to somewhere else. Some
>> people need to have /var/lib in a writeable partition while /var itself is on
>> the readonly rootfs. When /var/lib is a symlink, the ../.. will be interpreted
>> relative to the target of that symlink, which may be a different number of
>> levels down from root.
>>
>> Also, since /tmp always exists on the build machine, symlinking to /tmp just works.
>
> The symlink works fine, the chgrp to root on /tmp/dhcpd.leases doesn't. :-(
So, easy solution: in your overlay, put the dhcpd.leases in /tmp where it belongs.
Regards,
Arnout
--
Arnout Vandecappelle arnout at mind be
Senior Embedded Software Architect +32-16-286500
Essensium/Mind http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint: 7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF
More information about the buildroot
mailing list