# 异星工厂Factorio服务器搭建

> 之前跟同学虚拟局域网联机，总是要等他上线开游戏才能玩，为了解决这个问题，我们在服务器上搭建个服务端，这样就可以随时都能玩到了

> **LINK / 链接**
>
> - 资料
> 	- B站（TXYHR_GZR） [Factorio异星工厂linux云服务器搭建详细操作步骤](https://www.bilibili.com/read/cv5227114/)
> 	- 博客园（渣博客） [centos7.6 搭建异星工厂服务器](https://www.cnblogs.com/FJH1994/p/12840059.html)



**系统：CentOS 7**

**游戏版本：0.16.51**

## 下载服务端文件

> 在此之前，你先要检查一下你服务器有没有 `wget` 这个包。
>
> 在控制台输入 `wget --help` 如果有输出内容且不是错误信息则说明已安装这个包。
>
> 如果你没有安装就用 `yum install wget`，注意如果你的系统不是CentOS那你就要用你这个系统的包管理，不知道是用啥包管理在浏览器搜索。
>
> *如果安装不了wget包，那你去搜索一下你的系统如何安装wget包*



**1.** 使用wget下载官网的服务端文件

```bash
wget https://factorio.com/get-download/0.16.51/headless/linux64
```

上面命令中的 **0.16.51** 是你游戏的版本，在主菜单的关于里可以看到版本，要对应版本，否则无法游玩


**2.** 将下载到的linux64文件解压出来

```bash
tar -xvf linux64
```


**3.** 修改服务器配置文件

进入factorio/目录的data文件夹，拷贝并重命名server-settings.example.json 为 server-settings.json，然后编辑一下关键内容

*（server-settings.example.json 这个是服务器配置示例文件）*

*请一行一行的执行命令，别那么懒*

```bash
cd factorio/data
cp server-settings.example.json server-settings.json
vim server-settings.json
```

修改第27行 `"require_user_verification": true`，将true改为false，这个是游戏正版检测，我想大家都是用“盗版”玩的吧 [滑稽]

> 扩展知识：**Vim**
>
> 先按Esc退出到指令模式
>
> 显示行号  `:set number`
>
> 保存退出 `:wq`
>
> 不保存退出 `:q`

其余的配置项的翻译请看 [Factorio（异星工厂）服务器配置文件翻译 - IDZD](https://www.idzd.top/archives/1094/)

返回factorio/文件夹 `cd ..`



## 安装并编译GLIBC 2.18

>  老规矩，要安装先检查，输入 `gcc -v`，如果有正常输出信息没报错，就有安装
>
> 安装GCC `yum group install "Development Tools"`

> 检查有没有GLIBC `strings /usr/lib64/libc.so.6 | grep ^GLIBC_`
>
> 如果输出一堆以GLIBC_开头的红色字符串加上数字，则说明已安装了

**1.** 下载和编译

*（如果你有强迫症，想优化一下目录结构，你可以在返回上一级目录 `cd ..` 安装GLIBC）*

下载GLIBC 2.18，并解压出来

```bash
wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
tar xvzf glibc-2.18.tar.gz
```

**（如果你安装了GLIBC就调到下面这一步 ↓↓↓）**

进入glibc-2.18/目录，创建build文件夹并进入该目录生成编译配置

```bash
cd glibc-2.18/
../configure --prefix=/usr
```

开始编译，**此过程会很慢，请耐心等待，编译过程中别退出SSH终端，你可以最小化SSH终端的窗口以便你使用电脑干其它事情，但别作死到自动重启电脑**

```bash
make -j2
```



**2.** 安装 `make install ` **此过程会很慢，请耐心等待，安装过程中别退出SSH终端，你可以最小化SSH终端的窗口以便你使用电脑干其它事情，但别作死到自动重启电脑**



## 服务器运行前的配置

**1.** 先在你的电脑创建一个存档，或者你已经有了一个存档，进入游戏的目录*（每个人的安装目录都不一样，你可以在文件夹管理器中搜索一下但这很慢，win的鸡肋之处）*找到saves/文件夹，里面的.zip文件就是你的存档了，文件名是你保存游戏时输入的内容

**2.** 进入服务器的factorio/目录，创建save文件夹*（save可以自定义）*，把你的存档上传到这里面



## 运行服务器

**1.** 在factorio/目录里，使用以下指令来运行服务器

```bash
./bin/x64/factorio --port 1555 --start-server ./save/a.zip --server-settings ./data/server-settings.json
```

- `--port 1555` 1555 是该服务器的端口，可以自定义，但不能与其它服务端口有冲突
- `--start-server ./save/a.zip`  save/ 是存档的目录，a.zip 是存档文件

你一退出SSH终端或按了Ctrl + C键，就会关闭服务器运行脚本

如果你想退出SSH终端也能一直运行服务器，那你就要将运行脚本挂到后台

```bash
nohup ./bin/x64/factorio --port 1555 --start-server ./save/a.zip --server-settings ./data/server-settings.json &
```

*（你也可以用其它的包去挂起运行脚本，这里我用自带的nohup）*

**2.**如何关闭挂在后台的运行脚本**？**

根据端口号查找游戏进程

```bash
netstat -nlp |grep :1555
```

进程pid在行末的/factorio前面的几个数字

用  `kill 进程pid `  即可关闭



**END.**

没有配图是因为我懒，没有配图的教程是有点难懂的，纯文字看起来会很困且枯燥，将就一下吧，这也是我的笔记

如果有地方不通畅的、有错的可以提出来
