#! /bin/sh ### BEGIN INIT INFO # Provides: kerneloops # Required-Start: $remote_fs $named $network $time $syslog # Required-Stop: $remote_fs $named $network $time $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Tool to automatically collect and submit kernel crash signatures # Description: A tool that collects and submits kernel crash # signatures to the http://oops.kernel.org website for use by the Linux # kernel developers. ### END INIT INFO # Author: Laurent Bigonville # Do NOT "set -e" # PATH should only include /usr/* if it runs after the mountnfs.sh script global PATH := '/sbin:/usr/sbin:/bin:/usr/bin' global DESC := '"Kernel crash collector'" global NAME := 'kerneloops' global DAEMON := "/usr/sbin/$NAME" global PIDFILE := "/var/run/$NAME.pid" global SCRIPTNAME := "/etc/init.d/$NAME" global ENABLED := '1' # Exit if the package is not installed test -x $DAEMON || exit 0 # Read configuration variable file if it is present test -r /etc/default/$NAME && source /etc/default/$NAME test $ENABLED = "1" || exit 0 # Load the VERBOSE setting and other rcS variables source /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.2-14) to ensure that this file is present # and status_of_proc is working. source /lib/lsb/init-functions # # Function that starts the daemon/service # proc do_start { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started start-stop-daemon --start --quiet --chuid kernoops:adm \ --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon --start --quiet --chuid kernoops:adm \ --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS \ || return 2 pidofproc $DAEMON > $PIDFILE } # # Function that stops the daemon/service # proc do_stop { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME global RETVAL := "$Status" test $RETVAL = 2 && return 2 # Many daemons don't delete their pidfiles when they exit. rm -f $PIDFILE return "$RETVAL" } matchstr $1 { start { test $VERBOSE != no && log_daemon_msg "Starting $DESC" $NAME do_start matchstr "$Status" { 0|1 { test $VERBOSE != no && log_end_msg 0 } 2 { test $VERBOSE != no && log_end_msg 1 } } } stop { test $VERBOSE != no && log_daemon_msg "Stopping $DESC" $NAME do_stop matchstr "$Status" { 0|1 { test $VERBOSE != no && log_end_msg 0 } 2 { test $VERBOSE != no && log_end_msg 1 } } } status { status_of_proc $DAEMON $NAME && exit 0 || exit $Status } restart|force-reload { log_daemon_msg "Restarting $DESC" $NAME do_stop matchstr "$Status" { 0|1 { do_start matchstr "$Status" { 0 { log_end_msg 0 } 1 { log_end_msg 1 } # Old process is still running * { log_end_msg 1 } # Failed to start } } * { # Failed to stop log_end_msg 1 } } } * { echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" > !2 exit 3 } } : (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:PATH) op: Equal rhs: {(/sbin) (Lit_Other ":") (/usr/sbin) (Lit_Other ":") (/bin) (Lit_Other ":") (/usr/bin)} spids: [48] ) ] spids: [48] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:DESC) op: Equal rhs: {(DQ ("Kernel crash collector"))} spids: [57] ) ] spids: [57] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:NAME) op:Equal rhs:{(kerneloops)} spids:[62])] spids: [62] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:DAEMON) op: Equal rhs: {(/usr/sbin/) ($ VSub_Name "$NAME")} spids: [65] ) ] spids: [65] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:PIDFILE) op: Equal rhs: {(/var/run/) ($ VSub_Name "$NAME") (.pid)} spids: [69] ) ] spids: [69] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:SCRIPTNAME) op: Equal rhs: {(/etc/init.d/) ($ VSub_Name "$NAME")} spids: [74] ) ] spids: [74] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:ENABLED) op:Equal rhs:{(1)} spids:[78])] spids: [78] ) (AndOr children: [ (C {(Lit_Other "[")} {(-x)} {(DQ ($ VSub_Name "$DAEMON"))} {(Lit_Other "]")}) (C {(exit)} {(0)}) ] op_id: Op_DPipe ) (AndOr children: [ (C {(Lit_Other "[")} {(-r)} {(/etc/default/) ($ VSub_Name "$NAME")} {(Lit_Other "]")}) (C {(.)} {(/etc/default/) ($ VSub_Name "$NAME")}) ] op_id: Op_DAmp ) (AndOr children: [ (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$ENABLED"))} {(Lit_Other "=")} {(DQ (1))} {(Lit_Other "]")} ) (C {(exit)} {(0)}) ] op_id: Op_DPipe ) (C {(.)} {(/lib/init/vars.sh)}) (C {(.)} {(/lib/lsb/init-functions)}) (FuncDef name: do_start body: (BraceGroup children: [ (AndOr children: [ (SimpleCommand words: [ {(start-stop-daemon)} {(--start)} {(--quiet)} {(--chuid)} {(kernoops) (Lit_Other ":") (adm)} {(--pidfile)} {($ VSub_Name "$PIDFILE")} {(--exec)} {($ VSub_Name "$DAEMON")} {(--test)} ] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[221])] ) (ControlFlow token: arg_word:{(1)}) ] op_id: Op_DPipe ) (AndOr children: [ (C {(start-stop-daemon)} {(--start)} {(--quiet)} {(--chuid)} {(kernoops) (Lit_Other ":") (adm)} {(--pidfile)} {($ VSub_Name "$PIDFILE")} {(--exec)} {($ VSub_Name "$DAEMON")} {(--)} {($ VSub_Name "$DAEMON_ARGS")} ) (ControlFlow token: arg_word:{(2)}) ] op_id: Op_DPipe ) (SimpleCommand words: [{(pidofproc)} {($ VSub_Name "$DAEMON")}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name "$PIDFILE")} spids: [273] ) ] ) ] spids: [178] ) spids: [174 177] ) (FuncDef name: do_stop body: (BraceGroup children: [ (C {(start-stop-daemon)} {(--stop)} {(--quiet)} {(--retry) (Lit_Other "=") (TERM/30/KILL/5)} {(--pidfile)} {($ VSub_Name "$PIDFILE")} {(--name)} {($ VSub_Name "$NAME")} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RETVAL) op: Equal rhs: {(DQ ($ VSub_QMark "$?"))} spids: [335] ) ] spids: [335] ) (AndOr children: [ (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$RETVAL"))} {(Lit_Other "=")} {(2)} {(Lit_Other "]")} ) (ControlFlow token: arg_word:{(2)}) ] op_id: Op_DAmp ) (C {(rm)} {(-f)} {($ VSub_Name "$PIDFILE")}) (ControlFlow token: arg_word: {(DQ ($ VSub_Name "$RETVAL"))} ) ] spids: [293] ) spids: [289 292] ) (Case to_match: {(DQ ($ VSub_Number "$1"))} arms: [ (case_arm pat_list: [{(start)}] action: [ (AndOr children: [ (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$VERBOSE"))} {(KW_Bang "!") (Lit_Other "=")} {(no)} {(Lit_Other "]")} ) (C {(log_daemon_msg)} {(DQ ("Starting ") ($ VSub_Name "$DESC"))} {(DQ ($ VSub_Name "$NAME"))} ) ] op_id: Op_DAmp ) (C {(do_start)}) (Case to_match: {(DQ ($ VSub_QMark "$?"))} arms: [ (case_arm pat_list: [{(0)} {(1)}] action: [ (AndOr children: [ (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$VERBOSE"))} {(KW_Bang "!") (Lit_Other "=")} {(no)} {(Lit_Other "]")} ) (C {(log_end_msg)} {(0)}) ] op_id: Op_DAmp ) ] spids: [432 435 456 -1] ) (case_arm pat_list: [{(2)}] action: [ (AndOr children: [ (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$VERBOSE"))} {(KW_Bang "!") (Lit_Other "=")} {(no)} {(Lit_Other "]")} ) (C {(log_end_msg)} {(1)}) ] op_id: Op_DAmp ) ] spids: [459 460 481 -1] ) ] spids: [423 429 484] ) ] spids: [389 390 487 -1] ) (case_arm pat_list: [{(stop)}] action: [ (AndOr children: [ (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$VERBOSE"))} {(KW_Bang "!") (Lit_Other "=")} {(no)} {(Lit_Other "]")} ) (C {(log_daemon_msg)} {(DQ ("Stopping ") ($ VSub_Name "$DESC"))} {(DQ ($ VSub_Name "$NAME"))} ) ] op_id: Op_DAmp ) (C {(do_stop)}) (Case to_match: {(DQ ($ VSub_QMark "$?"))} arms: [ (case_arm pat_list: [{(0)} {(1)}] action: [ (AndOr children: [ (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$VERBOSE"))} {(KW_Bang "!") (Lit_Other "=")} {(no)} {(Lit_Other "]")} ) (C {(log_end_msg)} {(0)}) ] op_id: Op_DAmp ) ] spids: [533 536 557 -1] ) (case_arm pat_list: [{(2)}] action: [ (AndOr children: [ (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$VERBOSE"))} {(KW_Bang "!") (Lit_Other "=")} {(no)} {(Lit_Other "]")} ) (C {(log_end_msg)} {(1)}) ] op_id: Op_DAmp ) ] spids: [560 561 582 -1] ) ] spids: [524 530 585] ) ] spids: [490 491 588 -1] ) (case_arm pat_list: [{(status)}] action: [ (AndOr children: [ (C {(status_of_proc)} {(DQ ($ VSub_Name "$DAEMON"))} {(DQ ($ VSub_Name "$NAME"))}) (AndOr children: [(C {(exit)} {(0)}) (C {(exit)} {($ VSub_QMark "$?")})] op_id: Op_DPipe ) ] op_id: Op_DAmp ) ] spids: [591 592 618 -1] ) (case_arm pat_list: [{(restart)} {(force-reload)}] action: [ (C {(log_daemon_msg)} {(DQ ("Restarting ") ($ VSub_Name "$DESC"))} {(DQ ($ VSub_Name "$NAME"))} ) (C {(do_stop)}) (Case to_match: {(DQ ($ VSub_QMark "$?"))} arms: [ (case_arm pat_list: [{(0)} {(1)}] action: [ (C {(do_start)}) (Case to_match: {(DQ ($ VSub_QMark "$?"))} arms: [ (case_arm pat_list: [{(0)}] action: [(C {(log_end_msg)} {(0)})] spids: [669 670 676 -1] ) (case_arm pat_list: [{(1)}] action: [(C {(log_end_msg)} {(1)})] spids: [679 680 686 -1] ) (case_arm pat_list: [{(Lit_Other "*")}] action: [(C {(log_end_msg)} {(1)})] spids: [692 693 699 -1] ) ] spids: [660 666 705] ) ] spids: [651 654 708 -1] ) (case_arm pat_list: [{(Lit_Other "*")}] action: [(C {(log_end_msg)} {(1)})] spids: [711 712 724 -1] ) ] spids: [642 648 727] ) ] spids: [621 624 730 -1] ) (case_arm pat_list: [{(Lit_Other "*")}] action: [ (SimpleCommand words: [ {(echo)} { (DQ ("Usage: ") ($ VSub_Name "$SCRIPTNAME") (" {start|stop|status|restart|force-reload}") ) } ] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[745])] ) (C {(exit)} {(3)}) ] spids: [733 734 754 -1] ) ] spids: [380 386 756] ) (C {(Lit_Other ":")}) ] )