适用于 Solaris 10 操作系统和 Solaris Express 的 SAMP(Solaris、Apache 2、MySQL 5 和 PHP 5)设置Neal Pollack,2006 年 10 月 可以在 Internet 上找到许多说明如何将 Solaris 10 操作系统用于 SAMP 服务器(Solaris、Apache 2、MySQL 和 PHP)的文档和博客。但是,其中许多文章只适用于早期版本的软件包,或者不包括比较流行的 PHP 语言。还有一些文章缺少有助于您了解此过程的详细信息或示例。 在开始之前,应该明确 Solaris 10 操作系统或 Solaris Express 安装实际上包括 Apache 2.0.x 和 MySQL 4。Solaris 10 操作系统的随附 CD 中还包括 PHP 4。但此时 Solaris 操作系统未捆绑 PHP 5 或 MySQL 5。 本文档向技术用户介绍如何生成他们自己的 PHP5 最新副本,以及如何将其与 Blastwave 提供的 MySQL5 和随附在 Solaris 操作系统中的 Apache2 版本进行集成。但是,如果用户不希望编译任何软件,而愿意使用这些软件包经过 Sun 优化后的高性能的内部版本,请在 http://cooltools.sunsource.net/coolstack/index.html 和/或 http://sunfreeware.com/coolstack.html 中检出 Sun 的“可随时运行”的 Cool Stack 软件包。 可以在 BigAdmin 门户的社区提交中找到有关使用上述软件包配置 SAMP 服务器的早期文章。但是,该文章缺少重要细节,并且使用的是较旧的 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. 确保您的系统处于联网状态,以便它可以连接到 Internet 并使用静态 IP 地址。如果您需要有关网络配置的帮助信息,请查看此文档:System Administration Guide: IP Services(系统管理指南:IP 服务)。 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 现在,要确保 MySQL 在重新引导后启动,请继续阅读下文。 注: Solaris Express、Nevada 和 Solaris 10 更新的最新内部版本使用 SMF 来启动守护进程(如 旧的 RC 文件方法: # /etc/init.d/cswmysql5 start
新的 如果在使用 SMF(而不是 RC 文件)的 Solaris 版本上安装 MySQL 5 软件包,您会发现软件包安装了 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' (如果鉴于下面第 I 部分的步骤 5 中的安全性讨论而禁用了网络访问,则前面的命令行将会失败并且不再需要。 有关详细说明,请参见 MySQL 5 documentation(MySQL 5 文档)。 F. 可选:此操作需要一段时间。您可以使用以下命令运行 MySQL 守护进程的测试套件: # cd /opt/csw/mysql5/mysql-test # ./mysql-test-run G. 检查安装: # ./bin/mysql -p 系统将提示您输入 MySQL show databases; 将返回 quit 注:可以通过创建和编辑
H. 参考文档: I. 本文档不涉及 MySQL 安全性方面的内容。但下面提供了一些需要考虑的基本步骤:
上述步骤只是一些基本措施,但可以在安装后明显提高安全性。请在常用的 Internet 搜索引擎中输入 "Securing MySQL",以查看 Web 上有关 MySQL 安全性的文章。 6. 现在我们已经完成 MySQL 5 的安装和测试。接下来将生成 PHP 5。经过 Mel Lester 的许可,我们将从 Mel Lester 的 Web 站点借用部分内容。由于我们使用不同的选项和路径,因此需要修改某些 PHP 配置。 特别是,我们将在编译前更改 PHP 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(Solaris 具体安装提示)部分。)以下软件的版本应该比较类似或更新一些: 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 build 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 这是我们与原始 Web 页的不同之处。原始 Web 页使用的是较旧的 MySQL 4(可在 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 将 Web 页文件名的 AddType application/x-httpd-php .php
有些用户习惯在 I. 启动 Apache 2 并进行测试。 警告:如果您之前已通过其他 SAMP 文章、随附 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 如果找到大约 10 个此类进程,请不要惊慌。另外,在看到以下进程时也不要惊慌:
root 49810 Jul 17 ? 1:28 /usr/apache/bin/httpd \
-f /etc/apache/httpd-standalone-ipp.conf
它只不过是网络端口 631 上 Internet 打印协议 (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 代码复制到文件(Web 页)中,并为其指定类似 以下为 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 有关的教程,如以下任一教程:
如果您没有时间阅读这些教程,请至少查看一下 PHP 源代码目录中所建议的(也是较安全的)配置文件 (# diff php.ini-dist php.ini-recommended | less) 我希望本文档已经回答了一些问题并提供了有用的提示。希望您能在 Solaris 操作系统上顺利使用 SAMP 服务器! 除非另行颁发许可,否则此处所有技术手册中的代码(包括文章、常见问题解答和样例)只能在本许可下使用。 |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||