제목 : solaris8(x86) postgreSQL 7.0.2 설치기 ( 참고 : 솔라리스 7 에 postgreSQL 6.5 깔아서 아파치와 연동하기 번역 mid (windogs6392@hanmail.net)를 수정하여 작성하였습니다 아파치 등은 생략하였습니다 아파치나 tomcat php등의 설치는 linux와 동일합니다 그리고 제가 설치한 대로 사용한 자료들을 추가하였습니다 ) 여기에 쓰인 내용들은 게시판에 쓴글중 제가 install하면서 참고한 글들도 다시 제나름대로 정리하고 또 저처럼 solaris에서 설치하시는 분들이 install 하는 시간을 줄이시고자 나름대로 정리해 보았습니다 저는 총 3일 꼬박걸려서 Postgresql,tomcat, apache,php등을 설치 하였는데 사실 다른건 1-2시간 나머지는 꼬박 Postgresql에 걸렸지요 그리고 제가 쓴 방법이 꼭 맞는 것은 아님니다 다른방법이나 더 좋은방법 도 있다고 생각 됩니다 그러면 수정하셔서 올리시면 더욱 좋겠습니다 이글에 나오는 모든분들께 감사드립니다 제가 시스템을 설치하고 설정하는데 큰도움이 되었습니다 차 례 1. 솔라리스 설치 1-1. 솔라리스 설치 & 환경설정 1-2. jdk1.3으로 Upgrade 1-3. gcc & gmake 2. PostgresSql 7.0.2 2-1. compile 2-2. jdbc 1.솔라리스 설치 1-1.솔라리스 설치 및 환경설정 솔라리스 설치사항은 프로그램세계 10월호의 솔라리스내용을 참고하시면 될것 같습니다 이내용은 잡지에 나온 것이라 옮기지 않았습니다.그런데 한가지 더 유의 할점은 일반 사용자설치나 개발자용설치로하면 INSTALL CD 2/2가 설치 되지 않습니다. 만약 2/2를 설치하고 싶으시면 OEM + FULL MODE등으로 설치하시면 REBOOT후 다음장을 넣으라고 나옵니다. 그다음에 언어CD를 넣으라고 나옵니다 일반 사용자설치나 개발자용설치는 바로 언어CD로 넘어갑니다 혹시 2/2의 내용이 필요 없으신 경우 2/2의 CD를 넣고 package를 선택한 후에 pkgadd를 하시면 되겠지요. gcc & gmake등은 bonus cd에 있으므로 2/2 CD와 관계없지요 bonus cd 에서 자동설치인 경우는 /usr/local 에 설치 되지 않습니다 /opt/sfw 로 설정됩니다 그리고 gnu tar 는 설치되지 않으므로 작업을 하는데 xxxx.tar.gz을 바로 해제하거나 압축하시고 싶은 분들은 http://sunfreeware.com에서 받으셔서 설치하시고 이름을 gtar등으로 변경해서 /usr/bin등에 copy하시면 되는데 이름을 변경하지 않고 copy하면 나중에 저장장치 쓰실때 tar를 쓸때 피곤 하게 되는 경우가 발생할 수 있습니다 #mv /usr/local/bin/tar /usr/bin/gtar 등으로 하시고 밑의 설명에서 계속 gtar로 표기합니다 그리고 /etc/profile 을 변경 해주고 난후 작업에 들어 가면 됩니다 export PATH=”$PATH:/opt/sfw/bin” 다시 login 하시면 되겠지요 참고로 저의 path는 PATH=/usr/sbin:/usr/bin:/usr/ccs/bin:/opt/sfw/bin: /usr/local/pgsql/bin:/etc:. (한줄입니다) 1-2. jdk1.3으로 Upgrade (참고 : http://java.sun.com/j2se/1.3/install-solaris.html ) 솔라리스는 JDK1.2가 기본적으로 설치 됩니다 변경을 원하는 경우 다음과 같은작업으로 변경하시면 됩니다 a) http://java.sun.com/j2se/1.3/download-solaris.html 에서 Download JavaTM 2 SDK v1.3.0, Standard Edition Solaris Intel Platform: 을 선택하시고 username,password등을 입력후 (없으시면 등록하시면 됩니다) 반드시 다음의 사항을 유의 하세요 j2sdk1_3_0-solx86.tar.Z 로 받아야 됩니다 j2sdk1_3_0-solx86.bin로 설치하시려면 원문을 참조하세요 (package 나두고 다른방식은 ....) b) 받으신후 다음과 같은 명령어로 압축을 해제합니다 # zcat j2sdk1_3_0-solx86.tar.Z | tar -xf - 그러면 몇 개의 file이 생기는 것을 확인할 수 있는데 SUNW로 시작 하는 것들은 모두 package용 file입니다(linux로 치면 rpm 이지요 ) 다음의 file 들 입니다 SUNWj3dev SUNWj3dmo SUNWj3man SUNWj3rt c) 기존의 jdk를 삭제합니다 (1.2.x) pkgrm SUNWj2dem SUNWj2man SUNWj2dev SUNWj2rt (다음의 명령을 실행하기전에 pkginfo |grep JDK로 이름을 확인해 보세요) d) 새로운 package를 설치합니다 pkgadd -d SUNWj3dev SUNWj3dmo SUNWj3man SUNWj3rt 설치후 다시 확인하는 방법은 pkginfo |grep JDK 라고 치면 확인됩니다 # pkginfo|grep JDK system SUNWj3dev JDK 1.3 development tools system SUNWj3dmo JDK 1.3 demo programs system SUNWj3man JDK 1.3 man pages system SUNWj3rt JDK 1.3 run time environment system SUNWkj2rt JDK 1.2 run time environment (Korean supplement) path는 /usr/j2se 로 설치되며 내부 path가 걸리므로 확인하시면 되겠지요 # java -version java version "1.3.0" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0) Java HotSpot(TM) Client VM (build 1.3.0, mixed mode) 여기까지 하면 환경설정이 그럭저럭 된 것 입니다 혹시 su 로 login 하시는 분이 env명령으로 확인하였을때? path가 안걸려있거나 gcc가 실행이 안되는 분들은 /etc/profile을 확인 하시고 login 은 반드시 “su - “ 로 하세요 sh의 변경은 /etc/passwd 에서 하시면 되고 csh을 쓰는 경우 /etc/cshrc를 setenv 명령을 첨가하시면 되지요 (csh은 설명을 따로 하지 않겠습니다 저는 ksh,bash 로 작업을 하기 때문에) 1-3. gcc & gmake bonus cd 가 뭔지 모르시분이 계신지요. 혹시 모르신분이 계시면 다음 CD입니다 Software Companion CD 지요 Upgrade 된 내용들은 http://sunfreeware.com 에 있습니다 보너스 cd를 설치하셨으면 설치된 package 대부분이 설치 되어 있으므로 신경쓰실 경우는 없지만 xxx.tar.gz 을 풀기 힘드신분 들은 위에서 이야기 한 것 처럼 사용하시면 됩니다 a)확인할 package - GNU flex 2.5.4 혹은 그 이후 버전 - GNU bison (yacc는 솔라리스 2.6 작업 환경에 포함되어 있지 않다) - GNU zip (gzip 과 especially zcat 이 필요하다) - GNU make - GNU readline library - GNU cc(gcc 2.8.1) 다음은 저희회사기계에서 확인한 내용입니다 # pkginfo |grep GNU system SFWaconf GNU autoconf system SFWamake GNU automake system SFWamakeS GNU automake (Source) system SFWbison GNU bison system SFWbisonS GNU bison (Source) system SFWemacsS GNU Emacs (Source) system SFWflex GNU flex system SFWflexS GNU flex (Source) system SFWgcc GNU compilers system SFWgccS GNU Compilers (Source) system SFWgdb GNU source-level debugger system SFWgdbS GNU source-level debugger (Source) system SFWgimp GNU Image Manipulation Program system SFWgimpS GNU Image Manipulation Program (Source) system SFWgm4 GNU m4 system SFWgm4S GNU m4 (Source) system SFWgmake GNU make system SFWgmakeS GNU make (Source) system SFWgs GNU Ghostscript system SFWgsS GNU Ghostscript (Source) system SFWgsfot GNU Ghostscript Other Fonts system SFWgsfotS GNU Ghostscript Other Fonts (Source) system SFWgsfst GNU Ghostscript Standard Fonts system SFWgsfstS GNU Ghostscript Standard Fonts (Source) system SFWtexiS GNU texinfo (Source) system SUNWbash GNU Bourne-Again shell (bash) system SUNWgpch The GNU Patch utility system SUNWgzip The GNU Zip (gzip) compression utility system SUNWless The GNU pager (less) 이 모든것이 다 필요한것은 아니지요 참고 사항이지요 그러나 super user상에서 gcc , gmake등은 꼿 실행해 보세요 안되면 당연히 path와 pkginfo 이겠죠 # gcc --version 2.95.2 # gmake --version GNU Make version 3.78.1, by Richard Stallman and Roland McGrath. Built for i386-pc-solaris2.8 Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Report bugs to . 2-2. 환경설정 2-3. Test 2.PostgresSql 7.0.2 2-1. compile http://www.postgresql.org 에서 최신버전의 postgresql을 download 하고 (postgres-7.0.2.tar.gz 으로 충분합니다 여러개 다 받을 필요가 없지요) # cd /usr/local/src # mv /xxx/xxx/xxxx/postgres-7.0.2.tar.gz . # gtar -zxvf postgres-7.0.2.tar.gz 를 하면 /usr/local/src/ 밑에 postgres-7.0.2가 생기지요 여기서 몇가지 선행작업을 진행해야 되지요 (참고: PostgreSQL 7.0 의 설치기 (처음으로 컴파일 및 설치)정재익님의 글중에서 설치순서를 조정했습니다 http://database.sarang.net/board/pgsql.php3?table=pgsql&action=article&arg=996 ) 1. su - 2. useradd -d /usr/local/pgsql-7.0 postgres 3. groupadd postgres 4. cd /usr/local/src 5. cp ~ftp/pub/database/postgres/v7.0/postgresql-7.0.tar.gz . 6. tar -xvfz postgresql-7.0.tar.gz 7. cd postgresql-7.0 8. cd src 중 7.0을 7.0.2로 tar를 gtar 로 변경 하심되지요 원래대로면 9 에서 configure 10에서 make 되어 있는데 solaris에서는 몇가지 수정후 작업해야 됩니다 그냥 compile해보실분들은 해보시고 이런error나시는 분들은 저와 같이 하시기를 gmake를 하면 이런 메세지가 나옵니다 (make로 하시면 안됩니다) :: stringinfo.c:104: `va_list' undeclared (first use in this function) :: stringinfo.c:104: (Each undeclared identifier is reported only once :: stringinfo.c:104: for each function it appears in.) :: stringinfo.c:104: parse error before `args' :: stringinfo.c:121: warning: implicit declaration of function `va_start' :: stringinfo.c:121: `args' undeclared (first use in this function) :: stringinfo.c:124: warning: implicit declaration of function `va_end' :: gmake[2]: *** [stringinfo.o] Error 1 :: gmake[2]: Leaving directory `/usr/local/src/postgresql-7.0.2/src/backend/lib' :: gmake[1]: *** [lib.dir] Error 2 :: gmake[1]: Leaving directory `/usr/local/src/postgresql-7.0.2/src/backend' :: gmake: *** [all] Error 2 이런 error가 발생하면 다음의 문장을 참고하세요 (참조 http://www.postgresql.org 에서 search 에서 로 검색) Hi, [uname -a] SunOS master 5.7 Generic_106541-06 sun4u sparc SUNW,Ultra-Enterprise In, postgresql-7.0RC2/src/backend/stringinfo.c I need to declare #include <--추가 #include <--추가 the same for this file: postgresql-7.0RC2/src/backend/nodes/list.c need to declare #include <--추가 #include <--추가 Best regards Armand Delcros 그러나 이렇게 고치면 계속 다른 file들이 error가 나므로 제가 제시하는 방법으로 수정해보세요 /usr/local/src/postgres-7.0.2/src/include/postgres.h 의 문장에 #include #include 을 추가하세요 그러면 여러군데 찾아다니면서 고칠필요 없지요 당연히 위의 stringinfo.c list.c 에도 넣을 필요없지요 왜냐면 이 error 나는 file은 모두 postgres.h을 call 하니까요 이렇게 수정후 8 부터 진행하면 됩니다 여기에서 option 들을 추가하셔야 됩니다 (참고 http://database.sarang.net/board/pgsql.php3?table=pgsql&action=article&arg=703 안재석님의 글중에서 일부 이번에서 configure시에 with-maxbackends=64 를 해주었지요.. (전에는 그냥 Default로 했었거든요..) http://database.sarang.net/board/pgsql.php3?table=pgsql&action=article&arg=1444 midnight 글중에서 일부 필자의 경우 configure시 옵션은 --enable-multibyte --without-CXX 로 주었다. --with-maxbackends=n 옵션을 주지 않으면 default로 maxbackends 는 32가 된다. 이것은 추후에 조정 할 수 있으니 그냥 넘어가도 무방하다. ) http://database.sarang.net/board/pgsql.php3?table=pgsql&action=article&arg=996 정재익님 글중에서 일부 ./configure --prefix=/usr/local/pgsql-7.0 \ --enable-multibyte --with-perl\ --with-odbc --with-tcl ) 원하는 option 을 선택하세요 원래 내역은 /usr/local/src/postgresql-7.0.2/INSTALL을 참고 하시면 됩니다 간단히 보시려면 ./configure --help 하셔도 보입니다 제가 한것은 #./configure --prefix=/usr/local/pgsql --enable-multibyte --with-odbc 로 설정했습니다 저는 backend를 다른방식으로 처리할 예정이기 때문에 설정을 간단히 했습니다 당연히 다음에는 10. #gmake 11. #gmake install 12. #cd ../doc 13. #gmake install 14. #cd /usr/local/pgsql 15. #chown -R postgres * 16. #chgrp -R postgres * 17. su - postgres 18. cd /usr/local/pgsql-7.0 19. vi .bash_profile export PGDATA=/usr/local/pgsql/data export PGLIB=/usr/local/pgsql/lib export PGHOME=/usr/local/pgsql export MANPATH=$MANPATH:/usr/local/pgsql/man export LD_LIBRARY_PATH=/usr/local/pgsql/lib:/opt/sfw/lib:/usr/lib export PATH=$PATH:/usr/local/pgsql/bin:/etc:. USER=postgres 까지 진행하면 1차적인 부문이 끝나겠지요 여기서 다음으로 initdb로 넘어가기전에 linux와 다른 2가지의 문제가 발생합니다 1. 공유 memory error 2. lib link 위의 문제에 대한부문의 설명은 회피합니다 여러가지 설명이 너무 길어지고 1과 2의 문제도 사실 여기서 제시하는 것은 일종의 완벽한 해결책은 아니고 저도 documentation을 읽을 시간도 없어서 간단히 찾은 해결책만 제시합니다 그러나 아주 잘되지요 1. 공유 memory error 의 해결책 (참고 : psql 6.x -> psql 7.0.2 업굴 & 공유 메모리 문제 (솔라리스 7에서..) http://database.sarang.net/board/pgsql.php3?table=pgsql&action=article&arg=1444 midnight 님의 글중에서 ) ================================================================================== SunOS 의 커널 파라메터에서 디폴트 공유 메모리의 최대 세그먼트 크기는 psql을 운용하기 에는 너무 낮게 설정 되어 있다. 앞서 6.5를 설치했다면 shmmax의 값을 0x7fffffff 로 수정했을 것이다. 필자의 경우 이 값을 다시 수정해야 했다. 아래는 필자의 설정 내용이다 (설정은 /etc/system 파일끝에 추가하면 된다) set shmsys:shminfo_shmmax=134217728 set shmsys:shminfo_shmmin=100 set shmsys:shminfo_shmmni=100 set shmsys:shminfo_shmseg=100 set semsys:seminfo_semmap=120 set semsys:seminfo_semmni=250 set semsys:seminfo_semmns=250 set semsys:seminfo_semmsl=250 set semsys:seminfo_semmnu=250 set semsys:seminfo_semume=51 필자의 경우 서비스 중인 시스템을 약 30여차례 재부팅 --;; 한 끝에 중간 값을 사용하고 있다. 참고로 맨 위는 대략 128MB 를 데이터베이스에 할당하는 시스템일 경우 설정이다. 각 항목의 의미는 다음과 같다. shmsys:shminfo_shmmax Maximum shared memory segment size shmsys:shminfo_shmmin Mininum shared memory segment size shmsys:shminfo_shmmni Number of shared memory identifiers shmsys:shminfo_shmseg Number of segments, per process semsys:seminfo_semmap Number of entries in the semaphore map semsys:seminfo_semmni Number of semaphore identifiers semsys:seminfo_semmns Number of semaphores in the system semsys:seminfo_semmsl Maximum number of semaphores, per id semsys:seminfo_semmnu Number of processes using the undo facility semsys:seminfo_semume Maximum number of undo structures per process Solaris의 공유메모리에 대한 상세한 설명은 'How to Increase Shared Memory Segments' 문서에 있다. http://docs.sun.com:80/ab2/coll.47.8/SYSADV2/@Ab2PageView/43079?DwebQuery= SEMMNS&Ab2Lang=ko&Ab2Enc=euc-kr ================================================================================== 위 부문에서 각자의 system의 memory 및 swap 공간등을 확인하셔서 숫자를 조정 하셔야 합니다 실제memory의 용량이 작은데 큰공간을 차지한다면 결국 성능저하등이 발생하게 되겠지요. 공유 memory를 쓰지않는 process도 존재함을 생각하세요 다른 program이 실행이 안되는 경우도 발생하고 coredump등이 계속 발생할 수 있습니다 2. lib link 의 해결책 linux에서 install step 중에서 이부분이 바로 solaris step 중에서 문제가 되는 부문입니다 16. vi /etc/ld.so.conf /usr/local/pgsql/lib 17. ldconfig 위 내역은 system 이 boot될때 /usr/local/pgsql/lib 에 있는 LIBRARY가 설치되도록 하는 문장인데 .profile의 다음문장과 비슷합니다 export LD_LIBRARY_PATH=/usr/local/pgsql/lib:/opt/sfw/lib:/usr/lib 이런 대응하는 file이 있으면 거거다 넣어 주시면 가장 간단하겠지요 하지만 rc2.d 등에 자동 start되지 못하는 원인이 되지요 postmaster -i 하면 > pg_id: error in loading shared libraries: libpq.so.2.0: cannot open sh > ared objey 이런식으로 error가 발생합니다 ld.so.conf에 대응하는 file을 못찾아서 다음과 같은 방법을 했습니다 postgres의 .profile에 선언내용을 /etc/profile에도 넣었습니다 당연히 postgres의 .profile은 삭제하고요 그런후에 시스템을 reboot후 다음을 진행했습니다 20. su - postgres 21. initdb -E EUC_KR -d /usr/local/pgsql/data 22. createdb -E EUC_KR test 그리고 /etc/rc2.d에서 start시키는 명령file을 만들면 일차적인 설치는 끝입니다 다음의 문장을 보시고 자신의 postmaster start option을 결정하시기 바랍니다 (참고 : 다시 컴파일 했습니다..(참고로 몇가지 Postmaster 옵션들 설명했어요..) http://database.sarang.net/board/pgsql.php3?table=pgsql&action=article&arg=703 안재석 님의 글중에서 ) ================================================================================== 참고로 저는 postmaster에 -B n_buffers 옵션도 같이 사용합니다. default가 64이거든요..하지만 maxbackend값을 올려주면, backend server process를 배분하고 관리하기 위한 공유메모리버퍼 도 커져야 한다는 글을 읽어서.. 4096으로 우선 설정했습니다. (4096 buffer * 각 buffer당 8k = 32768k) 또 참고로.. postmaster에서 -o -F 옵션에 대해서.. postgres에서 -F 옵션은 fsync()를 사용하지 않는다는 뜻이라고 하더군요.. fsync()는 모든 트랜잭션이 완료된 직후 메모리에 있는 모든 버퍼내용을 디스크에 복사하는 기능을 가지고 있대요.. (더 잘아시는 분이 있으면 이것도 자세히 설명해주세요..^^*) 이 함수의 잇점은 OS crash나 DB server crash 혹은 전원이 나갔을때 모든 데이타가 디스크에 안전하게 복사될수 있도록 보장 해주는거 라는군요. 단점은 postgres의 속도가 느려진다는거... 따라서 postmaster에서 -o -F 옵션으로 Disable시켜주면 postgres의 속도가 5배에서 20배까지 빨라진다고 하고요.. 제가 가지고 있는 책에 시간을 비교해놓은 표가 있는데.. 두개의 50 character field에 1,000개를 insert하는 시간은 20배가 빠르고, 100,000개를 insert할때는 2배.. 그리고 1,000 record를 지울때는 5배가 빠르군요.. 그리고 1,000 adds 1,000 del 후의 vacuum 시간은 10배가 빠릅니다. 하지만 select 문에서는 시간차이가 거의 없어요.. (이 데이타는 참고만 하라고 써 있어요.. ^^*) select 문에서는 속도차가 없음을 인지하고, 절대적인 안정성이냐.. 속도냐의 문제는 DB 관리자가 잘 판단해야 할 문제라고 써 있군요.. 음..원래 하려고 했던 얘기는 다시 컴파일해도 계속 postmaster process가 뜬다는 거였는데.. psql 을 실행시킨후.. ps -ef|grep pgsql 로 보면, pgsql 2411 0.3 5.038744 3072 ? S 20:30:56 0:00 postmaster -i -B 4 pgsql 418 0.1 3.238280 1960 ? S 18:56:38 0:00 postmaster -i -B 4 ================================================================================== 가장기본적인 start 문장입니다 뭐 이런식으로 test해보시면 될겁니다 cd /etc/rc2.d vi S98postmastersh #bin/sh echo "PostgreSQL Starting .. " su - postgres -c "/usr/local/pgsql/bin/postmaster -S -i -D /usr/local/pgsql/data" 자신에 환경에 맞는 option을 설정하시기 바랍니다 2-2. jdbc jdbc를 사용하기를 원하시는분은 다음의 내용을 참조하시기 바랍니다 ( http://database.sarang.net/database/postgres/JServ/post_jdbc.html postgreSQL의 JDBC 활용하기 주효식 nogadax@kldp.org 2000년 6월 15일 ) 가장 간단히 설명하면 /usr/local/src/postgresql-7.0.2/src/interfaces/jdbc 로 이동하여 다음과 같은 명령을 주면 되지요 gmake jdbc1 jar (jdbc version 1) 이거나 gmake jdbc2 jar (jdbc version 2) 를 주면 postgresql.jar가 생성됩니다 이때 나오는 설명을 반드시 보고 설명대로 나중에 test해보시면 됩니다 이것을 /usr/local/pgsql/jdbc로 copy하고 /etc/profile에 export CLASSPATH="/usr/j2se/..../usr/local/pgsql/jdbc/postgresql.jar:." ->생략 하시고 test시 다시 이쪽으로 이동 하시어 해보세요. apache,php4,tomcat도 solaris에서 잘돌아갑니다 한번 해보세요 단 mod_jserv.so 는 만드시면 됩니다 연동해서 사용해보세요