]> pere.pagekite.me Git - homepage.git/blobdiff - blog/archive/2013/11/11.rss
Generated.
[homepage.git] / blog / archive / 2013 / 11 / 11.rss
index 2b25a7ab6c6f713429d16b35966611344285dcb9..c42bbfe22e4728ee7a645d5bd731177e04ea7cdb 100644 (file)
@@ -6,6 +6,205 @@
                 <link>http://people.skolelinux.org/pere/blog/</link>
 
        
+       <item>
+               <title>Debian init.d boot script example for rsyslog</title>
+               <link>http://people.skolelinux.org/pere/blog/Debian_init_d_boot_script_example_for_rsyslog.html</link>        
+               <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Debian_init_d_boot_script_example_for_rsyslog.html</guid>
+                <pubDate>Sat, 2 Nov 2013 22:40:00 +0100</pubDate>
+               <description>&lt;p&gt;If one of the points of switching to a new init system in Debian is
+&lt;a href=&quot;http://thomas.goirand.fr/blog/?p=147&quot;&gt;to get rid of huge
+init.d scripts&lt;/a&gt;, I doubt we need to switch away from sysvinit and
+init.d scripts at all.  Here is an example init.d script, ie a rewrite
+of /etc/init.d/rsyslog:&lt;/p&gt;
+
+&lt;p&gt;&lt;pre&gt;
+#!/lib/init/init-d-script
+### BEGIN INIT INFO
+# Provides:          rsyslog
+# Required-Start:    $remote_fs $time
+# Required-Stop:     umountnfs $time
+# X-Stop-After:      sendsigs
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: enhanced syslogd
+# Description:       Rsyslog is an enhanced multi-threaded syslogd.
+#                    It is quite compatible to stock sysklogd and can be 
+#                    used as a drop-in replacement.
+### END INIT INFO
+DESC=&quot;enhanced syslogd&quot;
+DAEMON=/usr/sbin/rsyslogd
+&lt;/pre&gt;&lt;/p&gt;
+
+&lt;p&gt;Pretty minimalistic to me... For the record, the original sysv-rc
+script was 137 lines, and the above is just 15 lines, most of the meta
+info/comments.&lt;/p&gt;
+
+&lt;p&gt;How to do this, you ask?  Well, one create a new script
+/lib/init/init-d-script looking something like this:
+
+&lt;p&gt;&lt;pre&gt;
+#!/bin/sh
+
+# Define LSB log_* functions.
+# Depend on lsb-base (&gt;= 3.2-14) to ensure that this file is present
+# and status_of_proc is working.
+. /lib/lsb/init-functions
+
+#
+# Function that starts the daemon/service
+
+#
+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 --pidfile $PIDFILE --exec $DAEMON --test &gt; /dev/null \
+               || return 1
+       start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
+               $DAEMON_ARGS \
+               || return 2
+       # Add code here, if necessary, that waits for the process to be ready
+       # to handle requests from services started subsequently which depend
+       # on this one.  As a last resort, sleep for some time.
+}
+
+#
+# Function that stops the daemon/service
+#
+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
+       RETVAL=&quot;$?&quot;
+       [ &quot;$RETVAL&quot; = 2 ] &amp;&amp; return 2
+       # Wait for children to finish too if this is a daemon that forks
+       # and if the daemon is only ever run from this initscript.
+       # If the above conditions are not satisfied then add some other code
+       # that waits for the process to drop all resources that could be
+       # needed by services started subsequently.  A last resort is to
+       # sleep for some time.
+       start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
+       [ &quot;$?&quot; = 2 ] &amp;&amp; return 2
+       # Many daemons don&#39;t delete their pidfiles when they exit.
+       rm -f $PIDFILE
+       return &quot;$RETVAL&quot;
+}
+
+#
+# Function that sends a SIGHUP to the daemon/service
+#
+do_reload() {
+       #
+       # If the daemon can reload its configuration without
+       # restarting (for example, when it is sent a SIGHUP),
+       # then implement that here.
+       #
+       start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
+       return 0
+}
+
+SCRIPTNAME=$1
+scriptbasename=&quot;$(basename $1)&quot;
+echo &quot;SN: $scriptbasename&quot;
+if [ &quot;$scriptbasename&quot; != &quot;init-d-library&quot; ] ; then
+    script=&quot;$1&quot;
+    shift
+    . $script
+else
+    exit 0
+fi
+
+NAME=$(basename $DAEMON)
+PIDFILE=/var/run/$NAME.pid
+
+# Exit if the package is not installed
+#[ -x &quot;$DAEMON&quot; ] || exit 0
+
+# Read configuration variable file if it is present
+[ -r /etc/default/$NAME ] &amp;&amp; . /etc/default/$NAME
+
+# Load the VERBOSE setting and other rcS variables
+. /lib/init/vars.sh
+
+case &quot;$1&quot; in
+  start)
+       [ &quot;$VERBOSE&quot; != no ] &amp;&amp; log_daemon_msg &quot;Starting $DESC&quot; &quot;$NAME&quot;
+       do_start
+       case &quot;$?&quot; in
+               0|1) [ &quot;$VERBOSE&quot; != no ] &amp;&amp; log_end_msg 0 ;;
+               2) [ &quot;$VERBOSE&quot; != no ] &amp;&amp; log_end_msg 1 ;;
+       esac
+       ;;
+  stop)
+       [ &quot;$VERBOSE&quot; != no ] &amp;&amp; log_daemon_msg &quot;Stopping $DESC&quot; &quot;$NAME&quot;
+       do_stop
+       case &quot;$?&quot; in
+               0|1) [ &quot;$VERBOSE&quot; != no ] &amp;&amp; log_end_msg 0 ;;
+               2) [ &quot;$VERBOSE&quot; != no ] &amp;&amp; log_end_msg 1 ;;
+       esac
+       ;;
+  status)
+       status_of_proc &quot;$DAEMON&quot; &quot;$NAME&quot; &amp;&amp; exit 0 || exit $?
+       ;;
+  #reload|force-reload)
+       #
+       # If do_reload() is not implemented then leave this commented out
+       # and leave &#39;force-reload&#39; as an alias for &#39;restart&#39;.
+       #
+       #log_daemon_msg &quot;Reloading $DESC&quot; &quot;$NAME&quot;
+       #do_reload
+       #log_end_msg $?
+       #;;
+  restart|force-reload)
+       #
+       # If the &quot;reload&quot; option is implemented then remove the
+       # &#39;force-reload&#39; alias
+       #
+       log_daemon_msg &quot;Restarting $DESC&quot; &quot;$NAME&quot;
+       do_stop
+       case &quot;$?&quot; in
+         0|1)
+               do_start
+               case &quot;$?&quot; in
+                       0) log_end_msg 0 ;;
+                       1) log_end_msg 1 ;; # Old process is still running
+                       *) log_end_msg 1 ;; # Failed to start
+               esac
+               ;;
+         *)
+               # Failed to stop
+               log_end_msg 1
+               ;;
+       esac
+       ;;
+  *)
+       echo &quot;Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}&quot; &gt;&amp;2
+       exit 3
+       ;;
+esac
+
+:
+&lt;/pre&gt;&lt;/p&gt;
+
+&lt;p&gt;It is based on /etc/init.d/skeleton, and could be improved quite a
+lot.  I did not really polish the approach, so it might not always
+work out of the box, but you get the idea.  I did not try very hard to
+optimize it nor make it more robust either.&lt;/p&gt;
+
+&lt;p&gt;A better argument for switching init system in Debian than reducing
+the size of init scripts (which is a good thing to do anyway), is to
+get boot system that is able to handle the kernel events sensibly and
+robustly, and do not depend on the boot to run sequentially.  The boot
+and the kernel have not behaved sequentially in year.&lt;/p&gt;
+</description>
+       </item>
+       
        <item>
                <title>Browser plugin for SPICE (spice-xpi) uploaded to Debian</title>
                <link>http://people.skolelinux.org/pere/blog/Browser_plugin_for_SPICE__spice_xpi__uploaded_to_Debian.html</link>