home *** CD-ROM | disk | FTP | other *** search
/ Dream 46 / Amiga_Dream_46.iso / bo / extras / doc / package-developer / pkgtool / dpkg-feature-list.txt < prev    next >
Text File  |  2000-04-11  |  12KB  |  281 lines

  1. Feature-list for dpkg &c
  2. ========================
  3.  
  4. Last modified: Apr 12 1997
  5.  
  6. This document should bring to everyones mind that dpkg lacks some
  7. features.  There is a group working on dpkg.  This text shall bring
  8. to our minds what exactly is missing.
  9.  
  10. This list is maintained by Joey (Martin Schulze <joey@debian.org>).
  11. Comments and additions should be mailed to him in private mail (a Cc:
  12. from a list might get lost).
  13.  
  14.  
  15. Table of contents
  16.  
  17. 1. dselect should capture output while installing
  18. 2. Prune some directories while installation
  19. 3. dpkg should not overwrite files from other packages without replaces
  20. 4. Divide dpkg
  21. 5. dpkg should use cache fils
  22. 6. dselect should shorten its list
  23. 7. We need a new user interface
  24. 8. Network aware dpkg.
  25.  
  26.  
  27. Although I include From:, Date: and some other headers this doesn't
  28. imply that the person has written the following text exactly.  It
  29. should only be a hint on who did submit this request and where you
  30. might get further information on this particular request.
  31.  
  32. 1. dselect should capture output while installing
  33.  
  34.    From: joey@debian.org (Martin Schulze)
  35.  
  36.    While installing a list of packages - you normally perform this
  37.    action during the first installation - messages such as 'file xxx
  38.    not found' rush through the screen.
  39.  
  40.    At the moment there's no possibility to get this messages and
  41.    correct something.
  42.  
  43.    dselect should somehow try to capture these messages to allow the
  44.    user to browse through them at the end of the installation.
  45.  
  46. 2. Prune some directories while installation
  47.  
  48.    From: Philippe Troin <phil@fifi.org>
  49.    Date: Thu, 10 Apr 1997 23:27:57 -0700
  50.  
  51.    At the moment it is very difficult to install Debian GNU/Linux on
  52.    machines that have parts of their filesystem mounted read-only via NFS.
  53.  
  54.    What about a configuration file for dpkg which would allow
  55.    unpacking with pruning ?
  56.  
  57.    Let me explain, a file /etc/dpkg.prune could contain a list a
  58.    directories not to extract into !
  59.  
  60.    Rationale: If one wants to have a NFS mounted /usr, he should be
  61.    able to install the full packages on the NFS server, and install
  62.    the same packages on the NFS client machines, but with pruning
  63.    anything under /usr. The packages would still install the needed
  64.    file in /var, /etc,... but nothing under /usr.  This would be a
  65.    killer feature for network installs, and must be straightforward to
  66.    implement !
  67.  
  68.    As a side effect, this would end the /usr/local complaints...
  69.  
  70. 3. dpkg should not overwrite files from other packages without replaces
  71.  
  72.    From: Christoph <debian@waterf.org>
  73.    From: Rob Browning <osiris@cs.utexas.edu>
  74.  
  75.    The habit of dpkg to have --force-overwrite as a default has always
  76.    puzzled me. IMHO it is a bug if a package overwrites files without a
  77.    replaces: field in control. --force-overwrite should never be
  78.    automatically enabled as it is right now.
  79.  
  80.    It's a historical artifact.  When the ability to detect and abort
  81.    on this condition was first introduced, it was on by default, but
  82.    it broke the installation of so many packages at the time (mostly
  83.    man page problems) that it was "temporarily" disabled.  Temporarily
  84.    was not supposed to become permanently...
  85.  
  86. 4. Divide dpkg
  87.  
  88.    From: Tom Lees <tom@lpsg.demon.co.uk>
  89.    From: Martin Schulze <joey@debian.org>
  90.    From: Jason Gunthorpe <jgg@gpu.srv.ualberta.ca>
  91.  
  92.    The whole dpkg system should be divided in at least the following
  93.    parts:
  94.  
  95.    o backend library/libraries
  96.    o commandline utilities: dpkg, dpkg-deb &c
  97.    o some user interfaces: new dselect, X11 dselect, web-frontend
  98.  
  99.    Having split the library from the frontend(s) it is possible to
  100.    invent new user frontends.  The library has to provide a clear and
  101.    powerful API.
  102.  
  103.    The library that dselect needs to begin to function is thankfully
  104.    pretty simple, so it can be pounded out in about a week or
  105.    less. After that they would hopefully be totally separate,
  106.    functions being added to the library as new needs are discovered,
  107.    etc..
  108.  
  109.    Maybe we should split the dselect effort into two groups: one group
  110.    to design and implement a library with an simple elegant API to
  111.    interface with the dpkg-libraries. This should start with a
  112.    C-library and could later be extended with a C++-wrapper. The
  113.    second group should work on the interface. Using this method it is
  114.    possible to start with adapting the current dpkg-code to the new
  115.    API. Changes (or new implementations) of the library code can then
  116.    be used as drop-in replacements so no changes to the user interface
  117.    is necessary.
  118.  
  119.    I suspect the old code will be used as a template from which to
  120.    write the next generation.
  121.  
  122.    I recommend the use of C++ simply because it would result in a much
  123.    cleaner client side implementation, a reduced function C
  124.    translation library could be added at some later date if it is
  125.    really needed, in truth traditional C programers can realtively
  126.    easially make use of a C++ class library without a very big
  127.    learning curve.
  128.  
  129.    As an example, an attractive reason is G Lib++'s bstring class, a
  130.    reference counted string. Using a class like this and carefully
  131.    parseing the status/avil files could easially cut memory use in
  132.    half. Doing something similar in C is.. Unpleasant.
  133.  
  134.    Of course I'd much rather write Object Oriented C++ with clear
  135.    evidence of communication and control than write Object Oriented C
  136.    with nothing but comments to act as a guide. (I've long since given
  137.    up on procedural C)
  138.  
  139.    There is only one compelling reason to ever choose C, and this is
  140.    if you do not know C++, or the people who are going to be using
  141.    your code do not understand enough C++ to make sense of
  142.    it. dpkg-lib is going to be simple enough C++ that nothing complex
  143.    like virtual functions, iheritance and whatnot will be a major
  144.    issue.
  145.  
  146. 5. dpkg should use cache fils
  147.  
  148.    From: Tom Lees <tom@lpsg.demon.co.uk>
  149.    From: Martin Schulze <joey@debian.org>
  150.    From: Jason Gunthorpe <jgg@gpu.srv.ualberta.ca>
  151.  
  152.    It could also be made a lot more optimal. For example, as far as I
  153.    know, not many packages except for dpkg itself absolutely DEPEND on
  154.    having the available and status files as text (menu, dpkg-ftp,
  155.    dftp? only), so why not reimplement them as btree-sorted,
  156.    ultra-efficient files (using Berkeley libdb, for example), to make
  157.    things easier. As someone said earlier, reimplementing the "dpkg"
  158.    utility itself to be an extra frontend, rather than a backend to
  159.    the interface, would fit especially well into this case.
  160.  
  161.    I object.  I don't think you can easily correct the status file
  162.    after a failure with "vi /var/lib/dpkg/status" if it is not a plain
  163.    ascii file.  This is a feature which I have needed several times -
  164.    and normally I am careful with my systems...
  165.  
  166.    Solution: libdpkg looks for status and status.db.  If the latter
  167.    exist and has the same date or newer it is taken, otherwise the
  168.    plain ascii file is used and a new .db is generated.  What about
  169.    this?
  170.  
  171.    Exactly! Thats what I call a cache file.
  172.  
  173.    Note also that libdb has a "recno" format which is "use db for fast
  174.    hash lookups but point to the flat file for the actual
  175.    data"... which I haven't used, but might be interesting in this
  176.    context.
  177.  
  178.    The ideal database for dpkg data is a multi-teired thing (I'm not a
  179.    dbase expert so excuse the terminology ;>) We need a first teir
  180.    that has a list of all the packages and a second tier that has each
  181.    of the fields in the control file. Each package has about 8 fields
  182.    that need to be stored so we might be able to use some kind of
  183.    simple binary structure inside a larger database.
  184.  
  185. 6. dselect should shorten its list
  186.  
  187.    From: Tom Lees <tom@lpsg.demon.co.uk>
  188.  
  189.    Part of the inherent "horribleness" of dselect is inherent in the
  190.    design. This is also something that needs addressing - Suggests and
  191.    Recommends should _DEFINITELY_ be handled differently, there should
  192.    probably not be long listings of packages, etc.
  193.  
  194.    If one wants to have one, he shall see one, but I agree it would be
  195.    much better if we could shorten the list for normal actions. :-)
  196.  
  197. 7. We need a new user interface
  198.  
  199.    From: Jason Gunthorpe <jgg@gpu.srv.ualberta.ca>
  200.    From: "Brian C. White" <bcwhite@verisim.com>
  201.  
  202.    Good idea, but since the UI can literally not be written until the
  203.    library has been, not very practical. Maybe a better idea would be
  204.    to extend the group after the initial library code has been
  205.    written, so the original group writing the library is 6, then is is
  206.    increased to 9, of which 3 (from the original crowd) maintain the
  207.    library, and 6 write the user-interface.
  208.  
  209.    As part of the facelift for Debian 2.0, I'd like to offer an
  210.    improved interface as an alternative for "dselect".
  211.  
  212.    To this end, I'm going to be putting together a team of people to
  213.    produce such a product.
  214.  
  215.    If you would like to work on this, please let me know and tell me
  216.    what resources you have (machines, expertise, and especially time).
  217.    Serious replies, only, please; this will require a fair amount of
  218.    effort from all people involved.
  219.  
  220.    The expertise still needed is mostly:
  221.     - gui design
  222.     - technical writing (html; tex,texinfo a plus)
  223.     - multi-lingual
  224.  
  225.    The team will be small; probably 6 people at the most.
  226.  
  227.    This will be done at least somewhat within the current group.  I
  228.    don't want to make two groups though.  I want to keep this to as
  229.    few people as possible just to reduce the overhead of communicating
  230.    with a large number of people.  Communication time is proportional
  231.    to the square of the number of people.
  232.  
  233.    When you guys get around to wrapping an X-Windows GUI around your
  234.    new dpkg and dselect libraries, will you use Athena 3d widgets and
  235.    the XEmacs menubar for it?  I think that would be a really great
  236.    way to go.  `gv` has the look and feel I like the best.  I really
  237.    like the scrollbar free design.
  238.  
  239. 8. Network aware dpkg.
  240.  
  241.    From: Nicolßs Lichtmaier <nick@Feedback.com.ar>
  242.  
  243.    It's very commonf for UNIX machines to be placed in labs, sharing
  244.    resources. However, to share applications through NFS is a non
  245.    supported task that requires knowledge about how dpkg works.. and
  246.    isn't a trivial thing. If I were a sysadmin looking for a Linux
  247.    distribution to install in 20 machines I would choose someone that
  248.    support this..
  249.  
  250.    This is the idea:
  251.  
  252.    Applications server:
  253.  
  254.    Dpkg records the changes done by every package installed there
  255.    (maybe with a system switch, or per package) in
  256.    non-shared/conffiles filesystem components. e.g.: If a package
  257.    creates a /var/spool/tool.out, that is recorded by dpkg. If a
  258.    package installs a conffile in /etc, the confffile content are
  259.    saved (in /var/lib/dpkg/shared ? ), the content can be the modified
  260.    to adapt to current configuration...
  261.  
  262.    Applications client:
  263.  
  264.    client-dpkg periodically (boot time? cron?) queries the server for
  265.    new installed packages. dpkg-server informs the changes that newly
  266.    installed packages require. Here we use the current conffile
  267.    handling system: if the server has a new version of the conffile,
  268.    the new version is installed if the MD5 of the local file hasn't
  269.    changed.  The clients shouldn't have rw access to dpkg control
  270.    files... Perhaps they souldn't have dpkg at all.
  271.  
  272.    Install a new client would be easy. Just performing all the local
  273.    changes the server has saved would do it.
  274.  
  275.    Ugh... I don't know if all of this is clear... (Spanish version
  276.    available by private email.. =) )
  277.  
  278.  
  279.  
  280.  
  281.