如何在局域网中安装NNGS围棋服务器
                 作者: YKL
    
    随着网络的发展和普及,很多单位和公司都建立了内部局域网。
对于围棋爱好者来说,如果在局域网内能够有一个围棋服务器让棋
友们尽情切磋棋艺,以棋会友,是多么的大快人心!

    NNGS 是互联网上著名的围棋服务器软件,IGS、NNGS、CWS、CTN、
LGS 等著名围棋站点都是采用 NNGS 围棋服务器软件略加变化而来。
而且 NNGS 围棋服务器软件是采用 GNU 版权协议的自由软件,在
互联网上可以免费、合法的得到该软件,所以用它来做我们自己的
围棋服务器是再合适不过了:)。

    但是有关如何安装及配置 NNGS 服务器的资料很少,给许多想
安装它的棋友带来了困难。

    以下是我在安装 NNGS 服务器过程中的亲身经历,希望能对大家
有所帮助。

    我的操作系统平台是 Red Hat linux 7.3,安装模式选的是服务器
模式,gcc 编译器版本是 2.96(可以用 gcc –v 命令查看你的 gcc
版本,如果你采用 Red Hat linux 7.3 默认的服务器或工作站模式
安装的话,你的 gcc 版本就是 2.96)。采用的 NNGS 版本是 nngs-1.1.14
和 mlrate-1.1.0,其中 mlrate-1.1.0 是与 nngs-1.1.14 配套的段位
计算系统。

    下面是具体的操作步骤:

1.从 http://people.debian.org/~lohner/nngs/src 下载上述两个软件。
得到的两个文件是 nngs-1.1.14.tar.gz(688KB) 和 mlrate-1.1.0.tar.gz(149KB)。
最好把这两个文件放在同一个目录中,以下的操作就是在这两个文件
在同一个目录中的情况下进行的。

2.执行如下命令:

    cd $your directory
    tar xvzf nngs-1.1.14.tar.gz
    tar xvzf mlrate-1.1.0.tar.gz

    cd $your directory 是进入你的 nngs-1.1.14.tar.gz 和 mlrate-1.1.0.tar.gz
所在的目录($your directory 代表这个目录的路径,例如我的这两个文件
放在 /sky/src 目录下,那么我的命令就是这样子的:cd /sky/src)。

    tar xvzf nngs-1.1.14.tar.gz 命令是解开 nngs-1.1.14.tar.gz 
压缩包,执行这个命令后,你会发现在当前目录下多了一个 nngs-1.1.14
子目录,当然所有解压后的文件已经在这个子目录中了:)。同样的, 
tar xvzf mlrate-1.1.0.tar.gz 命令是解开 mlrate-1.1.0.tar.gz 压缩包。

3.继续执行如下命令:

    cd mlrate-1.1.0
    ./configure
    make
    cd ..

    cd mlrate-1.1.0 是进入 mlrate-1.1.0 子目录(注意此时你的
当前目录就是我们刚才说的 $your directory),./configure 是为
你的系统配置 mlrate-1.1.0,make 是编译 mlrate-1.1.0,cd .. 是
返回上级目录。现在我们已经编译好了 mlrate-1.1.0,但请注意我们
并没有安装它(安装要用 make install 命令)。

4.进入 $your directory/nngs-1.1.14/data/messages 目录,你会
发现一些后缀为 .default 的文件,把这些文件的 .default 后缀
去掉(这些文件包含了 login、logout、motd、admotd、welcome、
unregister 信息,你可以把它们换成你喜欢的内容:))。

进入 $your directory/nngs-1.1.14/data/lists 目录,你也会发现
一些后缀为 .default 的文件,同样把这些文件的 .default 后缀去掉。

进入 $your directory/nngs-1.1.14/data/ladder 目录,你会发现两个
后缀为 .example 的文件,把这两个文件的 .example 后缀去掉。

5.进入 $your directory/nngs-1.1.14/src 目录,编辑 nngsconfig.h
和 nngsmain.h 这两个文件。

这两个文件包含了 nngs 围棋服务器的一些基本配置信息,包括 port 号、
服务器名等等,你可以把它们改成你喜欢的样子。nngsconfig.h 还包含了
你的系统中 mail 程序所在的位置,你可以按你的系统的实际情况更改它,
如果你是用默认设置安装的话,就不必改动它了:)。

6.进入 $your directory/nngs-1.1.14/src 目录,编辑 utils.c 这个文件。
先说一下为什么要编辑 utils.c 这个文件:

一开始我没改这个文件就 make install 安装了,过程中出现了大量的 warning,
这个且不去管它,最后出现了如下的错误信息:

    make[1]: *** [utils.o] Error 1
    make[1]: Leaving directory ‘/sky/src/nngs-1.1.14/src’
    make: *** [install-recursive] Error 1

很显然是在编译 $your directory/nngs-1.1.14/src 目录中的 utils.c 时
出了问题。于是再仔细观察 make install 过程中出现的信息,只是 warning
的不必理会,在 utils.c 的信息中发现了如下信息:

    utils.c: In function ‘tenth_secs’:
    utils.c:977: storage size of ‘tzp’ isn’t known
    utils.c:977: warning: unused variable ‘tzp’

这是在 utils.c 的第 977 行处,在函数 tenth_secs 中,由于变量 tzp 所占的
字节数未知而引起该变量无效的错误。

于是打开 utils.c,找到函数 tenth_secs:

unsigned tenth_secs()
{
  struct timeval tp;
  struct timezone tzp;

  gettimeofday(&tp, &tzp);
/* .1 seconds since 1970 almost fills a 32 bit int! So lets subtract off
 * the time right now */
  return ((tp.tv_sec - NNGS_EPOCH) * 10) + (tp.tv_usec / 100000);
}

其中  struct timezone tzp; 一行就是第 977 行。
经向一 linux 老手请教得知,问题出在 gcc 编译器上,原来 2.96 版本的
gcc 并不是一个稳定的版本,把 gcc 换成一个稳定版本就没有这个问题了。
如果你嫌麻烦不想换的话,也没关系,干脆把 struct timezone tzp;
和 gettimeofday(&tp, &tzp); 这两行给注释掉就行了:)。
改过的函数 tenth_secs 如下所示:

unsigned tenth_secs()
{
  struct timeval tp;
/*  struct timezone tzp;  */

/*  gettimeofday(&tp, &tzp);  */
/* .1 seconds since 1970 almost fills a 32 bit int! So lets subtract off
 * the time right now */
  return ((tp.tv_sec - NNGS_EPOCH) * 10) + (tp.tv_usec / 100000);
}

如果 make install 时你的 Error 信息与上述不同,那么你要仔细观察错误信息,
单纯的 warning 不必理会,注意寻找不是 warning 的出错信息,然后慢慢修改。
祝你好运:)

不过我感觉 nngs-1.1.14 和 mlrate-1.1.0 还是相当不错的,bug 少,安装起来还比较顺利。

7.言归正传,继续执行如下命令:

    cd $your directory/nngs-1.1.14
    ln –s ../mlrate-1.1.0 mlrate
    ./configure --prefix=$install directory your want --enable-adminlevels
    make
    make install

cd $your directory/nngs-1.1.14 是进入 nngs-1.1.14 目录。
ln –s ../mlrate-1.1.0 mlrate 是在 nngs-1.1.14 目录中建立一个与
mlrate-1.1.0 目录的链接,执行完这个命令后,在你的 nngs-1.1.14
目录中就会多出一个 mlrate 子目录,里面的文件与 mlrate-1.1.0 目录中
的文件完全相同。

注意要确保你是按第 1、2 步的要求做的(即 nngs-1.1.14.tar.gz 和
mlrate-1.1.0.tar.gz 两个文件放在同一个目录中),否则这里的 ../ 
就要换成相应的路径。./configure 命令带了两个参数,--enable-adminlevels
参数一定要加,有了它我们才能在围棋服务器里设置管理员帐号。--prefix
参数说明了你要把软件装在哪一个路径下,例如我想把软件装在
/sky/nngs 目录下,那么我的命令就是这样子的:

    ./configure --prefix=/sky/nngs --enable-adminlevels。

如果你不加 --prefix 参数,软件默认会安装在 /usr/local 目录下。
make 是编译,make install 是安装。

一般来说,在 Linux 下从源代码开始安装软件都要经过 ./configure、
make、make install 这么一个过程。你可以用 man $command 或 help
命令来获得某个命令的在线帮助。

在输入 make 命令后,屏幕上会出现大堆的 warning,不要管它!只要不出现
Error,你就大功告成了。最后输入 make install,等待它安装完毕,祝贺你,
你已经成功的安装了 nngs 围棋服务器!

安装完毕后,在你选定的 $install directory your want 目录下会有两个
子目录,一个是 bin,一个是 share。启动 nngs 围棋服务器的 nngssrv
程序就在 bin 子目录下。

最后说几句,你可以在 ./configure 后直接 make install,这也是可以的。
你还可以阅读一下 nngs 的 readme 和 install 文件,那里面有一些更详细
的解释。

8.执行如下命令启动nngs围棋服务器:

    cd $install directory your want/bin
    ./nngssrv

   好了,享受你的围棋服务器吧!:)


欢迎与我联系cccp401@sohu.com