INSTALL - ptt/pttbbs GitHub Wiki

PttBBS 初步架站手冊

若有任何需要補充與修正的地方歡迎直接修改 :)

0. 安裝作業系統

可以編譯原始碼安裝該此程式的平台:Linux 主流發行版、FreeBSD 11.x/12.x

Windows 10/11 使用者請自行設定安裝 Windows Subsystem for Linux (WSL),再使用各 Linux 發行版的建議安裝步驟與相依套件進行安裝 (其他 Windows 版本無法安裝)

在這裡的記錄用的 Linux 發行版:Ubuntu 16.04.2 Desktop 64bit

而關於各作業系統(發行版)的安裝方式請參考相關論壇或看板搜尋各教學資訊.

批踢踢 Linux 板鳥哥的Linux私房菜

  • ps: 建議新手將它們裝在虛擬機器裡後再來進行練習即可,不必去安裝雙系統或特地直接更換作業系統,減少不必要麻煩。

1. 建立 bbs 、 bbsadm 帳號

以 root 的權限

在 Linux 裡,你可以在自己主要會用的帳號開啟 terminal

( Ubuntu 在工具列展開後顯示的搜尋列輸入 terminal 即可找到該程式 )

或直接 ssh 連線至工作站操作亦可

輸入 sudo -isudo su - 再打自己密碼後,即可獲得該權限。

1.以 root 權限輸入執行 vipw, Linux 下加入底下兩行,其他作業系統請自行參考相關說明格式

    bbs:x:9999:99:PttBBS,,,:/home/bbs:/home/bbs/bin/bbsrf
    bbsadm:x:9999:99:PttBBS,,,:/home/bbs:/bin/bash

  1. 執行 passwd bbsadm 設定 bbsadm 的密碼

  2. 執行 vigr,Linux 下加入底下一行,其他作業系統請自行參考相關說明格式

    bbs:x:99:
  1. 執行 mkdir -p /home/bbs
  2. 執行 chown -R bbs:bbs /home/bbs
  3. 執行 chmod 700 /home/bbs

以上步驟也可以使用 groupadduseradd 等指令完成 (man groupaddman useradd 照說明以及前面提到各帳號的重要資訊弄即可)

以下是相關指令範例:

groupadd --gid 99 bbs \
    && useradd -m -g bbs -s /bin/bash --uid 9999 bbs \
  • 註:原始官方文件並未採用上述指令, 可能是因為要將兩個帳號名稱實際對應到同一隻帳號較不方便

2. 建議安裝套件 (for Linux核心的作業系統)

之後的過程,可能會先建議你安裝一些自己有記到該安裝的套件,會減少一些摸索的時間

因為 Linux 各發行版本或不同的安裝設定就會使原本有的套件不盡相同

造成之後在嘗試在執行一些指令時會因為剛好沒安裝到,使得結果不如預期甚至卡住,

可先 點此 檢查,需要預先安裝的套件清單:

例如在 Ubuntu 環境下,就可以用 apt 執行以下指令:

    - root - # apt install -y git python bmake gcc clang ccache libevent-dev pkg-config libio-all-perl libemail-sender-perl

3. 取得 PttBBS 原始碼

接下來步驟請切換到作業系統中的 bbsadm 帳號進行,

對於相關編輯器設定熟悉的人請直接 su - bbsadm 即可

若剛接觸 Linux 等相關作業系統者,也可在圖形介面登出後登入名為「PttBBS」的帳號

以下用 bbsadm 的身分

進去 bbsadm 帳號, 確認自己在 /home/bbs 底下後,就可以執行:

    - bbsadm - $ git clone http://github.com/ptt/pttbbs.git

執行過程如圖:

  • 您可以在該目錄下直接透過 git pull 更新至 pttbbs 較新的修改. 如:
    - bbsadm - $ cd /home/bbs/pttbbs; git pull; git rebase
  • 如果您的 pttbbs.conf並不存在, 可以拷一份預設的來用:
    - bbsadm - $ cd /home/bbs/pttbbs; cp sample/pttbbs.conf pttbbs.conf

4. 修改 pttbbs.conf

依據您的需求, 修改 pttbbs.conf

這時候就可以依自己喜好及相關需要選擇各種編輯器

(像是 gedit , vim 或其它介面等),如用以下指令:

    - bbsadm - $ gedit --encoding=big5 pttbbs.conf 

或是

    - bbsadm - $ vim -c 'set fenc=big5 enc=big5 tenc=utf8' -c 'e!' pttbbs.conf

即可順利開啟

因為 CurrentPtt 裡面程式的中文編碼是 Big5,Linux 等相關作業系統則預設 UTF-8 編碼

因此如果的編輯器顯示起來是亂碼

就表示你沒有用正確的編碼開啟

另外也要注意自己是否有權限編輯

(如果沒有,請善用 whoamils -al 等相關指令檢查權限是否正確)

以下提及一些在 pttbbs.conf 中,很可能關乎編譯安裝是否會成功的一些設定:

如果是在 64bit 的作業系統編譯安裝 PttBBS,請記得開啟以下定義:

#define TIMET64

在大部分 Linux 核心作業系統,請記得開啟以下定義

#define SHMALIGNEDSIZE (1048576*4)

之後編譯才能順利完成

其他各種功能就可視自己需求決定要不要開啟,也可以去 github 裡查閱,

或利用 ack-grep / ack 等套件檢閱裡面的程式碼來推測可以測試開啟哪些定義

使得一些原本 pttbbs.conf 沒列但實際上很實用的功能可以被挖出來玩

(光棒選單、ALLPOST同步、BBSLua、文章屍體、資源回收桶、刪除部分文字、退文...等)

一切設定就緒,就準備進行面對成敗的關鍵─編譯


5. 編譯 PttBBS

編譯前先記得

    - bbsadm - $ alias make=pmake

或是將以下 make 指令都改成 pmake

也可以將 alias 的指令放在 bbsadm 家目錄(/home/bbs)底下的 .bashrc 檔案末端,

這樣每次登入 bbsadm 時就自動幫你做完此步驟了

此外也請再確認自己執行 python -V 時出現的訊息是 Python 2.X

即可在 /home/bbs/pttbbs 下執行

    - bbsadm - $ make all install clean 

開始編譯:

編譯完成:

這裡能夠順利完成的話,基本上幾乎就可以架起來了

如果編譯發生各種問題,可以記下來,藉由搜尋引擎或論壇爬文討論找到可能的解法

在ptt的話,PttCurrent看板就有不少文可以爬看看了

其他相關專案也可以查詢看看類似使用者回報問題是否有解答,像是 ptt2 的 PttSrc 板

(該板雖然主要討論的 OpenPtt Project 與本專案發展方向有所不同

但一些在基本編譯設定上相關的問題, 仍有不少可以參考的建議、解答)

常會遇到的情況是因為少裝不少套件所以常常編譯到一半就弄不下去,

其實可以稍微記一下那些情況中缺少的套件,即可這些常要用的整理起來

6. 架新站才要做的相關設定

要協助將BBS站資料搬家時務必注意。

如果您的 BBS中已經有資料了, 請務必不要執行此部分步驟

若確定自己是要架新站:

請執行

    - bbsadm - $ cd ~/pttbbs/sample; make install

然後執行

    - bbsadm - $ cd /home/bbs; bin/initbbs -DoIt

*如果參數沒打對的話會出現一些訊息:

如果參數打對程式就會建立新 BBS 的整體目錄架構了

7. 啟動BBS

若一切都很順利的話, 這樣子大概就安裝完了, 接下來是啟動 bbs 的部份.

執行

    - bbsadm - $ ~/bin/shmctl init

(*註1, *註2)

順利的話畫面大概會如下:

以下分兩個階段來測試 PttBBS 程式是否能正常執行

non-daemon mode

bbsadm 使用者執行:

    - bbsadm - ~/bin/mbbsd -e utf8 -D   ##### 假設你的終端機預設顯示 UTF-8 字元

即可進入 BBS 登入畫面,若初次使用沒建立任何帳號,請直接跳到 8. 取得站長權限 建立站長帳號。

離開 BBS 程式後可能會出現終端機換行亂掉的情形,此時可先輸入 reset 後(若之前先按到其他鍵,可先持續壓倒退鍵幾秒鐘後再輸入),按下 Enter,即可恢復正常終端機排版樣式。

daemon mode

若使用 non-daemon mode 確認 mbbsd 可以正常執行後,即可嘗試開啟 bbs 服務。

root 執行

    - root - # /home/bbs/bin/mbbsd -p 23 -d   ###(*註3)

其中 -d 是指定 daemon mode. 若連線有問題需要方便測試時可以先不加 -d,

用別窗直接進行連線以方便找出問題。

測試整個系統是否完成:

    - anyuser - $ telnet localhost 23 

看看 (或其他設定的Port)

在 Linux 桌面裡的 terminal 來試因為預設顯示編碼就是 UTF-8

所以剛連進去看到就都是亂碼,可以自行調整 terminal 顯示設定

或直接在key帳號的欄位按 , 後Enter轉換顯示編碼,即可看到中文字:

8. 取得站長權限

new 一個帳號叫SYSOP, 然後 logout再 login, 這樣子就會擁有站長權限囉~

再 new 一個帳號叫 guest0, 再用 SYSOP 改名為 guest, 這樣子別人就可以用 guest 參觀你的站了

開板, 開群組, 以及搬動群組的方法請看 Ptt2.cc 裡的 PttSrc 板

其他部分或此條目未詳盡之處,將再另開條目補充,這裡只敘述快速架設的方法。

附註

  1. 這個程式是在 initial shared memory 用的, 只有開機後第一次執行, 或是你手動清除 shm 後才需要執行

  2. 如果您跑了 shmctl inituhash_loader 並沒有看到

      total XXXXX names loaded.

而是看到其他的錯誤訊息,例如

[shmget error] key = 4cc, errno = 22: Invalid argument

可能是您作業系統 shared-memory 上限不足, 請參考 docs/FAQ 中加大 shared-memory 部份的說明.

  1. bin/mbbsd -p 23 是指定要 bind 23 port, 依照 UNIX 規定, 1024 以下的 port 須要有 root 權限, 所以如果要 bind 23 port 的話就要用 root 去執行, 3000 port 則不需要. 可以參考 docs/ADVANCE 安裝好 bbsctl , 之後您就可以透過 bbsctl 直接在其他權限下 (如 bbsadm ) 來啟動可以 bind port 23 的 mbbsd. 對於 ptt/ptt2 規模的超級大站,還有另一個選擇是使用 daemon/logind