[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: I'm sorry to open another can of worms but.. /usr/share/man transition



>>>>> "Chris" == Chris Waters <xtifr@dsp.net> writes:

  Chris> Laurent Martelli <martelli@iie.cnam.fr> writes:

  >> My very personal opinion about all this, is that we need more
  >> abstraction : packages _should_not_ hardcode installation
  >> paths. I think that it should be an option that the sysadmin
  >> should be able to change anytime, without having to rebuild all
  >> packages.

  Chris> I think this is a great idea in concept.  I think
  Chris> implementation may be a bit tricky, though, and I'd hate to
  Chris> have to rely on this as a short term solution.  But long
  Chris> term, yes, I would enthusiastically support such an idea, or
  Chris> some reasonable subset, if it were well thought out.  Now all
  Chris> we need is a *workable* proposal or six.

I'am not a registered developper, so I don't know exactly how thing
works. And I don't have much time to read all the manuals/policies. 
But I guess that workable means more precise. So I'll try to be more 
precise.

I don't know in details how debian packages work, but it looks like
when the package is built, all the files are put in debian/tmp/, and
then this directory is tar-gzipped to create the deb. At first sight,
it looks incompatible with my proposal, but I think that we could
preserve the old way of doing things. We just need to add a new
"control" file (like postinst, prerm, etc) which would associate
keywords to each file. It would look like this :

======
/usr/doc/my_package/README	documentation
/usr/bin/my_package		binary
/etc/my_package.cfg		configuration
======

Instead of using the path of the files, dpkg would use the keywords to
determine where to put the files. In case there's no keyword for a
file, the old way of doing things is used. 

Now I must define a way to compute a directory name from a list of
keywords. In order to allow easy customization of the scheme used to
do this, it should be done in separate program, or in a dll. A falg
could be used to tell dpkg which dll/binary to use. 

A path-name-computation-method is basically a function taking as
arguments the keywords, the package name, and the base-name of the
file. The result is a full path-name. Some simple functions can be
provided, that are easy to configure. For instance, I can think of
keyword->dirname method, that would be configured by a file like this:

=====
documentation	/usr/share/doc/${package_name}/${basename}
admin,binary	/usr/sbin/${basename}
binary		/usr/bin/${basename}
configuration	/etc/${package_name}/${basename}
data,extra	
data		/usr/share/${package_name}
=====

[files tagged with data and extra are not installed]

I'm just noticing that it is hard subdirs under ${package_name} for
instance. Maybe we should allow values to be associated with
keywords. We could therefore have something like "basedir=foo/bar/"

One other problem is that program should be able to find their files
wherever they were installed. I guess it's doable since dpkg already
support installing files in a custom rootdir. 

Then, a list of standards keywords should be published, with their
meanings clearly explained. A good starting point would be :

	documentation
	admin
	configuration
	binary
	data
	extra
	library
	
I hope this is closer to your idea of workable proposal.

-- 
Laurent Martelli
martelli@iie.cnam.fr


Reply to: