Editing dhcpd.conf without corrupting leases
Darren
perl-list at network1.net
Mon Apr 13 18:37:09 UTC 2009
If using the process outlined below, I would check to make sure that /
path/to/leases/file with a ~ (ie: the backup file) exists before I
removed the original. If not, your going to have trouble with leases
that are assigned but unknown. Duplicate IPs would be the result of
that. This could be a very bad problem depending on your lease length.
Like so:
#!/bin/bash
until dhcpd -T -t ; do
sleep 1
done
/etc/init.d/dhcpd stop
if ! dhcpd -T -t ; then
if -e /path/to/leases file~; then
rm /path/to/leases file
fi
fi
/etc/init.d/dhcpd start
On Apr 13, 2009, at 1:28 PM, Chris Buxton wrote:
> On Apr 13, 2009, at 10:12 AM, Mr. Jan Walter wrote:
>> It's also not clear from one paragraph what you're really doing, so
>> don't get huffy when others' assumptions don't correspond to your
>> reality. Really - sorry for trying to help.
>
> Sorry to break into your conversation here, but yes, it was clear.
>
>> There isn't any locking done on the leases or conf file by dhcpd
>> itself. What's most likely happening (without me reading through
>> all that source) is that if your web app's write of the config file
>> is not complete, while your cron is sending the SIGHUP to dhcpd,
>> some internal check fails and the leases file is considered corrupt.
>
> You've misread the original post yet again. The web app doesn't
> touch the .conf file, the cron job does. And then, when it's
> finished, it might restart dhcpd. This part is working fine.
>
> The problem is the lease database. The OP thinks that perhaps dhcpd
> gets interrupted while writing out the lease database, thereby
> corrupting it. But since dhcpd doesn't lock the file in any way,
> there's no way to test for this.
>
> Adding a test step (dhcpd -T -t) will probably help, but it still
> leaves a small window between that test and the subsequent SIGTERM.
>
> Ideally, the OMAPI protocol would be extended to have a 'reload'
> command. Lacking that, I don't see a perfect solution to the
> problem. The best I can think of is:
> _________________________
>
> #!/bin/bash
> until dhcpd -T -t ; do
> sleep 1
> done
> /etc/init.d/dhcpd stop
> if ! dhcpd -T -t ; then
> rm /path/to/leases file
> fi
> /etc/init.d/dhcpd start
> _________________________
>
> Chris Buxton
> Professional Services
> Men & Mice
>
> _______________________________________________
> dhcp-users mailing list
> dhcp-users at lists.isc.org
> https://lists.isc.org/mailman/listinfo/dhcp-users
>
More information about the dhcp-users
mailing list