Mudos[win] 迁移到 FluffOS 3.x[Linux] 编译、mudlib 修改过程 for CnetOS 7.x

FluffOS是在MUDOS基础上更新完成的。进行了许多新功能和bug修复。 针对LPC有很好的兼容性,如果你的MUD运行MUDOS V22+版本,可以很容易运行在fluffos上。

系统环境:

CnetOS 7.x mini 最小化安装


安装 mysql-community-devel 需要先安装mysql的源

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm


安装编译环境

yum install git
yum install gcc-c++
yum install bison-devel
yum install bison
yum install libevent-devel
yum install zlib-devel
yum install pcre-devel
yum install autoconf
yum install dos2unix 
yum install golang
yum install mysql-community-devel
yum install unzip
yum install pam-devel


Git获取FluffOS最新源码

git clone https://github.com/fluffos/fluffos.git


这个是fluffos 3.o.x  设置好的 local_options ,兼容旧 Mudlib ( 后面有时间再补充每条设置的说明 )

/*
 * local_options.h: compile-time configuration of the driver
 */

/****************************************************************************
 * EVERY time you change ANYTHING in this file, RECOMPILE from scratch.     *
 * (type "make clean" then "make" on a UNIX system) Failure to do so may    *
 * cause the driver to behave oddly.                                        *
 ****************************************************************************/

/* NOTES: Many of the configurable options are now set in the runtime config.
 * 
 * This file only contain a list of default settings, for quick diffing .
 * See detailed explaination from 'local_options.README'
 */

#ifndef _LOCAL_OPTIONS_H_
#define _LOCAL_OPTIONS_H_


#define DEBUGMALLOC
#define DEBUGMALLOC_EXTENSIONS
/****************************************************************************
 *                              COMPAT                                      *
 ****************************************************************************/
#undef NO_ADD_ACTION
#undef NO_SNOOP
#undef NO_ENVIRONMENT
#undef NO_WIZARDS
#undef NO_LIGHT
#undef NO_SHADOWS
#undef NO_RESETS
#undef NO_BUFFER_TYPE
#undef ED_INDENT_CASE
#undef ED_USE_TABS
#define SNOOP_SHADOWED
#undef FLUSH_OUTPUT_IMMEDIATELY

#undef LAZY_RESETS
#undef RECEIVE_ED
#undef PRIVS
#undef USE_ICONV
#undef IPV6
#undef DTRACE
#define CHECK_MEMORY
#define HAS_STATUS_TYPE
#undef CAST_CALL_OTHERS
#undef NONINTERACTIVE_STDERR_WRITE 
#undef INTERACTIVE_CATCH_TELL

#define SANE_EXPLODE_STRING
#undef REVERSIBLE_EXPLODE_STRING
#define NO_ANSI
#define STRIP_BEFORE_PROCESS_INPUT 
#define OLD_TYPE_BEHAVIOR
#define OLD_RANGE_BEHAVIOR
#define STRING_STATS
#define ARRAY_STATS
#define LOG_CATCHES
#define ARGUMENTS_IN_TRACEBACK
#define LOCALS_IN_TRACEBACK
#define MUDLIB_ERROR_HANDLER
#define TRAP_CRASHES
#define THIS_PLAYER_IN_CALL_OUT
#define CALLOUT_HANDLES

#define RECEIVE_SNOOP
#define PROFILE_FUNCTIONS
#define CACHE_STATS

#define OLD_ED
#define ED_INDENT_SPACES 4
#define ED_TAB_WIDTH 8
#define RESTRICTED_ED
#define SENSIBLE_MODIFIERS
#define ARRAY_RESERVED_WORD
#define REF_RESERVED_WORD
/****************************************************************************
 *                           MISCELLANEOUS                                  *
 ****************************************************************************/
#define CUSTOM_CRYPT
#undef COMPAT_32
#define DEFAULT_PRAGMAS PRAGMA_SAVE_TYPES + PRAGMA_ERROR_CONTEXT + PRAGMA_OPTIMIZE 
#define SAVE_EXTENSION ".o"
/****************************************************************************
 *                              PACKAGES                                    *
 ****************************************************************************/
#define PACKAGE_OPS
#define PACKAGE_CORE

#define PACKAGE_CONTRIB
#define PACKAGE_DEVELOP
#define PACKAGE_MATH
#undef PACKAGE_MATRIX
#define PACKAGE_MUDLIB_STATS
#define PACKAGE_SOCKETS
#undef PACKAGE_PARSER
#define PACKAGE_EXTERNAL

#define PACKAGE_DB
#ifdef PACKAGE_DB
#define USE_MYSQL 1
#undef USE_MSQL
#undef USE_POSTGRES
#undef USE_SQLITE3
#define DEFAULT_DB  USE_MYSQL
#endif 

#define PACKAGE_ASYNC
#define PACKAGE_SHA1
#undef PACKAGE_CRYPTO
#define PACKAGE_TRIM
#define PACKAGE_PCRE
#undef PACKAGE_DWLIB

#define PACKAGE_UIDS
#ifdef PACKAGE_UIDS
#define AUTO_SETEUID
#define AUTO_TRUST_BACKBONE
#endif

#define PACKAGE_COMPRESS
#define SAVE_GZ_EXTENSION ".o.gz"
#undef PACKAGE_THREAD

#endif /* _LOCAL_OPTIONS_H_ */


编译FluffOS过程

$ cd fluffos
$ ./build.FluffOS     #如果你编译环境缺少依赖包会在这个过程提醒,通过 yum search xxx 查找,安装再继续build
$ make                #上面build这一步通过,这一步基本没什么问题,很顺利
$ make install  


部署你的 FluffOS+MudLib

#假设你的fluffos编译目录在 /home/fluffos/

#假如你的mudlib运行目录在  /home/xxxmud/

/home/fluffos/src/  编译成功后的驱动(driver、dtrace_compile)
		|
		|--src/
		        |--- driver


/home/xxxmud/ #mud布署目录
        |   |------ bin/
        |   |-- driver        #刚编译好的驱动移到这里
        |   |-- config.ini   #mud配置文件( 要参考/home/fluffos/src/Config.example 修改 )
        |
        |------ mudlib/	    #把你的mudlib整个打包解压放到这里
                     |-- adm
                     |-- binaries
                     |--.............


有关mud配置文件 参考 /home/fluffos/src/Config.example 进行修改

下面放一个config.ini 样例:

vi /home/xxxmud/bin/config.ini

name : HY-JHFY 
mud ip : 0.0.0.0    # all ip
external_port_1 : telnet 8888
external_port_2 : binary 6666
mudlib directory : /home/xxxmud/code
binary directory : /home/xxxmud/bin
log directory : /log
include directories : /include
master file : /adm/single/master
simulated efun file : /adm/single/simul_efun
swap file : /adm/single/swapfile
debug log file : debug.log
global include file : "/include/globals.h"
default fail message : What?
default error message :
time to clean up : 900
time to reset : 1800
time to swap : 900
compiler stack size : 600
evaluator stack size : 6000
inherit chain size : 30
maximum evaluation cost : 30000000
maximum local variables : 200
maximum call depth : 150
maximum array size : 25000
maximum buffer size : 400000
maximum mapping size : 150000
maximum string length : 320000
maximum bits in a bitfield : 12000
maximum byte transfer : 200000
maximum read file size : 320000
hash table size : 7001
object table size : 1501
living hash table size : 256
gametick msec : 1000
heartbeat interval msec : 1000
sane explode string : 1
reversible explode string : 0
sane sorting : 1
warn tab : 0
wombles : 0
call other type check : 0
call other warn : 0
mudlib error handler : 1
no resets : 0
lazy resets : 0
randomized resets : 1
no ansi : 1
strip before process input : 1
this player in call_out : 1
trace : 1
trace code : 0
interactive catch tell : 0
receive snoop : 1
snoop shadowed : 0
reverse defer : 0
has console : 1
noninteractive stderr write : 0
trap crashes : 1
old type behavior : 0
old range behavior : 0
warn old range behavior : 1
supress argument warnings : 1
enable_commands call init : 1
sprintf add_justified ignore ANSI colors : 1
apply cache bits : 22
call_out(0) next level : 1000
maximum users : 5000


好了下面我们开始启动mud服务吧,继续往下看介绍将mud加为centos服务自动启动。

[root@mud]# /home/hymud/bin/driver /home/hymud/bin/config.conf&


在部署过程中会遇到的一些问题

1、Linux (*.h *.c )乱码及回车符号问题

由于大多人编码在windows下编码,在Linux上需要转换一下(或者通过ftp上传时会可自动转码)

使用下面的命令进行转码操作

[root@mud mud]# cd /home/xxxmud
[root@mud mud]# find . -name "*.h" -exec dos2unix {} \;
[root@mud mud]# find . -name "*.c" -exec dos2unix {} \;
[root@mud mud]# find . -name "*.o" -exec dos2unix {} \;


2、迁移后用户密码错误登陆不了,以及不再支持static 全在这里进行更改

#define crypt oldcrypt        //因为FluffOS 默认使用md5加密,不过 FluffOS  同样兼容 crypt 加密
#define static nosave        //不再支持static ,这里定议为 static转换为nosave
#define private protected  //这里重要,将 private 转义为 protected  

通过以上三个调整基本上能兼容大多的mudlib

修改 vi /home/xxxmud/mudlib/include/globals.h   

// globals.h 
// this file will be automatically included by the driver

#define SAVE_EXTENSION __SAVE_EXTENSION__
#pragma optimize 

//这里是修改mudlib达到兼容性
#define crypt oldcrypt 
#define static nosave
#define private protected


3、将你的mud 加入到 centos 的自动启动服务的教程及脚本

编译启动脚本

记得要修改脚本内的以下配置为你的实际配置

########## Mud Start Config ############
DIR=/home/xxxmud/bin    #你实际的mud fluffos驱动地址
MUDCONFIG=${DIR}/config.ini  #你mud的配置文件名字
MUDNAME=HY6             #你mud的名字,用于存放进程pid号
MUDSTARTNAME=xxxmud     #你mud这个启动脚本的名字
########################################

有关脚本看这里吧
《FluffOS 3.x [Linux] 下的mudlib 使用reboot 当机后不能重启和做为系统服务自动启动脚本》
https://www.itsns.org/article/31


然后加入系统服务来启动

#改变权限

chown root.root /etc/rc.d/init.d/xxxmud #所有用户都可以执行,单只有root可以修改
chmod +x /etc/rc.d/init.d/xxxmud #将mysqld 放入linux启动管理体系中
chkconfig --add xxxmud #打开自启动
chkconfig xxxmud on


#相关使用命令

service xxxmud start  #启动mud服务
service xxxmud restart #重启mud服务
service xxxmud stop    #停止mud服务
service xxxmud status  #查看mud运行状态


最后推荐几个MUD站点:

FluffOS 中文站:  http://www.fluffos.net/index.php
北大侠客行MUD论坛:http://pkuxkx.net/forum/index.php 
泥巴创世纪 :http://www.mudbuilder.com
泥巴客栈:http://www.xiaqiang.com.cn


《海洋IV - 江湖风云录》- 已稳定运行于FluffOS Mysql

              ≡ ─────海洋VI- 江湖风云─────≡     
             ≡ ────全新中文网络泥巴游戏─────≡   

                   【    
          ◎■■■■】〓〓〓〓〓〓〓〓〓〓〓> 
                   【   
  |※※※※         笑看飞花落海洋  神州大地鹰飞扬         ※※※※|
  |※※※※         一浪打浪又一浪  江山代代人才出         ※※※※|
  |※※※※         英雄独剑走江湖  且把真心照月明         ※※※※|
  |※※※※         誓为红颜去闯荡  世世代代永相依         ※※※※|
  |※※※※         桃花梨花落海洋  可知处处是我家         ※※※※|
  |※※※※         情深缘浅论短长  乱世英雄乱世舞         ※※※※|
  |※※※※         他日征途伴英雄  愿我海洋浪不停         ※※※※|
  |※※※※         一样痴心一样狂  海洋英雄梦不息         ※※※※|  

           -----------------------------------  

          《海洋VI》 QQ群:       3541849 8372963  
          《海洋VI》 主页地址:   http://www.jhfy.org 
          《海洋VI》 游戏地址:   hy.21sun.net 1863
          
如果输入英文名字后没有反应,说明您使用的软件不合适,请使用 zMUD 进行游戏


  • 发表于 2017-02-04 11:38
  • 阅读 ( 2023 )
  • 分类:运维

8 条评论

请先 登录 后评论
不写代码的码农
luffy

程序员

43 篇文章

作家榜 »

  1. luffy 43 文章
  2. 云中帆 1 文章
  3. 贾宗续 0 文章
  4. 苏通 0 文章
  5. 云孤天 0 文章
  6. jizong 0 文章
  7. zbabla 0 文章
  8. 琥珀蓝山 0 文章