用linux服务器架设Factorio多人游戏服务端

前言

最近迷上了异星工厂这个游戏,前段时间在steam入正了,不愧是声明不打折的游戏,以前便宜的时候没下手,现在贵了30块,难受。趁还没有出正式版先买了,免得正式版出来了又涨价。入手没几天有网友拉我和他一起联机,才发现这游戏原来可以联机啊,查了下还可以自建联机服务器,刚好手上有台服务器一直闲着,那就用来搭建一个联机服务器吧

准备
  1. 一台安装 Centos7 的服务器
  2. XftpXshell
  3. factorio 的无头文件 https://www.factorio.com/download-headless,下载和你的游戏版本一致的文件,我下载的是 0.17.79 版本
换源

备份源文件

1
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

下载源文件

1
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

更新下缓存

1
yum makecache

查看系统中是否有 GLIBC_2.18 ,若运行如下命令没有输出任何信息则表示没有,需要安装

1
2
[root@maple ~]# strings /lib64/libc.so.6 | grep GLIBC_2.18
[root@maple ~]#

安装 GLIBC_2.18 ,把下面的命令走一遍即可

1
2
3
4
5
6
7
8
9
yum install -y wget make
wget http://mirrors.ustc.edu.cn/gnu/libc/glibc-2.18.tar.gz
tar -zxf glibc-2.18.tar.gz
cd glibc-2.18/
mkdir build
cd build/
../configure --prefix=/usr
make -j2
make install

若执行上面的 ../configure --prefix=/usr 命令出现如下错误

configure: error: no acceptable C compiler found in $PATH

那么是 gcc 没有安装,安装就好了

1
yum install -y gcc

安装好后继续执行剩下的三条命令即可

配置

将下载的linux无头文件通过xftp上传到服务器上去,我是上传到了root目录下

1
2
[root@maple ~]# ls
factorio_headless_x64_0.17.79.tar.xz

解压

1
tar -xvf factorio_headless_x64_0.17.79.tar.xz

得到 factorio 文件夹

1
2
[root@maple ~]# ls
factorio factorio_headless_x64_0.17.79.tar.xz

配置 factorio/data/server-settings.example.json 文件

修改好配置以后,就可以建图了。

建图

在factorio文件夹中创建一个saves目录,用于存放游戏存档,两种方法

  1. 存档要么在游戏里面创建一张自己满意的图的存档保存,然后到 C:\Users\用户名\AppData\Roaming\Factorio\saves 将存档zip文件拷贝到 /opt/factorio/saves 目录下
  2. 要么在linux上用服务端程序生成,但是地图随机,各有利弊,自己酌情选择
1
/root/factorio/bin/x64/factorio --create /root/factorio/saves/maple.zip
运行

上面全弄好以后,就可以开服了

1
/root/factorio/bin/x64/factorio --config /root/factorio/config/config.ini --port 34197 --start-server /root/factorio/saves/maple.zip --server-settings /root/factorio/data/server-settings.example.json

然后进游戏选择->开始游戏->多人游戏->服务器直连,输入服务器ip:端口即可进入

注意,云服务器请将防火墙关闭并禁止开机自启,并且在安全组将UDP:34197端口和TCP:34197开放

1
2
systemctl stop firewalld.service
systemctl disable firewalld.service