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
 
- LANG="en_US.UTF-8"
 - SUPPORTED="zh_CN.UTF-8:zh_CN:zh:zh_TW.UTF-8:zh_TW:zh:en_US.UTF-8:en_US:en"
 - 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
sudo 的時間過短,每次都要打 sudo很煩的話。
sudo: sorry, you must have a tty to run sudo
要改 /etc/sudoers ,請使用 sudo visudo , 使用 visudo ,存檔時,他會幫你檢查語法是否正確,不然你改壞掉了,馬上sudo就失效不能用了XD。
剛剛在 Amazon EC2 親身經歷一次,官方解法是再建立一個正常的 Instance,然後 mount 舊的 volume,修改檔案,最後在mount回來。
如果你使用 sudo 時,有些指令沒辦法使用,這是因為環境變數並沒有指定各個指令的正確路徑,可以透過修改 /etc/sudoers ,在 secure_path 中加入指令存在的目錄。
- Defaults env_reset
 - 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.
 - 打開一個分享的資料夾
 
- [www]
 - path = /www
 - browseable =yes
 - 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
 
- gcc -c -I. -I. -g -O2 screen.c
 - gcc -c -I. -I. -g -O2 ansi.c
 - gcc -c -I. -I. -g -O2 fileio.c
 - gcc -c -I. -I. -g -O2 mark.c
 - gcc -c -I. -I. -g -O2 misc.c
 - gcc -c -I. -I. -g -O2 resize.c
 - gcc -c -I. -I. -g -O2 socket.c
 - gcc -c -I. -I. -g -O2 search.c
 - 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,可自行修改
- 下載點:
 - http://ftp.stut.edu.tw/var/ftp/pub/OpenSource/apache//httpd/httpd-2.4.1.tar.gz
 - configure 指令如下,--enable-so代表啟動載入php so功能。
 - 在 configure 時加上 --enable-xxx=shared ,這樣會包成 shared library ,需要使用時再載入即可。
 
- ./configure --prefix=/home/program/apache \
 - --enable-so \
 - --enable-cgi \
 - --enable-info \
 - --enable-rewrite \
 - --enable-speling \
 - --enable-usertrack \
 - --enable-deflate=shared \
 - --enable-ssl \
 - --enable-mime-magic
 
- make
 
- 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
 - /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測試是否啟動成功
 
- [rt@]$ sudo /home/program/apache/bin/apachectl start
 - [rt@]$ telnet localhost 80
 - Trying 127.0.0.1...
 - Connected to localhost.localdomain (127.0.0.1).
 - Escape character is '^]'.
 - ^]
 - telnet> Quit
 - Connection closed.
 
- 開機自動啟動
 
- //在/etc/rc.d/rc.local加入這行
 - /home/program/apache/bin/apachectl start
 
- 手動啟動
 
- sudo ln –s /home/program/apache/bin/apachectl /etc/init.d/apache
 - service apache restart
 - //檢查目前 apache 載入那些 modules
 - /home/program/apache/bin/apachectl -M
 
- 如果要用到 .htaccess , conf裡記得要加上AllowOverride ALL
 
- <directory "/home/www">
 - AllowOverride ALL
 - order allow,deny
 - allow from all
 - </directory>
 
問題: Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.
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
- LoadModule expires_module modules/mod_expires.so
 - LoadModule headers_module modules/mod_headers.so
 - ExpiresActive On
 - <FilesMatch ".(?i:gif|jpg|png|js|css|swf)$">
 - ExpiresByType text/html "access plus 7 day"
 - ExpiresByType text/css "access plus 10 day"
 - ExpiresByType text/javascript "access plus 10 day"
 - ExpiresByType application/javascript "access plus 10 day"
 - ExpiresByType image/gif "access plus 1 month"
 - ExpiresByType image/jpg "access plus 1 month"
 - ExpiresByType image/jpeg "access plus 1 month"
 - ExpiresByType image/png "access plus 1 month"
 - ExpiresByType application/x-shockwave-flash "access plus 5 day"
 - </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
 
- /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
 
- <Directory "/www/inner_case/develope">
 - Options Indexes FollowSymLinks
 - order allow,deny
 - allow from all
 - </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
 
- .
 - .
 - checking for locking... no
 - checking for longjmp... yes
 - checking for lrand48... yes
 - checking for madvise... yes
 - checking for mallinfo... yes
 - .
 
- 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
- %mysql -h localhost -u root
 - create user 'userxx'@'%' identified by 'passwdxx';
 - grant All on * to 'userxx'@'%'
 - REVOKE ALL PRIVILEGES ON `mysql` . * FROM 'userxx'@'%'
 - 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。
- [puritys@www php]$ ./configure --prefix=/home/program/php
 - --with-mysql=/home/program/mysql --with-apxs2=/home/program/apache/bin/apxs
 - --enable-sockets --enable-mod-charset --enable-ftp
 - --with-config-file-path=/home/conf
 
- make
 - make install
 - php.ini 請copy至此--/home/program/php/lib/php(從解壓的檔案中複製)
 
裝好後要去 apache 的 conf 加上下面的兩行。
- LoadModule php5_module modules/libphp5.so
 - 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
 
- [puritys@www mysqli]$ phpize
 - Configuring for:
 - PHP Api Version: 20041225
 - Zend Module Api No: 20060613
 - 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
- 載點 http://www.libssh2.org/download/libssh2-1.3.0.tar.gz
 - ./configure
 - make
 - sudo make install
 - 載點 http://pecl.php.net/get/ssh2-0.11.3.tgz
 - tar -zxvf ssh2-0.11.3.tgz
 - phpize
 - ./configure
 - make
 - 將so檔複製到php extension讀取的路徑:sudo cp modules/ssh2.so /home/php_extension
 - php.ini 加上 extension=ssh2.so
 - 重啟apache
 
其他相關的 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
 
- [puritys]home# smbclient -L 192.168.x.x -U xxxxx
 - Password:
 - Domain=[J_NT] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
 - Sharename Type Comment
 - --------- ---- -------
 - IPC$ IPC ╗À║¦ IPC
 - print$ Disk ªL¬Ý¥¸┼X░╩Á{ªí
 - backup Disk
 - ªL¬Ý¥¸ Printer Microsoft Office Document Image Writer
 - case Disk
 - session request to 192.168.x.x failed (Called name not present)
 - session request to 192 failed (Called name not present)
 - Domain=[J_NT] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
 - Server Comment
 - --------- -------
 - Workgroup Master
 - --------- -------
 
- sudo mount -t cifs //192.168.x.x/dir /home/dir -o username=xxx , password=xxx
 
