Re: service doen't get started at boottime, but can start manually

2014-09-10 Thread O. Hartmann
Am Sun, 7 Sep 2014 11:16:37 -0500
Scot Hetzel swhet...@gmail.com schrieb:

 On Sun, Sep 7, 2014 at 10:44 AM, Scot Hetzel swhet...@gmail.com wrote:
  I created the rc.d/refdbd script by copying /etc/rc.d/inetd and make a
  few minor changes.
  This script (untested) should do what the scripts/refdb.in and
  scripts/refdbctl.in were doing:
 
  #!/bin/sh
  #
  # $FreeBSD$
  #
 
  # PROVIDE: refdbd
  # REQUIRE: LOGIN
  # KEYWORD: shutdown
 
  . /etc/rc.subr
 
  name=refdbd
  rcvar=refdbd_enable
  command=%%PREFIX%%/bin/${name}
  pidfile=/var/run/${name}.pid
  required_files=/etc/${name}.conf
 
 I missed required_files in my editing of the original script.
 
 If refdbd does have a configuration file, changes this to point to the
 correct file, otherwise this can be removed.
 
  extra_commands=reload
 
  load_rc_config $name
  run_rc_command $1
 
  Place the above in textproc/refdb/files/refdb.in, then add:
 
  USE_RC_SUBR= refdbd
 
  in textproc/refdb/Makefile.
 
 

It seems to me, that when a port installs a script appended with *.sh in 
etc/rc.d/, the
script gets executed anyway - regardless wether the service is enabled
in /etc/rc.conf[.local] or not. This is especially the case for the original 
port
textproc/refdb.

The reason why especially one particular machine rejected the startup of the 
service was:
I changed the script's name from refdb.sh to refdb and with the lack of the 
correct
syntax and definitions inside it, the system (11.0 CURRENT) did not start the 
service
while the other systems running refdb used the oldstyle refdb.sh script.

Just for the conclusion of the obscure (at least for me) behaviour.

Thanks for your time,

Oliver


signature.asc
Description: PGP signature


service doen't get started at boottime, but can start manually

2014-09-07 Thread O. Hartmann

I use a service (textprox/refdb from ports, refdb_enable=YES in 
/etc/rc.conf.local)
that is supposed to startup at boottime. On one CURRENT system, running

 FreeBSD 11.0-CURRENT #3 r271210: Sat Sep  6 22:39:59 CEST 2014 amd64

the service is not started at boottime, but I can start the service manually via

service refdb start

I tried enabling rc_debug=YES in /etc/rc.conf but I do not see any failure of 
the start
attempt of that specific service in the logs or on the console. 

Is there an elegant way to debug rc.d and the startup procedure without having 
the system
reboot (I do not have jails or VM, sorry)?

oh


signature.asc
Description: PGP signature


Re: service doen't get started at boottime, but can start manually

2014-09-07 Thread O. Hartmann
Am Sun, 7 Sep 2014 15:33:42 +0800
Erich Dollansky er...@alogt.com schrieb:

 Hi,
 
 On Sun, 7 Sep 2014 09:03:21 +0200
 O. Hartmann ohart...@zedat.fu-berlin.de wrote:
 
  
  I use a service (textprox/refdb from ports, refdb_enable=YES
  in /etc/rc.conf.local) that is supposed to startup at boottime. On
  one CURRENT system, running
  
   FreeBSD 11.0-CURRENT #3 r271210: Sat Sep  6 22:39:59 CEST 2014 amd64
  
  the service is not started at boottime, but I can start the service
  manually via
  
  service refdb start
  
  I tried enabling rc_debug=YES in /etc/rc.conf but I do not see any
  failure of the start attempt of that specific service in the logs or
  on the console. 
  
  Is there an elegant way to debug rc.d and the startup procedure
  without having the system reboot (I do not have jails or VM, sorry)?
  
 could it be that the spelling in either rc.conf and the spelling in the
 actual script differ so that FreeBSD does not start it?
 
 Erich

No. If it would be the case, I guess starting it manually wouldn't work either. 
The fact
is that the port textproc/refdb uses a startup script named refdb.sh and by 
maintaining
the port and on the way to make it more CURRENT compliant, I started with 
renaming it to
refdb and it seems this is the culprit.

The script textproc/refdb uses is a bit awkward since it targets both *BSD and 
Linux
init/rc scripts and the initial rc.d/refddb scripts gives control to another 
script
called refdbctl which seems to perform all the stuff FreeBSD's /etc/rc.subr is 
providing.

I renamed the script back to refdb.sh by now and the service starts again as
expected.  I guess the spawning into a subshell fails somehow at that point 
when booting
the box.

Oliver 


signature.asc
Description: PGP signature


Re: service doen't get started at boottime, but can start manually

2014-09-07 Thread Scot Hetzel
On Sun, Sep 7, 2014 at 2:43 AM, O. Hartmann ohart...@zedat.fu-berlin.de wrote:
 Am Sun, 7 Sep 2014 15:33:42 +0800
 Erich Dollansky er...@alogt.com schrieb:

 Hi,

 On Sun, 7 Sep 2014 09:03:21 +0200
 O. Hartmann ohart...@zedat.fu-berlin.de wrote:

 
  I use a service (textprox/refdb from ports, refdb_enable=YES
  in /etc/rc.conf.local) that is supposed to startup at boottime. On
  one CURRENT system, running
 
   FreeBSD 11.0-CURRENT #3 r271210: Sat Sep  6 22:39:59 CEST 2014 amd64
 
  the service is not started at boottime, but I can start the service
  manually via
 
  service refdb start
 
  I tried enabling rc_debug=YES in /etc/rc.conf but I do not see any
  failure of the start attempt of that specific service in the logs or
  on the console.
 
  Is there an elegant way to debug rc.d and the startup procedure
  without having the system reboot (I do not have jails or VM, sorry)?
 
 could it be that the spelling in either rc.conf and the spelling in the
 actual script differ so that FreeBSD does not start it?

 Erich

 No. If it would be the case, I guess starting it manually wouldn't work 
 either. The fact
 is that the port textproc/refdb uses a startup script named refdb.sh and by 
 maintaining
 the port and on the way to make it more CURRENT compliant, I started with 
 renaming it to
 refdb and it seems this is the culprit.

 The script textproc/refdb uses is a bit awkward since it targets both *BSD 
 and Linux
 init/rc scripts and the initial rc.d/refddb scripts gives control to another 
 script
 called refdbctl which seems to perform all the stuff FreeBSD's /etc/rc.subr 
 is providing.

 I renamed the script back to refdb.sh by now and the service starts again as
 expected.  I guess the spawning into a subshell fails somehow at that point 
 when booting
 the box.


I had a look at scripts/refdb.in, it is not a proper rc script for
FreeBSD, as it is missing several keywords:

# PROVIDE: - all scripts need this
# REQUIRE:
# BEFORE:
# KEYWORD: - optional

Which tells rcorder where to put refdb in the startup order.  Since
these are missing, rcorder doesn't place it in the startup list.

The following will show you the order that your startup scripts run,
refdb may not be listed:

rcorder /etc/rc.d/* /usr/local/etc/rc.d/*

Some one will have to create a proper rc script by looking at what
both scripts/refdb.in and scripts/refdbctl.in do.

The reason that you are able to use service to start refdb, is due to
service doesn't check the scripts header for the keywords.

-- 
DISCLAIMER:

No electrons were maimed while sending this message. Only slightly bruised.
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Re: service doen't get started at boottime, but can start manually

2014-09-07 Thread Scot Hetzel
On Sun, Sep 7, 2014 at 3:39 AM, Scot Hetzel swhet...@gmail.com wrote:
 I had a look at scripts/refdb.in, it is not a proper rc script for
 FreeBSD, as it is missing several keywords:

 # PROVIDE: - all scripts need this
 # REQUIRE:
 # BEFORE:
 # KEYWORD: - optional

 Which tells rcorder where to put refdb in the startup order.  Since
 these are missing, rcorder doesn't place it in the startup list.

I looked again, and it is not rcorder, it's /etc/rc and /etc/rc.subr
that determine which script to run.

/etc/rc calls find_local_scripts_new from /etc/rc.subr.
find_local_scripts_new checks each rc script to make sure that they
have at least a # PROVIDE:  keyword.  If it does, then it adds that
script to ${local_rc}.  Then /etc/rc runs:

files=`rcorder /etc/rc.d/* ${local_rc}`

to get the startup order for these scripts.  Then /etc/rc starts the
scripts in the proper order.

Since, /usr/local/etc/rc.d/refdb{,.sh.dist} is missing the # PROVIDE:
, the script is skipped on startup.

Since, rc.d/refdb is not a proper rc script, adding refdb_enable=YES
to /etc/rc.conf{,.local} will not control the starting of this script.

Someone should fix service, so that it checks the rc script has a #
PROVIDE: , and displays an error message if it doesn't.
-- 
DISCLAIMER:

No electrons were maimed while sending this message. Only slightly bruised.
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Re: service doen't get started at boottime, but can start manually

2014-09-07 Thread O. Hartmann
Am Sun, 7 Sep 2014 04:03:25 -0500
Scot Hetzel swhet...@gmail.com schrieb:

 On Sun, Sep 7, 2014 at 3:39 AM, Scot Hetzel swhet...@gmail.com wrote:
  I had a look at scripts/refdb.in, it is not a proper rc script for
  FreeBSD, as it is missing several keywords:
 
  # PROVIDE: - all scripts need this
  # REQUIRE:
  # BEFORE:
  # KEYWORD: - optional
 
  Which tells rcorder where to put refdb in the startup order.  Since
  these are missing, rcorder doesn't place it in the startup list.
 
 I looked again, and it is not rcorder, it's /etc/rc and /etc/rc.subr
 that determine which script to run.
 
 /etc/rc calls find_local_scripts_new from /etc/rc.subr.
 find_local_scripts_new checks each rc script to make sure that they
 have at least a # PROVIDE:  keyword.  If it does, then it adds that
 script to ${local_rc}.  Then /etc/rc runs:
 
 files=`rcorder /etc/rc.d/* ${local_rc}`
 
 to get the startup order for these scripts.  Then /etc/rc starts the
 scripts in the proper order.
 
 Since, /usr/local/etc/rc.d/refdb{,.sh.dist} is missing the # PROVIDE:
 , the script is skipped on startup.
 
 Since, rc.d/refdb is not a proper rc script, adding refdb_enable=YES
 to /etc/rc.conf{,.local} will not control the starting of this script.
 
 Someone should fix service, so that it checks the rc script has a #
 PROVIDE: , and displays an error message if it doesn't.

Hello Scott,

as the new maintainer of this port, I'm working on a solution, but first, I 
have to
understand the way this obscure rc-script system works. Thanks for your good 
explanation.
I tried to put PROVIDE/REQUIRE in the script, but I also changed refdb.sh - 
refdb
which, in the end, didn't work. The service IS started with refdb.sh in rc.d/. 

Since the original refdb.sh init script targets both Linux and *BSD and 
delegates the
starting, stopping et cetera to a script called refdbctl, the latter script 
needs to be
examinded and as far as I understand, most of its functionality is covered
by /etc/rc.cubr, except the part where refdbctl searches for the path of the 
PID file and
replaces the init/default path its configuration counterpart found in
prefix/etc/refdb/refdbdrc.

I guess, at the end FreeBSD doen't need the templated refdbctl/refdb.in (to be 
found in
the sources in scripts/).

If you'd like to have a look at it, I can send you the sekelton I've already 
prepared for
the refurbishment of the port.

Oliver


signature.asc
Description: PGP signature


Re: service doen't get started at boottime, but can start manually

2014-09-07 Thread Scot Hetzel
On Sun, Sep 7, 2014 at 4:28 AM, O. Hartmann ohart...@zedat.fu-berlin.de wrote:
 Am Sun, 7 Sep 2014 04:03:25 -0500
 Scot Hetzel swhet...@gmail.com schrieb:

 On Sun, Sep 7, 2014 at 3:39 AM, Scot Hetzel swhet...@gmail.com wrote:
  I had a look at scripts/refdb.in, it is not a proper rc script for
  FreeBSD, as it is missing several keywords:
 
  # PROVIDE: - all scripts need this
  # REQUIRE:
  # BEFORE:
  # KEYWORD: - optional
 
  Which tells rcorder where to put refdb in the startup order.  Since
  these are missing, rcorder doesn't place it in the startup list.
 
 I looked again, and it is not rcorder, it's /etc/rc and /etc/rc.subr
 that determine which script to run.

 /etc/rc calls find_local_scripts_new from /etc/rc.subr.
 find_local_scripts_new checks each rc script to make sure that they
 have at least a # PROVIDE:  keyword.  If it does, then it adds that
 script to ${local_rc}.  Then /etc/rc runs:

 files=`rcorder /etc/rc.d/* ${local_rc}`

 to get the startup order for these scripts.  Then /etc/rc starts the
 scripts in the proper order.

 Since, /usr/local/etc/rc.d/refdb{,.sh.dist} is missing the # PROVIDE:
 , the script is skipped on startup.

 Since, rc.d/refdb is not a proper rc script, adding refdb_enable=YES
 to /etc/rc.conf{,.local} will not control the starting of this script.

 Someone should fix service, so that it checks the rc script has a #
 PROVIDE: , and displays an error message if it doesn't.

 Hello Scott,

 as the new maintainer of this port, I'm working on a solution, but first, I 
 have to
 understand the way this obscure rc-script system works. Thanks for your good 
 explanation.
 I tried to put PROVIDE/REQUIRE in the script, but I also changed refdb.sh - 
 refdb
 which, in the end, didn't work. The service IS started with refdb.sh in rc.d/.

 Since the original refdb.sh init script targets both Linux and *BSD and 
 delegates the
 starting, stopping et cetera to a script called refdbctl, the latter script 
 needs to be
 examinded and as far as I understand, most of its functionality is covered
 by /etc/rc.cubr, except the part where refdbctl searches for the path of the 
 PID file and
 replaces the init/default path its configuration counterpart found in
 prefix/etc/refdb/refdbdrc.

 I guess, at the end FreeBSD doen't need the templated refdbctl/refdb.in (to 
 be found in
 the sources in scripts/).

 If you'd like to have a look at it, I can send you the sekelton I've already 
 prepared for
 the refurbishment of the port.


I created the rc.d/refdbd script by copying /etc/rc.d/inetd and make a
few minor changes.
This script (untested) should do what the scripts/refdb.in and
scripts/refdbctl.in were doing:

#!/bin/sh
#
# $FreeBSD$
#

# PROVIDE: refdbd
# REQUIRE: LOGIN
# KEYWORD: shutdown

. /etc/rc.subr

name=refdbd
rcvar=refdbd_enable
command=%%PREFIX%%/bin/${name}
pidfile=/var/run/${name}.pid
required_files=/etc/${name}.conf
extra_commands=reload

load_rc_config $name
run_rc_command $1

Place the above in textproc/refdb/files/refdb.in, then add:

USE_RC_SUBR= refdbd

in textproc/refdb/Makefile.


-- 
DISCLAIMER:

No electrons were maimed while sending this message. Only slightly bruised.
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Re: service doen't get started at boottime, but can start manually

2014-09-07 Thread Scot Hetzel
On Sun, Sep 7, 2014 at 10:44 AM, Scot Hetzel swhet...@gmail.com wrote:
 I created the rc.d/refdbd script by copying /etc/rc.d/inetd and make a
 few minor changes.
 This script (untested) should do what the scripts/refdb.in and
 scripts/refdbctl.in were doing:

 #!/bin/sh
 #
 # $FreeBSD$
 #

 # PROVIDE: refdbd
 # REQUIRE: LOGIN
 # KEYWORD: shutdown

 . /etc/rc.subr

 name=refdbd
 rcvar=refdbd_enable
 command=%%PREFIX%%/bin/${name}
 pidfile=/var/run/${name}.pid
 required_files=/etc/${name}.conf

I missed required_files in my editing of the original script.

If refdbd does have a configuration file, changes this to point to the
correct file, otherwise this can be removed.

 extra_commands=reload

 load_rc_config $name
 run_rc_command $1

 Place the above in textproc/refdb/files/refdb.in, then add:

 USE_RC_SUBR= refdbd

 in textproc/refdb/Makefile.


-- 
DISCLAIMER:

No electrons were maimed while sending this message. Only slightly bruised.
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Re: service doen't get started at boottime, but can start manually

2014-09-07 Thread O. Hartmann
Am Sun, 7 Sep 2014 11:16:37 -0500
Scot Hetzel swhet...@gmail.com schrieb:

 On Sun, Sep 7, 2014 at 10:44 AM, Scot Hetzel swhet...@gmail.com wrote:
  I created the rc.d/refdbd script by copying /etc/rc.d/inetd and make a
  few minor changes.
  This script (untested) should do what the scripts/refdb.in and
  scripts/refdbctl.in were doing:
 
  #!/bin/sh
  #
  # $FreeBSD$
  #
 
  # PROVIDE: refdbd
  # REQUIRE: LOGIN
  # KEYWORD: shutdown
 
  . /etc/rc.subr
 
  name=refdbd
  rcvar=refdbd_enable
  command=%%PREFIX%%/bin/${name}
  pidfile=/var/run/${name}.pid
  required_files=/etc/${name}.conf
 
 I missed required_files in my editing of the original script.
 
 If refdbd does have a configuration file, changes this to point to the
 correct file, otherwise this can be removed.
 
  extra_commands=reload
 
  load_rc_config $name
  run_rc_command $1
 
  Place the above in textproc/refdb/files/refdb.in, then add:
 
  USE_RC_SUBR= refdbd
 
  in textproc/refdb/Makefile.
 
 

Scot,

I already have a initial refdbd frameworked file, thanks for your 
considerations.

I think the following code is suitable for a clean FreeBSD-style rc.d file for 
the port.
I managed it to restart, status and start/stop via this rc.d-init script and it 
is for
the upcoming refdb-1.0.3 which is in preparation.

I need to mimik the refdbctl code at the point where it is looking for the 
configuration
of the PID file via refdbdrc in %%PREFIX%%/etc/refdb/. I havn't tested the code 
properly,
yet, but it worked as far a I could test it.

Regards,
Oliver Hartmann


[...]
#!/bin/sh
#
# $FreeBSD$
#
# O. Hartmann, Berlin, 2014
#
#
# PROVIDE: refdbd
# REQUIRE: LOGIN
# KEYWORD: shutdown
#
# To enable this service, place
#
# refdbd_enable=YES
#
# in /etc/rc.conf[.local]
# 
# and optionally set the the following variables upon your environment:
#
# Choose another PIDFILE as the configured and/or default one:
# refdbd_pidfile=/var/run/refdbd.pid
#
# To make the refdbd daemon accessible local only (127.0.0.1):
# refdbd_local=YES

. /etc/rc.subr

name=refdbd
rcvar=refdbd_enable

# read settings, set defaults
load_rc_config ${name}

command=%%PREFIX%%/bin/${name}
globalconfig=%%PREFIX%%/etc/refdb/refdbdrc
pidfile=/var/run/${name}.pid
extra_commands=reload

load_rc_config ${name}

: ${refdbd_enable:=NO}
: ${refdbd_local:=NO}

if checkyesno refdbd_local; then
  refdbd_local_flags=-I
else
  refdbd_local_flags=
fi

start_precmd=${name}_prestart

refdbd_prestart()
{
local   refdbvar refdbval

# Check whether we have configured a PID file
if [ x${refdbd_pidfile} != x ]; then
pidfile=${refdbd_pidfile}

# ... if not configured via rc.conf[.local],
# read the settings in the configure file. We're only interested in
# nonstandard PID file settings
else
for config in ${globalconfig}; do
while read refdbvar refdbval; do
if [ -n ${refdbvar} ]; then
if [ ${refdbvar}=pidfile ]; then
pidfile=${refdbval}
fi
fi
done  $config
done
fi

piddir=`dirname ${pidfile}`
mkdir -p ${piddir}

refdbd_pid_flags=-P ${pidfile}
}

# Set command arguments upon configuration
command_args=${refdbd_local_flags} ${refdbd_pid_flags}

run_rc_command $1



signature.asc
Description: PGP signature