]> git.pld-linux.org Git - projects/rc-scripts.git/commitdiff
- rewriting 'service', 'chkconfig' and others will give us only a mess, not
authorJacek Konieczny <jajcus@pld-linux.org>
Thu, 6 May 2010 10:31:10 +0000 (10:31 +0000)
committerJacek Konieczny <jajcus@pld-linux.org>
Thu, 6 May 2010 10:31:10 +0000 (10:31 +0000)
  LSB compatibility. Let's to it a different way…

svn-id: @11385

rc.d/init.d/functions
rc.d/rc.sysinit

index bdb395a28c932b0bb8df073d92289e0ad798fd67..7811d8df43fd86c41a4f260c477b401668d5dfd5 100644 (file)
@@ -1103,32 +1103,167 @@ emit () {
        /sbin/initctl emit "$@"
 }
 
-_check_init () {
-       # check if the init script can be run this way
-       # make sure the old-styl init scripts are not
-       # used
-       if ! use_upstart ; then
+is_upstart_task() {
+       # Return 0 if the given service is an upstart task.
+       grep -q '^task' "/etc/init/$1.conf"
+}
+is_upstart_running() {
+       # Return 0 if the given service is running via upstart
+       initctl status "$1" 2>/dev/null | grep -q running
+}
+upstart_start() {
+       local service=$1
+       is_upstart_running "${service}" && return 0
+       msg_starting "${service}"
+       if errors=$(/sbin/initctl start ${service} 2>&1) ; then
+               ok
                return 0
-       fi      
-       if is_yes $CHECK_INIT_OVERRIDE ; then
+       else
+               fail
+               echo "$errors" >&2
+               return 1
+       fi
+}
+upstart_stop() {
+       local service=$1
+       if ! is_upstart_running "${service}" && ! is_upstart_task "${service}" ; then
+               return 0
+       fi
+       msg_stopping "${service}"
+       if errors=$(/sbin/initctl stop ${service}) ; then
+               ok
+               return 0
+       else
+               fail
+               echo "$errors" >&2
+               return 1
+       fi
+}
+upstart_reload() {
+       local service=$1
+       if ! is_upstart_running "${service}" && ! is_upstart_task "${service}" ; then
+               return 0
+       fi
+       msg_reloading "${service}"
+       if errors=$(/sbin/initctl reload ${service}) ; then
+               ok
+               return 0
+       else
+               fail
+               echo "$errors" >&2
+               return 1
+       fi
+}
+upstart_status() {
+       # get service status
+       # should be compliant with
+        # http://refspecs.freestandards.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/iniscrptact.html
+       local service=$1
+       local status
+       if is_upstart_task "${service}" ; then
+               # we probably should have a way to handle task status
                return 0
        fi
-       local name=$(basename "$1")
-       local command=$(basename "$2")
+       if ! status=$(/sbin/initctl status "${service}") ; then
+               # program or service status is not known
+               return 4
+       fi
+       if strstr "$status" "running" ; then
+               # program is running or service is OK
+               return 0
+       else
+               # program is not running
+               return 3
+       fi
+       # TODO: other statuses
+}
+
+_upstart_controlled () {
+       # If the service is to be handled by upstart
+       # execute the start/stop/etc. commands the upstart way
+       if ! use_upstart ; then
+               return 0
+       fi      
+       local script=$1
+       shift
+       local command=$1
+       shift
+       local commands="$*"
+       local name=$(basename "$script")
        if [ ! -f /etc/init/${name}.conf ] ; then
                return 0
        fi
+       if [ -n "$commands" ] ; then
+               local cmd
+               local found=0
+               # is there a better way
+               for cmd in $commands ; do
+                       if [ "$command" = "$cmd" ] ; then
+                               found=1
+                               break;
+                       fi
+               done
+               if [ $found = 0 ] ; then
+                       # let the script handle it
+                       return 0
+               fi
+       fi
        case "$command" in
-               start|stop|status)
-                       echo "Use 'initctl $command $name' to control this service"
-                       exit 1
+               start)
+                       upstart_start $name
+                       exit $?
+                       ;;
+               stop)
+                       upstart_stop $name
+                       exit $?
+                       ;;
+               status)
+                       upstart_status $name
+                       exit $?
+                       ;;
+               restart)
+                       upstart_stop $name
+                       upstart_start $name
+                       exit $?
+                       ;;
+               reload)
+                       if is_upstart_task "$name" ; then
+                               nls "$command not implemented for $name"
+                               exit 3
+                       else
+                               upstart_reload "$name"
+                               exit $?
+                       fi
+                       ;;
+               force-reload)
+                       if is_upstart_task "$name" ; then
+                               upstart_stop "$name"
+                               upstart_start "$name"
+                               exit $?
+                       else
+                               upstart_reload "$name"
+                               exit $?
+                       fi
                        ;;
                *)
+                       msg_usage "$0 {start|stop|restart|reload|force-reload|status}"
+                       exit 3
                        ;;
        esac
-       return 0
+       return 1 # should not happen
 }
-alias check_init='_check_init $0 "$@"'
+
+# Usage:
+#   somewhere at the begining of init script:
+#     upstart_controlled
+#              - to pass implement all upstart commands via initctl
+#                 start, stop, status, restart, reload and force_reload
+#                are implemented
+#     upstart_controlled command...
+#              - to pass handle only specific commands the upstart way
+#                 and leave the rest to the script
+#
+alias upstart_controlled='_check_init $0 "$@"'
 
 rc_gettext_init
 rc_cache_init
index 36b816b4f63658eea737b97057e65b3aba43a36a..6153c426ad2fafb6354029d54508534a3998b56c 100755 (executable)
@@ -120,9 +120,6 @@ if ! is_yes "$VSERVER" ; then
 
        # Only read this once.
        cmdline=$(cat /proc/cmdline)
-       if strstr "$cmdline" "pld.no-upstart" ; then
-               USE_UPSTART="no"
-       fi
 
        # sysfs is also needed before any other things (under kernel > 2.5)
        if grep -q sysfs /proc/filesystems 2>/dev/null ; then
@@ -523,9 +520,6 @@ if ! is_yes "$VSERVER"; then
        elif is_fsmounted cpuset /dev/cpuset; then
                mount -f -t cpuset none /dev/cpuset
        fi
-       
-       emit root-filesystem
-       emit virtual-filesystems
 
        if [ ! -f /proc/modules ]; then
                USEMODULES=
@@ -892,12 +886,6 @@ if ! is_yes "$VSERVER"; then
                run_cmd "Turning on quotas for local filesystems" /sbin/quotaon -aug
        fi
 
-       emit local-filesystems
-
-       # FIXME: this should be delayed until remote filesystems are mounted,
-       #        especialy when /usr or other standard fs is remote
-       emit filesystem
-
        # Turn on process accounting
        if [ -x /etc/rc.d/rc.acct ]; then
                /etc/rc.d/rc.acct start
@@ -923,11 +911,6 @@ if ! is_yes "$VSERVER"; then
        # ... and here finish configuring parameters
        sysctl -e -p /etc/sysctl.conf > /dev/null 2>&1
 else
-       emit root-filesystem
-       emit virtual-filesystems
-       emit local-filesystems
-       emit filesystem
-
        # /var/log should be writable now, so start saving the boot output
        if [ "$RC_BOOTLOG" ]; then
                echo > /var/log/boot.msg
@@ -996,7 +979,6 @@ if ! is_yes "$VSERVER"; then
        run_cmd "Enabling swap space" true
        # Right, now turn on swap in case we swap to files
        swapon -a >/dev/null 2>&1
-       emit all-swaps
 
        # If a SCSI tape has been detected, load the st module unconditionally
        # since many SCSI tapes don't deal well with st being loaded and unloaded
@@ -1022,8 +1004,6 @@ if ! is_yes "$VSERVER"; then
        done
        cp -f /var/log/dmesg /var/log/dmesg.0
        chmod 0600 /var/log/dmesg /var/log/dmesg.0
-else
-       emit all-swaps
 fi
 
 if ! is_no "$RC_PROMPT"; then
@@ -1047,6 +1027,3 @@ if ! is_no "$RC_PROMPT"; then
        rm -f /var/run/getkey_done
 fi
 echo
-
-emit pld.sysinit-done
-
This page took 0.095026 seconds and 4 git commands to generate.