service(8) doesn't list dhcpd startscript

Hilko Meyer Hilko.Meyer at gmx.de
Sun Mar 6 20:36:31 UTC 2011


Doug Barton schrieb:
>On 03/04/2011 14:51, Miroslav Lachman wrote:
>> Hilko Meyer wrote:
>>>
>>> today I played a bit with service(8) and I noticed that it doesn't
>>> properly
>>> detects the isc-dhcpd-startscript. System is 7.3-RELEASE-p4. 'service
>>> -l' lists
>>> isc-dhcpd but 'service -e' doesn't lists it:
>>> | hilti at kirk:~> service -l | grep dhcp
>>> | isc-dhcpd
>>> | hilti at kirk:~> service -e | grep dhcp
>>> | hilti at kirk:~> /usr/local/etc/rc.d/isc-dhcpd rcvar
>>> | # dhcpd
>>> | dhcpd_enable=YES
>>
>> It works for me on newer version of the FreeBSD (7.4-RELEASE) and with
>> newer dhcpd (isc-dhcp41-server-4.1.2_2,1)
>>
>> ~/# service -l | grep dhcp
>> isc-dhcpd
>> isc-dhcpd6
>>
>> ~/# service -e | grep dhcp
>> /usr/local/etc/rc.d/isc-dhcpd
>> /usr/local/etc/rc.d/isc-dhcpd6
>>
>> ~/# /usr/local/etc/rc.d/isc-dhcpd rcvar
>> # dhcpd
>> dhcpd_enable=YES
>>
>> So you can compare rc scripts for those two versions or compare changes
>> in service between these two FreeBSD releases.
>
>I'm glad to hear that Miroslav was able to make it work. I looked at the 
>code and it's pretty simple, so I'm not sure why it would fail.
>
>Hilko, if you can add -x to the end of the #!/bin/sh line in 
>/usr/sbin/service it might give you more of an idea of what's going on.

Thanks for the hint. I think I found something:

hilti at kirk:~/dhcpd> script log  sh -x /usr/sbin/service -e
[snip]
+ grep -q ^rcvar /etc/rc.d/yppasswdd
+ grep ^name= /etc/rc.d/yppasswdd
+ eval name="yppasswdd"
+ name=yppasswdd
+ grep ^rcvar /etc/rc.d/yppasswdd
+ eval rcvar="nis_yppasswdd_enable"
+ rcvar=nis_yppasswdd_enable
+ checkyesno nis_yppasswdd_enable
+ grep -q ^rcvar /usr/local/etc/rc.d/isc-dhcpd
+ grep ^name= /usr/local/etc/rc.d/isc-dhcpd
+ eval name=dhcpd
+ name=dhcpd
+ grep ^rcvar /usr/local/etc/rc.d/isc-dhcpd
+ eval rcvar_chuser () rcvar_jail () rcvar_chroot () rcvar_pidnleases ()
rcvar_rooted () rcvar=${name}_enable
+ checkyesno nis_yppasswdd_enable

Seems 'grep ^rcvar /usr/local/etc/rc.d/isc-dhcpd' finds more than
expected. I added a '=' in /usr/sbin/service and changed the line to
eval `grep ^rcvar= $file`. Now it works like expected.

But there is stil one question. Why it works in 7.4-RELEASE with newer
dhcpd? 
| hilti at kirk:~/dhcpd> grep ^rcvar isc-dhcpd_*
| isc-dhcpd_3.1.in:rcvar_chuser ()
| isc-dhcpd_3.1.in:rcvar_jail ()
| isc-dhcpd_3.1.in:rcvar_chroot ()
| isc-dhcpd_3.1.in:rcvar_pidnleases ()
| isc-dhcpd_3.1.in:rcvar_rooted ()
| isc-dhcpd_3.1.in:rcvar=${name}_enable
| isc-dhcpd_4.1.in:rcvar_chuser ()
| isc-dhcpd_4.1.in:rcvar_chroot ()
| isc-dhcpd_4.1.in:rcvar_pidnleases ()
| isc-dhcpd_4.1.in:rcvar_rooted ()
| isc-dhcpd_4.1.in:rcvar=${name}_enable
In both files more than one result. And there was no change in
service(8) between 7.3 and 74. Strange...

Hilko


More information about the freebsd-stable mailing list