在群晖DS218+上编译Fluffos的Docker镜像

前言

最近想玩MUD了,本想用MudOS跑一个Lib的,后来看到Fluffos有了官方Docker,正好可以放在我的DS218+ Docker上跑着玩,期间遇到各种问题,花了几天时间终于搞定了,特此记录。

故障重现

在注册表(Hub)里搜索fluffos/fluffos,下载后新建容器并运行,启动1s后就立即停止,查看LOG,没有任何输出,docker状态Exited (132),百撕不得其姐……

故障分析

根据情况有这么几点可能

  1. 配置文件搞错
  2. 路径错误
  3. 缺少so动态库
  4. CPU 指令集不兼容
  5. 内核版本问题
  6. 群晖问题

    经过逐步检查,确定1、2是没有问题的。3是很有可能的,我把fluffos镜像导出后(docker save fluffos/fluffos -o fluffos.tar)提取二进制程序,通过SSH登录DSM,执行后提示缺少so文件,提取了so并放入相应目录,发现也不行,另外这是一种很危险的操作,一般不建议这么搞,除非做好备份。

没办法,还是自己编译一套吧,用VM装了个Ubuntn v18.04,编译完美通过,ldd列出so文件,一起打包copy到DSM执行,发现还是报错,illegal instruction,我艹,都是x86_64平台,不应该会报错啊。

尝试用群晖提供的SDK交叉编译,还是不成功。(这里有个疑问,都是x86_64平台,为什么要交叉编译?而且还报错了。)

实在不行编译成静态库,结果也是各种报错,最后联系上fluffos作者,说GLIBC版本不支持,此路不通。

后来没办法,在群晖docker里下载Ubuntu镜像,在DSM里编译试试吧,居然可以正常编译执行了……

测试一下,没有问题。然后就是找各种教程编译成Docker,放到docker里跑更安全。

Dockerfile

第一次写Dockerfile,也不知道符不符合标准。

FROM ubuntu:18.04
MAINTAINER sbdx "lygsbdx@gmail.com"
RUN mkdir /fluffos
COPY libs/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2
COPY libs/libc.so.6 /lib/x86_64-linux-gnu/libc.so.6
COPY libs/libcrypto.so.1.1 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
COPY libs/libdl.so.2 /lib/x86_64-linux-gnu/libdl.so.2
COPY libs/libevent-2.1.so.7 /usr/lib/x86_64-linux-gnu/libevent-2.1.so.7
COPY libs/libevent_pthreads-2.1.so.7 /usr/lib/x86_64-linux-gnu/libevent_pthreads-2.1.so.7
COPY libs/libgcc_s.so.1 /lib/x86_64-linux-gnu/libgcc_s.so.1
COPY libs/libicudata.so.66 /usr/lib/x86_64-linux-gnu/libicudata.so.66
COPY libs/libicuuc.so.66 /usr/lib/x86_64-linux-gnu/libicuuc.so.66
COPY libs/libm.so.6 /lib/x86_64-linux-gnu/libm.so.6
COPY libs/libpcre.so.3 /lib/x86_64-linux-gnu/libpcre.so.3
COPY libs/libpthread.so.0 /lib/x86_64-linux-gnu/libpthread.so.0
COPY libs/librt.so.1 /lib/x86_64-linux-gnu/librt.so.1
COPY libs/libstdc++.so.6 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
COPY libs/libz.so.1 /lib/x86_64-linux-gnu/libz.so.1
COPY include /fluffos/include/
COPY std /fluffos/std/
COPY www /fluffos/www/
COPY include /fluffos/include/
COPY fluffos /fluffos/
COPY lpcc /fluffos/
COPY portbind /fluffos/
ENTRYPOINT ["/fluffos/fluffos"]

使用教程

在群晖Docker注册表里搜索synology-fluffos下载。

炎黄群侠传 https://github.com/oiuv/mud/为例

下载并解压MUDLIB

绑定/mudlib/到你的MUDLIB目录

修改启动参数为/mudlib/config.ini

修改config.ini文件,将mudlib directory改为/mudlib

查看config.ini里开放的端口,并在docker上映射出来,默认开放5555(GBK),6666(UTF-8),8000(浏览器)端口

然后就可以愉快的玩耍了!

截图

DSM运行截图

后记

好多操作都是通过SSH登录DSM操作的,还是有比较高的风险,不建议大家如此操作。

Docker下的Ubuntu编译环境搭好后,以后再有什么不支持的软件就可以自行编译了。

京ICP备13031296号-4