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

Re: Wrestling with debconf



On Tue, 2022-01-04 at 12:34 +0100, Niels Thykier wrote:
> (Having seen your enquiry on IRC, I presume this issue was still
> relevant)

Hey Niels. Yes, indeed. Still trying to solve this problem.

> I read the "newly unpacked /etc/myfoo/server.conf" as you shipping
> "/etc/myfoo/server.conf" directly inside the package in that path.  If
> that is correctly understood, then I think that is the source of your
> woes.

Yes, that is what I was trying to do.

> As I recall, when you manage a file via debconf, you should *not* ship
> it directly in the package.  You can ship a template in a different
> location (e.g., /usr/share/myfoo/server.conf.template) and then use
> that combined with the debconf answers to generate the initial
> /etc/myfoo/server.conf.

Ok, I see that now buried in the last paragraph in DPM s 5.1:

   "Note that a package should not modify a dpkg-handled conffile in its
   maintainer scripts. Doing this will lead to dpkg giving the user
   confusing and possibly dangerous options for conffile update when the
   package is upgraded."

> Perhaps have a look at openssh-server (postinst + config + file
> listing) as an example, which does something similar.  It does use
> "ucf" for handling the merge on updates, which is a different approach
> than yours for creating/updating the configuration file.
>   I can recommend that from a consistency PoV, so your package would
> behave the same as other Debian packages if the user were to change the
> file directly.  However, I do not think it would be strictly
> necessary to migrate to ucf in order to fix your immediate issue.

I've taken a look at openssh-server.{config,postinst} and the contents
of the package in what's shipped to /etc (nothing). The way they are
doing it is a bit complicated and I am surprised there isn't an elegant
solution yet with debconf. Although it could be I just don't understand
what they were doing, in which case it's probably even more
complicated.

I also still can't figure out why the .config is run twice during
installation.

Anyways, what I am trying to do now is ship server.conf as
server.conf.template in /usr/share/myserver/ and then have .postinst
attempt the following:

   new_config="$(mktemp)"
   cp -a /usr/share/myserver/server.conf.template "$new_config"
   mkdir -p /etc/myserver/
   ucf --three-way --debconf-ok \
       "$new_config" /etc/myserver/server.conf
   ucfr myserver-server /etc/myserver/server.conf

But it's not really clear to be what needs to be done within .config.
Should the script check for /etc/myserver/server.conf early, and if
it's not available, exit 0?

-- 
Kip Warner -- Senior Software Engineer
OpenPGP signed/encrypted mail preferred
https://www.thevertigo.com

Attachment: signature.asc
Description: This is a digitally signed message part


Reply to: