[Buildroot] [PATCH] dhcpcd: add option to override dbdir
Luca Ceresoli
luca at lucaceresoli.net
Mon Nov 11 22:53:04 UTC 2013
Peter,
do you have a judgement about which is the best way to fix this issue?
I hope we can have this sorted out in time for 2013.11.
Arnout Vandecappelle wrote:
> Hi Luca,
>
> [@Peter: there's a request for a judgement call below]
>
> On 30/10/13 09:31, Luca Ceresoli wrote:
>> Arnout, All,
>>
>> Arnout Vandecappelle wrote:
>>> On 30/09/13 15:40, Luca Ceresoli wrote:
>>>> Signed-off-by: Luca Ceresoli <luca at lucaceresoli.net>
>>>> ---
>>>> package/dhcpcd/Config.in | 14 ++++++++++++++
>>>> package/dhcpcd/dhcpcd.mk | 1 +
>>>> 2 files changed, 15 insertions(+)
>>>>
>>>> diff --git a/package/dhcpcd/Config.in b/package/dhcpcd/Config.in
>>>> index a06a973..c144dd3 100644
>>>> --- a/package/dhcpcd/Config.in
>>>> +++ b/package/dhcpcd/Config.in
>>>> @@ -6,5 +6,19 @@ config BR2_PACKAGE_DHCPCD
>>>>
>>>> http://roy.marples.name/downloads/dhcpcd
>>>>
>>>> +if BR2_PACKAGE_DHCPCD
>>>> +
>>>> +config BR2_PACKAGE_DHCPCD_DBDIR
>>>> + string "database directory"
>>>> + default "/var/db"
>>>> + help
>>>> + By default dhcpcd stores obtained DHCP leases and other info in
>>>> + /var/db. Set this to any other directory you wish to use. This
>>>> must
>>>> + be on a read-write filesystem, otherwise dhcpcd will not work.
>>>> + For example, you may want to change this directory if /var is
>>>> on a
>>>> + read-only filesystem in your embedded system.
>>>> +
>>>> +endif
>>>
>>> Hi Luca,
>>>
>>> After discussion on the buildroot developer day, we decided that this
>>> should not be configurable. Instead it should be hard-coded to some
>>> fixed path in /run, e.g. /run/db or something else that makes sense.
>>> (Note that /run is a symlink to /var/run which is a symlink to /tmp. We
>>> should use /run, not /var/run, because that conforms to the FHS.)
>>>
>>> Since you probably use this package, can you test this and send a
>>> patch?
>>
>> While this would likely fix the problem, this is not the correct way to
>> do so, and would introduce another problem.
>>
>> According the FHS version 3.0-draft1 /run is a volatile storage, cleared
>> upon reboot. It may then be a tmpfs as well.
>>
>> However, one of the purposes for dhcpcd to store an IP lease obtained
>> from a DHCP server is to request the same address at the next reboot. So
>> it is meant to be persistent, and /var is the correct place for the lease
>> files, not /run. In fact dhcpcd by default uses /var/db, which is ok.
>
> OK, we didn't realize that.
>
>>
>> In other words, things are fine in current BR without any patch, provided
>> that the rootfs is writable.
>>
>> If the rootfs is read-only (which is not uncommon on small embedded
>> systems), dhcpcd fails trying to create the "db" dir under /var. This is
>> because in the default Buildroot skeleton /var is a regular directory,
>> not a tmpfs.
>>
>> In a system whose rootfs is read-only there is no directory in the
>> default skeleton that is both persistent and writable.
>
> Of course not, because that may not be possible.
>
>>
>> In this case I devise two possible solutions:
>> * create /var/db in system/skeleton as yet another symlink to /tmp;
>> * let any user select the directory they wish (what my patch does).
>>
>> In the first case we don't need a new config option and dhcpcd will
>> generally work. But leases won't be persistent and the cause may be not
>> so obvious to the user.
>
> But we can add to the dhcpd help text that you need to replace the
> /var/db symlink to point to a persistent location if you want persistence.
>
> But then again, adding the configure option does have the same effect,
> just a little more obvious to the user.
>
> At the Buildroot developer meeting, we also asked Peter to play a bit
> more the role of the benevolent dictator and make rulings. So here goes:
>
> Peter, do you prefer a /var/db symlink that the user should override
> in the fs overlay, or do you prefer an explicit configure option?
>
>
> If we do go for the configure option, however, the default should be
> /tmp or /tmp/db, so that at least the default works with a read-only
> rootfs.
>
>
>> In the second case anyone can point to some device-specific persistent
>> storage, thus making dhcpcd work 100% as expected.
>>
>> It may be a small read-write partition for storing user-configurable
>> data, as is already available on some embedded products. But there is no
>> way for Buildroot to know where that is going to be mounted, so we let
>> the user tell us via the config option.
>>
>> As a side-effect, the presence of a config knob makes the user aware of
>> the problem with a suitable help text.
>>
>> Actually the former change may be applied anyway as it partially fixes
>> dhcpcd and is minimally invasive. For the latter one I look forward to
>> hear your comments.
>
> Yes, if it is not configurable, then buildroot should create the
> symlink. However, I wouldn't put it in the skeleton, but instead put it
> in the INSTALL_TARGET_CMDS.
>
> Regards,
> Arnout
>
>
--
Luca
More information about the buildroot
mailing list