当前位置: 首页 > news >正文

在群晖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(浏览器)端口

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

截图

在这里插入图片描述

后记

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

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

相关文章:

  • 将自己的SSH密钥对导入YubiKey 5的PIV和智能卡模块,配合Putty和XShell使用
  • 快照(Snapshot)技术发展综述
  • 国产开源硬件力作CanoKey,替代昂贵的Yubikey!
  • 在CentOS上升级OpenSSL 1.1.1k
  • firewall-cmd 常用命令
  • 俞敏洪在北京大学2008年开学典礼上的发言
  • iptables 之 REJECT 与 DROP 对比
  • Nginx捕获并自定义proxy_pass返回的错误
  • 后台传JSON,前台动态生成一个下拉框
  • PostgreSQL psql工具使用方法
  • 在后台把DataTable组织成JSON,送到前台动态填充UltraWebGrid
  • Win10以后的版本不支持文件拖动打开的解决办法
  • 阴阳历转换
  • EmEditor正则匹配中文
  • VC阴阳历转化与二十四节气
  • hexo+github搭建个人博客
  • [LeetCode] Wiggle Sort
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • ES6 学习笔记(一)let,const和解构赋值
  • Fastjson的基本使用方法大全
  • IOS评论框不贴底(ios12新bug)
  • Java IO学习笔记一
  • JavaScript中的对象个人分享
  • Webpack 4x 之路 ( 四 )
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 算法-图和图算法
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 译米田引理
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 智能合约开发环境搭建及Hello World合约
  • 进程与线程(三)——进程/线程间通信
  • ​iOS安全加固方法及实现
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • # 数论-逆元
  • ###STL(标准模板库)
  • #每日一题合集#牛客JZ23-JZ33
  • (MATLAB)第五章-矩阵运算
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET/C# 使窗口永不获得焦点
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET中两种OCR方式对比
  • .NET中统一的存储过程调用方法(收藏)
  • .sh 的运行
  • @GlobalLock注解作用与原理解析
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • []串口通信 零星笔记
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [autojs]autojs开关按钮的简单使用