2012年2月9日 星期四

PHP 5.3.x 的 strtotime() 時區設定 警告訊息修正

Debian Linux 使用 testing 的話, 若於上星期有做過 dist-upgrade 的話, 就會發現 PHP 已經被升級到 5.3.1-5, 而且出現一堆警告訊息.
我遇到的有下面這三種錯誤訊息:
  1. PHP Warning:  strtotime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /tmp/a.php
  2. PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/imagick.so' /usr/lib/php5/20090626/imagick.so: cannot open shared object file: No such file or directory in Unknown on line 0
  3. PHP Deprecated:  Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/imagick.ini on line 1 in Unknown on line 0

strtotime() 修正

  • PHP Warning:  strtotime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /tmp/a.php
strtotime() 出現的這個警告是要我們先指定正確的時區(Timezone), 再來使用這個 function.
解法下述幾種 (挑其一即可, 建議用 1 或 3 的方法)
  1. 於 PHP 檔案內使用 date_default_timezone_set()
    ex:
    date_default_timezone_set('Asia/Taipei');
    echo strtotime('2010-03-01');
    ?>
  2. 設定 php.ini
    vim /etc/php5/apache2/php.ini # 於 php.ini 的 date.timezone
    ;date.timezone =
    改成
    date.timezone = "Asia/Taipei"
  3. 設定 php.ini (於 Debian 比較建議這樣做, 就不用去分別改 apache / cgi / cli 的 php.ini)
    vim /etc/php5/conf.d/date_timezone.ini # 於此檔案加下述
    date.timezone = "Asia/Taipei"

PHP Startup: Unable to load dynamic library 修正

  • PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/imagick.so' /usr/lib/php5/20090626/imagick.so: cannot open shared object file: No such file or directory in Unknown on line 0
發現下述這幾個都不見了 (php5-imagick, php5-mhash, php-apc)
  • /usr/lib/php5/20090626/apc.so
  • /usr/lib/php5/20090626/mhash.so
  • /usr/lib/php5/20090626/imagick.so
  • php5-mhash 已經包進去, 不需另外安裝, imagick、apc 目前還沒看到.
解法
  • rm /etc/php5/cli/conf.d/apc.ini /etc/php5/cli/conf.d/imagick.ini /etc/php5/cli/conf.d/mhash.ini

Comments starting with '#' are deprecated 修正

  • PHP Deprecated:  Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/imagick.ini on line 1 in Unknown on line 0
cat /etc/php5/cli/conf.d/imagick.ini # 第一行有個註解 "#"
解法
  • 在 PHP 5.3.x 這些 ext 的註解已經不建議使用 "#", 所以將這個註解拿掉, 或者將 "#" 改成 ";" 開頭即可. (開頭 ; 也是註解的意思)

2012年2月7日 星期二

Linux 掛載 USB 隨身碟

建立掛載點

mkdir /mnt/usb

查看目前磁碟的狀態
fdisk -l

掛載usb
mount /dev/sdc /mnt/usb

卸載usb
umount /dev/sdc

Linux掛載USB隨身碟for backup

mount 指令為將周邊裝置掛入的指令


格式:mount -t 檔案系統類型 -o 選項 裝置 掛入點

範例:mount -t iso9660 /dev/hdb /mnt/cdrom

——–若硬碟檔案系統為fat32

mount -t vfat /dev/hdb# /mnt/usb



ps. NTFS系統,Linux不支援,要另外下載driver(至少我的server是看不到的)

<準備工作>

1. mkdir /mnt/usb

2. 格式化usb隨身碟或是usb界面的硬碟

3. fdisk –l 查看目前磁碟的狀態(這樣才可以找到正確得usb編號#)

———————————–

* 掛載隨身碟



請拿出你的隨身碟並插入 Linux 主機的 USB 槽中!注意,你的這個隨身碟不能夠是 NTFS 的檔案系統喔! 接下來讓我們測試測試吧!



範例五:找出你的隨身碟裝置檔名,並掛載到 /mnt/flash 目錄中

[root@www ~]# fdisk -l

…..中間省略…..

Disk /dev/sda: 8313 MB, 8313110528 bytes

59 heads, 58 sectors/track, 4744 cylinders

Units = cylinders of 3422 * 512 = 1752064 bytes



Device Boot Start End Blocks Id System

/dev/sda1 1 4745 8118260 b W95 FAT32

# 從上的特殊字體,可得知磁碟的大小以及裝置檔名,知道是 /dev/sda1



[root@www ~]# mkdir /mnt/flash

[root@www ~]# mount -t vfat -o iocharset=cp950 /dev/sda1 /mnt/flash

[root@www ~]# df

Filesystem 1K-blocks Used Available Use% Mounted on

…..中間省略…..

/dev/sda1 8102416 4986228 3116188 62% /mnt/flash

如果帶有中文檔名的資料,那麼可以在掛載時指定一下掛載檔案系統所使用的語系資料。 在 man mount 找到 vfat 檔案格式當中可以使用 iocharset 來指定語系,而中文語系是 cp950 , 所以也就有了上述的掛載指令項目囉。



萬一你使用的是隨身硬碟,也就是利用筆記型電腦所做出來的USB磁碟時,通常這樣的硬碟都使用 NTFS 格式的~ 怎辦?沒關係,可以參考底下這個網站:(註8)



* NTFS 檔案系統官網:Linux-NTFS Project: http://www.linux-ntfs.org/

* CentOS 5.x 版的相關驅動程式下載頁面:http://www.linux-ntfs.org/doku.php?id=redhat:rhel5



將她們提供的驅動程式捉下來並且安裝之後,就能夠使用 NTFS 的檔案系統了! 只是由於檔案系統與 Linux 核心有很大的關係,因此以後如果你的 Linux 系統有升級 (update) 時, 你就得要重新下載一次相對應的驅動程式版本喔!

———————————-

檔案系統

minix Linux 最早使用的檔案系統

ext2 Linux 目前使用的檔案系統

msdos MS-DOS 的 FAT

vfat Windows 95 的 FAT32

nfs 網路檔案系統

iso9660 光碟格式

ntfs Windows NT 4.0 的檔案系統

hpfs OS/2 的檔案系統

auto 自動偵測

============================================

NTFS 與 FAT 及 FAT32 的比較

============================================

NTFS 執行 Windows 2000、Windows XP 或 Windows Server 2003 系列產品的電腦,可以存取本機 NTFS 磁碟分割上的檔案。執行 Windows NT 4.0 搭配 Service Pack 5 或更新版本的電腦可能可以存取部份檔案。其他作業系統則不允許進行本機存取。

雖然檔案無法大於檔案所在的磁碟區或磁碟分割,最大的檔案大小仍可到 16 TB 減 64 KB。



FAT32若要存取本機磁碟分割上的檔案,只能透過 Windows 95 OSR2、Windows 98、Windows Millennium Edition, Windows 2000、Windows XP,以及 Windows Server 2003 系列產品進行。

檔案大小上限為 4 GB。





http://linux.vbird.org/linux_basic/0230filesystem.php (Vbird)



http://technet.microsoft.com/zh-tw/library/cc779002%28WS.10%29.aspx



http://www.hoyo.idv.tw/software/OpenSource/command/mount.htm



http://blog.xuite.net/wizardyuy/pcblog/13024537



http://blog.blueshop.com.tw/miceyen/archive/2005/12/28/15676.aspx



掛載USB隨身碟

新增一個資料夾給隨身碟用例如 mkdir /mnt/usb, 再 mount /dev/sda1 /mnt/usb 即可
cd /mnt/usb 就可以讀usb內的資料了
註 : 可以下dmesg 看usb 使用哪一個名稱 sda1,sda2 or sda sdb

Apache配置之URL重寫

wordpress中的永久連結需要Apache支援url重寫,於是配置了一下。

1、修改apachehttpd.conf文件,將下面語句前的#去掉
#LoadModule rewrite_module modules/mod_rewrite.so
2、修改apachehttpd.conf檔,將對應的節中的AllowOverride None 改為AllowOverride All,如

Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
3、在需url重寫的目錄下建立.htaccess檔,wordpress在開啟永久連結後會只能生成,內容如下:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
效果就是如本文連結http://witmax.cn/apache-url-rewrite.html,其實並不存在這個目錄,而是通過url重寫由index.php來解析支持。

2012年2月6日 星期一

Drupal 備份與轉移



備份壓縮,相對路徑的範例:
tar -jpcv -f sites.tar.bz2 -C ~/public_html sites  (壓縮public_html/sites之下的資料)

解壓縮則是:
tar -jpxv -f sites.tar.bz2 -C ~/public_html/twtcsl  (不用放sites,會解成sites這個目錄)

MySQL:
備份
mysqldump -u 使用者 -p 資料庫> drupal.sql

還原
mysql -u 使用者 -p 資料庫 < drupal.sql

改sites/default/settings.php這個檔
$db_url = mysql://xxxx:xxxx@localhost/drupal';

clean_url 的問題。參考:http://drupal.org/node/367616

簡單說就是用回複雜的方式,要登入就是 網址?q=user  然後不管跳到哪頁都要加?q=,把clean_url先改掉,或是主機直接設定好就行。

主機設定clean_url的方式:http://drupal.org/node/15365

2012年2月2日 星期四

Linux全系統的備份與還原(系統轉移)

摘自Ubuntu的WIKI

1.以最高權限執行
sudo su -

2.切換到根目錄

cd /


3.使用tar指令

tar -cvpzf /路徑至備份檔.tgz   備份目錄 
tar -cvpzf /路徑至備份檔.tgz  --exclude=排除目錄1 --exclude=排除目錄2  --exclude= /路徑至備份檔.tgz (產生的備份檔當然要排除)  /
備份目錄
例子:
tar -cvpzf /backup.tgz   --exclude=/proc   --exclude=/lost+found  \
 --exclude=/backup.tgz   --exclude=/mnt --exclude=/sys /

分析:
tar -cvpzf /backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys /
就是中間加上排除的部分而己,記得產生的備份檔一定要排除 ,否則就沒完沒了了!

tar的參數
c - 新建一個備份文檔
v - 詳細模式, tar程式將在屏幕上實時輸出所有信息。
p - 保存許可,並應用到所有文件。
z - 採用‘gzip’壓縮備份文件,以減小備份文件體積。

應排除的目錄
/proc、/lost+found、/sys、/mnt、/media
另外額外分割區的東東也可以看看要不要加入


4.到新的機器還原
tar -xvpzf /backup.tgz -C /
mkdir /proc /lost+found /mnt /sys



看到這裡突然覺得,也可以利用這種方式來拷貝系統,否則替老師桌機
一台一台的灌Linux還是很累人的。
我的想法是將(a)做好的樣版機,(b)依上述步驟1-3備份成檔案後燒到DVD上

(c)再配合LiveCD開機將要安裝的機器(d)作好硬碟分割並格式化

(e)再將備份檔解到 /分割區內並建好排除的目錄

(f)再chroot 到新的分割區

(g)執行grub-install  /dev/sda (或grub-install  /dev/hda )將磁區資訊寫到MBR

系統異常關機修復方式 FSCK(慎用)

首先先開機進入 Single Mode ,以 FreeBSD 6 為例,開機選單按 4 即可進入 Single Mode
接下來進去後先按一下 Enter ,以我的系統為例,輸入下列指令

# mount -a
# df
/dev/da0s1a   10154158      70668   9271158     1%    /
devfs                1          1         0   100%    /dev
/dev/da1s1d 2055518950 1106617646 784459788    59%    /home
/dev/da0s1e   10154158    1037240   8304586    11%    /tmp
/dev/da0s1f   80729226   30448924  43821964    41%    /usr
/dev/da0s1d   81245672     800846  73945174     1%    /var
先確認有哪些目錄後,就一個一個 umont 做 fsck 修復的動作,修復完再 mount 回來
# umount /home
# fsck -y /home
# mount /home
若一開始連 / 都 mount 不起來的話,記得要先 fsck 根目錄才行唷!

用 du 將目錄中的總容量算出來

原始文章連結:http://phorum.study-area.org/viewtopic.php?t=16977

怎麼用 du 將目錄中所有目錄的總容量算出來?
要算的是目錄中各個子目錄分別的容量,指令可以這樣下...
#du -cSh /path/*

如果不懂的話...可以 man du ...用底下的方式..更一目了然囉...
#du -h --max-depth=2 /path/*

--max-depth=N
       print the total for a directory (or file, with --all) only if it
       is   N   or  fewer  levels  below  the  command  line  argument;
       --max-depth=0 is the same as --summarize 


du -f

SSH 安全設制

大部份的 ssh daemon 設定檔都是放在 /etc/ssh/sshd_config, 於 ssh 本身來說, 它自己就是一個安裝的遠端登入機制, 在您傳送的任何一筆資料都給予加密, 讓資料傳送之間更為安全. 但是政策上的考量, 安全的規劃上, 有些原本的條件可能太過於開放, 所以在此提供一些小技巧, 來達到更符合客制化的 ssh 環境.
以下的修改檔都是在 /etc/ssh/sshd_config, 而在修改完之後請重新啟動 sshd:
[root@rhel ssh]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
[root@rhel ssh]#
修改 ssh 聆聽埠
預設 sshd 是聆聽 port 22 的連接埠, 如果要更改請使用 Port 參數, Port 語法後面接著要讓 sshd 聆聽的連接埠口, 如果要一次聆聽多個, 那麼就再使用 Port 指定其它的連接埠, 以下會讓 sshd 重新聆聽 22 和 1234 的 Port.
Port 22
Port 1234
重新啟動 sshd 之後, 再使用 netstat 看看 22 和 1234 是否有被 listen.
[root@rhel ssh]# netstat -ntulp | egrep  '(sshd)|(PID)'
Proto  Recv-Q  Send-Q  Local Address  Foreign Address  State   PID/Program name
tcp         0       0  0.0.0.0:1234   0.0.0.0:*        LISTEN  9769/sshd
tcp         0       0  0.0.0.0:22     0.0.0.0:*        LISTEN  9769/sshd
[root@rhel ssh]#
限制以 root 以 ssh 方式登入
root 是個強而有力的帳號, 管理習慣上, 應該要避免使用 root 直接登入, 這樣可以養成使用一般權限登入的習慣, 另一個好處也是可以避免被使用字典攻擊 (即使用 root 帳號為主, 不斷猜測密碼). 下面的方法會讓 root 無法使用 ssh 登入.
PermitRootLogin no
設定 ssh 所聆聽的連線 IP
預設 sshd 是聆聽所有的 IP 位置 (0.0.0.0), 也包含 127.0.0.1 的本機 loop back IP, 如果要指定 sshd 只聆聽某個特定的 IP 時, 使用 ListenAddress 就可以達成, 大部份會這麼做的原因可能是在一台 Linux Getway 的主機上限制只有某些網段的 IP 才可以使用 sshd 登入. 下面的示範會讓主機聆聽 11.22.33.44 和 192.168.1.1 的介面 (不包含 127.0.0.1)
ListenAddress 11.22.33.44
ListenAddress 192.168.1.1
重新啟動之後看看 sshd 有沒有只 listen 指定的 IP Address.
[root@siva ssh]# netstat -ntulp | egrep '(sshd)|(PID)'
Proto  Recv-Q  Send-Q  Local Address      Foreign Address  State   PID/Program name
tcp         0       0  11.22.33.44:6211   0.0.0.0:*        LISTEN  9839/sshd
tcp         0       0  192.168.1.1:6211   0.0.0.0:*        LISTEN  9839/sshd
tcp         0       0  11.22.33.44:22     0.0.0.0:*        LISTEN  9839/sshd
tcp         0       0  192.168.1.1:22     0.0.0.0:*        LISTEN  9839/sshd
[root@siva ssh]#

Tar 指令詳解

備份程式:tar Function Options tarFiles [SomeFile?] SourceFiles?
將許多檔案包裝成一個檔案,並保留檔案權限、目錄結構、完整的符號連結和實體連結等相關訊息。
而在解開檔案時,會將原本時的目錄解開在目前的目錄底下。若要只解開部份檔案時,必須要加上在備份檔中該檔案的完整路徑。
一般的做法是:先將許多檔案用 tar 打包成一個檔案,再用 gzip 壓縮成FileName?.tar.gz。
如果將 tar Files 以 - 代替,表示輸出入至標準輸出入。如:
tar cvf -SourceFiles?| gzip -9 > tarFile.tar.gz
gunzip -9ctarFile.tar.gz| tar xvf -
Function:
c : 建立新的備份檔。
x : 將備份檔解開。
t : 列出備份檔的內容。
-T Sample : 備份在 Sample 中所列出的檔案清單。
r : 將檔案附加在這個備份檔案的後面。
u : 將備份檔內的檔案以更新的檔案取代。
d : 比較備份檔中的檔案和檔案系統中的檔案。
Options:
v : 列出處理檔案時的相關訊息。越多訊息越詳細。
k : 解開檔案時不要覆蓋已存在的檔案。
f FileName? : 指定備份檔的檔案名稱。
z : 和 gunzip 搭配使用,自動產生或解開壓縮後的備份檔。
j : 和 bzip2 搭配使用,自動產生或解開壓縮後的備份檔。
複製完整子目錄到另一個目錄中:
cd SourceDirectiory?
tar cf - . | (cd TargetDirectory?; tar xvf -)
備份一個子目錄:tar cvfBackup.tar /Direcory
分片備份:tar cvfMBackup.tar /Direcory

=====================================================================


1 tar

tar (tape archive) 原本是設計用來將文件打包到磁帶中的,我們也可以將檔案或是目錄打包成一個單一的檔案,必要時再用同一個程式來將資料全部還原或是只解開部份的資料,正因為它可以備份檔案或目錄,深受大家的愛用。
常用參數:
  • 指定動作 :
    • -c create,新增一個備份檔
    • -t list,顯示備份檔中的檔案清單
    • -x extract,解開備份檔中的檔案
  • 指定檔案:
    • -f file,讀/寫指定的檔案

       
  • 壓縮方式:
    • -z gzip,備份的東西要用 gzip 壓縮/解壓縮
    • -y bzip,備份的東西要用 bzip 壓縮/解壓縮,也可以用 -j
  • 其它:
    • -p permissions,保留原來的權限
    • -v verbose,備份的內容要顯示在畫面
    • -C (大寫 C),cd 先切換目錄
由於 tar 的功能非常的多,指令可用的選項令人眼花瞭亂,下面只示範最常用的,有興趣再自己用 man tar 好好的研究囉!

1-1 以 tar 打包要備份的資料

如果沒有什麼特殊需求,利用 tar 備份檔案只要用到 -c (新增) ,-p (保留權限設定),-f (指定檔名),頂多再加個 -v 看一下打包的過程。
例如:
tar -cpvf /home/backup/etc.tar /etc
上例將 /etc 目錄中所有的檔案打包到 /home/backup/etc.tar 中。
也可以同時備份多個目錄,將要打包的清單(以空白分隔)接在最後面即可。下面的例子將 /etc , /usr/local/etc 打包在 etc.tar 中:
tar -cpvf /home/backup/etc.tar /etc /usr/local/etc
我們也可以使用:
tar -czpvf /home/backup/etc.tgz /etc
和前面的例子比較,多了個參數 z ,也就是將 tar 打包完的檔案再利用 gzip 壓縮,所以新產生有經過壓縮處理的備份檔我們也將檔名命名為 etc.tgz (.tgz 結尾),也有人用 .tar.gz ,端看個人習慣。
咦~好奇的人可能會想到 FreeBSD 的 packages 檔名好像叫 *.tgz 或 *.tbz,和 tar , gzip , bzip 有沒有關啊?有興趣可以找個 FreeBSD 的 package ,用 tar 來打開包裝看看哦!!
另外,比較一下這兩個同樣是備份 /usr/local/etc 的指令有何不同?
tar -czvf /home/backup/local.etc.1.tgz /usr/local/etc
tar -czvf /home/backup/local.etc.2.tgz -C /usr/local etc
由於 tar 預設在備份時會儲存檔案的路徑 (但是自動去掉開頭的第一個斜線) ,也就是 /usr/local/etc/rc.d 在 local.etc.1.tgz 中會變成 usr/local/etc/rc.d,如果我們連 usr/local 都不想要,打包時可以利用 -C (大寫字母) 這個參數來控制路徑的保留層次,像前面第二個例子加了 -C /usr/local ,tar 會先切換至 /usr/local 目錄才備份 etc,所以在 local.etc.2.tgz 中 /usr/local/etc/rc.d 變成 etc/rc.d 儲存起來。

1-2 查看 tar 打包的檔案

要查看以 tar 打包的檔案只要利用 -t 這個動作參數即可。
例如:
tar -tvf /home/backup/etc.tar
上例會將 /home/backup/etc.tar 中的檔案清單顯示出來。
如果備份時有用 gzip 壓縮過則可以加上 -z
tar -tzvf /home/backup/etc.tgz
如果備份時用 bzip 壓縮過則加上 -y 或是 -j
tar -tyvf /home/backup/etc.tbz

1-3 解開 tar 打包的檔案

要解開 tar 封裝的檔案是利用 -x 這個動作參數,再搭配 -z , -y (-j) 解壓縮。如果想保留原來的權限設定則要記得使用 -p,至於要不要使用 -C (大寫字母) 則要看當初在打包時有沒有使用及自己想要放置的路徑而定,最容易犯的毛病大多是解錯路徑,所以在使用 -x 解開時一定要記得先用 -t 查看一下當初是怎麼打包的,最保險的方法是先解到一個暫存的地方,再將需要的檔案複製/搬移到目的地。
將 /home/backup/etc.tgz 中的東西在目前所在的目錄解開:
tar -xzvf /home/backup/etc.tgz
將 /home/backup/etc.tgz 中的東西在 /home 中解開:
tar -xzvf /home/backup/etc.tgz -C /home
將 /home/backup/etc.tgz 中的東西在 /home 中解開,並保留原始的權限:
tar -xzpvf /home/backup/etc.tgz -C /home

1-4 只解開 tar 打包的部份檔案

只解出 /home/backup/etc.tgz 中的 etc/group , etc/master.passwd 兩個檔案:
tar -xzvf /home/backup/etc.tgz etc/group etc/master.passwd
將 /home/backup/etc.tgz 中凡是叫 etc/rc* 通通解開,其它的不要:
tar -xzvf /home/backup/etc.tgz 'etc/rc*'
將 /home/backup/etc.tgz 中的檔案解開,但是 rc.d 目錄中的東西不要:
tar -xzvf /home/backup/etc.tgz --exclude='rc.d/*'
以上提到的方法也可以應用在打包時 (-c) 及查看清單時 (-t) 。

1-5 利用 tar 直接複製整個目錄到另一個目錄中

利用 tar 和 pipe 的技巧,可以做整個目錄直接複製,不過這個方法並不保證完整哦,畢竟它的方式不若 dump + restore 完備。
假設我想把 /usr 中所有的東西複製到 /mnt/usr 中,就執行底下的指令:
tar cf - /usr | (cd /mnt ; tar xvfBp -)


2 dump 及 restore

前面提過的 tar 可以針對目錄或檔案來備份,而 dump 則是以 block 為處理單位,針對整個檔案系統(分割區)來備份,可以更完整的保持系統的原貌不會有所缺漏,以 dump 備份的資料可以用 restore 再還原回來。

2-1 以 dump 將整個 partition 備份至一個檔案

使用過 Norton ghost 的人應該知道裡面有個選項是將 MS Windows 或 Linux 系統的某個分割備份到映像檔中,下面則是利用 dump 做類似的動作,將某個分割區備份至一個檔案。
假設 /home 是一個單獨的分割區 (/dev/ad0s1h),而 /backup 是一個空間夠大的目錄,我們可以執行:
# dump -0uaf /backup/home.dump /home
上面的例子以 level 0 將 /home 所在的分割區備份至 /backup/home.dump 中。
參數說明:
  • -0 以 level 0 備份,也就是完整備份,level 可以為 0~9,level 1 則只備份 level 0 後有異動的部份。
  • -u update,備份完成後自動更新 /etc/dumpdates 的內容(記錄分割區代號、level、備份日期)。
  • -a auto-size,略過可儲存空間大小的檢查。
  • -f file,將備份的資料輸出到後面參數指定的檔案,也可以是一個硬體(device file)或是標準輸出 (-)。

2-2 以 restore 還原檔案

以 dump 備份的分割區我們可以用 restore 將檔案還原出來,就像利用 ghost 把映像檔再寫入 partition 一樣,不過 restore 也可以只解出部份檔案。不過在使用 restore 要注意的是,restore 並不會幫我們將 partition 做格式式,而且,它是將內容解在目前所在的目錄,所以要記得先做好格式化並切換到要還原的目錄。
例如想把 /home dump 完的備份 ( /backup/home.dump ) 還原到 /mnt/new (/dev/ad1s1e) 這個 partition 中,如果 /dev/ad1s1e 已經格式化好,而且已經 mount 到 /mnt/new ,就可以執行以下指令:
# cd /mnt/new
# restore -rf /backup/home.dump
完成後,/mnt/new 就可以看到原來 /home 的中的資料。
如果只想還原備份中的部份檔案怎麼辦呢?
restore 提供 -i 的參數來進行交談式的還原,我們可以利用這個方法來指定要還原的部份,例如,只想由 /home 的備份檔 home.dump 中還原 /home/gsyan , /home/students 的資料,我們可以執行:
# restore -if /backup/home.dump
出現 restore > 的提示符號後,我們就可以下指令,例如:輸入問號 (?) 即可列出可用的指令
restore > ?
Available commands are:
ls [arg] - list directory
cd arg - change directory
pwd - print current directory
add [arg] - add `arg' to list of files to be extracted
delete [arg] - delete `arg' from list of files to be extracted
extract - extract requested files
setmodes - set modes of requested directories
quit - immediately exit program
what - list dump header information
verbose - toggle verbose flag (useful with ``ls'')
help or `?' - print this list
If no `arg' is supplied, the current directory is used

 
為了達到範例的目標,我們要用 add 來新增要還原的檔案清單,用 extract 執行還原,下面是還原出 /home/gsyan 及 /home/studens 至目前分割區的步驟,黑體字的部份是自行輸入的部份:
restore > add gsyan students
restore > extract
You have not read any tapes yet.
If you are extracting just a few files, start with the last volume
and work towards the first; restore can quickly skip tapes that
have no further files to extract. Otherwise, begin with volume 1.
Specify next volume #: 1
set owner/mode for '.'? [yn] y
restore >
 
要結束只要輸入 quit 按 Enter 鍵即可跳出 restore 。

2-3 以 dump 及 restore 做 partition 對 partition 的對拷

將分割區 dump 給標準輸出,再讓 restore 由標準輸入還原在新的 partition 就能達到 partition 對 partition 對拷的目的,底下是進行對拷的流程:
    1. 切好新的 partition
    2. 以 newfs 將 partition format 好
    3. 將新的 partition mount 好
    4. 切換至新的 partition 中
    5. 以 dump & restore 進行備份及還原
※ 1-2 的步驟可以執行 /stand/sysinstall ,然後選取 Configure 利用裡面的 Fdisk 和 Label 進行分割及格式化
例如:想要將 /home (/dev/ad0s1h) 上的所有資料備份到新硬碟上的 partition (/dev/ad2s1h),執行
# newfs /dev/ad2s1h (如果已經格式化過則可省略)
# mount /dev/ad2s1h /mnt (如果已經 mount 好則可省略)
# cd /mnt
# dump -0uaf - /home | restore -rf -
# cd /
# umount /mnt
特別注意 dump 及 restore 並沒有指定檔名,而都用了一個減號 ( - ),對 dump 來說,是將 partition 的資料一個 block 一個 block 的送向標準輸出,而 restore 則是由標準輸入讀入並還原。

2-4 以 dump & restore 備份整顆硬碟

如果想將整顆硬碟的資料拷至另一顆新硬碟,以最笨的方法就是先用 /stand/sysinstall 將新硬碟切割好,再利用 dump & restore 把各 partitions 一一對拷即可,程序如下:
  1. 將新硬碟接好後,以重新開機。

     
  2. 執行 /stand/sysintall
    • 選取 Configure
    • 選取 Fdisk 切給 FreeBSD 用的 partions
    • 選取 Label 進入 Disklabel Editor
    • 注意:在設定 disklabel 時 mount point 要先照原來的架構設定
    • 在存檔前先移到各 partition 後按 M 修改 mount point 至 /mnt 下的暫存目錄,不然可能會有錯誤
    • 按 W 存檔並開始 format New H.D. (newfs)

       
  3. 離開 sysinstall

     
  4. umount -A 解除所有 mount 上來的 filesystem

     
  5. mount -a 重新掛上系統預設的 filesystem

     
  6. 開始備份各 partition

     
  7. 將新硬碟的 / (例如:/dev/da1s1a) 掛上來

    mount /dev/da1s1a /mnt
  8. 將新硬碟 /etc/fstab 中的 /dev/xxx 改成合適的

    ee /mnt/etc/fstab

2-5 dump + ssh 進行異地備份

dump 和 restore 其實有相對應的 rdump 和 rrestore 可進行遠端的備份及還原,不過 r 系統的指令的安全性較需考量,我們可以利用 ssh 來進行較安全的連線。
假設現在想把名為 mail 上掛在 /home 的這個 partition 異地備份至名為 bkserver 主機上的 /backup 目錄 ,我們可以進行以下程序來備份。
  • 準備工作
    • 在 bkserver 上準備一個備份登入用的專用帳號,假設就叫 bk 好了!!
    • 檢查 bkserver 備份專用的目錄 /backup 是否可被備份專用帳號 ( bk ) 寫入。
    • 在 mail 上因為要執行 dump 必須是 root ,所以屆時必須由 root 執行 ssh 遠端登入 bkserver,所以要為 mail 上 root 以 ssh-keygen 準備登入用的 "公開金鑰" 。
    • 將 root@mail 的公開金鑰置入 bkserver 上帳號 (bk) HOME 的 .ssh/authorized_keys 中。
  • 進行備份
準備工作中比較麻煩的部份應該遠端登入用的金鑰,製作流程如下:

2-5-1 連線測試

我們先在 mail 上以 root 的身份登入 mail,然後遠端登入 bkserver (假設在 bkserver 上已經建好 bk 這個帳號)
# ssh bk@bkserver
如果是第一次連線,應該會出現下面的問題詢問是否儲存遠端主機的識別資料,類似下面:
The authenticity of host 'bkserver.test.edu.tw (192.168.1.5)' can't be established.
DSA key fingerprint is 2b:cc:89:80:bc:77:45:83:47:ae:b6:29:51:f5:15:33.
Are you sure you want to continue connecting (yes/no)?
輸入 yes 即可,ssh 會將資料存入 ~/.ssh/know_hosts ,下次就不會有同樣的問題。
接著輸入 bk 的登入密碼,如果成功登入就完成連線測試,輸入 exit 登出,準備進行登入用金鑰的製作。

2-5-2 製作金鑰

我們希望在進行遠端備份能夠不用輸入密碼自動登入遠端主機執行備份儲存的工作,所以要先在 mail 上用 ssh-keygen 來產生 ssh 登入用的金鑰對。
先確認已經在本機 ( mail ) 上用執行 dump 指令的 root 帳號登入哦!然後由 root 執行:
ssh-keygen -d
接著應該會出現以下的對話:
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
a6:62:05:95:92:79:2a:71:2d:73:3b:7d:0e:e7:39:26 root@mail.test.edu.tw
如果希望登入時不用輸入密碼直接登入,只要通通按 Enter 回所有問題即可。
執行完會在 /root/.ssh 中產生 id_dsa 和 id_dsa.pub ,後面那個就是我們要放在 bkserver 裡 bk 帳號下的金鑰。
接著我們要把 /root/.ssh/id_dsa.pub 複製到遠端主機 (bkserver) 裡備份專用帳號 (bk) 個人目錄的.ssh/authorized_keys 中。
如果 bkserver 的 ~bk/.ssh/authorized_keys 不存在,我們直接把前面在 mail 上 root 帳號產生的 id_dsa.pub 上傳過去即可,在 mail 上以 root 執行:
scp ~/.ssh/id_dsa.pub bk@bkserver:.ssh/authorized_keys
不過要記得先幫 bk 建好 .ssh 的目錄哦!不然會發生錯誤。
如果 authorized_keys 早已存在,我們可以先將 id_dsa.pub 傳到 bkserver 上,然後再將 id_dsa.pub 中的內容貼到 ~bk/.ssh/authorized_keys 新的一行。
如果前面的步驟完成了,我們在 mail 以 root 執行 ssh bk@bkserver 應該就可以不用輸入密碼遠端登入囉!

2-5-3 遠端備份

做好前面的準備工作後,我們就可以在 mail 上將某個 partition 備份到位於遠端的 bkserver 上了。
例如:
# dump -0uaf - /home | ssh -c blowfish bk@bkserver dd of=/backup/mail.home.dump
上面的例子在 mail 上執行,將掛在 mail /home 的 partition 備份起來,並以 bk 帳號遠端登入 bkserver 儲存在 bkserver 的 /backup/mail.home.dump 裡。
如果想省一些空間則可以順便用 gzip 壓縮後再傳給 bkserver,指令改為:
# dump -0uaf - /home | gzip -2 | ssh -c blowfish bk@bkserver \
dd of=/backup/mail.home.dump

2012年2月1日 星期三

CentOS 5 MySQL 設定檔 - my.cnf 的位置

在CentOS以yum安裝MySQL後,
設定檔範例會放在:
1. CentOS 5.x: /usr/share/mysql
2. CentOS 4.x: /usr/share/doc/mysql-server-4.1.27 (最後一層目錄名稱依MySQL版本會有所不同)
會有根據主機記憶體大小不同有各個合適的範本可以使用:
my-huge.cnf
my-innodb-heavy-4G.cnf
my-large.cnf
my-medium.cnf
my-small.cnf

自動封鎖暴力入侵:Fail2ban


這陣子觀察系統紀錄,發現每天都有不同的IP一直不斷的測試FTP的帳號及密碼,為了安全起見在網路上找到這篇介紹文章。
安裝說明如下 (我用的系統是CertOS 5.x)
Fail2ban  用途在於偵測錯誤登入而對其IP進行封鎖
1. 安裝需求套件python(這裡使用redhat的YUM 線上安裝套件管理程式)
yum install python python-devel gamin-python
2.安裝fail2ban
這邊我使用 RPM 安裝
b.安裝指令
rpm -ivh fail2ban-0.8.1-1.el5.rf.noarch.rpm
我主要是針對Proftpd防護,SSH我是設定防火牆所IP的。
修改fail2ban的設定檔
# vim /etc/fail2ban/jail.conf
[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
# 不列入的 IP 範圍,如果有二組以上以空白做為間隔 192.168.250.0/24ignoreip = 127.0.0.1
# "bantime" is the number of seconds that a host is banned.
# 設定 IP 被封鎖的時間(秒),如果值為 -1,代表永遠封鎖
bantime  = 600    (這邊是預設值)
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
# 設定在多少時間內達到 maxretry 的次數就封鎖
findtime  = 600
# "maxretry" is the number of failures before a host get banned.
# 允許嘗試的次數
maxretry = 3
[ssh-iptables]
enabled  = true
filter      = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
                 mail-whois[name=SSH, dest=root]
logpath  = /var/log/secure
# 如果有個別的次數設定就設在這裡
maxretry = 5
針對Proftpd防護 (我的系統是用Proftpd ,CentOS 預設是 vsftpd)
[Proftpd-iptables]
enabled  = true
filter   = Proftpd
action   = iptables[name=PROFTPD, port=ftp, protocol=tcp]
                   sendmail-whois[name=PROFTPD, dest=root]
logpath  = /var/log/message (這邊請修改為你的Proftp的記錄檔)
maxretry = 3           (錯誤次數)
bantime  = 1800    (鎖定時間)
修改後請存檔離開
啟動服務: service  fail2ban start
查看防火牆設定,使用 iptables -L -nv   會看到以下兩條紀錄
Chain fail2ban-SSH (1 references)
target     prot opt source               destination
RETURN     0    --  anywhere             anywhere
Chain fail2ban-ProFTPD (1 references)
 pkts bytes target          prot opt in     out     source               destination
  117  5756 RETURN     all  --         *      *       0.0.0.0/0            0.0.0.0/0
最後設定開機啟動fail2ban 指令:
# chkconfig fail2ban on
                              http://blog.pmail.idv.tw/index.php?id=318&load=read
補充內容
今天上班發現流量異常,並且主機顯的很忙碌,,查詢紀錄發現郵件伺服器一直有個IP不斷的測試轉信,網路上找到解決方式,用之前就安裝fail2ban
所以就把以下功能補上!!
Using Fail2ban with Dovecot
新增郵件過濾的檔案 Create the filter file /etc/fail2ban/filter.d/dovecot-pop3imap.conf
[Definition]
failregex = (?: pop3-login|imap-login): (?:Authentication failure|Aborted login \(auth failed|Aborted login \(tried to use disabled|Disconnected \(auth failed).*rip=(?P\S*),.*
ignoreregex =
將以下規則加到 /etc/fail2ban/jail.conf 設定檔中
Add the following to /etc/fail2ban/jail.conf
[dovecot-pop3imap]
enabled = true
filter = dovecot-pop3imap
action = iptables-multiport[name=dovecot-pop3imap, port="pop3,imap", protocol=tcp]
logpath = /var/log/maillog
maxretry = 20
findtime = 1200
bantime = 1200
記得重新啟動 fail2ban   指令為 service fail2ban restart

2012年1月31日 星期二

Centos上安裝phpmyadmin


1. 參照鳥哥, 打入以下命令
[root@linux ~]# yum install httpd mysql-server php php-devel php-mysql

2.由於yum安裝的php版本關係(5.1.6), phpmyadmin首頁下載 phpMyAdmin-2.11.9.6-all-languages-utf-8-only.tar

3.解壓縮後, 放至 /var/www/html 並建議更名為phpmyadmin

4. phpmyadmin目錄下, 下這行指令
   cp config.sample.inc.php config.inc.php

5. 編輯config.inc.php, 並存檔
   /* Authentication type */
   $cfg['Servers'][$i]['auth_type'] = 'http';

6. 確定是否 關閉SELinux:
   修改/etc/selinux/config文件中的SELINUX="" disabled
   ...
   SELINUX=disabled
   ...
   然後重新開機

7. 記得更改目錄權限
   chmod -R 755  /var/www/html/phpmyadmin 記得別用777!!!

8.打開phpmyadmin之後, 如果看到以下訊息:
  找不到 PHP 內的 mbstring 編碼模組, 沒有這個模組, phpMyAdmin 無法準確地分割雙字元文字, 而可能產生問題.
  請在安裝 php-mbstring , :
  yum install php-mbstring  就可以了

2012年1月30日 星期一

php與mysql降級過程

php與mysql降級過程:

 
1.移除php-->yum remove php

2.移除mysql-->yum remove mysql

3.移除被remi更新的相關套件-->yum remove *remi

4.檢查有無之前更新的remi安裝的套件(rpm -qa|grep remi),若有記得利用(yum remove *remi)移除,或是用(rpm -e)手動移除。

5.移除epel與remi:
yum remove epel-release-5-3  -->  會將相關套件 remi-release-5-7 一起移除。

6.利用yum install 裝回php與mysql
yum install php
yum install mysql

7.檢查設定檔與相關的套件

8.重新啟動Apache與mysql

2012年1月29日 星期日

備份 mysql 和 drupal

基本上我們只要備份 /var/www/html 和 /var/lib/mysql 目錄即可.方法有兩種
1.利用 Linux 的 bash script 加上 cron 來自動備份.
2.利用 backup module 手動來備份
1.利用 Linux 的 bash script 加上 cron 來自動備份.
Backup
備份 web
[root@benjr ~]# mkdir -p /backup/`date +%F`
[root@benjr ~]# cd /backup/`date +%F`
[root@benjr 2007-12-26]# tar zcvf drupal.tar.gz /var/www/html
接下來備份資料庫
[root@benjr 2007-12-26]# mysqldump -u root -p database.name > mysql.sqlEnter password:
#其中的 database 請依你實際的 database 名稱,我的 database 名稱為 drupal.
[root@benjr 2007-12-26]# tar zcvf mysql.tar.gz mysql.sql
[root@benjr 2007-12-26]# rm mysql.sql
你還可以透過 bash script 加上 cron 讓他每天執行一次
shell script-Full Backup 程式
[root@benjr ~]# vi /root/backup.sh
#! /bin/bash
mkdir -p /backup/`date +%F`
cd /backup/`date +%F`
tar zcvf drupal.tar.gz /var/www/html
mysqldump -u root -p[yourpassword] database > mysql.sql
tar zcvf mysql.sql.tar.gz mysql.sql
rm mysql.sql

#-p[yourpassword] -p 和 [yourpassword] 中間沒有空格.
記得權限要改成可執行,當然沒有人要自己手動備份這些東西,最好是系統能自己備份,所以可以用 crontab 來幫我們.
[root@benjr ~]# chmod a+x backup.sh
[root@benjr ~]# crontab -e
0 2 * * * /root/backup.sh
我們的備份策略為每天晚上兩點做一次 full backup
Restore
還原 web
[root@benjr /]# cd /
[root@benjr /]# cp /backup/`date %F`/* ./
[root@benjr /]# tar zxvf drupal.tar.gz
還原資料庫
[root@benjr html]# cd /backup/`date %F`/
[root@benjr 2007-12-26]# tar zxvf mysql.sql.tar.gz
[root@benjr 2007-12-26]# mysql -u root -p
Enter password:
mysql > create database drupal;
mysql> grant all privileges on drupal.* to drupaluser@localhost identified by 'your.password' ;
mysql > exit;
[root@benjr 2007-12-26]# mysql -u root -p drupal < mysql.sql
Enter password:
當然光是備份還不能滿足我們的需求,最好這些資料都能丟到遠端,以防止系統無法開機.這邊提供一個指令 mutt ,這是一個 mail 的指令,比起傳統的指令 mail 他還可以夾檔來傳送你的 mail.
[root@benjr backup]# mutt -s "benjr.tw `date +%F` backup" -a /backup/`date +%F`.tar.gz benjr.tw@gmail.com < /root/mail.txt
mutt 參數
-s:信件主旨
-a:夾附檔案
-b:密件副本
-c:副本
< /root/mail.txt mail 的內文,請自行產生並決定內容.
date 參數
%F: full date; 和指定 %Y-%m-%d 一樣.
%Y:顯示年份
%m:顯示月份
%d:顯示日期
bash 參數
` `:此符號為數字鍵 1 旁的 ~ 鍵,在` `中的指令優先執行,並將結果套用目前指令。
所以 backup.sh 就需要在修改一下了.
[root@benjr backup]# vi /root/backup.sh#! /bin/bash
mkdir -p /backup/`date +%F`
cd  /backup/`date +%F`
tar zcvf  drupal.tar.gz /var/www/html
mysqldump -u root -p123456 drupal > mysql.sql
tar zcvf mysql.sql.tar.gz mysql.sql
rm mysql.sql
cd /backup/
tar zcvf `date +%F`.tar.gz /backup/`date +%F`
mutt -s "benjr.tw `date +%F` backup" -a /backup/`date +%F`.tar.gz benjr.tw@gmail.com < /root/mail.txt
如果你還不滿意這 bash script 太陽春,Drupal 有提供 backup/restore 的 bash script 可共使用. http://drupal.org/node/59369
2.利用 backup module 手動來備份(這個模組在實際使用上有很多的問題,還是建議直接使用 bash script來做)
可以利用此模組在網站的根目錄(/var/www/html/files/backup) 建立backup的壓縮檔,包含 Drupal 的檔案和mysql的資料庫,並且可以透過瀏覽器下載整個的備份.
Backup module的網頁為http://drupal.org/project/backup
1.在他的官方網頁下載 "backup.module" ,放在目錄 /var/www/html/modules/ 下.
[root@benjr ~]# cp backup-5.x-3.0.tar.gz /var/www/html/modules
[root@benjr ~]# cd /var/www/html/modules
[root@benjr modules]#  tar -zxvf backup-5.x-3.0.tar.gz
2. 第一步就是在管理頁面的管理/網站建置/模組將 backup 啟動.
3. 在管理中的內容管理會多出一個 "backup" 選項.直接點選就可以開始做 backup 的動作.
NOTE: 目前這個模組只支援 MySQL 為資料庫系統.

【CentOS】lighttpd php mysql-LAMP 架設

【CentOS】lighttpd php mysql-LAMP 架設

來源:http://www.centerbbs.com/redirect.php?tid=25680&goto=lastpost


【前言】

[LAMP - Wikipedia] 應該不用多說了吧,不過本次實作 Web Server 不是使用 Apache,而是使用小而輕巧的 Lighttpd-輕量級 Web Server,不知是不是應該改叫 LLMP (Linux Lighttpd MySQL PHP) :p

【作業環境】

CentOS 5.1 (Linux 2.6.18-53.1.4.el5)

mysql-server-5.0.22-2.2.el5_1.1

lighttpd-1.4.18-1.el5.rf

php-5.1.6-15.el5

php-mysql-5.1.6-15.el5

【安裝及設定】

MySQL

Step1.安裝 MySQL Database

我使用郡組安裝把相關會用到的套件都裝入,在安裝以前先查看會安裝哪些套件
複製內容到剪貼板
代碼:
#yum groupinfo "MySQL Database"            //查尋 MySQL 郡組套件會安裝哪些套件
Group: MySQL Database
  Description: This package group contains packages useful for use with MySQL.
  Mandatory Packages:                       //強制安裝套件
    mysql
  Default Packages:                         //預?#93;會安裝的套件
    unixODBC
    mysql-server
    MySQL-python
    mysql-connector-odbc
    libdbi-dbd-mysql
    perl-DBD-MySQL
  Optional Packages:                        //建議安裝 (視個人需求自行安裝)
    mod_auth_mysql
    mysql-devel                             //MySQL ?#123;式?#125;發套件及函式庫
    qt-MySQL
    mysql-bench                             //MySQL 效能測試套件
    php-mysql
接下來就利用 yum 來進行郡組安裝 MySQL 吧
複製內容到剪貼板
代碼:
#yum groupinstall "MySQL Database"
你可能會問說怎麼沒有 MySQL-shared (MySQL 用戶端函式庫套件),這個套件若需要就到[MySQL Download]找對應的 MySQL 版本及需要的 rpm 來安裝吧。

Step2.修改 /etc/my.cnf

我想將 DB 放置資料夾從預設的 /var/lib/mysql 改放到 /home/db/mysql 下,我喜歡集中管理 :p
複製內容到剪貼板
代碼:
#mkdir /home/db ; mkdir /home/db/mysql
#chown mysql:mysql /home/db/mysql
#vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql                //預?#93;值
datadir=/home/db/mysql                //修改後
再來就是執行 chkconfig 將 mysqld 設定在 runlevel 2 ~ 5 為啟動 MySQL 服務
複製內容到剪貼板
代碼:
#chkconfig mysqld on
#chkconfig --list |grep mysqld        //查看?#93;定是否生效
mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off
Step3.啟動 MySQL
複製內容到剪貼板
代碼:
#/etc/rc.d/init.d/mysqld start        //啟動 MySQL 服務
Initializing MySQL database:  Installing all prepared tables Fill help tables
Starting MySQL:                                            [  OK  ]
檢查 MySQL 是否啟動成功並 Listen 相關 Port
複製內容到剪貼板
代碼:
#netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN
Step4.設定 MySQL 管理者密碼

剛安裝完 MySQL 後記得趕快設定管理者密碼 (這裡的 root 跟 CentOS 的 SuperUser Root 沒關系哦!!)
複製內容到剪貼板
代碼:
#mysqladmin -u root password YOUR_PASSWORD     //?#93;定新密碼
#mysqladmin -u root -p password NEW_PASSWORD   //日後若要更改密碼
Step5.測試登入 MySQL

設定好 MySQL 管理者密碼後試著登入看看吧:p
複製內容到剪貼板
代碼:
#mysql -u root -p
Enter password:                                //輸入剛才?#93;定的 MySQL 密碼
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1581 to server version: 5.0.27
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>                                         //成功登入 mysql
Step6.建立其它 MySQL 帳號

以下命令為表示允許連線主機來源是 localhost 以 sqluser1 的 MySQL 帳號及密碼為 1234 登入的使用者,能對指定的資料庫 testdb 擁有所有權限。
複製內容到剪貼板
代碼:
mysql> grant all privileges on testdb.* to sqluser1@localhost IDENTIFIED BY '1234';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES ;             //重新載入(使變更生效)
Query OK, 0 rows affected (0.01 sec)
Lighttpd

Step1.安裝 lighttpd、lighttpd-fastcgi 套件

因為 Lighttpd 使用 FastCGI 來處理 PHP 所以要一併安裝
複製內容到剪貼板
代碼:
#yum -y install lighttpd lighttpd-fastcgi
Step2.修改 lighttpd 設定檔

修改 lighttpd 設定檔來支援 PHP (FastCGI)
複製內容到剪貼板
代碼:
#vim /etc/lighttpd/lighttpd.conf
server.modules = (
                   "mod_fastcgi",   //這行的 mark 要拿掉(支援 PHP-FastCGI)
                  )
#### fastcgi module
## read fastcgi.txt for more info
## for PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini
fastcgi.server             = ( ".php" =>
                               ( "localhost" =>
                                 (
                                   "socket" => "/var/run/lighttpd/php-fastcgi.socket",     //預?#93;值
                                   "socket" => "/tmp/php-fastcgi.socket",                  //修改後
                                   "bin-path" => "/usr/bin/php-cgi"
                                 )
                               )
                              )
Step3.設定開機自動啟動 lighttpd 服務

使用 chkconfig 指令來查看 lighttpd 在各 runlevel 下狀態
複製內容到剪貼板
代碼:

#chkconfig --list |grep lighttpd
lighttpd        0:off   1:off   2:off   3:off   4:off   5:off   6:off  
設定 lighttpd 在 runlevel 為 2、3、5 時會啟動服務
複製內容到剪貼板
代碼:

#chkconfig --levels 235 lighttpd on      
檢查剛才的設定是否生效
複製內容到剪貼板
代碼:

#chkconfig --list |grep lighttpd
lighttpd        0:off   1:off   2:on    3:on    4:off   5:on    6:off  
Step4.啟動 lighttpd 服務
複製內容到剪貼板
代碼:

#/etc/rc.d/init.d/lighttpd start
Starting lighttpd:                                         [  OK  ]  
檢查一下 lighttpd process 是否執行
複製內容到剪貼板
代碼:
#ps ax |grep lighttpd
4266 ?        S      0:00 /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf
檢查是否 LISTEN Port 80
複製內容到剪貼板
代碼:
#netstat -tnl |grep :80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN
PHP

Step1.安裝 PHP 5

安裝 php 及 php-mysql 套件
複製內容到剪貼板
代碼:
#yum -y install php php-mysql
Step2.查尋安裝 PHP 是否成功

查看安裝的 PHP 版本
複製內容到剪貼板
代碼:
#php -v
PHP 5.1.6 (cli) (built: Sep 20 2007 10:16:10)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
查看目前 PHP 模組
複製內容到剪貼板
代碼:
#php -m
[PHP Modules]
bz2
...略
xml
zlib
[Zend Modules]
Step3.測試 Lighttpd 能否正確處理 php 檔案

隨意建立一個檔名為 test.php 的檔案,然後放到 lighttpd 的 web 目錄而 test.php 內容如下如果能看到 php 的預設頁就表示 lighttpd 能正確處理 php 檔案了
複製內容到剪貼板
代碼:
phpinfo>  
【參考】

[學生用伺服器建置流程(CentOS 5 版)PHP & MySQL]

[台灣PHP聯盟 - 在 RHEL 修改 mysql 放置資料的路徑]

[Jamyy's Weblog: 架設自己的即時訊息伺服器 - 使用 jabberd 2]

【Log】