19

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
8
  • 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, 2014 at 6:57
  • I heared that some softwares do that job... Thats what i'm asking Aug 19, 2014 at 7:01
  • You will have to use VMs: askubuntu.com/questions/180761/…
    – muru
    Aug 19, 2014 at 7:02
  • What is the output of running lscpu in Terminal? Aug 19, 2014 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. Aug 19, 2014 at 19:37

6 Answers 6

22

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 apt-get update # this downloads the package list for amd64 arch
$ 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 <[email protected]>

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.

9
  • 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 Aug 20, 2014 at 2:15
  • @AUmarMukthar sudo dpkg --add-architecture amd64.
    – Braiam
    Aug 20, 2014 at 2:21
  • I tried your command. No further progress Aug 20, 2014 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, 2014 at 4:51
  • 3
    @karel: unix.stackexchange.com/a/134394/5842
    – Mat
    Aug 20, 2014 at 8:04
11

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.

3
  • 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, 2014 at 8:40
  • @Vality Your answer seems to be good. Could you further improve the answer. Aug 19, 2014 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, 2014 at 11:55
10

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.

1
  • 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 Aug 19, 2014 at 14:02
10

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.

5
  • 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. Aug 19, 2014 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, 2014 at 22:51
  • I didn't think "performance hit" adequately explains just how slow it will be. :) Aug 19, 2014 at 22:53
  • @MichaelHampton True. Happy now? ;)
    – Vality
    Aug 19, 2014 at 23:04
  • Yes, now I like it. :) Aug 19, 2014 at 23:08
1

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

1
  • Also it's possible install x86 application on x64 OS. Aug 19, 2014 at 10:23
-1

If you are running 32bit system use

sudo dpkg --force-architecture -i viber.deb

link: How to Install Viber on Ubuntu 13.10, 32bit

1
  • Actually is not working too. download viber for windows and install it with wine, worked for me.
    – stan
    May 13, 2015 at 20:06

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .