On Tue, May 16, 2006 at 02:11:08PM +0200, Olaf van der Spek wrote:
> That's great. Could you tell me how to use those so that script A uses
> python 2.3 and script B uses python 2.4 without modifying the scripts?
That's trivial. Create a wrapper that somehow decides which python
version to run and launches the application using the right interpreter.
Install the wrapper as /usr/bin/python instead of the current symlink
and you're done. No kernel support, no dpkg support, no apt support is
needed.
However, you can take this idea further: provided you have multiarched
binaries, you could create a small file system using FUSE that generates
such a wrapper on-the-fly based on the requested file name, and you
could mount this file system as /usr/bin. Voila.
The _real_ difficulties for supporting multiarched binaries are:
- Transitioning every single binary from /usr/bin to /usr/lib/$ARCH/bin.
Looking at the current /usr/X11R6 transition this is less than
trivial. There may be tricks like moving the old /usr/bin to
/usr/lib/fallback_arch/bin before mounting the "wrapper" filesystem
over /usr/bin, and redirect every writes to /usr/bin to
/usr/lib/fallback_arch/bin; that may fool dpkg enough so package
management continues to work during the transition.
- Decide which version/architecture to run if the user requests
/usr/bin/blah. With the FUSE approach this can be made a per-user
decision if someone dares to go through all the implications of a
setuid program seeing a different /usr/bin/foo than a non-setuid
program.
Gabor
--
---------------------------------------------------------
MTA SZTAKI Computer and Automation Research Institute
Hungarian Academy of Sciences
---------------------------------------------------------