一些 FAQ

前言

以下為一些不知如何分類的 FAQ,就再這裡聚集吧!!



VI

Q1. 開機過程中出現訊息 Recovering vi editor sessions: 然後就停在那一行停了一段時間?

Error Message:
系統在重新開機過程中出現如下訊息並且就停了一段時間,且只要每次重新開機都必須停在那等它 recovering 完畢?
Recovering vi editor sessions
Answer:
會有這訊息是因為當您正在編輯 vi 時不正常關閉所引起的 (VI 自動備份修改檔),所以當系統每次重新開機便會去回復它,解決方式且將該 recover 檔案刪除即可。
%cd /var/tmp/vi.recover
%vi -r <當時正在修改的檔名> 




Q2. 用 vi 編某個檔案時每一行後面都有 ^M?

Error Message:
當您用 vi 去編輯某個檔案時卻發現每行後面都有一個 ^M 不但在修改上造成困擾若想比對檔案內容時更是困難 (diff -ruN),會造成這樣的原因是因為此檔案在 Windows Base 機器上編輯過,而因為 Windows 平台上每一列的結束符號有二個字元與 FreeBSD 不同所以當 FreeBSD 欲編輯時便會將 Windows 的結束符號誤判為 ^M 符號。

Answer:
解決方式有很多種自行擇一即可。
方式一、安裝 unix2dos 套件 (Translate ASCII files from DOS (cr/lf) to UNIX (lf))
cd /usr/ports/converters/unix2dos ; make install clean
unix2dos <filename>

方式二、使用 VI 編輯該檔案,並輸入下列(符號 ^M (符號 ^M 為 Ctrl-v [enter])
:%s,^M,,g
方式三、使用 sed 指令
sed -e "s/^V^M//" <filename> > <newfilename>
參考





Mutt

Q1. 無法使用 mutt 寄信?

Error Message:
無法使用 mutt 寄信並且收到 Mail Delivery System 的退信通知,內容大致如下
 553  5.1.8  Domain of sender address  does not exist (in reply to MAIL FROM command)
Answer:
主要問題為必須讓您的 MTA 知道說寄信是使用 DomainName去寄而不是使用 Hostname.DomainName,例如 MTA 為 Postfix 則修改 main.cf 加入如下二行即可。
vi main.cf
 mydomain = weithenn.org
 masquerade_domains = $mydomain






Ports

Q1. 切換到要安裝 ports 套件的地方安裝到一半出現錯誤訊息?

Error Message:
切換到要安裝 ports 套件的地方執行 make install clean 安裝套件,但安裝到一半出現錯誤訊息,大致如下
An older version of PORTS資料夾位置 is already installed (軟體版本) You may wish to ``make deinstall and install this port again by ``make reinstall to upgrade it properly. If you really wish to overwrite the old port of PORTS資料夾位置 without deleting it first, set the variable "FORCE_PKG_REGISTER" in your environment or the "make install" command line.
Answer:
上面的訊息為您先前用 ports 安裝過某套件,當要再用 ports 安裝同一軟體時便會出現這樣的錯誤 (因為套件相依性的源故),您可以 make deinstall 解除該軟體後再 make reinstall 再次安裝,或透過 FORCE_PKG_REGISTER 參數來達成
make install FORCE_PKG_REGISTER="yes" clean





SSH

Q1. FreeBSD 5.3-R 使用 Putty 無法登入?

Error Message:
新安裝的 FreeBSD 5.3 無法使用 Putty SSH 連進去 (當然 sshd 服務已經開啟)? 若先登入別台 FreeBSD 主機在 SSH 到此主機卻是可以連接的?
無法登入的狀況為只要輸入完帳號、密碼後立刻跳出 Putty 有問題必須關閉訊息,然後退出 Putty
Answer:
此問題為 Putty 版本 keyboard-interactive method of authentication. 導致 (簡單說就是 Putty 版本太舊),目前使用為 Putty 0.52 無法連入下載新版 Putty 0.56,便可順利在 Putty 過去。



Q2. 無法 Putty 登入 State SYN_SEND?

Error Message:
機器重新安裝之後無法使用 Putty 連上,使用 TcpView 狀態停留在 SYN_SEND。

Answer:
原因在於機器因為重灌只指定了 DefaultRouter 沒另外指定 Static Route (因為機器 Co-Location 在別地且有連回公司 DMZ 所以需另外指定),所以沒有辦法 Routing 回來 (因為是 Private IP 沒指定當然繞不回來) 狀態就停在 SYN_SEND。



Q3. SSH 登入緩慢?

Error Message:
使用 SSH 登入 FreeBSD 輸入帳號後需要等待很久的時間才顯示輸入密碼部份?

Answer:
此情況為 FreeBSD SSH 服務預設採用名稱解析所導致,解決方式如下
  • 請設定好此 FreeBSD Host DNS 反向解析
  • 關閉 SSH 服務使用名稱解析,進行如下修改後重新啟動 SSH 服務即可,詳細內容可參考 OpenSSH FAQ

vi /etc/ssh/sshd_config
 #UseDNS yes              //預設值
 UseDNS no                //修改後
/etc/rc.d/sshd restart   //重新啟動 SSH 服務






VMware

Q1. 使用 VMWare 安裝 FreeBSD 6.1 之後時間一直變慢?

Error Message:
使用 VMWare WorkStation 4.5 安裝了 FreeBSD 6.1 之後,發現時間會一直慢一直慢,就算對時之後還是會一直慢 (大概運作一分鐘就比正常慢了約 30 秒吧)。

Answer:
詳細內容可參考 Rexiology::Work : Clock in a VMWare FreeBSD Guest Runs More Slowly or Quickly Than Real Time... 如下修改 loader.conf 後重新開機時間便正常了,都不會變慢了。
vi /boot/loader.conf
 hint.apic.0.disabled=1       //加入此行




Q2. 如何安裝 VMWare Tools 於 FreeBSD?

Error Message:
使用 VMWare WorkStation 4.5 一般若是要安裝 Windows VMWare Tools 的話可以很方便安裝,但若是 FreeBSD 則要如何安裝 VMWare Tools 呢?

Answer:
步驟如下 (前提是 FreeBSD 已經有 X Windows 的環境才能裝 VMWare Tools)
  1. 將 C:\Program Files\VMware\VMware Workstation\freebsd.iso 掛到 Freebsd 的光碟機
  2. 工具列中選擇【VM】
  3. 選擇【install vmware tools】
  4. 掛載光碟機【freebsd.iso】鍵入【mount /cdrom】
  5. 切換至 CDRom 鍵入【cd /cdrom】
  6. 複製 VMWare tools 套件包至暫存目錄【cp vmware-freebsd-tools.tar.gz /tmp】
  7. 切換至暫存目錄【cd /tmp】
  8. 卸載光碟機【umount /cdrom】
  9. 解開 VMWare tools 套件包【tar zxvf vmware-freebsd-tools.tar.gz】
  10. 切換至 VMWare tools 目錄【cd vmware-tools-distrib】
  11. 開始安裝 VMWare tools【./vmware-install.pl】





Locate

使用 locate 指令可以很方便找到系統中相關檔案或資料夾,但如果檔案或資料夾是剛安裝完成的話就會發生找不到的情況,原因是 Locate Database 更新的頻率為每週更新一次,所以當然找不到剛下載或安裝的檔案及資料夾,您可透過下列指令來即時更新 Locate Database。

如下列為系統剛安裝完成而 Locate Database 尚未建立,因此也會發生找不到的情形
locate en_US.ISO8859-1
 locate: database too small: /var/db/locate.database

手動更新 Locate Database (更新時間約 5 分鐘上下)
/usr/libexec/locate.updatedb
 >>> WARNING
 >>> Executing updatedb as root.  This WILL reveal all filenames
 >>> on your machine to all login users, which is a security risk.






PHP 及 MySQL 從 Big5 轉移至 UTF-8

今天處理一台在 FreeBSD 4.x、PHP 4.x、MySQL 3.x、Big5 環境轉換至新機器 FreeBSD 7.x、PHP 5.x、MySQL 5.x、UTF-8 環境,多虧信宏的幫忙再此記錄一下轉移步驟。

舊機器上作業
  1. 備份網站目錄
  2. Dump MySQL (.sql) 資料庫 (Big5 格式)
  3. 轉換 Dump 檔案編碼格式從 Big5 至 UTF-8
  4. 修改 .sql 檔加入 UTF-8 設定
  5. 從舊機器傳送網站目錄檔及 Dump MySQL (.sql) 至新機器上

新機器上作業
  1. 建立 UTF-8 編碼空資料庫
  2. 建立 Query MySQL 的使用者帳號
  3. 匯入 UTF-8 (.sql) Dump 檔案
  4. 修改連結至 MySQL 的 .php 內容 (mysql_pconnect)
  5. 轉換 .php 中 charset 設定 (big5 -> UTF-8) 並轉換檔案編碼為 UTF-8 格式

了解整個轉移流程後以下為簡述作業內容及其指令
Dump MySQL (.sql) 資料庫 (Big5 格式)

由於舊機器安裝 MySQL 時預設編碼設定為 Big5 格式,因此匯出時請加上 -default-character-set 參數確保匯出的檔案編碼為 Big5,下列指令中 MySQL 管理帳號為 root 而指定匯出的資料庫名稱為 webuser。
mysqldump -u root -p -default-character-set=big5 webuser > webuser_big5.sql
轉換 Dump 檔案編碼格式從 Big5 至 UTF-8,若執行下列指令時出現 cannot convert 的字眼且轉換停止時請加上 -c 參數便可順利轉換。
iconv -f BIG5 -t UTF-8 webuser_big5.sql > webuser_utf8.sql
  • 修改 .sql 檔加入 UTF-8 設定
  • 加入 SET 指定編碼為 UTF-8
  • TYPE=MyISAM; 改為 DEFAULT CHARSET=utf8;
  • 刪除註解文字 (ex. -- Dumping data for table `board5`)

修改 Dump 檔案 (webuser_utf8.sql) 內容,在檔案最前面加上如下三行內容,並把每個資料表後面的 TYPE=MyISAM; 更改為 DEFAULT CHARSET=utf8;,並將相關註解文字刪除 (例如: -- Dumping data for table `board_5` 或 -- Table structure for table `board_5` ...etc)。
 SET NAMES utf8;
 SET CHARACTER_SET_CLIENT=utf8;
 SET CHARACTER_SET_RESULTS=utf8;


匯入 UTF-8 (.sql) Dump 檔案
建立 UTF-8 編碼空資料庫及建立 Query MySQL 的使用者帳號則透過 phpMyAdmin 操作完成後,執行下列指令把 UTF-8 的 Dump 檔案匯入。
mysql -u root -p webuser < webuser_utf8.sql
若在匯入上出現問題可試著把關鍵字前後加上 ` ` 符號框住再試著匯入即可,例如下列匯入資料庫時出現如下錯誤訊息後將 webuser_utf8.sql 內容中第 5947 行處附近把 group varchar(10) NOT NULL default , 改成 `group` varchar(10) NOT NULL default , 即可順利匯入。
 ERROR 1064 (42000) at line 5947: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right
 syntax to use near 'group varchar(10) NOT NULL default '',
 pass varchar(10) NOT NULL default '',
 ' at line 3

修改連結至 MySQL 的 .php 內容 (mysql_pconnect)
把具有連接到 MySQL 的 .php 內容設定使用 UTF-8 進行 Query 確保之後從 MySQL 資料庫上查詢及寫入的內容為 UTF-8 格式。
 @$db_conn=mysql_pconnect($db_host,$db_user,$db_pass);
 mysql_query("SET NAMES 'UTF8'");
 mysql_query("SET CHARACTER SET UTF8");
 mysql_query("SET CHARACTER_SET_RESULTS=UTF8'");

轉換 .php 中 charset 設定 (big5 -> UTF-8) 並轉換檔案編碼為 UTF-8 格式
接下來把原來是 Big5 編碼格式的 .php 檔案轉換為 UTF-8 編碼格式並把內容指定瀏覽器編碼設定的 Charset 從 big5 修改為 UTF-8,您可參考如下 Script 修改為適合您的環境來一次對多個 .php 檔案進行此工作
#!/bin/sh
#$id: convert.sh v0.1 2009/10/14 weithenn Exp $
#Replace charset from Big5 to UTF-8 and convert file code from Big5 to UTF-8
 SRCDIR="/home/user/weithenn/php.orig"
 for convert in `ls -l ${SRCDIR} | awk '{print $9}' | grep .`; do
     cd ${SRCDIR}
     cp ${convert} ${convert}.tmp
     /usr/bin/sed 's/charset=big5/charset=UTF-8/' ${convert}.tmp > ${convert}
     /usr/local/bin/iconv -c -f BIG5 -t UTF-8 ${convert} > ${convert}.utf8
     rm ${convert}.tmp
     cp ${convert}.utf8 ${convert}
     rm ${convert}.utf8
 done