Friday, August 2, 2013

Stand alone Utorrent Server x64 (64bit) on Linux without system dependecies

Utorrent has released a 64 bit build for Linux platforms (see details here). The release is built on Ubuntu 12.04 (LTS). The problem is that if you try to run it on a distribution like RHEL/CentOS or any older distribution with old libraries, it will fail because of the newer dependencies like glibc 2.14 and libssl 1.0.0 etc.
./utserver: /usr/lib64/libssl.so.1.0.0: no version information available (required by ./utserver)
./utserver: /usr/lib64/libcrypto.so.1.0.0: no version information available (required by ./utserver)
./utserver: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./utserver)
Here is a solution to run utorrent server standalone on any 64 bit distribution without using/touching the system's libraries (hence no dependencies). The trick is to collect all the required libraries separately and run utorrent using those in isolation from the system. Here are the steps:

First collect the required libraries, the list is not huge, utorrent binary (utserver) only has a few dependecies namely:
glibc, libgcc, libselinux, libkeyutils, libssl, libcomerr, libkrb5, zlib
So what we are going to do is to collect all these pre-compiled libraries from a newer distribution like Fedora-19-x64 or Ubuntu-12.04-x64 or any distribution that has the required newer libraries, you can collect them from the online software repositories or from where ever you feel comfortable.

I am going to use the safest (not the most convenient) option, get these libraries from Ubuntu server 12.04.2 (x64) distribution CD. I say it is the safest because the distributed utorrent package (Ubuntu 12.04 build x64 (27079)) is built on this version of Ubuntu, so one can be sure that libraries on this distro will meet the requirement (By the way, I tried this method using the packages from Fedora 19 and it worked perfectly fine).

Download the Ubuntu server 12.04.2 (x64) CD:
cd
wget http://releases.ubuntu.com/12.04.2/ubuntu-12.04.2-server-amd64.iso
Mount the CD:
mkdir /mnt/ubuntu12042
mount -o loop,ro /root/ubuntu-12.04.2-server-amd64.iso /mnt/ubuntu12042
Copy the required packages to the temporary location:
mkdir /tmp/debs
cp /mnt/ubuntu12042/pool/main/g/gcc-4.6/libgcc1_4.6.3-1ubuntu5_amd64.deb /tmp/debs/
cp /mnt/ubuntu12042/pool/main/k/krb5/libkrb5-3_1.10+dfsg~beta1-2ubuntu0.3_amd64.deb /tmp/debs/
cp /mnt/ubuntu12042/pool/main/e/e2fsprogs/libcomerr2_1.42-1ubuntu2_amd64.deb /tmp/debs/
cp /mnt/ubuntu12042/pool/main/z/zlib/zlib1g_1.2.3.4.dfsg-3ubuntu4_amd64.deb /tmp/debs/
cp /mnt/ubuntu12042/pool/main/k/keyutils/libkeyutils1_1.5.2-2_amd64.deb /tmp/debs/
cp /mnt/ubuntu12042/pool/main/libs/libselinux/libselinux1_2.1.0-4.1ubuntu1_amd64.deb /tmp/debs/
cp /mnt/ubuntu12042/pool/main/e/eglibc/libc6_2.15-0ubuntu10.3_amd64.deb /tmp/debs/
cp /mnt/ubuntu12042/pool/main/o/openssl/libssl1.0.0_1.0.1-4ubuntu5.5_amd64.deb /tmp/debs/

Extract the packages:
cd /tmp/debs/
for package in *.deb; do
ar p $package data.tar.gz | tar -zx
done
Download utorrent:
cd
wget 'http://download.utorrent.com/linux/utorrent-server-3.0-ubuntu-12.04-27079.x64.tar.gz'
tar -xzf utorrent-server-3.0-ubuntu-12.04-27079.x64.tar.gz
mv ./utorrent-server-v3_0 /opt/utorrent
Copy the libraries from the extracted packages:
mv /tmp/debs/lib /opt/utorrent/
#rm -rf /tmp/debs
That's it! Now you have the 64 bit utorrent in /opt/utorrent and all the required libraries in /opt/utorrent/lib. Now you can run utorrent using the following command:
/opt/utorrent/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 --library-path /opt/utorrent/lib/x86_64-linux-gnu /opt/utorrent/utserver

In the following steps I'll setup a secure, proper and clean environment for utorrent running it with a limited user and with proper configuration, log and pid files etc.

Make the required directories in utorrent:
cd /opt/utorrent
mkdir conf log pid settings webui data
mv webui.zip webui/
Get the default configuration file:
wget -O /opt/utorrent/conf/utserver.conf http://kxr.me/blog/uts/utserver.conf.customlibs.ubuntu64
Get the control script (to start/stop/reload utorrent)
wget -O /opt/utorrent/utsctl http://kxr.me/blog/uts/utsctl.customlibs.ubuntu64
chmod +x /opt/utorrent/utsctl
ln -s /opt/utorrent/utsctl /usr/local/bin/utsctl
Set the owner permissions:
 (note I am using the utorrent user, but you can use any user. If you use a different user, update the shell_user variable in /opt/utorrent/utsctl accordingly)
useradd -d /opt/utorrent
chown -R utorrent.utorrent /opt/utorrent
There you go, if you did all the steps correctly, you should now be able to start utorrent server by:
utsctl start
The configuration file is located in:
(Note: after changing the configuration file do a "utsctl reload" for the new changes to take effect. Stopping and starting will not load the new changes.)
/opt/utorrent/conf/utserver.conf
Don' forget to set the user name, password and directories in the configuration file. Right now the configuration file we downloaded is set to download every thing in /opt/utorrent/data/ and the login credentials are:
user: admin
pass:

You can use the same exact steps to setup a stand alone 32 bit utorrent server that will run on both 64bit and 32bit systems without requiring any system library/dependency. In order to do so use the 32 bit ubuntu server 12.04.2 CD for the 32 bit pacakges and use the 32 bit utorrent package: Ubuntu 10.10 x86 (27079). Don't forget to set the lib_path variable in /opt/utorrent/utsctl to "/opt/utorrent/lib/i386-linux-gnu"

Suggestions and Comments are welcomed :)

10 comments:

  1. I get the following error:

    root@KaliChad:/opt/utorrent# /opt/utorrent/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 --library-path /opt/utorrent/lib/x86_64-linux-gnu /opt/utorrent/utserver
    /opt/utorrent/utserver: error while loading shared libraries: /opt/utorrent/utserver: wrong ELF class: ELFCLASS32

    Why is that? I am running debian OS 64 bit..

    ReplyDelete
  2. Also when doing:

    root@KaliChad:/opt/utorrent# utsctl status
    Utorrent seems to be stopped, PID file /opt/utorrent/pid/utserver.pid not found or empty

    Where do i get the PID file from?

    ReplyDelete
  3. This comment has been removed by the author.

    ReplyDelete
  4. Thanks so much for this! Using this I was finally able to get utorrent running on Centos 6.4. Anyways, the new version of utorrent is based on Ubuntu 13.04 so a few things have changed. Since I used your blog to figure out how to get it working, I figured I would post the changes in case you want to make a new blog post for the latest version.

    cd /tmp
    wget http://releases.ubuntu.com/13.04/ubuntu-13.04-server-amd64.iso

    ReplyDelete
  5. mkdir /mnt/ubuntu1304

    mount -o loop,ro /tmp/ubuntu-13.04-server-amd64.iso /mnt/ubuntu1304/


    mkdir /tmp/debs
    cp /mnt/ubuntu1304/pool/main/g/gcc-4.7/libgcc1_4.7.3-1ubuntu1_amd64.deb /tmp/debs
    cp /mnt/ubuntu1304/pool/main/k/krb5/libkrb5-3_1.10.1+dfsg-4+nmu1_amd64.deb /tmp/debs
    cp /mnt/ubuntu1304/pool/main/e/e2fsprogs/libcomerr2_1.42.5-1ubuntu4_amd64.deb /tmp/debs
    cp /mnt/ubuntu1304/pool/main/z/zlib/zlib1g_1.2.7.dfsg-13ubuntu2_amd64.deb /tmp/debs
    cp /mnt/ubuntu1304/pool/main/k/keyutils/libkeyutils1_1.5.5-4_amd64.deb /tmp/debs
    cp /mnt/ubuntu1304/pool/main/libs/libselinux/libselinux1_2.1.9-5ubuntu1_amd64.deb /tmp/debs
    cp /mnt/ubuntu1304/pool/main/e/eglibc/libc6_2.17-0ubuntu5_amd64.deb /tmp/debs
    cp /mnt/ubuntu1304/pool/main/o/openssl/libssl1.0.0_1.0.1c-4ubuntu8_amd64.deb /tmp/debs

    ReplyDelete
  6. I think this is the only good guide for Centos 6.5. Thank you!

    ReplyDelete
  7. Thank you so much for this, although with minor tweaks( ubuntu-12.04.2-server-amd64.iso is updated to ubuntu-12.04.4-server-amd64.iso on its servers, and few debs filenames changed too) everything else worked correctly.

    Also for those who can't mount iso (kernel doesn't support, etc...): you can use 7z.

    ReplyDelete
  8. Thanks for your guide, but when I run utserver this error appears: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file: No such file or directory

    I do not know why this error occurs, please help me fix it, thank you :D

    ReplyDelete
  9. đồng tâm
    game mu
    cho thuê nhà trọ
    cho thuê phòng trọ
    nhac san cuc manh
    số điện thoại tư vấn pháp luật miễn phí
    văn phòng luật
    tổng đài tư vấn pháp luật
    dịch vụ thành lập công ty trọn gói
    nước cờ trên bàn thương lượng
    mbp
    erg
    nghịch lý
    chi square test
    nghệ thuật nói chuyện
    coase
    thuyết kỳ vọng
    chiến thắng con quỷ trong bạn
    cân bằng nash

    - Chú quy củ một chút cho anh, theo trình tự là nhất định phải làm. Lúc này là trường hợp đặc biệt nên mới được làm như vậy. Nếu là chuyên j khác thì chú đã sớm bị cách chức, còn truy cứu trách nhiệm của chú.
    Thái Chánh Dương trầm giọng nói.

    - Em hiểu, lần sau sẽ không dám làm như vậy nữa.
    Triệu Quốc Đống thấy Thái Chánh Dương sa sầm mặt liền không cười nữa.
    - Chỉ là hiệu suất làm việc của các cơ quan trên tỉnh quá chậm, hơn nữa quan niệm cổ hủ. Em thấy Ủy ban kế hoạch phát triển không đồng ý với việc nhà đầu tư bên ngoài tiến vào đường cao tốc. Cũng may Phó chủ tịch Trương vừa phụ trách tài chính, vừa phụ trách Ủy ban kế hoạch phát triển nên trình tự mới nhanh một chút. Nếu không em không rõ Ủy ban kế hoạch phát triển quốc gia sẽ có ý kiến vào lúc nào.

    Thái Chánh Dương cũng biết Triệu Quốc Đống nói là thật, chỉ là tình hình này cũng không phải một hai ngày thay đổi được. Thói quen làm việc đã ăn sâu vào suy nghĩ trong lòng mọi người. Bất cứ quá trình phê duyệt nào đều cần có một thời gian mới được. Bọn họ đúng là không quen với hiệu suất làm việc nhanh chóng của quốc tế.

    Triệu Quốc Đống cũng quen với tính cách của Thái Chánh Dương. Hắn thấy Thái Chánh Dương trầm ngâm thì biết đối phương có việc khó giải quyết. Nếu không cũng không cần gọi hắn vào lâu như vậy mà chưa nhắc tới.

    - Thái ca, có phải có việc không?

    - Ừ, có một việc.
    Thái Chánh Dương gật đầu nói:
    - Hôm nay Chủ tịch Tần nói chuyện với anh về Phòng cao tốc. Chú cũng biết Phòng cao tốc chỉ là đơn vị quá độ, cấp bậc thấp. Khi việc xây dựng đường cao tốc của tỉnh ta phát triển, thành lập công ty khai thác đường cao tốc là nhất định, cấp bậc sẽ là cấp cục, trực thuộc sở quản lý.

    ReplyDelete
  10. I must say, that Torrent is one of the most famous and used places on the web. The way they provide Free Data, and the popularity and Respect they have earned in these years, is really unbelievable. Officially they are illegal. but they are kind of Robin Hood type. Who takes paid things from the providers and make them available to the public for Free.
    Virtual Edge

    ReplyDelete