Solaris 10 作業系統與 Solaris Express 的 SAMP (Solaris、Apache 2、MySQL 5 與 PHP 5) 設定Neal Pollack,2006 年 10 月 網際網路上有許多文件與部落格都會說明如何針對 SAMP 伺服器 (Solaris、Apache 2、MySQL、PHP) 使用 Solaris 10 作業系統。但是,其中有許多文章僅適用於舊版的套裝軟體,或不包含常用的 PHP 語言。有些文章缺乏可讓您瞭解相關程序的詳細資訊或範例。 開始之前,我想先澄清 Solaris 10 作業系統或 Solaris Express 的安裝中確實包含 Apache 2.0.x 與 MySQL 4。Solaris 10 作業系統的 Companion CD 也包含 PHP 4。但是,目前 Solaris 作業系統並未隨附 PHP 5 或 MySQL 5。 此文將讓技術使用者瞭解如何建置自己的最新版 PHP5,並將其從 Blastwave 以及 Solaris 作業系統隨附的 Apache2 版本整合至 MySQL5。但是,若您不想編譯任何軟體,而只想使用這些套裝軟體的最佳化與高效能 Sun 建置,請至 http://cooltools.sunsource.net/coolstack/index.html 和 (或) http://sunfreeware.com/coolstack.html 參閱 Sun 的可隨時執行的 Cool Stack 套裝軟體。 有關以上述套裝軟體配置 SAMP 伺服器的早期文章,可自 BigAdmin 入口網站上的社群成員貢獻作品集取得。但是,此文章缺乏重要的詳細資訊,且使用舊版 Apache 1.3。Mel Lester 的文章 (同樣也是 BigAdmin 入口網站上的參考資料) 不但文筆流暢、內容非常詳細,同時幾乎完全符合我們的需求。唯一的缺憾是,Lester 的文章採用的是 Solaris 10 作業系統隨附的 MySQL 4 版本,而不是我們目前常用的 MySQL 5.x 版。 我們之所以想重建軟體,最主要的原因是想取得最新版的套裝軟體,因為其中可能包含效能強化、錯誤與安全性修正程式,以及可提供相關功能讓您運用在各種 PHP Web 應用程式的編譯時期選項。 在此練習中,將使用下列軟體進行安裝:
我們將以 32 位元模式建置,多半使用 GNU 工具鏈。 下列程序會將這三個應用程式整合在一起,以便您使用 Solaris 10 作業系統、Apache、PHP 5 與 MySQL 5 Web 應用程式。 以下是相關步驟: 1. 安裝 Solaris 10 作業系統、Solaris Express/Nevada 或 OpenSolaris。 2. 確定您的系統已連接網路而可存取網際網路,並確認所使用的是靜態 IP 位址。若您需要網路配置方面的協助,請檢視此文件:System Administration Guide: IP Services。 3. 我們想從 Blastwave.org 安裝 MySQL 5。開啟 Web 瀏覽器,移至 Blastwave.org 的逐步指南,然後執行步驟 1 至 7。就是這麼簡單,此時您即可使用 4. 現在已可安裝 MySQL 5 套裝軟體。從主控台或 xterm 視窗,以 # /opt/csw/bin/pkg-get -i mysql5 mysql5client mysql5devel mysql5rt # /opt/csw/bin/pkg-get -i mysql5test 注意:請務必安裝 5. 現在我們將設定 MySQL 5。 Blastwave.org 提供了相關指南:請移至 http://www.blastwave.org/packages.php/mysql5,然後按一下顯示「View news and info about the software package」的灰色按鈕。我們已於此處再次提供相關指示,並且對某些議題進行更深入的討論(感謝 Blastwave 慷慨分享其工作成果)。
A. 建立配置檔 B. 在下個步驟中初始化資料庫之前,請務必先設定 MySQL 使用者與群組。Blastwave 套裝軟體安裝程序檔會替您完成此動作。但是,若您從原始碼檔案建置 MySQL,就必須以下列方式建立 MySQL 使用者與群組: # groupadd mysql # useradd -c "MySQL Server" -d /dev/null -g mysql -s /bin/false mysql C. 初始化 MySQL 資料庫及修正權限: cd /opt/csw/mysql5 ./bin/mysql_install_db chown -R mysql:mysql ./var
注意:若您略過上述 D. 啟動 MySQL 5。若只想嘗試啟動伺服器以及檢視上述步驟是否已正確執行,請發出下列指令: # cd /opt/csw/mysql5 ; /opt/csw/mysql5/bin/mysqld_safe &
接著,您可以使用 此指令應可運作: # pkill mysql 現在,為了確保它會在重新開機後啟動,請繼續閱讀。 注意:Solaris Express、Nevada 與 Solaris 10 更新的最新建置均使用 SMF 啟動 舊的 RC 檔案方法: # /etc/init.d/cswmysql5 start
新的 若您安裝 MySQL 5 套裝軟體的 Solaris 版本所使用的是 SMF,而非 RC 檔案,您會發現套裝軟體已安裝 MySQL 5 的 SMF 清單,並且可使用下列指令查看服務的狀態: # svcs -a | grep mysql disabled 13:36:01 svc:/network/cswmysql5:default若要確定 MySQL 5 伺服器已啟動 (並且重新開機時也會啟動),請發出下列指令: # svcadm enable svc:/network/cswmysql5:default 您可以再次使用下列指令進行驗證: # svcs -a | grep mysql online 15:12:43 svc:/network/cswmysql5:default
您可以使用指令 E. 請記得為 MySQL 此密碼不應與您的 Solaris 超級使用者密碼相同!若要執行此作業,請啟動伺服器,然後發出下列指令: 若要設定本機密碼: # /opt/csw/mysql5/bin/mysqladmin -u root password 'new-password' # /opt/csw/mysql5/bin/mysqladmin -u root -h <YOUR-HostName-Here> \ password 'new-password' (若您已透過下面步驟 5,第 I 部分中的安全性討論停用網路存取,前述指令行即會失敗,也不必要。) 如需相關指示,請參閱 MySQL 5 Documentation。 F. 選擇性:此作業需要一些時間。您可以使用下列指令,執行 MySQL 常駐程式的測試套件。 # cd /opt/csw/mysql5/mysql-test # ./mysql-test-run G. 檢查安裝: # ./bin/mysql -p 系統會提示您輸入 MySQL show databases; 此時會傳回 quit 注意:建立及編輯
H. 參考文件: I. MySQL 安全性不在此文討論之列。但是,以下提供某些應注意的基本步驟:
前述步驟其實並不深入,但足以大大提升安裝後的效能。請在您慣用的網際網路搜尋引擎中輸入「保護 MySQL」,以閱讀網路上有關 MySQL 安全性的文章。 6. 我們現在已完成 MySQL 5 的安裝與測試。接著,我們將建置 PHP 5。我們將從 Mel Lester 的網站借用某些部分,當然是在他的許可之下。我們將修改某些 PHP 配置,因為我們會使用不同的選項與路徑。 明確而言,在進行編譯以使用我們的 Blastwave MySQL 5 路徑 (在
A. 以 global# echo $PATH /opt/csw/bin:/usr/sfw/bin:/usr/sbin:/usr/bin:/usr/openwin/bin: \ /usr/dt/bin:/usr/ccs/bin 現在開始討論。首先,您可能不想修改 B. 使用 Blastwave.org global# pkg-get -i autoconf ... global# which autoconf && autoconf --version | head -2 /opt/csw/bin/autoconf autoconf (GNU Autoconf) 2.59 Written by David J. MacKenzie and Akim Demaille. global# pkg-get -i automake ... global# which automake && automake --version | head -2 /opt/csw/bin/automake automake (GNU automake) 1.8.3 Written by Tom Tromey <tromey@redhat.com>. global# pkg-get -i gsed ... global# which gsed && gsed --version | head -2 /opt/csw/bin/gsed GNU sed version 4.1.4 Copyright (C) 2003 Free Software Foundation, Inc. C. 確認是否有其他安裝 PHP 所需的開放原始碼軟體可用(如有需要,您可以檢視 PHP 手冊的 Solaris specific installation tips 一節)。下列軟體版本應較為近似或更新: global# which gcc && gcc --version | head -2 /usr/sfw/bin/gcc gcc (GCC) 3.4.3 (csl-sol210-3_4-branch+sol_rpath) Copyright (C) 2004 Free Software Foundation, Inc. global# which gmake && gmake --version | head -2 /usr/sfw/bin/gmake GNU Make 3.80 Copyright (C) 2002 Free Software Foundation, Inc. global# which flex && flex --version | head -2 /usr/sfw/bin/flex flex version 2.5.4 global# which bison && bison --version | head -2 /usr/sfw/bin/bison bison (GNU Bison) 1.875 Written by Robert Corbett and Richard Stallman. global# which gm4 && gm4 --version | head -2 /opt/csw/bin/gm4 GNU M4 1.4.3 Written by Rene' Seindal. global# which perl && perl -v | head -2 /opt/csw/bin/perl This is perl, v5.8.7, built for sun4-solaris-thread-multi global# which gunzip && gunzip -V | head -2 /usr/bin/gunzip gunzip 1.3.3-patch.1 (2002-03-08) global# which gtar && gtar --version | head -2 /usr/sfw/bin/gtar tar (GNU tar) 1.14 Copyright (C) 2004 Free Software Foundation, Inc.
D. 從原始碼檔案建置 從 xmlsoft 下載最新版本。 此時,我們在此發現下列版本的壓縮原始碼檔案: # wget ftp://xmlsoft.org/libxml2/libxml2-2.6.26.tar.gz 您可選擇要在哪個目錄中執行下列步驟: global# gunzip -cd libxml2-2.6.26.tar.gz | gtar xvpf - global# cd libxml2-2.6.26 global# ./configure ... global# gmake ... global# gmake install ... 您現在已完成 注意:經過驗證,Solaris Nevada 建置 42 與更新版本具有更新後的 --with-libxml-dir=/usr/local 變更為: --with-libxml-dir=/usr E. 若檔案 global#cp /etc/apache2/httpd.conf-example /etc/apache2/httpd.conf
以您慣用的文字編輯器編輯
F. 從 www.php.net 下載並編譯 PHP 最新的正式版本。同樣地,您選擇自己的目錄,如 global# gunzip -cd php-5.1.6.tar.gz | gtar xvpf - ... global# cd php-5.1.6 這是我們與原始網頁的不同之處。原始網頁使用的是 global# ./configure --with-apxs2=/usr/apache2/bin/apxs --enable-dbase \ --with-libxml-dir=/usr/local --with-config-file-path=/etc/apache2 \ --with-mysql=shared,/opt/csw/mysql5 \ --with-mysqli=shared,/opt/csw/mysql5/bin/mysql_config \ --with-xpm-dir=/usr --with-gd --with-tiff-dir=/usr --with-bz2=/usr/lib \ --with-jpeg-dir=/usr --with-png-dir=/usr --with-zlib --enable-mbstring \ --enable-calendar--enable-bcmath --enable-ftp --enable-exif
對簡易伺服器設定而言,上述配置選項即已夠用。另外還有許多選項,使用者可自行選擇並閱讀說明文件。您可以輸入 注意:若您嘗試啟用
有趣的注意事項:若您很好奇他人所使用的 無論如何,現在就來建置: ... global# gmake ... global# gmake install ... Installing PHP SAPI module: apache2handler /var/apache2/build/instdso.sh SH_LIBTOOL='/var/apache2/build/libtool' libphp5.la /usr/apache2/libexec /var/apache2/build/libtool --mode=install cp libphp5.la /usr/apache2/libexec/ cp .libs/libphp5.so /usr/apache2/libexec/libphp5.so chmod +x /usr/apache2/libexec/libphp5.so cp .libs/libphp5.lai /usr/apache2/libexec/libphp5.la libtool: install: warning: remember to run 'libtool --finish /build/php-5.1.2/libs' chmod 755 /usr/apache2/libexec/libphp5.so [activating module 'php5' in /etc/apache2/httpd.conf] Installing PHP CLI binary: /usr/local/bin/ Installing PHP CLI man page:/usr/local/man/man1/ Installing build environment: /usr/local/lib/php/build/ Installing header files: /usr/local/include/php/ Installing helper programs: /usr/local/bin/ program: phpize program: php-config Installing man pages: /usr/local/man/man1/ page: phpize.1 page: php-config.1 Installing PEAR environment:/usr/local/lib/php/ [PEAR] Archive_Tar - installed: 1.3.1 [PEAR] Console_Getopt - installed: 1.2 pear/PEAR can optionally use package "pear/XML_RPC" (version >= 1.4.0) [PEAR] PEAR - installed: 1.4.6 Wrote PEAR system config file at: /usr/local/etc/pear.conf You may want to add: /usr/local/lib/php to your php.ini include_path Installing PDO headers: /usr/local/include/php/ext/pdo/ #G. 將檔案 php.ini-dist 從您的 php-5.1.6 原始碼目錄,複製到 Apache 的 config 目錄:
global# cp php.ini-dist /etc/apache2/php.ini 若您在多個區域中設定 Apache Web 伺服器,或許您會有如下的路徑範例 (或您所使用的任何區域): global# cp php.ini-dist /zones/zone0/root/etc/apache2/php.ini 接下來我們將編輯配置檔案,並測試整個堆疊。 H. 編輯配置檔案。 編輯 就 PHP 5 而言,目前已沒有任何自動載入 MySQL 介面模組的功能。 您必須明確載入此模組與所有其他必要的延伸模組。若要執行此作業,請編輯 1. 確認 PHP 5 建置是否已建立您所需的模組: # ls -l /usr/local/lib/php/extensions/no-debug-non-zts-20050922/ total 1088 -rwxr-xr-x1 root root103144 Aug 29 21:48 mysql.so -rwxr-xr-x1 root root429948 Aug 29 21:48 mysqli.so
在 ; Directory in which the loadable extensions (modules) reside. extension_dir = 編輯此行,使其變成: extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20050922/" 若您將 PHP 5 安裝至其他位置,請據以調整此行。 2. 接著,尋找 ;;;;;;;;;;;;;;;;;;;;;; ; Dynamic Extensions ; ;;;;;;;;;;;;;;;;;;;;;; 加入下列指令行: extension=mysql.so 現在,試圖瞭解 Apache/PHP 5 為何無法連線至 MySQL,已不再是令人痛苦的事。 3. 接著,請編輯
尋找包含 LoadModule php5_module libexec/libphp5.so
我們想讓 Apache 將網頁檔案名稱的 AddType application/x-httpd-php .php
有些使用者喜歡在 I. 啟動 Apache 2 並進行測試。 警告:若您先前已透過其他 SAMP 文章、Companion CD 程序檔或以手動方式啟動 Apache 1.3,在您嘗試執行下列步驟時,將會發生衝突。請務必先停用 Apache 1.3,再繼續作業 確定 Apache 1.3 已停用: #svcs -a | grep apache legacy_run Sep_11lrc:/etc/rc3_d/S50apache這表示 Apache 1.3 的舊有 rc 啟動程序檔為 /etc/rc3_d/S50apache。此程序檔會在 /etc/apache/httpd.conf 尋找是否有 Apache 的配置檔案,若沒有此檔案,即無法啟動 Apache 1.3。若要停用 Apache 1.3,請確定前述路徑上沒有任何檔案,或 (此做法可能有點極端) 將啟動程序檔從:
/etc/rc3_d/S50apache 重新命名為: /etc/rc3.d/OFF-S50apache 只有以字母「S」開頭的程序檔會在啟動時實際執行。 啟動 Apache 2: # svcadm enable apache2 # svcs | grep -i apache2 online 18:07:10 svc:/network/http:apache2 若 Apache 2 成功啟動,您即可使用 # ps -ef | grep http webservd 18592 38020Sep 11 ? 0:03 /usr/apache2/bin/httpd -k start webservd 13093 38020Sep 08 ? 0:07 /usr/apache2/bin/httpd -k start 若發現此類程序有十來個,也不要太驚訝。此外,也不要被下列程序給嚇著:
root 49810 Jul 17 ? 1:28 /usr/apache/bin/httpd \
-f /etc/apache/httpd-standalone-ipp.conf
那只是網路連接埠 631 上的 Internet Print Protocol (IPP) 偵聽程式所使用的舊有 Apache 1.3。由於它不是在連接埠 80 上執行,因此在此不會與您的 Web 伺服器配置產生衝突。 7. 接著,我們將在 Apache 2 Web 伺服器的
<html>
<body>
<p>Hello World</p>
<?php phpinfo(); ?>
</body>
</html>
依照 Apache 注意:測試後,建議您移除此檔案,或使用 HTTP 認證進行保護,因為這個檔案揭露了許多與您的網站相關的資訊,可能會遭到攻擊者的利用。 現在,您已注意到上述
大部分的程式碼取自於 PHP 手冊中的功能使用範例。將下方的 PHP 程式碼複製到檔案 (網頁) 中,並將其命名為 以下是 PHP 程式碼:
<?php
$db_username = "root";// EDIT if needed: The username for mysql.
$db_password = "insert-yours-here"; // EDIT ME
// Above is YOUR password used for mysql admin access.
$db_hostname = "localhost";
$db_name = "mysql"; // Install creates this admin database.
if (!mysql_connect($db_hostname, $db_username, $db_password)) {
echo "Can't connect to MySQL Server";
exit;
}else{
echo "Connection to Mysql server succeeded.";
echo "<br>";
}
// Now query the db and get the list of tables.
$result = mysql_db_query($db_name, "SHOW TABLES");
if (!$result) {
echo "DB Error, could not list tables\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}
echo "<p>The selected database is name is mysql</p>";
echo "<p>Here is the list of tables</p>";
while ($row = mysql_fetch_row($result)) {
echo "Table: {$row[0]} <br>";
}
mysql_free_result($result);
?>
若上述內容複製正確,且您的軟體已適當地配置,您即可將 Web 瀏覽器指向 Connection to Mysql server succeeded. The selected database is name is mysql. Here is the list of tables Table: columns_priv Table: db Table: func Table: help_category Table: help_keyword Table: help_relation Table: help_topic Table: host Table: proc Table: procs_priv Table: tables_priv Table: time_zone Table: time_zone_leap_second Table: time_zone_name Table: time_zone_transition Table: time_zone_transition_type Table: user 8. 讓我們看看 PHP 安全性。 現在您已順利進行,但在此警告您,PHP 的預設安裝以及配置檔 A. 刪除先前在步驟 7 中建立的 B. 強烈建議您參閱有關保護 PHP 安全的指導,如下列其中一項:
若您沒有足夠的時間,至少也看一下建議 (且較安全) 的配置檔案 (# diff php.ini-dist php.ini-recommended | less) 我希望這多少能回答您的問題,並提供實用的提示。好好享受 Solaris 作業系統的 SAMP 伺服器所帶來的便利吧。 Comments (latest comments first)Discuss and comment on this resource in the BigAdmin Wiki
Unless otherwise licensed, code in all technical manuals herein (including articles, FAQs, samples) is provided under this License. |
BigAdmin SubscriptionsBigAdmin Areas
BigAdmin Sun Center
BigAdmin Topics | ||||