Hi, >>"Brian" == Brian May <[EMAIL PROTECTED]> writes:
Brian> I am guessing that all of these issues have been fully discussed, Brian> however, I think that some people might be oversimplifing the issue... One would appreciate details, then. Brian> I don't think it is that easy just to remove the old /usr/doc Brian> directory (for the same reason somebody told me you can't just Brian> move the files from /usr/doc to /usr/share/doc). Please elaborate. What are the problems you forsee? Brian> Suppose that two packages have files under /usr/doc/mypackage, Brian> package A and package B. (for an example, just look for any symbolic Brian> links under /usr/doc on a *slink* system). Yes. If a -doc package is indeed putting files under the directory for the parent package, then the new parent package may need to conflict with older -doc packages. I do not think this is the case, however, for the proceduerw I outlined; since there merely exists yet another symlink in the chain which is added. The process I discuss is not meant to be blindly followed, and hence may not be suitable for helper packages. Brian> When you delete package A, you also delete files that are owned by Brian> package B inside /usr/doc/mypackage. While this doesn't sound very good, Brian> I don't think is a huge problem by itself (please correct me if I am Brian> wrong). However, it does mean that the users documentation would get Brian> deleted, and this documentation isn't locally maintained, either. If you look at what I proposed, no file is actiually deleted. It is first copied to /usr/share/doc/$pkg (with backups), and the documentatiopn still exists. Brian> Now, when the user deletes that 2nd package, will dpkg get confused and Brian> delete the symlink? No. It would indeed try and delete the files, which should be OK. Brian> However, seems to me that there always be some messy situations. eg, Brian> install new versions of package A and that uses /usr/share/doc, and then Brian> install old version of package B that uses /usr/doc. Remove package A. Brian> Does A remove the symlink under /usr/doc? Assume it does. Now remove Brian> package B. Oops - dpkg can't find the files for package B, as they were Brian> installed under /usr/share/doc, but that symlink was deleted. What does dpkg do in this case? I think it silently ignores files already removed. We'll have cruft in /usr/share/doc. If that is a major issue, conflict with older -doc packages. Don't release new versions of package A while not releasing new versions of package B I still think this proposal is better than silently failing to create a symlink. Please have a look at the postinst of libcgi-perl that I am including below. manoj -- Early to bed and early to rise and you'll be groggy when everyone else is wide awake. Manoj Srivastava <[EMAIL PROTECTED]> <http://www.debian.org/%7Esrivasta/> Key C7261095 fingerprint = CB D9 F4 12 68 07 E4 05 CC 2D 27 12 1D F5 E8 6E #! /bin/sh # Abort if any command returns an error value set -e # This script is called as the last step of the installation of the # package. All the package's files are in place, dpkg has already # done its automatic conffile handling, and all the packages we depend # of are already fully installed and configured. # The following idempotent stuff doesn't generally need protecting # against being run in the abort-* cases. package_name=libcgi-perl; # Ensure the menu system is updated [ ! -x /usr/bin/update-menus ] || /usr/bin/update-menus case "$1" in configure) # Configure this package. If the package must prompt the user for # information, do it here. if [ -d /usr/doc ]; then # Well, we still need to handle this, at least for the time being if [ -d /usr/share/doc/$package_name ]; then # So the new doc dir exists, goody if [ -d /usr/doc/$package_name ]; then echo "Yikes! The old directory, /usr/doc/$package_name" echo "has not ben removed! This is an error; attemptig" echo "repairs" if [ -f /usr/doc/$package_name/.dhelp ]; then rm -f /usr/doc/$package_name/.dhelp rmdir --ignore-fail-on-non-empty /usr/doc/$package_name/ fi if [ -d /usr/doc/$package_name ]; then cat <<EOF Failed repairs. There are old files in /usr/doc/$package_name/ created by you or another script. I can copy them over to the new location /usr/share/doc/$package_name, if you wish, preserving your versions of the files. No files shall be over written, instead, backup versions shall be created in /usr/share/doc/$package_name as needed. Shall I copy the files over [Yn]? EOF read answer; case answer in [Nn]*) echo "Not copying over, aborting"; exit 1; ;; *) cp -ab --version-control=t \ /usr/doc/$package_name \ /usr/share/doc/$package_name/.. ; rm -rf /usr/doc/$package_name; esac fi fi if [ -e /usr/doc/$package_name ]; then echo "/usr/doc/$package_name exists, but is not a directory" if [ -L /usr/doc/$package_name ]; then echo "it is a symbolic link, overwriting" ln -sf ../share/doc/$package_name /usr/doc/$package_name else echo "This is an error. Aborting" exit 1 fi fi #File unexists. Free to go ahead and create link ln -sf ../share/doc/$package_name /usr/doc/$package_name fi fi # There are three sub-cases: if test "${2+set}" != set; then # We're being installed by an ancient dpkg which doesn't remember # which version was most recently configured, or even whether # there is a most recently configured version. : elif test -z "$2" -o "$2" = "<unknown>"; then # The package has not ever been configured on this system, or was # purged since it was last configured. : else # Version $2 is the most recently configured version of this # package. : fi ;; abort-upgrade) # Back out of an attempt to upgrade this package FROM THIS VERSION # to version $2. Undo the effects of "prerm upgrade $2". : ;; abort-remove) if test "$2" != in-favour; then echo "$0: undocumented call to \`postinst $*'" 1>&2 exit 0 fi # Back out of an attempt to remove this package, which was due to # a conflict with package $3 (version $4). Undo the effects of # "prerm remove in-favour $3 $4". : ;; abort-deconfigure) if test "$2" != in-favour -o "$5" != removing; then echo "$0: undocumented call to \`postinst $*'" 1>&2 exit 0 fi # Back out of an attempt to deconfigure this package, which was # due to package $6 (version $7) which we depend on being removed # to make way for package $3 (version $4). Undo the effects of # "prerm deconfigure in-favour $3 $4 removing $6 $7". : ;; *) echo "$0: didn't understand being called with \`$1'" 1>&2 exit 0;; esac if command -v install-docs >/dev/null 2>&1; then install-docs -i /usr/share/doc-base/libcgi-perl fi exit 0