前言
最近想玩MUD了,本想用MudOS跑一个Lib的,后来看到Fluffos有了官方Docker,正好可以放在我的DS218+ Docker上跑着玩,期间遇到各种问题,花了几天时间终于搞定了,特此记录。
故障重现
在注册表(Hub)里搜索fluffos/fluffos,下载后新建容器并运行,启动1s后就立即停止,查看LOG,没有任何输出,docker状态Exited (132),百撕不得其姐……
故障分析
根据情况有这么几点可能
- 配置文件搞错
- 路径错误
- 缺少so动态库
- CPU 指令集不兼容
- 内核版本问题
- 群晖问题
经过逐步检查,确定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
(浏览器)端口
然后就可以愉快的玩耍了!
截图
后记
好多操作都是通过SSH登录DSM操作的,还是有比较高的风险,不建议大家如此操作。
Docker下的Ubuntu编译环境搭好后,以后再有什么不支持的软件就可以自行编译了。