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

Re: transitioning config files between two packages



Frank Küster <frank@debian.org> wrote:

> Steve Langasek <vorlon@debian.org> wrote:
>
>> Yes, you're right that this code unconditionally uses the user's version of
>> the conffile when moving it, instead of allowing the conffile question to
>> happen.
>>
>> The way to get the conffile prompt for a user-modified file is 

Hm, I've tried to write that up in the Wiki, but I found that I don't
completely understand what you wanted.  You wrote:

,----
| The way to get the conffile prompt for a user-modified file is to move the
| old version of the conffile to the new location in the preinst if the old
| conffile md5sum doesn't match the current conffile md5sum for the package.
| Since the earlier preinst code has already removed any old versions of the
| file that are known to be unmodified, this won't give any undesirable
| conffile prompts.  
`----

Thus far, it seems clear to me.  We just need to change the preinst code
from the Wiki:

prep_mv_conffile() {
    CONFFILE="$1"
+   NEWCONFFILE="$2"

    if [ -e "$CONFFILE" ]; then
        md5sum="`md5sum \"$CONFFILE\" | sed -e \"s/ .*//\"`"
        old_md5sum="`sed -n -e \"/^Conffiles:/,/^[^ ]/{\\\\' $CONFFILE'{s/.* //;p}}\" /var/lib/dpkg/status`"
        if [ "$md5sum" = "$old_md5sum" ]; then
            rm -f "$CONFFILE"
+       else
+           mv "$CONFFILE" "$NEWCONFFILE"
        fi
    fi
}

Now I thought that is all that needs to be done:  Simply ship the
conffile, and now dpkg will

- simply install it if prep_mv_conffile has found the old one unchanged
  and removed it

- ask the desired conffile prompt if prep_mv_conffile has found it
  changed and already moved to the new place.

Now all that's missing is that dpkg probably still things that the old
package is in state "rc", with the conffile at the old place
registered.  But that's nothing a maintainer script can solve[1].

However, you (Steve) continued:

,----
| Then, if dpkg's stored md5sum for the old conffile *does*
| match that of the current shipped conffile (which you'll know because you
| still have the conffile present in the old location in the postinst), you
| would go ahead with this same code in the postinst to move it into place
| silently.
`----

As explained above, I don't understand why any more code is needed at
all.  Second, all this has been done in preinst already: compare md5sums
(although not with the current shipped one), move into place.

What am I missing?

Regards, Frank


[1] manually calling "aptitude purge" or "dpkg --purge" on packages in
rc is something that helps here.  But this possibility means that it is
in fact desirable to rename conffiles when they are taken over by other
packages.  Otherwise you can't write "Transitional package.  This can
savely be removed...", since people will probably understand that as "or
purged". 
-- 
Frank Küster
Single Molecule Spectroscopy, Protein Folding @ Inst. f. Biochemie, Univ. Zürich
Debian Developer (teTeX/TeXLive)



Reply to: