Linux Adanmış Sunucu Barındırma

Bu makale, Linux üzerinde bir Garry's Mod sunucusu barındırma hakkında mümkün olduğunca çok konuyu ele alacaktır.

Bu makale Debian ve türevleri (Ubuntu, ChromiumOS, Mint...) için yazılmıştır, bu nedenle diğer dağıtımlarda bazı dönüşümler yapmanız gerekebilir

Dahili birçok araca sahip, birden fazla sunucu için kolay destek sunan vb. daha otomatik bir çözüm istiyorsanız, bunun yerine https://linuxgsm.com/lgsm/gmodserver/ kullanın.

Gereksinimler

Başlamadan önce aşağıdaki gereksinimleri karşıladığınızdan emin olun:

  • Sunucuyu çalıştıracak bir kullanıcı ('steam' önerilir, ev dizini /home/steam)
  • Yüklemek istediğiniz içerik için yeterli disk alanı
  • 'steam' kullanıcısı olarak çalışan açık bir komut satırı terminali (su - steam) veya steam kullanıcısı olarak oturum açılmış bir SSH oturumu.
  • Temel Linux komut satırı kullanımı konusunda deneyim.

SteamCMD Kurulumu

SteamCMD, Garry's Mod sunucu dosyalarını indirmek ve güncellemek için gereklidir. SteamCMD'nin nasıl kurulacağına dair öneriler için Valve Geliştirici Wiki'sini takip edin.

64-bit Sistemler

Eğer "*/linux32/steamcmd: No such file or directory" hatası alırsanız, bu büyük olasılıkla gerekli 32-bit kütüphanelere sahip olmadığınız içindir. Bunu nasıl düzelteceğiniz hakkında daha fazla bilgi için buraya gidin: https://developer.valvesoftware.com/wiki/SteamCMD#32-bit_libraries_on_64-bit_Linux_systems

Garry's Mod Kurulumu

Aşağıdaki betik, tek bir komutla sizin için Garry's Mod'un en son sürümünü indirecektir.

İlk olarak, update_gmod.sh adında bir güncelleme betiği oluşturalım.

# !/bin/bash # Bize biraz işten tasarruf ettirecek kullanışlı bir fonksiyon update_server() { # Uygulama kimliğini ve dizini bir değişkene oku APP_ID=$1 DIR=$2 # Dizini oluştur ( eğer zaten mevcut değilse ) if [ ! -d "$HOME/$DIR" ]; then mkdir -p "$HOME/$DIR" fi # Eyvah, hala bir dizinimiz yok gibi görünüyor. Bir hata bildir. if [ ! -d "$HOME/$DIR" ]; then # Neyin yanlış gittiğini açıkla echo "HATA! $HOME/$DIR dizini oluşturulamıyor!" # 1 durum koduyla çık ( bu bir hata belirtir ) exit 1 fi # Sağladığımız uygulama kimliği ile SteamCMD'yi çağır ve kurmasını söyle steamcmd +force_install_dir "$HOME/$DIR" +login anonymous +app_update $APP_ID validate +quit } # Şimdi betik, az önce yukarıda tanımladığımız update_server'ı, uygulamanın kimliği ( 4020 Garry's Mod'dur ) ve sunucunun barındırılmasını istediğimiz dizin adı ile çalıştırır: update_server 4020 "server_1" # Yukarıdaki işlemi farklı bir dizin adı kullanarak tekrarlayarak buraya ek sunucular ekleyin. # 0 durum koduyla çık ( bu TAMAM anlamına gelir ) exit 0

Bu dosyayı çalıştırabilmeden önce, ona 'yürütme' hakları vermemiz gerekiyor. Bu, aşağıdaki komutla yapılır:

chmod +x ./update_gmod.sh

Doğru bir şekilde çalıştırabilmek için, dosyayı dos formatından unix formatına dönüştürmemiz gerekiyor:

dos2unix ./update_gmod.sh

Eğer steamcmd'yi depodan kurduysanız, betiğin güncellenmesi gerekir:

nano update_gmod.sh

25. satırın başlangıcını değiştirin:

./bin/steamcmd.sh -> /usr/games/steamcmd

25. satır şimdi şu şekilde görünmelidir:

/usr/games/steamcmd +force_install_dir "$HOME/$DIR" +login anonymous +app_update $APP_ID validate +quit

Kaydetmek için ctrl+O'ya, ardından nano'dan çıkmak için ctrl+X'e basın.

Şimdi, sunucuyu güncelleyelim

./update_gmod.sh

Sunucu şimdi gerekli içeriği indirecektir. Steam, indirme işlemindeki ilerleme yüzdesini size gösterecektir.

Eğer /home/steam/update_gmod.sh: line 25: ./bin/steamcmd.sh: No such file or directory gibi bir hata alırsanız, ./update_gmod.sh dosyasını bir düzenleyicide açın ve "# Call SteamCMD with the app ID we provided and tell it to install" altındaki satırı şu şekilde değiştirin:

steamcmd +login anonymous +force_install_dir "$HOME/$DIR" +app_update $APP_ID validate +quit

İçerik Ekleme

Elbette, Team Fortress 2, Counter-Strike: Source ve diğer desteklenen oyunlardaki şeyleri kullanabilmek istiyoruz. Yukarıdaki betiği kullanarak bu basit bir işlemdir.

Ancak, indirme süresinden tasarruf etmek istediğimiz için, tüm bu içeriği ayrı bir klasöre koyacağız, böylece 5 sunucumuz varsa, bir içerik güncellemesi yayınlandığında içeriği yalnızca bir kez güncellememiz gerekir.

Şimdi yukarıda bahsedilen betiği değiştireceğiz. "Add any additional servers here" yazan yere aşağıdaki satırı ekleyin. Buraya Team Fortress 2'yi ekliyoruz.

update_server 232250 "content/tf2"

Şimdi, update_gmod.sh'yi çalıştırdığımızda, betik Garry's Mod'u doğrulayacak (ve gerekirse güncelleyecek) (çünkü onu yukarıdaki adımda indirmiştik) ve ardından Team Fortress 2'yi ~/content/tf2 dizinine kuracaktır.

Sunucular için ID listesi için Valve Geliştirici Topluluğu sayfasına göz atabilirsiniz. Unutmayın, teorik olarak ID'sini kullanarak herhangi bir oyunu buraya indirebilirsiniz, ancak bu adanmış sunucularla steam hesabınızı kullanarak giriş yapmanız gerekmez.

Sunucuyu Başlatma

Sunucuyu başlatmak için, her sunucunun kök dizininde bulunan srcds_run adlı dosyayı çalıştırırız. Aşağıdaki komut, sunucuyu gm_flatgrass haritasında 12 oyuncu yuvasıyla başlatır.

~/server_1/srcds_run -game garrysmod +maxplayers 12 +map gm_flatgrass +sv_setsteamaccount <tokeniniz>

Betik (srcds_run), sunucu çökerse onu hayatta tutacaktır, ancak linux'u yeniden başlattığınızda yeniden başlamaz ve terminali kapatırsanız sunucu da kapanır. Bunu bu makalenin ilerleyen kısımlarında düzelteceğiz.

sv_setsteamaccount ile ilgili yardım için lütfen Steam Oyun Sunucusu Hesapları sayfasına bakın. Bu zorunludur.

İsteğe bağlı olarak, atölye eklentilerini adanmış sunucunuza otomatik olarak yüklemek için komut satırınıza +host_workshop_collection <koleksiyonIDsi> ekleyebilirsiniz. Adanmış sunucular için atölye yardımı için lütfen Adanmış Sunucular için Atölye sayfasına bakın.

Sunucuyu Güncelleme

Sunucuyu veya içeriği güncellemek için, sadece indirme betiğimizi çağırırız. Sunucularınızın kapalı olduğundan emin olmalısınız, aksi takdirde güncelleme başarısız olur.

Betiklerimizi sadece bunu çağırarak güncelleyin (ev dizininden)

./update_gmod.sh

Yeniden Başlatmanın Ardından Sunucuyu Hayatta Tutma

Sunucuyu hayatta tutmak için crontab kullanırız. crontab'a, sunucu yüklendiğinde srcds_run'ı çağıracak bir girdi ekleriz.

crontab'ı açın

crontab -e

Şimdi, sona aşağıdaki satırı ekleyin

@reboot /home/steam/server_1/srcds_run -game garrysmod +maxplayers 12 +map gm_flatgrass

Şimdi dosyayı kaydedin. Genellikle crontab nano'da açılır, bu yüzden komutlar yine ctrl+o, enter, ctrl+x olacaktır.

Şimdi, linux sunucusunu yeniden başlattıktan sonra, Garry's Mod Sunucusu otomatik olarak başlayacaktır.

Ek Notlar

Elbette, sunucunuzu hayatta tutmanın daha iyi yolları vardır, ancak bunlar kısa sürede oldukça karmaşık hale gelebilir, bu yüzden burada tartışılmamaktadır. Daha fazlasını öğrenmek isterseniz, Google'da araştırın veya Facepunch'ta sorun.

Sorun Giderme

32-bit İkili Dosyaları

Eğer 64-bit bir Linux sürümü kullanıyorsanız, 32-bit ikili dosyalara ihtiyacınız vardır, çünkü SteamCMD yalnızca 32-bit olarak mevcuttur.

Eğer şu hata mesajını alırsanız

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

o zaman büyük ihtimalle 64-bit bir sistem çalıştırıyorsunuz ve 32-bit kütüphaneleriniz eksik demektir.

Bunu yapmak için ia32-libs kurmanız gerekir. Bunu yapmak için aşağıdaki kod parçasını çalıştırın:

dpkg --add-architecture i386 apt-get update apt-get install ia32-libs or apt-get install lib32ncurses5 lib32z1

Paket büyüktür (~200MB nadir değildir) ve birçok bağımlılığı vardır, bu yüzden biraz zaman alabilir.

Diğer linux dağıtımları için Valve wiki makalesine bakın

'GLIBC_2.15' bulunamadı

Eğer şu hata mesajını alırsanız

Failed to open dedicated_srv.so (/lib/i386-linux-gnu/libm.so.6: version `GLIBC_2.15' not found (required by bin/dedicated_srv.so))

Büyük olasılıkla güncel olmayan GLIBC kütüphaneleriniz var ve bunları güncellemeniz gerekecek.

Bu, Valve'in araçları oluşturmak için kullandığından farklı bir dağıtım (veya dağıtım sürümü) kullanmayı seçtiğiniz için meydana geldi. Bu araçlar, o Linux dağıtımından bileşenler beklemektedir. (Yukarıdaki nota bakın!)

Ubuntu 12.04 32-bit veya daha yenisine güncelleme yapmadan bu sorunu çözmek için aşağıdaki kod parçasını çalıştırın:

wget http://security.ubuntu.com/ubuntu/pool/main/e/eglibc/libc6_2.15-0ubuntu10.11_i386.deb dpkg -x libc6_2.15-0ubuntu10.11_i386.deb tmp/ cd tmp/lib/i386-linux-gnu/ cp * /garrysmod-dizininiz/bin/

CentOS için önce EPEL Repo'sunu ve dpkg'yi kurmanız gerekir:

yum install dpkg

Alternatif olarak şunlara geçebilirsiniz:

  • Ubuntu Server 12.04+
  • CentOS 7 Bu dağıtımların çalıştığı onaylanmıştır ve en çok desteklenenlerdir.

Çalışmayan Eklentiler

Sunucunuzu kurup çalıştırırken belirli eklentilerin çalışmadığı bazı sorunlar fark edebilirsiniz. Bu sorun, büyük harf içeren klasörlere sahip eski eklentileri etkiliyor gibi görünüyor. Bu sorunu çözmek için tüm dizinleri küçük harfli adlara ve bu dizinlere işaret eden tüm Lua kodlarını buna göre değiştirmek gerekebilir.

UYARI: 32-bit libtinfo.so.5 veya libncurses.so.5 yüklenemedi.

Eğer şu hata mesajını alırsanız

WARNING: Failed to load 32-bit libtinfo.so.5 or libncurses.so.5. Please install (lib32tinfo5 / ncurses-libs.i686 / equivalent) to enable readline.

O zaman büyük olasılıkla bir lib32tinfo5 eşdeğeri kurulu değildir, bunu kurma yöntemi dağıtımlar arasında farklılık gösterir.

Arch Linux

  1. multilib-devel paket grubunu kurun. Ne kurulacağı sorulduğunda, varsayılan olarak sağlanan all değerini kullanın. Bu, bir sonraki adım için listelenmemiş bir derleme bağımlılığıdır.
  2. lib32-ncurses5-compat-libs AUR paketini kurun
    Bu adımlardan sonra sunucu konsolunda ok tuşlarını kullanmak çalışmalıdır

Tüm sunucular · GmodTR Launcher · Rehber · GMod Wiki · GmodTR nedir? · Sunucu ekle · Discord