How can I ignore files/directories when building debian packages?

I have made some debian packages to ease deployment of configurations on new servers and want to put them in SVN source control. The problem is that SVN creates a .svn directory for each subdirectory in the source tree, so I can't build packages on the source tree 'dpkg-deb --build ' because the '.svn' directories will be included in the resulting package. So far when I want to build a package I have to export the directory to a different place and build from there.

Is there a quick way to making 'dpkg-deb --build' ignore the .svn directories?


Solution 1:

My understanding is that you should not be building a debian package with dpkg-deb --build in the first place. If you use dpkg-buildpackage instead, you won't have to worry about .svn directories being included in your package.

See: http://raphaelhertzog.com/2010/12/17/do-not-build-a-debian-package-with-dpkg-b/

There may be a better method, but here's one I haven't thoroughly tested:

Use dh_make to create a skeleton debian package. Put your files in the directory above the debian directory.

edit the resulting dirs file, and put the paths you are going to move files into, eg:

/opt/mypackage
/usr/local/bin

Then in your rules file, remove the $(MAKE) code and set your install: build section to something like this:

install: build
  dh_testdir
  dh_testroot
  dh_clean -k 
  dh_installdirs

  # Copy files into staging area
  rsync --exclude .svn -a mypackage/ debian/tmp/opt/mypackage/

Solution 2:

To exclude files to be put in the source Debian package, you should create the file:

debian/source/options

and enter the options you want to pass to dpkg-source, in your case:

tar-ignore = ".svn/"

See the man page for dpkg-source.

Solution 3:

It's worth documenting here that if you're going to use dpkg-buildpackage that it has a -i switch to ignore things. i.e., use -i .svn to ignore the .svn directory.