How to fake a package version installed?

Solution 1:

Despite an answer being already accepted, inlining the accepted better conveys the process:

  1. There is a Debian package called equivs that is able to create dummy packages. Install it by running sudo apt-get install -y equivs

  2. Once installed, you generate a template "control" file using the following command: equivs-control postfix (replace postfix with your package name). In my case, I might use an alternate package name, e.g. postfix-custom or whatever but have my custom package fulfill or Provides the installation dependency of postfix (again replacing postfix for whatever package you want.

  3. Once the template control file is generated, I will typically remove a lot of the commented out statements (statements that begin with #). One that I like to keep specifically is the Provides: statement where I can say that my package provides the capability offered by the other package that I'm trying to fake, e.g. Provides: postfix tells the Debian/Ubuntu dependency resolution mechanism that my package—of whatever name—provides the same capabilities of the target package, again postfix or whatever. This allows me to name my package independently of the target package to avoid confusion. Erlang Factory does this with their stuff, e.g. esl-erlang provides erlang.

  4. Finally, once the template control file is created, you use equivs-build to generate the fake package, e.g. equivs-build /path/to/generated/control/file.

  5. It takes a few seconds to build the package and then you can run sudo dpkg -i my_package_name*.deb

For advanced users, if your template control file has a Requires: dependency line, you may want to use a tool like gdebi to install your package as well as the various the packages it declares as dependencies.

Solution 2:

You can use the equivs package to create a dummy package to fake a given package being installed. Some instructions here.