2011
Aug
27

網頁好讀版

RedHat Linux 安裝 & 設定

安裝 Linux 必要軟體

  • samba : 與 windows 分享網芳
  • editor : vi , vim , emacs 等編輯器
  • develope : gcc, g++, java 等編譯器

環境變數設定

  • env : 輸入這個指令,可以看環境變數有那些
  • cat /etc/sysconfig/i18n :看有裝那些語言
  • 若是中文有亂碼的問題,則輸入 export LANG=zh_TW.UTF-8
  • 在 .bash_profile 加上 export LANG=zh_TW.UTF-8
Example
  1. LANG="en_US.UTF-8"
  2. SUPPORTED="zh_CN.UTF-8:zh_CN:zh:zh_TW.UTF-8:zh_TW:zh:en_US.UTF-8:en_US:en"
  3. SYSFONT="latarcyrheb-sun16"
  • LC_TIME=C
  • PATH=$HOME/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/sbin

sudo 功能

xxx is not in the sudoers file. This incident will be reported

解法:/etc/sudoers 加入username?? ALL=(ALL) ALL

sudo 的時間過短,每次都要打 sudo很煩的話。

修改/etc/sudoers: Defaults:endolith timestamp_timeout=7200 ,將時間延長即可
user ALL = NOPASSWD: ALL #設定成用sudo不需要密碼

sudo: sorry, you must have a tty to run sudo

修改/etc/sudoers: 刪除 Defaults requiretty

要改 /etc/sudoers ,請使用 sudo visudo , 使用 visudo ,存檔時,他會幫你檢查語法是否正確,不然你改壞掉了,馬上sudo就失效不能用了XD。

剛剛在 Amazon EC2 親身經歷一次,官方解法是再建立一個正常的 Instance,然後 mount 舊的 volume,修改檔案,最後在mount回來。

如果你使用 sudo 時,有些指令沒辦法使用,這是因為環境變數並沒有指定各個指令的正確路徑,可以透過修改 /etc/sudoers ,在 secure_path 中加入指令存在的目錄。

Example
  1. Defaults env_reset
  2. Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/local/bin

在使用 sudo 指令的時候,會發現 $HOME 這個變數變成 /root ,這問題是因為 always_set_home 的這設定,把它註解掉就不會有這個問題了,不過這個設定跟安全性有一點關系 ,請自行決定是否要做這件事。

#Defaults always_set_home

Samba 設定與啟動

samba是一個檔案分享伺服器,可以使window的電腦能夠存取linux電腦的檔案,就如同windows的網芳,這個軟體相當好用,尤其是針對習慣用windows系列的開發員,部分 Linux 內建就已經安裝好了,我們修改一下設定就行了。

  • 預設安裝路徑:/etc/samba
  • 設定檔:smb.conf
  • port listen:445
  • IP限制hosts allow = 192.168.0. 192.168.0. 255.
  • 打開一個分享的資料夾
Example
  1. [www]
  2. path = /www
  3. browseable =yes
  4. writable = yes
  • 在samba中加入一個帳號:pdbedit -a -n user

iptables : linux 內建防火牆

內建防火牆會擋掉apache , mysql等外部電腦的連線,所以暫時先把他關掉,關掉的方式如下。

  • 關閉iptables: /etc/rc.d/init.d/iptables stop
  • 設定開機iptables不啟動 : sudo chkconfig iptables off

screen 安裝

在linux系統中使用 screen,可以開啟多個 tab,並儲存 tty 狀態,就算你登出linux,工作仍會繼續進行。

  • 下載: ftp://ftp.gnu.org/gnu/screen/screen-4.0.3.tar.gz
  • 解壓 tar -zxvf screen-4.0.3
  • 進行該資料夾,開始安裝
  • ./configure --prefix=/home/program/screen --bindir=/usr/local/bin --enable-colors256
  • --enable-colors256 : 支援 256 色
  • make
Example
  1. gcc -c -I. -I. -g -O2 screen.c
  2. gcc -c -I. -I. -g -O2 ansi.c
  3. gcc -c -I. -I. -g -O2 fileio.c
  4. gcc -c -I. -I. -g -O2 mark.c
  5. gcc -c -I. -I. -g -O2 misc.c
  6. gcc -c -I. -I. -g -O2 resize.c
  7. gcc -c -I. -I. -g -O2 socket.c
  8. gcc -c -I. -I. -g -O2 search.c
  9. gcc -o screen screen.o ansi.o fileio.o mark.o misc.o resize.o socket.o search.o tty.o term.o window.o utmp.o loadav.o putenv.o help.o termcap.o input.o attacher.o pty.o process.o display.o comm.o kmapdef.o acls.o braille.o braille_tsi.o logfile.o layer.o sched.o teln.o nethack.o encoding.o -lcurses -lutempter -lutil -lcrypt
  • sudo make install

更新系統時間

  • ntpdate pool.ntp.org

Apache : 網頁伺服器安裝

我的apache安裝路徑為/home/program/apache,可自行修改

apache: configure
  1. ./configure --prefix=/home/program/apache \
  2. --enable-so \
  3. --enable-cgi \
  4. --enable-info \
  5. --enable-rewrite \
  6. --enable-speling \
  7. --enable-usertrack \
  8. --enable-deflate=shared \
  9. --enable-ssl \
  10. --enable-mime-magic

  • make
apache: make
  1. D_GNU_SOURCE -D_LARGEFILE64_SOURCE -I./include -I/software/apache/httpd-2.2.19/srclib/apr/include/arch/unix -I./include/arch/unix -I/software/apache/httpd-2.2.19/srclib/apr/include/arch/unix -I/software/apache/httpd-2.2.19/srclib/apr/include -o threadproc/unix/proc.lo -c threadproc/unix/proc.c && touch threadproc/unix/proc.lo
  2. /bin/sh /software/apache/httpd-2.2.19/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -I./include -I/software/apache/httpd-2.2.19/srclib/apr/include/arch/unix -I./include/arch/unix
  • make install
  • 啟動apache,並用telnet測試是否啟動成功
Example
  1. [rt@]$ sudo /home/program/apache/bin/apachectl start
  2. [rt@]$ telnet localhost 80
  3. Trying 127.0.0.1...
  4. Connected to localhost.localdomain (127.0.0.1).
  5. Escape character is '^]'.
  6. ^]
  7. telnet> Quit
  8. Connection closed.
  • 開機自動啟動
Example
  1. //在/etc/rc.d/rc.local加入這行
  2. /home/program/apache/bin/apachectl start
  • 手動啟動
Example
  1. sudo ln s /home/program/apache/bin/apachectl /etc/init.d/apache
  2. service apache restart
  3. //檢查目前 apache 載入那些 modules
  4. /home/program/apache/bin/apachectl -M
  • 如果要用到 .htaccess , conf裡記得要加上AllowOverride ALL
.htaccess
  1. <directory "/home/www">
  2. AllowOverride ALL
  3. order allow,deny
  4. allow from all
  5. </directory>

問題: Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.

這個問題在於 php 只支援 cgi 的方式載入,所以編繹 apache 時,必須加上 --enable-cgi。

Apache Module 獨立安裝

如果有部分apache module沒裝到的話,可以單獨安裝,必須用到 apxs 指令。

  • apxs : /home/program/apache/bin/apxs
  • command : apxs -c -i mod_xxxxxx.c

Rewrite Module

例如mod_rewrite忘了指定要裝時,可以先進入apache source code 資料夾的modules/mappers

  • cd /httpd-2.2.19/modules/mappers
  • apxs -c -i mod_rewrite.c
  • apache conf 補上: LoadModule rewrite_module modules/mod_rewrite.so

Expires Module

安裝mod_expires : 可以指定file cache時間,優化網站效能。( 需搭配mod_header一起用)

  • cd /httpd-2.2.19/httpd-2.2.19/modules/metadata/
  • apxs -c -i mod_expires.c
  • apache conf 補上: LoadModule expires_module modules/mod_expires.so
  • 安裝mod_header : 讓apache能夠修改 response header
  • apxs -c -i mod_headers.c
  • apache conf 補上: LoadModule headers_module modules/mod_headers.so

apache conf 設定 expires example , 「?i」代表忽略大小寫ignore case

Example
  1. LoadModule expires_module modules/mod_expires.so
  2. LoadModule headers_module modules/mod_headers.so
  3. ExpiresActive On
  4. <FilesMatch ".(?i:gif|jpg|png|js|css|swf)$">
  5. ExpiresByType text/html "access plus 7 day"
  6. ExpiresByType text/css "access plus 10 day"
  7. ExpiresByType text/javascript "access plus 10 day"
  8. ExpiresByType application/javascript "access plus 10 day"
  9. ExpiresByType image/gif "access plus 1 month"
  10. ExpiresByType image/jpg "access plus 1 month"
  11. ExpiresByType image/jpeg "access plus 1 month"
  12. ExpiresByType image/png "access plus 1 month"
  13. ExpiresByType application/x-shockwave-flash "access plus 5 day"
  14. </FilesMatch>
  • 安裝成功後,看html response裡會出現這一行 ETag: "7bxxxa-xx-4xxxxxx1" (可以用firebug ,打開主控台,再重新整理,這樣就可以看到每一個response的header)

Deflate Module

安裝 mod_deflate.so : 壓縮工具,讓 Apache 先將純文字資料壓縮後,再傳送給前台User。

  • cd httpd-2.2.19/modules/filters
  • apxs -c -i mod_deflate.c
  • apache conf 加上 LoadModule deflate_module modules/mod_deflate.so
  • apache conf 加上 AddOutputFilterByType DEFLATE text/html text/plain text/xml
支援 apache log SetEnvIf 語法
  • /httpd-2.2.19/modules/metadata
  • apxs -c -i mod_setenvif.c

AutoIndex Module

AutoIndex 這個 Apache Module 主要的功能,是為了列出所有的子目錄與檔案,當 End User 輸入一段 url 指定某一個目錄,而不是指定一個檔案,這時 Browser 就會列出所有的可連結的檔案。

  • cd httpd-2.2.19/modules/generators
  • apxs -c -i mod_autoindex.c
  • apache conf 加上 LoadModule autoindex_module modules/mod_autoindex.so
.htaccess
  1. <Directory "/www/inner_case/develope">
  2. Options Indexes FollowSymLinks
  3. order allow,deny
  4. allow from all
  5. </Directory>

Mysql 資料庫安裝

我的Mysql安裝路徑為/home/program/mysql,資料庫檔案存放路徑為/home/mysqldata,可自行修改

  • 載點:http://mirror.provenscaling.com/mysql/community/source/5.0/
  • tar -zxvf
  • ./configure --prefix=/home/program/mysql --localstatedir=/home/mysqldata
Example
  1. .
  2. .
  3. checking for locking... no
  4. checking for longjmp... yes
  5. checking for lrand48... yes
  6. checking for madvise... yes
  7. checking for mallinfo... yes
  8. .
  • make
  • sudo make install
  • 因為mysql會編譯很久,所以可以用 sudo bash -c "make && make install" ,讓他自已慢慢跑,我們就先去吃飯吧

Localstatedir : db存放位置

  • 搬移mysql 設定檔:cp /home/program/mysql/share/mysql/my-medium.cnf /etc/my.cnf

建立基礎 mysql 資料庫

  • 安裝內建的資料庫mysql : /home/program/mysql/bin/mysql_install_db --datadir=/home/mysqldata --user=mysql
  • sudo chown -R mysql /home/mysqldata/
  • 啟動 mysql :/home/program/mysql/bin/mysqld_safe --user=mysql &
  • 用root登入, 並建立其他user

其他設定 : 設定 my.cnf 路徑 --sysconfdir=/etc

Example
  1. %mysql -h localhost -u root
  2. create user 'userxx'@'%' identified by 'passwdxx';
  3. grant All on * to 'userxx'@'%'
  4. REVOKE ALL PRIVILEGES ON `mysql` . * FROM 'userxx'@'%'
  5. GRANT ALL PRIVILEGES ON `mysql` . * TO 'userxx'@'%';

  • 限制user的Query次數:GRANT USAGE ON *.* TO 'jeffrey'@'localhost' WITH MAX_QUERIES_PER_HOUR 90;

PHP 網頁程式

  • 檢查有那些 extension可以開啟: ./configure –help

--with-config-file-path 指定預設 php.ini 讀取的位置,我修改為 /home/program/php/lib,預設的php.ini是放在安裝目錄下的lib/裡,--with-mysql=/home/program/mysql 安裝mysql.so並指定mysql安裝的路徑, --with-apxs2=/home/program/apache/bin/apxs 安裝libphp5至apache裡,apache conf 會自勳加入 LoadModule php5_module modules/libphp5.so。

Example
  1. [puritys@www php]$ ./configure --prefix=/home/program/php
  2. --with-mysql=/home/program/mysql --with-apxs2=/home/program/apache/bin/apxs
  3. --enable-sockets --enable-mod-charset --enable-ftp
  4. --with-config-file-path=/home/conf
  • make
  • make install
  • php.ini 請copy至此--/home/program/php/lib/php(從解壓的檔案中複製)

裝好後要去 apache 的 conf 加上下面的兩行。

Example
  1. LoadModule php5_module modules/libphp5.so
  2. AddType application/x-httpd-php .php

PHP Extension :安裝 php 模組

我將 php extension 的目錄設定在此 /home/php_extension(可自行修改)。

  • php.ini 修改 extension , extension_dir = "/home/php_extension"
  • Mysqli:這個extension在phpMyAdmin裡會用到,所以一定要裝,程式碼就在php解壓的檔案裡(php/ext/mysqli/)。
    • phpize
Example
  1. [puritys@www mysqli]$ phpize
  2. Configuring for:
  3. PHP Api Version: 20041225
  4. Zend Module Api No: 20060613
  5. Zend Extension Api No: 220060519
  • ./configure
  • make
  • 將so檔複製到php extension讀取的路徑:sudo cp modules/mysqli.so /home/php_extension
  • php.ini 加上 extension=mysqli.so

最後再 restart apache 就安裝完成囉。

安裝 sftp extension , 先安裝libssh library ,再安裝ssh extension

其他相關的 php extension

  • mbstring:這個extension是處理中文字用的。
  • ssh2.so : php ssh 連線
  • shmop sysvshm : php share memory

Mount windows file

  • 先分享 windows 資料夾,輸入共用名稱及勾選允許使用者變更檔案。
  • 檢查可以mount的資料夾:smbclient -L 192.168.x.x -U username
Example
  1. [puritys]home# smbclient -L 192.168.x.x -U xxxxx
  2. Password:
  3. Domain=[J_NT] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
  4.  
  5. Sharename Type Comment
  6. --------- ---- -------
  7. IPC$ IPC ╗À║¦ IPC
  8. print$ Disk ªL¬Ý¥¸┼X░╩Á{ªí
  9. backup Disk
  10. ªL¬Ý¥¸ Printer Microsoft Office Document Image Writer
  11. case Disk
  12. session request to 192.168.x.x failed (Called name not present)
  13. session request to 192 failed (Called name not present)
  14. Domain=[J_NT] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
  15.  
  16. Server Comment
  17. --------- -------
  18.  
  19. Workgroup Master
  20. --------- -------
  • sudo mount -t cifs //192.168.x.x/dir /home/dir -o username=xxx , password=xxx

網頁好讀版