aslain.dev
0%
01 Hizmetler 02 Hakkımda 03 Projeler 04 Stack 05 Blog 06 İletişim
← Tüm makaleler Metin2

Metin2 Linux Server: Ubuntu'da Çalıştırma Rehberi

Bir Metin2 Linux server kurmak, ilk bakışta basit bir "dosyaları kopyala, çalıştır" işi gibi görünür; oysa Metin2'nin sunucu tarafı baştan beri FreeBSD için yazıldığından, Linux'a geçiş düşünüldüğünden çok daha fazla planlama ister. Bu rehberde FreeBSD yerine Ubuntu (ya da Debian) üzerinde sunucu çalıştırmanın gerçekçi yollarını, uyumluluk sınırlarını ve adım adım kurulum mantığını anlatıyorum.

Neden Metin2 server'ı Linux'a taşımak isteriz?

FreeBSD kararlı ve hızlıdır, ama çoğu kişinin günlük olarak yönettiği sunucular Linux'tur. Hosting sağlayıcılarının büyük kısmı varsayılan olarak Ubuntu/Debian sunar; Docker, systemd, modern izleme araçları ve ekibinizin alışkanlıkları hep Linux dünyasında yaşar. Dolayısıyla "neden Linux?" sorusunun cevabı genelde teknik üstünlük değil, operasyonel rahatlıktır: aynı makinede web sitesi, MySQL, yedekleme ve oyun sürecini tanıdık araçlarla yönetmek istersiniz.

En kritik gerçek: FreeBSD binary'leri Linux'ta çalışmaz

Başlamadan önce en sık yapılan hatayı netleştirelim. FreeBSD üzerinde derlenmiş game ve db ikili dosyalarını alıp Linux'a kopyalayıp çalıştıramazsınız. İki sistemin syscall (sistem çağrısı) arayüzü ve ABI'si farklıdır. İlginç olan şu: FreeBSD, Linuxulator katmanı sayesinde Linux binary'lerini çalıştırabilir — ama tersi mümkün değildir, Linux'un FreeBSD binary'lerini çalıştıran bir uyumluluk katmanı yoktur. Bu yüzden Linux'ta sunucu çalıştırmanın tek doğru yolu, kaynak kodu Linux için yeniden derlemektir.

Yol 1: Kaynağı Linux için derlemek (önerilen)

En temiz çözüm budur. Metin2 kaynağı FreeBSD'nin kqueue tabanlı ağ modeline ve bazı BSD'ye özgü başlıklara bağımlıdır; Linux'ta bunların karşılığını koymanız gerekir. Topluluk içinde Linux'a uyarlanmış birçok source mevcuttur ve bunlar genelde şu farkları içerir:

  • kqueue → epoll: ağ olay döngüsü Linux'un epoll API'siyle yeniden yazılır. Çoğu modern source bunu zaten soyutlar.
  • Başlık farkları: <sys/event.h> gibi BSD başlıkları yerine Linux eşdeğerleri; eksik #include'lar eklenir.
  • 32-bit derleme: klasik source 32-bit'tir, bu yüzden Linux'ta gcc-multilib ve 32-bit kütüphaneler şarttır.

Ubuntu 22.04 LTS üzerinde tipik bağımlılık kurulumu şöyledir:

sudo apt update
sudo apt install build-essential gcc-multilib g++-multilib \
  libc6-dev-i386 cmake scons \
  libmysqlclient-dev libboost-all-dev liblzo2-dev

Crypto++ (cryptopp) genelde source ile birlikte gelir; sistemdeki sürümle çakışmaması için kaynaktakini kullanmak en güvenlisidir. Derleme sırası FreeBSD'dekiyle aynı mantıkta ilerler: önce kütüphaneler, sonra çalıştırılabilir süreçler.

libthecore  ->  temel sistem soyutlamaları
libpoly     ->  geometri / çarpışma
libsql      ->  veritabanı katmanı (MySQL)
libgame     ->  oyun mantığı ortak kodu
db          ->  veritabanı süreci
game        ->  oyun süreci

32-bit derlerken her adımda -m32 bayrağının geçtiğinden emin olun; aksi halde 64-bit ve 32-bit nesneleri bağlamaya çalışınca "incompatible" linker hataları alırsınız.

Yol 2: FreeBSD'yi sanal makinede çalıştırmak

Kaynağı derlemekle uğraşmak istemiyor ve elinizdeki dosyalar zaten FreeBSD için derlenmişse, en pragmatik çözüm Linux ana makinesi üzerinde bir FreeBSD sanal makinesi koşmaktır. Proxmox, KVM/QEMU ya da VirtualBox ile FreeBSD misafir (guest) kurar, sunucuyu orada çalıştırır, Linux tarafını yalnızca web sitesi, reverse proxy ve yedekleme için kullanırsınız. Bu yaklaşım "Linux'ta çalıştırma" hedefini tam karşılamaz ama orijinal binary'leri hiç değiştirmeden, tanıdık bir Linux altyapısının içinde tutmanızı sağlar.

Yol 3: Docker ile paketlemek

Docker konteynerleri Linux çekirdeğini paylaşır, yani Docker içinde de FreeBSD binary'si çalıştıramazsınız. Ancak Linux için derlenmiş bir sunucuyu Docker imajına koymak çok mantıklıdır: 32-bit kütüphaneleri imaja sabitler, MySQL'i ayrı bir konteynerde tutar ve tüm kurulumu tekrarlanabilir hale getirirsiniz. Basit bir Dockerfile iskeleti şöyle başlar:

FROM ubuntu:22.04
RUN dpkg --add-architecture i386 && apt-get update && \
    apt-get install -y libc6:i386 libstdc++6:i386 \
      libmysqlclient21 && rm -rf /var/lib/apt/lists/*
COPY ./server /server
WORKDIR /server
CMD ["./game"]

dpkg --add-architecture i386 satırı kritiktir: 32-bit ikili dosyaların çalışması için 32-bit çalışma zamanı kütüphaneleri gerekir.

Veritabanı ve yapılandırma

Hangi yolu seçerseniz seçin, veritabanı katmanı aynıdır. Metin2 MySQL kullanır; Linux'ta MariaDB de uyumlu bir alternatiftir. player, account, common ve log şemalarını yükleyin, ardından CONFIG dosyalarındaki port, IP ve veritabanı bağlantı bilgilerini düzenleyin. İlk açılışta mutlaka şunları izleyin:

tail -f syserr        # çalışma anı hataları
tail -f syslog        # genel akış

Çoğu "Linux'ta açılmıyor" şikayeti aslında yanlış kütüphane yolu, eksik 32-bit paket ya da MySQL'e bağlanamama kaynaklıdır — ldd game komutuyla eksik paylaşımlı kütüphaneleri, mysql_config --include ile doğru başlık yolunu hızlıca doğrulayabilirsiniz.

systemd ile otomatik başlatma

Linux'a geçmenin en somut kazanımlarından biri systemd'dir. Sunucu sürecini bir servis dosyasına bağlayarak, makine yeniden başladığında otomatik açılmasını ve süreç çöktüğünde kendiliğinden yeniden kalkmasını sağlayabilirsiniz. Basit bir birim (unit) dosyası şöyle görünür:

[Unit]
Description=Metin2 game core
After=network.target mysql.service

[Service]
Type=simple
User=metin2
WorkingDirectory=/home/metin2/server
ExecStart=/home/metin2/server/game
Restart=on-failure

[Install]
WantedBy=multi-user.target

Dosyayı /etc/systemd/system/metin2-game.service olarak kaydedip systemctl enable --now metin2-game ile etkinleştirir, journalctl -u metin2-game -f ile loglarını canlı izlersiniz. Bu yaklaşım, FreeBSD'nin rc.d betiklerine göre çoğu yöneticiye daha tanıdık gelir ve oyun çekirdeğinin sürekli ayakta kalmasını garanti eder.

Sık Sorulan Sorular

FreeBSD dosyalarımı Linux'a kopyalayıp çalıştırabilir miyim?

Hayır. FreeBSD'de derlenmiş game/db ikili dosyaları Linux çekirdeğinde çalışmaz; ABI ve sistem çağrıları farklıdır. Linux'ta çalıştırmak için kaynağı Linux için yeniden derlemeniz ya da FreeBSD'yi sanal makinede koşmanız gerekir.

Linux'ta 32-bit mi 64-bit mi derlemeliyim?

Klasik Metin2 source'ları 32-bit'tir, bu yüzden çoğu kurulumda gcc-multilib ile 32-bit derlemek en az sorun çıkaranıdır. 64-bit'e tam uyarlanmış bir source'unuz varsa onu kullanabilirsiniz, ancak pointer boyutu farkından doğan hatalara hazırlıklı olun.

Hangi Ubuntu sürümünü kullanmalıyım?

Uzun destekli bir LTS sürümü (örneğin 22.04) en güvenli seçimdir: kararlı paket depoları, güncel güvenlik yamaları ve geniş topluluk desteği sunar. Çok eski sürümlerde 32-bit paketleri bulmak zorlaşır.

Metin2 sunucunuzu FreeBSD'den Linux'a taşımak mı istiyorsunuz? Kaynağı Linux için derleme, 32-bit bağımlılıkların çözülmesi veya Docker'a paketleme konusunda takıldıysanız benimle iletişime geçin — kurulumunuzu birlikte sağlam bir temele oturtalım.

Bu kategorideki tüm yazılar →

Devamı için