Building MTASA Server on GNU Linux: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
mNo edit summary
 
(58 intermediate revisions by 18 users not shown)
Line 1: Line 1:
== '''Building on GNU/Linux''' ==
{{Needs Checking|Confirm steps work.}}


== Preparing your system ==
== Installing and Running MTASA server on Linux ==
{{Note|This article is only for developers who changed the server code. If you are looking for the precompiled server (for normal server owners). Go to: [http://linux.mtasa.com/ linux.mtasa.com] and see [[Installing and Running MTASA Server on GNU_Linux]]}}
 
<!--
== Compiling on a 64 bit Linux ==
Additional steps for compiling a MTA server on 64 bit Linux:
===Install 32 bit libs for your 64 bit distro===
For 64 bit Debian, this is achieved with:
 
apt-get install ia32-libs
 
===64 bit Troubleshooting===
* If you get a problem with such as "libreadline.so.5: cannot open shared object file: No such file or directory.", it can be solved on 64 bit Debian Squeeze  by doing this:
 
apt-get install lib32readline5
 
* If you get a problem with such as "libncursesw.so.5 cannot open shared object file: No such file or directory", it can be solved on 64 bit Debian Squeeze by doing this:
 
apt-get install lib32ncursesw5


In order to build the Multi Theft Auto dedicated server, you will have to set up your system with the correct libraries and tools. How these are installed depends on your distribution.
* Further 64 bit solutions can be found [http://forum.mtasa.com/viewtopic.php?f=106&t=35328#p367282 on the forums]


Our network module (net.dll or net.so) is distributed as a precompiled binary library. The file for GNU/Linux can be found inside the lastest Linux nightly from [http://nightly.mtasa.com/ here]. Use the net.so from 1.1 if you are compiling from the trunk, or the net.so from 1.0.x if you are compiling the 1.0.x branch. Be sure the read the top of ''MTA10_Server/version.h'' as it contains directions on how to compile the different build types.
* If you are using Cent OS and you get something like /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by xmll.so) this can be resolved by doing downloading the archive [[http://archives.fedoraproject.org/pub/archive/fedora/linux/releases/9/Fedora/i386/os/Packages/libstdc++-4.3.0-8.i386.rpm here]] and unpacking it with the following command:


rpm2cpio libstdc++-4.3.0-8.i386.rpm | cpio -i --make-directories
-->
== Preparing your system ==


In order to build the Multi Theft Auto dedicated server, you will have to set up your system with the correct libraries and tools. How these are installed depends on your distribution.


'''Debian Linux'''
Our network module (net.dll or net.so) is distributed as a precompiled binary library. The file for GNU/Linux can be found inside the lastest Linux nightly from [http://nightly.mtasa.com/ here]. Use the net.so from {{Current Version|master}} if you are compiling from the trunk, or the net.so from {{Current Version|full}} if you are compiling the {{Current Version|full}} branch. Be sure the read the top of ''Server/version.h'' as it contains directions on how to compile the different build types.


=== Debian Linux ===


Includes derivative distributions such as Ubuntu.
Includes derivative distributions such as Ubuntu.
Line 19: Line 42:
* '''automake:''' contains the automake tools
* '''automake:''' contains the automake tools
* '''libtool:''' contains the libtool software required to build libraries
* '''libtool:''' contains the libtool software required to build libraries
<!--
* '''libcurl3-dev:''' contains the cURL library (version 3 without SSL support)
* '''libcurl3-dev:''' contains the cURL library (version 3 without SSL support)
* '''libpcre3-dev:''' contains the PCRE library (version 3)
* '''libpcre3-dev:''' contains the PCRE library (version 3)
* '''libsqlite3-dev:''' contains the SQLite library (version 3)
* '''libsqlite3-dev:''' contains the SQLite library (version 3)
* '''libreadline5-dev:''' contains the readline library (version 5)
-->
* '''subversion:''' contains the SVN client used to check out our code repository
* '''libreadline-gplv2-dev:''' contains the readline library (version 5)
* '''libncurses5-dev:''' contains software for controlling writing to the console screen
* '''libncurses5-dev:''' contains software for controlling writing to the console screen
To install these packages through apt, use the apt-get install <package list> command as in the following example (executed as root):
* '''libncursesw5-dev:''' contains support for wide characters
 
<!--
<syntaxhighlight lang="lua">apt-get install build-essential automake libtool libcurl4-openssl-dev libpcre3-dev libsqlite3-dev libreadline5-dev subversion libncurses5-dev libncursesw5-dev</syntaxhighlight>
* '''libsparsehash-dev:''' contains support for Google's hash-map '''(So you don't have to compile sparehash!)'''
-->
* '''default-libmysqlclient-dev:''' contains the MySQL library
* '''git:''' contains the git client used to check out our code repository
* '''unzip:''' contains archive unpacker
To install these packages through apt, use the apt-get install <package list> command as in the following example (execute as root):


apt-get install build-essential automake libtool
apt-get install libreadline-gplv2-dev libncurses5-dev libncursesw5-dev
apt-get install default-libmysqlclient-dev git unzip


Note: On Debian 8 systems please use this: '''apt-get install build-essential automake libtool libreadline-gplv2-dev libncurses5-dev libncursesw5-dev libmysqlclient-dev git unzip'''


 
=== Gentoo Linux ===
'''Gentoo Linux'''
 
 
You will need the necessary build tools, headers and libraries. Because Gentoo’s portage system is designed to compile any packages on your own system, the necessary build tools will have already been installed. This only leaves you to install the necessary libraries:
You will need the necessary build tools, headers and libraries. Because Gentoo’s portage system is designed to compile any packages on your own system, the necessary build tools will have already been installed. This only leaves you to install the necessary libraries:


<!--
* '''sqlite:''' contains the SQLite library
* '''sqlite:''' contains the SQLite library
* '''subversion:''' contains the SVN client used to check out our code repository
* '''curl:''' contains the cURL library; to compile with SSL support, apply the net-misc/curl SSL USE flag
* '''curl:''' contains the cURL library; to compile with SSL support, apply the net-misc/curl ssl USE flag
-->
To compile and install these packages through emerge, use the emerge -v <package list> command. The -v option shows additional * * information and can be omitted. (If you want to use any USE flags, prepend emerge with USE="use flags here". You can also use the -pv option to verify that you’re using the correct flags.) Refer to the [http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=2&chap=1 Gentoo Handbook] or manual for more information on emerge.
* '''git:''' contains the git client used to check out our code repository
To compile and install these packages through ''emerge'', use the '''emerge -v <package list>''' command. The -v option shows additional * * information and can be omitted. (If you want to use any USE flags, prepend emerge with USE="use flags here". You can also use the -pv option to verify that you’re using the correct flags.) Refer to the [http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=2&chap=1 Gentoo Handbook] or manual for more information on emerge.


Example:
Example:


<syntaxhighlight lang="lua">emerge -v subversion sqlite
emerge -v git sqlite
USE=“net-misc/curl ssl” emerge -v curl
USE=“net-misc/curl ssl” emerge -v curl
</syntaxhighlight>
 
 
 


'''Fedora'''
=== Fedora ===




You will need these packages to be able to successfully compile a MTA server on Fedora:  
You will need these packages to be able to successfully compile a MTA server on Fedora:  
* '''glibc-devel:'''
* '''glibc-devel:'''
<!--
* '''curl-devel:''' contains the cURL library
* '''curl-devel:''' contains the cURL library
* '''pcre-devel:''' contains the PCRE library
* '''pcre-devel:''' contains the PCRE library
* '''sqlite3-devel:''' contains the SQLite library
* '''sqlite3-devel:''' contains the SQLite library
-->
* '''readline-devel:''' contains the readline library
* '''readline-devel:''' contains the readline library
<!--
* '''lua-devel:''' contains the Lua libraries
* '''lua-devel:''' contains the Lua libraries
* '''subversion:''' contains the SVN client to check out the source code
-->
To install these packages through yum, use the yum install <package list> command as in the following example (executed as root):
* '''git:''' contains the git client to check out the source code
 
To install these packages through yum, use the yum install <package list> command as in the following example (execute as root):
<syntaxhighlight lang="lua">yum install glibc-devel curl-devel pcre-devel sqlite3-devel readline-devel lua-devel subversion</syntaxhighlight>
 
 
 
 
'''A warning for x64'''
 


The MTA:SA server currently cannot be properly compiled in 64-bit mode. Instead, you should compile it in 32-bit mode and run it using 32-bit compatibility mode (use the -m32 flag).
yum install glibc-devel readline-devel git


== General instructions for 1.1 ==
== General instructions for {{Current Version|master}} ==


'''Downloading the source.'''
'''Downloading the source.'''


First you need to download the source.
First, you need to download the source. Either clone as shown below or [https://github.com/multitheftauto/mtasa-blue/archive/master.zip download a zip snapshot]
<!-- This is done to enable templates inside something which looks like a code block -->
<pre&lt;noinclude&gt;&lt;/noinclude&gt;>
svn checkout <nowiki>http</nowiki>://mtasa-blue.googlecode.com/svn/branches/{{Current Version|full}}.0/ mtasa-blue
cd mtasa-blue
</pre&lt;noinclude&gt;&lt;/noinclude&gt;>
 
 
'''Prepare the sparsehash library'''
 
You can skip this step if your distribution’s package manager provides a sparsehash package that you can install.
 
<syntaxhighlight lang="lua">cd vendor/sparsehash/current
autoreconf -fi
sh ./configure
make install
cd ../../..</syntaxhighlight>
 


'''Prepare the PCRE library'''
git clone <nowiki>https</nowiki>://github.com/multitheftauto/mtasa-blue.git mtasa-blue
cd mtasa-blue


<syntaxhighlight lang="lua">cd vendor/pcre
Then compile it thus:
autoreconf -fi
./configure --disable-shared
make libpcre.la
cd ../..</syntaxhighlight>


./linux-build.sh


'''Compile the server'''
Then copy the configuration files, network module and resources into '''Bin/server''' by running this command:


<syntaxhighlight lang="lua">autoreconf -fi
./linux-install-data.sh
./configure
make install</syntaxhighlight>
 
Your vanilla server will now be compiled and installed into the MTA10_Server/output/ directory.
 
 
'''Run the server'''
 
Grab the net.so from the latest 1.0.x nightly and place it in your output directory, install the mtaserver.conf and acl.xml files into the ''mods/deathmatch/'' directory and put the latest resources from [http://code.google.com/p/multitheftauto-resources/ multitheftauto-resources project] into the ''mods/deathmatch/resources/'' directory . You can then run your server.
 
<syntaxhighlight lang="lua">cd MTA10_Server/output
./mta-server</syntaxhighlight>


And the resources and stuff should be downloaded and stuff. As well as the net_d.dll file.


=== '''Troubleshooting''' ===
=== '''Troubleshooting''' ===


Any errors during the compilation of json-c can be solved by calling autoreconf -fi from the json-c directory.
If you’re getting any unexpected errors while compiling, please check our [https://github.com/multitheftauto/mtasa-blue/issues GitHub issues] or our [https://discord.com/invite/GNN6PRtTnu development-focused Discord server].
 
If you’re getting any unexpected errors while compiling, please check our [http://bugs.mtasa.com/ Bug tracker] or our [irc://irc.multitheftauto.com/ IRC channel]
 
== General instructions for 1.2 ==
 
'''Downloading the source.'''


First you need to download the source.
<ul>
 
<li>If you get a message saying "Killed" when running premake5 gmake (linux-build.sh), that usually means you ran out of memory.<br />
<syntaxhighlight lang="lua">svn checkout http://mtasa-blue.googlecode.com/svn/trunk mtasa-blue
You can confirm this by searching for kill logs by running <code>sudo dmesg | grep -i kill</code><br />
cd mtasa-blue
A possible solution for this might be to [https://opensource.com/article/18/9/swap-space-linux-systems turn on swap] or upgrade your system memory temporarily.<br />
</syntaxhighlight>
1 GB is likely '''not''' enough of memory to complete the build.
 
</li>
 
</ul>
'''Run the do-everything shell script'''
 
This will compile the source then download the required net.so and resources.
 
<syntaxhighlight lang="lua">./initial-install.sh</syntaxhighlight>
 
When it's completed, your vanilla server will installed into the MTA10_Server/output/ directory.
 
 
'''Run the server'''
 
Install the mtaserver.conf and acl.xml files into the ''mods/deathmatch/'' directory and you can then run your server.
 
<syntaxhighlight lang="lua">cd MTA10_Server/output
./mta-server</syntaxhighlight>
 
 
=== '''Troubleshooting''' ===


If you’re getting any unexpected errors while compiling, please check our [http://bugs.mtasa.com/ Bug tracker] or our [irc://irc.multitheftauto.com/ IRC channel]
[[ru:Building MTASA Server on GNU Linux]]
[[Category: Development]]

Latest revision as of 22:18, 23 April 2022

Dialog-information.png This article needs checking.

Reason(s): Confirm steps work.

Installing and Running MTASA server on Linux

[[{{{image}}}|link=|]] Note: This article is only for developers who changed the server code. If you are looking for the precompiled server (for normal server owners). Go to: linux.mtasa.com and see Installing and Running MTASA Server on GNU_Linux

Preparing your system

In order to build the Multi Theft Auto dedicated server, you will have to set up your system with the correct libraries and tools. How these are installed depends on your distribution.

Our network module (net.dll or net.so) is distributed as a precompiled binary library. The file for GNU/Linux can be found inside the lastest Linux nightly from here. Use the net.so from 1.6 if you are compiling from the trunk, or the net.so from 1.6.0 if you are compiling the 1.6.0 branch. Be sure the read the top of Server/version.h as it contains directions on how to compile the different build types.

Debian Linux

Includes derivative distributions such as Ubuntu.

You will need the necessary build tools, headers and libraries, which are distributed through the following Debian packages (e.g. Debian Lenny):

  • build-essential: contains the necessary tools, headers and libraries to build applications
  • automake: contains the automake tools
  • libtool: contains the libtool software required to build libraries
  • libreadline-gplv2-dev: contains the readline library (version 5)
  • libncurses5-dev: contains software for controlling writing to the console screen
  • libncursesw5-dev: contains support for wide characters
  • default-libmysqlclient-dev: contains the MySQL library
  • git: contains the git client used to check out our code repository
  • unzip: contains archive unpacker

To install these packages through apt, use the apt-get install <package list> command as in the following example (execute as root):

apt-get install build-essential automake libtool
apt-get install libreadline-gplv2-dev libncurses5-dev libncursesw5-dev
apt-get install default-libmysqlclient-dev git unzip

Note: On Debian 8 systems please use this: apt-get install build-essential automake libtool libreadline-gplv2-dev libncurses5-dev libncursesw5-dev libmysqlclient-dev git unzip

Gentoo Linux

You will need the necessary build tools, headers and libraries. Because Gentoo’s portage system is designed to compile any packages on your own system, the necessary build tools will have already been installed. This only leaves you to install the necessary libraries:

  • git: contains the git client used to check out our code repository

To compile and install these packages through emerge, use the emerge -v <package list> command. The -v option shows additional * * information and can be omitted. (If you want to use any USE flags, prepend emerge with USE="use flags here". You can also use the -pv option to verify that you’re using the correct flags.) Refer to the Gentoo Handbook or manual for more information on emerge.

Example:

emerge -v git sqlite
USE=“net-misc/curl ssl” emerge -v curl

Fedora

You will need these packages to be able to successfully compile a MTA server on Fedora:

  • glibc-devel:
  • readline-devel: contains the readline library
  • git: contains the git client to check out the source code

To install these packages through yum, use the yum install <package list> command as in the following example (execute as root):

yum install glibc-devel readline-devel git

General instructions for 1.6

Downloading the source.

First, you need to download the source. Either clone as shown below or download a zip snapshot

git clone https://github.com/multitheftauto/mtasa-blue.git mtasa-blue
cd mtasa-blue

Then compile it thus:

./linux-build.sh

Then copy the configuration files, network module and resources into Bin/server by running this command:

./linux-install-data.sh

And the resources and stuff should be downloaded and stuff. As well as the net_d.dll file.

Troubleshooting

If you’re getting any unexpected errors while compiling, please check our GitHub issues or our development-focused Discord server.

  • If you get a message saying "Killed" when running premake5 gmake (linux-build.sh), that usually means you ran out of memory.
    You can confirm this by searching for kill logs by running sudo dmesg | grep -i kill
    A possible solution for this might be to turn on swap or upgrade your system memory temporarily.
    1 GB is likely not enough of memory to complete the build.