折騰了一個月,水木的論壇終于裝得差不多了,在這期間居然讓我碰上了前所未有的事
件。慶幸自己在3月初把水木精華區關于安裝的文檔都保存了,否則真不知道要裝到什么時候
?,F在趕快把安裝步驟寫下來,給想安裝的朋友留點參考。
我用的是FC3的系統,這里就以此為例。安裝前請用rpm -qa xxx命令檢查系統所需的軟
件包是否已安裝。需要的軟件包有:zlib,autoconf,automake,libtool,libxml2,
libiconv,libjpeg,libjpeg-devel, libpng,libpng-devel, freetype2,gd,gd-
devel,openssl,gmp-4.X,這些系統盤就有,裝全就是了。
下面安裝libesmtp,首先下載到源代碼包,然后執行如下命令:
tar xzvf libesmtp-1.0.tar.gz //解壓libesmtp
cd libesmtp-1.0 //進入libesmtp源碼目錄
./configure --disable-pthreads
make
make install
這樣libesmtp就安裝成功了。
安裝mysql沒有什么特別要求,按mysql文檔安裝即可。
現在做一些約定:
$(BBSHOME) 表示 bbs 的安裝目錄,缺省為 /home/bbs,在本文中指定
為/usr/local/bbs
$(WWWHOME) 表示 apache 的安裝目錄,在本文中指定為 /usr/local/www
$(PHPHOME) 表示 php 的安裝目錄,在本文中按缺省的 /usr/local
安裝apache和php:
我下載到的是httpd-2.0.52和php4.3.10,以此為例。需要注意的是,apache直接編譯安裝后
最大上線人數為256,修改httpd.conf也沒用,我經過查資料發現這個辦法,就是修改源代碼
。修改源代碼目錄中的/include/httpd.h,加上下面的條件定義語句:
#ifdef HARD_SERVER_LIMIT
#define HARD_SERVER_LIMIT 10000
#endif
這樣就可以把限制提高到10000人。修改完畢就可以編譯了(直接用命令表示):
cd httpd-2.0.52 //進入源代碼目錄
./configure --prefix=/usr/local/www --enable-module=so --enable-module=ssl
make
make install
cd ../php4.3.10
./configure --with-apxs2=/usr/local/www/bin/apxs --disable-debug \
--enable-pic --disable-rpath --enable-inline-optimization \
--with-dom --with-gd --with-freetype-dir=/usr/lib \
--with-png-dir --with-iconv --with-jpeg-dir --with-zlib \
--enable-track-vars
make
make install
OK!安裝前的準備終于做好了?。?!
現在可以安裝smthbbs了。動手前還得修改站點定制文件,這里用的是fb2k-v2,在site
目錄下,注意驗證fb2k-v2.h中BBSUID 和 BBSGID 與本地系統的 bbs 用戶的 uid gid 是否一
致,如果不一致請調整到一致。其余的就是你的站點的一些參數,注意修改。
下面開始編譯:
./configure --prefix=/usr/local/bbs --enable-site=fb2k-v2 --with-
www=/usr/local/www --with-php=/usr/local/include/php --with-mysql --enable-ssl
make
make install
make install-home
chown -R bbs:bbs /usr/local/bbs
如果一切順利,至此 smthbbs、apache 和 php 都已經安裝完畢。
運行前配置:
web方式:
apache 的配置文件為 /usr/local/www/conf/httpd.conf,編輯該文件,加入
AddType application/x-httpd-php .php
修改 Port 參數為 80,把 User 和 Group 參數都修改為 bbs。
請把 KeepAlive 參數設為 Off.
將 smthbbs 源代碼目錄 bbs2www/xml 下的文件復制到 /usr/local/www/htdocs。
php 的配置文件可以從 php 源代碼目錄得到,將 php.ini-dist 復制為
/usr/local/lib/php.ini,然后編輯 php.ini 文件,將 short_open_tag 的值修改為
Off。
運行 smthbbs
cd /usr/local/bbs/bin
./miscd daemon
./bbslogd
./bbsd -p 23
然后 telnet localhost,注冊 SYSOP 和 guest 兩個帳號。
guest的密碼隨便寫了.
運行 apache
/usr/local/www/bin/apachectl start
到目前為止,論壇已經可以運行了,但還有許多工作要做!:(
修改分類討論區:
這里直接借用前輩的文檔了!:-)
修改分類討論區
修改站點的分類討論區一般來說有兩個步驟,一是需要修改站點的配置文件,二是需
要改動代碼。配置文件的修改主要和用戶界面有關,而源代碼的修改主要和統計程序以及
站務管理有關。
6.1 修改站點配置文件
需要改動的文件是 ~bbs/etc/menu.ini 和 web 主目錄下面的 site.php。下面是
menu.ini 分類討論區子菜單的一個簡略形式,后面的講解將都以此為例:
#------------------------------------------------------------------
%menu M_EGROUP
title 0, 0, "分類討論區選單"
screen 3, 0, S_EGROUP
@EGroups 10, 22, 0, "0BBS", "(0) 本站系統 [本站]"
@EGroups 0, 0, 0, "1USA", "(1) 人在美國 [校園][創業]"
@EGroups 0, 0, 0, "2GoAbroad", "(2) 大話西游 [留學][學校][團體]"
@BoardsNew 0, 0, 0, "New", "(N) 閱讀新文章"
!.. 0, 0, 0, "Exit", "(E) 回到主選單"
%
EGROUP0 = "a"
EGROUP1 = "b"
EGROUP2 = "c"
#------------------------------------------------------------------
這里需要注意的地方是:分類討論區菜單的第 5 個參數的第一個字母是序列號,這個序
列號通過下面的 EGROUP? 來定義分區代號(一般是一個字母或數字)。比如這里的第一
個分類討論區“本站系統”,序列號是 0,分區代號是 a(由 EGROUP0 定義)。注意:
序列號只是 menu.ini 內部引用使用,沒有任何別的用處!后面的修改,以及新建和修改
討論區都只需要知道分區代號即可,在這個例子中,三個分區代號分別是 a b c。
一般可以把序列號和分區代號設置成一樣。
改完 menu.ini 參考 4.3 節使之生效。(站務在主菜單按~)
另一個需要修改的配置文件是 site.php,上面的例子就需要在 site.php 內用下面
的代碼:
$section_nums = array("a", "b", "c");
$section_names = array(
array("本站系統", "[本站]"),
array("人在美國", "[校園][創業]"),
array("大話西游", "[留學][學校][團體]")
);
6.2 修改源代碼
修改分類討論區需要修改站點的 site.c 和 site.h 文件。不推薦直接修改
default.h 和 default.c 文件。
smthbbs 系統有一個 ~bbs/0Announce/groups/ 目錄,這是版面精華區的總目錄,該
目錄下存放所有版面的精華區。一般站點希望版面分區結構和精華區分區結構完全一致。
以上面的例子為例,一共三個分類討論區,那么討論區精華的總目錄下應該有三個目錄,
我們把它們分別取名為 GROUP_0 GROUP_1 GROUP_2。修改分類討論區往往會需要修改精華
區結構,所以修改完分類討論區之后站務應該進入精華區調整,比如建立目錄,修改
.Names 文件等。
源代碼的修改首先是 site.h 里面的 SECNUM 常數,它應該定義為分類討論區數量:
#define SECNUM 3
剩下的修改都在 site.c 里面了,為此確保 site.h 沒有定義 USE_DEFAULT_SECODE。
site.c 內一共有四個常量和分類討論區有關,請注意常量的類型定義絕不能改。
const char seclearcase/" target="_blank" >ccode[SECNUM][5] = {"a", "b", "c"};
這個是分區代號,部分統計程序需要用到。
const char * const explain[] = {
"本站系統",
"人在美國",
"大話西游",
NULL
};
分類討論區的區名,web 下的站點管理會用到。最后的 NULL 不能漏!
const char * const groups[] = {
"GROUP_0",
"GROUP_1",
"GROUP_2",
NULL
};
精華區總目錄下相應分區的目錄名,開版和修改版面設定的時候會用到。
最后的 NULL 不能漏!
const char secname[SECNUM][2][20] = {
{"本站系統", "[本站]"},
{"人在美國", "[校園][創業]"},
{"大話西游", "[留學][學校][團體]"},
};
分類討論區說明,就按照這個格式依樣畫葫蘆好了。實際上只有 secname[i][0] 才
真正在程序中用到,目的是開版和修改版面精華區位置的時候提示選擇用。
另一個需要注意的問題是,每個版面的精華區目錄位置都是完全獨立儲存的,和上面
的修改毫無關系。所以像上面的例子,如果我們決定把 GROUP_0 的目錄名改掉,那樣的
話不但要進行類似上面所述的修改,而且精華區位于 GROUP_0 目錄內的版面都應該要進
入系統管理菜單重新設定討論區,選擇移動精華區位置,指定新的目錄。
修改源代碼之后需要重新編譯安裝 BBS 程序??梢钥吹皆创a的修改只和管理操作
和統計程序相關,所以在實際操作中,如果是減少分區數目或者修改分類討論區說明,可
以僅調整 menu.ini 和 site.php,而不修改源代碼。
然后是生成首頁導讀必須的文件,繼續使用前輩的成果:
為首頁導讀生成必要的xml文件
3.4.1首頁導讀各元素和xml文件的對應關系簡表
所有需要的xml文件都是保存在$(BBSHOME)/xml/目錄的,如果您的站臺沒有此目錄
請以bbs帳號在$(BBSHOME)生成此目錄。
所有生成xml需要執行的程序,都保存在$(BBSHOME)/bin,源文件在$(SRCDIR)/local_u
tl
以下為了描述方便,不再指明xml和程序的目錄。
首頁導讀元素 需要的xml文件 mainpage.php當中相關函數 生成此xml需執行的程序
推薦文章 commend.xml gen_commend_html() genhot
本日熱點話題 day.xml gen_hot_subjects_html() poststat
分類精彩討論區 day_sec*.xml gen_sections_html poststat
gen_sec_hot_subjects_html()
新開版面 newboards.xml gen_new_boards_html() gennewboard
推薦版面 rcmdbrd.xml gen_recommend_boards_html() 手工寫的沒有程序
人氣排名 board.xml gen_board_rank_html() usage
今日祝福 bless.xml gen_blessing_list_html() poststat
3.4.2 crontab當中有關首頁導讀的部分
參考$(SRCDIR)contrib/cron.SMTH,在bbs帳號的crontab里面調用各程序生
成以上xml的部分如下所示。請添加到您的bbs帳號的crontab里面。注意以
下不是完整的bbs帳號的crontab,只是和首頁導讀相關部分的內容,完整的
crontab列表請參考$(SRCDIR)/contrib/cron.SMTH。時間以及程序的完整路徑等
內容請根據自己站臺的情況進行調整。
# 定時更新推薦文章
0,10,20,30,40,50 * * * * /home/bbs/bin/genhot
# 每小時 59 分執行熱門話題統計; 1 分 html 化
59 * * * * /home/bbs/bin/poststat /home/bbs
# stiger:新的十大統計
59 23 * * * rm -f /home/bbs/tmp/Xpost/*
# 每天早上 4:33 統計各版使用狀況0
33 4 * * * /home/bbs/bin/usage 0 >/dev/null 2>&1
36 4 * * * /home/bbs/bin/usage 1 >/dev/null 2>&1
至于gennewboard,如果您的站臺經常開新版,那么把它加入crontab;如果不經
常開新版,在bbs系統上開完新版之后,用bbs帳號手動執行一下也可以。
推薦文章需要在站上開一個版,Recommend版,然后版主在版面上推薦的文章前面
按;3,此文章進入Recommand版,站務在Recommend版需要推薦的文章前面按g就可
以使得此文章出現在web首頁導讀的推薦文章了。
3.4.3手工生成rcmdbrd.xml
編輯,$(BBSHOME)/xml/rcmdbrd.xml,按照以下格式,感謝windinsn提供
<?xml version="1.0" encoding="GBK"?>
<RecommendBoards>
<Board><EnglishName>這里寫版面的英文名</EnglishName></Board>
<Board><EnglishName>...</EnglishName></Board>
...
<Board><EnglishName>...</EnglishName></Board>
</RecommendBoards>
至此,所有的首頁導讀的元素都已經生成完畢,在瀏覽器打開
http://yoursite./mainpage.php 應該可以得到看到首頁導讀的各元素。
現在已經基本完成了,但為了簡化注冊過程,我取消了發激活郵件的過程,web填寫密碼
并直接生成注冊單,謝謝前輩的文檔,我就偷懶了!:>
bbs2www/html/bbsreg.html
增加兩個<input
<input type="password" name="pass1">
<input type="password" name="pass2">
bbs2www/html/bbsreg.php
首先判斷$_POST["pass1"]和$_POST["pass2"]一不一樣,不一樣就直接html_error_quit
另外我記得密碼的位數必須是5-39位(inclusive),這個最好限定一下。
我不確定出了這個范圍會不會有問題
$password=bbs_findpwd_check("","",""); 改成
$password = $_POST["pass1"] 赫赫,bbs_findpwd_check是一個自動產生密碼的垃圾函數
從$mailbody開始到那個發送郵件失敗的http_error_quit都不要了
bbs_createregform函數調用的最后那個參數,改成FALSE,這個非常關鍵??!
這樣做就會填完注冊單站務就可以在系統管理菜單->審批注冊單看到。
后面的提示稍微改改,可能就差不多了。
另外你的src/site.h最好是這樣的:
#define REGISTER_WAIT_TIME (0)
#define REGISTER_WAIT_TIME_NAME "馬上"
這兩個smth默認好像是48小時,比較bt。這樣改能保證telnet立即能填寫注冊單。
我按上面的方法修改后還是有一點問題,就是被拒的用戶在web里重新填寫注冊單站務卻看不
到,琢磨了半天,終于搞定。修改bbs2www/html/bbsfillform.php,把里面bbs_createregform
函數最后一個參數也全改成FALSE,這樣就OK了。
好了,終于安裝好了,累死我了!至于blog,我安裝后還是有問題,而現在沒法上水木提
問了,只好先不要了。;(
至于我裝的站臺,教育網用戶可以到http://202.195.144.15看一看,公網無法訪問,大家都知道原因的吧!