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.

241 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. Or change #/bin/sh to #/bin/bash

    ReplyDelete
  34. 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
  35. 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
  36. 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
  37. always using and working :D

    tested work properly on centos 6.4 :D

    ReplyDelete
  38. 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
  39. 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
  40. Hi, how can I autorun utorrent on boot ?

    ReplyDelete
  41. 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
  42. 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
  43. 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
  44. by the way i'm using CentOS 6.4 on a 64bit AMD laptop

    ReplyDelete
  45. 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
  46. 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
  47. 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
  48. 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
  49. 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
  50. 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
  51. 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
  52. 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
  53. 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
  54. đồ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
  55. 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
  56. This was a shocking post. It has some look at here fundamental data on this subject. what is the best vpn

    ReplyDelete
  57. They’re also cast as heels, allegedly crafted due to the McMahon family’s belief that the far right cost Linda the election. A tag feud between these two seems a natural fit, with Darren Young cast as the good guy. best vpn

    ReplyDelete
  58. I like your work its so helpful content thanks for sharring....
    uTorrent 3.5.4

    ReplyDelete
  59. These updates are given by expert universe of warcraft players. On the off chance that you have issues introducing the extra, you won't get any help. Not even to make reference to each one of those infections. https://luckyshiner.com/extratorrent-proxy-mirror-sites-alternatives/

    ReplyDelete
  60. Please give some advice on how to achieve this kind of posts. accessori armi

    ReplyDelete
  61. The Democratic commissioners voted to remove a number of candidates who had ended their presidential campaigns from the ballot. That resulted in the cancellation of the primary, because former Vice President.
    https://www.betting33.com

    ReplyDelete
  62. Sanders campaign adviser Jeff Weaver said in a statement Monday the move is "a blow to American democracy" and that the state had violated its approved delegate selection plan and should lose its delegates to the national convention if "this is not remedied."
    https://www.best373.com

    ReplyDelete
  63. Yang's lawsuit echoed that message, stating, "It is reasonable to take precautions to allow for safe voting, but such decisions cannot arbitrarily pertain to some elections and not others."
    https://www.dok222.com

    ReplyDelete
  64. "Defendants cannot provide any colorable justification as to why they canceled the presidential primary and not other federal and state primaries. By doing so, Defendants are attempting to create a dangerous precedent."
    https://www.ccclub700.com

    ReplyDelete
  65. on Monday urged the nation's governors to "seriously consider" reopening schools as part of his push to restart the economy, though many states have already recommended against resuming the school year.
    https://www.hgame79.com

    ReplyDelete
  66. https://www.btlcasino.com/first 퍼스트카지노

    ReplyDelete
  67. https://www.btlcasino.com/theking 더킹카지노

    ReplyDelete
  68. Real Madrid currently leads La Liga with 77 points https://www.canize77.com - 카지노사이트

    ReplyDelete
  69. would require the State Treasurer to make interest-free loans to casinos. Another bill, S2479, would require https://www.caland66.com 카지노사이트

    ReplyDelete

  70. Good day! if u have time please visit our website. thankyou!


    바카라사이트

    https://yhn777.com 바카라사이트

    ReplyDelete
  71. Good day! This blog presents a valuable information. Keep up the good work! Visit our website as well. Thanks!

    카지노사이트

    https://yhn777.com 카지노사이트

    ReplyDelete
  72. Wow, incredible blog format! How lengthy have you ever
    been blogging for? you made blogging glance easy. The
    overall look of your site is fantastic.
    Please visit our website :)
    카지노사이트
    https://yhn777.com 카지노사이트

    ReplyDelete
  73. What a very informative site! I like how keen the details are. Keep it up. Anyway, Try checking out our website for some content.
    카지노사이트
    https://yhn876.com/ 카지노사이트

    ReplyDelete
  74. Wow! What a very inspiring blog. You must've put a lot of work into this. Your effort is very much appreciated. Where have you been hiding all this talent? Come and visit our website too. Thanks!

    카지노사이트
    https://yhn777.com 카지노사이트

    ReplyDelete
  75. Good article! We will be linking to this particularly great post on our site.
    Keep up the great writing.
    Please visit our website:
    카지노사이트
    https://yhn777.com 카지노사이트

    ReplyDelete
  76. " friends have a nice day ,Please visit our interesting website
    Https://yhn876.com 카지노사이트

    ReplyDelete
  77. ‌What a terrific idea you have here! The way you deliver the information is really fantastic. Keep it up! Kindly visit our website too if you have some time.
    카지노사이트
    https://yhn777.com 카지노사이트

    ReplyDelete
  78. www.bbdd66.com 우리카지노사이트
    www.bbdd66.com/theking 더킹카지노
    www.bbdd66.com/sands 샌즈카지노
    www.bbdd66.com/first 퍼스트카지노
    www.bbdd66.com/yes 예스카지노
    www.bbdd66.com/super 슈퍼카지노
    www.bbdd66.com/gatsby 개츠비카지노
    www.bbdd66.com/33 33카지노
    www.bbdd66.com/world 월드카지노
    www.bbdd66.com/merit 메리트카지노

    ReplyDelete
  79. It is an excellent blog, I have ever seen. I found all the material on this blog utmost unique and well written. And, I have decided to visit it again and again 먹튀검증

    ReplyDelete
  80. HELLO EVERYONE! I WANT NTO SHARE THIS AMAZING SITE TO YOU!
    IT'S VERY INTERESTING TO READ
    JUST CLICK THE LINK BELOW AND ENJOY READING!
    카지노사이트
    https://yhn777.com 카지노사이트

    ReplyDelete
  81. I’m going to read this. I’ll be sure to come back. 메이저놀이터

    ReplyDelete
  82. Hello.
    I always see and feel a lot from you.
    Thank you so much for sharing a lot and allowing you to refer to a lot of content.
    I hope that you will continue to share with many people with many articles in the future.
    Please visit our website :)
    카지노사이트
    https://yhn777.com 카지노사이트

    ReplyDelete
  83. It was thinking about whether I could utilize this review on my other site, I will connect it back to your site though.Great Thanks. 메이저사이트

    ReplyDelete
  84. I am glad to have with you this post very helpful for all of us I hope you bring more information related to this.
    카지노사이트
    https://yhn777.com 카지노사이트

    ReplyDelete
  85. 매우 흥미로운 블로그에 감사드립니다. 그런 완벽한 접근 방식으로 작성된 그런 종류의 정보를 얻을 수있는 또 다른 것은 무엇입니까? 나는 지금 단순히 작업하고있는 사업을하고 있으며 그러한 정보를 찾고 있습니다. 먹튀검증사이트

    ReplyDelete
  86. I gotta favorite this website it seems very helpful . 먹튀폴리스

    ReplyDelete
  87. Truly, this article is really one of the very best in the history of articles. I am a antique ’Article’ collector and I sometimes read some new articles if I find them interesting. And I found this one pretty fascinating and it should go into my collection. Very good work! 먹튀검증업체

    ReplyDelete
  88. I discovered your this post while hunting down some related data on website search...Its a decent post..keep posting and upgrade the data 메이저사이트

    ReplyDelete
  89. It’s very informative and you are obviously very knowledgeable in this area. You have opened my eyes to varying views on this topic with interesting and solid content. casino24

    ReplyDelete
  90. Thank you for a such fine effort, this is a wonderful outline. Please visit our site.
    카지노사이트
    https://yhn876.com 카지노사이트

    ReplyDelete
  91. I was suggested this web site by my cousin. I’m not sure whether
    this post is written by him as nobody else know such detailed about my problem.
    You are amazing! Thanks!

    ReplyDelete
  92. This is a magnificent article, Given such an exceptional measure of information in it, These kind of articles keeps the clients fervor for the site, and continue sharing more ... positive conditions rat pest control london

    ReplyDelete
  93. www.omgka.com
    www.omgka.com/theking
    www.omgka.com/sands
    www.omgka.com/first
    www.omgka.com/yes
    www.omgka.com/super
    www.omgka.com/gatsby
    www.omgka.com/33
    www.omgka.com/world
    www.omgka.com/merit

    ReplyDelete
  94. www.bbdd66.com 우리카지노사이트
    www.bbdd66.com/theking 더킹카지노
    www.bbdd66.com/sands 샌즈카지노
    www.bbdd66.com/first 퍼스트카지노
    www.bbdd66.com/yes 예스카지노
    www.bbdd66.com/super 슈퍼카지노
    www.bbdd66.com/gatsby 개츠비카지노
    www.bbdd66.com/33 33카지노
    www.bbdd66.com/world 월드카지노
    www.bbdd66.com/merit 메리트카지노

    ReplyDelete
  95. It's always exciting to read articles from other writers and practice something from their web sites buy website traffic

    ReplyDelete
  96. I really loved reading your blog. It was very well authored and easy to undertand. Unlike additional blogs I have read which are really not tht good. I also found your posts very interesting. In fact after reading, I had to go show it to my friend and he ejoyed it as well! 먹튀검증

    ReplyDelete
  97. Really has a purpose to enlighten all the reader, it is really good, entertaining and helpful. Thank you for sharing this to us. Just try to visit too our awesome site: 카지노사이트
    https://yhn777.com 카지노사이트

    ReplyDelete
  98. The information you have posted is very useful. The sites you have referred was good. Thanks for sharing. Please visit our website.
    카지노사이트
    Https://yhn876.com 카지노사이트

    ReplyDelete
  99. https://www.toto-casino.net/%EC%9D%B4%EA%B8%B0%EC%9E%90%EB%B2%B3 "I am interested in such topics so I will address page where it is cool described.

    " 이기자벳

    ReplyDelete
  100. Very good blog post.Much thanks again. Cool. 안전놀이터

    ReplyDelete
  101. 여기에 게시 한 주제에 대해 정말 감사드립니다. 실제로 도움이되는 훌륭한 정보를 공유해 주셔서 감사합니다. 좋은 날! 먹튀검증

    ReplyDelete
  102. A good idea that helps me to learn more, it is worth reading. Keep it up. Thank you guys. Wanna try our site? Feel free to visit here: 카지노사이트
    Https://yhn876.com 카지노사이트

    ReplyDelete
  103. All i can say about this site?
    it's very useful for me
    here,just click the link below. Thank you!
    안전놀이터
    https://pmx7.com/ 안전놀이터

    ReplyDelete
  104. Consistent with these, most actually well-known could be a 해외선물커뮤니티

    ReplyDelete
  105. You really make it look so natural with your exhibition however I discover this issue to be really something which I figure I could never appreciate. It appears to be excessively confounded and amazingly wide for me. I'm searching forward for your next post, I'll attempt to get its hang! 안전놀이터

    ReplyDelete
  106. hi was just seeing if you minded a comment. i like your website and the thme you picked is super. I will be back 안전놀이터

    ReplyDelete
  107. It is an excellent blog, I have ever seen. I found all the material on this blog utmost unique and well written. And, I have decided to visit it again and again. 토토사이트

    ReplyDelete
  108. This specific seems to be definitely excellent. These very small facts are produced using wide range of qualifications know-how 먹튀폴리스

    ReplyDelete
  109. I really loved reading your blog. It was very well authored and easy to undertand. Unlike additional blogs I have read which are really not tht good. I also found your posts very interesting. In fact after reading, I had to go show it to my friend and he ejoyed it as well! 먹튀검증커뮤니티

    ReplyDelete
  110. After research a couple of of the weblog posts in your website now, and I really like your method of blogging. I bookmarked it to my bookmark website record and will probably be checking back soon. Pls check out my site as effectively and let me know what you think. Computers & Accessories 토토사이트

    ReplyDelete
  111. Everything has its own value, but this is really precious information shared by Author 먹튀검증

    ReplyDelete
  112. Thanks for sharing these informations. I really like your blog post very much. You have really shared a informative and interesting blog post . 먹튀검증

    ReplyDelete
  113. I can see that you are an expert at your field! I am launching a website soon, and your information will be very useful for me.. Thanks for all your help and wishing you all the success in your business 먹튀폴리스

    ReplyDelete
  114. The article you have shared is very interesting. I am really happy that i visit your webpage, and i am agree with what you said. Please keep sharing more. 슈어맨

    ReplyDelete
  115. Easy option to get useful information as well as share good stuff with good ideas and concepts 슈어맨

    ReplyDelete
  116. I recently came across your blog and have been reading along. I thought I would leave my first comment. I don't know what to say except that I have enjoyed reading. Nice blog, I will keep visiting this blog very often 먹튀폴리스

    ReplyDelete
  117. That is the amazing piece of writing, Thanks a lot for the purpose of rendering everybody this. Have post 먹튀검증

    ReplyDelete
  118. Wonderful article man! The way you have explained everything step by step is phenomenal. I really appreciate your work. Keep it up!!! In case, if you are looking 안전놀이터

    ReplyDelete
  119. Interested in playing online casino Or want to know new online casino promotions lighterandlocal Online casino reviews Answer every casino you want to kno 먹튀검증

    ReplyDelete
  120. It is a fantastic post. I am also holding out for the sharks too that made me laugh. 토토사이트

    ReplyDelete
  121. Thanks for sharing this product with us I have bookmarked it and I will share it more and I hope it will be beneficial for you.Regards 안전놀이터

    ReplyDelete
  122. I really enjoy simply reading all of your weblogs. Simply wanted to inform you that you have people like me who appreciate your work. Definitely a great post. Hats off to you! The information that you have provided is very helpfu 안전놀이터

    ReplyDelete
  123. Truly quite intriguing post. I was searching for this sort of data and delighted in perusing this one. Continue posting. Much obliged for sharing 안전놀이터

    ReplyDelete
  124. My Future Consulting is a top ranked employment agency and diversity/ executive search firm in Chicago, Illinois that consistently delivers top rated talent. 안전놀이터

    ReplyDelete
  125.  I care for such information much. I was seeking this certain information for a long time. Thank you and good luck 먹튀검증커뮤니티

    ReplyDelete
  126. I appreciate this article for the well-researched content and excellent wording. I got so interested in this material that I couldn’t stop reading. Your blog is really impressiv 토토사이트

    ReplyDelete
  127. This is a great article thanks for sharing this informative information. I will visit your blog regularly for some latest post. I will visit your blog regularly for Some latest post 먹튀폴리스

    ReplyDelete
  128. We are a digital marketing agency that makes sure to deliver the highest ROI to increase your brand’s visibility over the internet. 먹튀폴리스

    ReplyDelete
  129. pleasant post, stay aware of this fascinating work. It truly regards realize that this subject is being secured likewise on this site so cheers for setting aside time to talk about this! 파워볼사이트

    ReplyDelete
  130. I’m going to read this. I’ll be sure to come back. thanks for sharing. and also This article gives the light in which we can observe the reality. this is very nice one and gives indepth information. thanks for this nice article. outdoor patio seating

    ReplyDelete
  131. I enjoy each of the perform that you have placed into this. I’m sure that you will be making a really useful place. I has been additionally pleased. Good perform! Courtier immobilier chelsea

    ReplyDelete
  132. What an incredibly beautiful story, despite the fact that it is rugged but the result turned out to be kind and good and now it has become a tradition that is passed on in every generation. courtier immobilier Candiac

    ReplyDelete
  133. I can see that you are a specialist at your field! I am dispatching a site soon, and your data will be exceptionally helpful for me.. A debt of gratitude is in order for all your assistance and wishing you all the achievement in your business. 토토사이트

    ReplyDelete
  134. I curious more interest in some of them hope you will give more information on this topics in your next articles yoga gatineau

    ReplyDelete
  135. Hi buddies, it is great written piece entirely defined, continue the good work constantly. digital marketing malta

    ReplyDelete
  136. Interesting topic for a blog. I have been searching the Internet for fun and came upon your website. Fabulous post. Thanks a ton for sharing your knowledge! It is great to see that some people still put in an effort into managing their websites. I'll be sure to check back again real soon. 먹튀검증

    ReplyDelete
  137. Would like to see some other posts on the same subject 먹튀검증

    ReplyDelete
  138. 우리카지노는 남녀노소 불문하고 누구나 쉽게 이용이 가능한 온라인 카지노게임 입니다. 100% 검증 된 우리카지노,카지노사이트를 추천하고 있는 CAMO32에 오신 것을 환영합니다카지노사이트.

    ReplyDelete
  139. Situs togel online, togel sidney, toto sidney, togel sdy resmi indonesia. yang sebagaimana kita ketahui bersama togel sidney merupakan pasaran togel online yang di peringkat nomor 3 dari pasaran togel singapore ( togel sgp ) dan togel hongkong ( togel hk ). togel sidney

    ReplyDelete
  140. "I’m really enjoying the design and layout of your site. It’s a very easy on the eyes which makes it much more pleasant for me to come here and visit more often. Did you hire out a developer to create your theme? Superb work!
    Thank you for your post, I look for such article along time, today i find it finally. this post give me lots of advise it is very useful for me . Hi there, everything is going sound here and ofcourse every one is sharing information, that’s really fine, keep up writing. Such a very useful article. Very interesting to read this article.I would like to thank you for the efforts you had made for writing this awesome article." 먹튀검증

    ReplyDelete
  141. Thanks for sharing the info. I located the information very useful. That’s a brilliant story you posted. I will come back to read some more. Good day very nice website!! Guy .. Excellent .. Amazing .. I’ll bookmark your site and take the feeds additionally…I am glad to seek out so many helpful info right here in the submit, we want develop more strategies on this regard, thank you for sharing. Good write-up, I’m regular visitor of one’s site, maintain up the excellent operate, and It’s going to be a regular visitor for a lengthy time. Very good article! Your post is really helpful for me thanks for wonderful post.I am very happy to read your post 안전놀이터

    ReplyDelete
  142. I have to express thanks to this writer just for bailing me out of this particular difficulty. Just after browsing through the search engines and obtaining basics that were not pleasant, I thought my entire life was gone. Being alive minus the answers to the problems you have fixed by way of your good short post is a critical case, as well as the kind that would have in a negative way affected my entire career if I had not come across your web blog. Your main capability and kindness in touching every part was crucial. I am not sure what I would have done if I had not encountered such a stuff like this. I can also at this time look forward to my future. Thanks a lot so much for the reliable and amazing guide. I will not think twice to suggest your web site to anybody who needs to have assistance on this subject matter. I’m also writing to let you be aware of of the beneficial encounter my princess found reading your web page. She came to find too many issues, most notably what it is like to have an incredible helping nature to have other people completely comprehend a number of advanced things. You actually surpassed visitors’ expectations. Thanks for producing those great, safe, educational and in addition cool thoughts on the topic to Janet. 사설토토

    ReplyDelete
  143. Excellent post! We are linking to this great content on our site. Keep up the great writing. Very good article! We are linking to this particularly great post on our website. Keep up the good writing. Attractive section of content. I just stumbled upon your blog and in accession capital to say that I acquire actually enjoyed account your weblog posts. Any way I’ll be subscribing for your augment or even I achievement you get right of entry to persistently quickly. After I originally commented I seem to have clicked the -Notify me when new comments are added- checkbox and now each time a comment is added I recieve four emails with the exact same comment. There has to be a way you can remove me from that service? Thanks a lot! 먹튀검증커뮤니티

    ReplyDelete
  144. May I simply just say what a relief to discover a person that genuinely knows what they're discussing on the net. You definitely know how to bring an issue to light and make it important. More and more people ought to look at this and understand this side of your story. I was surprised that you're not more popular since you surely have the gift. Aw, this was an incredibly nice post. Taking a few minutes and actual effort to generate a superb article… but what can I say… I procrastinate a lot and don't manage to get nearly anything done. It’s hard to find well-informed people in this particular topic, however, you seem like you know what you’re talking about! Thanks 토토사이트

    ReplyDelete
  145. Next time I read a blog, Hopefully it doesn’t fail me as much as this particular one. I mean, I know it was my choice to read, but I really believed you would probably have something interesting to talk about. All I hear is a bunch of moaning about something you could fix if you were not too busy looking for attention. Having read this I thought it was really informative. I appreciate you spending some time and effort to put this content together. I once again find myself personally spending a lot of time both reading and posting comments. But so what, it was still worth it! Your style is really unique compared to other folks I’ve read stuff from. Thanks for posting when you’ve got the opportunity, Guess I’ll just book mark this blog. 먹튀사이트

    ReplyDelete
  146. i've been surfing on-line extra than three hours these days, however i in no way determined any interesting article like yours. It's miles stunning rate enough for me. In my opinion, if all web proprietors and bloggers made terrific content cloth cloth as you did, the net can be masses extra useful than ever before. Truly much like your net internet page even though, you want to test the transliteration on a exceptional range of of one's content fabric. Several of alternatives filled with the aid of the use of using transliteration troubles so i to get them quite tough to tell the reality then again i most really will surely go back all once more. Whoah this blog is extremely good i certainly like analyzing your articles. Preserve up the coolest paintings! You apprehend, loads of parents are searching round for this data, you may aid them considerably. 안전놀이터

    ReplyDelete
  147. Next time I read a blog, Hopefully it doesn’t fail me as much as this particular one. I mean, I know it was my choice to read, but I really believed you would probably have something interesting to talk about. All I hear is a bunch of moaning about something you could fix if you were not too busy looking for attention. Having read this I thought it was really informative. I appreciate you spending some time and effort to put this content together. I once again find myself personally spending a lot of time both reading and posting comments. But so what, it was still worth it! Your style is really unique compared to other folks I’ve read stuff from. Thanks for posting when you’ve got the opportunity, Guess I’ll just book mark this blog. 먹튀신고

    ReplyDelete
  148. Hi, I do think this is a great web site. I stumbledupon it I’m going to return yet again since i have bookmarked it. Money and freedom is the greatest way to change, may you be rich and continue to help other people. You are so interesting! I don’t believe I have read through anything like this before. So nice to discover somebody with some unique thoughts on this topic. Seriously.. many thanks for starting this up. This site is one thing that’s needed on the web, someone with some originality! I’m impressed, I must say. Seldom do I come across a blog thats both educative and entertaining, and let me tell you, you have hit the nail on the head. The problem is something which not enough folks are speaking intelligently about. I am very happy that I stumbled across this during my search for something regarding this. 먹튀검증

    ReplyDelete