Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

I have Ubuntu 14.04. I recently downloaded Viber. The Viber .deb file has 64-bit architecture. I want to install it on my computer, but my computer only supports 32-bit.

The output of running lscpu is as follows:

Architecture: i686
CPU op-mode(s): 32-bit, 64-bit 
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1 
Core(s) per socket: 2 
Socket(s): 1 
Vendor ID: GenuineIntel 
CPU family: 6 
Model: 23 
Stepping: 10 
CPU MHz: 2800.000 
BogoMIPS: 5586.12 
Virtualization: VT-x 
L1d cache: 32K 
L1i cache: 32K 
L2 cache: 2048K
share|improve this question
3  
How can you be sure it doesn't support 64-bit? If you have to run 64-bit programs you have to install a 64-bit OS. –  muru Aug 19 at 6:57
    
I heared that some softwares do that job... Thats what i'm asking –  A Umar Mukthar Aug 19 at 7:01
    
You will have to use VMs: askubuntu.com/questions/180761/… –  muru Aug 19 at 7:02
    
What is the output of running lscpu in Terminal? –  KasiyA Aug 19 at 8:02
7  
Yes, your system is 64-bit capable, and you should reinstall it at the earliest opportunity, because you will run into this problem again and it will be even more painful to deal with later. –  Michael Hampton Aug 19 at 19:37

5 Answers 5

up vote 11 down vote accepted

Provided that your hardware support 64-bits, which does:

CPU op-mode(s): 32-bit, 64-bit

and the package was prepared to use multiarch, which is also true:

 dpkg -I viber.deb
 new debian package, version 2.0. <--- here
 size 57046082 bytes: control archive=8024 bytes.
       0 bytes,     0 lines      0                    
    1210 bytes,    29 lines      control              
    9475 bytes,    33 lines   *  copyright            
    7404 bytes,    85 lines      md5sums              
      39 bytes,     2 lines   *  postinst             #!/bin/bash
     800 bytes,    35 lines   *  preinst              #!/bin/bash
     500 bytes,    24 lines   *  prerm                #!/bin/bash
 Package: viber
 Version: 4.2.2.6
 Section: non-free/net
 Priority: extra
 Architecture: amd64 <---- and here

you could just install the necessary 64-bit libraries and binaries which are dependency of the package (which is none, more about that later) that you need to run the application, with virtual zero performance impact. In my case, I just installed the package just fine:

$ sudo dpkg --add-architecture amd64
## adding 64-bits architecture package, in my system I didn't need to
## but it's likely you have
$ sudo dpkg -i viber.deb
Selecting previously unselected package viber.
(Reading database ... 268703 files and directories currently installed.)
Preparing to unpack viber.deb ...
Unpacking viber (4.2.2.6) ...
Setting up viber (4.2.2.6) ...
Processing triggers for hicolor-icon-theme (0.13-1) ...
Processing triggers for gnome-menus (3.13.3-1) ...
Processing triggers for mime-support (3.56) ...
Processing triggers for desktop-file-utils (0.22-1) ...

And then started running into problems...

The package managers decided that they should not list any dependency for their package,

 Installed-Size: 141336
 Conflicts: Viber (<< 4.2.2.6)
 Replaces: Viber (<< 4.2.2.6)
 Maintainer: Viber Media Inc <support@viber.com>

which they actually need:

ldd /opt/viber/Viber | grep 'not found'
    libXcomposite.so.1 => not found
    libxslt.so.1 => not found
    libxml2.so.2 => not found
    libgstreamer-0.10.so.0 => not found
    libgstapp-0.10.so.0 => not found
    libgstbase-0.10.so.0 => not found
    libgstinterfaces-0.10.so.0 => not found
    libgstpbutils-0.10.so.0 => not found
    libgstvideo-0.10.so.0 => not found
    libsqlite3.so.0 => not found

so you must find and install the libraries missing manually! This is easy if you know the correct tools. apt-file comes handy here, also http://packages.ubuntu.com functionality "Search the contents of packages" comes fine also. But I went ahead and searched for them:

These files are already installed in my system, you only need to copy the package name, the one before the colon that ends with amd64. You should copy the package names as they are:

dpkg -S $(ldd /opt/viber/Viber | awk '{print $3}' | grep -vP 'not|viber')
libc6:amd64: /lib/x86_64-linux-gnu/libpthread.so.0
libc6:amd64: /lib/x86_64-linux-gnu/libdl.so.2
libc6:amd64: /lib/x86_64-linux-gnu/librt.so.1
libstdc++6:amd64: /usr/lib/x86_64-linux-gnu/libstdc++.so.6
libc6:amd64: /lib/x86_64-linux-gnu/libm.so.6
libgcc1:amd64: /lib/x86_64-linux-gnu/libgcc_s.so.1
libc6:amd64: /lib/x86_64-linux-gnu/libc.so.6
libx11-6:amd64: /usr/lib/x86_64-linux-gnu/libX11.so.6
libxext6:amd64: /usr/lib/x86_64-linux-gnu/libXext.so.6
zlib1g:amd64: /lib/x86_64-linux-gnu/libz.so.1
libgl1-mesa-glx:amd64: /usr/lib/x86_64-linux-gnu/libGL.so.1
libxrender1:amd64: /usr/lib/x86_64-linux-gnu/libXrender.so.1
libglib2.0-0:amd64: /lib/x86_64-linux-gnu/libglib-2.0.so.0
libglib2.0-0:amd64: /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
libxcb1:amd64: /usr/lib/x86_64-linux-gnu/libxcb.so.1
libglapi-mesa:amd64: /usr/lib/x86_64-linux-gnu/libglapi.so.0
libxdamage1:amd64: /usr/lib/x86_64-linux-gnu/libXdamage.so.1
libxfixes3:amd64: /usr/lib/x86_64-linux-gnu/libXfixes.so.3
libx11-xcb1:amd64: /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1
libxcb-glx0:amd64: /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0
libxcb-dri2-0:amd64: /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0
libxcb-dri3-0:amd64: /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0
libxcb-present0:amd64: /usr/lib/x86_64-linux-gnu/libxcb-present.so.0
libxcb-sync1:amd64: /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1
libxshmfence1:amd64: /usr/lib/x86_64-linux-gnu/libxshmfence.so.1
libxxf86vm1:amd64: /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1
libdrm2:amd64: /usr/lib/x86_64-linux-gnu/libdrm.so.2
libpcre3:amd64: /lib/x86_64-linux-gnu/libpcre.so.3
libffi6:amd64: /usr/lib/x86_64-linux-gnu/libffi.so.6
libxau6:amd64: /usr/lib/x86_64-linux-gnu/libXau.so.6
libxdmcp6:amd64: /usr/lib/x86_64-linux-gnu/libXdmcp.so.6

These I didn't had them installed, which I obtained using ldd /opt/viber/Viber | grep 'not found' | awk '{printf "%s$\n", $1}' | apt-file search -x -a amd64 -f - | sed 's/\:/:amd64:/':

$ ldd /opt/viber/Viber | grep 'not found' | awk '{printf "%s$\n", $1}' | apt-file search -x -a amd64 -f - | sed 's/\:/:amd64:/'
libgstreamer-plugins-base0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstapp-0.10.so.0
libgstreamer-plugins-base0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstinterfaces-0.10.so.0
libgstreamer-plugins-base0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstpbutils-0.10.so.0
libgstreamer-plugins-base0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstvideo-0.10.so.0
libgstreamer0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstbase-0.10.so.0
libgstreamer0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstreamer-0.10.so.0
libsqlite3-0:amd64: /usr/lib/x86_64-linux-gnu/libsqlite3.so.0
libxcomposite1:amd64: /usr/lib/x86_64-linux-gnu/libXcomposite.so.1
libxml2:amd64: /usr/lib/x86_64-linux-gnu/libxml2.so.2
libxslt1.1:amd64: /usr/lib/x86_64-linux-gnu/libxslt.so.1

apt-file was a tease to give me the 64-bit packages so I had to do sudo apt-file -a amd64 update to force it to have the 64-bit file list.

Now, let me explain what is all the above:

  • ldd /path/to/binary: reads a binary and tells you what are the required libraries, symbols, etc.
  • dpkg -S: search which packages provide a specific installed file.
  • awk, sed and grep: are modifying the text stream to process only the interesting parts or show the desired output.
  • |, $(...): the first allows me to pipe the output of a command to another, and the later allows me to execute/evaluate a command before the main ones gets executed.

TL;dr just install these packages:

sudo dpkg --add-architecture amd64 ## adding 64-bits architecture package
sudo apt-get update
sudo apt-get install libgstreamer-plugins-base0.10-0:amd64 libgstreamer-plugins-base0.10-0:amd64 libgstreamer-plugins-base0.10-0:amd64 libgstreamer-plugins-base0.10-0:amd64 libgstreamer0.10-0:amd64 libgstreamer0.10-0:amd64 libsqlite3-0:amd64 libxcomposite1:amd64 libxml2:amd64 libxslt1.1:amd64 libc6:amd64 libdrm2:amd64 libffi6:amd64 libgcc1:amd64 libgl1-mesa-glx:amd64 libglapi-mesa:amd64 libglib2.0-0:amd64 libpcre3:amd64 libstdc++6:amd64 libx11-6:amd64 libx11-xcb1:amd64 libxau6:amd64 libxcb1:amd64 libxcb-dri2-0:amd64 libxcb-dri3-0:amd64 libxcb-glx0:amd64 libxcb-present0:amd64 libxcb-sync1:amd64 libxdamage1:amd64 libxdmcp6:amd64 libxext6:amd64 libxfixes3:amd64 libxrender1:amd64 libxshmfence1:amd64 libxxf86vm1:amd64 zlib1g:amd64

You also need to install the 64-bit kernel.

share|improve this answer
    
root@umar:/home/umar/Desktop# sudo dpkg -i viber.deb dpkg: error processing archive viber.deb (--install): package architecture (amd64) does not match system (i386) Errors were encountered while processing: viber.deb –  A Umar Mukthar Aug 20 at 2:15
    
@AUmarMukthar sudo dpkg --add-architecture amd64. –  Braiam Aug 20 at 2:21
    
I tried your command. No further progress –  A Umar Mukthar Aug 20 at 2:35
2  
"Is probable that you need to install the 64-bit kernel as well." - that's not probable, it's 100% certain. A 32bit kernel just doesn't have what it takes to set up a 64 process environment. –  Mat Aug 20 at 4:51
3  
@karel: unix.stackexchange.com/a/134394/5842 –  Mat Aug 20 at 8:04

It is not possible to install a software which support only 64 bit arch on a 32 bit OS whereas the reverse is true. In order to install a 64 bit software you will need a hardware which support 64 bit and a 64 bit OS running on the top of it.

Also I would like to mention that it is not possible to install 64 Bit OS as a Virtual machine on a hardware which support only 32 bit architecture. Your hardware should support 64 Bit architecture along with virtualization support in order to create 64 Bit virtual machines.

share|improve this answer
1  
You can install a 64 bit vm on a 32 bit machine just as you can install one of any architecture, look at qemu for example. Note however it will be extraordinarily slow. –  Vality Aug 19 at 8:40
    
@Vality Your answer seems to be good. Could you further improve the answer. –  A Umar Mukthar Aug 19 at 9:32
    
@AUmarMukthar I that handy at all? If it is still lacking please comment and I will see if I can improve it. –  Vality Aug 19 at 11:55

I have to say you are not true about

my computer only supports 32-bit

According to the output of running lscpu your Ubuntu version that installed is 32 bit while Your system can support 64 bit application if you want to install 64 bit application you have to install 64 bit of Ubuntu OS. see this lines below:

Architecture: i686              # <-- your kernel is 32 bit (32 bit Ubuntu)
CPU op-mode(s): 32-bit, 64-bit  # <-- your cpu can handle 32 or 64 bit instructions
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1 
Core(s) per socket: 2 
Socket(s): 1 
Vendor ID: GenuineIntel 
CPU family: 6 
Model: 23 
Stepping: 10 
CPU MHz: 2800.000 
BogoMIPS: 5586.12 
Virtualization: VT-x 
L1d cache: 32K 
L1i cache: 32K 
L2 cache: 2048K

Download and install 64 bit Ubuntu 14.04.1 and then install Viber as well.

share|improve this answer
    
That right if i do so i will loss other applications so far installed.. So only i'm searching for a solution. Any how thanks for your info. +1 for your efforts –  A Umar Mukthar Aug 19 at 14:02

You can install 64 bit software on a machine built with 32 bit hardware in the same way you can run say ARM software on an x86 target, using dynamic translation.

Basically, a piece of software such as qemu sits in-between the programs and your computer, performing a translation from the AMD64 instruction set to the x86 (probably i686) one (with a very severe performance hit admittedly, which in your case could be totally avoidable).

Given you are using ubuntu you have an excellent piece of documentation on how to set this up. Basically you have one of two choices, you can either run the program in a complete 64 bit VM environment with its own kernel or, what I think you want here is user-space visualization, this uses thunking (I do not think it is commonly called thunking these days but forget the new word) to translate system calls from 64 bit to 32 bit so that you can use your own kernel.

Now the guide explains this better than me, but in short you need to install qemu and the qemu-kvm-extras-static packages then use the qemu-debootstrap to setup an environment and libraries for your 64 bit program. Then you need to use binfmt_misc and the static qemu interpreter (qemu-arch-static, in your case probably x86_64, x64 or AMF64) to run your program inside it's environment.

Note that however, your CPU seems to support 64 bit instructions so it may be possible for you to install 64 bit ubuntu, you can without any emulation run x86 code on an AMD64 machine and if you are able to do this it may be easier, if on the other hand you want to discover qemu and the world of architecture emulation (may come in hand later if you get a program built for say... ARM such as something built for a phone) I recommend you go on ahead but beware, things sometimes take a little fiddling or debugging before they will work nicely.

share|improve this answer
5  
This sort of "dynamic translation" virtualization will be painfully slow. And since he has a 64-bit system in the first place, it would be best to just install a 64-bit OS. –  Michael Hampton Aug 19 at 19:35
    
@MichaelHampton I know it will be slow and have indeed noted that, I have also noted that he may be better off with a 64 bit OS, however I also wanted to give an answer that would answer the question asked. –  Vality Aug 19 at 22:51
    
I didn't think "performance hit" adequately explains just how slow it will be. :) –  Michael Hampton Aug 19 at 22:53
    
@MichaelHampton True. Happy now? ;) –  Vality Aug 19 at 23:04
    
Yes, now I like it. :) –  Michael Hampton Aug 19 at 23:08

Read about 32 bit (x86) and 64 bit applications:
http://www.techsupportalert.com/content/32-bit-and-64-bit-explained.htm

Sometimes it is possible that an application or single package [one .deb file] act as both after installation.
ie, x86 app on x86 OS and x64 app on x64 OS

share|improve this answer
    
Also it's possible install x86 application on x64 OS. –  KasiyA Aug 19 at 10:23

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.