On the other hand, the corrections makes the thing fail so I went back to his version which at least works even if it is flawed. BAH !!!!
On Fri, Oct 2, 2009 at 2:59 PM, Dazed_75 <[email protected]> wrote: > Thanks for the quick response! > > > On Fri, Oct 2, 2009 at 2:57 PM, Eric Shubert <[email protected]> wrote: > >> Dazed_75 wrote: >> > >> > >> > On Fri, Oct 2, 2009 at 10:21 AM, Eric Shubert >> > <[email protected] >> > <mailto:[email protected]>> wrote: >> > >> > Dazed_75 wrote: >> > > RESOLVED !!! >> > > >> > > Ryan had said: >> > > >> > > I found this >> > https://bugs.launchpad.net/ubuntu/+source/dhcp3/+bug/392826 >> > > via a quick google search so the answer to your question about >> > > reordering the script doesn't seem like it would work. >> > > >> > > But I had been looking mostly at the discussion of ordering the >> > elements >> > > in /etc/rc?.d/ which I tried several variations for. When I >> > re-read it >> > > and noticed the script attached, it seemed a reasonable work >> around. >> > > >> > > Jacob Nevins has said: >> > > >> > > I'm also running into this. >> > > >> > > I've bodged around it by putting the attached script in >> > > /etc/network/if-up.d/dhcp3-server . I don't claim it's the best >> > > solution, or that it should be included in the package, but it >> > works for >> > > my situation (where I have a single interface "eth0" explicitly >> > listed >> > > in /etc/default/dhcp3-server), so it might be a useful workaround >> for >> > > others. >> > > >> > > The script was: >> > > >> > > #! /bin/sh >> > > # Kick DHCP server when interface comes up (for Ubuntu, probably >> > Debian too) >> > > >> > > # Workaround for >> > <https://bugs.launchpad.net/ubuntu/+source/dhcp3/+bug/392826> >> > > # Bugs: >> > > # - Only works when interfaces for dhcpd are explicitly listed. >> > > >> > > >> > > DHCP_IF=/etc/default/dhcp3-server >> > > DHCP_INIT=/etc/init.d/dhcp3-server >> > > >> > > [ -f "$DHCP_IF" -a -f "$DHCP_INIT" ] || exit 0 >> > > >> > > . "$DHCP_IF" >> > > >> > > if [ "x$INTERFACES" = x ]; then >> > > >> > > # Don't know which interfaces it manages, always restart >> > > restart_dhcp=1 >> > > else >> > > restart_dhcp=0 >> > > for iface in "$INTERFACES"; do >> > > if [ "$iface" = "$IFACE" ]; then >> > > >> > > restart_dhcp=1 >> > > fi >> > > done >> > > fi >> > > >> > > if [ "$restart_dhcp" = "1" ]; then >> > > "$DHCP_INIT" restart >> > > fi >> > > >> > > >> > > It seemed reasonable to try and it worked. Now there is no need >> to >> > > actually log in and run /etc/init.d/dhcp3-server start in order >> > to get >> > > the DHCO server running. Oh, BTW, he was wrong about needing to >> name >> > > the interface to use in /etc/default/dhcp3-server. >> > > >> > > -- >> > > Dazed_75 a.k.a. Larry >> > > >> > > The spirit of resistance to government is so valuable on certain >> > > occasions, that I wish it always to be kept alive. >> > > - Thomas Jefferson >> > > >> > > >> > While that script appears to work, I don't believe it will work as >> > intended. Long story short, [ "" = "" ] is always true, as = is >> > assignment. The tests should be [ "" == "" ] . Substitute >> appropriately, >> > and the rest appears ok. >> > >> > -- >> > -Eric 'shubes' >> > >> > I see what you mean. It didn't really try to read the code since it has >> > been a VERY long time since I write any shell code. Glad I did not >> > since just trying it worked and might I not have tried it had I caught >> > the ambiguity ... err, poor code. I wonder if you could assist me by >> > carefully reading the following where I have commented the code and >> > changed it, or not, according to my understanding? Tell me where I am >> > wrong before I send him corrections. >> > >> > #! /bin/sh >> > # Kick DHCP server when interface comes up (for Ubuntu, probably Debian >> too) >> > # Workaround for < >> https://bugs.launchpad.net/ubuntu/+source/dhcp3/+bug/392826> >> > >> > # Bugs: >> > # - Only works when interfaces for dhcpd are explicitly listed. >> > >> > # Dazed_75: If either of these two references are not present as >> > # regular files, exit with a return code of 0 >> > >> > DHCP_IF=/etc/default/dhcp3-server >> > >> > DHCP_INIT=/etc/init.d/dhcp3-server >> > >> > [ -f "$DHCP_IF" -a -f "$DHCP_INIT" ] || exit 0 >> > >> > # Dazed_75: Otherwise source the default configuration file to set the >> > # variable $INTERFACES (which happens to be a null string in my system >> > >> > # and never changes >> > >> > . "$DHCP_IF" >> > >> > # Dazed_75: The following should use "==" to test if $INTERFACES is null >> > # rather than assigning x to "x$INTERFACES" which I am not even sure >> what >> > >> > # that means though I suspect that in my system, it assigns the value x >> > # to a variable named $x since $INTERFACES is null for my system. >> > # Due to the assignment, the if condition is always true so the variable >> > >> > # $restart_dhcp is always set to 1 and the else condition is never used. >> > >> > if [ "x$INTERFACES" = x ]; then >> > # Don't know which interfaces it manages, always restart >> > restart_dhcp=1 >> > else >> > >> > >> > # Dazed_75: The else condition is meant to be used if >> /etc/default/dhcp3-server >> > # when sourced above, sets $INTERFACES to a string value containing >> one or more >> > # interface names such as "eth0 eth2". >> > >> > # It first sets $restart_dhcp to 0 (FALSE) and then iterates for >> each "word/name" >> > # in $INTERFACES and should be using "==" to test if the current >> word matches a >> > # variable named $IFACE which I can find to reference to anywhere. >> The intent >> > >> > # would be to set $restart_dhcp to 1 (TRUE) if ANY of the words in >> $INTERFACES >> > # matched the value of $IFACE, but the assignment wrongly ensures >> the value is >> > # always set to TRUE >> > >> > restart_dhcp=0 >> > >> > for iface in "$INTERFACES"; do >> > if [ "$iface" = "$IFACE" ]; then >> > restart_dhcp=1 >> > fi >> > done >> > fi >> > >> > # Dazed_75: Hence the only condition under which the following code is >> not reached >> > >> > # is if one or both of the listed config files is not present or not a >> regular file. >> > # Further, under all conditions, when this code is reached, the >> $restart_dhcp has >> > # been set to 1 (TRUE) due to the assignment operator being used. >> > >> > # >> > # Hence, any condition that causes this script to execute will cause >> > # /etc/init.d/dhcp3-server to be executed with an argument of "restart". >> Further, >> > # I find nothing in that script which uses a variable named $IFACE or >> $iface which >> > >> > # may just be something I do not see. >> > >> > if [ "$restart_dhcp" = "1" ]; then >> > "$DHCP_INIT" restart >> > fi >> > >> > # Dazed_75: In closing, the assignment operators inside the conditionals >> could >> > >> > # and should be changed to conditional "==". But, in either case, as >> long as >> > # /etc/default/dhcp3-server is not altered to set the contents of >> $INTERFACES, >> > # this script will always cause "/etc/init.d/dhcp3-server restart" to be >> executed. >> > >> > >> >> FWIW, I prefer seeing -z to test if a variable is null ( [ -z "$VAR" ] >> rather than [ x$VAR == x ] ), but that's just my preference. Works the >> same either way. >> >> I'm guessing that $IFACE could be set when $DHCP_IF is sourced. >> >> I think you pretty much nailed it other than that. >> >> -- >> -Eric 'shubes' >> >> _______________________________________________ >> PLUG-applications mailing list >> [email protected] >> http://lists.plug.phoenix.az.us/cgi-bin/mailman/listinfo/plug-applications >> >> Reminder: All replies will go back to this mailing list. If you wish to >> send a reply to a specific person, please use the reply function and change >> the "To:" address to that person before sending. >> > > > > -- > Dazed_75 a.k.a. Larry > > The spirit of resistance to government is so valuable on certain occasions, > that I wish it always to be kept alive. > - Thomas Jefferson > -- Dazed_75 a.k.a. Larry The spirit of resistance to government is so valuable on certain occasions, that I wish it always to be kept alive. - Thomas Jefferson
_______________________________________________ PLUG-applications mailing list [email protected] http://lists.plug.phoenix.az.us/cgi-bin/mailman/listinfo/plug-applications Reminder: All replies will go back to this mailing list. If you wish to send a reply to a specific person, please use the reply function and change the "To:" address to that person before sending.
