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