Como Configurar Servidor de MU Online no Linux com Wine/Mono
Guia técnico completo para rodar um servidor MuServer Season 6 no Linux usando Wine, com configuração de SQL Server via FreeTDS e ajustes de rede.
Por que Rodar MuServer no Linux?
Servidores Linux oferecem vantagens reais em ambientes de produção: menor custo de licenciamento, melhor estabilidade em uptime longo, acesso facilitado a ferramentas de monitoramento como htop, netstat e journald. O desafio é que o MuServer é um binário nativo Win32 — todo o ecossistema foi construído para Windows. Este guia cobre a abordagem mais viável: Wine para os executáveis do servidor + SQL Server para Linux (ou instância remota) para o banco de dados.
Pré-Requisitos
- VPS ou servidor dedicado com Ubuntu 22.04 LTS / Debian 12
- Mínimo: 4 vCPUs, 8 GB RAM, 40 GB de disco
- Acesso root ou sudo
- Arquivos do MuServer Season 6 já obtidos e descompactados
- Instância SQL Server (remota em Windows ou SQL Server 2019 para Linux)
Parte 1 — Instalação do Wine
Passo 1: Habilitar repositório do Wine
sudo dpkg --add-architecture i386
sudo mkdir -pm755 /etc/apt/keyrings
sudo wget -O /etc/apt/keyrings/winehq-archive.key \
https://dl.winehq.org/wine-builds/winehq.key
sudo wget -NP /etc/apt/sources.list.d/ \
https://dl.winehq.org/wine-builds/ubuntu/dists/jammy/winehq-jammy.sources
sudo apt update
Passo 2: Instalar Wine estável e Winetricks
sudo apt install --install-recommends winehq-stable
sudo apt install cabextract # necessário para winetricks
wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
chmod +x winetricks && sudo mv winetricks /usr/local/bin/
Passo 3: Criar prefixo Wine de 32 bits para o MuServer
O MuServer Season 6 é um binário Win32 puro. Um prefixo dedicado isola suas DLLs.
export WINEPREFIX=/opt/muserver/wine32
export WINEARCH=win32
wine wineboot --init
Passo 4: Instalar dependências de runtime via Winetricks
WINEPREFIX=/opt/muserver/wine32 WINEARCH=win32 winetricks vcrun2005
WINEPREFIX=/opt/muserver/wine32 WINEARCH=win32 winetricks vcrun2008
WINEPREFIX=/opt/muserver/wine32 WINEARCH=win32 winetricks vcrun2010
WINEPREFIX=/opt/muserver/wine32 WINEARCH=win32 winetricks dotnet20
winetricks dotnet20 falhar com erro de download, use winetricks --force dotnet20 ou copie manualmente o dotnetfx20.exe da Microsoft para ~/.cache/winetricks/dotnet20/.Parte 2 — Configurar o SQL Server
Opção A: SQL Server 2019 para Linux (na mesma máquina)
# Importar chave e repositório Microsoft
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc \
| sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
curl https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2019.list \
| sudo tee /etc/apt/sources.list.d/mssql-server-2019.list
sudo apt update
sudo apt install mssql-server
# Configuração inicial (definir SA password e edição Express)
sudo /opt/mssql/bin/mssql-conf setup
Opção B: Instância SQL Server remota em Windows
Neste caso, apenas configure o FreeTDS apontando para o IP do Windows Server:
# /etc/freetds/freetds.conf
[MUSERVER_DB]
host = 192.168.1.100
port = 1433
tds version = 7.4
database = MuOnline
Passo 5: Criar o banco de dados MuOnline
Conecte ao SQL Server com sqlcmd e execute:
-- Criar banco e usuário dedicado
CREATE DATABASE MuOnline
COLLATE Latin1_General_CI_AS;
GO
USE MuOnline;
GO
CREATE LOGIN muserver_user WITH PASSWORD = 'SuaSenhaForte123!',
CHECK_POLICY = OFF;
GO
CREATE USER muserver_user FOR LOGIN muserver_user;
GO
EXEC sp_addrolemember 'db_owner', 'muserver_user';
GO
sa diretamente nos arquivos de configuração do MuServer em produção. Crie um login dedicado com privilégios apenas no banco MuOnline.Em seguida, restaure o dump do banco (arquivo .bak ou scripts .sql que acompanham o MuServer):
sqlcmd -S localhost -U sa -P 'SuaSenhaAdmin' \
-Q "RESTORE DATABASE MuOnline FROM DISK='/opt/muserver/backup/MuOnline.bak'"
Parte 3 — Estrutura de Arquivos e Configuração
Passo 6: Copiar os arquivos do servidor
# Estrutura esperada após cópia
/opt/muserver/
├── ConnectServer/
│ ├── ConnectServer.exe
│ └── Config/
│ └── ConnectServer.ini
├── DataServer/
│ ├── DataServer.exe
│ └── DataServer.ini
├── GameServer/
│ ├── GameServer.exe
│ ├── Config/
│ │ ├── GameServerInfo.ini
│ │ └── GatePort.ini
│ └── Data/
│ ├── Events/
│ └── Maps/
└── EventServer/
└── EventServer.exe
# Permissões corretas
chmod -R 755 /opt/muserver/
chmod -R 644 /opt/muserver/GameServer/Data/
Passo 7: Editar as strings de conexão de banco
Cada componente tem seu próprio arquivo de configuração de banco. Edite todos:
# GameServer/Config/GameServerInfo.ini
[DB_CONNECT]
DBHost=127.0.0.1
DBPort=1433
DBName=MuOnline
DBUser=muserver_user
DBPass=SuaSenhaForte123!
# DataServer/DataServer.ini
[DATABASE]
ServerAddress=127.0.0.1
DatabasePort=1433
DatabaseName=MuOnline
DatabaseUID=muserver_user
DatabasePWD=SuaSenhaForte123!
Passo 8: Configurar portas no ConnectServer
# ConnectServer/Config/ConnectServer.ini
[CONNECT_SERVER]
ClientPort=44405
ServerPort=55901
MaxClientCount=10000
sudo ufw allow 44405/tcp && sudo ufw allow 55901/tcp.Parte 4 — Scripts de Inicialização
Passo 9: Criar scripts de start/stop
# /opt/muserver/start_all.sh
#!/bin/bash
export WINEPREFIX=/opt/muserver/wine32
export WINEARCH=win32
export DISPLAY=:0
LOG_DIR="/opt/muserver/logs"
mkdir -p "$LOG_DIR"
echo "[$(date)] Iniciando DataServer..."
cd /opt/muserver/DataServer
wine DataServer.exe >> "$LOG_DIR/dataserver.log" 2>&1 &
sleep 5
echo "[$(date)] Iniciando ConnectServer..."
cd /opt/muserver/ConnectServer
wine ConnectServer.exe >> "$LOG_DIR/connectserver.log" 2>&1 &
sleep 3
echo "[$(date)] Iniciando GameServer..."
cd /opt/muserver/GameServer
wine GameServer.exe >> "$LOG_DIR/gameserver.log" 2>&1 &
echo "[$(date)] Todos os componentes iniciados."
chmod +x /opt/muserver/start_all.sh
sudo apt install xvfb e inicie com Xvfb :0 -screen 0 1024x768x16 & antes de rodar os servidores Wine.Passo 10: Criar serviço systemd
# /etc/systemd/system/muserver.service
[Unit]
Description=MU Online Private Server
After=network.target mssql-server.service
[Service]
Type=forking
User=muserver
WorkingDirectory=/opt/muserver
ExecStart=/opt/muserver/start_all.sh
ExecStop=/usr/bin/pkill -f "wine.*Server.exe"
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable muserver
sudo systemctl start muserver
Parte 5 — Verificação e Troubleshooting
Verificar logs em tempo real
tail -f /opt/muserver/logs/gameserver.log
tail -f /opt/muserver/logs/connectserver.log
Verificar conexões de rede ativas
ss -tlnp | grep -E '44405|55901|55906'
Verificar conectividade com o banco
sqlcmd -S 127.0.0.1 -U muserver_user -P 'SuaSenhaForte123!' \
-Q "SELECT TOP 1 Name FROM MuOnline..Character"
Erro comum: "err:module: load_builtin_dll failed"
Este erro indica DLL ausente no prefixo. Identifique qual DLL falta no log e instale:
WINEPREFIX=/opt/muserver/wine32 winetricks <nome_do_pacote>
# Exemplos: vcrun2012, vcrun2015, d3dx9, directx9
WINE_CPU_TOPOLOGY=4:1 às variáveis de ambiente do serviço para limitar afinidade de CPU.Ajuste de Performance no SQL Server para Linux
Após o servidor estar rodando, otimize as queries mais pesadas que o MuServer executa com frequência:
-- Índice na tabela de personagens (reduz tempo de login)
USE MuOnline;
GO
CREATE NONCLUSTERED INDEX IX_Character_AccountID
ON dbo.Character (AccountID)
INCLUDE (Name, cLevel, MapNumber);
GO
-- Índice na tabela de itens do armazém
CREATE NONCLUSTERED INDEX IX_Warehouse_AccountID
ON dbo.Warehouse (AccountID);
GO
Com este setup, seu servidor MU Online Season 6 estará rodando de forma estável no Linux, aproveitando os recursos do sistema operacional para uptime prolongado e monitoramento avançado.
Perguntas frequentes
O Wine suporta todas as versões do MuServer?
As versões mais testadas e estáveis são as baseadas em Season 6 (MuServer S6EP3). Versões mais antigas (S1-S3) tendem a funcionar melhor por serem menos dependentes de bibliotecas modernas do Windows. Servidores S12+ usam componentes .NET pesados que exigem Mono ou Wine com prefixos específicos de 64 bits.
Como conecto o MuServer ao SQL Server rodando em outro host?
No arquivo ConnectServer/Config/ConnectServer.ini e nos arquivos DBServer.ini de cada componente, defina o campo DBHost com o IP ou hostname do SQL Server. Use o driver FreeTDS configurado em /etc/freetds/freetds.conf apontando para a instância correta, e certifique-se de que a porta 1433 está liberada no firewall do host SQL.
O GameServer trava ao carregar mapas. O que verificar?
Confirme que os arquivos de mapa em GameServer/Data/Maps/ têm permissão de leitura (chmod 644). Verifique o log em GameServer/Logs/GameServer.log para erros de acesso a arquivo. Um erro comum é a falta das DLLs MSVCP100.dll e MSVCR100.dll no prefixo Wine — instale com: winetricks vcrun2010.
Posso usar MariaDB no lugar do SQL Server?
Tecnicamente sim, usando um wrapper ODBC, mas o MuServer foi desenvolvido para T-SQL e usa procedures e sintaxes específicas do SQL Server. A abordagem mais estável é rodar o SQL Server 2012/2014 Express em uma VM Windows separada ou usar o SQL Server para Linux (disponível a partir do SQL Server 2017).