|
Size: 1635
Comment:
|
Size: 2961
Comment:
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 15: | Line 15: |
| You might wonder why, if multiarch is so great, the conversion isn't handled automatically by the package helper tools like debhelper and cdbs. The answer is that there is no reliable way to automatically convert a package to multiarch. Careful attention is required on the part of the maintainer to ensure the conversion is done correctly. In particular, you must pay attention to the following issues: * To ensure that a multiarch-compatible libc is configured before your shared library package is unpacked to the new multiarch library paths (and the old version of the library deleted from /usr/lib), each shared library '''must''' declare a {{{Pre-Depends}}} on the {{{multiarch-support}}} virtual package. * Any references to files located in /usr/lib from within your packaging, including but not limited to {{{debian/rules}}}, any {{{debian/*.install}}} or {{{debian/*.links}}} files, or maintainer scripts, must be updated by hand for the new locations. * If your library includes any sort of mechanism for loading modules or plugins from a public directory, care must be taken to ensure backwards-compatibility - either by including both multiarch and non-multiarch directories in a plugin search path, or by declaring an appropriate {{{Breaks:}}} on all pre-multiarch versions of the affected packages. |
Converting your package for multiarch
This page is intended to be a one-stop guide for converting library packages to Multiarch. If you find there are issues not documented here, please update this wiki page, or contact debian-devel@lists.debian.org for help.
Contents
Why update your library package for multiarch support?
Now that multiarch support is available in the package manager (dpkg 1.16.0 and above; apt 0.8.12 and above), converting your runtime library package to Multi-Arch: same makes it possible for users to install your package for more than one architecture at the same time. This has several benefits:
If your library is currently bundled in ia32-libs, providing a multiarch package helps with the process of removing ia32-libs from the archive.
- If there is any software that uses your library which can only build in 32-bit mode, users will be able to install packages of that software directly on 64-bit systems without having to use dedicated chroots.
Users can use your library package with userspace emulators such as qemu without needing to use a dedicated chroot - making it easier to build environments that emulate only the parts that need emulating.
Although Debian policy currently doesn't allow -dev packages to be Multi-Arch: same, users may set up cross-build environments using only -dev packages for the target arch. Having your runtime library package built as Multi-Arch: same makes it easier to build software against your library in such an environment.
Issues to be aware of when converting
You might wonder why, if multiarch is so great, the conversion isn't handled automatically by the package helper tools like debhelper and cdbs. The answer is that there is no reliable way to automatically convert a package to multiarch. Careful attention is required on the part of the maintainer to ensure the conversion is done correctly. In particular, you must pay attention to the following issues:
To ensure that a multiarch-compatible libc is configured before your shared library package is unpacked to the new multiarch library paths (and the old version of the library deleted from /usr/lib), each shared library must declare a Pre-Depends on the multiarch-support virtual package.
Any references to files located in /usr/lib from within your packaging, including but not limited to debian/rules, any debian/*.install or debian/*.links files, or maintainer scripts, must be updated by hand for the new locations.
If your library includes any sort of mechanism for loading modules or plugins from a public directory, care must be taken to ensure backwards-compatibility - either by including both multiarch and non-multiarch directories in a plugin search path, or by declaring an appropriate Breaks: on all pre-multiarch versions of the affected packages.
