[Azure][Linux]Mantis 安裝筆記
這一陣子剛有遇到需要安裝 Mantis 來使用,以往安裝都是在實體機器上,這次試試看換到 Centos 6.5 的版本上,分別使用 Hyper-V 的 VM 和 Azure 上的 VM 來做測試,並且把相關指令給記錄下來,免得以後要再重新安裝的時候又忘記了。目前 CentOS 安裝算是相當的方便,而大部分在 Centos 所需要使用的很多套件,也都幾乎都可以完全使用 yum 來安裝了,但我還是習慣將 Apache , PHP 和 mySQL 都是拿 source 來 build,這樣以後發覺有甚麼功能缺少或者是需要調整,會比較方便一點。
Pre-Installation
為了方便安裝順利,因此除了前面所說的 Apache , PHP & mySQL 是下載 Source 來進行編譯,其他一些套件我就直接用 yum 來做安裝。但因為 azure 上面的 vm 登入的時候不是使用 root,這樣安裝過程會比較不方便,因此我先利用以下指令來變更 root 的密碼,這樣安裝就會比較容易一點。至於安裝在 Hyper-V 上面的 VM,就沒有這樣的煩惱了。
Access a root shell… # sudo -s Disable SELinux enforcement # setenforce 0 Change the root password (or any other user) # passwd New password: Turn SELinux enforcement back on # setenforce 1
當使用 root 身分登入之後,先利用 yum 來安裝套件
# yum install curl-devel lib-xml2-devel lib-jpeg-devel freetype-devel ncurses-devel zlib-devel gd-devel libxml2-devel openssl-devel
上述幾個安裝來說都不大會有問題,但是如果要安裝 libmcrypt-devel 的話,在 azure 上面可以直接使用 yum 來安裝
#yum install libmcrypt-devel
但如果是使用 Centos 6.5 的光碟或者是網路安裝的話,則需要自行去下載 source 手動編譯處理
# wget http://softlayer.dl.sourceforge.net/sourceforge/mcrypt/libmcrypt-2.5.8.tar.gz # tar zxvf libmcrypt-2.5.8.tar.gz # cd libmcrypt-2.5.8 # configure # make # make install
因為我們需要編譯那些程式,因此需要安裝 gcc,但在 azure 上面安裝的時候會比較麻煩,會因為套件相容性的問題造成需要先手動來安裝 kernel-header,才能再用 yum 安裝 gcc,因此如果是使用 azure 的環境,則要先用以下的指令來安裝
Azure # yum --disableexcludes=main install kernel-headers-2.6.32-279.14.1.el6.openlogic.x86_64 Install C Complier # yum install gcc-c++
Download Package
接下來我們要來下載三個主要軟體,基本上更新的版本應該也是可以,只是為了後續還要裝一些其他的東西,因此我就沒有都使用到最新的版本。在進行之前我先建立一個 /src 的目錄,把這些相關的套件都放到這個目錄下:
mysql 5.6.15 # wget http://mysql.isu.edu.tw/Downloads/MySQL-5.6/mysql-5.6.15.tar.gz Apache 2.2.26 # wget http://ftp.twaren.net/Unix/Web/apache//httpd/httpd-2.2.26.tar.gz PHP 5.4.24 # wget http://tw1.php.net/distributions/php-5.4.24.tar.gz
而這次我們主要安裝的是 Mantis,也為了後續在做系統維護的處理上會比較方便,因此除了下載 Mantis 的 Source 之外,另外我也下載了 phpMyAdmin 來搭配使用。
Mantis 1.2.15 # wget http://sourceforge.net/projects/mantisbt/files/mantis-stable/1.2.15/mantisbt-1.2.15.tar.gz/download phpMyAdmin 4.1.15 # wget http://downloads.sourceforge.net/project/phpmyadmin/phpMyAdmin/4.1.5/phpMyAdmin-4.1.5-all-languages.tar.gz
Add New Partition
因為在 azure 上面所使用的 CentOS 6.5 是已經包裝好的,為了避免後續磁碟空間不足,我另外掛了一個 50GB 的 VHD 的檔案,因此我必須要用指令來掛上這個新的磁碟,並指定一個目錄名稱,這樣後續才可以來使用。首先先用 fdisk -l 的方式來查驗新增的 vhd 檔案是否有被 vm 偵測到。
確認磁碟代號是 /dev/sdc 之後,接著我們用 fdisk /dev/sdc 的指令來建立 Partition,以下編號 1 的地方輸入 n,表示建立一個新的 Partition。編號 2 的地方輸入 p,選擇我們要建立的是 Primary Partition。編號 3 的地方輸入 p ,用來查看我們剛剛建立的 Partition 的資訊,要記住這裡所得到的訊息 「/dev/sdc1」,編號 4 的地方輸入 w,表示確認要寫入到磁碟。
接下來就可以使用以下的指令來進行格式化
# mkfs -t ext4 /dev/sdc1
等待一下子之後,接著我們就可以把那個 Partition 掛在起來使用了
建立目錄 # mkdir /var/data 掛載到 /var/data 下來使用 # mount /dev/sdc1 /var/data
接著使用 blkid 的指令,來查看所有磁碟的裝置 UUID 和 TYPE
並將這些資訊給記錄到 /etc/fstab 內,這樣下次啟動的時候就會自動掛載起來了。因此到這個部分完成之後,可以使用 reboot 指令進行重新開機,接著使用 df -m 的指令,如果一切都沒有問題的話,則應該會看到 /var/data 這個節點會有你當初建立磁碟的空間了。
Complier
一般我會先安裝 mysql,因為他比較單純,接著安裝 Apache,最後才安裝 PHP。
而 mysql 在之前的版本,是透過 configure 和 make,但到了之後的版本,則要使用 CMAKE 來做編譯,因此要先透過 yum 把 CMAKE 給安裝好之後,將壓縮檔案透過 tar zxvf 的指令解壓縮後,進入到解開的目錄下進行編譯
Install CMAKE # yum install cmake 編譯 mysql # cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/var/data/mysql -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ZLIB=system -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci # make # make install
其中比較要特別注意的是,如果在編譯的過程中有發生錯誤,如果需要再重新編譯時,要記得先將目錄下的 CMakeCache.txt 的檔案刪除,否則會一值出現同樣的錯誤。如果順利安裝完成,則透過以下的方式進行設定
建立啟動 mysql 的帳號 # groupadd -r mysql # useradd -g mysql -r -s /sbin/nologin mysql 設定放置資料庫的區域 # mkdir /var/data/mysql # chown -R mysql.mysql /var/data/mysql 設定 mysql 的啟動腳本 # cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld # chmod +x /etc/init.d/mysqld # chkconfig --add mysqld 建立資料庫 # cd /usr/local/mysql # scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/var/data/mysql --user=mysql 修改啟動參數 # vi /etc/my.cnf
安裝玩 mysql 之後,接下來則進行安裝 apache,一樣也是先將壓縮檔案透過 tar zxvf 的指令解壓縮後,再進入到解開的目錄下進行編譯
編譯 Apache # ./configure --enable-dav-fs --enable-rewrite --enable-dav --enable-so --enable-cgi --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config # make # make install 建立啟動 Apache 的帳號 # groupadd -r apache # useradd -g apache -r -s /sbin/nologin apache 建立 web 目錄 # mkdir /var/data/web # chown -R apache.apache /var/data/web
但因為 Apache 透過編譯 source 的狀況下,需要自己撰寫啟動腳本,因此透過 vi /etc/init.d/httpd 的方式,將下面的內容放在該檔案中
#!/bin/sh # # Startup script for the Apache Web Server # # chkconfig: 345 85 15 # description: Apache is a World Wide Web server. It is used to serve \ # HTML files and CGI. # processname: httpd # pidfile: /var/run/httpd.pid # config: /etc/httpd/conf/httpd.conf apachectl=/usr/local/apache2/bin/apachectl # Source function library. . /etc/rc.d/init.d/functions # See how we were called. case "$1" in start) echo -n "Starting httpd: " daemon $apachectl -k start echo touch /var/lock/subsys/httpd ;; stop) echo -n "Shutting down http: " killproc httpd echo rm -f /var/lock/subsys/httpd rm -f /var/run/httpd.pid ;; status) status httpd ;; restart) $0 stop $0 start ;; reload) echo -n "Reloading httpd: " killproc httpd -HUP echo ;; graceful) echo -n "$1 httpd: " daemon $apachectl $1 echo ;; help|configtest|fullstatus) echo -n "$1 httpd: " $apachectl $1 ;; *) echo "Usage: httpd {start|stop|restart|reload|status|fullstatus|graceful|help|configtest} " exit 1 esac exit 0
設定好之後,再透過以下指令設定權限後,就完成 Apache 的安裝
# chmod +x /etc/init.d/httpd # chkconfig --add httpd
最後我們就要來安裝 PHP 了,一樣也是先將壓縮檔案透過 tar zxvf 的指令解壓縮後,再進入到解開的目錄下進行編譯
編譯 PHP # ./configure --with-config-file-path=/usr/local/apache2/conf --prefix=/usr/local/php --enable-sockets --enable-ftp --with-zlib --with-freetype-dir --with-gd --with-curl --enable-mbstring --with-jpeg-dir --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-apxs2=/usr/local/apache2/bin/apxs --with-mcrypt --with-openssl # make # make install
接著在我們編譯時候加入的第一個參數 config-file-path 所指定的目錄下 /usr/local/apache2/conf,產生一個 php.ini 的檔案,用來存放 PHP 的相關參數
[Date]
date.timezone = "Asia/Taipei"
並且在 /usr/local/apache2/conf/mime.type 中加入 ( 也可以加在 http.conf 的參數檔內,但前面要記得加入 AddType )
application/x-httpd-php php phps
此時如果啟動 apache,會發現還是一樣無法連線,主要是因為 CentOS 預設 iptables 是啟動的,而且只允許 tcp 22 的通過,因此我們要修改 /etc/sysconfig/iptables 的設定,把需要的 port 給開啟就可以了
# Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
Install Mantis
等前面的步驟都完成 後,就可以來進行安裝 mantis 了,以目前所拿到的版本,我會先將檔案解壓縮放在 /var/data/web/mantisbt-1.2.15 的目錄下,並且建立一個符號鏈結 issue 在 /var/data/web 的目錄下 ( 這樣以後更換不同版本的時候會比較方便一點 ),接著將 mantis 的相關目錄設定擁有者是 apache 的使用者和使用群組,接著我們就可以在 Apache 的設定檔 http.conf 的最後面,加入相關設定。在這個範例中我們建立一個 issue 的別名,指定到 /var/data/web/issue,並且設定相關參數
Alias /issue "/var/data/web/issue" <Directory "/var/data/web/issue"> DirectoryIndex index.php Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
接下來就可以連接網站進行相關設定了。因為第一次連線的時候,Mantis 會自動判斷尚未安裝,因此會跳到安裝的畫面去,而執行完畢之後,為了安全的緣故,因此我就將 mantis 下面的 admin 目錄給刪除。設定好之後,就可以使用預設的帳號 Administrator 和預設的密碼 root 來進行登錄,並且就可以進行相關設定和使用了。