http://rss.ohpy.com/xml/26350/146845/RSS2.0.xml

고스트 공부하다 유용한 정보를 발견했습니다.

이것은 대기업 제품 처럼,  컴이 부팅이 안될 정도로 소프트 웨어적인 문제가 있을 때,

부팅시 F11 ,키만 누르면 자동으로 자신이 백업해둔 컴의 상태로 컴이 복구되게 끔 하는

기법을 알려줍니다.

 

원본을 어렵게 퍼 왔습니다. 동영상이 안보이면 아래 원본 사이트에 가셔서 확인해보시기 바랍니다.

 

 

 

[원글 출처] ; http://blog.daum.net/kmk0838/1715862

 


퍼가시는건 자유지만 구글 애드샌드나 광고가 있는 홈페이지에는 절대 게재하지 마십시요..

그리고 퍼가실땐 출처를 반드시 표기해 주시기 바랍니다..

 

 

원버튼 복구 솔루션(IBM BMGR & Norton Ghost 사용)

▒  간략한 소개


IBM Rescue and Recovery란(이하 R&R) IBM컴퓨터의 응급복구를 위해 개발된 통합 응용프로그램인데요. 이 문서에서는 R&R의 다양한 기능 중 가장 핵심이라고 할 수 있는 '부트 매니저 제어기(BMGR)'만 따로 추출해서 'Ghost와 결합'하는 방법을 알아 보도록 하겠습니다. 이 방법은 하드디스크의 일부분을 복구영역으로 만들기 때문에 CDROM USB같은 외부장치가 필요없고, 단지 F11키를 누르는것만으로 신속하고 간단하게 컴퓨터를 복구하실 수 있습니다. 

▒  지원하는 운영체제


 Windows 2000/XP/Vista

▒  부팅시디의 구성내용


  ① Partition Magic 8.05 for DOS.
  ② BMGR (IBM Rescue & Recovery 4.1 Boot Manager).
  ③ Norton Ghost 11.0.1.1533 for DOS.
  ④ MS-DOS 7.10.

* 참고 : 이 시디에 사용된 BMGRRescue and Recovery 4.1에서 추출한 최신버전 입니다.

http://www-06.ibm.com/jp/domino04/pc/support/beginner.nsf/document/MIGR-4Q2QAK-KR



▒  부팅시디 만들기


저작권 문제 때문에 어쩔 수 없이 '고스트파티션매직'을 빼버렸습니다. 하지만 다행히 Hirens BootCD안에 두 프로그램이 포함되어 있으므로 이를 추출해서 부팅시디 만드는 방법을 설명해드리겠습니다. 귀찮으시더라도 직접 따라하시길 바랍니다.


http://www.9down.com/Hiren-s-BootCD-9-2-14520


1. 먼저 위 주소에 가셔서 Hirens.BootCD.9.2_www.9down.com.rar 파일을 다운로드 하신후 압축을 푸세요.(용량이 꽤 커서 다운받는데 30분에서 1시간정도 걸립니다.)


위 주소에서 다운이 안되면 '넷폴더'에 가입하시고 무료모드로 다운로드 하세요..(hiren 으로 검색하면 많이 나옴)

http://www.netfolder.co.kr


2. 압축을 푸시면 Hiren's.BootCD.9.2.iso 파일이 나오는데, 이 파일 역시 압축을 풉니다.


3. 다음으로 BootCD 폴더에 들어가셔서 아래 세개의 파일을 적당한 폴더로 복사하세요.(ex C:\temp)
   Ghost.uha     <---  Norton Ghost 11.0.1.1533 for DOS
   pqpm.uha      <---  Partition Magic 8.05 for DOS
   uharcd.exe    <--- 도스용 uha 압축해제 프로그램


4. '시작->프로그램->보조프로그램->명령 프롬프트' 를 띄운 다음 C:\temp 디렉토리 가셔서 아래와 같이 입력하세요..(알집이나 WinRAR로는 압축을 못풀기 때문에 이렇게 푸셔야 합니다..)

    C:\Documents and Settings\홍길동>cd c:\temp


    C:\temp>uharcd.exe x Ghost.uha
         GHOST.EXE


    C:\temp>uharcd.exe x pqpm.uha         PMHELP.DAT      PQMAGIC.EXE    PQMAGIC.OVL   
         PQMAGIC.PQG    PQPB.RTC         ZABOUT.PQG


5. 이제 제가 첨부한   ibm_rnr40(CD).rar   파일을 다운로드 하신후 압축을 푸세요. 그럼 아래의 폴더와 파일이 나옵니다.

        [Boot_img]     [Root]     시디이미지생성.cmd     cdimage.exe


6. 위에서 추출한 고스트 파일을 Root\UTIL 폴더로 복사하세요.

        GHOST.EXE


7. 위에서 추출한 파티션매직 파일들을 Root\PM80 폴더로 복사하세요.
        PMHELP.DAT      PQMAGIC.EXE    PQMAGIC.OVL   
        PQMAGIC.PQG    PQPB.RTC         ZABOUT.PQG


8. 마지막으로 '시디이미지생성.cmd' 파일을 더블클릭 하시면 부팅 가능한 시디이미지파일(ibm_rnr.iso)이 만들어 집니다. 이 이미지파일을 공미디어에 레코딩 하신후 아래 순서대로 진행하세요.


이해가 잘 안되시는분들은 동영상을 참고하세요.. ^^






▒  부트USB 만들기


http://www.prime-expert.com/flashboot  <-- FlashBoot  홈페이지


fbw-1.4-build157-setup.exe  <-- FlashBoot 프로그램 직접 다운로드.


http://crackteam.ws  <--  FlashBoot으로 검색 v1.4.0.157 크랙을 다운받으시고 압축을 푸셔서 license.xml 파일을 프로그램이 설치된 폴더(C:\Program Files\FlashBoot)에 복사하세요..



*주의 : 작업이 끝나면 USB메모리의 모든 데이터가 날아가니 미리 백업 하시고 진행하세요.



1. 첨부한 ibm_rnr40(USB).rar 파일을 다운로드 하시고 압축을 푸세요. 아래의 폴더와 파일이 나옵니다.

        [DOS]      DOS71.IMA      USB가 A로 인식될때.exe      USB가 C로 인식될때.exe

 

2. 컴퓨터에 USB메모리를 꽂고 FlashBoot 프로그램 실행한후 Next 클릭.


3. Convert floppy 밑에 Create bootable flash disk as a copy of DOS-based floppy disk 체크하고 Next 클릭.


4. Image file 밑에 Browse버튼을 클릭하시고 위의 부트이미지(DOS71.IMA)를 선택한후 Next 클릭.


5. 본인의 USB드라이브를 선택하고 Next 클릭.


6. USB-HDDUSB-ZIP중 아무거나 하나를 선택하고 Next 클릭.


7. Finish버튼을 누르면 USB에 도스가 설치되고 부팅가능한 USB가 됩니다.


   *필독 :  다음과정을 진행하기전에 USB를 미리 부팅해보셔서 USBA:로 잡히는지 C:로 잡히는지 확인해보시기 바랍니다.

              만일 USB메인보드FDD Emulation 기능이 없어서 USBC:로 잡아버린다면 'USB가 C로 인식될때.exe' 를

              실행해서 '설치' 버튼을 누르고 덮어쓴뒤 다음과정을 진행하세요.(기본적으로 A:로 설정 되있음.)


8. 위의 DOS폴더에 들어가셔서 아래 폴더와 파일들을 USB의 루트에 그대로 복사하세요.

        [BAT]                  [DOS71]          [ROOT]  

        AUTOEXEC.BAT    CONFIG.SYS     LOGO.SYS


9. 위에서 추출했던 고스트 파일을 Root\UTIL 폴더로 복사하세요.

        GHOST.EXE


10. 위에서 추출했던 파티션매직 파일들을 Root\PM80 폴더로 복사하세요.
        PMHELP.DAT      PQMAGIC.EXE    PQMAGIC.OVL   
        PQMAGIC.PQG    PQPB.RTC         ZABOUT.PQG


이상으로 복구영역을 만들 수 있는 부트USB를 만들어 보았습니다.





▒  시작하기전... 원리파악


 * BMGRMBR에 설치된 후 작동되는 원리입니다. 컴퓨터를 켜고 윈도우로 진입하기 직전 약 3초동안 특수키(F11) 입력을 기다리는 메시지가 포스트 되는데, 이때 F11키 입력을 받으면 도스로 부팅되고, 받지 못하면 윈도우XP로 부팅이 됩니다. 부팅되는 과정은 순서로 진행되고 아래는 그 내용을 도식화 해본겁니다.






▒  진행 순서


3단계로 구성되어있고 모든 작업은 도스일괄파일로 자동화 했기 때문에 컴퓨터나 도스를 잘 모르시는 초보분들도 순서대로 따라하시면 쉽게 설치 하실 수 있습니다.


  1단계 - Partition Magic으로 서비스파티션 분할하기.(2000/XP 사용자)

            디스크 관리도구로 서비스파티션 분할하기.(Vista 사용자)


  2단계 - 서비스파티션에 MS-DOS 7.10을 설치하고 BMGR 설치하기.


  3단계 - 서비스파티션으로 부팅 후 Ghost로 백업 및 복구하기.






  1단계 - Partition Magic으로 서비스파티션 분할하기.(2000/XP 사용자)


* 윈도우를 최적화된 상태로 설치 하신후 작업을 진행하시기 바랍니다.


1) 위에서 만든 부팅시디부트USB로 부팅하면 아래와 같은 화면을 볼 수 있습니다. IDE(P965보드지원), SATA, USB 이렇게 세종류의 시디롬을 지원합니다. 자신의 시디롬 타입에 맞게 선택하시고 엔터를 누르세요.(SCSI시디는 쓰는 사람을 보지 못했기 때문에 빼버렸습니다.)



2) 아래 화면과 같이 메뉴구성은 IDE, SATA, USB 모두 동일하고 순서대로 진행하시면됩니다.  첫 번째 메뉴 Partition Magic 8.05 for DOS. 를 실행하세요.



3) Partition Magic이 실행되면 다음과 같은 화면을 볼 수 있습니다. 아래는 파티션 구성의 한 예인데요. 80기가C에는 10기가, 나머지는 모두 D에 할당했습니다. C,DNTFS으로 포맷 되 있고 Windows XPC에 설치된 상태입니다. 근데 간혹 파티션을 전부 FAT32로 사용하시는분이 계실지도 모르겠는데.. 이렇게 사용하시면 포맷도스설치수작업으로 하셔야 하므로 웬만하면 NTFS으로 사용하실것을 권합니다. (제일 마지막에 있는 7.8MB Unallocated 공간은 XP를 설치하면 자동으로 만들어지는데, 기본디스크동적디스크업그레이드할때 필요한 즉, RAID를 대비하기 위해 예약된 공간이니 신경쓰지 않으셔도 됩니다.. 지워도 무방..)

-파티션 상식-

부팅이 가능한 Primary()파티션은 총 4개까지 나눌 수 있구요. 파티션이 4개 이상 필요할 경우에는 Extended(확장)파티션을 만들고 그 밑에 Logical(논리)드라이브를 만들면 됩니다. 논리드라이브는 개수에 제한이 없기때문에 용량이 허락하는 한 무한대로 만들수 있습니다.



4) 파티션중 여유가 있는 공간을 떼어내도록 합니다. 여기서 주의하실점은 가장 앞부분절대!! 네버!! 건들지 마시길 바랍니다. 그외 나머지 빨간색으로 표시한 부분들은 사용하셔도 아무 문제 없습니다. 그리고 간혹 몇몇 사람들이 파티션매직 때문에 데이터 홀라당 날려먹었다고들 하시는데.. 잘못 사용해서 그런것이지 프로그램 잘못이 아니라는걸 말씀드립니다. 그래도 만일을 대비해서 중요한 데이터는 반드시 백업하시고 진행해주시기 바랍니다. 자 그럼 두번째 파티션에 마우스 오른쪽 버튼을 누르고 Resize/Move.. 를 클릭합니다.



5) 뒷부분(Free Space After)에 원하는 파티션 크기를 적은후 OK 버튼을 클릭합니다. 물론 앞부분(Free Space Before)에 만드셔도 아무 문제 없습니다. 여기에선 뒷부분에 만들도록 하겠습니다. (크기는 보통 2.5~3기가가 적당한데, 어플을 많이 설치하는 분들은 넉넉하게 4~5기가 정도 잡아주세요.)



6) 위에서 설정한 크기대로 '할당되지 않은 빈 공간(Unallocated)'이 만들어집니다. 이 공간 위에 마우스 오른쪽 버튼을 누른후 Create...를 클릭하세요.



7) 아래와 같이 나오면 Create as Primary Partition을 선택하고, Partition TypeFAT32를 선택한 다음 OK 버튼을 클릭합니다. (반드시 이렇게 설정해야만  도스부팅할 수 있고, BMGR 루틴이 작동될 수 있습니다.)



8) 이제 도스로 부팅이 가능한 Primary.FAT32 파티션이 만들어졌습니다. Apply버튼을 눌러 적용하고 작업이 끝나면 Exit버튼을 클릭하세요. (*주의 : D파티션에 데이터가 많으면 분할하는데 시간이 많이 걸립니다. 혹여 다운됐다는 생각이 들수도 있으나, 진행 중인 상태이므로 절대 전원끄지마시고 끝날때까지 차분히 기다리세요..)



9) 이상으로 서비스파티션분할을 마쳤습니다. 다음 대화상자가 나오면 OK버튼을 클릭해서 컴퓨터재시작 하시고 다음 2단계 과정을 수행하세요.




 

  디스크 관리도구로 서비스파티션 분할하기.(Vista 사용자)


1. 컴퓨터에 마우스 오른쪽 버튼을 누르고 관리를 클릭하세요.(비스타로 넘어 오면서 파티션 관리가 매우 강력해졌네요..) 



2. 디스크 관리를 클릭하세요.



3. D드라이브에 마우스 오른쪽 버튼을 누르고 볼륨 축소를 클릭하세요.



4. '축소할 공간 입력'에 원하는 크기를 넣어주시고 축소버튼을 클릭하세요.(여기선 7기가)



5. 7기가의 빈 공간에 마우스 오른쪽 버튼을 누르고 '새 단순 볼륨'을 클릭하세요.



6. 빠른 포맷 실행에 체크 -> 파일 시스템 FAT32로 변경 -> 볼륨 레이블빈칸으로 만들고 다음 버튼을 눌러서 포맷.. 이제 컴퓨터를 재시작하시고 2단계 과정을 수행하세요.





  2단계 - 서비스파티션에 MS-DOS 7.10을 설치하고 BMGR 설치하기.


※ 위에서 만든 서비스파티션이 부팅 될 수 있게 DOSBMGR을 설치하는 과정입니다.


1) 다시 부팅시디부트USB로 부팅한 뒤, 두 번째 메뉴 'Install MS-DOS 7.10 => Install BMGR(IBM R&R Boot Manager).'를 실행합니다.



2) 아래 FORMAT명령줄은 위에서 만들었던 서비스파티션레이블명IBM_SERVICE로 넣어주고 포맷한 뒤 DOS설치하는 작업입니다. 여기서 레이블을 넣어주는 이유는 특수키(F11)를 눌렀을때, 부트매니저(BMGR)가 서비스파티션을 찾아서 부팅 할 수 있도록 해주기 위해서입니다. 자 그럼 y를 입력 후 엔터를 누르세요. 이때 Ghost 및 복구에 필요한 파일들도 모두 서비스파티션에 설치됩니다.(※ 참고 : 레이블명은 BMGR.EXE 파일을 헥사에디터로 연후 원하는 이름으로 수정할 수도 있습니다.)



3) 파일들의 설치가 모두 끝나면 다음과 같은 화면이 나옵니다. 엔터키를 누르면 bmgr /v 명령으로 레이블을 확인하는 화면이 나옵니다.



4) 뭔가 복잡한? 화면이 나오는데, 알고 보면 별것 없습니다. 디스크파티션테이블을 검사해서 FAT32파티션을 찾은 다음, 레이블이 기록되어 있는 섹터를 읽어온 뒤, 레이블IBM_SERVICE가 맞는지를 검사하는 루틴이죠. 실제 부팅 중에도 우리 눈에는 보이지 않지만 이런 과정을 거친 뒤 서비스파티션으로 부팅이 되는것입니다. Yes! label is IBM_SERVICE 라고 나온다는것은 특수키(F11)를 눌렀을때 서비스파티션으로 찾아 갈 수 있다는 말입니다. 확인하셨으면 엔터키를 눌러 다음으로 넘어갑니다.
        0x07 NTFS partition.
        0x0F extended-LBA partition.
        0x0c FAT32 Partition.



5) BMGR 설치 화면입니다. 특수키를 고르셔야 하는데 F11키만 사용할 수 있는게 아니라, F1~F12중 원하는 키를 모두 사용할 수 있습니다. 9번을 입력하면 확장된 메뉴가 나타나서 나머지 키(F9~F12)들도 선택하실 수 있습니다.



6) 특수키(여기에선 F10)에 해당하는 번호(2)를 입력함과 동시에 MBR부트매니저(boot.bin)가 설치됩니다. 머리아프신분은 그냥 이렇게 되나보구나 하고 넘어가시구요.. 더 자세히 알고 싶으신분은 아래 설명을 읽어보세요.. 여기까지 설치의 모든 과정이 끝났습니다. 이제 엔터키를 눌러서 재부팅하시고 'GHOST로 백업&복구' 하는 과정을 수행하세요.

좀더 설명드리자면.. 위의 BMGR 명령 중 가장 중요한건 /CFG 옵션 뒤에 나오는 설정 파일(f10.txt)인데요. 편집기로 열어보면 아래와 같습니다.


      <PROMPT1=To Start the Product Recovery program, press F10>
      <Wait=10>
      <KEY1=F10>


   1) PROMPT1= : 메시지를 설정하는 부분입니다. 공백이나 도트(.)로 사용자가 알아볼 수 없도록 메시지를 숨길 수도 있습니다.

   2) Wait= : 대기시간을 설정하는 부분입니다. 단위는 ¼초로 102.5초가 됩니다.

   3) KEY1= : 서비스파티션에 진입하기 위한 특수키를 설정하는 부분입니다.(F1~F12)


다음으로 중요한 옵션은 /HS /P12 인데요.(이 두 옵션은 반드시 함께 써야함.) 파티션 유형을 Compaq OEM partition(윈도우에서 포맷 및 삭제를 할수없음)으로 설정하고 서비스파티션을 숨기는 기능을 합니다.  /M2 옵션은 'Rescue & Recovery 환경'이 DOS가 있는 서비스파티션에 있을때 넣어주는 것이고, 마지막으로 /OEM 옵션은 IBM컴퓨터가 아닐때 넣어주시면 됩니다. 근데 만약 IBM노트북이나 컴퓨터를 사용하고 계신다면 /OEM 대신 /THINK 또는 /IBM을 넣어주셔야 BIOS연동이 되니깐 참고하시구요. 아래 명령중 하나를 사용하세요..(어느걸 쓰셔도 모두 동일하고 /CFGf11.txt 옵션은 무시되기 때문에 생략하셔도 문제 없습니다.)


   BMGR.EXE /Fboot.bin /HS /P12 /M2 /IBM

   BMGR.EXE /Fboot.bin /CFGf11.txt /HS /P12 /M2 /THINK

   BMGR.EXE /Fboot.bin /CFGf11.txt /HS /P12 /M2 /IBM

   BMGR.EXE /Fboot.bin /CFGf11.txt /HS /P12 /M2 /THINK /IBM



         /P12: hide SP with type 12 - must be used with /Hx flag (BMGR /H 도움말중)
         Value: 0x12  File system: Compaq OEM partition. (http://support.microsoft.com/kb/320283)





  3단계 - 서비스파티션으로 부팅 후 Ghost로 백업 및 복구하기.


1) 컴퓨터를 재시작하면 윈도우로 진입하기 전 아래와 같은 메시지가 2.5초가량 나옵니다. 사라지기전에 재빨리 F10키를 여러번 누르시면 서비스파티션으로 부팅됩니다.



2) 서비스파티션으로 부팅된 후 아래의 메뉴가 나타나고 10초가 카운트 됩니다. 그대로 놔두면 메뉴의 1번 복구 명령이 실행되는데, 아직 백업을 하지 않은 상태이므로 재빨리 커서를 아래로 움직여서 도스명령프롬프트로 나가주세요.(만일의 사태를 대비해서 메뉴에는 백업기능을 빼버렸습니다.)



3) 이제 백업을 해보죠.. 메뉴에 백업기능을 빼버린 대신 배치파일로 작성해 놓았습니다. 단순히 backup이라고 입력한 후 엔터를 치면 간단하게 백업이 됩니다.


아래와 같이 고스트가 실행되면서 백업이 시작되고, 작업이 끝나면 C:\IMAGE 폴더안에 BACKUP.GHO고스트이미지파일이 만들어 집니다. 확인하셨으면 컴퓨터재시작하고 윈도우로 부팅하세요..


BACKUP.BAT 파일안에 백업을 위한 고스트명령줄은 아래와 같습니다. 컴퓨터의 사용목적에 따라 파티션개수서비스파티션위치가 달라질 수 있으므로 DST에는 1:3같이 고정된 표현대신 C:\을 사용해야 문제가 없습니다. 그리고 8.0 버전부터는 -noide 옵션을 붙이지 않아도 SATA하드 사용시 문제가 없으니 참고하시기 바랍니다.


GHOST.EXE -CLONE,MODE=PDUMP,SRC=1:1,DST=C:\IMAGE\BACKUP.GHO -Z3 -SURE



4) 백업이 끝났으면 이제 복원이 잘되는지 시험해봐야죠? 먼저 복원이 잘되는지 유무를 알아보기 위해 일단 윈도우로 부팅한 후 바탕화면이나 C드라이브폴더를 몇 개 만들어 주고 컴퓨터를 재시작 합니다. 그리고 나서 아래의 메시지가 보이는 즉시 F10키를 눌러 서비스파티션으로 부팅하고 1번을 선택해서 복원해봅니다.


아래와 같이 고스트가 실행되면서 복구가 시작되고, 작업이 끝나면 자동으로 재시작 합니다. 이제 윈도우로 부팅해서 위에서 바탕화면이나 C드라이브에 만들어놨던 폴더들이 사라졌는지 확인해보세요. 사라졌나요? 그럼 복원에 성공한것입니다. ^^;


AUTOEXEC.BAT 파일안에 복원을 위한 고스트명령줄은 아래와 같이 구성되어 있습니다.(고스트 옵션에 대한 자세한 설명은 시만텍코리아에 가셔서 '스위치 목록'으로 검색해보세요.)


GHOST.EXE -CLONE,MODE=PLOAD,SRC=C:\IMAGE\BACKUP.GHO:1,DST=1:1 -FNF -FDSZ -SURE -RB



5) 수고하셨습니다!! 모든 과정을 끝마쳤습니다. 이제 윈도우로 부팅한 후 '내 컴퓨터->관리->디스크관리'로 가셔서 IBM_SERVICE파티션에 마우스 오른쪽 버튼을 눌러보세요. '도움말(H)'만 나오죠? OEM Partition으로 구성되있어서 이렇게 나오는 것입니다. 윈도우에선 삭제포맷불가능하고, 또한 속성숨김으로 되있기 때문에 '내 컴퓨터'에도 나타나지 않습니다.




6) 마지막 팁입니다. 간혹 지인들의 컴퓨터를 손봐줄 때가 있는데, 굳이 메뉴를 보여줄 필요가 없을 것 입니다. 단지 F10키를 눌렀을 때 바로 복구가 되도록 하려면, 아래와 같이 도스모드로 나가셔서 menuoff 를 입력한 후 엔터를 누르세요.



다시 메뉴를 보고 싶다면, F10을 누른 직후 고스트가 뜨기전에 재빨리 F5키를 여러번 눌러주세요. 그럼 아래와 같이 도스로 빠지는데, 이때 menuon 을 입력한 후 엔터를 누르시면 다시 메뉴가 나오게 됩니다.





이제 시스템에 이상이 생길때마다 위에서 설정했던 특수키(F1~F12)를 누르시면 신속하고 간단하게 컴퓨터를 복구하실 수 있습니다.




이해를 돕기 위해 위의 모든 과정을 동영상으로 만들어 봤습니다.. 참고하세요.. ^^



첨부파일 bmgr32_4.0.106.0_Vista.rar (99 KB) 다운로드 bmgr32_4.0.101.0_2K,XP.rar (32 KB) 다운로드 ibm_rnr40(CD).rar (1352 KB) 다운로드 ibm_rnr40(USB).rar (886 KB) 다운로드


[원글 출처] ; http://blog.daum.net/kmk0838/1715862

Posted by [czar]
,
한글이 포함된 utf-8로 인코딩된 파일을 비교할때 한글이 깨질수가 있다.
winmerge 옵션에서 codepage 를 65001 로 변경하면 된다.

Posted by [czar]
,
http://www.ibm.com/developerworks/kr/library/opendw/20061017/

보통 톰캣으로 서비스 구축할 때 안정적으로 서비스하려면 한 서버에 톰캣을 4개 정도 구동시켜야 한다고 하던데 ㅎㅎ

웹 개발자에게 있어 톰캣은 JSP를 배우거나 간단한 테스트를 하는 정도의 웹 컨테이너로 생각하는 경우가 많다. 하지만 근래 들어 기업 및 대형 포탈에서 상용 서비스를 위한 웹 컨테이너로서 톰캣을 선택해, 성공적으로 적용한 사례들이 늘고 있다. 톰캣에서 안정적인 웹 서비스를 제공하기 위해서 지원하는 기능은 5가지가 있다. 아파치 웹서버와 연동, 로드밸런싱, 세션 클러스터링, 데이터베이스 처리, 모니터링 및 관리 등이 그것이다.
이 문서에서는 로드밸런싱과 세션 클러스터링 위주로 설명을 할 것이며, 다음에 기회가 된다면 다른 부분에 대해서도 자세히 알아보도록 하겠다.

아파치 웹 서버와 톰캣의 연동

일반적으로 정적인 페이지를 서비스할 때는 웹서버가 훨씬 더 좋은 성능을 발휘한다. 또한 이렇게 역할 분담을 함으로 톰캣에 가중되는 부하를 줄여주는 효과도 얻을 수 있다. 아파치웹서버와 톰캣을 연동하는 것을 일반적으로 ‘커넥터(Connector)'라고 부르며, 여기에는 WARP 커넥터, JK 커넥터 그리고 JK2 커넥터가 있다. 이중에서 WARP와 JK2는 공식 커넥터에서 제외되었고 현재 남아 있는 것은 JK 커넥터뿐이다. 그럼 먼저 JK 커넥터를 이용해서 아파치 웹서버와 톰캣을 연동해 보도록 하겠다.
아파치 웹사이트에서 바이너리 혹은 소스 코드를 다운로드 받도록 하자. 유닉스 혹은 리눅스는 mod_jk.so이며 윈도우용은 mod_jk.dll이다. 이 파일을 아파치 웹서버의 modules 디렉토리에 저장한다(주의, 아파치 웹서버를 컴파일해서 사용하는 경우는 컴파일시에 DSO 기능이 가능하도록 설정해줘야 한다). 저장을 한 후에 아파치 웹서버에 해당 모듈을 인식시켜야 하며 아파치 웹서버의 httpd.conf 파일에 다음 내용을 추가하도록 하자.


리스트 1. httpd.conf

        ...
LoadModule jk_module modules/mod_jk.so    # 모듈 추가
JkWorkersFile "conf/workers.properties"   # JK 설정 파일 위치 및 이름
 
JkLogFile "logs/mod_jk.log"               # JK에 대한 로그 파일 위치
JkLogLevel info                           # 로그 레벨 지정
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"   # 로그 시간 포맷 지정
JkRequestLogFormat "%w %V %T"             # 로그 내용 포맷
JkMount /* loadbalancer                   # URL 링크 -> 모든 요청을 톰캣으로 지정
JkMount /servlet/* loadbalancer           # URL 링크 -> servlet 요청을 톰캣으로 지정
...

위와 같은 설정을 하게 되면 아파치 웹서버로 들어온 모든 요청을 톰캣으로 재전송 하게 된다. 만일 JSP와 서블릿만 톰캣에서 서비스를 하고 나머지는 아파치 웹서버에서 서비스 하고자 한다면 다음과 같이 수정하면 된다.

  
JkMount /*.jsp loadbalancer                # URL 링크 -> *.jsp 요청을 톰캣으로 지정 
JkMount /servlet/* loadbalancer           # URL 링크 -> servlet 요청을 톰캣으로 지정 

httpd.conf에는 위의 내용이 전부이다. 그럼 이제 workers.properties 파일을 작성해 보도록 하겠다. 이 파일이 실제 로드밸런싱을 위한 설정이 되겠다.




위로


라운드 로빈 방식의 로드밸런싱 설정

톰캣에서 제공하는 로드밸런싱은 정확히 톰캣 자체에서 제공하는 것이 아니라 아파치 웹서버와 연동되는 커넥터에 의해서 제공된다(로드밸런싱은 JK, JK2 커넥터에서만 제공된다). 현재는 라운드 로빈(Round Robin) 방식만이 제공되며 로드밸런싱에 대한 설정은 workers.properties 파일에서 정의하게 된다.

리스트 2. workers.properties

  
worker.list=tomcat1, tomcat2, loadbalancer
 
worker.tomcat1.type=ajp13
worker.tomcat1.host=localhost
worker.tomcat1.port=11009
worker.tomcat1.lbfactor=100
 
worker.tomcat2.type=ajp13
worker.tomcat2.host=localhost
worker.tomcat2.port=12009
worker.tomcat2.lbfactor=200
 
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tomcat1,tomcat2

worker라는 개념은 톰캣의 프로세스로 보면 된다. 즉 worker를 설정하는 구성 요소는 JK 커넥터를 연결하는 방식(JK는 ajp13을 이용한다), 톰캣이 실행되어 있는 IP 혹은 도메인, ajp13 서비스 포트, 그리고 작업 할당량이다. 여기서 주의 깊게 볼 것이 작업 할당량인데 로드밸런싱 시에 lbfactor라는 작업량의 비율을 보고 라운드 로빈 방식의 서비스를 제공하게 된다. 여기서는 tomcat1과 tomcat2를 1대 2의 비율로 작업량을 할당한 것이다.
그럼 이제 남은 작업은 2개의 톰캣 프로세스를 실행시키는 것이다. 톰캣 프로세스를 여러 개 띄우는 방법은 2가지가 있다.

  • 톰캣을 2개 설치해서 기동시킨다. 이때 포트 충돌을 피하기 위해 서버 포트, AJP13과 HTTP 1.1 커넥터 포트 2개를 충돌되지 않게 재정의 한다.
  • 하나의 톰캣에 2개의 서비스를 정의하고 톰캣을 기동시킨다. 이때 AJP13과 HTTP1.1 커텍터 포트 2개를 충돌되지 않게 재정의 한다.

먼저 2개의 바이너리를 설치했다고 가정하면 각각의 톰캣은 다음과 같은 형태의 server.xml 파일로 적용해 준다.

리스트 3. server.xml

<Server port="11005" shutdown="SHUTDOWN"> <!-- 톰캣 프로세스를 관리하는 포트 --> <Service name="Catalina"> <Connector port="11080"/> <!-- 아파치를 통하지 않고 직접 접속하고자 할때의 포트 --> <Connector port="11009" protocol="AJP/1.3"/> <!-- 아파치와 연동하기 위한 포트 --> <!-- jvmRoute 명 JK 커넥터에서 톰캣 프로세스를 구분하는데 사용. 프로세스 별로 다르게 적용해야 함 --> <Engine jvmRoute="tomcat1" name="Catalina" defaultHost="localhost"> <Host name="localhost" appBase="webapps"/> </Engine> </Service> </Server>


리스트 4. server.xml
<Server port="12005" shutdown="SHUTDOWN"> <!-- 톰캣 프로세스를 관리하는 포트 --> <Service name="Catalina"> <Connector port="12080"/> <!-- 아파치를 통하지 않고 직접 접속하고자 할때의 포트 --> <Connector port="12009" protocol="AJP/1.3"/> <!-- 아파치와 연동하기 위한 포트 --> <!-- jvmRoute 명 JK 커넥터에서 톰캣 프로세스를 구분하는데 사용. 프로세스 별로 다르게 적용해야 함 --> <Engine jvmRoute="tomcat2" name="Catalina" defaultHost="localhost"> <Host name="localhost" appBase="webapps"/> </Engine> </Service> </Server>

리스트 3은 tomcat1의 환경 설정이고 리스트 4는 tomcat2의 환경 설정이다. 두 환경 설정의 차이는 3개의 포트번호와 <Engine> 태그의 jvmRoute 속성이다. <Server> 태그의 포트는 톰캣을 종료 시키는 작업을 할 때 사용하는 것이며 <Connector> 태그의 포트들은 아파치를 통하지 않고 직접 톰캣에 접속할 경우와 아파치와 연계하여 JK 커넥터와 연동할 때 사용하는 포트이다. 마지막으로 <Engine> 태그는 JK 커넥 터에서 로드밸런싱을 수행할 때 해당 값을 구분자로 활용하게 되는데 이 값을 반드시 다른 톰캣 프로세스와 다른 이름으로 지정해야 한다. 지금까지의 환경 설정은 하나의 아파치 웹서버와 두 개의 톰캣 간의 연계를 위한 것이며 톰캣은 동일한 하드웨어 장비에 설치되어 있다는 가정하에 적용한 것이다. 만일 각각의 톰캣이 서로 다른 하드웨어에 존재한다면 jvmRoute명만 다르게 하고 포트명은 동일해도 상관이 없다. 하지만 만일 하나의 장비에 4개의 톰캣 프로세스를 실행시키고 로드밸런싱을 하려고 한다면 어떻게 될까? 톰캣을 4번 설치하고 각각의 환경 설정 파일을 수정해 주어야 할까? 만일 필요한 환경 설정 내용이 변경된다면(예를 들어 JNDI Resource 정보) 모두 운영자가 환경 설정 파일을 수정해 주어야 할까? 다행히도 톰캣에서는 하나의 바이너리에 여러 개의 프로세스가 뜨도록 할 수 있다. 톰캣의 server.xml 태그는 다음과 같은 구조를 가지고 있다.

<Server> --> <Service> --> <Engine> --> <Host> --> <Context>

여기서 Server 태그는 유일해야 하며 Server 태그 밑에는 여러 개의 <Service> 태그가 올 수 있다. 여기서 말하는 <Service> 태그가 바로 하나의 톰캣 프로세스가 된다. 만일 2개의 <Service> 태그를 정의했다면 2개의 프로세스가 구동되는 것이다. 리스트 5는 이렇게 구현한 환경 설정 파일이다.

리스트 5. server.xml

<Server port="8005" shutdown="SHUTDOWN"> <!-- Service 1 --> <Service name="Catalina1"> <Connector port="11080"/> <Connector port="11009" protocol="AJP/1.3"/> <Engine jvmRoute="tomcat1" name="Catalina" defaultHost="localhost"> <Host name="localhost" appBase="webapps"/> </Engine> </Service> <!-- Service 1 --> <Service name="Catalina2"> <Connector port="12080"/> <Connector port="12009" protocol="AJP/1.3"/> <Engine jvmRoute="tomcat2" name="Catalina" defaultHost="localhost"> <Host name="localhost" appBase="webapps"/> </Engine> </Service> </Server>

리스트 5는 하나의 톰캣 바이너리를 통해 2개의 프로세스를 실행시키는 것이다. 이렇게 하면 환경 설정의 편리성을 가져올 수 있지만 특정 서비스만 실행하거나 종료 시키는 것은 아직 지원되지 않는다. 즉 모든 서비스가 동시에 실행되거나 혹은 동시에 종료되는 것을 의미한다. 이런 점을 잘 판단해서 두 가지 형태의 환경 설정 중 하나를 선택하면 되겠다.
지금까지는 로드밸런싱에 대해 알아보았다. 위의 환경설정을 가지고 테스트를 하다 보면 한가지 문제가 발생한다. 예를 들어 어떤 사용자가 tomcat1을 이용해서 쇼핑몰 서비스를 받고 있다가 tomcat1이 비정상 종료를 하게 되었다. 이때 사용자가 웹 페이지를 요청하게 되면 아파치 웹서버는 tomcat1이 종료된 것을 인지하고 그 이후부터 서비스를 tomcat2로 요청하게 된다. 하지만 tomcat1에 저장되어 있던 쇼핑바구니 정보 즉 세션 정보는 사라진 상태다. 즉, 서비스는 유지되지만 사용자는 다시 이유도 모르게 처음부터 쇼핑 항목들을 등록해야 하는 문제를 가지게 된다. 이제부터는 이런 문제를 해결할 수 있는 톰캣 프로세스 간의 세션 정보 공유에 대해서 알아보겠다.




위로


세션 클러스터링 설정

클러스터링은 톰캣 5.x 버전부터 지원이 되고 있지만 아직은 초기 단계이고 세션 클러스터링만이 제공되고 있는 수준이다. 기능이 많이 부족하긴 하지만 로드밸런싱과 더불어 사용할 경우에는 좀 더 안정적인 서비스를 제공할 수 있다. 작업을 해주어야 할 것은 다음과 같다.

  • server.xml에 <Cluster> 태그 정의
  • 웹 어플리케이션의 web.xml에 <distributable/> 태그 추가
그럼 server.xml에 설정해 보자. <Cluster> 태그는 <Host> 태그의 하위에 정의해 주면 된다. 즉 여러 개의 호스트(예를 들어 가상 호스트) 를 설정했다면 각각의 경우에 맞게 설정해 주어야 한다. 여기서는 tomcat1과 tomcat2가 동일한 하드웨어에 별도의 바이너리 형태로 설치되어 있다고 가정하고 진행하겠다.

리스트 6. server.xml

... <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster" managerClassName="org.apache.catalina.cluster.session.DeltaManager" expireSessionsOnShutdown="false" useDirtyFlag="true"> <Membership className="org.apache.catalina.cluster.mcast.McastService" mcastAddr="228.0.0.105" mcastPort="45564" mcastFrequency="500" mcastDropTime="3000"/> <Receiver className="org.apache.catalina.cluster.tcp.ReplicationListener" tcpListenAddress="auto" tcpListenPort="4001" tcpSelectorTimeout="100" tcpThreadCount="6"/> <Sender className="org.apache.catalina.cluster.tcp.ReplicationTransmitter" replicationMode="pooled"/> <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/> </Cluster> ...

리스트 6은 tomcat1의 server.xml에 적용한 <Cluster> 태그이다. 이 내용은 <Host> 태그 사이에 위치하게 된다. <Cluster> 태그 사이에는 <Membership>, <Receiver>, <Sender>라는 3개의 태그가 위치하는데 <Membership>은 멤버 그룹을 정의하는 것으로 해당 값이 동일한 모든 톰캣 프로세스는 클러스터로 묶이게 된다. <Receiver>는 클러스터 그룹에서 보내오는 메시지와 세션 정보 등을 받아오는 것이며 <Sender>는 자신의 세션 정보 및 메시지를 전송하는 것이다. 위의 내용을 tomcat2의 server.xml에 Receiver 태그의 tcpListenPort 값을 4002로 변경해서 적용하도록 하자.




위로


웹 어플리케이션 작성을 통한 테스트

먼저 테스트를 위해서 간단한 웹 어플리케이션을 작성하도록 하겠다. 여기서 웹 어플리케이션 이름은 lbtest라고 하겠다.

리스트 7. index.jsp

<%@ page contentType="text/html; charset=euc-kr" %> <HTML> <HEAD> <TITLE>세션 JSP 테스트</TITLE> </HEAD> <BODY> <h1>세션 JSP 테스트</h1> <% Integer ival = (Integer)session.getAttribute("sessiontest.counter"); if(ival==null) { ival = new Integer(1); } else { ival = new Integer(ival.intValue() + 1); } session.setAttribute("sessiontest.counter", ival); %> 당신은 이곳을 <b> <%= ival %> </b>번 방문 했습니다.<p> 여기를 클릭하세요. <a href="index.jsp">여기</a> <p> <h3>request 객체와 관련된 세션 데이터</h3> 요청된 세션 ID : <%= request.getRequestedSessionId() %><br /> 쿠키로 부터 요청된 세션 ID 인가? : <%= request.isRequestedSessionIdFromCookie() %><br /> URL로부터 요청된 세션 ID 인가? : <%= request.isRequestedSessionIdFromURL() %><br /> 유효한 세션 ID 인가? : <%= request.isRequestedSessionIdValid() %><br /> </BODY> </HTML>

작성된 웹 애플리케이션을 tomcat1과 tomcat2에 배포한다. 이때 가장 중요한 것이 web.xml에 반드시 <distributable/>이라는 항목을 넣어 야 한다. 그럼 이제 테스트를 해보도록 하자. 먼저 아파치 웹서버, tomcat1, tomcat2를 차례로 실행시켜 보자. 그리고 http://ipaddress/lbtest/index.jsp 접속하여 세션 객체를 생성해보자. 결과 화면은 그림 1과 같다. 여기서 요청된 세션ID를 보면 뒤에 어떤 톰캣에 접속한 상태인지를 알 수 있다. 이 화면상에서는 tomcat2에 접속한 세션이다. 그럼 tomcat2를 강제로 종료시켜 보도록 하자. 종료 후 화면에 보이는 “여기”를 계속 눌러 보자. 분명히 tomcat2가 종료되었음에도 불구하고 세션 값이 유지되고 있음을 알 수 있다. 이젠 반대로 tomcat2를 다시 실행시킨 후에 tomcat1을 종료시켜 보도록 하자. 역시 마찬가지로 세션 정보가 유지되는 것을 확인할 수 있을 것 이다.

test 결과화면
그림 1. 테스트 결과 화면

이상으로 톰캣을 이용한 로드밸런싱과 세션 클러스터링에 대해서 알아보았다. 일반적으로 로드밸런싱과 클러스터링은 성능 향상이라는 측면과 안정성 확보에 그 목적을 가지고 있다. 물론 고가의 상용 웹 어플리케이션 서버에 비하면 많이 부족하고 하드웨어를 이용한 로드밸런싱과 클러스터링에 비하면 안정성이 떨어질 수도 있지만 저렴한 비용으로 최대의 안정성과 성능을 얻고자 한다면 한번쯤 시도해 볼만한 좋은 기능이라고 할 수 있다. 아무쪼록 리눅스, 아파치, 톰캣 그리고 오픈소스를 통해 즐거운 웹 어플리케이션 개발 환경을 느껴보기 바란다.

Posted by [czar]
,

출처 : http://misako.co.kr/
http://www.parkoz.com/zboard/view.php?id=my_tips&no=11174

메가패스/하나포스/엑스피드 무료 문자 메시지 보내기 프로그램

메가패스/하나포스/엑스피드 사용자는 월 50~300건 씩 무료 문자 메시지를 보낼 수 있습니다. 이건 네이트온, MSN 같은 무료 SMS와 별개이므로, 무조건 50건 이상 무료로 보낼 수 있는 건데요, 잘 모르시는 분들이 많은 것 같습니다. 물론 홈페이지에 들어가서 보내면 되지만, 로그인 매번 귀찮고, 그 페이지까지 찾아 들어가기가 번거롭더군요, 즐겨찾기 등록도 안 되고요. 그리고 80자 넘으면 자동으로 쪼개서 보내주지 않고 유료로 전환되더군요. 그래서 제가 프로그램을 만들었습니다. 자동으로 로그인이 되며, 80자가 넘으면 알아서 쪼개서 보내주므로, 사용하시면 편하실 것입니다. 아직 완성되어 있지 않은 기능이 있습니다. 제게 메일을 보내 새 버전 통지를 받겠다고 하시면 새 버전을 만들 때 알려 드리겠습니다. 의견이나 개선 사항 요청도 보내 주시면 됩니다. 주소록은 이전부터 계속 구현하려고 하고 있었는데, 주소록보다는 많은 사용자들이 사용할 수 있도록 서버 지원을 추가하는 게 더 급한 것 같아서 뒤로 미뤄지고 있습니다.

0.53 개선 사항
1. 쪼개어 보내기 정순서 루프 버그 수정
2. 엑스피드 사용자 중 부가 서비스를 신청하지 않아 로그인이 되지 않는 상황 메시지 처리
3. 보내는 번호에 유선 전화 번호 허용 (지역 번호 포함해야 함)
4. 하나포스 하나버드 등급 지원
========================================================================
0.52 개선 사항
1. 쪼개어 보내기 순서가 무조건 앞 조각이 나중에 도착하도록 되던 버그 수정
2. 하나포스 전화 번호에 -가 들어가 있을 경우 발송이 되지 않던 문제 수정
3. 하나포스 쪼개어 보내기가 되지 않던 문제 수정 (연속 발송 시 서버에서 거부하므로
     조각 발송 간 1초 씩 쉼)
========================================================================
0.51 개선 사항
1. 정밀 휴대 전화 스크린 모드 추가
2. 줄 바꿈이 한 바이트만 차지하도록 수정
3. 니모닉(mnemonics) 추가
========================================================================
0.5 개선 사항
1. 엑스피드(파워콤) 지원 추가
2. 프로그램 정보 탭 링크 오류 수정
========================================================================
0.41 개선 사항
1. 하나포스 사용한 문자 수가 남은 문자 수로 표시되던 것 수정
2. 하나포스 로그인 시 ID/비밀번호 오류 검출
========================================================================
0.4 개선 사항
1.하나포스 지원 추가
2.전화 번호 유효 검사
========================================================================
0.3 개선 사항
1.메가패스 통합 계정 로그인 오류 수정
2.바이트 크기 막대기 추가
3.이력 더블 클릭으로 받는 번호 자동 입력 기능 추가
========================================================================
0.2 개선 사항
1.로그인 정보를 텍스트 파일에서 읽지 않고 프로그램 상에서 입력하도록 수정
2.발송 이력 보기 추가
3.탭 순서 조정
4.UI 정리 개선
5.주소록 준비 중

설치 및 실행
  1. 압축을 아무 곳에나 푼다.
  2. FreeSMS.exe를 더블 클릭한다.
  3. 만일, 응용 프로그램을 초기화하지 못했다고 하면,
     .Net Framework 재배포 패키지 2.0 이상을 설치하고 다시 실행한다.

라이선스 : 무료(프리웨어)
배포조건 : 위의 설명과 압축 파일을 그대로 배포. 어떤 이유로든 다운로드에 돈이 드는 사이트에 배포 금지. 프로그램의 일부를 다른 용도로 재활용 금지.
사용 환경: 32/64비트 Microsoft Windows, .NET Framework 2.0 이상 필수. 이 프로그램은 Internet Explorer를 사용하지 않고 HTTP 프로토콜에서 동작하므로, 웹 브라우저가 필요 없습니다.
Posted by [czar]
,

웹호스팅 가입자 자동셋업 스크립트프로그램

http://superuser.co.kr/linux/linux100/auto_master/index.htm

#!/bin/bash

#########################################################

#####웹호스팅사용자 셋팅스크립트: AutoMaster V 1.0

######################################################

#   1. 제작자                                           #

#     - 이름 : 박성수                                   #

#     - Email : master@superuser.co.kr                  #

#   2. 저작권                                           #

#    ; 이 프로그램의 저작권은 위의 제작자(박성수)에게   #

#      있으며, 어떠한 경우라도 이 프로그램의 일부분     #

#      또는 전부를 제작자의 서면허락없이 사용하는 것을  #

#      금합니다. 제작자의 허락없이 이 프로그램을 사용할 #

#      시에는 허락을 득하지아니한채 사용한 자에게       #

#      법적인 책임이 있음을 알려드립니다.               #

#                                                       #

#       Date : 2000년 8월 31일                          #

#                                                       #

#       업그레이드할 것..                               #

#       1. 홈페이지 초기파일 (index.html) 사용자별 복사기능 #

#########################################################

# from V0.1 to V0.3 upgrade

#   - DNS zone파일 자동생성기능

#   - accesswatch 환경파일 자동생성기능

# from V0.30 to V0.31 upgrade (2000.10.22)

#   - User Counter datafile 자동생성기능

# from V0.31 to V0.32 upgrade (2000.10.31)

#   - /usr/local/aw/cfg/에 생성되는 사용자환경설정파일 버거수정

# from V0.32 to V0.4 upgrade (2000.11.1)

#   - /etc/mail/virtusertable에 가상메일등록

#   - /etc/mail/relay-domains에 relay허용설정

# from V0.4 to V0.7 upgrade (2000.11.1)

#   -  게시판자동생성기능 입력(niceboard)

# from V0.7 to V0.9 upgrade (2000.11.1)

#   -  방명록 자동생성기능 입력(nicebook)

# from V0.9 to V1.0 upgrade (2000.11.2)

#   -  웹로그접속제한기능 (관리자기능)

#######################################################



# 변수선언

export hostip_address="211.174.58.43"

export name_server="ns.superuser.co.kr"


#임시파일 삭제

rm -f /tmp/httpd.conf_tempfile

rm -f /tmp/named.conf_tempfile

rm -f /tmp/zone_tempfile

rm -f /tmp/logfile_tempfile

rm -f /tmp/aw.cfg_tempfile


#임시파일 생성

touch /tmp/httpd.conf_tempfile

touch /tmp/named.conf_tempfile

touch /tmp/zone_tempfile

touch /tmp/logfile_tempfile

touch /tmp/aw.cfg_tempfile


#사용자생성및 패스워드 설정

/usr/sbin/useradd -m -s /bin/bash -d /home/$1 -g webhost $1

echo " Please input mysql Administrator's passwd"

passwd $1


#용량설정

edquota -u $1


#홈페이지디렉토리생성및 설정

chmod 701 /home/$1

# 홈디렉토리(/home/user)를 701로 설정하는 것이 좋다.

# 다른 일반사용자들은 cd 명령어로 들어올 수 없으며

# Apache(httpd)로 홈페이지는 보여줄수 있다.

# 디렉토리에서 rwx 의 x는 cd 가능을 의미하며,

# r은 들어와서 ls가능을 의미한다.


mkdir /home/$1/www

chmod 705 /home/$1/www

chown $1:webhost /home/$1/www



mkdir /home/$1/www/weblog

chmod 705 /home/$1/www/weblog

chown $1:webhost /home/$1/www/weblog


#고객의 접속통계를고객의 관리자만이 볼수 있도록 접근제한을 설정한다.

touch /home/$1/www/weblog/.htaccess

echo "AuthName \"$2 Administrator\"" >> /home/$1/www/weblog/.htaccess

echo "AuthType Basic" >> /home/$1/www/weblog/.htaccess

echo "AuthUserFile /home/$1/www/weblog/.htpasswd" >> /home/$1/www/weblog/.htaccess

echo "AuthGroupFile /dev/null" >> /home/$1/www/weblog/.htaccess

echo "<Limit GET POST>" >> /home/$1/www/weblog/.htaccess

echo "require valid-user" >> /home/$1/www/weblog/.htaccess

echo "</Limit>" >> /home/$1/www/weblog/.htaccess

echo " Please input Administrator's passwd"

htpasswd -c /home/$1/www/weblog/.htpasswd $1


cp /sbin/index.html /home/$1/www/index.html

chmod 755 /home/$1/www/index.html

chown $1:webhost /home/$1/www/index.html


mkdir /home/$1/www/cgi-bin

chmod 755 /home/$1/www/cgi-bin

chown $1:webhost /home/$1/www/cgi-bin


mkdir /home/$1/www_log

chmod 705 /home/$1/www_log

chown $1:webhost /home/$1/www_log



#가상호스트설정

#vi /usr/local/apache/conf/httpd.conf

echo "<VirtualHost $hostip_address>" >> /tmp/httpd.conf_tempfile

echo "    ServerAdmin $1@$2"    >> /tmp/httpd.conf_tempfile

echo "    DocumentRoot /home/$1/www"    >> /tmp/httpd.conf_tempfile

echo "    ServerName www.$2"    >> /tmp/httpd.conf_tempfile

echo "    ErrorLog /home/$1/www_log/error_log"  >> /tmp/httpd.conf_tempfile

echo "    CustomLog /home/$1/www_log/access_log common" >> /tmp/httpd.conf_tempfile

echo "</VirtualHost>"   >> /tmp/httpd.conf_tempfile

cat /tmp/httpd.conf_tempfile >> /usr/local/apache/conf/httpd.conf



#도메인설정

#vi /etc/named.conf

echo "zone \"$2\" {"    >>      /tmp/named.conf_tempfile

echo "         type master;"  >>        /tmp/named.conf_tempfile

echo "         file \"$2.zone\";"       >>      /tmp/named.conf_tempfile

echo "};"       >>      /tmp/named.conf_tempfile

cat /tmp/named.conf_tempfile >> /etc/named.conf


#cp /var/named/default.zone /var/named/$2.zone

#vi /var/named/$2.zone

#/var/named/domain.zone파일 생성

#echo "@       IN      SOA   www.$2.  $1.$2.  (" >> /tmp/zone_tempfile

#SOA 바로위의 도메인을 ns.superuser.co.kr로 수정함.

echo "@       IN      SOA   ns.superuser.co.kr.  $1.$2.  (" >> /tmp/zone_tempfile

echo "                                20000402  ; Serial" >> /tmp/zone_tempfile

echo "                                21600   ; Refresh(6h)" >> /tmp/zone_tempfile

echo "                                900     ; Retry(15min)" >> /tmp/zone_tempfile

echo "                                604800  ; Expire(7d)" >> /tmp/zone_tempfile

echo "                                43200)  ; Minimum(12h);" >> /tmp/zone_tempfile

echo "                IN      NS      $name_server." >> /tmp/zone_tempfile

echo ";" >> /tmp/zone_tempfile

echo "                IN      A       $hostip_address" >> /tmp/zone_tempfile

echo "                IN      MX      0       $2." >> /tmp/zone_tempfile

echo "www             IN      A       $hostip_address" >> /tmp/zone_tempfile

echo "                IN      MX      0       $2." >> /tmp/zone_tempfile

cp /tmp/zone_tempfile /var/named/$2.zone



#메일설정(SMTP)

#vi /etc/sendmail.cw

echo $2 >> /etc/sendmail.cw

echo $2 >> /etc/mail/relay-domains

echo "webmaster@$2      $1" >> /etc/mail/virtusertable


#로그분석설정

#vi /usr/local/aw/accesswatch-start

#accesswatch-start파일에 사용자의 로그분석 시작스크립트 입력

echo "$2로그분석중입니다."      >>      /tmp/logfile_tempfile

echo "/usr/local/aw/aw-parser.pl -c /usr/local/aw/cfg/$2.cfg" >> /tmp/logfile_tempfile

echo "/usr/local/aw/aw-report.pl -c /usr/local/aw/cfg/$2.cfg" >> /tmp/logfile_tempfile

cat /tmp/logfile_tempfile       >>      /usr/local/aw/accesswatch-start


#/usr/local/aw/cfg디렉토리에 사용자의 로그분석환경설정파일 작성

#cp /usr/local/aw/cfg/default.cfg /usr/local/aw/cfg/$2.cfg

#vi /usr/local/aw/cfg/$2.cfg

echo "###############################################################################" >> /tmp/aw.cfg_tempfile

echo "#####                Accesswatch Config File Setup                        #####" >> /tmp/aw.cfg_tempfile

echo "###############################################################################" >> /tmp/aw.cfg_tempfile

echo "\$accessLog = \"/home/$1/www_log/access_log\";" >> /tmp/aw.cfg_tempfile

echo "\$DNSlookups = 0;" >> /tmp/aw.cfg_tempfile

echo "\$defaultPage = \"index.html\";" >> /tmp/aw.cfg_tempfile

echo "\$includeURL = \".*\";" >> /tmp/aw.cfg_tempfile

echo "\$compressdata = 1;" >> /tmp/aw.cfg_tempfile

echo "\$compresscommand    = \"gzip -9fc\";" >> /tmp/aw.cfg_tempfile

echo "\$catcompresscommand = \"gunzip -c\";" >> /tmp/aw.cfg_tempfile

echo "\$compresssuffix     = \"gz\";" >> /tmp/aw.cfg_tempfile

echo "\$excludeURL = \".gif\|.jpg\|.jpeg\|.xbm\";" >> /tmp/aw.cfg_tempfile

echo "\$reportBase = \"/home/$1/www/weblog\";" >> /tmp/aw.cfg_tempfile

echo "\$siteName  = \"www.$2\";" >> /tmp/aw.cfg_tempfile

echo "\$siteBaseURL = \"http://www.$2\";" >> /tmp/aw.cfg_tempfile

echo "\$orgname   = \"www.$2\";" >> /tmp/aw.cfg_tempfile

echo "\$orgdomain = \"$2\";" >> /tmp/aw.cfg_tempfile

echo "\$excludeHosts = \"\";" >> /tmp/aw.cfg_tempfile

echo "###############################################################################" >> /tmp/aw.cfg_tempfile

echo "#####                          Program Options                            #####" >> /tmp/aw.cfg_tempfile

echo "###############################################################################" >> /tmp/aw.cfg_tempfile

echo "\$maxPagesToList = -1;" >> /tmp/aw.cfg_tempfile

echo "\$maxDomainsToList = -1;" >> /tmp/aw.cfg_tempfile

echo "\$maxHostsToList = 15;" >> /tmp/aw.cfg_tempfile

echo "\$maxRefsToList = 10;" >> /tmp/aw.cfg_tempfile

echo "\$maxAgentsToList = 15;" >> /tmp/aw.cfg_tempfile

echo "\$customFooter = <<EOM;" >> /tmp/aw.cfg_tempfile

echo "<!-- START custom footer -->" >> /tmp/aw.cfg_tempfile

echo "$2" >> /tmp/aw.cfg_tempfile

echo "<!-- END   custom footer -->" >> /tmp/aw.cfg_tempfile

echo "EOM" >> /tmp/aw.cfg_tempfile

echo "1;" >> /tmp/aw.cfg_tempfile

echo "###############################################################################" >> /tmp/aw.cfg_tempfile

echo "########### End - AccessWatch Custom Configuration ############################" >> /tmp/aw.cfg_tempfile

echo "###############################################################################" >> /tmp/aw.cfg_tempfile

cp /tmp/aw.cfg_tempfile /usr/local/aw/cfg/$2.cfg


#User Counter datafile Setting (Version 0.31 upgrade)

touch /usr/local/apache/Counter/data/$1.dat

chmod 644 /usr/local/apache/Counter/data/$1.dat

chown nobody:webhost /usr/local/apache/Counter/data/$1.dat

cat /usr/local/apache/Counter/data/counter_default_digit.dat >> $1.dat


#고객의 게시판을 생성한다.

#게시판 작업1 게시판파일을 복사하고 권한및 파일수정을 한다.

cd /home/nice/www/

cp -r niceboard /home/$1/www/niceboard/

cd /home/$1/www/

chown -R $1:webhost niceboard

cd /home/$1/www/niceboard/

mv nice.gif $1.gif

mv nice_icon $1_icon

mv nice.cfg $1.cfg

vi auth.inc

vi dbconn.inc

vi $1.cfg


#게시판 작업2 mysql데이터베이스에 사용자에게 필요한 DB작업을 실행한다.

cd /usr/local/mysql/bin/

vi niceboard-create.sql

vi niceboard-create2.sql

mysql -u root -p niceboard < niceboard-create.sql

mysql -u root -p mysql < niceboard-create2.sql


#고객의 방명록을 생성한다.

#방명록작업1 방명록파일을 복사하고 권한및 파일을 수정한다.

cd /home/nice/www/

cp -r nicebook /home/$1/www/

cd /home/$1/www/

chown -R $1:webhost nicebook

mv nice.cfg $1.cfg

mv nice.gif $1.gif

mv nice_icon $1_icon

cd /home/$1/www/nicebook/

vi auth.inc

vi dbconn.inc

vi $1.cfg


#방명록작업2 mysql데이터베이스에 사용자에게 필요한 DB작업을 실행한다.

cd /usr/local/mysql/bin/

vi nicebook-create.sql

mysql -u root -p GUESTBOOK < nicebook-create.sql


#게시판 방명록 적용작업mysql reload

echo " Please input mysql Administrator's passwd"

./mysqladmin -u root -p reload



#변수 선언 해제(메모리에서 할당해제)

unset hostip_address

unset name_server


# 관련서버 restart

/etc/rc.d/init.d/named restart

/usr/local/apache/bin/apachectl restart


#메일설정 적용을위한 메일관련DB작업

makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable

Posted by [czar]
,
출처 :http://ttongfly.net

#!/bin/sh

# 디렉토리 설정하실때 끝에 꼭 / 넣어주세요.
home_root="/home/"
backup_home_root="백업할 디렉토리" #수정하세요

cd $home_root

echo "백업 중입니다"
for home_name in $(ls)
do
if [ -d "$home_root/$home_name" ] ; then
echo "tar -cvzf $backup_home_root$home_name.tar.gz $home_name"
tar -czf "$backup_home_root$home_name.tar.gz" "$home_name"
fi
done
Posted by [czar]
,
출처 :http://ttongfly.net

#!/bin/sh
#
# Scripted by JoungKyun Kim
# 2001.2.15 http://www.oops.org
# This Script follows GPL2 License

if [ "$1" != "" ]; then
# ethnet device
ETH="$1:"
CHECK=/proc/net/dev
CAT=/bin/cat

GREP="/bin/grep ${ETH}"
SED="sed -e s/${ETH}//"
UPTIME=/usr/bin/uptime

# parcket user check
set `${CAT} ${CHECK} | ${GREP} | ${SED}`

# Transmit packet
let "in1 = $1"
let "out1 = $9"

echo "측정중입니다. 기다려주세요"
sleep 10

set `${CAT} ${CHECK} | ${GREP} | ${SED}`

let "in0 = $1"
let "out0 = $9"

let " in = ($in0 - $in1)/(10*1024)"
let " out = ($out0 - $out1)/(10*1024)"
echo "수신(in) $in kbyte/s"
echo "송신(out) $out kbyte/s"


else
echo "USAGE: $0 [ethernet device no]"
echo "ex) ./$0 eth0"
fi

exit 0
Posted by [czar]
,
출처 :http://ttongfly.net


다음과 같은 쉘 스크립트로 여러 파일의 확장자를 한번에 바꿀수있다.

#!/bin/sh
for i in *.$1
do
name=$(basename $i .$1)
mv $i ${name}.$2
done

위 내용을 mvall등의 이름으로 저장하고

chmod 755 mvall 이렇게 실행 권한을 준다.


$ ./mvall php3 php

위와 같이 하면 확장자가 .php3인 것을 .php로 모두 바꾸어줍니다.
Posted by [czar]
,
출처 :http://ttongfly.net

#!/bin/sh
# a small shell script to find some security vulnerabilities.

# print today and time
today=`date`
echo "현재 로긴 날짜와 시간 : $today" > result.txt

# find suid.
echo '' >> result.txt
echo '#################################################################' >> result.txt
echo '####                 suid 화일들을 찾습니다.                 ####' >> result.txt
echo '#################################################################' >> result.txt
echo '$ ls -l `find / -type f -perm -4000 -print 2>/dev/null`' >>result.txt
ls -l `find / -type f -perm -4000 -print 2>/dev/null` >>result.txt

# find sgid
echo '' >> result.txt
echo '#################################################################' >> result.txt
echo '####                 sgid 화일들을 찾습니다.                 ####' >> result.txt
echo '#################################################################' >> result.txt
echo '$ ls -l `find / -type f -perm -2000 -print 2>/dev/null`' >>result.txt
ls -l `find / -type f -perm -2000 -print 2>/dev/null` >>result.txt

# process list
echo '' >> result.txt
echo '#################################################################' >> result.txt
echo '####                    현재 프로세스 정보                   ####' >> result.txt
echo '#################################################################' >> result.txt
echo '$ ps -ef ' >> result.txt
ps -ef >> result.txt

# is a passwd file shadowed?
echo '' >> result.txt
echo '#################################################################' >> result.txt
echo '####                    shadow 패스워드 화일                 ####' >> result.txt
echo '#################################################################' >> result.txt
echo '$ cat /etc/shadow ' >> result.txt
cat /etc/shadow >> result.txt

# group info
echo '' >> result.txt
echo '#################################################################' >> result.txt
echo '####                       각 그룹 정보                      ####' >> result.txt
echo '#################################################################' >> result.txt
echo '$ cat /etc/group ' >> result.txt
cat /etc/group >> result.txt

# system info
echo '' >> result.txt
echo '#################################################################' >> result.txt
echo '####                    시스템 기본 정보                     ####' >> result.txt
echo '#################################################################' >> result.txt
echo '$ uname -a ' >> result.txt
ver=`uname -a`
echo "$ver" >> result.txt
echo '' >> result.txt

# interface info
echo '' >> result.txt
echo '#################################################################' >> result.txt
echo '####                    인터페이스 정보                      ####' >> result.txt
echo '#################################################################' >> result.txt
echo '$ ifconfig -a ' >> result.txt
ifconfig -a >> result.txt
echo '' >> result.txt

# uptime
echo '' >> result.txt
echo '#################################################################' >> result.txt
echo '####             시스템의 부하와 현재 서버의 업타임          ####' >> result.txt
echo '#################################################################' >> result.txt
echo '$ w | head -1 ' >> result.txt
echo `w | head -1` >> result.txt

# current users
echo '' >> result.txt
echo '#################################################################' >> result.txt
echo '####                      현재 사용자 정보                   ####' >> result.txt
echo '#################################################################' >> result.txt
user=`who | wc -l`
echo "현재 사용자수 : $user" >> result.txt
echo '' >> result.txt
echo '$ who ' >> result.txt
who >> result.txt
echo '' >> result.txt
echo '$ w ' >> result.txt
w | tail +2>> result.txt

# ls -la
echo '' >> result.txt
echo '#################################################################' >> result.txt
echo '####                      현재 디렉토리 정보                 ####' >> result.txt
echo '#################################################################' >> result.txt
echo '$ ls -la ' >> result.txt
ls -la >> result.txt

# more /etc/named.conf
echo '' >> result.txt
echo '#################################################################' >> result.txt
echo '####                      named.conf 의 내용                 ####' >> result.txt
echo '#################################################################' >> result.txt
echo '$ more /etc/named.conf ' >> result.txt
more /etc/named.conf >> result.txt

# logout time
echo '' >> result.txt
today=`date`
echo "로그 아웃 날짜와 시간 : $today" >> result.txt

# eof
Posted by [czar]
,
출처 :http://ttongfly.net

#!/usr/bin/sh
#-------------------------------------------------------#
# FTP shell pgm : FTP DATA put #
# Server (UNIX) ----> FTP Server (NT) #
# mod. 2003.09.19 by kjh901@hotmail.com #
#-------------------------------------------------------#

if [ "$#" -ne 1 ]
then
echo " "
echo " usage : ftp2ftp FILENAME "
echo " "
exit
fi

if [ -e "$1" ]
then
echo "user ID PASSWD " > ./ftp2ftp_list
echo "cd /WORK " >> ./ftp2ftp_list
echo "lcd /WORK " >> ./ftp2ftp_list
echo "asc " >> ./ftp2ftp_list
echo "put $1 " >> ./ftp2ftp_list

ftp -n -v XXX.XXX.XXX.XXX < ./ftp2ftp_list
rm ./ftp2ftp_list

else
echo " "
echo " NO INPUT FILE NAME OR NO DATA !!!! "
echo " "

fi
Posted by [czar]
,