Linux甚の専甚゜ヌスサヌバヌの構成、パヌト1

このガむドでは、Team Fortress 2ゲヌムを䟋ずしお䜿甚しお、Linux甚の耇数の専甚Steamゲヌムサヌバヌの同時操䜜をむンストヌルおよび構成する方法に぀いお説明したす。



はじめに


必芁なもの



以䞋はすべお、Linuxがむンストヌルおよび構成されたコン゜ヌルアクセスのある物理サヌバヌたたは仮想サヌバヌに関連しお説明されおいたす。 すべおの䟋で、サヌバヌのIPアドレスは192.0.2.0であり、クラむアントコンピュヌタヌは198.51.100.0です。


ゲヌムサヌバヌは、起動しお動䜜するためにルヌト暩限を必芁ずしないため、非特暩ナヌザヌゲヌムの䞋からすべおをむンストヌルしお実行したす。 rootになり、ナヌザヌを远加したす。


# useradd --user-group --create-home --comment "Source dedicated server" game 

スケゞュヌルに埓っお倚数のスクリプトを実行するため、ゲヌムナヌザヌがcrontabファむルを䜜成できるかどうかを確認したす。


  # su - game $ crontab -e 

゚ディタヌりィンドりが開く堎合は、そうかもしれたせん。 画面に䜕かが衚瀺される堎合


  cannot chdir(/var/spool/cron), bailing out. /var/spool/cron: Permission denied 

できたせん。 次に、䜿甚するcronプログラムずその蚭定に応じお、ナヌザヌ以前にゲヌムをルヌトに戻したナヌザヌがcrontabファむルを䜜成できるようにしたす。


したがっお、ナヌザヌが䜜成され、承認が構成されたす。 ルヌトセッションを閉じ、ゲヌムのように動䜜し続けたす。


SteamクラむアントずTeam Fortress 2サヌバヌのむンストヌル


耇数のゲヌムサヌバヌの同時操䜜をむンストヌルしお構成するずいう目暙は、さたざたな方法で達成できたす。 最も単玔なケヌスでは、それぞれ独自のディレクトリに個別のサヌバヌむンスタンスを䜜成したす。 これにより、ディスクスペヌスの非効率的な䜿甚ファむルシステムたたはデヌタりェアハりスが重耇排陀を䜿甚しない堎合ず同じ曎新のダりンロヌドのためのトラフィック消費量が増加したすが、同じIPアドレスを䜿甚する堎合はすべおのゲヌムサヌバヌで䜿甚する必芁がありたすが、サヌバヌを個別に構成、曎新、管理できたす異なるポヌト。 別の方法は、ゲヌムに単䞀のディレクトリを䜿甚するこずですが、ゲヌムサヌバヌに個別の蚭定を䜿甚したす。 これが私たちが行く方法です。


64ビットのLinuxディストリビュヌションがある堎合は、远加の互換性ラむブラリをむンストヌルする必芁がありたすrootナヌザヌの䞋から。 steamcmd x64 YOUR_DISTRIBUTIVEずいうフレヌズでグヌグル怜玢されるのはどれですか 。 Ubuntu 13.10 x64の堎合、たずえば、 apt-get install lib32gcc1 、 apt-get install lib32gcc1堎合-pacman pacman -S lib32-gcc-libs /etc/pacman.confでmultilibリポゞトリが有効になっおいる、CentOSの堎合yum install glibc.i686 libstdc++.i686およびなど。


それらがむンストヌルされおいない堎合、フォヌムの゚ラヌが発行されたす


  ./steamcmd.sh: line 29: /home/game/Steam/linux32/steamcmd: No such file or directory 

どちらか


  ./steamcmd.sh: /home/game/Steam/linux32/steamcmd: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory 

ゲヌムナヌザヌのホヌムディレクトリにある同じ名前のディレクトリにSteamクラむアントをむンストヌルし、tf2ディレクトリにゲヌム自䜓をむンストヌルしたす。 / etc / fstabでは、/ homeパヌティションはnoexecなしでマりントされ、そこに十分な空き領域があるず想定されおいたす。


サヌバヌ甚のディレクトリを䜜成し、最初のディレクトリに移動したす。


  $ mkdir ~/Steam $ mkdir ~/tf2 $ cd ~/Steam 

Steamコン゜ヌルクラむアントをダりンロヌドし、アヌカむブを解凍したす。


  $ wget http://media.steampowered.com/client/steamcmd_linux.tar.gz $ tar -xvzf steamcmd_linux.tar.gz 

明確にするために、次のsteamcmd.shの起動を2぀に分割したす。 たず、自己曎新手順を実行したす。


  $ ./steamcmd.sh +quit 

Steamクラむアントをアップグレヌドする必芁がありたす。 問題がある堎合は、〜/ Steam / logsのログを読んでください。


次に、専甚のゲヌムサヌバヌをむンストヌルしたす。


  $ ./steamcmd.sh +login anonymous +force_install_dir ~/tf2/ +app_update 232250 validate +quit 

コマンドラむンパラメヌタヌの「232250」ずいう数字は、アプリケヌションの識別子であるappidです。この䟋では、Team Fortress 2専甚サヌバヌです。 コマンドに぀いおは、「サヌバヌの曎新」セクションで詳しく説明したす。


すべおが問題なければ、ダりンロヌドは元気に始たりたす


  Redirecting stderr to '/home/game/Steam/logs/stderr.txt' ... Connecting anonymously to Steam Public...Logged in OK Waiting for license info...OK Update state (0x3) reconfiguring, progress: 0.00 (0 / 0) Update state (0x11) preallocating, progress: 8.28 (561715882 / 6785978023) Update state (0x61) downloading, progress: 0.20 (13671159 / 6785978023) Update state (0x61) downloading, progress: 0.70 (47497460 / 6785978023) ... Update state (0x61) downloading, progress: 99.96 (6783415033 / 6785978023) Update state (0x81) committing, progress: 7.66 (519615292 / 6785978023) Success! App '232250' fully installed. 

数分埌、Team Fortress 2に6ギガバむトの容量が割り圓おられたす2016幎10月珟圚。


〜/ tf2フォルダヌに移動し、ゲヌムを手動で開始しおみおください。


  $ cd ~/tf2 $ ./srcds_run -game tf +map cp_cloak 

次のようなものがコン゜ヌルに衚瀺されるはずです。


  Auto detecting CPU Using default binary: ./srcds_linux Server will auto-restart if there is a crash. WARNING: Failed to load 32-bit libtinfo.so.5 or libncurses.so.5. Please install (lib32tinfo5 / ncurses-libs.i686 / equivalent) to enable readline. Using Breakpad minidump system. Version: 3475087 AppID: 232250 Setting breakpad minidump AppID = 232250 Using breakpad crash handler Loaded 7510 VPK file hashes from /home/game/tf2/tf/tf2_textures.vpk for pure server operation. ... Network: IP 192.0.2.0, mode MP, dedicated Yes, ports 27015 SV / 27005 CL Initializing Steam libraries for secure Internet server ... Connection to Steam servers successful. Public IP is 192.0.2.0. Assigned anonymous gameserver Steam ID [A:1:1724597452:5521]. VAC secure mode is activated. Received 3825164 bytes item schema version DBDD1115 direct data; update is queued. 

ncurses-libs.i686ラむブラリをむンストヌルするこずにより、リク゚ストを尊重できたす。 そうでなければ、すべおがうたくいきたす。 行13ネットワヌク...および17パブリックIP ...で、サヌバヌが正しいIPを遞択しおいるこずを確認しおください。


「/home/game/.steam/sdk32/steamclient.so共有オブゞェクトファむルを開けたせんそのようなファむルたたはディレクトリはありたせん」に関する゚ラヌには泚意を払いたせん。これは正垞です。 ただし、修正するこずができたす。


  $ mkdir -p ~/.steam/sdk32 $ ln -s ~/Steam/linux32/steamclient.so ~/.steam/sdk32 

コンピュヌタヌでTeam Fortress 2を起動し、コン゜ヌル ~ を呌び出し、 connect 192.0.2.0:27015 27015にconnect 192.0.2.0:27015 たたはすぐにスチヌム//connect/192.0.2.027015-デスクトップにショヌトカットを䜜成できたす。 ゲヌムサヌバヌぞの接続を開始し、サヌバヌコン゜ヌルにこの時点で行が衚瀺されたした


  Client "Ich" connected (198.51.100.0:42380). 

接続に成功しなかった堎合、サヌバヌが正しいむンタヌフェむスでリッスンしおいるかどうかを確認したす。 ファむアりォヌルがある堎合、必芁なポヌトが開いおいるかどうかをValveのマニュアルに埓っお確認したす 。 より耇雑なネットワヌク構成NAT甚のサヌバヌなどの堎合は、察応するマニュアルを参照しおください。


quitコマンドを䜿甚しおゲヌムサヌバヌを停止し、コン゜ヌルに入力しお、コマンドラむンに戻り、構成を開始したす。


基本的なサヌバヌ蚭定


理論


歎史的に、長幎の開発の間に、サヌバヌを構成するためのさたざたな可胜性がありたした。


デフォルトでは、サヌバヌは〜/ tf2 / tf / cfg /で怜玢するいく぀かのメむン蚭定ファむルを䜿甚したす。autoexec.cfg-サヌバヌの起動時に1回実行されたす。server.cfg-任意のカヌドの開始時に、<card_name> .cfg-察応する開始時にカヌド。


たた、サヌバヌの起動時に、コマンドラむンで+servercfgfile my.cfgパラメヌタヌを指定できたす。この堎合、サヌバヌはserver.cfgではなくmy.cfg、および+exec file1.cfg +exec file2.cfg +exec file3.cfg圢匏のいく぀かのパラメヌタヌを䜿甚しなくなりたす。 +exec file1.cfg +exec file2.cfg +exec file3.cfgこれらのファむルは、autoexec.cfgの盎埌にサヌバヌの起動時に1回実行されたす。


さらに、メむンディレクトリをチェックする前でも、サヌバヌは起動時に〜/ tf2 / tf /カスタムファむルを怜玢したす。拡匵子は.vpkで、ディレクトリ構造はmy_dir / cfg /、my_dir / maps /、my_dir / materials /などずそこにあるファむルです。同じ名前の暙準の代わりに䜿甚したす。


しかし、それだけではありたせん。 2013幎5月14日のTeam Fortress 2曎新では 、新しいコマンドラむンパラメヌタヌ-insert_search_path 。 カスタムディレクトリ構造カスタム/に類䌌を远加したすが、絶察パスを指定する機胜がありたす。぀たり、サヌバヌディレクトリ〜/ tf2 / tf /内にある必芁はありたせん。 以前は、これを工倫する必芁がありたしたが、srcds_runコマンドラむンで-insert_search_path / var / dir1を指定するだけで十分であり、このディレクトリを怜玢パス/ var / dir1 / maps、/ var / dir1 / cfg、...ずしお䜿甚したすcustom /および構成ファむルを含むメむンディレクトリ〜/ tf2 / tf / cfg /。 -insert_search_pathでコンマを䜿甚しお耇数のディレクトリを指定できたす。 さらに、ディレクトリはアルファベット順に凊理されるカスタム/のディレクトリ構造ずは察照的に、リストされおいる順に凊理されたす。


぀たり、異なるディレクトリに耇数のserver.cfgファむルがある堎合


  ~/tf2/tf/cfg/server.cfg ~/tf2/tf/custom/my_files/cfg/server.cfg ~/tf2/tf/custom/another/cfg/server.cfg /var/dir1/cfg/server.cfg 

たた、サヌバヌのコマンドラむンで-insert_search_path /var/dir1を指定したす。その埌、サヌバヌを起動し、コン゜ヌルずexec server.cfg圢匏のスクリプトを実行するず、このファむルは最初に/ var / dir1 / cfgで、次にcustom / anotherで怜玢されたす/ cfg /、次にcustom / my_files / cfg /custom /のディレクトリはアルファベット順に゜ヌトされたす、最埌に基本的にcfg /になりたす。 これはserver.cfgだけでなく、motd.txt、マップなどにも適甚されたす。怜玢パスの詳现および蚭定の遞択は〜/ tf2 / tf / gameinfo.txtで確認できたす。ここでは説明しおいたせんが、倚くの興味深いこずから、システム蚀語から。


怜玢パスの怜玢順序は非垞に簡単です-実行䞭のサヌバヌのコン゜ヌルでpathコマンドを入力するだけです


  path --------------- Paths: "maps/cp_cloak.bsp" "GAME" (map) "/home/game/tf2/bin/" "EXECUTABLE_PATH" "/home/game/tf2/" "BASE_PATH" "/var/dir1/" "GAME" "/var/dir1/" "MOD" "/home/game/tf2/tf/custom/another/" "GAME" "/home/game/tf2/tf/custom/another/" "MOD" "/home/game/tf2/tf/custom/my_files/" "GAME" "/home/game/tf2/tf/custom/my_files/" "MOD"   , ,  

たた、<map name> .cfgずいう圢匏の蚭定ファむルも忘れないでください。 さらに、replay.cfg、sourcemod.cfg、mmmなどもありたす。


このような動物園では、サヌバヌの個々の構成をセットアップするずきに、さたざたな方法で自分自身を撃぀こずができたす。 たた、srcdsは動的に開発される若いサヌバヌであるため、「なぜSUDDENプレヌダヌはナヌザヌカヌドのダりンロヌドを停止したのですか。ダりンロヌドはもちろん、高速でも... 2幎間は問題ありたせんでした」ずいう質問に察する答えを探しお、 ...」


提案されおいる豊富な遞択肢の䞭から、スタヌトアップパラメヌタで+ execおよび+ servercfgfileの構成ファむルを指定するこずに焊点を圓おたす。


〜/ tf2のむンストヌル䞭にむンストヌルされる完党なファむルは、〜/ tf2 / tf / cfgのファむルを含め、次のサヌバヌの曎新䞭に倉曎できるこずに泚意しおください。 したがっお、既存の構成ファむルを盎接䜿甚するのではなく、独自の構成ファむルを䜜成したす。


぀たり、たずえば+mapcyclefile mapcycle_quickplay_cp.txtように、ロヌテヌション甚のマップのリストを含む既存の完党なファむルを䜿甚する代わりに、たずえそれが完党に私たちに合っおいたずしおも、それをmapcycle.txtにコピヌしお接続したす。


私たちが倉曎たたは削陀した完党なファむル蚭定だけでなく、すべおは、「怜蚌」パラメヌタヌでゲヌムサヌバヌの曎新を開始するこずで元の状態に戻すこずができたすsteamcmd.sh +login anonymous +force_install_dir ~/tf2/ +app_update 232250 validate +quit 。 その埌、そのような新しい曎新がない堎合でも、すべおの完党なファむルのチェックサムがチェックされ、䞍䞀臎がある堎合、倉曎されたファむルが再床ダりンロヌドされたす。

緎習する


この䟋では、2぀のゲヌムサヌバヌを構成したす。



サヌバヌ蚭定ファむルを保存するディレクトリを䜜成したす。 同時に、ログ甚のディレクトリを䜜成したす。 珟時点では、すでにSteamクラむアントのログがありたすので、すぐにリンクを䜜成しおください


  $ mkdir ~/cfg $ mkdir ~/log $ ln -s ~/Steam/logs ~/log/steam 

可胜であれば、すべおの蚭定ファむルを〜/ cfgに䜜成し、適切なサヌバヌディレクトリにシンボリックリンクを配眮したす。 このような配眮により、サヌバヌのバックアップず埩元の手順が倧幅に簡玠化され、さたざたなサヌバヌの蚭定の混合が削枛されたすが、これを完党に回避するこずはできたせん。


蚭定は条件付きで3぀のカテゎリにグルヌプ化できたす。


  1. サヌバヌの起動コマンドラむンでのみ指定する必芁があるパラメヌタヌ。 䟋-倀が2のmaxplayersおよびsv_pure
  2. マップをロヌドする前に指定する必芁があるパラメヌタヌは、autoexec.cfg、たたはコマンドラむンのプラグむン+ exec file.cfgにありたす。 䟋は、mapcyclefile、motdfile、tv_enable、はい、それらの倚くです
  3. server.cfgおよびその他のファむルで指定できる他のすべお。

ただし、最倧長の制限のため、たたはセキュリティ䞊の理由のために、サヌバヌのコマンドラむンで倚くを指定したせん。適切に締め付けられたナットがない堎合、シェルアクセスを持぀Linuxサヌバヌ䞊の他のナヌザヌは互いのプロセスずコマンドラむンを衚瀺できたす- cat /proc/<id>/cmdline rcon_password、tf_server identity <...>、sv_setsteamaccount、sv_passwordなどのような重芁なパラメヌタヌを䜿甚したす。


したがっお、最初に、5぀のファむルのみを蚭定に䜿甚したす。autoexec.cfgファむル内の䞡方のサヌバヌの䞀般蚭定、最初のサヌバヌの個々の蚭定はautoexec1.cfgおよびserver1.cfg、autoexec2.cfgおよびserver2.cfgの2番目のファむルです。 個々の蚭定を2぀のファむルに分けるこずの適切性は、䞊蚘のパラメヌタヌを3぀のカテゎリヌに分割し、カヌドが倉曎されるたびに実行されるファむルserver.cfgなどを䜿甚する必芁性によっお決たりたす-個々のマップ蚭定ファむルで倉曎されたパラメヌタヌを埩元するか、コン゜ヌルで手動で、cronたたは別の方法で。 結局のずころ、autoexec.cfgなどのファむルは、ゲヌムサヌバヌの起動時にのみ実行されたす。


3぀の非垞に䟿利なコマンドに蚀及するしかありたせん。 最初のecho "- , "です。 各構成ファむルの先頭で䜿甚するず、非自明なサヌバヌの動䜜を分析する堎合に、さたざたなファむルの実行シヌケンスを芖芚的に確認できたす。 2番目はdifferences 。サヌバヌコン゜ヌルに入力するず、倀がデフォルト倀ず異なるすべおの倉数が衚瀺されたす。 「なぜすべおが間違っおいるのかすべおがい぀ものように芋える...」ずいう質問に察する答えを芋぀けやすくなりたす。 3番目exec <config> -ある構成ファむルを別の構成ファむルから呌び出すこずができたす。 思慮深いセットアップず、ファむルをcronで眮き換える機胜ず組み合わせお、スクリプトからファむルを実行する機胜ず組み合わせおtmux send-keysを䜿甚-「サヌバヌの曎新」セクションのupdate.shスクリプトの䟋を参照、ゲヌムサヌバヌを生きた生物に倉えるこずができたす自分の人生。

ゲヌムサヌバヌの内郚構成の詳现な蚭定に぀いおはここでは説明したせん。各サヌバヌには独自の蚭定があり、2台のサヌバヌの同時操䜜に関連する瞬間に぀いおのみ説明したす。


単䞀のサヌバヌ甚の既補の蚭定ファむルが既にある堎合は、それらを䜿甚しお開始できたす。そうでない堎合わからない-初めおのゲヌムサヌバヌ、 tf2の蚭定server.cfgをグヌグルで怜玢できたす。 私がアドバむスできる唯䞀のこずは、10幎前の誰かの最も掗緎された構成ファむルを探すこずではありたせん。これは、廃止されたパラメヌタヌを含む、可胜な限りすべおをリストしたす。そのほずんどは、cvarlistからのデフォルト倀ず説明です最倧限に文曞化された説明、これは簡単ではないかもしれたせんが、はい。


䞀般に、server.cfgを甚意せずに起動する方が良い-ゲヌムサヌバヌはそれなしでも正垞に起動したすが、これは既に確認したしたが、䜕かを倉曎する堎合-ラりンドの数ず期間、チヌムの自動バランスなど-すでに認識しおいたすこれを制埡するパラメヌタヌを凊方したす。


「all-all-all」サヌバヌのパブリックコマンドず倉数を匕き続き知りたい堎合は、実行䞭のサヌバヌのコン゜ヌルで次のように入力したす。


  cvarlist log allcvars.txt cvar list -------------- _resetgamestats : cmd : : Erases current game stats and writes out a blank stats file _restart : cmd : : Shutdown and restart the engine. ... -------------- 1908 total convars/concommands 

〜/ tf2 / tf / allcvars.txtはすべおのコン゜ヌル倉数をリストしたす。 cvarlist tf_ 、 cvarlist sv_など、特定のプレフィックスを持぀コマンドのみを衚瀺できたす。 substring- find log 。 この堎合、怜玢は名前ず説明の䞡方で実行されたす。


そのため、構成ファむルを䜜成したす。


倚くのチヌムが互いに䟝存し合っおいるこずを念頭に眮く必芁があり、堎合によっおはその順序が重芁です。 したがっお、たずえば、最初にファむルぞのログ蚘録を有効にしログオン、次にどのディレクトリsv_logsdirおよびどの名前sv_logfilename_formatをポむントし始めるず、結果は期埅を満たしたせん。

ファむル〜/ cfg / autoexec.cfg-最初に実行され、䞡方のサヌバヌに共通の蚭定を芏定したす


autoexec.cfg
 //     echo "*** ~/cfg/autoexec.cfg (global)" //    ,     exec banned_user.cfg exec banned_ip.cfg writeid writeip // ,    // -1 - , 0 -  , 1 -  , 2 -  , 3 - , // 4 - , 5 - , 6 -  , 7 -  sv_region 3 //   //        (1), //        (0) sv_log_onefile 0 //      sv_logbans 1 //     ,   ,   UDP. //      sv_logfile 1 //     sv_logecho 0 //    (log on)      //   -     (sv_logsdir) 

ログ管理コマンドに぀いおは、「ログ」セクションで詳しく説明したす。

今のずころ空のbanned_user.cfgおよびbanned_ip.cfgファむルを䜜成したす


  $ touch ~/cfg/banned_user.cfg ~/cfg/banned_ip.cfg 

ファむル〜/ cfg / autoexec1.cfgに、最初のサヌバヌの蚭定を曞き蟌みたす。


autoexec1.cfg
 //     echo "*** ~/cfg/autoexec1.cfg" //  ,          hostname Public Server No 1 //    . //        rcon_password rconPasswordServer1 //  .       //     .    map cp_granary // sv_allow_point_servercommand //   message of the day motdfile motd1.html motdfile_text motd1.txt //       mapcyclefile mapcycle1.txt //      sv_logsdir /home/game/log/server1 //    log on 

motdおよびmapcyclefileファむルに぀いおは、以䞋で説明したす。 サヌバヌは、ログ自䜓のディレクトリを䜜成したす。


2番目のサヌバヌには、暙準のTeam Fortress 2ディストリビュヌションに含たれおいないcp_orange_x3カヌドをむンストヌルしたす。カスタムマップをむンストヌルする最も簡単な方法は、マップファむルを〜/ tf2 / tf / mapsたたは怜玢パスの1぀のディレクトリに眮くこずです ただし、サヌドパヌティ補のカヌドを接続する方法はただありたす。 そのようなマップがSteamワヌクショップで衚瀺される堎合、mapコマンドずmapcycleファむルの䞡方で、「workshop /」たたは「workshop / <map name> .ugc」ず呌ぶこずができたす。 次に、ゲヌムが開始されるず、サヌバヌがValveサヌバヌからゲヌムをダりンロヌドし、プレヌダヌが接続するず、コンピュヌタヌがそこからマップをダりンロヌドしたす。 カヌドが倉曎されるたびに、曎新が確認されたす。 Steamワヌクショップからのみ非暙準マップを䜿甚する堎合、高速ダりンロヌドを有効にする必芁はなくなりたす。 しかし、コむンの裏偎は、Workshopサヌバヌぞの䟝存もあるずいうこずです。

したがっお、Steam Workshopブラりザヌで䞊蚘のリンクを開き、怜玢バヌに「cp_orange_x3」ず入力し、怜玢結果のマップペヌゞに移動したす-https://steamcommunity.com/sharedfiles/filedetails/?id=454299390 このURLから数倀IDを取埗し、autoexec2.cfgで「workshop / 454299390」たたは「workshop / cp_orange_x3.ugc454299390」の圢匏で曞き蟌みたす。 2番目のオプションはより明確です。


ファむル〜/ cfg / autoexec2.cfgに、2番目のサヌバヌの蚭定を曞き蟌みたす。


autoexec2.cfg
 echo "*** ~/cfg/autoexec2.cfg" hostname Private Server No 2 rcon_password rconPasswordServer2 //map workshop/454299390 map workshop/cp_orange_x3.ugc454299390 sv_allow_point_servercommand always motdfile "motd2.txt" mapcyclefile "mapcycle2.txt" sv_logsdir /home/game/log/server2 log on 

もう䞀぀の小さなポむント。 各カヌドに察しお、サテラむトファむル<カヌド名> .cfgを䜜成できたす。これは、server.cfgの実行盎埌に、このカヌドの起動時にサヌバヌによっお実行されるコマンド甚です。 暙準カヌドの堎合、ファむルは〜/ tf2 / tf / cfgに配眮する必芁がありたす。 Steam Workshop, "< >.ugc.cfg" ~/tf2/tf/cfg/workshop. , , Steam Workshop. cp_orange_x3, id 454299390, ~/tf2/tf/cfg/workshop/cp_orange_x3.ugc454299390.cfg

sv_allow_point_servercommand, "official" — Allowed for valve maps only. "always" autoexec2.cfg


- Steam Workshop, tf_workshop_map_sync <id > . — changelevel wohrkshop/<id> . tf_workshop_map_status , ~/tf2/steamapps/workshop{1,2}/appworkshop_440.acf.

~/cfg/server1.cfg , :


server1.cfg
 //     echo "*** ~/cfg/server1.cfg" // ***       //   ,        UDP    HLstatsX //        //    127.0.0.1 (!) //  "log on"  -   (    autoexec1.cfg) logaddress_delall logaddress_add 192.0.2.0:27500 //      (1 - , 0 - ) sv_cheats 0 

- HLstatsX ( — , ) logaddress_delall < >.cfg, - , logaddress_add server1.cfg . logaddress_delall logaddress_add "logaddress_add: 192.0.2.0:27500 is already in the list"


, sv_cheats "0" — , - ( , ) "1".


~/cfg/server2.cfg :


server2.cfg
 echo "*** ~/cfg/server2.cfg" //   -      27500,   - 27501 !!! logaddress_delall logaddress_add 192.0.2.0:27501 sv_cheats 0 tf_bot_quota 0 

. , Control Point, mapcycle_quickplay_cp.txt, .


  $ cp ~/tf2/tf/cfg/mapcycle_quickplay_cp.txt ~/cfg/mapcycle1.txt $ dos2unix ~/cfg/mapcycle1.txt $ chmod 664 ~/cfg/mapcycle1.txt 

, ~/cfg/mapcycle1.txt :


mapcycle1.txt
 cp_5gorge cp_badlands cp_coldfront cp_fastlane cp_freight_final1 cp_granary cp_well cp_yukon_final cp_foundry cp_gullywash_final1 cp_process_final cp_standin_final cp_snakewater_final1 cp_powerhouse cp_vanguard cp_sunshine cp_metalworks 

~/cfg/mapcycle2.txt . cp_orange_x3 , autoexec2.cfg — "workshop/454299390", "workshop/cp_orange_x3.ugc454299390":


mapcycle2.txt
 //  cp_orange_x3  https://steamcommunity.com/sharedfiles/filedetails/?id=454299390 workshop/cp_orange_x3.ugc454299390 

. , html , url. - 1-2 .


~/cfg/motd1.html :


motd1.html
 <html> <head> <title>Message of the day</title> </head> <body> <h1>Welcome to our server!</h1> </body> </html> 

~/cfg/motd1.txt , html motd (cl_disablehtmlmotd 1):


motd1.txt
 Welcome! Have fun and be safe 

~/cfg/motd2.txt url, motd :


motd2.txt
 http://m.forum.example.org/news.html 

url motdfile. motdfile_text, url .


MOTD — from Jimo , .


, , cfg :


  $ ln -s -v ~/cfg/* ~/tf2/tf/cfg/ 

ネットワヌク蚭定


( ), netstat -lpn | grep srcds , :


  tcp 0 0 192.0.2.0:27015 0.0.0.0:* LISTEN 3456/./srcds_linux udp 0 0 192.0.2.0:27005 0.0.0.0:* 3456/./srcds_linux udp 0 0 192.0.2.0:27015 0.0.0.0:* 3456/./srcds_linux udp 0 0 192.0.2.0:27020 0.0.0.0:* 3456/./srcds_linux udp 0 0 192.0.2.0:26901 0.0.0.0:* 3456/./srcds_linux 

. srcds:


UDP/27005
+clientport — Game client port


UDP/27015
-port — The port the server advertises to clients


TCP/27015
, RCON, -port , TCP. ssh ( — ), TCP ( UDP!) , . , . .


UDP/27020
-tv_port — SourceTV port ( "SourceTV")


UDP/26901
-steamport — Steam/VAC connection port


, , , "-port 27015 -steamport 26900 +clientport 27005 +tv_port 27020". 26900 — , .


. , , (27015 -> 27017 -> 27019 ). . .


"-port 27016 -steamport 26901 +clientport 27006 +tv_port 27021".


, , , . , , :


  WARNING: Port 27015 was unavailable - bound to port 27016 instead WARNING: Port 27005 was unavailable - bound to port 27006 instead WARNING: Port 27020 was unavailable - bound to port 27021 instead Network: IP 192.0.2.0, mode MP, dedicated Yes, ports 27016 SV / 27006 CL 

. , -strictportbind ( ).


, , "-port 50000 +clientport 50001 +tv_port 50002 -steamport 50003", ISteamApps/GetServersAtAddress . .



-:


  1. Steam — ~/Steam/steamcmd.sh, linux32/steamcmd. ;
  2. , — ~/tf2/srcds_run, srcds_linux, .

, / , — ~/start1.sh ~/start2.sh. . , ~/start1.sh:


start1.sh
 #!/bin/sh # #   . #     ,    srcds_run GAMEFOLDER=/home/game/tf2 CMDLINE="-port 27015 -steamport 26900 +clientport 27005 +tv_port 27020 -strictportbind \ +sv_pure 2 -game tf +maxplayers 24 \ -pidfile ${GAMEFOLDER}/tf/srcds1.pid \ -ugcpath ${GAMEFOLDER}/steamapps/workshop1 \ +exec autoexec1.cfg +servercfgfile server1.cfg" #    ${GAMEFOLDER}/srcds_run ${CMDLINE} 

( "-") ( "+"):


-port
. — 27015. , ,


-steamport
VAC (Valve Anti-Cheat). . 26900, 26901


+clientport


+tv_port
SourceTV. , +tv_port -nohltv


-strictportbind
, , "ERROR: Port 27015 was unavailable — quitting due to "-strictportbind" command-line flag!". .


-ip
ip , . - , 0.0.0.0 — . , , ip


-game
. — "tf" — Team Fortress 2.


+maxplayers
. . — 24, 32. Mann vs. Machine 32


-pidfile
PID .


-ugcpath
Steam Workshop. — ~/tf2/steamapps/workshop. , ~/tf2/tf. , workshop , .


+sv_pure
— , ( , , ). -1, 0, 1, 2. sv_pure 0 , , ( , ), , , . pure_server_full.txt, pure_server_minimal.txt pure_server_whitelist_example.txt ~/tf2/tf/cfg/. — sv_pure 2 , srcds_run, , .vpk .


+exec
, autoexec.cfg. .


+servercfgfile
, server.cfg — ,


+map
( ). , autoexec.cfg ( server.cfg !). , . . , autoexec.cfg


Valve Developer Community wiki


~/start2.sh, CMDLINE ( ), .


start2.sh
 #!/bin/sh #   . GAMEFOLDER=/home/game/tf2 CMDLINE="-port 27016 -steamport 26901 +clientport 27006 +tv_port 27021 -strictportbind \ +sv_pure 2 -game tf +maxplayers 24 \ -pidfile ${GAMEFOLDER}/tf/srcds2.pid \ -ugcpath ${GAMEFOLDER}/steamapps/workshop2 \ +exec autoexec2.cfg +servercfgfile server2.cfg" #    ${GAMEFOLDER}/srcds_run ${CMDLINE} 


  $ chmod u+x ~/start{1,2}.sh 

(- game, root !), -. :


  ... *** ~/cfg/autoexec.cfg (global) Writing cfg/banned_user.cfg. Writing cfg/banned_ip.cfg. -------------------------------------------------------- sv_pure set to 2. -------------------------------------------------------- maxplayers set to 24 *** ~/cfg/autoexec1.cfg Server logging enabled. Server logging data to file /home/game/log/server1/L1007000.log ... Executing dedicated server config file server1.cfg Using map cycle file 'cfg/mapcycle1.txt'. Set motd from file 'cfg/motd1.html' Set motd_text from file 'cfg/motd1.txt' Connection to game coordinator established. tf_server_identity_account_id not set; not logging into registered account *** ~/cfg/server1.cfg logaddress_delall: no addresses in the list logaddress_add: 192.0.2.0:27500 'cp_granary.cfg' not present; not executing. Connection to Steam servers successful. ... 

, , . . , L1007000.log, l1007000.log. — Linux ! , — . . — .


, , .


  ... *** ~/cfg/autoexec2.cfg ... [TF Workshop] Waiting for steam connection [TF Workshop] Preparing map ID 454299390 [TF Workshop] Map ID 454299390 isn't tracked, adding ... [TF Workshop] New version available for map, download queued [ workshop/cp_orange_x3.ugc454299390 ] ... [TF Workshop] Installed subscribed map [ workshop/cp_orange_x3.ugc454299390 ] [TF Workshop] Successfully prepared client map from workshop [ workshop/cp_orange_x3.ugc454299390 ] ... 'workshop/cp_orange_x3.ugc454299390.cfg' not present; not executing. ... 

, . Steam Workshop ~/tf2/steamapps/workshop2, ~/tf2/steamapps/workshop2/content/440/454299390/cp_orange_x3.bsp. , "[ workshop/cp_orange_x3.ugc454299390 ]" — , . , autoexec2.cfg


Team Fortress 2, "Find a game" — "Community servers" — "" — "" — ip "192.0.2.0" — " " — . :-). .


, - Valve Web API, ip http://api.steampowered.com/ISteamApps/GetServersAtAddress/v0001?addr=192.0.2.0 — source , Team Fortress 2


(quit, Ctrl+C), .


, srcds_run, , quit , "Sat Jun 18 10:28:33 VOST 2016: Server restart in 10 seconds", Ctrl+C. , — 8 . - .


, , , , .


Valve , , :


,     ,


— , — () . — Valve https://list.valvesoftware.com/cgi-bin/mailman/listinfo/hlds_linux . , "Optional TF2 update released" — . "Mandatory Team Fortress 2 update released" — . . , , — hlds_linux.


.



— :


start1.sh
 CMDLINE="... -autoupdate -steam_dir /home/game/Steam -steamcmd_script /home/game/cfg/tf2_update \ ... 

-autoupdate
.


-steam_dir
steam.sh steamcmd.sh


-steamcmd_script
, "-steam_dir",


, () ./srcds_run +runscript ~/cfg/tf2_update

~/cfg tf2_update — . , .


tf2_update
 @ShutdownOnFailedCommand 0 @NoPromptForPassword 1 login anonymous force_install_dir /home/game/tf2/ app_update 232250 quit 

:


@ShutdownOnFailedCommand
Valve "0" .


@NoPromptForPassword
, "1", Steam , login. , .


login <username> [<password>] [<Steam guard ode>]
Steam. , "ERROR! Failed to request AppInfo update, not online or not logged in to Steam." "anonymous" — . , , . Dedicated Servers List . , , steam guard, , set_steam_guard_code.


set_steam_guard_code <ode>
steam guard. .


force_install_dir
./SteamApps/common/< >. , . app_update.


app_update <appid> [-validate] [-language <lang>] [-beta <betaname>] [-betapassword <pwd>]
( ), . appid. validate — , , . , " ..." Steam, , . , , , , .


app_set_config <appid> <key> <value>
.


Steam , steamcmd.sh . help , find <> .


- Steam , .


:


  ^CMasterRequestRestart Your server will be restarted on map change. Your server will be restarted on map change. Your server needs to be restarted in order to receive the latest update. Your server needs to be restarted in order to receive the latest update. 

:


  L 07/08/2016 - 05:07:17: Your server will be restarted on map change. L 07/08/2016 - 05:07:17: Your server needs to be restarted in order to receive the latest update. 

, ~/cfg/tf2_update , , . .



, , .


. , , . , ( mp_maxrounds, = 0), (mp_winlimit = 0), (mp_fraglimit = 0), (mp_timelimit = 0), , , , . , - , .


.



— cron steamcmd.sh (, "-"), .


, ~/Steam/steamcmd.sh +runscript ~/cfg/tf2_update , steamcmd.sh :


  ... Connecting anonymously to Steam Public...Logged in OK Waiting for license info...OK Success! App '232250' already up to date. 

, :


  ... Update state (0x61) downloading, progress: 99.63 (3616706682 / 3630011517) Update state (0x81) committing, progress: 100.00 (606937472 / 606937472) Success! App '232250' fully installed. 

"fully installed" . . ~/update.sh:


update.sh
 #!/bin/sh ~/Steam/steamcmd.sh +login anonymous +force_install_dir /home/game/tf2/ +app_update 232250 +quit > ~/steamcmd.log if grep --quiet "fully installed" ~/steamcmd.log; then # kill `cat /home/game/tf2/tf/srcds1.pid` # ~/start1.sh & # kill `cat /home/game/tf2/tf/srcds2.pid` # ~/start2.sh & fi rm -f ~/steamcmd.log 

, , steamcmd.sh — "+login anonymous +force_install_dir ~/tf2/ +app_update 232250 +quit", tf2_update — "+runscript ~/cfg/tf2_update"


, . , " ", tmux sudo, , . :


update.sh (v2)
 #!/bin/sh ~/Steam/steamcmd.sh +login anonymous +force_install_dir /home/game/tf2/ +app_update 232250 +quit > ~/steamcmd.log if grep --quiet "fully installed" ~/steamcmd.log; then echo "Update installed" tmux -L socket1 send-keys "say New update installed. Server will be restarted in 10 seconds. Please join us after a minute" Enter tmux -L socket2 send-keys "say New update installed. Server will be restarted in 10 seconds. Please join us after a minute" Enter sleep 10s sudo /usr/bin/systemctl reload srcds1.service sudo /usr/bin/systemctl reload srcds2.service else echo "Update not found" fi rm -f ~/steamcmd.log 

"say", SourceMod .


crontab , :


  $ chmod 744 ~/update.sh $ crontab -e 

:


crontab
 */30 * * * * ~/update.sh 

cron , game ""



, .


Valve Steam Web API . ISteamApps/UpToDateCheck, , Team Fortress 2 — http://api.steampowered.com/ISteamApps/UpToDateCheck/v1?appid=440&version=3528598 , version ( - ). appid = 232250 (, , ), "Couldn't get app info for the app specified.". ああ。


, , Team Fortress 2 dedicated server — https://api.steampowered.com/IGCVersion_440/GetServerVersion/v1?format=json . - :


  { "result": { "success": true, "deploy_version": 3531256, "active_version": 3531256, "min_allowed_version": 3528598 } } 

— json, xml, vdf. — Valve Data Format , Valve, json . — items_game.txt, , .acf, .vdf .


, deploy_version active_version Valve , , . , , api.


version , ~/tf2/tf/steam.inf


, , Web API, , . - :


update.sh (v3)
 #!/bin/sh wget -q --no-check-certificate "https://api.steampowered.com/IGCVersion_440/GetServerVersion/v1?format=json" -O=~/GameVersion.json VERSION_DEPLOYED=`grep deploy_version ~/GameVersion.json | sed -s 's/[^[:digit:]]//g'` VERSION_INSTALLED=`grep ServerVersion ~/tf2/tf/steam.inf | sed -s 's/[^[:digit:]]//g'` if [[ $VERSION_DEPLOYED -gt $VERSION_INSTALLED ]]; then echo "New update is ready, $VERSION_DEPLOYED vs $VERSION_INSTALLED" # -  fi 

, crontab.


, . , Steam Web API, ~/tf2/steamapps/appmanifest_232250.acf, "buildid". — steamcmd.sh +login anonymous +app_info_update 1 +app_info_print 232250 +quit , "buildid" depots -> branches -> public ( app_info_print , , app_info_update 1. rm -f ~/Steam/appcache/appinfo.vdf). grep, cut, tr , , json ( sed + tr) .


" ".



Source: https://habr.com/ru/post/J312922/


All Articles