Tuesday, May 20, 2008
32-bit MPlayer on 64-bit Linux, again
Almost exactly one year ago, I published here an essay on building 32-bit mplayer on 64-bit RHE Linux (took me a lot of time when, actually). Reading this over a year later, I can hardly understand how I really managed to do it and how the process worked; it must have been some magic which mplayer configuration did. Anyway, here is much more straightforward and comprehensive approach on building not just mplayer, but whole 32-bit Linux (sub-) system within existing 64-bit OS. It is based on Ubuntu 8.04 "Hardy Heron" , but should work with small modifications on any Debian-based system.
The following largely based on this forum post, which in turn references this tutorial. I will assume that code name of your release is "hardy" and 32-bit root is "/sys32"; make sure to replace with values suitable for your system.
- sudo apt-get install dchroot debootstrap
- sudo mkdir /sys32/
- sudo vi /etc/dchroot.conf
- Add this line: hardy /sys32
- sudo debootstrap --arch i386 hardy /sys32/ http://archive.ubuntu.com/ubuntu
- sudo cp /etc/{passwd,shadow,group,sudoers,hosts} /sys32/etc/
- sudo cp /etc/apt/sources.list /sys32/etc/apt/sources.list
(At this moment you might want to edit your sources.list file to your taste, or remove from there things that are specific to 64-bit system, not that there should be any)
Now comes some controversial step. Full-blown debian installation could take gigabytes of disk space, and only small piece of that is binary data which is different for 32-bit. You can reduce the required disk space by "sharing" certain folders with architecture-independent data between the main system and sub-system, but that has also a site-effect of making certain actions in the sub-system break how things work in your main system. Forum post that I referenced above recommend you share /usr/share/fonts this way, but I decided against it; it costs me about 200Mb more, but adds certain piece of mind. Some directories though are worth sharing.
- sudo vi /etc/fstab
- Add the following lines:
- /home /chroot/home none bind 0 0
- /tmp /chroot/tmp none bind 0 0
- /dev /chroot/dev none bind 0 0
- /proc /chroot/proc proc defaults 0 0
- /media/cdrom0 /chroot/media/cdrom0 none bind 0 0
- sudo mkdir /chroot/media/cdrom0
- sudo mount -a
OK, by now you should have a basic Debian-style 32-bit system under /sys32; this command
- sudo chroot /sys32/
would switch you to operate from "within" this sub-system. From this point on, we continue setup from within (note that "chroot" automatically puts us into root-privileged shell, so "sudo" isn't needed)
- locale-gen "en_US.UTF-8"
- dpkg-reconfigure locales
- apt-get update
- apt-get upgrade
- apt-get install libgtk2.0-dev gcc g++ make
The last command is just an example; feel free to install whatever you feel like you need, including software built from source, or anything else. MPlayer, among other things, could be built this way without any problems.
Note that when installing from source, it may be useful to do everything but the last installation step from your regular user account, like that:
- [Download all source you might want]
- sudo chroot /sys32/
- su - your_user_account
- cd /tmp
- tar -xvzf your_sources.tag.gz
- cd your_sources
- ./configure
- make
- make test
- exit
- cd /tmp/your_sources
- make install
One last remark: you can install some 32-bit support as part of your 64-bit system, including compiler and run-time libraries (you can't however get build libraries and headers other than building them yourself following steps similar to outlined above). Here it is:
- apt-get install build-essential lib32gcc1 libc6-dev-i386 libc6-i386 lib32stdc++6 ia32-libs gcc-multilib
This makes it possible to run gmplayer as /sys32/usr/local/bin/gmplayer, without any change in environment or any dependencies on the 32-bit subsystem.
Labels: 64-bit, debian, mplayer