Friday, December 30, 2011

Utorrent Server on Linux, Step by Step How To

It has been six years since I migrated to Linux (from windows) and never looked back. I used to use uTorrent on windows as my torrent client. It was small, light-weight and very user friendly. Frankly speaking in these six years of my linux voyage, I never found any alternative to that. Until recently I heard that utorrent is now available for linux. Keeping my hopes high, I gave it a try and it lived up to my expectations. As expected it is free but closed-source, with a little hope from the forums that it might become open-source in the future. But anyways, I am really thankful to the utorrent team for briniging out utorrent for linux.

A couple of things felt missing but still it is  better than the most, infact all! It is currently an alpha release of version 3.0 build, with only web-based GUI and 32bit release (requires 32bit libraries on x64 systems).

Here is a complete step by step installation guide:

Step 0: Pre-Requisites

According to the website:
System Requirements:
  • x86 Ubuntu 9.10+, Debian 5+, Fedora 12+
  • Linux kernel 2.6.13 or newer required
utserver binary requires glibc-2.11 or newer. Do check this before continuing. To check your version of glibc:
rpm -q glibc
(Note: If you have old libraries, or facing any library related error, I have a different guide for you HERE )

I am using a 32 bit Centos 6.2, but this guide should work with most linux distributions. If you are using a x64 distribution, you'll need to install all the 32 bit libraries.

In case of a 32 bit distro, there are hardly any dependencies to be installed. They are installed by default even in the minimal installations. Here is the list of dependencies anyway:
  • glibc >= 2.11
  • libgcc
  • openssl
  • krb5-libs
  • libcom_err
  • zlib
  • keyutils-libs
  • libselinux
If you are using a 32 bit distro:
yum install glibc libgcc openssl krb5-libs libcom_err zlib keyutils-libs libselinux
If you are using a 64bit distro, install the 32bit libraries:

yum install glibc glibc.i[36]86 libgcc libgcc.i[36]86 openssl openssl.i[36]86 krb5-libs krb5-libs.i[36]86 libcom_err libcom_err.i[36]86 zlib zlib.i[36]86 keyutils-libs keyutils-libs.i[36]86 libselinux libselinux.i[36]86

Step 1: Make basic directories

I will keep it in /opt (ofcourse you can keep it anywhere feasible)
mkdir /opt/utorrent
mkdir /opt/utorrent/conf
mkdir /opt/utorrent/data
mkdir /opt/utorrent/pid
mkdir /opt/utorrent/webui
mkdir /opt/utorrent/log

Step 2: Download µTorrent Server

At the time of this writing, µTorrent Server alpha (3.0 build 25053) was the latest available one. You can find the latest release here. Download the package to a tmp location, extract and then copy the required files:
wget -O /tmp/utorrent-server-3.0-25053.tar.gz http://download.utorrent.com/linux/utorrent-server-3.0-25053.tar.gz
tar --directory /tmp -xzf /tmp/utorrent-server-3.0-25053.tar.gz
cp /tmp/utorrent-server-v3_0/utserver /opt/utorrent/
cp /tmp/utorrent-server-v3_0/webui.zip /opt/utorrent/webui/

Step 3: Libraries check

Before proceeding further, it will be a good idea to locate any missing libraries.
Use ldd command to find out any missing library:

ldd -r /opt/utorrent/utserver
You might get the following error:
/opt/utorrent/utserver: error while loading shared libraries: libssl.so.0.9.8: cannot open shared object file: No such file or directory
or
/opt/utorrent/utserver: error while loading shared libraries: libcrypto.so.0.9.8: cannot open shared object file: No such file or directory
If openssl is installed properly, this might be because you have a newer version of the shared library. Creating a softlink should solve the problem.

First find out what version you have:
find  /*/lib /*lib  -type f -name "libssl.so.*"
find  /*/lib /*lib  -type f -name "libcrypto.so.*"
 This will show you the library you have installed, for example in my case it showed me that I've libssl.so.1.0.0 and libcrypto.so.1.0.0 installed:
[root@localhost ~]# find  /*/lib /*lib  -type f -name "libssl.so.*"
/usr/lib/libssl.so.1.0.0

[root@localhost ~]# find  /*/lib /*lib  -type f -name "libcrypto.so.*"
/usr/lib/libcrypto.so.1.0.0
Now simply create a soft link from the one you have to the one required by utserver:
ln -s /usr/lib/libssl.so.1.0.0 /usr/lib/libssl.so.0.9.8
ln -s /usr/lib/libcrypto.so.1.0.0 /usr/lib/libcrypto.so.0.9.8
(ofcourse you can always install the correct version of openssl instead of doing this softlink trick)

If every thing is fine you should get output some what like this:
[root@his apps]$ ldd -r /opt/utorrent/utserver
/opt/utorrent/utserver: /usr/lib/libcrypto.so.0.9.8: no version information available (required by /opt/utorrent/utserver)
/opt/utorrent/utserver: /usr/lib/libssl.so.0.9.8: no version information available (required by /opt/utorrent/utserver)
    linux-gate.so.1 =>  (0x0042c000)
    libssl.so.0.9.8 => /usr/lib/libssl.so.0.9.8 (0x00cb8000)
    libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0x009dc000)
    libpthread.so.0 => /lib/libpthread.so.0 (0x00110000)
    libm.so.6 => /lib/libm.so.6 (0x00800000)
    librt.so.1 => /lib/librt.so.1 (0x001a2000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00465000)
    libc.so.6 => /lib/libc.so.6 (0x001ab000)
    /lib/ld-linux.so.2 (0x005a8000)
    libgssapi_krb5.so.2 => /lib/libgssapi_krb5.so.2 (0x00c25000)
    libkrb5.so.3 => /lib/libkrb5.so.3 (0x0033b000)
    libcom_err.so.2 => /lib/libcom_err.so.2 (0x0012b000)
    libk5crypto.so.3 => /lib/libk5crypto.so.3 (0x00622000)
    libresolv.so.2 => /lib/libresolv.so.2 (0x00130000)
    libdl.so.2 => /lib/libdl.so.2 (0x0045b000)
    libz.so.1 => /lib/libz.so.1 (0x00767000)
    libkrb5support.so.0 => /lib/libkrb5support.so.0 (0x004be000)
    libkeyutils.so.1 => /lib/libkeyutils.so.1 (0x00991000)
    libselinux.so.1 => /lib/libselinux.so.1 (0x0014a000)
(You can ignore the "no version information" warning). This shows every requirement is fulfilled and utorrent server can now run on this machine. Lets now do some final config tweaks.

Step 4: Create config file

In theory you can just run the utserver binary (like you did in the previous step), and utorrent server should be ready and useable. You don't necessarily need a config file But it is always a good idea to have a config file in hand, it'll make editing and experimenting with the configurations much easier and give you a lot more options to play with.

I wasn't able to find a complete and comprehensive config file. Users are either not using config file or using it just for a couple of options.
I've created this config file from the documentation and added all the options I found. All the directives are explained in the comments and set to the default value.

Here it is (only dir_root is set to /opt/utorrent/data all other values are default):

###########################################
###                                     ###
### Utorrent Server v3.0 Config File    ###
###                                     ###
### By Khizer Naeem                     ###
### khizernaeem@gmail.com               ###
### Date: 29/12/2011                    ###
###                                     ###
###########################################
###########################################
# Note: - Don't use quotes or double quotes when giving a value
#       - Don't add trailing / when specifying any directory

#####################
## Regular Settings #
#####################

#bind_port (integer):
#    Default value: 6881. Port used for BitTorrent protocol. This can be any value in the range 1025-65000.
bind_port: 6881

#max_ul_rate (integer):
#    Default value: -1. Maximum total upload rate in kilobytes per second. -1 means unlimited. We recommend setting it to -1.
max_ul_rate: -1

#max_ul_rate_seed (integer):
#    Default value: -1. Maximum per-torrent upload rate when seeding, in kilobytes per second. -1 means unlimited. We recommend setting it to -1.
max_ul_rate_seed: -1

#conns_per_torrent (integer):
#    Default value: 50. Maximum number of connections for a given torrent.
conns_per_torrent: 50

#max_total_connections (integer):
#    Default value: 200. Maximum number of connection opened at the same time.
max_total_connections: 200

#auto_bandwidth_management (boolean):
#    Default value: true. If true, upload bandwidth is automatically throttled in order to not impact other applications using TCP/IP.
auto_bandwidth_management: true

#max_dl_rate (integer):
#    Default value: -1. Maximum total download rate in kilobytes per second. -1 means unlimited. We recommend setting it to -1.
max_dl_rate: -1

#seed_ratio (integer):
#    Default value: 0. Seed ratio in percent (%) (e.g. 100 means 100%). If not 0, seeding will stop after reaching this upload/download ratio.
seed_ratio: 0

#seed_time (integer):
#    Default value: 0. Time after which seeding will stop, in seconds. 0 means seeding won't stop.
seed_time: 0


#####################
# Internal Settings #
#####################

#bind_ip (string):
# IP address to use for socket connections. If not provided, a default IP address will be used. We do not recommend changing this value.

#ut_webui_port (integer):
# Default value: 8080. Port number where the utserver process accepts HTTP RPC API calls to support the µTorrent-compatible HTTP interface.
ut_webui_port: 8080

#token_auth_enable (boolean)
# Default value: true. If true, the µTorrent HTTP interface defends against cross-site request forgeries.
# If false, the µTorrent HTTP interface will not be protected in this manner.
token_auth_enable: true

#dir_root (string):
# Default value: "". If not empty, dir_active, dir_completed, and dir_torrent_files are relative to this directory.
dir_root:/opt/utorrent/data

#dir_active (string):
# Default value: "./". Directory in which currently downloaded data is saved.
# Can be an absolute path or relative to dir_root or the current working directory if dir_root is not defined or an empty string.
#dir_active: ./

#dir_completed (string):
# Default value: "". Directory where completed downloads are stored.
dir_completed:

#dir_download (string):
# Default value: "". Optional directory where completed downloads can be stored, instead of in dir_completed.
# If no value is specified for this setting, the value of dir_completed is used.
# This option can be specified multiple times in the file - once for each directory to be designated as such.
# This option can be used when adding torrents via the µTorrent HTTP interface, not via the SDK interface.
# Use the action list-dirs to obtain a list of download directories from the µTorrent HTTP interface.
# Use the option download_dir to specify which of these directories to use when adding a torrent by URL or file through the µTorrent HTTP interface;
# The index of each entry will be in order in which each entry appears in utserver.conf
dir_download:

#dir_torrent_files (string):
# Default value: "". Directory where torrent files are stored. If the empty string, the value of dir_active is used.
dir_torrent_files:

#dir_temp_files (string):
# Default value: "". Directory where temporary files are stored. If the empty string, the value of dir_active is used.
# Using a separate directory just for temporary files allows for deleting the files in this directory on boot and/or periodically.
# The utserver process creates temporary files with a .utt extension,
# if a value for this setting is specified, the utserver process will delete all files with that extension in that directory at process startup.
# The value should specify a directory, not a symbolic link to a directory.
dir_temp_files:

#dir_autoload (string):
# Default value: "". Directory where torrent files will be recognized and auto-loaded. If the empty string, auto-load is disabled.
dir_autoload:

#dir_autoload_delete (boolean):
# Default value: false. If true, torrent files in the autoload directory will be deleted after being loaded,
# else they will be renamed with an extension of .loaded. The dir_autoload setting must be specified for this setting to have an effect.
dir_autoload_delete: false

#upnp (boolean):
# Default value: true. If true, UPNP functionality for mapping ports is used by utserver. We recommend setting this value to true.
upnp: true

#natpmp (boolean):
# Default value: true. If true, NAT-PMP functionality for mapping ports is used by utserver. We recommend setting this value to true.
natpmp: true

#lsd (boolean):
#    Default value: true. If true, Local Service Discovery is enabled. We recommend setting this value to true.
lsd: true

#dht (boolean):
# Default value: true. If true, Distributed Hash Table extension is enabled. We recommend setting this value to true.
dht: true

#pex (boolean):
# Default value: true. If true, Peer Exchange extension is enabled. We recommend setting this value to true.
pex: true

#rate_limit_local_peers (boolean):
# Default value: false. If true, rate limiting also applies to communications with peers in the local subnet. We recommend setting this value to false.
rate_limit_local_peers: false

#disk_cache_max_size (integer):
# Default value: 0. Maximum amount of memory used by each of the read, write, and piece caches. Value is in megabytes.
# If 0, accepts the SDK's default choices on selecting sizes of disk caches. Maximum value is 512.
disk_cache_max_size: 0

#preferred_interface (string):
# Default value: "". If defined, name of network interface to be preferred,
# when attempting to search among network interfaces for an external IP and hardware address.
# If empty string, preferred interface is ignored.
preferred_interface:

#admin_name (string):
# Default value: "admin". If defined, name that must be supplied (along with the password) when authenticating to the server via the HTTP interface.
# This allows the administrator to define an initial non-default value for this name.
# This value will not be applied from utserver.conf if settings.dat already exists.
admin_name: admin

#admin_password (string):
# Default value: "". If defined, password that must be supplied (along with the name) when authenticating to the server via the HTTP interface.
# This allows the administrator to define an initial non-default value for this password.
# This value will not be applied from utserver.conf if settings.dat already exists.
admin_password:

#logmask (integer):
# Default value: 0. A mask whose bits when set allow certain categories of log messages to be generated.
# The bits (0 - 31) in the value of this setting correspond to a set of internal events and subsystems.
#
#        3 - send have
#        6 - hole punch
#        7 - got bad piece request
#        8 - trace
#        9 - piece picker
#        10 - got bad cancel
#        11 - got bad unchoke
#        12 - got bad piece
#        13 - rss
#        14 - rss error
#        15 - got have
#        16 - got bad have
#        17 - error
#        18 - aggregated
#        19 - disconnect
#        20 - out connect
#        21 - in connect
#        22 - UPnP
#        23 - UPnP error
#        24 - NATPMP
#        25 - NATPMP error
#        26 - metadata finish
#        27 - web UI
#        28 - got bad reject
#        29 - pex
#        30 - peer messages
#        31 - blocked connect
logmask: 0

#dir_request (string):
# Default value: "". Directory where maintenance request files will be recognized, loaded, and deleted.
# If the empty string, maintenance request handling is disabled.
#
# Your software running on your device can create the following files in this directory in order to request the following maintenance procedures.
#
#    If the file c.utmr is created in or moved into this directory,
#    the credentials necessary to access the µTorrent HTTP interface will be reset to username admin and a blank password.
#
#    If the file wipl.utmr is created in or moved into this directory,
#    the IP restriction list that limits the IPs that can use the µTorrent HTTP interface is cleared,
#    so that there will be no restrictions on IP address.
#
#    If the file rcf.utmr is created in or moved into this directory,
#    the server will reload the configuration file. If you always use this method to request a configuration file reload,
#    you can safely change the value of this setting while the server is running.

#ut_webui_dir (string):
# Default value: "". Directory where the web UI file archive webui.zip is stored,
# or which contains a webui subdirectory within which the unarchived web UI files are stored.
# It can be an absolute path or set relative to the current directory.
ut_webui_dir:

#finish_cmd (string), state_cmd (string):
# Default value: "". If defined,
# finish_cmd is a command that will be executed upon completion of each torrent.
# state_cmd is a command that will be executed when a torrent changes state.
# The command is run asynchronously as the same user that runs the server process.
#
#    The server permits substitutions in the command text as follows:
#
#    %F Name of downloaded data file (for single-file torrents)
#    %D directory where torrent data files are saved
#    %N torrent title
#    %S torrent state
#    %P previous state of torrent
#    %L label associated with torrent
#    %T tracker
#    %M status message
#    %I hex-encoded info-hash
#
#    State (%S) and previous state (%P) are integers that have the following values:
#
#    1 (error)
#    2 (checked)
#    3 (paused)
#    4 (super seeding)
#    5 (seeding)
#    6 (downloading)
#    7 (super seeding (forced))
#    8 (seeding (forced))
#    9 (downloading (forced))
#    10 (queued seed)
#    11 (finished)
#    12 (queued)
#    13 (stopped)
finish_cmd:
state_cmd:
Don't worry most of the lines in the config are comments (only 34 directives in total). I recommend going through it once.

Copy-Paste this configuration into the file utserver.conf in /opt/utorrent/conf/ directory using your favourite text editor like vim or download it directly:

wget -O /opt/utorrent/conf/utserver.conf http://kxr.me/blog/uts/utserver.conf

Now you can start the utorrent server with the following command:
/opt/utorrent/utserver -settingspath "/opt/utorrent/webui/" -configfile "/opt/utorrent/conf/utserver.conf" -logfile "/opt/utorrent/log/ut.log" -pidfile "/opt/utorrent/pid/utserver.pid" -daemon
and stop it with:
 kill `cat /opt/utorrent/pid/utserver.pid`
That is not very convenient, so lets create a script to make things easier.

 #!/bin/sh

uts_bin="/opt/utorrent/utserver"
pid_file="/opt/utorrent/pid/utserver.pid"
settings_path="/opt/utorrent/webui/"
config_file="/opt/utorrent/conf/utserver.conf"
log_file="/opt/utorrent/log/ut.log"

start(){

        if [ -s "$pid_file" ]
        then
                kill -s 0 `cat $pid_file` > /dev/null 2>&1
                if  [ "$?" == "0" ]
                then
                        echo "Err: Utorrent seems to be running, PID `cat $pid_file`"
                else
                        echo "Starting Utorrent Server.."
                        cd $settings_path;$uts_bin -settingspath $settings_path -configfile $config_file -logfile $log_file -pidfile $pid_file -daemon
                fi
        else
                echo "Starting Utorrent Server.."
                cd $settings_path;$uts_bin -settingspath $settings_path -configfile $config_file -logfile $log_file -pidfile $pid_file -daemon
        fi
}
stop(){
        if [ -s "$pid_file" ]
        then
                kill -s 0 `cat $pid_file` > /dev/null 2>&1
                if  [ "$?" == "0" ]
                then
                        echo "Stopping Utorrent Server.."
                        kill `cat $pid_file`
                        tail -f /dev/null --pid `cat $pid_file`
                        rm -f $pid_file
                else
                        echo "Err: Utorrent seems to be stopped, PID file $pid_file not found or empty"
                fi
        else
                echo "Err: Utorrent seems to be stopped, PID file $pid_file not found or empty"
        fi
}
status(){
        if [ -s "$pid_file" ]
        then
                kill -s 0 `cat $pid_file` > /dev/null 2>&1
                if  [ "$?" == "0" ]
                then
                        echo "Utorrent seems to be running, PID `cat $pid_file`"
                else
                        echo "PID file present, but no process with PID `cat $pid_file` running"
                fi
        else
                echo "Utorrent seems to be stopped, PID file $pid_file not found or empty"
        fi
}

case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        reload)
                stop
                rm -vf $settings_path/settings.dat*
                start
                ;;
        status)
                status
                ;;
        *)
                echo "Usage $0 {start|stop|reload|status}"
                ;;
esac
Create a file called utsctl in /opt/utorrent and copy-paste the code into it using your favourite editor or download it directly:
wget -O /opt/utorrent/utsctl http://kxr.me/blog/uts/utsctl
Once you have created this script file, lets make it executeable:
chmod +x /opt/utorrent/utsctl
And also make it easily accessible, so that we don't have to type the whole path again and again:
ln -s /opt/utorrent/utsctl /usr/bin/utsctl
Now starting stoping and checking the status is as easy as this:
utsctl start
utsctl stop
utsctl status

Step 5: Start µTorrent Server

Lets now start the utorrent server:
utsctl start
It should output "server started - using locale en_US.UTF-8" and return back to bash prompt. (Optionally, you can add this command to rc.local to auto-start it at startup)

You should now be able to access the utorrent server gui on localhost:
http://localhost:8080/gui
or via the ipaddress/hostname if accessing from a remote computer:
http://1.2.3.4:8080/gui
(don't forget to allow this port in the system's iptable firewall and any other firewall in between)


Here is a screen-shot:

Playing with the configuration:

When you change a configuration in utserver.conf, just restarting the utserver daemon won't update the changes in WebUI. You'll have to remove the settings.dat files and then start the server again i.e,
utsctl stop
rm -f /opt/utorrent/webui/settings.dat*
utsctl start
I've added the "reload" option in the utsctl script that will do all these three things:
utsctl reload

Good Luck :)

Questions/Suggestions/Comments/Corrections/Additions about this HowTo are welcome.

102 comments:

  1. This comment has been removed by a blog administrator.

    ReplyDelete
    Replies
    1. I appreciate your dedication to thoroughness. You've created a spot on tutorial here.

      Delete
  2. your soft link doesnt work correctly or it`s just other problem in my case ((

    ln -s /usr/lib/libssl.so.1.0.0 /usr/lib/libssl.so.0.9.8
    ln -s /usr/lib/libcrypto.so.1.0.0 /usr/lib/libcrypto.so.0.9.8
    after this commands i try to start my utorr server:

    /opt/utorrent/utserver: error while loading shared libraries: libssl.so.0.9.8: cannot open shared object file: No such file or directory

    P.S. openSUSE 12.1

    maybe theese libraries should be updated before when i applied theese commands?:
    ln -s /usr/lib/libssl.so.1.0.0 /usr/lib/libssl.so.0.9.8
    ln -s /usr/lib/libcrypto.so.1.0.0 /usr/lib/libcrypto.so.0.9.8

    ReplyDelete
    Replies
    1. What is the output of:
      find /*/lib /*lib -type f -name "libssl.so.*"
      and
      find /*/lib /*lib -type f -name "libssl.so.*"

      Delete
  3. in first command:
    /lib/libssl.so.1.0.0
    and in the second case we have this:
    /lib/libssl.so.1.0.0

    wheres difference between theese commands which u show me? or maybe i didnt understand u properly? your idea its..?

    ReplyDelete
    Replies
    1. I think I found the problem, in redhat/centos systems the libssl and libcrypto are in /usr/lib, in your case (openSuse) its in /lib. So These commands should work for you:

      ln -s /lib/libssl.so.1.0.0 /lib/libssl.so.0.9.8
      ln -s /usr/libcrypto.so.1.0.0 /lib/libcrypto.so.0.9.8

      I hope this helps :)

      Delete
  4. yes its true what u say about system directories for my os.
    then i used 2 commands which u show me:
    ln -s /lib/libssl.so.1.0.0 /lib/libssl.so.0.9.8
    ln -s /usr/libcrypto.so.1.0.0 /lib/libcrypto.so.0.9.8
    but first way to libssl 098 i have
    and the second way doesnt exist because i cant find this file in way that u show me: ibcrypto.so.1.0.0
    and i didnt found him with search
    so what`s now?

    ReplyDelete
  5. WOW! i found him!
    the way is here: /lib/libcrypto.so.0.9.8 -> /usr/libcrypto.so.1.0.0
    libcrypto.so.1.0.0

    ))

    ReplyDelete
  6. /lib/libcrypto.so.0.9.8 -> /usr/libcrypto.so.1.0.0
    there's an error occurred isn't it?
    and highlighting in red in console mode..
    this should be corrected.. but how?)

    ReplyDelete
  7. ln: failed to create a symbolic link «/lib/libcrypto.so.0.9.8»: The file exists
    and first case i have: libssl.so.0.9.8 -> /lib/libssl.so.1.0.0 without error and red highlight

    ReplyDelete
    Replies
    1. Whats the output of

      find /*/lib /*lib -type f -name "libcrypto.so.*"

      Delete
    2. /lib/libcrypto.so.1.0.0

      Delete
  8. well.. its finally complete to create server but now i have new trouble with him )))
    http://localhost:8080/gui
    when i trying to connect to him through google chrome, he asks me about my login and password, but when i enter requested data into the form - then utorr dont accepting this data and repeat his request.. and this is iterate (i mean cycle)

    ReplyDelete
  9. and yes, I forgot tell you - the server successfully started and works - it is viewed into the system monitor

    ReplyDelete
  10. lol!! i look at conf file and see whats the problem i have with login and pwd ))))
    Thanks a lot for all!

    ReplyDelete
  11. Hi
    Newbie in linux, I try to work utorrent in xubuntu 11.10, the error was"./utserver: error while loading shared libraries: libssl.so.0.9.8: cannot open shared object file: No such file or directory", and no chance to fix-it.
    I try everything from here but failed.
    What can I do?
    Thanks

    ReplyDelete
    Replies
    1. What is the output of:
      find /*/lib /*lib -type f -name "libssl.so.*"
      and
      find /*/lib /*lib -type f -name "libcrypto.so.*"

      Delete
  12. A how to very good!!
    I prefer run the utserver with a user specific (utorrent in my case) to avoid security problems:


    In Step 1
    useradd utorrent -d /opt/utorrent -s /bin/bash

    In Step 4
    Change permision:
    chown utorrent:utorrent /opt/utorrent

    And add in init script:
    !/bin/sh

    shell_user="utorrent"
    uts_bin="/opt/utorrent/utserver"
    pid_file="/opt/utorrent/pid/utserver.pid"
    settings_path="/opt/utorrent/webui/"
    config_file="/opt/utorrent/conf/utserver.conf"
    log_file="/opt/utorrent/log/ut.log"

    start(){

    if [ -s "$pid_file" ]
    then
    kill -s 0 `cat $pid_file` > /dev/null 2>&1
    if [ "$?" == "0" ]
    then
    echo "Err: Utorrent seems to be running, PID `cat $pid_file`"
    else
    echo "Starting Utorrent Server.."
    su -c "$uts_bin -settingspath $settings_path -configfile $config_file -logfile $log_file -pidfile $pid_file -daemon" $shell_user
    fi
    else
    echo "Starting Utorrent Server.."
    su -c "$uts_bin -settingspath $settings_path -configfile $config_file -logfile $log_file -pidfile $pid_file -daemon" $shell_user
    fi
    }

    ..... (the same of original script)

    ReplyDelete
    Replies
    1. Nice, Very thoughtful indeed! In my case I am running it behind closed ports (NAT) so running it as a root user didn't bothered me :)

      Delete
    2. Thanks for this script!

      Delete
    3. I'm getting an error with the su when I run utsctl start. It asks me for a password (not the admin/no-password defined in the conf file) and then gives an authentication failure when I can't provide one.

      Output looks like this:
      $ utsctl start
      /usr/bin/utsctl: 15: [: 1: unexpected operator
      Starting Utorrent Server..
      Password:
      su: Authentication failure

      Btw, I created the user as you did - "useradd utorrent -d /opt/utorrent -s /bin/bash" and then deleted the user and tried again with "useradd -r utorrent -d /opt/utorrent -s /bin/bash" to make it a system (no password, no login) account.

      I tried a number of other flags (e.g., "-M" for no password) but still have the same problem. I'm going to remove the utorrent user stuff, but that's too bad because it looked cleaner.

      Delete
    4. 2 things - I didn't resolve the authentication error (yet? - I may or may not try that again), but my output pasted above had another error in it that I just solved.

      The line:
      "/usr/bin/utsctl: 15: [: 1: unexpected operator"
      is happening because utsctl is calling #!/bin/sh rather than #!/bin/bash. sh and bash use different syntax for comparisons. Running this in bash works perfectly for me.

      Delete
  13. Everithing work fine (Very correct manual). Look at utserver.conf for username and passw. Thanks.

    ReplyDelete
  14. Hello,

    I can' chmod +x /opt/utorrent/utsctl.
    op: chmod: cannot access `/opt/utorrent/utsctl': No such file or directory

    How to solve this problem.

    ReplyDelete
    Replies
    1. looks like you don't have the script in place. What is the ouput of "ls -lah /opt/utorrent"?

      Delete
  15. [root@******* /]# utsctl status
    Utorrent seems to be stopped, PID file /opt/utorrent/pid/utserver.pid not found or empty

    I'm getting that error can you help me.

    ReplyDelete
    Replies
    1. This means utorrent is not running. Start utorrent server by "utsctl start".

      Delete
  16. Sorry Sir I forgot to mention when I did that Is getting stopped and when I check the status I got that line

    ReplyDelete
  17. [root@****** /]# utsctl start
    Starting Utorrent Server..
    /usr/bin/utsctl: line 21: -settingspath: command not found
    [root@****** /]# utsctl status
    Utorrent seems to be stopped, PID file /opt/utorrent/pid/utserver.pid not found or empty

    ReplyDelete
    Replies
    1. There seem to be some problem in the script. Are you sure the script is fine?
      Can you compare your script (/opt/utorrent/utsctl) with this one: (http://configs.ucoz.com/ut30/utsctl.sh.orig).

      Just to be sure run the following command:

      wget -O /opt/utorrent/utsctl http://configs.ucoz.com/ut30/utsctl.sh.orig

      and try again

      Delete
  18. It's not allowing me to paste the whole log so I'm doing it on pastebin please have a look at it.

    Link : http://tinypaste.com/0bb120a0


    This is what I'm getting Sir,Sorry I'm a noob in Linux,I just need a torrent on my vps to seed some of my torrents

    Can you help me sir ?

    ReplyDelete
    Replies
    1. Oh, I think you are using an old distribution.

      remove the old setup: ("rm -rf /opt/utorrent")

      And then follow this guide: http://blog.kxr.me/2012/01/utorrent-on-centos-5-glibc211-not-found.html

      Delete
  19. This comment has been removed by the author.

    ReplyDelete
  20. Awesome, thank you for this! I saw a post on uTorrent's forums linking here, and they were right. I followed your instructions and it worked brilliantly! No errors, no problems! Thank you once again!

    Regards,
    ~kyleey.

    ReplyDelete
  21. Thank you, this worked perfectly on OpenSUSE 12.1

    ReplyDelete
  22. Hello

    what are the steps to install in LinuxMint 13 derived form Ubuntu 12.04?

    Thanks
    Gae

    ReplyDelete
    Replies
    1. Step should be pretty much the same except the yum and the rpm part in the beginning. In case of Mint you can simply skip those steps (because I think you'll have those packages by default), if you find any missing package, install it with apt-get. Rest of the steps should be the same.

      Delete
  23. Thanks man I used this before and it was working like charm. but now i have to install it again but I have problem with login detail.
    as before i used this:
    username: admin
    pass : [blank]
    but it isn't working now. why is that for? what should i do?
    thanks

    ReplyDelete
    Replies
    1. That is very odd! Try the following:
      - Double check the utsserver.conf, make sure the admin_name directive is set to "admin" and admin_password directive is blank. You can re-download the config file [wget -O /opt/utorrent/conf/utserver.conf http://kxr.me/blog/uts/utserver.conf]. Try reloading the configuration by [utsctl reload]

      - If none of that works, try starting the utserver without any configuration, remove the configuration file [rm /opt/utorrent/conf/utserver.conf; touch /opt/utorrent/conf/utserver.conf], and then do a utsctl reload. See if this works.

      Delete
    2. non of those works

      Delete
    3. what should i do man? please help!
      I installed it once. and again i removed the utserver directory and then reinstalled it. but i have problem with username and password.
      !!!!

      Delete
    4. How about you set a simple password in the configuration file and try accessing it with that password?

      Delete
    5. i tried that but it was not working too.
      is there any way to find out what is the matter with this?

      Delete
    6. Well you can try removing the /opt/utorrent [rm -vrf /opt/utorrent], and redo all the steps from the beginning

      Delete
    7. i did it too. but nothing

      Delete
    8. Well I am running out of options. I suspect you are doing some thing wrong. It will be really hard for me to debug that here. You can try the utorrent help forums. If there is way you can give me remote access, may be I can help you out, if so, email me @ khizernaeem [@] gmail

      Delete
    9. thanks for answering...
      can u solve this problem?

      Delete
    10. Well I can try, at least I can look into it.

      Delete
    11. I emailed u with subject : Nima Azizzadeh
      thanks again

      Delete
    12. Problem solved :). Check your inbox for details, you were running some old instances, that weren't getting killed.

      Delete
  24. Hey there, thanks so much for making this! I'm an absolute newbie at linux and when it had me simply download the file without any instructions, I was just a bit stunned... Anyway, I've figured most of it out, but I seem to be stuck at the very end. When I try to start utsctl I get the following:


    Anne@Bit ~ $ utsctl start
    Starting Utorrent Server..
    /opt/utorrent/utserver: /lib/libcrypto.so.0.9.8: no version information available (required by /opt/utorrent/utserver)
    /opt/utorrent/utserver: /usr/lib/libssl.so.0.9.8: no version information available (required by /opt/utorrent/utserver)
    server started - using locale en_US.utf8
    Anne@Bit ~ $ server exited with 1

    The last line follows directly on the ones above it. Can you help me?

    Thanks so much!

    ReplyDelete
    Replies
    1. Which linux distribution are you using? Can you paste the output of utorrent log? If you followed the instructions of this how-to, the log should be in /opt/utorrent/log/ut.log

      Delete
    2. i have same problem as Anne Fluitman and this is my log:
      01:11:19] Using locale en_US.UTF-8
      [01:11:19] GetNodeID failed, using /dev/random
      [01:11:19] total physical memory -1 max disk cache 33554432
      [01:11:19] File not found during integrity check: /opt/utorrent/webui//dht.dat
      [01:11:19] File not found during integrity check: /opt/utorrent/webui//dht.dat.new
      [01:11:19] File not found during integrity check: /opt/utorrent/webui//dht.dat.old
      [01:11:19] File not found during integrity check: /opt/utorrent/webui//rss.dat
      [01:11:19] File not found during integrity check: /opt/utorrent/webui//rss.dat.new
      [01:11:19] File not found during integrity check: /opt/utorrent/webui//rss.dat.old
      [01:11:19] Loaded ipfilter.dat (0 entries)
      [01:11:19] IPv6 is installed
      [01:11:19] File not found during integrity check: /opt/utorrent/webui//resume.dat
      [01:11:19] File not found during integrity check: /opt/utorrent/webui//resume.dat.new
      [01:11:19] File not found during integrity check: /opt/utorrent/webui//resume.dat.old
      [01:11:24] File not found during integrity check: /opt/utorrent/webui//webcache.dat
      [01:11:24] File not found during integrity check: /opt/utorrent/webui//webcache.dat.new
      [01:11:24] File not found during integrity check: /opt/utorrent/webui//webcache.dat.old

      Delete
    3. can you double check:
      1- Config file (use the wget method if you copy-pasted the config file).
      2- File permissions (try "chmod -R 777 /opt/utorrent")
      3- Make sure selinux is not interrupting

      Delete
  25. For buntu or non fedora users i guess
    don't use the soft link, just install libssl0.9.8 using apt-get
    fixed my problem

    ReplyDelete
    Replies
    1. This comment has been removed by a blog administrator.

      Delete
    2. This comment has been removed by a blog administrator.

      Delete
  26. This comment has been removed by the author.

    ReplyDelete
  27. Please could you help me in uninstalling it and removing all files I have downloaded or used in the process. Sorry for being a n00b in Linux.

    ReplyDelete
  28. Thanks man! still working in 2013 ! :-)

    ReplyDelete
  29. Hello how can I change the directory from /opt/utorrent/data to /home/down ?

    ReplyDelete
    Replies
    1. In the configuration file, set the following variables:

      - Keep dir_root empty (other wise all other paths would be relative to this)
      - Set dir_active and dir_completed to /home/down

      Delete
  30. How can I use ip filter server in utorrent?

    ReplyDelete
  31. when i type utsctl stop does it make xxx.com:8080/gui unreachable or still open?

    ReplyDelete
  32. if someone ask installing in ubuntu, the script have to change this part
    if [ "$?" == "0" ]
    to
    if [ $? = 0 ]

    ReplyDelete
  33. Hello, may I ask you how to change the listening port from 8080 to another port? I change ut_webui_port to 7777 (example) and it doesn't work at all.

    I need advice..
    Thanks

    ReplyDelete
  34. Hi this does not work for me on centos 6.4

    I symlinked to the libs but it still does not start, I have also tried the "e" versions
    libssl.so.0.9.8 -> /usr/lib/libssl.so.1.0.0
    libcrypto.so.0.9.8 -> /usr/lib/libcrypto.so.1.0.0

    find /*/lib /*lib -type f -name "libssl.so.*"
    /usr/lib/plexmediaserver/libssl.so.1.0.0
    /usr/lib/libssl.so.0.9.8e
    /usr/lib/libssl.so.1.0.0

    find /*/lib /*lib -type f -name "libcrypto.so.*"
    /usr/lib/plexmediaserver/libcrypto.so.1.0.0
    /usr/lib/libcrypto.so.0.9.8e
    /usr/lib/libcrypto.so.1.0.0

    ldd -r /opt/utorrent/utserver
    linux-vdso.so.1 => (0x00007fff15023000)
    libssl.so.0.9.8 => not found
    libcrypto.so.0.9.8 => not found
    libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003026200000)
    libm.so.6 => /lib64/libm.so.6 (0x0000003026600000)
    librt.so.1 => /lib64/librt.so.1 (0x0000003027200000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x000000302ba00000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003025e00000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003025600000)
    undefined symbol: SSL_CTX_free, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
    undefined symbol: SSL_library_init, version OPENSSL_0.9.8 (/opt/utorrent/u tserver)
    undefined symbol: BIO_read, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
    undefined symbol: SSL_CTX_new, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
    undefined symbol: SSL_load_error_strings, version OPENSSL_0.9.8 (/opt/utorrent/u tserver)
    undefined symbol: SSL_free, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
    undefined symbol: SSL_new, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
    undefined symbol: SSL_connect, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
    undefined symbol: BIO_s_mem, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
    undefined symbol: BIO_test_flags, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
    undefined symbol: OPENSSL_add_all_algorithms_noconf, version OPENSSL_0.9.8 ( /opt/utorrent/utserver)
    undefined symbol: SSL_write, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
    undefined symbol: SSL_read, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
    undefined symbol: BIO_new, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
    undefined symbol: BIO_write, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
    undefined symbol: BIO_ctrl_pending, version OPENSSL_0.9.8 (/opt/utorrent/u tserver)
    undefined symbol: SSLv23_client_method, version OPENSSL_0.9.8 (/opt/utorrent/u tserver)
    undefined symbol: SSL_set_bio, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
    undefined symbol: SSL_state, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
    undefined symbol: ERR_get_error, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
    undefined symbol: ERR_load_BIO_strings, version OPENSSL_0.9.8 (/opt/utorrent/u tserver)
    undefined symbol: ERR_reason_error_string, version OPENSSL_0.9.8 (/opt/ut orrent/utserver)





    ReplyDelete
  35. Dude! I appreciate very much what you've done here.
    Thanks for taking the time. You saved a lot of mine hehehe.
    May the force be with you!

    ReplyDelete
  36. always using and working :D

    tested work properly on centos 6.4 :D

    ReplyDelete
  37. hey guys, it's asking for username password,
    Which one i have to use for it.

    Reply soon as possible..........

    ReplyDelete
    Replies
    1. The default user is admin with no password. You can set the password in /opt/utorrent/conf/utserver.conf, if you do so don't forget to do a "utsctl reload".

      Delete
  38. So i did everything the guide says and the symbolic links worked well but now i have this problem:

    when running: /etc/init.d/utserver start

    I get the following output:

    [....] Starting uTorrent Server: utserver/usr/bin/utserver: /usr/lib/x86_64-linux-gnu/libcrypto.so.0.9.8: version `OPENSSL_0.9.8' not found (required by /usr/bin/utserver)
    /usr/bin/utserver: /usr/lib/x86_64-linux-gnu/libssl.so.0.9.8: version `OPENSSL_0.9.8' not found (required by /usr/bin/utserver)
    failed!

    I linked the libcrypto and libssl using the commands above but i had to change the directories to fit with my os which is debian by the way.

    Any help would be appericated. I did not get past starting the server because it never worked.

    ReplyDelete
    Replies
    1. If you are running it on a 64 bit OS, try this: http://blog.kxr.me/2013/08/stand-alone-utorrent-server-x64-64bit.html

      Delete
    2. Here is the output from the ldd by the way:

      linux-gate.so.1 => (0xf7773000)
      libssl.so.0.9.8 => not found
      libcrypto.so.0.9.8 => not found
      libpthread.so.0 => /lib/i386-linux-gnu/i686/cmov/libpthread.so.0 (0xf7736000)
      libm.so.6 => /lib/i386-linux-gnu/i686/cmov/libm.so.6 (0xf7710000)
      librt.so.1 => /lib/i386-linux-gnu/i686/cmov/librt.so.1 (0xf7707000)
      libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf76ea000)
      libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xf7587000)
      /lib/ld-linux.so.2 (0xf7774000)
      undefined symbol: SSL_CTX_free, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: SSL_library_init, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: BIO_read, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: SSL_CTX_new, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: SSL_load_error_strings, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: SSL_free, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: SSL_new, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: SSL_connect, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: BIO_s_mem, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: BIO_test_flags, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: OPENSSL_add_all_algorithms_noconf, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: SSL_write, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: SSL_read, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: BIO_new, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: BIO_write, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: BIO_ctrl_pending, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: SSLv23_client_method, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: SSL_set_bio, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: SSL_state, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: ERR_get_error, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: ERR_load_BIO_strings, version OPENSSL_0.9.8 (/opt/utorrent/utserver)
      undefined symbol: ERR_reason_error_string, version OPENSSL_0.9.8 (/opt/utorrent/utserver)

      Delete
  39. Hi, how can I autorun utorrent on boot ?

    ReplyDelete
  40. 1. cd /etc/rc.d

    2. vi rc.local

    3. and add this line:
    utsvtl start

    ReplyDelete
    Replies
    1. ??!!
      ähm you mean :

      utsctl start
      thank you

      Delete
  41. I installed it and everything work fine. But one error is: I download a file, then restart my server and go back, my file are downloading before go to error and can't download again.
    Thank for any help.

    ReplyDelete
  42. Hi, thanks for the tutorial. I've followed it to the letter and got exactly the same output as shown here and
    launching utsctl start gets me :
    Starting Utorrent Server..
    /opt/utorrent/utserver: /usr/lib/libcrypto.so.0.9.8: no version information available (required by /opt/utorrent/utserver)
    /opt/utorrent/utserver: /usr/lib/libssl.so.0.9.8: no version information available (required by /opt/utorrent/utserver)
    server started - using locale en_US.utf8

    which should be fine, but the problem is, the processor hangs and no GUI shows up, i don't know what went wrong, can you help? thanks

    ReplyDelete
  43. by the way i'm using CentOS 6.4 on a 64bit AMD laptop

    ReplyDelete
  44. Hi Khizer
    Thank you for this...
    I have a problem. I would be appreciated if you help me...
    I installed it and it absolutely workes but when i added a file for downloading, nothing happened. the progress wont go forward and will stay on %0. can u tell me how can I solve this issue?
    thank you

    ReplyDelete
  45. hello my server CentOS 5.6 Minimal (32Bit) problem
    why problem help me pls

    [root@91 ~]# utsctl start
    Starting Utorrent Server..
    /opt/utorrent/utserver: error while loading shared libraries: libssl.so.0.9.8: cannot open shared object file: No such file or directory

    ReplyDelete
  46. hello my server REDHAT 6.4 (64bit)
    when i try to access utorrent on localhost "http://localhost:8080/gui"
    it ask for user name and password "A username and password are being requested by http://localhost:8080. The site says: "uTorrent""
    please help me to sort out this problem

    ReplyDelete
  47. Thanks dude. I have installed uTorrent in my CentOS 6.4 server. Now I want to generate uTorrent link so that I can share my files to everyone. In windows this is easy and working. But in CentOS, when I press the same button to generate link, the box come for "Add RSS feed" and requires feed URL. Could you please tell me how could I generate uTorrent file?

    ReplyDelete
  48. Hello,
    I ve got new problem here:
    I have new version of Openssl with this files:
    libcrypto.so.10
    libcrypto.so.1.0.1e
    libssl.so.10
    libssl.so.1.0.1e

    When I create new links :
    ln -s /usr/lib/libssl.so.1.0.1e /usr/lib/libssl.so.0.9.8
    ln -s /usr/lib/libcrypto.so.1.0.1e /usr/lib/libcrypto.so.0.9.8

    and try to start uTorrent I get error:
    /opt/utorrent/utserver: /usr/lib/libcrypto.so.0.9.8: version `OPENSSL_0.9.8' not found (required by /opt/utorrent/utserver)
    /opt/utorrent/utserver: /usr/lib/libssl.so.0.9.8: version `OPENSSL_0.9.8' not found (required by /opt/utorrent/utserver)

    What I can do ? I need to replace my Openssl installation ?

    ReplyDelete
  49. Mee too. Please help me!

    AnonymousDecember 6, 2013 at 11:43 AM
    Hello,
    I ve got new problem here:
    I have new version of Openssl with this files:
    libcrypto.so.10
    libcrypto.so.1.0.1e
    libssl.so.10
    libssl.so.1.0.1e

    When I create new links :
    ln -s /usr/lib/libssl.so.1.0.1e /usr/lib/libssl.so.0.9.8
    ln -s /usr/lib/libcrypto.so.1.0.1e /usr/lib/libcrypto.so.0.9.8

    and try to start uTorrent I get error:
    /opt/utorrent/utserver: /usr/lib/libcrypto.so.0.9.8: version `OPENSSL_0.9.8' not found (required by /opt/utorrent/utserver)
    /opt/utorrent/utserver: /usr/lib/libssl.so.0.9.8: version `OPENSSL_0.9.8' not found (required by /opt/utorrent/utserver)

    What I can do ? I need to replace my Openssl installation ?

    Reply

    ReplyDelete
  50. Hi,

    Did you find fix for above fix, i am also getting same issue.

    ./utserver: /lib64/libssl.so.0.9.8: version `OPENSSL_0.9.8' not found (required by ./utserver)
    ./utserver: /lib64/libcrypto.so.0.9.8: version `OPENSSL_0.9.8' not found (required by ./utserver)

    ReplyDelete
  51. Hello, I'm under linux mint 16 and I've got utorrent-server-v3_0, is there a start/stop script I can use for it? if not, is there a possibility you may want to write one for it and share?
    If not, should I install your version?
    Thank you

    ReplyDelete
    Replies
    1. anyway I finally ended installing the (I guess) previous version of yours, it works just perfect! congrats!

      Delete
    2. By the way... I was kind of scared when I first saw kxr-me in the download tray after I tried to download it firstly effortlessly with 404 error at first and empty files later to finally find it ok and proper. king takes rook, as I guess it stands for, seemed to me like a cibernetic gang stalking joke. I'm a bit concerned about these things those days... too many experiences! call me skizo... but... there's something more haha :s have a good journey!

      Delete
  52. Hi, when I do utsctl stop and then try to shut down linux, it stucks with black screen and doesn't shut down... what can be happening?

    ReplyDelete
    Replies
    1. I forgot to tell, when I force the shutting and start it over, utorrent doesn't work and utsctl start gives me this:

      ~ $ utsctl start
      Starting Utorrent Server..
      server started - using locale en_US.UTF-8
      ~ $ server exited with 1

      Delete
  53. đồ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

    Thái Chánh Dương thấy Triệu Quốc Đống xác định rõ ràng như vậy cũng yên tâm. Nói thật lúc này Cao tốc An Du cùng Cao tốc An Quế có thể thu hút đầu tư từ ngoài vào, một phần nguyên nhân là do chiêu đột biến của Triệu Quốc Đống. Đương nhiên trong này cũng có phần may mắn, nhưng dù sao cũng đã thành công.

    Việc các tập đoàn có hứng thú đầu tư vào An Nguyên, theo Tô Giác Hoa nói đó là thành tích rất lớn. Bây giờ muốn thành lập Công ty khai thác đường cao tốc mà để Triệu Quốc Đống là công thần đứng sang bên đó là hơi quá. Cho nên Thái Chánh Dương muốn biết ý của hắn.

    - Thái ca, em nói thật đó. Anh đừng nghĩ em tức mà nói như vậy. Em không thích làm kinh doanh, nhất là Công ty khai thác đường cao tốc có bao người nhìn chằm chằm vào.

    Triệu Quốc Đống đây là nói thật. Công ty khai thác đường cao tốc là tâm điểm, ai vào đó thì tóc gáy sẽ bị dựng thẳng lên. Hắn không việc gì phải vào đó. Hắn cũng không muốn kiếm chút tiền từ đó. Nếu muốn tiền thì hắn cũng không việc gì đi vào quan trường.

    Thái Chánh Dương có chút kinh ngạc. Y có thể thấy Triệu Quốc Đống thật sự không muốn tới Công ty khai thác đường cao tốc, điều này làm người ta rất khó hiểu. Đây là nơi mà bao người muốn đến, không ít người đều muốn một vị trí trong Công ty khai thác đường cao tốc.

    - Hừ, người khác muốn tới còn không được, chú còn không muốn tới đó sao?
    Thái Chánh Dương hừ một tiếng:
    - Tuy nói như vậy nhưng chưa đến lúc. Trong thời gian này chú phải quản lý tốt Phòng cao tốc, nghỉ ngơi hai ngày thì được nhưng đừng bỏ dở việc công.

    Triệu Quốc Đống vừa đi ra khỏi phòng Thái Chánh Dương thì Phó Thiên đã vẫy vậy hắn.

    - Thiên ca có việc gì thế?

    - Tối có lịch gì không?

    ReplyDelete
  54. 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