Maintainer script informative call graph

View: New views
9 Messages — Rating Filter:   Alert me  

Maintainer script informative call graph

by Manoj Srivastava :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,

        Inspired by Marga's excellent document claryfying the maintainer
 scripts at http://women.debian.org/wiki/English/MaintainerScripts, and
 also enthused about Emacs org-mode's ability to create a simple plain
 ascii input file and leveragte things like graphviz and ditaa, I have
 some up with a slightly different take on clarification of the
 maintainer script call sequence.

        Please have a look-see at:
 http://people.debian.org/~srivasta/MaintainerScripts.html

        I'm attaching the source below. I think I am going to continue
 to enhance it, but I ran out of steam tonight. I am proposing adding
 this to the policy package, once it gets polished a bit more, and
 checked for correctness.

        manoj


#+STARTUP: hidestars showall
#+TITLE:     Maintainer scripts
#+AUTHOR:    Manoj Srivastava
#+EMAIL:     srivasta@...
#+DATE:      <2009-10-16 Fri>
#+LANGUAGE:  en
#+OPTIONS:   H:0 num:nil toc:nil \n:nil @:t ::t |:t ^:t -:t f:t *:t TeX:t LaTeX:t skip:nil d:nil tags:not-in-toc
#+INFOJS_OPT: view:info toc:1 path:org-info.js tdepth:2 ftoc:t
#+LINK_UP:   http://www.golden-gryphon.com/blog/manoj/
#+LINK_HOME: http://www.golden-gryphon.com/

* Introduction

This document is meant to clarify the interaction between maintainer
scripts and the state changes for a package when a user interacts with
the packaging system. This was inspired by Margarita Manterola's
[[http://women.debian.org/wiki/English/MaintainerScripts][excellent treatise]] on the subject, but has a slightly different slant:
this document is more concerned about user actions, and the resulting
state transitions of a package's state on a Debian installation,
rather than a maintainer script centric treatment of the process.

* Common Use Cases

To start with, we consider the most common use cases related to a
user's interaction with the packaging system:

- *Install*: Starting with a package which is not installed on the
  system, the user asks the packaging system to install a package. If
  all goes well, the end result is that the package is installed on
  the system.
- *Remove*: Starting with a package that is currently installed on the
  system, the user asks the packaging system to remove it. If all goes
  well, only configuration files shall  remain on the system at the
  end.
- *Purge*: Starting with the state when only configuration files
  remain on the system, the user asks the package system to remove
  even the configuration files. If all goes well, the package will be
  fully un-installed.
- Starting with a package installed on the system, the user asks the
  system to fully uninstall the package. This is not an independent
  use case, it is just the /Remove/ followed by a /Purge/, and we do
  not consider it separately below.
- *Reinstall*: Starting with just the configuration files remaining on
  the system, the user asks the packaging system to install the
  package again (potentially newer version of the package).
- *Upgrade*: Starting with a version of the package installed on the
  system, the user asks the packaging system to install a newer
  version of the package. (A variation is the case where the old and
  the new version of the package are the same, but it follows the same
  process).

This is not as complex a scenario as one might be afraid of; there are
only three states a package may be in when the user initiates the
action (/Not Installed/, /Configuration files only/, and
/Installed/). These states are also successful terminal state, and
there are only three failure terminal states (/Half Installed/,
/Failed config/, and /Unpacked/).

In the treatment below, we do not discuss details of failure modes, we
just detail what happens when a maintainer script encounters an
error. Also, we do not go into early sanity checks, for example,
complications like the absence of a dependency when trying to
(re)install a package, or the presence of a conflicting package. We
also do not deal with the cases where the package we are trying to
remove has other installed packages that depend on it; in all these
cases the result is to abort the operation early, and let the user
handle further action.

** Install a previously unknown package

This is the case where a package is not currently installed on the
system, and the user asks the packaging system to install version
/V1/.

*** State diagram

#+begin_ditaa InstallState.png -r -o -s 0.8
+--------------------------------------------------------+
|       +------+                                         |
|       |      |                                         |
|       |      v                                         |
|   /---*------*----+             /------------------+   |
|   | Not Installed |             |   Half Installed |   |
|   |   cGRE        *------------>*      cRED        |   |
|   |               |             +------------------/   |
|   +---*------*----/                                    |
|       |      |                                         |
|       |      +--------------------------+              |
|       |                                 |              |
|       v                                 v              |
|   /---*-----------+             /-------*----------+   |
|   |   Installed   |             |    Failed Config |   |
|   |    cGRE       |             |    cRED          |   |
|   +---------------/             +------------------/   |
|                      cCCC                              |
+--------------------------------------------------------+
#+end_ditaa

*** Activity diagram

The green ellipses are the start states a package may be in, the Blue
labels represent user actions. The maintainer scripts are represented
by decision boxes, since usually how the process flows depends on
whether the maintainer scripts succeeds or fails. Terminal states are
/octagons/. The colors /green/ and /red/ denote success and failure,
respectively.

#+begin_dot InstallActivity.png -Tpng
digraph MaintainerScripts {
  bgcolor=gray3;
  center="true";
  charset="iso-8859-1";
  compound=true;
  concentrate=true;
  pack=true;
  outputorder="nodesfirst";

  /* Starting states */
  "Not-Installed"     [shape=ellipse,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#99FF99" ];
  /* Maybe Stating or Terminal states */
  "Installed-V1"      [shape=ellipse,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#99FF99" ];


  /* install V1*/
  "V1->\npreinst install"      [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V1->\npostrm abort-install" [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V1->\npostinst configure"   [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];

  /* Failure terminal states */
  "Half-Installed-V1" [shape=octagon,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#FFCCFF" ];
  "Failed-Config-V1"  [shape=octagon,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#FFCCFF" ];


  subgraph installation
  {
    "Not-Installed"              -> "V1->\npreinst install"      [fontsize=12,fontname="Times-Bold",label="Install",color="cyan",fontcolor=lightskyblue];
    "V1->\npreinst install"      -> "V1->\npostrm abort-install" [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\npreinst install"      -> "V1->\npostinst configure"   [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V1->\npostrm abort-install" -> "Half-Installed-V1"          [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\npostrm abort-install" -> "Not-Installed"              [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V1->\npostinst configure"   -> "Installed-V1"               [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V1->\npostinst configure"   -> "Failed-Config-V1"           [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
  }

 labelloc="t";
 label="\n";
 fontsize="32";
}

#+end_dot

** Remove and Purge an installed package

This is the reverse operation from above: starting with an installed
package, remove the package, and then purge the configuration files.

*** State diagram

#+begin_ditaa RemoveState.png -r -o -s 0.8
+--------------------------------------------------------+
|                                   /------------------+ |
|                                   |                  | |
|         +------------------------>* Installed        | |
|         |                         |    cRED          | |
|         |                         +------------------/ |
|     /---*-----------+             /------------------+ |
|     |  Installed    |             |   Half Installed | |
|     |   cGRE        |------------>*      cRED        | |
|     +---*------*----/             +------------------/ |
|         |      |                  /------------------+ |
|         |      |                  |                  | |
|         |      +----------------->* Failed Config    | |
|         v                         |     cRED         | |
|     /---*-----------+             +------------------/ |
|     | Config Files  |             /------------------+ |
| +-->*    cGRE       |             |                  | |
| |   |               *------------>*  Not Installed   | |
| +---*               |             |     cGRE         | |
|     +---------------/             +------------------/ |
|                         cCCC                           |
+--------------------------------------------------------+
#+end_ditaa

*** Activity Diagram

#+begin_dot RemoveActivity.png -Tpng
digraph MaintainerScripts {
  bgcolor=gray3;
  center="true";
  charset="iso-8859-1";
  compound=true;
  concentrate=true;
  pack=true;
  outputorder="nodesfirst";

  /* Starting states */
  "Installed-V1"      [shape=ellipse,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#99FF99" ];

  /* Removal and Purge */
  "V1->\nprerm remove"          [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V1->\npostinst abort-remove" [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V1->\npostrm remove"         [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V1->\npostrm purge"          [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];

  /* Maybe  Terminal states */
  "Not-Installed"     [shape=ellipse,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#99FF99" ];
  "Config-Files-V1"   [shape=ellipse,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#99FF00" ];


  /* Failure terminal states */
  "Half-Installed-V1" [shape=octagon,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#FFCCFF" ];
  "Failed-Config-V1"  [shape=octagon,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#FFCCFF" ];


  subgraph removal
  {
    "Installed-V1"                -> "V1->\nprerm remove"          [fontsize=12,fontname="Times-Bold",label="Remove",color="cyan",fontcolor=lightskyblue];
    "V1->\nprerm remove"          -> "V1->\npostinst abort-remove" [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\nprerm remove"          -> "V1->\npostrm remove"         [fontsize=9,fontname="Times-Roman",label="OK (del files)",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V1->\npostinst abort-remove" -> "Failed-Config-V1"            [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\npostinst abort-remove" -> "Installed-V1"                [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V1->\npostrm remove"         -> "Half-Installed-V1"           [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\npostrm remove"         -> "Config-Files-V1"             [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "Config-Files-V1"             -> "V1->\npostrm purge"          [fontsize=12,fontname="Times-Bold",label="Purge",color="cyan",fontcolor=lightskyblue];
    "V1->\npostrm purge"          -> "Config-Files-V1"             [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\npostrm purge"          -> "Not-Installed"               [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
  }

 labelloc="t";
 label="\n";
 fontsize="32";
}

#+end_dot


** Reinstall a package

This is the case where configuration files from a previous
installation still exist on the system, and the user asks the
packaging system to install a (potentially different) version of the
package.
*** State Diagram

#+begin_ditaa ReinstallState.png -r -o -s 0.8
+--------------------------------------------------------+
|       +------+                                         |
|       |      |                                         |
|       |      v                                         |
|   /---*------*----+             /------------------+   |
|   | Config Files  |             |   Half Installed |   |
|   |   cGRE        *------------>*      cRED        |   |
|   |               |             +------------------/   |
|   +---*------*----/                                    |
|       |      |                                         |
|       |      +--------------------------+              |
|       |                                 |              |
|       v                                 v              |
|   /---*-----------+             /-------*----------+   |
|   |   Installed   |             |    Failed Config |   |
|   |    cGRE       |             |    cRED          |   |
|   +---------------/             +------------------/   |
|                        cCCC                            |
+--------------------------------------------------------+
#+end_ditaa

*** Activity Diagram
#+begin_dot ReinstallActivity.png -Tpng
digraph MaintainerScripts {
  bgcolor=gray3;
  center="true";
  charset="iso-8859-1";
  compound=true;
  concentrate=true;
  pack=true;
  outputorder="nodesfirst";

  /* Starting states */
  "Config-Files-V1"   [shape=ellipse,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#99FF00" ];

  /* reinstall V2 (config files from V1 present) */
  "V2->\npreinst install V1"      [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V2->\npostrm abort-install V1" [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V2->\npostinst configure V1"   [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];

  /* Successful terminal states */
  "Installed-V2"      [shape=octagon,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#99FF99" ];
  /* Failure terminal states */
  "Half-Installed-V2" [shape=octagon,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#FFCCFF" ];
  "Failed-Config-V2"  [shape=octagon,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#FFCCFF" ];



  subgraph reinstall
  {
    "Config-Files-V1"               -> "V2->\npreinst install V1"       [fontsize=12,fontname="Times-Bold",label="Install V2",color="cyan",fontcolor=lightskyblue];
    "V2->\npreinst install V1"      -> "V2->\npostrm abort-install V1"  [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V2->\npreinst install V1"      -> "V2->\npostinst configure V1"    [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V2->\npostrm abort-install V1" -> "Half-Installed-V2"              [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V2->\npostrm abort-install V1" -> "Config-Files-V1"                [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V2->\npostinst configure V1"   -> "Failed-Config-V2"               [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V2->\npostinst configure V1"   -> "Installed-V2"                   [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
  }


 labelloc="t";
 label="\n";
 fontsize="32";
}

#+end_dot


** Upgrade a package to a new version

This is, perhaps unsurprisingly, the most complex operation of the
ones we have so far considered.
*** State Diagram

#+begin_ditaa UpgradeState.png -r -o -s 0.8
+--------------------------------------------------------+
|                                /-------------------+   |
|      +--+                      | Unpacked V1       |   |
|      |  |  +------------------>*  cRED             |   |
|      |  v  |                   +-------------------/   |
|  /---*--*--*-----+             /-------------------+   |
|  | Installed V1  |             | Half Installed V1 |   |
|  |   cGRE        *------------>*      cRED         |   |
|  |               |             +-------------------/   |
|  +---*------*-*--/             /-------------------+   |
|      |      | |                | Failed Config V1  |   |
|      |      | +--------------->*   cRED            |   |
|      |      |                  +-------------------/   |
|      v      +------------+                             |
|  /---*-----------+       |     /------------------+    |
|  |  Installed V2 |       |     | Failed Config V2 |    |
|  |    cGRE       |       +---->*     cRED         |    |
|  +---------------/             +------------------/    |
|                      cCCC                              |
+--------------------------------------------------------+
#+end_ditaa

*** Activity Diagram

#+begin_dot UpgradeActivity.png -Tpng
digraph MaintainerScripts {
  bgcolor=gray3;
  center="true";
  charset="iso-8859-1";
  compound=true;
  concentrate=true;
  pack=true;
  outputorder="nodesfirst";

  /* Starting states */
  "Installed-V1"      [shape=ellipse,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#99FF99" ];

  /* Upgrade from V1 to V2 */
  "V1->\nprerm upgrade V2"               [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V2->\nprerm failed-upgrade V1"        [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V1->\npostinst abort-upgrade V2->\na" [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V2->\npreinst upgrade V1"             [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V2->\npostrm abort-upgrade V1->\na"   [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V1->\npostinst abort-upgrade V2->\nb" [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V1->\npostrm upgrade V2"              [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V2->\npostrm failed-upgrade V2"       [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V1->\npreinst abort-upgrade V2"       [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V2->\npostrm abort-upgrade V1->\nb"   [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V2->\npostinst configure V1"          [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];

  "Installed-V2"      [shape=octagon,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#99FF99" ];
  /* Failure terminal states */
  "Half-Installed-V1" [shape=octagon,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#FFCCFF" ];
  "Failed-Config-V1"  [shape=octagon,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#FFCCFF" ];
  "Failed-Config-V2"  [shape=octagon,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#FFCCFF" ];
  "Unpacked-V1"       [shape=octagon,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#FFCCFF" ];


  subgraph upgrading
  {
    "Installed-V1"                         -> "V1->\nprerm upgrade V2"               [fontsize=12,fontname="Times-Bold",label="Install V2",color="cyan",fontcolor=lightskyblue];
    "V1->\nprerm upgrade V2"               -> "V2->\nprerm failed-upgrade V1"        [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\nprerm upgrade V2"               -> "V2->\npreinst upgrade V1"             [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V2->\nprerm failed-upgrade V1"        -> "V1->\npostinst abort-upgrade V2->\na" [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V2->\nprerm failed-upgrade V1"        -> "V2->\npreinst upgrade V1"             [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V1->\npostinst abort-upgrade V2->\na" -> "Failed-Config-V1"                     [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\npostinst abort-upgrade V2->\na" -> "Installed-V1"                         [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V2->\npreinst upgrade V1"             -> "V2->\npostrm abort-upgrade V1->\na"   [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V2->\npreinst upgrade V1"             -> "V1->\npostrm upgrade V2"              [fontsize=9,fontname="Times-Roman",label="OK (unpack)",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V2->\npostrm abort-upgrade V1->\na"   -> "Half-Installed-V1"                    [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V2->\npostrm abort-upgrade V1->\na"   -> "V1->\npostinst abort-upgrade V2->\nb" [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V1->\npostinst abort-upgrade V2->\nb" -> "Unpacked-V1"                          [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\npostinst abort-upgrade V2->\nb" -> "Installed-V1"                         [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V1->\npostrm upgrade V2"              -> "V2->\npostrm failed-upgrade V2"       [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\npostrm upgrade V2"              -> "V2->\npostinst configure V1"          [fontsize=9,fontname="Times-Roman",label="OK (del old)",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V2->\npostrm failed-upgrade V2"       -> "V1->\npreinst abort-upgrade V2"       [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V2->\npostrm failed-upgrade V2"       -> "V2->\npostinst configure V1"          [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V1->\npreinst abort-upgrade V2"       -> "Half-Installed-V1"                    [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\npreinst abort-upgrade V2"       -> "V2->\npostrm abort-upgrade V1->\nb"   [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V2->\npostrm abort-upgrade V1->\nb"   -> "Half-Installed-V1"                    [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V2->\npostrm abort-upgrade V1->\nb"   -> "V1->\npostinst abort-upgrade V2->\nb" [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V2->\npostinst configure V1"          -> "Failed-Config-V2"                     [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V2->\npostinst configure V1"          -> "Installed-V2"                         [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
 }

 labelloc="t";
 label="\n";
 fontsize="32";
}

#+end_dot

* Conclusion

In conclusion, here is the full activity diagram encompassing the
above use cases. While this is certainly complex, it is still fairly
easy to see how the use cases flow from the initial states (the green
ellipses), through the decision points (the blue diamonds of the
maintainer script execution), to the octagonal terminal states.

#+begin_dot Activity.png -Tpng
digraph MaintainerScripts {
  bgcolor=gray3;
  center="true";
  charset="iso-8859-1";
  compound=true;
  concentrate=true;
  pack=true;
  outputorder="nodesfirst";

  /* Starting states */
  "Not-Installed"     [shape=ellipse,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#99FF99" ];
  /* Maybe Stating or Terminal states */
  "Config-Files-V1"   [shape=ellipse,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#99FF00" ];
  "Installed-V1"      [shape=ellipse,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#99FF99" ];


  /* install V1*/
  "V1->\npreinst install"      [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V1->\npostrm abort-install" [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V1->\npostinst configure"   [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];

  /* Removal and Purge */
  "V1->\nprerm remove"          [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V1->\npostinst abort-remove" [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V1->\npostrm remove"         [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V1->\npostrm purge"          [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];

  /* reinstall V2 (config files from V1 present) */
  "V2->\npreinst install V1"      [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V2->\npostrm abort-install V1" [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V2->\npostinst configure V1"   [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];

  /* Upgrade from V1 to V2 */
  "V1->\nprerm upgrade V2"               [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V2->\nprerm failed-upgrade V1"        [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V1->\npostinst abort-upgrade V2->\na" [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V2->\npreinst upgrade V1"             [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V2->\npostrm abort-upgrade V1->\na"   [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V1->\npostinst abort-upgrade V2->\nb" [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V1->\npostrm upgrade V2"              [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V2->\npostrm failed-upgrade V2"       [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V1->\npreinst abort-upgrade V2"       [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];
  "V2->\npostrm abort-upgrade V1->\nb"   [shape=diamond,style=filled,fillcolor="#CCFFFF",fontsize=9,fontname="Times-Roman"];

  /* Successful terminal states */
  "Installed-V2"      [shape=octagon,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#99FF99" ];
  /* Failure terminal states */
  "Half-Installed-V1" [shape=octagon,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#FFCCFF" ];
  "Half-Installed-V2" [shape=octagon,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#FFCCFF" ];
  "Failed-Config-V1"  [shape=octagon,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#FFCCFF" ];
  "Failed-Config-V2"  [shape=octagon,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#FFCCFF" ];
  "Unpacked-V1"       [shape=octagon,fontsize=12,fontname="Times-Bold",style=filled,fillcolor="#FFCCFF" ];


  subgraph installation
  {
    "Not-Installed"              -> "V1->\npreinst install"      [fontsize=12,fontname="Times-Bold",label="Install",color="cyan",fontcolor=lightskyblue];
    "V1->\npreinst install"      -> "V1->\npostrm abort-install" [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\npreinst install"      -> "V1->\npostinst configure"   [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V1->\npostrm abort-install" -> "Half-Installed-V1"          [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\npostrm abort-install" -> "Not-Installed"              [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V1->\npostinst configure"   -> "Installed-V1"               [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V1->\npostinst configure"   -> "Failed-Config-V1"           [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
  }

  subgraph removal
  {
    "Installed-V1"                -> "V1->\nprerm remove"          [fontsize=12,fontname="Times-Bold",label="Remove",color="cyan",fontcolor=lightskyblue];
    "V1->\nprerm remove"          -> "V1->\npostinst abort-remove" [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\nprerm remove"          -> "V1->\npostrm remove"         [fontsize=9,fontname="Times-Roman",label="OK (del files)",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V1->\npostinst abort-remove" -> "Failed-Config-V1"            [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\npostinst abort-remove" -> "Installed-V1"                [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V1->\npostrm remove"         -> "Half-Installed-V1"           [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\npostrm remove"         -> "Config-Files-V1"             [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "Config-Files-V1"             -> "V1->\npostrm purge"          [fontsize=12,fontname="Times-Bold",label="Purge",color="cyan",fontcolor=lightskyblue];
    "V1->\npostrm purge"          -> "Config-Files-V1"             [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\npostrm purge"          -> "Not-Installed"               [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
  }

  subgraph reinstall
  {
    "Config-Files-V1"               -> "V2->\npreinst install V1"       [fontsize=12,fontname="Times-Bold",label="Install V2",color="cyan",fontcolor=lightskyblue];
    "V2->\npreinst install V1"      -> "V2->\npostrm abort-install V1"  [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V2->\npreinst install V1"      -> "V2->\npostinst configure V1"    [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V2->\npostrm abort-install V1" -> "Half-Installed-V2"              [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V2->\npostrm abort-install V1" -> "Config-Files-V1"                [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V2->\npostinst configure V1"   -> "Failed-Config-V2"               [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V2->\npostinst configure V1"   -> "Installed-V2"                   [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
  }

  subgraph upgrading
  {
    "Installed-V1"                         -> "V1->\nprerm upgrade V2"               [fontsize=12,fontname="Times-Bold",label="Install V2",color="cyan",fontcolor=lightskyblue];
    "V1->\nprerm upgrade V2"               -> "V2->\nprerm failed-upgrade V1"        [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\nprerm upgrade V2"               -> "V2->\npreinst upgrade V1"             [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V2->\nprerm failed-upgrade V1"        -> "V1->\npostinst abort-upgrade V2->\na" [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V2->\nprerm failed-upgrade V1"        -> "V2->\npreinst upgrade V1"             [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V1->\npostinst abort-upgrade V2->\na" -> "Failed-Config-V1"                     [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\npostinst abort-upgrade V2->\na" -> "Installed-V1"                         [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V2->\npreinst upgrade V1"             -> "V2->\npostrm abort-upgrade V1->\na"   [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V2->\npreinst upgrade V1"             -> "V1->\npostrm upgrade V2"              [fontsize=9,fontname="Times-Roman",label="OK (unpack)",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V2->\npostrm abort-upgrade V1->\na"   -> "Half-Installed-V1"                    [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V2->\npostrm abort-upgrade V1->\na"   -> "V1->\npostinst abort-upgrade V2->\nb" [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V1->\npostinst abort-upgrade V2->\nb" -> "Unpacked-V1"                          [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\npostinst abort-upgrade V2->\nb" -> "Installed-V1"                         [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V1->\npostrm upgrade V2"              -> "V2->\npostrm failed-upgrade V2"       [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\npostrm upgrade V2"              -> "V2->\npostinst configure V1"          [fontsize=9,fontname="Times-Roman",label="OK (del old)",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V2->\npostrm failed-upgrade V2"       -> "V1->\npreinst abort-upgrade V2"       [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V2->\npostrm failed-upgrade V2"       -> "V2->\npostinst configure V1"          [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V1->\npreinst abort-upgrade V2"       -> "Half-Installed-V1"                    [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V1->\npreinst abort-upgrade V2"       -> "V2->\npostrm abort-upgrade V1->\nb"   [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
    "V2->\npostrm abort-upgrade V1->\nb"   -> "Half-Installed-V1"                    [fontsize=9,fontname="Times-Roman",label="Failed",color="firebrick",fontcolor="#FF6633",decorate="true"];
    "V2->\npostrm abort-upgrade V1->\nb"   -> "V1->\npostinst abort-upgrade V2->\nb" [fontsize=9,fontname="Times-Roman",label="OK",color="chartreuse",fontcolor="#009900",decorate="true"];
 }

 labelloc="t";
 label="\n";
 fontsize="32";
}

#+end_dot



# Local variables:
# mode: org
# fill-column: 72
# End:


--
"One man's mate is another man's passion." Jeff Daiell's description of
adultery
Manoj Srivastava <srivasta@...> <http://www.debian.org/~srivasta/>  
1024D/BF24424C print 4966 F272 D093 B493 410B  924B 21BA DABB BF24 424C

Re: Maintainer script informative call graph

by Raphael Hertzog-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Fri, 16 Oct 2009, Manoj Srivastava wrote:
>         Please have a look-see at:
>  http://people.debian.org/~srivasta/MaintainerScripts.html
>
>         I'm attaching the source below. I think I am going to continue
>  to enhance it, but I ran out of steam tonight. I am proposing adding
>  this to the policy package, once it gets polished a bit more, and
>  checked for correctness.

It would be nice if it could be updated to take into account the trigger
support. We have new states (triggers-awaited, triggers-pending) and new
postinst argument for this.

Cheers,
--
Raphaël Hertzog


--
To UNSUBSCRIBE, email to debian-policy-REQUEST@...
with a subject of "unsubscribe". Trouble? Contact listmaster@...


Re: Maintainer script informative call graph

by Manoj Srivastava :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Fri, Oct 16 2009, Raphael Hertzog wrote:

> On Fri, 16 Oct 2009, Manoj Srivastava wrote:
>>         Please have a look-see at:
>>  http://people.debian.org/~srivasta/MaintainerScripts.html
>>
>>         I'm attaching the source below. I think I am going to continue
>>  to enhance it, but I ran out of steam tonight. I am proposing adding
>>  this to the policy package, once it gets polished a bit more, and
>>  checked for correctness.
>
> It would be nice if it could be updated to take into account the trigger
> support. We have new states (triggers-awaited, triggers-pending) and new
> postinst argument for this.

        I have added that, as well as the deconfigure/removal of
 conflicting packages and their dependencies,  though I think it is with
 a major impact on  simplicity. However, of this is going to policy,
 there is something to be said about vying for completeness. I see why
 marga elected to elide these details.

        So, a new version is up at the above URL, please check for
 correctness.  I think I have incorporated everything that is in policy
 in this document now.

        Incidentally, this reminds me that the trigger stuff is not
 documented in policy, and I think needs to be, can someone better
 acquainted with triggers take the lead in crafting the wording for
 policy? (I must confess I had to read code in order to get my head
 wrapped around "awaiting" and pending and the distinction between these
 two -- and the fact that I tend to link pulling a trigger with
 instantaneous activityy, like something going Ka-Pow).

        manoj
--
Krogt, n. (chemical symbol: Kr): The metallic silver coating found on
fast-food game cards. Rich Hall, "Sniglets"
Manoj Srivastava <srivasta@...> <http://www.debian.org/~srivasta/>  
1024D/BF24424C print 4966 F272 D093 B493 410B  924B 21BA DABB BF24 424C


--
To UNSUBSCRIBE, email to debian-policy-REQUEST@...
with a subject of "unsubscribe". Trouble? Contact listmaster@...


Informative addendum to policy clarifying dpkg/maintainer script interface

by Manoj Srivastava :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,

        I have created a document to clarify the interaction between
 maintainer scripts and dpkg, and examines the state changes for a
 package when a user interacts with the packaging system. The dynamic
 interactions between the packaging system and the package's maintainer
 scripts are described formally using UML diagrams. This document does
 not attempt to describe what the maintainer scripts can or can not do,
 concentrating instead mostly one the packaging system interface. It
 also provides a call graph of the maintainer scripts.

        This document is meant to be informative, not normative, at this
 point, and is presented here mostly since the maintainer scripts
 interaction section of policy is one of the more opaque
 segments. However, it also is trying to formally define the packaging
 system interface formally, and is meant to become normative at some
 point in the future, once it has buy in from the interested parties and
 has been checked for correctness.

        An early draft was sent over to the debian policy mailing list,
 but I thought the time has come to widen the audience a bit. Any
 feedback is appreciated. Please follow up to the policy list
 (debian-policy@... mailing.) Especially welcome would be
 any feedback from the dpkg folk about correctness of the interactions
 depicted.

        Oh, and before I forget, this is where the document lives currently:

 http://people.debian.org/~srivasta/MaintainerScripts.html

        Thanks in advance,

        manoj
--
Today is a good day to bribe a high-ranking public official.
Manoj Srivastava <srivasta@...> <http://www.debian.org/~srivasta/>  
1024D/BF24424C print 4966 F272 D093 B493 410B  924B 21BA DABB BF24 424C


--
To UNSUBSCRIBE, email to debian-policy-REQUEST@...
with a subject of "unsubscribe". Trouble? Contact listmaster@...


Re: Informative addendum to policy clarifying dpkg/maintainer script interface

by Patrick Matthäi-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Manoj Srivastava schrieb:

> Hi,
>
>         I have created a document to clarify the interaction between
>  maintainer scripts and dpkg, and examines the state changes for a
>  package when a user interacts with the packaging system. The dynamic
>  interactions between the packaging system and the package's maintainer
>  scripts are described formally using UML diagrams. This document does
>  not attempt to describe what the maintainer scripts can or can not do,
>  concentrating instead mostly one the packaging system interface. It
>  also provides a call graph of the maintainer scripts.
>
>         This document is meant to be informative, not normative, at this
>  point, and is presented here mostly since the maintainer scripts
>  interaction section of policy is one of the more opaque
>  segments. However, it also is trying to formally define the packaging
>  system interface formally, and is meant to become normative at some
>  point in the future, once it has buy in from the interested parties and
>  has been checked for correctness.
>
>         An early draft was sent over to the debian policy mailing list,
>  but I thought the time has come to widen the audience a bit. Any
>  feedback is appreciated. Please follow up to the policy list
>  (debian-policy@... mailing.) Especially welcome would be
>  any feedback from the dpkg folk about correctness of the interactions
>  depicted.
>
>         Oh, and before I forget, this is where the document lives currently:
>
>  http://people.debian.org/~srivasta/MaintainerScripts.html
>
>         Thanks in advance,
>
>         manoj

Nice work, but I think it would be a good idea to declare every
parameter from dpkg to the maintainer script.

- --
/*
Mit freundlichem Gruß / With kind regards,
 Patrick Matthäi
 GNU/Linux Debian Developer

E-Mail: pmatthaei@...
        patrick@...

Comment:
Always if we think we are right,
we were maybe wrong.
*/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iEYEARECAAYFAkrcjoUACgkQ2XA5inpabMdMuACeP1DH1+Aduj3JInD92Z1pbsai
Z7MAnjkaA8jFnKqu277wVyKcR0LQDM7Q
=wRho
-----END PGP SIGNATURE-----


--
To UNSUBSCRIBE, email to debian-policy-REQUEST@...
with a subject of "unsubscribe". Trouble? Contact listmaster@...


Re: Informative addendum to policy clarifying dpkg/maintainer script interface

by Manoj Srivastava :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Mon, Oct 19 2009, Patrick Matthäi wrote:

> Manoj Srivastava schrieb:
>> Hi,
>>
>>         I have created a document to clarify the interaction between
>>  maintainer scripts and dpkg, and examines the state changes for a
>>  package when a user interacts with the packaging system. The dynamic
>>  interactions between the packaging system and the package's maintainer
>>  scripts are described formally using UML diagrams. This document does
>>  not attempt to describe what the maintainer scripts can or can not do,
>>  concentrating instead mostly one the packaging system interface. It
>>  also provides a call graph of the maintainer scripts.
>>
>>         This document is meant to be informative, not normative, at this
>>  point, and is presented here mostly since the maintainer scripts
>>  interaction section of policy is one of the more opaque
>>  segments. However, it also is trying to formally define the packaging
>>  system interface formally, and is meant to become normative at some
>>  point in the future, once it has buy in from the interested parties and
>>  has been checked for correctness.
>>
>>         An early draft was sent over to the debian policy mailing list,
>>  but I thought the time has come to widen the audience a bit. Any
>>  feedback is appreciated. Please follow up to the policy list
>>  (debian-policy@... mailing.) Especially welcome would be
>>  any feedback from the dpkg folk about correctness of the interactions
>>  depicted.
>>
>>         Oh, and before I forget, this is where the document lives currently:
>>
>>  http://people.debian.org/~srivasta/MaintainerScripts.html
>>
>>         Thanks in advance,
>>
>>         manoj
>
> Nice work, but I think it would be a good idea to declare every
> parameter from dpkg to the maintainer script.

        Could you elaborate as to where you want to see these
 parameters? Isn't this already covered fairly cleanly in policy? I tend
 to find §6.5 (Summary of ways maintainer scripts are called) fairly
 straightforward,  §6.6, 6.7, and 6.8 are the ones I  find akin to a
 maze of twisty little passages, all alike.

        manoj
--
A 'full' life in my experience is usually full only of other people's
demands.
Manoj Srivastava <srivasta@...> <http://www.debian.org/~srivasta/>  
1024D/BF24424C print 4966 F272 D093 B493 410B  924B 21BA DABB BF24 424C


--
To UNSUBSCRIBE, email to debian-policy-REQUEST@...
with a subject of "unsubscribe". Trouble? Contact listmaster@...


Re: Informative addendum to policy clarifying dpkg/maintainer script interface

by Frank Küster :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Manoj Srivastava <srivasta@...> wrote:

> Hi,
>
>         I have created a document to clarify the interaction between
>  maintainer scripts and dpkg, and examines the state changes for a
>  package when a user interacts with the packaging system.

Thank you, that looks very useful.  What I'm missing, however, is any
reference to debconf's config script.  Isn't that called by dpkg, too?

Regards, Frank
--
Dr. Frank Küster
Debian Developer (TeXLive)
VCD Aschaffenburg-Miltenberg, ADFC Miltenberg
B90/Grüne KV Miltenberg


--
To UNSUBSCRIBE, email to debian-policy-REQUEST@...
with a subject of "unsubscribe". Trouble? Contact listmaster@...


Re: Informative addendum to policy clarifying dpkg/maintainer script interface

by Manoj Srivastava :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Wed, Oct 21 2009, Frank Küster wrote:

> Manoj Srivastava <srivasta@...> wrote:
>
>> Hi,
>>
>>         I have created a document to clarify the interaction between
>>  maintainer scripts and dpkg, and examines the state changes for a
>>  package when a user interacts with the packaging system.
>
> Thank you, that looks very useful.  What I'm missing, however, is any
> reference to debconf's config script.  Isn't that called by dpkg, too?

        Hmm. There are three different ways the config script is called,
 one is (for apt version 0.5 or above) via /etc/apt/apt.conf.d/70debconf
 -- this calls dpkg-preconfigure (8) to do to preconfigure the packages
 it is trying to install. That is beyond the scope of the document,
 since it is just an external program (apt) calling dpkg-preconfigure;
 and no package state change happens here -- this is just a debconf db
 update thing.

        The second way is when you  initiate debconf/confmodule in your
 postinst, then debconf  tries to call the config script again; this
 activity is thus part of what the postinst does, and not something this
 document covers (since we do not say anything about what maintainer
 scripts do or not do, just how they are called and what they return).

        Thirdly, if you call dpkg-reconfigure, the config script is run,
 but, again, this document is not documenting dpkg-reconfigure (or
 dpkg-preconfigure).  As far asI can see, dpkg-preconfigure also doe
 snot cause a package state transition, it just runs  the scripts
 (prerm. config, postinst).

        Could the dpkg folks chine in if I am wrong?

        manoj
--
Bugs, pl. n.: Small living things that small living boys throw on small
living girls.
Manoj Srivastava <srivasta@...> <http://www.debian.org/~srivasta/>  
1024D/BF24424C print 4966 F272 D093 B493 410B  924B 21BA DABB BF24 424C


--
To UNSUBSCRIBE, email to debian-policy-REQUEST@...
with a subject of "unsubscribe". Trouble? Contact listmaster@...


Re: Informative addendum to policy clarifying dpkg/maintainer script interface

by Guillem Jover :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi!

On Wed, 2009-10-21 at 20:01:00 -0500, Manoj Srivastava wrote:

> On Wed, Oct 21 2009, Frank Küster wrote:
> > Thank you, that looks very useful.  What I'm missing, however, is any
> > reference to debconf's config script.  Isn't that called by dpkg, too?
>
>         Hmm. There are three different ways the config script is called,
>  one is (for apt version 0.5 or above) via /etc/apt/apt.conf.d/70debconf
>  -- this calls dpkg-preconfigure (8) to do to preconfigure the packages
>  it is trying to install. That is beyond the scope of the document,
>  since it is just an external program (apt) calling dpkg-preconfigure;
>  and no package state change happens here -- this is just a debconf db
>  update thing.
>
>         The second way is when you  initiate debconf/confmodule in your
>  postinst, then debconf  tries to call the config script again; this
>  activity is thus part of what the postinst does, and not something this
>  document covers (since we do not say anything about what maintainer
>  scripts do or not do, just how they are called and what they return).
>
>         Thirdly, if you call dpkg-reconfigure, the config script is run,
>  but, again, this document is not documenting dpkg-reconfigure (or
>  dpkg-preconfigure).  As far asI can see, dpkg-preconfigure also doe
>  snot cause a package state transition, it just runs  the scripts
>  (prerm. config, postinst).
>
>         Could the dpkg folks chine in if I am wrong?

This seems about right.

regards,
guillem


--
To UNSUBSCRIBE, email to debian-policy-REQUEST@...
with a subject of "unsubscribe". Trouble? Contact listmaster@...