- Running 32-bit app under 64-bit linux [duplicate]
- 3 Answers 3
- Как запустить 32-битное приложение на 64-битном Linux
- Как запустить 32-битное приложение на 64-битном Linux
- 1. Добавьте архитектуру i386
- 2. Установите необходимые библиотеки пакетов
- 3. Выполните 32-битную программу
- Заключение
- Похожие записи:
- How do I run 32-bit programs on a 64-bit Debian/Ubuntu?
- 3 Answers 3
- For current releases
- For old releases
- Schroot
- Introduction
- Set up schroot
- Install the new distribution
- Services in the chroot
- Populate the new system
- Going further
- Virtual machine
Running 32-bit app under 64-bit linux [duplicate]
By mistake I have installed 64-bit linux(hey! it happens to every1!). How can I run 32-bit app under that linux?
A pure java app does not care about the system architecture, it runs using the java runtime environment which is available for both 32 and 64 bits. Unless you run closed source apps is very unlikely that you will find 32 bits only apps, on some case’s you can run 32 bits binaries if you install the ia32-libs package, but not all.
its not pure, it uses SWT(look like real app and not ugly Swing app) and it need extra libs in order to run.
3 Answers 3
Most applications (Well, all applications) that are in the repo will work with 64bit versions of Ubuntu. So things like Firefox, Gedit, Chromium, etc. The majority of applications that are only i386/x86_32bit only will still install and run without any additional changes needed. Even less will have issues with linked or shared system libraries. You can install the ia32-libs package which will install most needed 32bit shared libraries needed for 32bit software to work.
This is a bit outdated as ia32-libs is before the Mutliarch feature in APT appeared. See this answer for more information.
I don’t see how installing a 64bit OS on a CPU that supports it (most have done for years now) is a mistake, it makes perfect sense to make use of the benefits of 64-bit architecture! I must say, for at least the last few years, apart from 64bit flash issues, I’ve not had to worry about this at all.
Saying that, what are you trying to run? My system has a few 32-bit libraries and i386/i686 .deb’s I’ve force installed (which seem to be architecture independent anyway), and you might notice that your’s works the same.
Does the app you’re attempting to run work on the 64bit system?
it has a version that runs under 64-bit(its SWT Java App). I just remember that people always choose 32-bit windows, because they were scare that some apps wont work and I wonder if the same thing is a case on linux.
The main trouble with windows, is all the proprietary drivers. Because Gnu/Linux is Free Software, the freedoms to study the source, to modify, and to distribute. Allow it to be recompiled for 64bit (and any fixes to be made). Thus allowing the remaining freedom, to use.
Как запустить 32-битное приложение на 64-битном Linux
Почти каждая система Linux имеет как 32-битную, так и 64-битную архитектуру. Но проблема в том, что по умолчанию приложение, написанное для работы на 32-битной системе, не будет работать на 64-битной системе и наоборот. Это может быть очень неприятно, поскольку никто не хочет разрабатывать два исходных кода для одного и того же приложения или поддерживать два отдельных бинарных файла для разных архитектур. Вы можете решить эту проблему, сделав так, чтобы 32-битная программа могла работать на 64-битной архитектуре. В этой статье мы узнаем, как запустить 32-битное приложение на 64-битном Linux.
Как запустить 32-битное приложение на 64-битном Linux
Ниже описаны шаги для запуска 32-битных приложений в 64-битной системе Linux. Чтобы иметь возможность запускать 32-битные программы на 64-битной системе Linux, такой как Ubuntu, необходимо добавить архитектуру i386 и установить 3 библиотечных пакета libc6:i386, libncurses5:i386 и libstdc++6:i386.
1. Добавьте архитектуру i386
Откройте терминал и выполните следующую команду.
sudo dpkg --add-architecture i386
2. Установите необходимые библиотеки пакетов
Затем выполните следующую команду для установки 3 библиотек пакета.
sudo apt-get update sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
Если вышеуказанная команда не сработала, выполните следующую команду.
sudo apt-get install multiarch-support
3. Выполните 32-битную программу
Теперь вы должны иметь возможность запустить 32-битную программу на 64-битной системе. Замените приведенное ниже sample32bitprogram на имя файла бинарного файла вашей программы.
Если вы используете несовместимую версию gcc на вашей системе Ubuntu, вы можете получить ошибку при выполнении вышеуказанных команд, вам может потребоваться обновить gcc с помощью следующей команды.
sudo apt-get install gcc-multilib
Заключение
В этой статье мы узнали, как запускать 32-битные программы на 64-битных, не создавая отдельные бинарные файлы как для 32-битных, так и для 64-битных систем.
Похожие записи:
How do I run 32-bit programs on a 64-bit Debian/Ubuntu?
I have a 64-bit (amd64 a.k.a. x86_64) Debian or Ubuntu installation. I need to run 32-bit (i386/i686) programs occasionally, or to compile programs for a 32-bit system. How can I do this with a minimum of fuss? Bonus: what if I want to run or test with an older or newer release of the distribution?
3 Answers 3
For current releases
Current Debian and Ubuntu have multiarch support: You can mix x86_32 (i386) and x86_64 (amd64) packages on the same system in a straightforward way. This is known as multiarch support — see Ubuntu or Debian wiki more information.
See warl0ck’s answer for a simple, up-to-date answer.
For old releases
In older releases, Debian and Ubuntu ship with a number of 32-bit libraries on amd64. Install the ia32-libs package to have a basic set of 32-bit libraries, and possibly other packages that depend on this one. Your 32-bit executables should simply run if you have all the required libraries. For development, install gcc-multilib , and again possibly other packages that depend on it such as g++-multilib . You may find binutils-multiarch useful as well, and ia32-libs-dev on Debian. Pass the -m32 option to gcc to compile for ix86.
Note that uname -m will still show x64_64 if you’re running a 64-bit kernel, regardless of what 32-bit user mode components you have installed. Schroot described below takes care of this.
Schroot
This section is a guide to installing a Debian-like distribution “inside” another Linux distribution. It is worded in terms of installing a 32-bit Ubuntu inside a 64-bit Ubuntu, but should apply with minor modifications to other situations, such as installing Debian unstable inside Debian stable or vice versa.
Introduction
The idea is to install an alternate distribution in a subtree and run from that. You can install a 32-bit system on a 64-bit system that way, or a different release of your distribution, or a testing environment with different sets of packages installed.
The chroot command and system call starts a process with a view of the filesystem that’s restricted to a subtree of the directory tree. Debian and Ubuntu ship schroot, a utility that wraps around this feature to create a more usable sub-environment.
Install the schroot package (Debian) and the debootstrap package (Debian). Debootstrap is only needed for the installation of the alternate distribution and can be removed afterwards.
Set up schroot
This example describes how to set up a 32-bit Ubuntu 10.04LTS (lucid lynx) alternate environment. A similar setup should work with other releases of Debian and Ubuntu. Create a file /etc/schroot/chroot.d/lucid32 with the following contents:
[lucid32] description=Ubuntu 10.04LTS 32-bit directory=/32 type=directory personality=linux32 users=yourusername groups=users,admin
The line directory=/32 tells schroot where we’ll put the files of the 32-bit installation. The line username=yourusername says the user yourusername will be allowed to use the schroot. The line groups=users,admin says that users in either group will be allowed to use the schroot; you can also put a users=… directive.
Install the new distribution
Create the directory and start populating it with debootstrap. Debootstrap downloads and installs a core set of packages for the specified distribution and architecture.
mkdir /32 debootstrap --arch i386 lucid /32 http://archive.ubuntu.com/ubuntu
You almost have a working system already; what follows is minor enhancements. Schroot automatically overwrites several files in /32/etc when you run it, in particular the DNS configuration in /etc/resolv.conf and the user database in /etc/passwd and other files (this can be overridden, see the documentation). There are a few more files you may want to copy manually once and for all:
cp -p /etc/apt/apt.conf /32/etc/apt/ # for proxy settings cp -p /etc/apt/sources.list /32/etc/apt/ # for universe, security, etc cp -p /etc/environment /32/etc/ # for proxy and locale settings cp -p /etc/sudoers /32/etc/ # for custom sudo settings
There won’t be a file /etc/mtab or /etc/fstab in the chroot. I don’t recommend using the mount command manually in the chroot, do it from outside. But do create a good-enough /etc/mtab to make commands such as df work reasonably.
ln -s /proc/mounts /32/etc/mtab
With the directory type, schroot will perform bind mounts of a number of directories, i.e. those directories will be shared with the parent installation: /proc , /dev , /home , /tmp .
Services in the chroot
As described here, a schroot is not suitable for running daemons. Programs in the schroot will be killed when you exit the schroot. Use a “plain” schroot instead of a “directory” schroot if you want it to be more permanent, and set up permanent bind mounts in /etc/fstab on the parent installation.
On Debian and Ubuntu, services start automatically on installation. To avoid this (which could disrupt the services running outside the chroot, in particular because network ports are shared), establish a policy of not running services in the chroot. Put the following script as /32/usr/sbin/policy-rc.d and make it executable ( chmod a+rx /32/usr/sbin/policy-rc.d ).
#!/bin/sh ## Don't start any service if running in a chroot. ## See /usr/share/doc/sysv-rc/README.policy-rc.d.gz if [ "$(stat -c %d:%i /)" != "$(stat -c %d:%i /proc/1/root/.)" ]; then exit 101 fi
Populate the new system
Now we can start using the chroot. You’ll want to install a few more packages at this point.
schroot -c lucid32 sudo apt-get update apt-get install lsb-core nano .
You may need to generate a few locales, e.g.
locale-gen en_US en_US.utf8
If the schroot is for an older release of Ubuntu such as 8.04 (hardy), note that the package ubuntu-standard pulls in an MTA. Select nullmailer instead of the default postfix (you may want your chroot to send mail but you definitely don’t want it to receive any).
Going further
For more information, see the schroot manual, the schroot FAQ and the schroot.conf manual. Schroot is part of the Debian autobuilder (buildd) project. There may be additional useful tips on the Ubuntu community page about debootstrap.
Virtual machine
If you need complete isolation of the alternate environment, use a virtual machine such as KVM (qemu-kvm ) or VirtualBox.