Hatab000
19.02.2015, 16:11
Добрый день.
Хочу поделиться с вами решением для игры с сервера(домашнего NAS).
Давно назревала идея запилить что то подобное,так как дома есть сервак Freebsd работающий 24/7. И всегда ломало перекачивать только что скачанные игры на PS3 через ftp. В принципе ps3netsrv можно установить на любой linux или BSD. Всевозможные роутеры,хранилища(NAS) итд. Так вот если для Linux есть готовое решение на всевозможных западных форумах,то для freebsd инфу пришлось собирать самому и додумывать некоторые моменты.
Готовый исходный код для FreeBSD(10685)
Скомпиленный(ГОТОВЫЙ FeeBSD10) (10686)
Cкачиваем исходный код 10684
Распаковываем unzip
Добавляем в фаил main.cpp то что зеленым.
1455 for (;;)
1456 {
1457 struct sockaddr_in addr;
1458 unsigned int size;
1459 int cs;
1460 int i;
1461 int value;
1462
1463 size = sizeof(addr);
1464 cs = accept(s, (struct sockaddr *)&addr, (socklen_t *)&size);
1465
1466 if (cs < 0)
1467 {
1468 DPRINTF("Accept error: %d\n", get_network_error());
1469 printf("Network error.\n");
1470 break;
1471 }
1472
1473 value = 1;
1474 size = sizeof(value);
1475 if (setsockopt(s, IPPROTO_TCP, TCP_NODELAY, &value, size) < 0)
1476 {
1477 DPRINTF("Error setting socket option: %d\n", get_network_error());
1478 printf("Network error.\n");
1479 break;
1480 }
1481
1482 // Check for same client
В фаилах VIsioFile.cpp и VIsioFile.h меняем все off64_t на off_t
В папке с Makefile делаем gmake
На выходе мы получаем ps3netsrv для FREEBSD.(он появляется в этой же папке)
Usage: ./ps3netsrv rootdirectory [port] [whitelist]
Default port: 38008
Whitelist: x.x.x.x, where x is 0-255 or * (e.g 192.168.1.* to allow only connections from 192.168.1.0-192.168.1.255)
Например ps3netsrv /ps3/ 38008 172.16.0.* - значит что папка с играми /ps3/ порт 38008 разрешенно подключение только с 172.16.0.0-172.16.0.254
Так как у меня работает transmission-daemon(торрент качалка) права на все скачанные файлы у пользователя transmission.
Следовательно целесообразно организовать запуск ps3netsrv от имени transmission.
Можно сделать и от root и не забивать голову,но это не правильно.
Задать владельца chown transmission:transmission ps3netsrv
Задать права chmod 750 ps3netsrv
Cкопировать фаил ps3netsrv в /usr/local/bin (cp ps3netsrv /usr/local/bin), чтобы он виделся как команда из любого места в системе.
#!/bin/sh
#
# PROVIDE: ps3netsrv
# REQUIRE: PS3 Net Server for Multiman
# KEYWORD:
. /etc/rc.subr
name="ps3netsrv"
rcvar=ps3netsrv_enable
command="/usr/local/bin/ps3netsrv"
ps3netsrv_user="transmission"
ps3netsrv_folder="patch_to_ps3_folder"
ps3netsrv_port="38008"
ps3netsrv_access="172.16.0.*"
ps3netsrv_pidfile="/var/run/ps3netsrv.pid"
start_cmd="/usr/sbin/daemon -f -u $ps3netsrv_user -p $ps3netsrv_pidfile $command $ps3netsrv_folder $ps3netsrv_port $ps3netsrv_access"
load_rc_config $name
: ${ps3netsrv_enable:=no}
run_rc_command "$1"
Исправьте под себя user folder access
С этим скриптом ps3netsrv будет запускаться как демон (/usr/sbin/daemon)
man daemon - для справки.
Запуск /usr/local/etc/rc.d/ps3netsrv start
Для автозапуска при загрузке пишем в rc.conf
ps3netsrv_enable="YES"
Управление
/usr/local/etc/rc.d/ps3netsrv start
/usr/local/etc/rc.d/ps3netsrv stop
/usr/local/etc/rc.d/ps3netsrv status
Вот и все.
Подключаемся через Multiman>net_host
Сам потестил на некоторых играх,все нормально грузиться,работает итд. Достаточно быстро.
В папке которую расшариваем, дожна быть папка GAMES и в ней уже игры.
Запускать все это дело будем через скрипт ps3.sh
#!/bin/sh
/usr/bin/nohup /usr/local/sbin/ps3netsrv /patch_to_ps3_folder/ 38008 172.16.0.*>/dev/null &
Запуск от имени другого пользователя
su -m transmission -c ps3.sh
Это необходимо чтобы при перезагрузке само все запускалось.
В данном примере запуск из под root
@reboot root /patch_to_script/ps3.sh
или
@reboot transmission /bin/sleep 30 && /usr/bin/nohup /usr/local/sbin/ps3netsrv /mesto/torrent/download/ps3/ 38008 172.16.0.*>/dev/null &
Хочу поделиться с вами решением для игры с сервера(домашнего NAS).
Давно назревала идея запилить что то подобное,так как дома есть сервак Freebsd работающий 24/7. И всегда ломало перекачивать только что скачанные игры на PS3 через ftp. В принципе ps3netsrv можно установить на любой linux или BSD. Всевозможные роутеры,хранилища(NAS) итд. Так вот если для Linux есть готовое решение на всевозможных западных форумах,то для freebsd инфу пришлось собирать самому и додумывать некоторые моменты.
Готовый исходный код для FreeBSD(10685)
Скомпиленный(ГОТОВЫЙ FeeBSD10) (10686)
Cкачиваем исходный код 10684
Распаковываем unzip
Добавляем в фаил main.cpp то что зеленым.
1455 for (;;)
1456 {
1457 struct sockaddr_in addr;
1458 unsigned int size;
1459 int cs;
1460 int i;
1461 int value;
1462
1463 size = sizeof(addr);
1464 cs = accept(s, (struct sockaddr *)&addr, (socklen_t *)&size);
1465
1466 if (cs < 0)
1467 {
1468 DPRINTF("Accept error: %d\n", get_network_error());
1469 printf("Network error.\n");
1470 break;
1471 }
1472
1473 value = 1;
1474 size = sizeof(value);
1475 if (setsockopt(s, IPPROTO_TCP, TCP_NODELAY, &value, size) < 0)
1476 {
1477 DPRINTF("Error setting socket option: %d\n", get_network_error());
1478 printf("Network error.\n");
1479 break;
1480 }
1481
1482 // Check for same client
В фаилах VIsioFile.cpp и VIsioFile.h меняем все off64_t на off_t
В папке с Makefile делаем gmake
На выходе мы получаем ps3netsrv для FREEBSD.(он появляется в этой же папке)
Usage: ./ps3netsrv rootdirectory [port] [whitelist]
Default port: 38008
Whitelist: x.x.x.x, where x is 0-255 or * (e.g 192.168.1.* to allow only connections from 192.168.1.0-192.168.1.255)
Например ps3netsrv /ps3/ 38008 172.16.0.* - значит что папка с играми /ps3/ порт 38008 разрешенно подключение только с 172.16.0.0-172.16.0.254
Так как у меня работает transmission-daemon(торрент качалка) права на все скачанные файлы у пользователя transmission.
Следовательно целесообразно организовать запуск ps3netsrv от имени transmission.
Можно сделать и от root и не забивать голову,но это не правильно.
Задать владельца chown transmission:transmission ps3netsrv
Задать права chmod 750 ps3netsrv
Cкопировать фаил ps3netsrv в /usr/local/bin (cp ps3netsrv /usr/local/bin), чтобы он виделся как команда из любого места в системе.
#!/bin/sh
#
# PROVIDE: ps3netsrv
# REQUIRE: PS3 Net Server for Multiman
# KEYWORD:
. /etc/rc.subr
name="ps3netsrv"
rcvar=ps3netsrv_enable
command="/usr/local/bin/ps3netsrv"
ps3netsrv_user="transmission"
ps3netsrv_folder="patch_to_ps3_folder"
ps3netsrv_port="38008"
ps3netsrv_access="172.16.0.*"
ps3netsrv_pidfile="/var/run/ps3netsrv.pid"
start_cmd="/usr/sbin/daemon -f -u $ps3netsrv_user -p $ps3netsrv_pidfile $command $ps3netsrv_folder $ps3netsrv_port $ps3netsrv_access"
load_rc_config $name
: ${ps3netsrv_enable:=no}
run_rc_command "$1"
Исправьте под себя user folder access
С этим скриптом ps3netsrv будет запускаться как демон (/usr/sbin/daemon)
man daemon - для справки.
Запуск /usr/local/etc/rc.d/ps3netsrv start
Для автозапуска при загрузке пишем в rc.conf
ps3netsrv_enable="YES"
Управление
/usr/local/etc/rc.d/ps3netsrv start
/usr/local/etc/rc.d/ps3netsrv stop
/usr/local/etc/rc.d/ps3netsrv status
Вот и все.
Подключаемся через Multiman>net_host
Сам потестил на некоторых играх,все нормально грузиться,работает итд. Достаточно быстро.
В папке которую расшариваем, дожна быть папка GAMES и в ней уже игры.
Запускать все это дело будем через скрипт ps3.sh
#!/bin/sh
/usr/bin/nohup /usr/local/sbin/ps3netsrv /patch_to_ps3_folder/ 38008 172.16.0.*>/dev/null &
Запуск от имени другого пользователя
su -m transmission -c ps3.sh
Это необходимо чтобы при перезагрузке само все запускалось.
В данном примере запуск из под root
@reboot root /patch_to_script/ps3.sh
или
@reboot transmission /bin/sleep 30 && /usr/bin/nohup /usr/local/sbin/ps3netsrv /mesto/torrent/download/ps3/ 38008 172.16.0.*>/dev/null &