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 &quot;To:&quot; 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 
&quot;To:&quot; address to that person before sending.

Reply via email to