前言
以下為一些不知如何分類的 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)
- 將 C:\Program Files\VMware\VMware Workstation\freebsd.iso 掛到 Freebsd 的光碟機
- 工具列中選擇【VM】
- 選擇【install vmware tools】
- 掛載光碟機【freebsd.iso】鍵入【mount /cdrom】
- 切換至 CDRom 鍵入【cd /cdrom】
- 複製 VMWare tools 套件包至暫存目錄【cp vmware-freebsd-tools.tar.gz /tmp】
- 切換至暫存目錄【cd /tmp】
- 卸載光碟機【umount /cdrom】
- 解開 VMWare tools 套件包【tar zxvf vmware-freebsd-tools.tar.gz】
- 切換至 VMWare tools 目錄【cd vmware-tools-distrib】
- 開始安裝 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 環境,多虧信宏的幫忙再此記錄一下轉移步驟。舊機器上作業
- 備份網站目錄
- Dump MySQL (.sql) 資料庫 (Big5 格式)
- 轉換 Dump 檔案編碼格式從 Big5 至 UTF-8
- 修改 .sql 檔加入 UTF-8 設定
- 從舊機器傳送網站目錄檔及 Dump MySQL (.sql) 至新機器上
新機器上作業
- 建立 UTF-8 編碼空資料庫
- 建立 Query MySQL 的使用者帳號
- 匯入 UTF-8 (.sql) Dump 檔案
- 修改連結至 MySQL 的 .php 內容 (mysql_pconnect)
- 轉換 .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