Solaris 10 OS 및 Solaris Express용 SAMP(Solaris, Apache 2, MySQL 5 및 PHP 5) 설정Neal Pollack, 2006년 10월 SAMP 서버(Solaris, Apache 2, MySQL, PHP)에서 Solaris 10 OS를 사용하는 방법에 대해 설명하는 많은 문서와 블로그를 인터넷에서 찾을 수 있습니다. 하지만 이 기사의 내용은 대부분 이전 버전의 소프트웨어 패키지에 해당하며, 요즘에 보편적으로 사용되는 PHP 언어는 포함되지 않습니다. 내용 중 일부에는 여러분들이 프로세스를 이해할 수 있도록 도와주는 자세한 내용이나 예가 없을 수도 있습니다. 시작하기 전에 Solaris 10 OS 또는 Solaris Express의 설치에 Apache 2.0.x 및 MySQL 4를 포함하고 있음을 분명히 밝혀야 합니다. PHP 4는 Solaris 10 OS의 Companion CD에도 들어 있습니다. 하지만 현재로서는 Solaris OS가 PHP 5 또는 MySQL 5를 번들로 제공하지 않습니다. 이 기사에서는 기술 사용자에게 고유한 최신 PHP5 복사본을 작성하고, 복사본을 Solaris OS에 포함된 Blastwave의 MySQL5와 Apache2 버전으로 통합하는 방법에 대해 보여 줍니다. 하지만 소프트웨어 컴파일을 원치 않고, 최적화되어 성능이 높은 이 패키지의 Sun 빌드를 선호하는 사용자의 경우에는 http://cooltools.sunsource.net/coolstack/index.html 및/또는 http://sunfreeware.com/coolstack.html에서 Sun의 "Ready to Run" Cool Stack 패키지를 확인하십시오. 위의 패키지를 사용하여 SAMP 서버를 구성하기 위해 작성된 이전 기사는 BigAdmin 포털의 커뮤니티 게시물에서 찾을 수 있습니다. 하지만 이 기사에는 중요한 세부 정보가 없으며, 이전 버전의 Apach 1.3을 사용합니다. Mel Lester의 기사(BigAdmin 포털에서도 참조됨)가 잘 작성되었으며, 좀 더 많은 세부 정보를 보여 주고, 우리가 원하는 항목이 거의 들어 있습니다. 한 가지 예외는 Lester의 기사에서는 Solaris 10 OS에 번들로 제공되는 MySQL 4 버전을 사용하고, 우리가 선호하는 현재 MySQL 버전 5.x를 사용하지 않는다는 점입니다. 우리 중 대부분이 소프트웨어 재구축을 원하는 주된 이유로는 최신 패키지 버전을 얻고자 하기 때문입니다. 이 패키지에는 개선된 성능, 버그 및 보안 수정, 및 다양한 PHP 웹 응용 프로그램에 필요한 기능을 제공하는 컴파일 시 옵션이 포함되어 있습니다. 이 실습의 경우 설치 시 사용되는 소프트웨어는 다음과 같습니다.
주로 GNU 도구 체인을 사용하여 32비트 모드로 구축하겠습니다. 아래의 절차를 통해 위의 응용 프로그램 3개가 통합되어 Solaris 10 OS, Apache, PHP 5 및 MySQL 5 웹 응용 프로그램을 사용할 수 있게 됩니다. 작업 단계는 아래와 같습니다. 1. Solaris 10 OS, Solaris Express/Nevada 또는 OpenSolaris를 설치합니다. 2. 시스템에 네트워크가 지정되어 있어 인터넷에 연결할 수 있고 정적 IP 주소를 사용 중인지 확인합니다. 네트워크 구성 지원이 필요한 경우에는 System Administration Guide: IP Services 설명서를 검토하십시오. 3. Blastwave.org에서 MySQL 5를 설치하려고 합니다. 웹 브라우저를 열고 Blastwave.org's step-by-step guide로 이동한 다음 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. config 파일 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 업데이트의 최신 빌드는 이전 RC 파일 메소드 # /etc/init.d/cswmysql5 start
새 RC 파일 대신 SMF를 사용하는 Solaris 버전에 MySQL 5 패키지를 설치한 경우 해당 패키지에서 MySQL 5용 SMF 매니페스트를 설치했는지 살펴보고, 다음 명령을 사용하여 서비스의 상태를 볼 수 있습니다. # svcs -a | grep mysql disabled 13:36:01 svc:/network/cswmysql5:defaultMySQL 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 설명서를 참조하십시오. F. 선택 사항: 이 단계는 경우에 따라 수행됩니다. 다음 명령을 사용하여 MySQL 데몬에 대한 테스트 제품군을 실행할 수 있습니다. # cd /opt/csw/mysql5/mysql-test # ./mysql-test-run G. 설치를 확인합니다. # ./bin/mysql -p MySQL의 show databases;
quit 참고:
H. 참조 문서 I. MySQL 보안은 이 기사에서 다루지 않습니다. 하지만 고려해야 할 몇 가지 기본 단계는 다음과 같습니다.
위의 단계는 대략적인 내용이지만 설치 후 개선에 도움이 됩니다. 여러분이 선호하는 인터넷 검색 엔진에 "Securing MySQL"을 입력하여 웹에서 MySQL 보안에 대한 기사를 검토해 보십시오. 6. 이제 MySQL 5의 설치와 테스트 작업을 완료했습니다. 다음으로 PHP 5를 구축하겠습니다. Lester의 허락을 받아 Mel Lester의 웹 사이트에서 일정 부분을 도입합니다. 우리는 다른 옵션과 경로를 사용 중이므로 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를 검토할 수 있습니다. 다음 소프트웨어 버전은 비교적 비슷하거나 좀 더 최신 버전이어야 합니다. 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에서 최신 버전을 다운로드합니다. 이 시점에서 zip으로 압축된 소스의 다음 버전을 찾았습니다. # 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. 최신 프로덕션 버전의 PHP를 www.php.net에서 다운로드하고 컴파일합니다. 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 웹 서버를 설정하는 경우 다음과 같은 경로 예제(또는 사용 중인 영역)가 표시될 수 있습니다. 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 이러한 프로세스가 대략 10개 정도 발견되더라도 놀라지 마십시오. 물론 다음 프로세스로 인해서도 놀라지 마십시오.
root 49810 Jul 17 ? 1:28 /usr/apache/bin/httpd \
-f /etc/apache/httpd-standalone-ipp.conf
네트워크 포트 631에서 IPP(Internal Print Protocol) Listener가 사용 중인 이전 Apache 1.3일 뿐입니다. 포트 80에서 실행 중이 아니므로 여기에서는 사용 중인 웹 서버 구성과 충돌되지 않습니다. 7. 다음으로 Apache 2 웹 서버의
<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);
?>
위의 내용을 올바르게 복사하고 소프트웨어가 제대로 구성되어 있으면 웹 브라우저에서 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 기본 설치 및 config 파일 A. 위의 7단계에서 만든 B. 다음 자습서와 같이 보안 PHP에 대한 자습서를 꼭 검토해 보시기 바랍니다.
이를 수행할 시간이 여의치 않으면 적어도 제안된 구성 파일(좀 더 안전함) (# diff php.ini-dist php.ini-recommended | less) 이러한 내용이 몇 가지 질문에 대한 답이 되고, 유용한 힌트를 제공했기를 바랍니다. Solaris OS에서 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 | ||||