掛站系統設定篇

上一篇掛站系統所講的相關設定我貼在這篇文章裡面,用途當然是掛站(BBS和irc),目前我的設定還沒辦法開機自動啟動,正在研究問題在哪,另外對expect不熟,還沒厲害到可以被踢下站自動重登入。需求:

  • Linux主機一台。
  • irssi,irc客戶端程式,推薦剛出的0.8.10版。
  • SCREEN,達成掛站目標的主要程式之一,需要手動作patch並編譯。
  • Expect,達成掛站目標的主要程式之二。

首先是irssi,用0.8.10版主要原因是他可以針對不同頻道作不同的語系設定(recode),如果沒有這個需求用0.8.9也可以,不過我還是建議用0.8.10,直接從官網抓就可以,看是要手動編譯或是抓rpm安裝皆可。

SCREEN雖然大部分的linux系統都預設安裝,不過為了修正一些字碼上的錯誤,我們一定要手動編譯才行,不修正的話會造成BBS的排版錯誤。就照著Tiberius大大的步驟patch好原始碼後編譯即可:

./configure
make
make clean
make install

Expect在大部分的linux系統應該也都有安裝,沒有的話就想辦法裝上去吧,和irssi一樣不限安裝方法。

需要的軟體都裝好後,就開始設定吧,因為我的需求比較多一點,所以整個環境是以UTF-8編碼為基本編碼(如果只是要掛Big5編碼的BBS而已,那其實連SCREEN都不用patch),首先是irssi的部份,我需要開啟時自動連上IRCNet,並且連上我指定的三個頻道,我需要做的設定是指定自動連線的irc網路和要連線的頻道,首先是自動連線的部份,進入irssi後輸入:

/NETWORK ADD -kicks 4 -msgs 1 -modes 4 -whois 1 seednet
/SERVER ADD -auto -network seednet irc.seed.net.tw

接下來是自動加入頻道:

/CHANNEL ADD -auto #elixus seednet

這樣每次啟動irssi都會自動連到irc.seed.net.tw這個irc伺服器,並且自動加入elixus這個頻道,如果想要自動加入更多頻道就是/CHANNEL ADD的部份多輸入幾次即可,也可以用/CHANNEL LIST/CHANNEL REMOVE,來檢視現在有哪些頻道和移除已經設定好的頻道。設定好自動加入後就是設定recode了:

/RECODE ADD #elixus Big5

一樣有多個頻道就設定多次,這樣就完成irssi部份的設定了,接下來是Expect和BBS了,現在假設要自動掛kkcity,我要建立一個exp設定檔,內容如下:

#!/usr/bin/expect

# 設定 timeout 時間,以秒為單位。
set timeout 20

# 啟動 telnet
spawn telnet -8 bbs.kkcity.com.tw

# 將 my_id 與 my_password 分別置換成您的帳號與密碼。
set ID 帳號
set PASSWD 密碼

# 當 telnet 輸出 guest,便輸入帳號與密碼,超過時限則直接離開。
expect  "guest" { send "$ID\r$PASSWD\r" } timeout { exit }

#把畫面轉交給使用者控制,並每隔三百秒送出 " "
interact timeout 300 { send " " }
exit

另外還要一個shell script內容如下:

#!/bin/bash
export LC_CTYPE=C
export LANG=zh_TW.big5
expect /home/othree/bbs/4.kkcity.exp

檔名和路徑請自訂,我是在home目錄裡開一個bbs的子目錄,把相關設定檔都放在裡面,另外記得要開啟shell script的執行權限。就像上面的範例,一個bbs站需要兩個檔案,不過其實可以把Expect的設定寫到shell script裡面,不過我還不熟悉所以先這樣比較保險。

依照上面的範例把bbs相關的設定檔都建好後,就來建立SCREEN的rc檔,不過我不用.screenrc,以確保我需要用SCREEN作其他工作時不會被掛站系統干擾,一樣我是把這個獨立的screenrc放在bbs的子目錄裡面,檔名為screenrc-ej84,內容如下:

vbell off
defencoding big5
screen -t 'PTT' 3 /home/othree/bbs/3.ptt.sh
screen -t 'KKCITY' 4 /home/othree/bbs/4.kkcity.sh
defencoding utf-8
screen -t 'IRC' 0 irssi

內容蠻簡單的,就是先用big5的encoding開啟bbs的screen,最後再用utf-8開irssi,這樣基本上就完成設定的工作了,只要執行

LANG="zh_TW.UTF-8" screen -c /home/othree/bbs/screenrc-ej84

就會開啟掛站系統了,需要注意的是LANG="zh_TW.UTF-8"是必要的,不然bbs排版還是會不正常,當然每次都要打這串指令實在很麻煩,所以我就把他在寫進一個shell script,我取名叫initial,並加入檢查是否已經有啟動了,內容如下:

#!/bin/bash
if ! screen -r BBS >& /dev/null ;then
        LANG="zh_TW.UTF-8" screen -S BBS -c /home/othree/bbs/screenrc-ej84
fi

這樣每次需要啟動就只要執行/home/othree/bbs/initial即可,好記多了吧:P,當然要放到path的目錄或把path指到這也可以,如果能開機自動執行起不更好,不過我還設定不起來,目前是在crontab裡加上:

@reboot /home/othree/bbs/initial

不過一直沒反應,讓我很難過。再來簡單介紹一下基本指令,在SCREEN中,想要下命令或是輸入設定都是以Ctrl+A為開始,例如我要切換到視窗三的ptt,我就需要Ctrl+A後再按3,要列出所有視窗則是Ctrl+W,至於在irssi中要切換視窗則有Ctrl+P(Previous)或是Ctrl+N(Next)兩個快速鍵可以用,當然也可以用輸入命列的方式/window goto 2,不過反而比較累。如果不小心離開某個bbs站或把irssi關掉,一樣事先輸入Ctrl+A後輸入:然後看你是關掉哪一個站,把該站的screen指令貼上然後輸入即可,例如ptt的就會變成:screen -t 'PTT' 3 /home/othree/bbs/3.ptt.sh,輸入的指令會在右下角顯示。要小心的是defencoding可能和你想要的不一樣,如果要改變單一視窗的encoding的話就是Ctrl+A :encoding big5。知道這些應該就可以應付平常使用所需了:P。

最後是參考網址: