On 30.03.2013 03:51, Daniel Hartwig wrote:
On 30 March 2013 06:33, Mikko Rasa<tdb@tdb.fi> wrote:Package: apt Version: 0.9.7.8 Severity: normal Some background: I'm migrating my home server to new hardware and considering changing the OS to 64-bit as well. Since apt now supports multiarch, I thought I'd do this by installing a 64-bit kernel first and then updating userspace bit by bit as necessary and as time permits. Unfortunately, reality turned out to be much more complicated.Hello Cross-grading an entire system is not a documented or supported procedure. You could possibly still proceed as you intended, if you are adventurous. It will take some encouraging of dpkg (lots of ‘--force-FOO’) and you will not receive support for the procedure here.
I am aware of the unsupported nature of this operation. It used to be even harder, but multiarch makes it reasonably easy since programs are much less likely to break due to mismatched libraries. Half the reason I'm doing this is to explore the limits of what's possible, and because it's an interesting technical challenge.
Probably simpler to install a fresh amd64 system.
The other half of the reason is that I'm too lazy to dig up all the customizations I've done over the seven years since this system was installed and migrate them to the new system. However, I might be grossly overestimating the amount of effort required, and a fresh install would probably also result in a somewhat cleaner /etc.
If a package with Architecture: all depends on a package with a specific architecture, then that dependency can't be fulfilled by a foreign package.<https://wiki.ubuntu.com/MultiarchSpec#Dependencies_involving_Architecture:_all_packages> As above, this is by design. The developers are aware of the highlighted dependency handling and the desire to perhaps move away from it eventually. I am therefore prone to closing this as not-a-bug, the difficultly in cross-grading a system is neither apts or dpkgs fault, they handle the situation correctly.
Perhaps it could be implemented as a configuration option to begin with, and change the default later?
... Several hours of furious coding and testing later:I managed to put together a Python script which changes the architecture of an installed Debian system from i386 to amd64. I didn't even need to use any --force; processing packages in correct order by dependencies is enough, since dpkg does less dependency checks than apt. It's not perfect, but it left me with only about two dozen broken packages to be fixed by hand, as opposed to the several hundreds I encountered when trying to do this manually.
-- Mikko