openSUSE & utserver

Доброго времени!
Решил опробовать этот клиент,но вот возникла проблема с определением кодировки,собственно прошу помощи!
How to брал с сайта utorrent (ссылка](http://forum.utorrent.com/viewtopic.php?id=84348) ).
Проблема состоит только при запуске скриптом:

#! /bin/sh
#
# Copyright (c) 2005 John Doe
# All rights reserved.
#
# Author: John Doe, 2005
#
# /etc/init.d/utserver
#   and its symbolic link
# /usr/sbin/rcutserver
#
### BEGIN INIT INFO
# Provides:          utserver
# Required-Start:    $network
# Required-Stop:
# Default-Start:     3 5
# Default-Stop:      0 1 2 6
# Short-Description: utserver daemon, providing a bittorrent service
# Description:       The utserver daemon is network bittorrent
#       service.  We want it to be active in runlevels 3
#       and 5, as these are the runlevels with the network
#       available.
### END INIT INFO
#
# Check for missing binaries
UT_BIN=/opt/utserver/bin/utserver
test -x $UT_BIN || { echo "$UT_BIN not installed";
        if  "$1" = "stop" ]; then exit 0;
        else exit 5; fi; }

# Check for existence of needed config file and read it
UT_CONFIG=/etc/opt/utserver/utserver.conf
test -r $UT_CONFIG || { echo "$UT_CONFIG not existing";
        if  "$1" = "stop" ]; then exit 0;
        else exit 6; fi; }

UT_PID=/var/run/utserver/utserver.pid
UT_SETTINGS=/var/opt/utserver/settings
UT_LOG=/var/opt/utserver/log/utserver.log

# Read config
#. $UT_CONFIG

#
# Load the rc.status script for this service.
. /etc/rc.status

# Reset status of this service
rc_reset

#

  case "$1" in
    start)
        echo -n "Starting utserver "
        ## Start daemon with startproc(8). If this fails
        ## the return value is set appropriately by startproc.
        #startproc -u 1001 -g 100 $UT_BIN
        # su - -c /home/cool/bin/utserver.sh cool
        startproc -p ${UT_PID} -u 1001 -g 100 ${UT_BIN} -configfile ${UT_CONFIG} -settingspath ${UT_SETTINGS} -logfile ${UT_LOG}

        # Remember status and be verbose
        rc_status -v
        ;;
    stop)
        echo -n "Shutting down utserver "
        ## Stop daemon with killproc(8) and if this fails
        ## killproc sets the return value according to LSB.

        killproc -TERM ${UT_BIN}

        # Remember status and be verbose
        rc_status -v
        ;;
    restart)
        ## Stop the service and regardless of whether it was
        ## running or not, start it again.
        $0 stop
        $0 start

        # Remember status and be quiet
        rc_status
        ;;
    reload)
        # If it supports signaling:
        echo -n "Reload service utserver "
        killproc -HUP ${UT_BIN}
        #touch /var/run/UT.pid
        rc_status -v

        ## Otherwise if it does not support reload:
        #rc_failed 3
        #rc_status -v
        ;;
    status)
        echo -n "Checking for service utserver "
        ## Check status with checkproc(8), if process is running
        ## checkproc will return with exit status 0.

        # Return value is slightly different for the status command:
        # 0 - service up and running
        # 1 - service dead, but /var/run/  pid  file exists
        # 2 - service dead, but /var/lock/ lock file exists
        # 3 - service not running (unused)
        # 4 - service status unknown :-(
        # 5--199 reserved (5--99 LSB, 100--149 distro, 150--199 appl.)

        # NOTE: checkproc returns LSB compliant status values.
        checkproc ${UT_BIN}
        # NOTE: rc_status knows that we called this init script with
        # "status" option and adapts its messages accordingly.
        rc_status -v
        ;;
    *)
        ## If no parameters are given, print which are available.
        echo "Usage: $0 {start|stop|status|restart|reload}"
        exit 1
        ;;
esac

#
rc_exit

/etc/init.d/utserver start

Starting utserver /opt/utserver/bin/utserver: /usr/lib/libcrypto.so.0.9.8: no version information available (required by /opt/utserver/bin/utserver)
/opt/utserver/bin/utserver: /usr/lib/libssl.so.0.9.8: no version information available (required by /opt/utserver/bin/utserver)
server started - using locale C

Прописывает locale C,если закачка с русским названием,torrent файл сохраняется как ???.torrent ,собственно и старые закачки в таком случае не удаётся перехешировать!

Если запускаю из консоли:

/sbin/startproc -p /var/run/utserver/utserver.pid -u 1001 -g 100 /opt/utserver/bin/utserver -configfile /etc/opt/utserver/utserver.conf -settingspath /var/opt/utserver/settings -logfile /var/opt/utserver/log/utserver.log
/opt/utserver/bin/utserver: /usr/lib/libcrypto.so.0.9.8: no version information available (required by /opt/utserver/bin/utserver)                                                                             
/opt/utserver/bin/utserver: /usr/lib/libssl.so.0.9.8: no version information available (required by /opt/utserver/bin/utserver)                                                                                
server started - using locale ru_RU.UTF-8

То всё ок! Определенно locale ru_RU.UTF-8,Закачки хеширует,torrent сохраняется как надо.
openSUSE-11.3 x86_64
В общем буду признателен за любую помощь!

Тема перекликается с этой:
http://forums.opensuse.org/p-russian/1054-1073-1097-1080-1081/1054-1073-1097-1080-1081/454121-oracle-instant-client-11-php-oci8-shell-dhyn-dh-dh-dh-dhudh-dh-n-unicode.html

При запуске системным сервисом используются переменные окружения root.

Да тема похожа!
В той теме вы предлагаете прописать локаль в скрипте.
Но может поправите меня,у меня при прописывании:

UT_BIN=LANG=ru_RU.UTF-8 /opt/utserver/bin/utserver

происходит запуск utserver от рута,и настройки utserver создаются в папке /etc/init.d/,получается не видит строки ниже прописанные.
Как правильно прописать?

Попробуйте в инит-скрипте написать так:

LANG=ru_RU.UTF-8
UT_BIN=/opt/utserver/bin/utserver

Кстати, мне очень не нравится идея запускать такой потенциально опасный сервис от рута.

Все равно сохраняет как ???.torrent
Пробовал и:

LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
UT_BIN=/opt/utserver/bin/utserver

Как его научить русскому,не хочет не в какую.
Ведь в принципе то суть не меняется,что при запуске скрипта ,что команды:

/sbin/startproc -p /var/run/utserver/utserver.pid -u 1001 -g 100 /opt/utserver/bin/utserver -configfile /etc/opt/utserver/utserver.conf -settingspath /var/opt/utserver/settings -logfile /var/opt/utserver/log/utserver.log

а результат…>:(

Я так понимаю, что суть меняется.

-u 1001 -g 100

Это, означает, что процесс запускается от пользователя, с его локалью.

Кстати, мне очень не нравится идея запускать такой потенциально опасный сервис от рута.

Нет вы меня не правильно поняли,запуск произошёл только когда я не правильно прописал lang,а так создан пользователь “torrent” который имеет uid: 1001 и запуск происходит от его.

Это, означает, что процесс запускается от пользователя, с его локалью.

Да!

Ух всё таки решил вопрос!
Поскольку сам почти не чего не понимаю в скриптах,или как говорится умею только копать,или не копать :slight_smile: ,так что решил перекопать свой огород, то есть скрипты которые находятся в системе,и вот чудо свершилось.
Под руку попал скрипт самбы,просмотрев его понял что это то что нужно.
Добавил нужные строки:

test -f /etc/sysconfig/language && \
. /etc/sysconfig/language
export LC_ALL="$RC_LC_ALL"
export LC_CTYPE="$RC_LC_CTYPE"
export LANG="$RC_LANG"
startproc -u utorrent -g users -p ${UT_PID} ${UT_BIN} -daemon -configfile ${UT_CONFIG} -settingspath ${UT_SETTINGS} -logfile ${UT_LOG} -pidfile ${UT_PID}
unset LC_ALL LC_CTYPE LANG

и вуаля:

#! /bin/sh
#
# Copyright (c) 2005 John Doe
# All rights reserved.
#
# Author: John Doe, 2005
#
# /etc/init.d/utserver
#   and its symbolic link
# /usr/sbin/rcutserver
#
### BEGIN INIT INFO
# Provides:          utserver
# Required-Start:    $network
# Required-Stop:
# Default-Start:     3 5
# Default-Stop:      0 1 2 6
# Short-Description: utserver daemon, providing a bittorrent service
# Description:       The utserver daemon is network bittorrent
#	service.  We want it to be active in runlevels 3
#	and 5, as these are the runlevels with the network
#	available.
### END INIT INFO
#
# Check for missing binaries
export LC_ALL="$RC_LC_ALL"
export LC_CTYPE="$RC_LC_CTYPE"
export LANG="$RC_LANG"
UT_BIN=/opt/utorrent/server/bin/utserver
test -x $UT_BIN || { echo "$UT_BIN not installed";
        if  "$1" = "stop" ]; then exit 0;
        else exit 5; fi; }

# Check for existence of needed config file and read it
UT_CONFIG=/etc/opt/utorrent/server/utserver.conf
test -r $UT_CONFIG || { echo "$UT_CONFIG not existing";
        if  "$1" = "stop" ]; then exit 0;
        else exit 6; fi; }

UT_PID=/var/run/utserver/utserver.pid
UT_SETTINGS=/var/opt/utorrent/server/settings
UT_LOG=/var/opt/utorrent/server/log/utserver.log
# Read config
#. $UT_CONFIG

#
# Load the rc.status script for this service.
. /etc/rc.status

# Reset status of this service
rc_reset

#

  case "$1" in
    start)
        echo -n "Starting utserver "
        ## Start daemon with startproc(8). If this fails
        ## the return value is set appropriately by startproc.
        #startproc -u 1001 -g 100 $UT_BIN
	# su - -c /home/cool/bin/utserver.sh cool
	test -f /etc/sysconfig/language && \
		. /etc/sysconfig/language
	export LC_ALL="$RC_LC_ALL"
	export LC_CTYPE="$RC_LC_CTYPE"
	export LANG="$RC_LANG"
	startproc -u utorrent -g users -p ${UT_PID} ${UT_BIN} -daemon -configfile ${UT_CONFIG} -settingspath ${UT_SETTINGS} -logfile ${UT_LOG} -pidfile ${UT_PID}
	unset LC_ALL LC_CTYPE LANG
        # Remember status and be verbose
        rc_status -v
        ;;
    stop)
        echo -n "Shutting down utserver "
        ## Stop daemon with killproc(8) and if this fails
        ## killproc sets the return value according to LSB.

        killproc -t 10 -p ${UT_PID} -TERM ${UT_BIN}

        # Remember status and be verbose
        rc_status -v
        ;;
    restart)
        ## Stop the service and regardless of whether it was
        ## running or not, start it again.
        $0 stop
        $0 start

        # Remember status and be quiet
        rc_status
        ;;
    reload)
        # If it supports signaling:
        echo -n "Reload service utserver "
        killproc -HUP ${UT_BIN}
        #touch /var/run/UT.pid
        rc_status -v

        ## Otherwise if it does not support reload:
        #rc_failed 3
        #rc_status -v
        ;;
    status)
        echo -n "Checking for service utserver "
        ## Check status with checkproc(8), if process is running
        ## checkproc will return with exit status 0.

        # Return value is slightly different for the status command:
        # 0 - service up and running
        # 1 - service dead, but /var/run/  pid  file exists
        # 2 - service dead, but /var/lock/ lock file exists
        # 3 - service not running (unused)
        # 4 - service status unknown :-(
        # 5--199 reserved (5--99 LSB, 100--149 distro, 150--199 appl.)

        # NOTE: checkproc returns LSB compliant status values.
        checkproc ${UT_BIN}
        # NOTE: rc_status knows that we called this init script with
        # "status" option and adapts its messages accordingly.
        rc_status -v
        ;;
    *)
        ## If no parameters are given, print which are available.
        echo "Usage: $0 {start|stop|status|restart|reload}"
        exit 1
        ;;
esac

#
rc_exit

Строка запуска несколько видоизменилась поскольку накопал :slight_smile: готовые пакеты
ссылка на пакеты](https://public.me.com/jason.e.clark)!
Значит устанавливаем RPMку и заменяем скрипт выше приведенным:

cp utserver /etc/init.d/utserver

и получаем :wink:

Starting utserver server started - using locale ru_RU.UTF-8

Ну теперь только остаётся посмотреть насколько он хорош под lunixом,как и под виндой.