[Debconf-devel] Bug#379474: debconf-copydb: fails, "source does not exist"

Colin Watson cjwatson at debian.org
Mon Aug 7 15:55:28 UTC 2006

On Sun, Jul 23, 2006 at 10:34:26PM +0200, Eduard Bloch wrote:
> I was going to setup a new chroot and this time I decided to look for a
> better way than "cp" to get the database over to the new location. So I
> found the debconf-copydb utility which seems to do the job. After RTFM I
> tried:
> debconf-copydb /var/cache/debconf/config.dat var/cache/debconf/config.dat
> /usr/bin/debconf-copydb: source database, "/var/cache/debconf/config.dat" does not exist
> Uhm, what am I doing wrong? The database file does exist and I think it
> is exactly what the manpage talks about. So either there is a program
> bug (as demonstrated) or a documentation problem, or both ("does not
> exist" is not correct after all).

As it stands it's a documentation problem, but it might be possible to
educate debconf to do the right thing in this case anyway.

debconf-copydb (and all other places in debconf's command-line interface
that accept a database as a parameter) want a database name, not a file
name. Database names are configured in /etc/debconf.conf (etc.) or by
--config parameters. So something like the following would work:

  debconf-copydb olddb newdb \
    --config=Name:olddb --config=Driver:File \
    --config=Filename:/var/cache/debconf/config.dat \
    --config=Name:newdb --config=Driver:File \

You could abbreviate this by noticing that /var/cache/debconf/config.dat
is already configured in /etc/debconf.conf, so you can just copy the
'config' database without needing to configure it explicitly. In fact,
there's an example quite similar to this in the debconf-copydb(1) man
page. Note that you need to copy the config and passwords databases
separately, or else do more elaborate configuration on the target
databases to make them accept/reject passwords as appropriate.

(cp is a perfectly good way to copy debconf databases, by the way, if
you're already referring to them as files anyway. If you're referring to
them using database names with more elaborate configuration, then
debconf-copydb is certainly useful, but the above doesn't really add any
value over plain cp.)

All that said, it might be possible to make debconf transparently do
something approaching the right thing here. Joey, what do you think of
doing something like this?

Index: Debconf/DbDriver.pm
--- Debconf/DbDriver.pm	(revision 2088)
+++ Debconf/DbDriver.pm	(working copy)
@@ -177,6 +177,17 @@
 	my $this=shift;
 	my $name=shift;
+	if (not exists $drivers{$name} and -e $name) {
+		# Transparently turn filenames into database drivers if
+		# possible.
+		my %config = (
+			name => $name,
+			driver => 'File',
+			filename => $name,
+		);
+		Debconf::Db->makedriver(%config);
+	}
 	return $drivers{$name};


Colin Watson                                       [cjwatson at debian.org]

More information about the Debconf-devel mailing list