[Pkg-sysvinit-devel] Request for dh_installinit and/or update-rc.d

Marc MERLIN marc at merlins.org
Wed Apr 27 22:08:09 UTC 2011


On Tue, Mar 22, 2011 at 08:19:15AM -0700, Marc MERLIN wrote:
> Hi,
> 
> I work on debian packages that need to have all their files as part of the
> package.
> 
> As a result, the normal dh_installinit that creates a postinst that runs
> update-rc.d is no good for me since the symlink files aren't part of the
> package.
> 
> It would be fantastic if dh_installinit could grow an option that tells it
> to make the rcX.d symlinks at package build time.
> 
> However for now I figured I would just use update-rc.d to make my own
> symlinks in the foo/debian/packagename/ directory at build time.
> But then I realized that it has 
> my $initd = "/etc/init.d";
> my $etcd  = "/etc/rc";
> hardcoded in it, with no override capability.
> 
> It would be great if update-rc.d could take a command line option and/or an
> env variable to allow replacing those 2 variables, or at least the '/etc'
> prefix (which would be good enough for me here).
> 
> Joey (hi :), I'm not sure if my feature request for dh_installinit is
> reasonable within your vision or would even happen.
> 
> Sysvinit maintainers, separately, would you consider adding a patch like
> the one below?
 
Hi Guys,

we now use the patch below at google for our internal packages due to our
requirement that all files on the filesystem need to be part of a package
(i.e. update-rc.d dropping files in postinstall is no good).

I didn't really hear back last time :)
Would Joey either be happy with supporting dh_installinit creating symlinks
at package build time, or Sysvinit maintainers, would you be ok with my
patch below?

Thanks,
Marc

> Thanks,
> Marc
> -- 
> "A mouse is a device used to point at the xterm you want to type in" - A.S.R.
> Microsoft is to operating systems & security ....
>                                       .... what McDonalds is to gourmet cooking
> Home page: http://marc.merlins.org/  

> --- /usr/sbin/update-rc.d	2010-09-24 11:16:41.000000000 -0700
> +++ /tmp/update-rc.d	2011-03-22 08:14:35.152011532 -0700
> @@ -6,8 +6,18 @@
>  use strict;
>  use warnings;
>  
> -my $initd = "/etc/init.d";
> -my $etcd  = "/etc/rc";
> +my $prefix ='/etc';
> +if ($ENV{'RCD_PREFIX'})
> +{
> +    $prefix = $ENV{'RCD_PREFIX'};
> +    foreach my $dir (qw(rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc5.d rc6.d rcS.d))
> +    {
> +	mkdir ("$prefix/$dir", 0755);
> +    }
> +}
> +
> +my $initd = "$prefix/init.d";
> +my $etcd  = "$prefix/rc";
>  my $notreally = 0;
>  
>  # Print usage message and die.
> @@ -30,7 +40,7 @@
>  # Dependency based boot sequencing is the default, but upgraded
>  # systems might keep the legacy ordering until the sysadm choose to
>  # migrate to the new ordering method.
> -if ( ! -f "/etc/init.d/.legacy-bootordering" ) {
> +if ( ! -f "$initd/.legacy-bootordering" and $prefix eq '/etc') {
>      info("using dependency based boot sequencing");
>      exit insserv_updatercd(@ARGV);
>  }
> @@ -52,7 +62,7 @@
>      my ($script, @arguments) = @_;
>      my $archive = "/var/lib/update-rc.d";
>  
> -    return if $notreally;
> +    return if ($notreally or $prefix ne "/etc");
>  
>      open(FILE, ">", "$archive/${script}.new") || die;
>      print FILE join(" ","update-rc.d", at arguments), "\n";
> @@ -376,7 +386,7 @@
>      $scriptname = shift @args;
>      $action = shift @args;
>      if ("remove" eq $action) {
> -        if ( -f "/etc/init.d/$scriptname" ) {
> +        if ( -f "$initd/$scriptname" ) {
>              my $rc = system "insserv", @opts, "-r", $scriptname;
>              if (0 == $rc && !$notreally) {
>                  save_last_action($scriptname, @orig_argv);
> @@ -398,14 +408,14 @@
>          # with Default-Start/Default-Stop values of LSB comment.
>          cmp_args_with_defaults($scriptname, $action, @args);
>  
> -        if ( -f "/etc/init.d/$scriptname" ) {
> +        if ( -f "$initd/$scriptname" ) {
>              my $rc = system "insserv", @opts, $scriptname;
>              if (0 == $rc && !$notreally) {
>                  save_last_action($scriptname, @orig_argv);
>              }
>              exit $rc;
>          } else {
> -            error("initscript does not exist: /etc/init.d/$scriptname");
> +            error("initscript does not exist: $initd/$scriptname");
>          }
>      } elsif ("disable" eq $action || "enable" eq $action) {
>          insserv_toggle($notreally, $action, $scriptname, @args);
> @@ -451,7 +461,7 @@
>  sub lsb_header_for_script {
>      my $name = shift;
>  
> -    foreach my $file ("/etc/insserv/overrides/$name", "/etc/init.d/$name",
> +    foreach my $file ("/etc/insserv/overrides/$name", "$initd/$name",
>                        "/usr/share/insserv/overrides/$name") {
>          return $file if -s $file;
>      }
> @@ -464,7 +474,7 @@
>      my ($lsb_start_ref, $lsb_stop_ref, $arg_str, $lsb_str);
>      my (@arg_start_lvls, @arg_stop_lvls, @lsb_start_lvls, @lsb_stop_lvls);
>  
> -    ($lsb_start_ref, $lsb_stop_ref) = parse_def_start_stop("/etc/init.d/$name");
> +    ($lsb_start_ref, $lsb_stop_ref) = parse_def_start_stop("$initd/$name");
>      @lsb_start_lvls = @$lsb_start_ref;
>      @lsb_stop_lvls  = @$lsb_stop_ref;
>      return if (!@lsb_start_lvls and !@lsb_stop_lvls);


-- 
"A mouse is a device used to point at the xterm you want to type in" - A.S.R.
Microsoft is to operating systems & security ....
                                      .... what McDonalds is to gourmet cooking
Home page: http://marc.merlins.org/  



More information about the Pkg-sysvinit-devel mailing list