32bit Cisco VPN client on 64 bit linux systems

 

I’ve just encountered a strange problem with Cisco VPN Client:

# ll /opt/cisco-vpnclient/bin/
total 4224
---x--x--x 1 root bin 1241184 Feb 23 12:35 cisco_cert_mgr*
---s--x--x 1 root bin 2181976 Feb 23 12:35 cvpnd*
---x--x--x 1 root bin 226700 Feb 23 12:35 ipseclog*
---x--x--x 1 root bin 666260 Feb 23 12:35 vpnclient*
# /opt/cisco-vpnclient/bin/vpnclient
zsh: no such file or directory: /opt/cisco-vpnclient/bin/vpnclient

My initial response was “wtf, how is this possible? The file is there, how dare zsh states the opposite?”

I scratched my head for a while, then tried this:

# ldd /opt/cisco-vpnclient/bin/vpnclient
not a dynamic executable
# ld /opt/cisco-vpnclient/bin/vpnclient
ld: i386 architecture of input file `/opt/cisco-vpnclient/bin/vpnclient' is incompatible with i386:x86-64 output
ld: error in /opt/cisco-vpnclient/bin/vpnclient(.eh_frame); no .eh_frame_hdr table will be created.
ld: warning: cannot find entry symbol _start; defaulting to 000000000040a900

Ah, now that makes sense. Cisco has probably compiled vpnclient with gcc 32bit, so I turned the multilib repo on and installed lib32-gcc (named lib32gcc on ubuntu)

# pacman -S lib32-glibc lib32-gcc-libs
# ldd /opt/cisco-vpnclient/bin/vpnclient
linux-gate.so.1 => (0xf7793000)
libvpnapi.so => /opt/cisco-vpnclient/lib/libvpnapi.so (0xf774a000)
libm.so.6 => /usr/lib32/libm.so.6 (0xf7701000)
libc.so.6 => /usr/lib32/libc.so.6 (0xf75b6000)
/lib/ld-linux.so.2 (0xf7794000)

vpnclient works again :-)

Related posts: