views:

241

answers:

1

I am distributing one of my applications using a .deb package, but have a problem relating to one of the files.

The distribution includes a database file which is constantly updated by the app, on a fresh install I want the installer to copy a new, empty db file onto the users system, but on an upgrade I want the installer to leave the existing copy in place (overwriting it would result in all the users data getting lost).

Currently I have included the file in the 'conffiles' file, so the installer always asks the user whether to overwrite the existing file or not, but this isn't the behaviour I want - overwriting the file is never the right thing to do and I'm concerned that a user may pick the wrong option during an upgrade and hose their data.

Is there any way to tell the installer that if the db file already exists just leave it alone and don't ask the user what to do?

+3  A: 

Yes, use a preinst/postinst script. The usual method is to name the file in the package with a special name ending with dpkg-new, for instance /var/lib/myapp/mydb.data.dpkg-new. Then write a 'postinst' script to put in the DEBIAN directory of your package to check for the existence of the database, and rename or delete the dpkg-new file accordingly, something like:

#!/bin/bash

if [ -f /var/lib/myapp/mydb.data ]; then
    rm /var/lib/myapp/mydb.data.dpkg-new
else
   mv /var/lib/myapp/mydb.data.dpkg-new /var/lib/myapp/mydb.data
fi
wazoox
Thanks - I guess I should remove the db file from conffiles as well, unless there are other consequences of doing this?
codebox_rob
Yes, if the file isn't present in the package it shouldn't be listed in the configuration files.
wazoox