How to create and administer multi-architecture PPAs?

The way to go is to upload once for every Ubuntu version.

Launchpad won't build packages for Ubuntu versions that are no longer supported, and only build a package for one specific version of Ubuntu. The targeted version is (as you already know) specified in the changelog file, by the newest entry!

Remember to be aware that the packages your program depends on might not be available at the same version across all versions of Ubuntu.

You also talk about "multi-architecture" (architecture = CUP type, eg. x86, LPIA, AMD64) this makes no difference since every package uploaded is build for all available architectures as long as you have Architecture: any in the package definition (debian/control) file, this also allows you to make the package depend on different packages for different architectures (be defining the package more than once)


Launchpad has a new feature currently in beta which allows you to build your package for multiple ubuntu versions at once without any extra work. You can even automatically build your packages every day. https://help.launchpad.net/Packaging/SourceBuilds/GettingStarted alt text


Regarding the naming conventions, the standard is to do something like this:

  • 1.0-0ubuntu1 for the package that ends up in Ubuntu's official archive
  • 1.0-0ubuntu1~lucidppa1 for the version of that package you put in your PPA for lucid
  • 1.0-0ubuntu1~karmicppa1 for the version of that package for Karmic

The reason is that a ~ in the version field represents "less than nothing" for a version number. So if someone adds your PPA at Karmic, they'll get the ~karmicppa1 package. When they then upgrade to Lucid (and readd your PPA), it'll be replaced with the Lucid PPA package. If your package then gets into the official archive, the transition away from your PPA will go smoothly.

The other advantage is that putting the release in the version field makes it clear which release the files apply to (and subtly reminds you to upload one per release). You may also need different branches for each Ubuntu release for when you have different dependencies, for instance.