- æçš¿
- WebãµãŒããŒã®ã»ããã¢ãã
- ã²ãŒã ãµãŒããŒã®ã»ããã¢ãã
- å
å«ç©
- ãµãŒãã¹
- Sourcetv
- ã³ã³ãã³ãã®ããŠã³ããŒããé«éåããïŒé«éããŠã³ããŒãïŒ
- WebãµãŒããŒã®ã»ããã¢ãã
- ã²ãŒã ãµãŒããŒã®ã»ããã¢ãã
- ããã
- ãµããŒããããŠããã«ãŒã
- ã«ã¹ã¿ã ããã
æçš¿
Team Fortress 2ã®èšé²ã¯ããµãŒããŒåŽã§ã¯ãã¬ãŒã€ãŒã®æçµã©ã€ãã®èšé²ãäœæããæ©äŒã§ãããã¯ã©ã€ã¢ã³ãåŽã§ã¯ããã衚瀺ãç·šéãä¿åãããã³å
¬éããæ©äŒã§ãã SourceTVã®æ¡åŒµã§ãã
ãšã³ããªã¯ããµãŒããŒã®ã³ãã³ãã©ã€ã³ã§æç€ºçã«èš±å¯ãããããããããŒããããåã«å®è¡ãããæ§æãã¡ã€ã«ã«å«ãŸããŠæ§æãããŠããå¿
èŠããããŸãã ããã«ããã¬ãŒã€ãŒã«ã¬ã³ãŒããè¿ãããã«WebãµãŒããŒãäºåã«æ§æããå¿
èŠããããŸãã
WebãµãŒããŒã®ã»ããã¢ãã
ããããããããããã«ãDNSã«å¥ã®replay.example.orgãµããã¡ã€ã³ãäœæãã/ var / www / replay.example.orgãã£ã¬ã¯ããªãäœæãã䟿å®äžããã°ãåå¥ã®ãã¡ã€ã«ã«èšé²ããã²ãŒã ãŠãŒã¶ãŒã«ããããèªã¿åããããã«ããŸãã
ã«ãŒããããã£ã¬ã¯ããªãäœæããææè
ïŒã²ãŒã ïŒã²ãŒã ïŒãšæš©éïŒæžã蟌ã¿ãè¡ãã²ãŒã ãŠãŒã¶ãŒã«ãæ®ãïŒWebãµãŒããŒã«ïŒ-èªã¿åãïŒãèšå®ããŸãã ãŸãã䟿å®äžã·ã³ããªãã¯ãªã³ã¯ãäœæããããšãã§ããŸãã ãã®WebãµãŒããŒã¯äž¡æ¹ã®ã²ãŒã ãµãŒããŒã«å
±éã§ããããããããåå¥ã®ãã£ã¬ã¯ããªã䜿çšããŠãšã³ããªãã¢ããããŒãããŸãã
# mkdir -p /var/www/replay.example.org/{htdocs/server1,htdocs/server2,log} # chown -R game:game /var/www/replay.example.org # chmod -R 755 /var/www/replay.example.org # ln -s /var/www/replay.example.org/log /home/game/log/www-replay
ãã®æ§æã§ã¯ãããã©ã«ãã§ããã¹ãŠã®WebãµãŒããŒãã°ã«ã¯ææè
nginxïŒadmããã³640ã®ã¢ã¯ã»ã¹èš±å¯ããããŸããã€ãŸããéåžžã®ãŠãŒã¶ãŒã«ã¯ã¢ã¯ã»ã¹ã§ããŸããã ãã®å Žåããããä¿®æ£ããŸãã
# touch /var/www/replay.example.org/log/{access,error}.log # chmod 644 /var/www/replay.example.org/log/*.log
ãããã£ãŠããŠãŒã¶ãŒã¯ã²ãŒã ã®ãã°ãèªã¿åãããšãã§ããŸãã ããããæåã®ããŒããŒã·ã§ã³ãŸã§ã®ã¿ã§ãã ãããä¿®æ£ããŸãã /etc/logrotate.dãã£ã¬ã¯ããªã§ãnginxãã¡ã€ã«ãsrcds-nginxã«ã³ããŒãããã®äžã®ãã°ãžã®ãã¹ãæå®ãã create 640 nginx adm
ãã¢ã¯ã»ã¹ãã¹ã¯ã640ãã644ã«ä¿®æ£ããŸãã
srcds-nginx #/etc/logrotate.d/srcds-nginx /var/www/stat.example.org/log/*.log /var/www/fastdl.example.org/log/*.log /var/www/replay.example.org/log/*.log { daily missingok rotate 52 compress delaycompress notifempty create 644 nginx adm sharedscripts postrotate if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid` fi endscript }
ããã§ã¯ãããŒããŒã·ã§ã³ãã¹ã§ãHLstatsXçµ±èšãµãŒããŒãšFast DownloadãµãŒããŒããã®ãã°ãå«ããã£ã¬ã¯ããªãæå®ããŸããã
ã«ãŒããããWebãµãŒããŒæ§æãã¡ã€ã«/etc/nginx/conf.d/replay.example.org.confãäœæããŸãã
replay.example.org.conf # /etc/nginx/conf.d/replay.example.org.conf server { server_name replay.example.org; listen 80; root /var/www/replay.example.org/htdocs; disable_symlinks on; autoindex off; access_log /var/www/replay.example.org/log/access.log main; error_log /var/www/replay.example.org/log/error.log warn; }
ãã¡ãããããã¯ããç°¡ç¥åãããããŒãžã§ã³ã§ãã ãã®å ŽåãWebãµãŒããŒã¯ã²ãŒã ãµãŒããŒãšåãã³ã³ãã¥ãŒã¿ãŒäžã«ãããã€ã³ã¿ãŒãããäžã§1ã€ã®ãã£ã³ãã«ãå
±æããŠãããããã¬ã³ãŒããã¢ããããŒãããããã®ãã£ã³ãã«å¹
ã«è¿œå ã®å¶éãèŠå®ããããšã¯çã«ããªã£ãŠããŸãã ãã ããé«éããŠã³ããŒãèšå®ãšã¯ç°ãªãããªãã¡ã©ãŒã«è¿œå ã®ãã§ãã¯ãã€ã³ã¹ããŒã«ããå¿
èŠã¯ãããŸããã
replay.example.org.confåŒã³åºããã¡ã€ã³ãã¡ã€ã«/etc/nginx/nginx.confã«æžã蟌ã¿ãŸãïŒãŸã ãªãå ŽåïŒã次ã«ãæ§æããã¹ãããnginxãåèµ·åããŸãã
# nginx -t # systemctl reload nginx
ç§ãã¡ã¯ã²ãŒã ãŠãŒã¶ãŒãšããŠç¶ç¶ããŸãã
ã²ãŒã ãµãŒããŒã®ã»ããã¢ãã
ããã©ã«ãã§ã¯ããµãŒããŒã¯ã¬ã³ãŒãã解決ãããšãã«ãèµ·åæã«ã/ tf2 / tf / cfg / replay.cfgæ§æãã¡ã€ã«ãå®è¡ããããšããŸãã åã
ã®èšå®ãç°ãªãå¿
èŠãããäž¡æ¹ã®ãµãŒããŒã«ã¬ã³ãŒããå«ããããã以åã®å Žåãšåæ§ã«ããµãŒããŒããšã«åå¥ã®ãã¡ã€ã«ãæºåããŸãã
ã/ tf2 / tf / cfgãã£ã¬ã¯ããªã«replay_example.cfgãã¡ã€ã«ããããŸããããã調ã¹ãŠãç¬èªã®ãã¡ã€ã«ãäœæããŠãã ããã æåã®ãµãŒããŒã®å Žåãã/ cfg / replay1.cfgïŒ
replay1.cfg echo "*** ~/cfg/replay1.cfg" replay_name " " replay_local_fileserver_path /var/www/replay.example.org/htdocs/server1 replay_fileserver_offload_enable 0 replay_fileserver_host replay.example.org replay_fileserver_path /server1 replay_enable 1
ããã«ïŒ
replay_name
ãªãã¶ãŒããŒïŒèг客ïŒã®ãªã¹ãã«è¡šç€ºãããæ¹æ³ãèšé²ããããã®ç¹å¥ãªãããã®ååã
replay_local_fileserver_path
æ¢è£œã®é²é³ãã¡ã€ã«ã眮ããããã£ã¬ã¯ããªã ã²ãŒã ãµãŒããŒããšã«åå¥ã§ãããWebãµãŒããŒã§èªã¿åãå¯èœã§ããå¿
èŠããããŸãã
replay_fileserver_offload_enable
1ã®å Žå-ã¬ã³ãŒãã¯ftpçµç±ã§å¥ã®ãµãŒããŒã«ã¢ããããŒãããããµãŒããŒèªäœã¯æ¢ã«httpçµç±ã§ããããé
ä¿¡ããŸãã ç§ãã¡ã®å Žåã§ã¯ãããŸããã
0ã®å Žåããã·ã³ã®WebãµãŒããŒãé
åžãåŠçããŸãã
replay_fileserver_host
WebãµãŒããŒåãŸãã¯IP
replay_fileserver_path
urléšåã¯ãWebãµãŒããŒã«ãã£ãŠè¡šç€ºãããã¬ã³ãŒããžã®ãã¹ã§ãã
replay_enable
å®éã«ã¯ããµãŒããŒäžã®ãšã³ããªãå«ãŸããŸãã
ãããã£ãŠãããã§èšåãããŠããªã倿°replay_local_fileserver_pathãreplay_fileserver_hostãreplay_fileserver_pathãreplay_fileserver_protocolïŒ= "http"ïŒããã³replay_fileserver_portïŒ= "80"ïŒããã " http://replay.example.org:80/server1 "ã®åœ¢åŒã®URLã圢æãããŸãã¬ã³ãŒããããŠã³ããŒãããŸãã ãŸããreplay_local_fileserver_path倿°ã¯ããã¡ã€ã«ã·ã¹ãã å
ã®å®éã®ãã£ã¬ã¯ããªã®å Žæãèšå®ããnginx + replay_fileserver_pathæ§æãã¡ã€ã«ã®ã«ãŒãã«çãããªããŸãã
ãã®ãã¡ã€ã«ãreplay2.cfgã«ã³ããŒããserver1-> server2ãã¹ãä¿®æ£ããŸã
replay2.cfg echo "*** ~/cfg/replay2.cfg" replay_name "My replay bot" replay_local_fileserver_path /var/www/replay.example.org/htdocs/server2 replay_fileserver_offload_enable 0 replay_fileserver_host replay.example.org replay_fileserver_path /server2 replay_enable 1
ã/ tf2 / tf / cfgã«ãªã³ã¯ãäœæããŸãã
$ ln -s -v ~/cfg/replay{1,2}.cfg ~/tf2/tf/cfg/
ãããã®æ§æãã¡ã€ã«ã¯ãautoexec.cfgã®åŸããµãŒããŒã®æåã®èµ·åæã«ã®ã¿å®è¡ãããããšã«æ³šæããŠãã ããã ã«ãŒãã倿Žããå Žåããããã¯é¢ä¿ããŸããã
å€ããå°ãªããæçšãªã³ã³ãœãŒã«å€æ°ã®å€ãïŒ
replay_dopublishtest
ã¬ã³ãŒãã®ãµãŒããŒïŒã²ãŒã ãšWebïŒã®æºåç¶æ³ã®ãã¹ããè¡ããŸã-ãã¡ã€ã«ã·ã¹ãã å
ã®ãã¹ã®å¯çšæ§ãWebãµãŒããŒã®ååãªã©ããã§ãã¯ããŸãã
replay_data_lifespan
æ¥æ°ïŒããã©ã«ãã§ã¯1æ¥ïŒãèšå®ããŸãããã®åŸããµãŒããŒäžã®ãšã³ããªã¯ã倱å¹ããšããŠããŒã¯ãããæåãŸãã¯èªåã¯ãªãŒãã³ã°ã§åé€ã§ããŸãã
replay_docleanup
ãå€ãããšã³ããªãåé€ããŸãã ãã©ã¡ãŒã¿ãŒ 'force'ã䜿çšãããšãäžè¬çã«ãã¹ãŠã®ã¬ã³ãŒããåé€ãããŸãã
replay_fileserver_autocleanup
ããã©ã«ãã§ã¯0-ãªãã§ãã©ãŠã³ãéã§ãå€ããã¬ã³ãŒãã®èªåã¯ãªãŒãã³ã°ãéå§ããŸãã
replay_dofileserver_cleanup_on_start
ããã©ã«ãã§ã¯1-ãªã³ããµãŒããŒã®èµ·åæã«ã/ tf2 / tf / replay / server {1,2}ãšWebãµãŒããŒãã£ã¬ã¯ããª/var/www/replay.exampleã®äž¡æ¹ã§ãå€ãããšã³ããªã®èªåã¯ãªãŒãã³ã°ãéå§ããŸãã org / htdocs / server {1,2}ã
replay_record_voice
ããã©ã«ãã§ã¯1-ãªã³ããã¬ã€ã€ãŒã®ãã€ã¹ãã£ãããèšé²ããŸãã
ãã®ããŒãžã§ã³ã®Steamãšã³ãžã³ã®é¢é£å€æ°ã®ãªã¹ãã¯ããµãŒããŒã³ã³ãœãŒã«ã§find replay_
ãšå
¥åããããšã§è¡šç€ºã§ããŸãã
å
å«ç©
start serverã¹ã¯ãªããstart {1,2} .shã§ãã³ãã³ãã©ã€ã³ã«è¿œå ããŸãã
æåã®ãµãŒããŒã®å ŽåïŒ
start1.sh CMDLINE="... -replay reply1.cfg -replayserverdir server1 \ ...
2çªç®ã®å ŽåïŒ
start2.sh CMDLINE="... -replay reply2.cfg -replayserverdir server2 \ ...
ããã§ãã-replayãã³ãã³ãã«ã¯èšé²æ©èœãå«ãŸãããµãŒããŒã®èµ·åæã«æå®ãããæ§æãã¡ã€ã«ãå®è¡ããŸãã 2çªç®ã®ã³ãã³ãã-replayserverdirãã¯ãåãµãŒããŒããšã³ããªãèç©ãããã£ã¬ã¯ããªã®ååïŒãã¹ã/ tf2 / tf / replay /ããïŒããã©ã¡ãŒã¿ãŒãšããŠåãåããŸãã
ãã¹ãŠããµãŒããŒãèµ·åããŠè©Šãââããšãã§ããŸãã ã²ãŒã ã¯ã©ã€ã¢ã³ãã§ã¯ããµãŒããŒã®ååã®è¿ãã®ãµãŒããŒãã©ãŠã¶ãŒã§ãVACããã·ã¥ããŒãã®æšªã«ç¹åŸŽçãªã¬ã³ãŒãã¢ã€ã³ã³ã衚瀺ãããŸãã
èšé²ããªã³ã«ãããšããµãŒããŒã«ãªãã¶ãŒããŒã¢ãŒãã§ãããã衚瀺ãããŸããããã¯å®éã«èšé²ãããšåæã«1ã€ã®ã²ãŒã ã¹ããããå æããŸãã ãããã£ãŠããµãŒããŒã®èµ·åæã«èšå®ãããã+ maxplayers 24ããã¬ãŒã€ãŒã®æå€§æ°ã¯1ã€å¢å ããŸããã€ãŸãããã®å Žåã¯25ã«ãªããŸãïŒSteamTVããªã³ã«ãªã£ãŠããå Žåã¯26ïŒã
å€ãã¬ã³ãŒãèšå®ã¬ã€ãã§ã¯éåžžããµãŒããŒã³ãã³ãã©ã€ã³ãã©ã¡ãŒã¿ãŒã-replay_portããæå®ãããŠããŸããã2011幎ã«åãæ¶ããããããèšåããŠããŸãã-store.steampowered.com/news/6282/
ãã¬ãŒã€ãŒïŒSourceModã«ãã³ãã«ãããŠãããã®ãå«ãïŒã§ã®å€§éã®ã¢ã¯ã·ã§ã³ã容æã«ãããã©ã°ã€ã³ã䜿çšããå Žåãã¬ã³ãŒãã£ã³ã°ãããã«æ³šæããå¿
èŠããããŸãã ãããã«ããããµãŒããŒãããã£ããããã¯ããªãã§ãã ãã:)
ãµãŒãã¹
ã¬ã³ãŒããã¡ã€ã«ã¯ããµã€ãºã¯å°ãããã®ã®ãåçãã£ã¬ã¯ããªãš/ var / www /ã®äž¡æ¹ã§ãäŸç¶ãšããŠãã£ã¹ã¯é åãå æããŸãã ãããŠã1æ¥ã®èšå®ããããšãŒãžã³ã°æ¥ïŒreplay_data_lifespan 1ïŒãšãããã®ãã£ã¬ã¯ããªã®èªåã¯ãªãŒãã³ã°ïŒreplay_dofileserver_cleanup_on_start 1ïŒã«ãããããããå€ããã¡ã€ã«ã¯èªåçã«åé€ãããŸããã replay_docleanupãæåã§éå§ããå Žåã§ãã ãããã£ãŠãå®å
šäžã®çç±ããã crontab -e
ãå®è¡ããŠæåŸã«è¿œå ããããšã«ãããå€ãã¬ã³ãŒãã®åŒ·å¶ã¯ãªãŒãã³ã°ã远å ããŸãã
crontab 0 3 * * * /usr/bin/find ~/tf2/tf/replay/server{1,2}/* -type f -mtime +10 -delete 0 3 * * * /usr/bin/find /var/www/replay.example.org/htdocs/server{1,2}/* -type f -mtime +10 -delete
cronãè§æ¬åŒ§ã®æ¡åŒµããµããŒãããã·ã§ã«ã䜿çšããããšã確èªãããšããã§ããã-"{1,2}"
access.logãèªããšããµãŒããŒã«æ¥ç¶ããŠãããšãããã¬ãŒã€ãŒããŸãã¯ãããã²ãŒã ã¯ã©ã€ã¢ã³ããã3é±éåã«ãã¬ã€ããã²ãŒã ã®èšé²ãäŒããããšããããšããããŸãã
ãã1ã€ã®ãã€ã³ã-ã¬ã³ãŒãã¯ããã»ããµæéãæ¶è²»ããããšã«æ³šæããŠãã ããã ããŒãã®äŸã¯ããããããã»ã¯ã·ã§ã³ã®æåŸã«èšèŒãããŠããŸãã
Sourcetv
次ã«SourceTVãæ§æããŸãã ããã¯ãäžçéžææš©ããã¹ããããšãã«ãäžçéžææš©ã®ãªã³ã©ã€ã³æŸéã«åœ¹ç«ã¡ãŸãã
SourceTVã䜿çšãããšãèŠèŽè
ã¯Team Fortress 2ã¯ã©ã€ã¢ã³ããä»ããŠããµãŒããŒäžã®ã²ãŒã ã®é²è¡ç¶æ³ãç£èŠã§ããŸãã ãããã·ãµãŒããŒã®ãã§ãŒã³ã䜿çšããå ŽåããªãŒãã£ãšã³ã¹ã®ãµã€ãºã¯å®è³ªçã«ç¡å¶éã§ããããã®å Žåãã²ãŒã ãã²ãŒã ãµãŒããŒã«ãã£ãŠã®ã¿ãããŒããã£ã¹ããããå Žåããããããããã»ããµãªãœãŒã¹ãšã€ã³ã¿ãŒããããã£ãã«ã®äž¡æ¹ãæ¶è²»ãããããèŠèŽè
ã®æ°ãå¶éããããšã¯çã«ããªã£ãŠããŸãã
ã²ãŒã ãµãŒããŒã®èµ·åã®åæèšå®äžã«ãåãµãŒããŒã®ããŒãçªå·ãšãšãã«ã³ãã³ãã©ã€ã³ã§ãã§ã«ã+ tv_portããæå®ãããããããã«èšå®ãã¡ã€ã«ã«ç§»åã§ããŸãã
é²ç»èšå®ãšåæ§ã«ãããããããŒãããåã«SourceTVãã¢ã¯ãã£ãã«ããå¿
èŠããããŸããã€ãŸããtv_enable 1ã³ãã³ãããµãŒããŒèµ·åã³ãã³ãã©ã€ã³ãŸãã¯autoexec.cfgãã¡ã€ã«ã§å®è¡ããå¿
èŠããããŸãã ããã«ãtv_nameã³ãã³ãã«ãåæ§ã®èŠä»¶ãããããšãå®éšçã«ç¢ºç«ãããŸããã
ãµãŒããŒã®SourceTVèšå®ã¯åºå®ãããŠãããåãããã®å€æŽã倿Žããäºå®ã¯ãªããããäžè¬çãªãã®ã¯ãã¹ãŠautoexec.cfgã«ãåã
ã®èšå®ã¯autoexec {1,2} .cfgã«å«ããŸãã
ã/ cfg / autoexec.cfgã«äžè¬èšå®ã远å ããŸãã
autoexec.cfg //... // SourceTV // tv_title " !" // // tv_password "" // tv_maxclients 5 // tv_maxrate 0 // (1) POV (0) tv_transmitall 1 // tv_delay 20 // - tv_allow_camera_man 0 // //tv_record <filename> // //tv_stoprecord // tv_autorecord 1
ããã«ïŒ
tv_title
ãããŒããã£ã¹ãã衚瀺ãããšãã«ãèŠèŽè
ã®ãŠã£ã³ããŠã®ã¿ã€ãã«ããŒã
tv_password
ãããŒããã£ã¹ãã«æ¥ç¶ããããã®ãã¹ã¯ãŒãã
tv_maxclients
èŠèŽè
ã®æå€§æ°ïŒ0ã255ïŒã¯ããã©ã«ãã§128ã§ãããªã³ã©ã€ã³ãããŒããã£ã¹ãã§ã¯ãªããã²ãŒã ã®é²ç»ïŒtv_recordãtv_autorecordïŒã®ã¿ãå¿
èŠãªå Žåã¯ããŒãã«èšå®ã§ããŸãã
tv_maxrate
åãã¬ãŒã€ãŒã®æå€§ãã£ã³ãã«å¹
ãããã©ã«ãã§ã¯-8000 bpsã0ã«èšå®ãããŠããå Žå-å¶éãªãã ç¹ã«ãµãŒããŒãå®å
šã«èŠèŽè
ã§ãã£ã±ãã«ãªãäºå®ã®å Žåããã®ãã©ã¡ãŒã¿ãŒã¯ä»¥åã®ãã©ã¡ãŒã¿ãŒãšå¯æ¥ã«ãªã³ã¯ããŠããŸãã
tv_transmitall
ããã©ã«ãïŒ "0"ïŒã§ã¯ãèŠèŽè
ã«ã¯SourceTVãªãã¬ãŒã¿ãŒã衚瀺ãããã®ïŒAIãŸãã¯ç¹å¥ãªèšç·Žãåãã人ïŒã®ã¿ãäžããããŸãã ã1ãã«èšå®ãããšãèŠèŽè
ã«ã¯ã²ãŒã ã«é¢ãããã¹ãŠã®æ
å ±ãæäŸãããç°ãªããã¬ãŒã€ãŒã®POVãåãæ¿ãããããããã®äžãŸãã¯äžã«ãããŒããããšãã§ããŸãã ãã©ã¡ãŒã¿ããªã³ã«ãããšãåèŠèŽè
ã«å¿
èŠãªãã£ã³ãã«å¹
ã2ã3åã«ãªããŸãã
tv_delay
èŠèŽè
ãžã®ãããŒããã£ã¹ãé
å»¶ã¯ç§åäœã§ãããã©ã«ãã¯30ã§ããèŠèŽè
ããã¬ãŒã€ãŒã«ãã³ããäžããããšãã§ããå Žåãäžæ£è¡çºãæžããã®ã«åœ¹ç«ã¡ãŸãã
tv_delaymapchange
ãããŒããã£ã¹ããçµäºãããŸã§ïŒtv_delayé
å»¶ã«ããïŒã«ãŒãã®å€æŽãé
å»¶ïŒ "1"ïŒãããããªããïŒ "0"-ããã©ã«ãïŒã
tv_delaymapchange_protect
ã©ãŠã³ããçµäºãããŸã§ãã«ãŒããæåã§å€æŽããªãããã«ä¿è·ããŸãïŒã1ã-ããã©ã«ãïŒã
tv_allow_camera_man
èš±å¯ïŒ "1"-ããã©ã«ãïŒãŸãã¯çŠæ¢ïŒ "0"ïŒãªãã¶ãŒããŒãã¬ãŒã€ãŒã¯SourceTVãªãã¬ãŒã¿ãŒã«ãªããŸãã ã0ãã®å Žå-èªåã«ã¡ã©å¶åŸ¡ã®ã¿ã
tv_autorecord
ãªã³ïŒ "1"ïŒã«ãããšããã¹ãŠã®ã²ãŒã ã¯ããauto-20160630-2208-koth_sawmillããªã©ã®ã/ tf2 / tfãã£ã¬ã¯ããªã«ããauto-<YYYYMMDD>-<hhmm>-< >.dem
ãšãã圢åŒã®ãã¡ã€ã«ã«èªåçã«æžã蟌ãŸããŸãã .dem "ã
ãã¹ã¯ãŒãïŒãtv_password <password>ãïŒãèšå®ãããšãèŠèŽè
ã¯ãµãŒããŒãã©ãŠã¶ãŒããæ¥ç¶ã§ããªããªããŸãããDisconnectïŒBad spectator passwordããšããã¡ãã»ãŒãžã§åžžã«æåŠããããµãŒããŒã³ã³ãœãŒã«ã§ãDropped <player> from serverïŒBad芳客ãã¹ã¯ãŒãïŒãã æ¥ç¶ããã«ã¯ãèŠèŽè
ã¯ã²ãŒã ã®ã³ã³ãœãŒã«ïŒ ~
ïŒã«password <>
ãpassword <>
ããã³ã³ãœãŒã«ãéããŠããæ¥ç¶ã詊ã¿ãå¿
èŠããããŸãã ãŸãã¯ãããã«ã³ã³ãœãŒã«connect 192.0.2.0:27020; password <>
å
¥åãconnect 192.0.2.0:27020; password <>
connect 192.0.2.0:27020; password <>
ã
ã/ cfg / autoexec1.cfgã§ãæåŸã«è¿œå ããŸãïŒ
autoexec1.cfg //... // SourceTV tv_enable 1 // tv_name "SourceTV at Public Server No 1"
ããã«ïŒ
tv_name
SourceTVãµãŒããŒã®ååããµãŒããŒãã©ãŠã¶ãŒã®[ç£èŠ]ã¿ãã«è¡šç€ºãããŸãã
tv_enable
ãµãŒããŒäžã®SourceTVãå«ãïŒã1ãïŒãŸãã¯å«ãŸãªãïŒã0ããããã©ã«ãïŒã
åæ§ã«ãã/ cfg / autoexec2.cfgã調æŽããŸã
ãããã2çªç®ã®ãµãŒããŒã§ã¯ãautoexec2.cfgã®èªåèšé²ãç¡å¹ã«ããŸããã ååããworkshop /ããŸãã¯ãworkshop / .ugcãã®ãããªSteam Workshopããæ¥ç¶ãããã«ãŒãã§èªåèšé²ïŒãtv_autorecord 1ãïŒãæå¹ã«ãããšåé¡ãçºçããŸããã€ãŸããã¹ã©ãã·ã¥ã/ããå«ãŸããŸããã¹ããŒã auto-<YYYYMMDD>-<hhmm>-< >.dem
ã®ãã¡ã€ã«åãäžæ Œå¥œã«ãªãã auto-<YYYYMMDD>-<hhmm>-< >.dem
ã®åœ¢åŒã®ãã°ã«æªçšãããŸãã
Failed to write file /home/game/tf2/tf/replay/server2/sessions/20160702-074150-workshop/cp_orange_x3.ugc454299390.dmx Failed to write file /home/game/tf2/tf/replay/server2/blocks/20160702-074150-workshop/cp_orange_x3.ugc454299390_part_0.dmx ******************************************************************************** * * Replay recording shutting down due to publishing error! Recording will begin * at the beginning of the next round, but may fail again. * ******************************************************************************** ERROR: Publish timed out after 60 seconds.
ãããŠããã®çµæãèšé²ãç¡å¹ã«ããŸãã ãŸãã¯ããtv_recordãã䜿çšããŠã¹ããŒã ãèããããšãã§ããŸããããã«ãããèšé²ãããã¡ã€ã«åãæåã§æå®ã§ããŸãã
SourceTVããªã³ã«ãããšããããããµãŒããŒã«ãªãã¶ãŒããŒã¢ãŒãã§è¡šç€ºãããŸãããã®ã¢ãŒãã§ã¯ãã²ãŒã ã®ãããŒããã£ã¹ããè¡ãããåæã«1ã€ã®ã²ãŒã ã¹ããããå æãããŸãã ãããã£ãŠããµãŒããŒã®èµ·åæã«èšå®ãããã+ maxplayers 24ããã¬ãŒã€ãŒã®æå€§æ°ã¯1ã€å¢å ããŸããã€ãŸãããã®äŸã§ã¯25ã«çãããªããŸãïŒãªãã¬ã€ããªã³ã«ãããš-26ïŒã
ãã®ãããã³ãã³ããç»é²ããããµãŒããŒãåèµ·åããŠãäœãèµ·ãããã確èªããŠãã ããã ã²ãŒã ã¹ããããå æãããšã³ããªããããããæ¬¡ã®ããã«è¡šç€ºãããŸãã
*** ~/cfg/autoexec.cfg (global) -------------------------------------------------------- sv_pure set to 2. -------------------------------------------------------- maxplayers set to 25 *** ~/cfg/autoexec1.cfg Server logging enabled. Server logging data to file /home/game/log/server1/L1008000.log maxplayers set to 26 (extra slot was added for SourceTV) ... Cannot verify load for invalid steam ID [A:1:0:1] Cannot verify load for invalid steam ID [A:1:1:1] Recording SourceTV demo to auto-20161008-1155-cp_granary.dem... Connection to game coordinator established. *** ~/cfg/server1.cfg ... SourceTV broadcast active. Connection to Steam servers successful. Public IP is 192.0.2.0.
ãã®ãããæåã¯ããµãŒããŒäžã®ãã¬ãŒã€ãŒã®æå€§æ°ã24ãã25ã«å¢å ããŸãããããã«ãããã³ãã³ãã©ã€ã³ãã©ã¡ãŒã¿ãŒã-replayããæ©èœããã¬ã³ãŒãããªã³ã«ãªããŸããã æ¬¡ã«ãSourceTVçšã«å¥ã®è¿œå ã¹ãããã远å ãããŸãããautoexec1.cfgãããtv_enable 1ããæ©èœããŸããã ç¡å¹ãªã¹ããŒã ID [AïŒ1ïŒ0ïŒ1]ã«ã€ããŠã®èªãã«ã¯æ³šæãæããŸããããããã¯ããµãŒããŒãã²ãŒã ã¹ãããã远å ããèšé²ããããšãããŒããã£ã¹ããããã§ãã æ¬¡ã«ããã¡ã€ã«ãžã®ãã¢ã®èšé²ã/ tf2 / tf / auto-20161008-1155-cp_granary.demãéå§ãããŸãã-autoexec.cfgã®ãã©ã¡ãŒã¿ãŒãtv_autorecord 1ããæ©èœããŸããã ãããŠæåŸã«ãSourceTVæŸéãã¢ã¯ãã£ãã§ãããšèšãããŸããã
皌ãã ã ãããã«ãããã远å ãããã¥ãŒã¢ã«æ¥ç¶ããŠãtv_transmitallãtv_allow_camera_manã®ããŸããŸãªã¢ãŒãã§ãããŒããã£ã¹ããã©ã®ããã«èŠãããã確èªã§ããŸãã
ã¹ãããã远å ãããããšããããŸããããSourceTV broadcast activeãã«ã€ããŠã§ãã èšèã§ã¯ãªãããµãŒããŒã®tv_status
ã³ãã³ããå
¥åãããšããSourceTV not activeãããšèªããŸããã tv_status
ã¯tv_status
å
¥åãããŸããããtv_enable = 1ïŒdefã0ïŒããšè¡šç€ºãããŸãã ãã®å Žåãmap- changelevel < >
倿ŽããŠã¿ãŠãã ããã 倿ŽåŸã«ãã¹ãŠãæ©èœããå Žåãæåã®ã«ãŒããããŒãããåã«SourceTVãæåã«ã¢ã¯ãã£ãåãããªãã£ãããšãæå³ããŸããèšå®ã確èªããå¿
èŠããããŸãã
圹ç«ã€ã³ãã³ãïŒ
tv_record < >
ãã¡ã€ã«<ãã¡ã€ã«å>ã«ä¿åãããèšé²ãéå§ããŸãã ãªãã¬ãŒã¿ãŒãèŠããã®ã«é¢ä¿ãªãããã¹ãŠã®ã€ãã³ããèšé²ãããŸãã
tv_stoprecord
èšé²ã忢ããŸãã
tv_clients
æ¥ç¶ããŠããèŠèŽè
ã«é¢ããæ
å ±ã衚瀺ããŸãã
tv_msg
ãã¹ãŠã®èŠèŽè
ã«ã¡ãã»ãŒãžãéä¿¡ããŸãïŒç»é¢ã®äžå€®ã«è¡šç€ºãããŸãïŒã
tv_status
ãµãŒããŒã®ã¹ããŒã¿ã¹ã«é¢ããç°¡åãªæ
å ±ã衚瀺ããŸã-ãªã³ã©ã€ã³æéãFPSãèŠèŽè
æ°ã䜿çšããããã£ã³ãã«åž¯åãªã©ã
ãã®ããŒãžã§ã³ã®ã²ãŒã ãµãŒããŒã®é¢é£å€æ°ã®ãªã¹ãã¯ããµãŒããŒã³ã³ãœãŒã«ã«find tv_
ãšå
¥åããããšã§è¡šç€ºã§ããŸãã
ã³ã³ãã³ãã®ããŠã³ããŒããé«éåããïŒé«éããŠã³ããŒãïŒ
æšæºã®Team Fortress 2ããã±ãŒãžã«å«ãŸããŠããããSteam Workshopã§å©çšã§ããªããµãŒããŒäžã®ã«ãŒããã¢ãã«ããµãŠã³ãã䜿çšããå Žåãæ°ãããã¬ãŒã€ãŒãæ¥ç¶ããããšãã«ãã²ãŒã çŽ æãã²ãŒã ã³ã³ãã¥ãŒã¿ãŒã«ããŠã³ããŒãããå¿
èŠããããŸãïŒãŸã æã£ãŠããå ŽåïŒãããïŒã ããã©ã«ãã§ã¯ãã²ãŒã ãµãŒããŒããããŠã³ããŒããããŸã-ãã®ã¢ãŒãã¯ã¹ããŒããŠã³ããŒããšåŒã°ããŸãã ãã ããã²ãŒã ãµãŒããŒã¯ãŸã æ°ãããŠãŒã¶ãŒã«ãŒããé »ç¹ã«ã€ã³ã¹ããŒã«ããé«è² è·ã®å°çšWebãµãŒããŒã§ã¯ãªããããã«ãŒããé
ä¿¡ããæ©èœïŒããã³ãµãŠã³ããã¢ãã«ãªã©ïŒãç¹å¥ã«èšç·ŽãããWebãµãŒããŒã«å²ãåœãŠãããšã¯åççã§ãã 幞ããªå¶ç¶ã®äžèŽã«ãã£ãŠãç§ãã¡ã¯ãã§ã«æã£ãŠããŸãã ãã®æ©èœã¯é«éããŠã³ããŒããšåŒã°ããŸãã
WebãµãŒããŒã®ã»ããã¢ãã
é«éããŠã³ããŒãã䜿çšããã«ã¯ã次ã®åœ¢åŒã®ãµããã£ã¬ã¯ããªæ§é ãæã€ãã£ã¬ã¯ããªã䜿çšããããã«WebãµãŒããŒã«æç€ºããå¿
èŠããããŸã
dir/maps dir/materials dir/sound ...
ããã§ããdirãã¯é«éããŠã³ããŒãã®ã«ãŒããã£ã¬ã¯ããªã§ãã / home / gameã«äœæããããšã¯ã§ããŸãã-rwxæš©éãæã€ããŒã ãã£ã¬ã¯ããªã¯----ã§ãããWebãµãŒããŒããããã®ãã¡ã€ã«ãèŠãããšãã§ããŸããã ãããã£ãŠããããã®ãã£ã¬ã¯ããªã¯ãã²ãŒã ãŠãŒã¶ãŒã®ããŒã ãã£ã¬ã¯ããªä»¥å€ã®å Žæã«äœæããŸãã
èšå®ãç°¡çŽ åããããã«ãDNSã«fastdl.example.orgã®åå¥ã®ãµããã¡ã€ã³ãèšè¿°ãããã£ã¬ã¯ããª/var/www/fastdl.example.orgãäœæããŸãã䟿å®äžããã°ãåå¥ã®ãã¡ã€ã«ã«æžã蟌ã¿ãã²ãŒã ãŠãŒã¶ãŒãããããèªã¿åãæ©äŒãæäŸããŸãã
ã«ãŒããã£ã¬ã¯ããªãããã£ã¬ã¯ããªãäœæããææè
ïŒgameïŒgameïŒãšã²ãŒã ãŠãŒã¶ãŒã®æžãèŸŒã¿æš©éãèšå®ããæ®ãïŒwebãµãŒããŒã«å¯ŸããïŒèªã¿åãæš©éãèšå®ããŸãã ãŸãã䟿å®äžã·ã³ããªãã¯ãªã³ã¯ãäœæããããšãã§ããŸãã Fast Downloadãã£ã¬ã¯ããªã¯ãäž¡æ¹ã®ã²ãŒã ãµãŒããŒã«å
±éã§ãã
# mkdir -p /var/www/fastdl.example.org/htdocs/{maps,materials,sound} # mkdir /var/www/fastdl.example.org/log # chown -R game:game /var/www/fastdl.example.org # chmod -R 755 /var/www/fastdl.example.org # ln -s /var/www/fastdl.example.org/htdocs /home/game/fastdl # ln -s /var/www/fastdl.example.org/log /home/game/log/www-fastdl
ãã®æ§æã§ã¯ãããã©ã«ãã§ããã¹ãŠã®WebãµãŒããŒãã°ã«ã¯ææè
nginxïŒadmããã³640ã®ã¢ã¯ã»ã¹èš±å¯ããããŸããã€ãŸããéåžžã®ãŠãŒã¶ãŒã«ã¯ã¢ã¯ã»ã¹ã§ããŸããã ãã®å Žåããããä¿®æ£ããŸãã
# touch /var/www/fastdl.example.org/log/{access,error}.log # chmod 644 /var/www/fastdl.example.org/log/*.log
ãããã£ãŠããŠãŒã¶ãŒã¯ã²ãŒã ã®ãã°ãèªã¿åãããšãã§ããŸãã ããããæåã®ããŒããŒã·ã§ã³ãŸã§ã®ã¿ã§ãã ãããä¿®æ£ããŸãã /etc/logrotate.dãã£ã¬ã¯ããªã§ãnginxãã¡ã€ã«ãsrcds-nginxã«ã³ããŒãããã®äžã®ãã°ãžã®ãã¹ãæå®ãã create 640 nginx adm
è¡ç®ãã644è¡ç®ã§create 640 nginx adm
fixã®ã¢ã¯ã»ã¹ãã¹ã¯ãcreate 640 nginx adm
ã
srcds-nginx #/etc/logrotate.d/srcds-nginx /var/www/stat.example.org/log/*.log /var/www/fastdl.example.org/log/*.log /var/www/replay.example.org/log/*.log { daily missingok rotate 52 compress delaycompress notifempty create 644 nginx adm sharedscripts postrotate if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid` fi endscript }
ããã§ã¯ãããŒããŒã·ã§ã³ãã¹ã§ãHLstatsXçµ±èšãµãŒããŒãšãšã³ããªãæã€ãµãŒããŒããã®ãã°ãå«ããã£ã¬ã¯ããªãæå®ããŸããã
èæ
®ãã¹ãå¥ã®é¢çœãç¹ããããŸãã ã»ãšãã©ã®ãµãŒããŒã§ã¯ãé¢é£ããå¯èœæ§ã¯äœãã§ãããããã§ãå€ãããŸããã æªæããã§ã¯ãªããç§ãã¡ã®ãã®ãšåããŠãŒã¶ãŒã«ãŒããæã€ã²ãŒã ãµãŒããŒã®ææè
ã劚ãããã®ã¯ãããŸãããããã©ãã£ãã¯ãç¯çŽããããã«ãé«éããŠã³ããŒãèšå®ã§ãŠã§ããµãŒããŒã®ã¢ãã¬ã¹ãæå®ããŠãã ããïŒã²ãŒã ã³ã³ãœãŒã«ã§sv_downloadurl
ãå
¥åããã ãã§ãïŒãµãŒããŒã«æ¥ç¶ããããšã«ããã¯ã©ã€ã¢ã³ãïŒã
ãã®ãããªå¯çè«ã¯ãªãã¡ã©ãŒã«ãã£ãŠæ€åºã§ããŸãããªãã¡ã©ãŒã䜿çšããŠãããããåœç€ŸããããŠã³ããŒããããŸãã ãã®ãããã²ãŒã ã¯ã©ã€ã¢ã³ããã«ãŒããããŠã³ããŒããããšãã²ãŒã ãµãŒããŒã®éä¿¡ããããã©ãŒã ã®èšé²ãWebãµãŒããŒãã°ã«è¡šç€ºãããŸãã
198.51.100.0 http://fastdl.example.org - [16/Jun/2016:20:08:28 +0600] "GET /maps/cp_orange_x5.bsp.bz2 HTTP/1.1" 200 2685506 "hl2://192.0.2.0:27015" "Half-Life 2" 0.453 "-"
ãªãã¡ã©ãŒã«æ³šæããŠãã ããã èšå®æã«ãããèæ
®ããŸãã
ãã®ãããWebãµãŒããŒãæ§æããããã«èšå®ãããŠããŸãã ãŸãããªãã¡ã©ãŒãæ£ããããããšæ£ããããããããŠã³ããŒãããŠãããã©ããã倿ããŸãã /etc/nginx/nginx.conf, http {}, fastdl.example.org, :
nginx.conf # /etc/nginx/nginx.conf http { # <...> map $http_referer $bad_client { default 1; "hl2://192.0.2.0:27015" 0; "hl2://192.0.2.0:27016" 0; } include /etc/nginx/conf.d/fastdl.example.org.conf; }
ããã§ã¯ãã¹ãŠãç°¡åã§ãã $http_referer , $bad_client ( 1) 0.
/etc/nginx/conf.d/fastdl.example.org.conf.
fastdl.example.org.conf #/etc/nginx/conf.d/fastdl.example.org.conf server { server_name fastdl.example.org; listen 80; root /var/www/fastdl.example.org/htdocs; disable_symlinks on; default_type application/octet-stream; if ($bad_client) { # https://habrahabr.ru/post/272261/, return 403; } access_log /var/www/fastdl.example.org/log/access.log main; error_log /var/www/fastdl.example.org/log/error.log warn; }
â $bad_client, .
, nginx valid_referers, $http_referer, , . map .
fastdl.example.org.conf nginx.conf , nginx.
# nginx -t # systemctl reload nginx
game.
, ( bzip2), (.bsp) . , - cp_orange_x5 ( â , Steam Workshop), :
$ mv cp_orange_x5.bsp ~/fastdl/maps $ ln -s ~/fastdl/maps/cp_orange_x5.bsp ~/tf2/tf/maps $ bzip2 --compress --keep --verbose --best ~/fastdl/maps/cp_orange_x5.bsp
~/fastdl/maps, . , , , . < >.cfg ~/tf2/tf/cfg ( ~/cfg, ).
~/cfg/autoexec.cfg:
autoexec.cfg //... // Fast Download // -, // Fast Download sv_downloadurl "" sv_downloadurl "http://fastdl.example.org" // (, ). . sv_allowupload 0 // // Slow Download. . sv_allowdownload 1
. , . , , autoexec.cfg Fast Download.
- â exec <configfile>
. Fast Download , autoexec.cfg, "" , server.cfg. , . , autoexec.cfg :-)
SteamApps\common\Team Fortress 2\tf\download\maps\ cp_orange_x5.bsp, â ( ).
, , , Fast Download ( "Downloading maps/cp_orange_x5.bsp.bz2" â .bz2 ):

( _x3, ).
, , " " (cl_downloadfilter mapsonly), "Map is missing".

http://fastdl.example.org/maps/cp_orange_x5.bsp.bz2 , "403 Forbidden" â , referer hl2://192.0.2.0
, .
:
Fast Download ( sv_downloadurl), -, , < >.bsp.bz2, 404 , .bz2 â < >.bsp. , ~/tf2/tf/maps Slow Download, , .

Team Fortress 2 â . , ( sv_cheats 0), . â "", (sv_cheats 1).
TF wiki , King of the Hill ( koth_*
), Payload ( pl_*
), Dustbowl Gorge, Capture the Flag ( ctf_*
) Mann Manor ( cp_manor_event
). , . . , . .
koth_sawmill, by design. 24 . , 24 , . , 24, . â . â . , . , ~/cfg/koth_sawmill.cfg:
koth_sawmill.cfg echo "*** ~/cfg/koth_sawmill.cfg" // tf_bot_difficulty 3 // tf_bot_join_after_player 0 // tf_bot_keep_class_after_death 0 // tf_bot_quota_mode fill // tf_bot_quota 24
:
tf_bot_difficulty 3
. 0=easy, 1=normal, 2=hard, 3=expert.
tf_bot_join_after_player 0
(0), (1), .
tf_bot_keep_class_after_death 0
, (, , ...), (1) (0), .
tf_bot_quota 24
, . , tf_bot_quota_mode "fill" "match", , +maxplayers .
tf_bot_quota_mode fill
:
"normal" â / (tf_bot_add / tf_bot_kick)
"fill" â ( + ) , tf_bot_quota
"match" â 1:N, N tf_bot_quota.
tf_bot_add [] [] [] [] []
, (, , maxplayers)
[] â Demoman, Engineer, HeavyWeapons, Medic, Pyro, Scout, Soldier, Sniper, Spy
[] â red blue
[] â tf_bot_difficulty, . 0=easy, 1=normal, 2=hard, 3=expert.
, ~/cfg, ~/tf2/tf/cfg:
$ ln -s ~/cfg/koth_sawmill.cfg ~/tf2/tf/cfg
, , : changelevel koth_sawmill
. , expert-lvl tf_bot_difficulty 1 :-)
. cp_orange_x3.
koth_sawmill.cfg cp_orange_x3.cfg, Steam Workshop:
$ mkdir ~/tf2/tf/cfg/workshop $ cp ~/cfg/koth_sawmill.cfg ~/tf2/tf/cfg/workshop/cp_orange_x3.ugc454299390.cfg
cp_orange_x3.ugc454299390.cfg echo , .
. changelevel workshop/cp_orange_x3.ugc454299390
. â , :

. , : sv_cheats 1
â - nav_generate
â ( < >.nav), . ...
Generating Navigation Mesh... Sampling walkable space... Sampling walkable space... Sampling walkable space... Creating navigation areas from sampled data... Connecting navigation areas... Merging navigation areas... Created new fencetop area 1781(fc537be) between 3(1f542dcf) and 49(274fa843) Finding hiding spots...DONE Finding encounter spots...DONE Finding sniper spots...DONE Computing mesh visibility... Computing mesh visibility... 0% Computing mesh visibility... 1% Computing mesh visibility... 5% Computing mesh visibility... 17% Can't compute incursion distances from the Red spawn room(s). <...> Can't compute incursion distances from the Blue spawn room(s). <...> Computing mesh visibility... 84% Optimizing mesh visibility... NavMesh Visibility List Lengths: min = 12, avg = 104, max = 280 Computing mesh visibility...DONE Finding earliest occupy times...DONE Start custom... Post custom... Custom game-specific analysis...DONE Generation complete! 77.8 seconds elapsed. Navigation map '/home/game/tf2/tf\maps\workshop/cp_orange_x3.ugc454299390.nav' saved. [TF Workshop] Preparing map ID 454299390 [TF Workshop] Successfully prepared client map from workshop [ workshop/cp_orange_x3.ugc454299390 ] ---- Host_Changelevel ---- .
. "sv_cheats 0" server2.cfg. , , sv_cheats 0, â , .
â , . , , . .
- , . Navigation Mesh Commands , Steam Users Forum .
"" (Puppet bots). , , . . TF Wiki, . https://youtu.be/Dn9970dxQ2g
, , , . , top Atom N2800:

24 ( , ), 12, . , . , , 7%. tf_bot_join_after_player 1 .
, , â ( ), (koth_sawmill.cfg cp_orange_x3.ugc454299390.cfg ) , , . , â , - " ", , .nav . , , tf_bot_quota 0 server{1,2}.cfg â , .
- 1 â Steam Team Fortress 2, ,
- 3 â MetaMod SourceMod, , , Steam
QuickPlay - 4 â HLstatsX