'분류 전체보기'에 해당되는 글 2491건

  1. 2008.11.06 RAID-1 볼륨의 작동 방법
  2. 2008.11.06 SPARC: Solaris 설치 프로그램을 사용하여 설치 또는 업그레이드
  3. 2008.11.06 JSTL SQL Tag
  4. 2008.11.06 컴퓨터도 풀수없는 암호 만들기
  5. 2008.11.05 class 파일 내부 들여다 보기
  6. 2008.11.05 String 더하기 보다 StringBuffer append가 빠르다!?"
  7. 2008.11.04 stripes-crud
  8. 2008.11.04 input 입력모드시 한글,영문
  9. 2008.11.03 E3500system의 booting이 안될때...
  10. 2008.11.03 SPARC 플랫폼과 ZFS 를 위한 솔라리스10 점프스타트 설정
  11. 2008.11.03 SPARC: WAN 부트 설치(작업) : Solaris 10
  12. 2008.11.03 Solaris 10 1/06 OS를 빠르게 설치하는 방법
  13. 2008.10.30 트리메뉴 음~ 괜찮다..(windows 탐색기 같은거)
  14. 2008.10.30 prototype.js 를 위한 개발자 노트
  15. 2008.10.30 테이블 안에 내용 넘는거 자동으로 줄바꿈
  16. 2008.10.30 ui 목록 샘플
  17. 2008.10.30 div 레이아웃과 table 레이아웃
  18. 2008.10.30 css 로 텝메뉴를 만들어 주는 프로그램
  19. 2008.10.30 CSS 개발툴
  20. 2008.10.30 struts2 Tutorials 한글 번역
  21. 2008.10.30 jeus 설정 및
  22. 2008.10.30 STRUTS Framework - 2. Struts 분석
  23. 2008.10.29 수족관 임대...
  24. 2008.10.29 무료 웹하드 FTP 한 계정당 1GB의 용량 제공 (계정 무한대로 생성 가능)
  25. 2008.10.28 모든 셀에 한꺼번에 바탕색 지정
  26. 2008.10.28 원도우 탐색기 오류시 대체방법
  27. 2008.10.27 java.lang.OutOfMemoryError
  28. 2008.10.27 java.lang.OutOfMemoryError: PermGen space 1
  29. 2008.10.27 css로 만든 메뉴모음 사이트
  30. 2008.10.27 톰캣에서 java.lang.IllegalStateException: Post too large 가 발생하는 경우
60.Unix2008. 11. 6. 17:12
반응형
이전이전: RAID-1 볼륨을 사용하는 이유

RAID-1 볼륨의 작동 방법

Solaris 볼륨 관리자에서는 가상 디스크를 사용하여 물리적 디스크와 관련 데이터를 관리합니다. Solaris 볼륨 관리자에서는 가상 디스크를 볼륨이라고 합니다. 볼륨은 시스템에 단일 논리 장치로 나타나는 물리적 슬라이스 그룹의 이름입니다. 볼륨은 표준 UNIX® 용어로 실제로 의사 또는 가상 장치입니다.

볼륨은 응용 프로그램 또는 파일 시스템(예: UFS)의 관점에서 보면 물리적 디스크와 기능적으로 동일합니다. Solaris 볼륨 관리자는 볼륨에 지정된 입출력 요청을 기본 구성 디스크로 변환합니다. Solaris 볼륨 관리자 볼륨은 슬라이스(디스크 분할 영역)나 다른 Solaris 볼륨 관리자 볼륨에서 구축됩니다.

볼륨을 사용하여 성능 및 데이터 가용성을 높입니다. 경우에 따라 볼륨으로 입출력 성능을 높일 수도 있습니다. 볼륨은 기능적으로 슬라이스와 같은 방식으로 작동합니다. 볼륨의 모양은 슬라이스와 유사하므로 최종 사용자, 응용 프로그램 및 파일 시스템에 명확히 나타납니다. 물리적 장치와 마찬가지로 Solaris Volume Manager 소프트웨어를 사용하여 블록 장치 이름이나 원시 장치 이름을 통해 볼륨에 액세스할 수 있습니다. 블록 장치 또는 원시 장치 사용 여부에 따라 볼륨 이름이 변경됩니다. 사용자 정의 JumpStart 설치 방법 및 Solaris Live Upgrade는 미러된 파일 시스템을 만들기 위해 블록 장치 사용을 지원합니다. 볼륨 이름에 대한 자세한 내용은 사용자 정의 JumpStart 및 Solaris Live Upgrade에 대한 RAID 볼륨 이름 요구 사항 및 지침 을 참조하십시오.

RAID-0 볼륨(단일 슬라이스 연결)을 사용하여 RAID-1 볼륨을 만들 경우 Solaris Volume Manager는 RAID-0 하위 미러에 데이터를 복제하고 하위 미러를 단일 볼륨으로 간주합니다.

그림 8–1은 2개의 물리적 디스크에 걸쳐 루트(/) 파일 시스템을 복제하는 미러를 보여줍니다.

그림 8–1 디스크의 루트(/) 파일 시스템에 RAID-1 볼륨 만들기

그림에 대한 설명은 컨텍스트를 참조하십시오.

그림 8–1은 다음과 같은 구성의 시스템입니다.

  • 이름이 d30인 미러는 d31d32라는 이름의 하위 미러로 구성됩니다. 미러 d30은 양쪽 하위 미러의 루트(/) 파일 시스템에 데이터를 복제합니다.

  • hdisk0의 루트( /) 파일 시스템은 이름이 d31인 단일 슬라이스 연결에 포함됩니다.

  • 루트(/) 파일 시스템은 hdisk1이라는 하드 디스크에 복사됩니다. 이 복사는 이름이 d32인 단일 슬라이스 연결입니다.


다음다음: Solaris Volume Manager 구성요소의 개요
Posted by 1010
60.Unix2008. 11. 6. 16:45
반응형
SPARC: Solaris 설치 프로그램을 사용하여 설치 또는 업그레이드

이 절차에서는 CD 또는 DVD 매체에서 독립형 SPARC 기반 시스템을 설치하는 방법에 대하여 설명합니다.


주 –

DVD-ROM 또는 CD-ROM 드라이브에 직접 연결되지 않은 컴퓨터나 도메인에서 Solaris OS를 설치하려는 경우 다른 컴퓨터에 연결된 DVD-ROM 또는 CD-ROM을 사용할 수 있습니다. 자세한 설명은 Solaris 10 설치 설명서: 네트워크 기반 설치의 부록 B, 원격으로 설치 또는 업그레이드(작업)를 참조하십시오.


시작하기 전에

설치를 시작하기 전에 다음 작업을 수행합니다.

  • 다음 매체가 있는지 확인합니다.

    • DVD 설치: Solaris 10 Operating System for SPARC Platforms DVD

    • CD 설치:

      • Solaris 10 Software CD.

      • Solaris 10 Languages for SPARC Platforms CD – 설치 프로그램은 특정 지역의 언어를 지원해야 할 경우 이 CD를 요청합니다.


        주 –

        비전역 영역이 설치된 시스템을 업그레이드할 경우 Solaris 10 Software CD를 사용할 수 없습니다. Solaris 10 Operating System DVD 또는 DVD 기반 네트워크 설치 이미지를 사용해야 합니다.


  • 시스템이 최소 요구 사항을 만족하는지 확인합니다.

    시스템이 다음 요구 사항을 만족해야 합니다.

    • 메모리 – 128MB 이상

    • 디스크 공간 – 6.8GB 이상

    • 프로세서 속도 – 200MHz 이상

    시스템 요구 사항에 대한 자세한 내용은 시스템 요구 사항 및 권장 사항을 참조하십시오.

  • Solaris OS를 설치하는 데 필요한 정보를 수집합니다.

    • 네트워크되지 않은 시스템의 경우 다음 정보를 수집합니다.

      • 설치하는 시스템의 호스트 이름

      • 시스템에서 사용하려는 언어 및 로켈

    • 네트워크된 시스템의 경우 다음 정보를 수집합니다.

      • 설치하는 시스템의 호스트 이름

      • 시스템에서 사용하려는 언어 및 로켈

      • 호스트 IP 주소

      • 서브넷 마스크

      • 이름 서비스의 유형(예: DNS, NIS 또는 NIS+)

      • 도메인 이름

      • 이름 서버의 호스트 이름

      • 이름 서버의 호스트 IP 주소

      • 루트 비밀번호

    시스템을 설치할 때 수집해야 하는 정보에 대한 내용은 설치를 위한 검사 목록을 참조하십시오. 시스템을 업그레이드하는 경우 Solaris 10 설치 설명서: Solaris Live Upgrade 및 업그레이드 계획업그레이드를 위한 검사 목록을 참조하십시오.

  • (선택 사항) 시스템을 백업합니다.

    기존 데이터 또는 응용 프로그램을 보존하려면 시스템을 백업합니다. 시스템 백업에 대한 자세한 설명은 System Administration Guide: Devices and File Systems의 24 장, Backing Up and Restoring File Systems (Overview)를 참조하십시오.

단계
  1. Solaris 10 Operating System for SPARC Platforms DVD 또는 Solaris 10 Software for SPARC Platforms - 1 CD를 넣습니다.

  2. 시스템을 부트합니다.

    • 시스템을 새로 구입한 경우 시스템을 켭니다.

    • 현재 실행 중인 시스템을 설치하려면 시스템을 종료합니다.

    ok 프롬프트가 표시됩니다.

  3. Solaris 설치 프로그램을 시작합니다.

    • 로컬 DVD 또는 CD에서 부트하고 Solaris 설치 GUI를 시작하려면 다음 명령을 입력합니다.


      ok boot cdrom
      
    • 로컬 DVD 또는 CD에서 부트하고 바탕화면 세션에서 텍스트 설치 프로그램을 시작하려면 다음 명령을 입력합니다.


      ok boot cdrom - text
      
      text

      바탕화면 세션에서 텍스트 설치 프로그램을 실행하도록 지정합니다. 기본 GUI 설치 프로그램을 변경하려면 이 옵션을 사용하십시오.

    • 로컬 DVD 또는 CD에서 부트하고 콘솔 세션에서 텍스트 설치 프로그램을 시작하려면 다음 명령을 입력합니다.


      ok boot cdrom - nowin
      
      nowin

      콘솔 세션에서 텍스트 설치 프로그램을 실행하도록 지정합니다. 기본 GUI 설치 프로그램을 변경하려면 이 옵션을 사용하십시오.

    Solaris 설치 GUI와 텍스트 설치 프로그램에 대한 자세한 내용은 Solaris 설치 프로그램 GUI 또는 텍스트 설치 프로그램 요구 사항을 참조하십시오.

    설치가 시작됩니다. 설치 프로그램에 설치하는 동안 사용할 언어를 선택하는 프롬프트가 표시됩니다.

  4. 설치하는 동안 사용할 언어를 선택하고 Enter를 누릅니다.

    잠시 후 Solaris 설치 프로그램 시작 화면이 표시됩니다.

    • Solaris GUI 설치 프로그램을 실행하는 경우 그림 2–1과 같은 화면이 표시됩니다.

    • 바탕화면 세션에서 Solaris 텍스트 설치 프로그램을 실행하는 경우 그림 2–2와 같은 화면이 표시됩니다.

    그림 2–1 Solaris GUI 설치 프로그램 시작 화면

    GUI 시작 화면은 다음 화면 캡처와 같습니다. 이 화면에는 설치 프로그램이 시스템을 구성할 때 필요한 정보 목록이 표시됩니다.
    그림 2–2 Solaris 텍스트 설치 프로그램 시작 화면

    텍스트 시작 화면은 다음 화면 캡처와 같습니다. 이 화면에는 설치 프로그램이 시스템을 구성할 때 필요한 정보 목록이 표시됩니다.
  5. 다음을 눌러 설치를 시작합니다. 메시지가 표시되면 시스템 구성 질문에 응답합니다.

    구성 질문에 응답한 후, Solaris 시작 대화 상자가 표시됩니다.

    그림 2–3 Solaris 시작 화면

    설치 시작 화면의 Next 및 Edit 버튼은 화면 캡쳐에 보이는 것과 같습니다.

    설치 질문 화면이 나타납니다.

  6. 시스템을 자동으로 재부트할 것인지 디스크를 자동으로 꺼낼 것인지 결정합니다. 다음을 누릅니다.

    매체 지정 화면이 나타납니다.

  7. 설치에 사용할 매체를 지정합니다. 다음을 누릅니다.

    라이센스 패널이 나타납니다.

  8. 설치를 계속하려면 사용권 계약에 동의해야 합니다. 다음을 누릅니다.

    Solaris 설치 그러면 설치 프로그램이 시스템을 업그레이드할 수 있는지 판단합니다. 업그레이드하려면 시스템에 반드시 기존 Solaris 루트(/) 파일 시스템이 있어야 합니다. Solaris 설치 프로그램이 필요한 조건을 검출한 후 시스템을 업그레이드합니다.

    업그레이드 또는 초기화 설치 선택 화면이 나타납니다.

  9. 초기화 설치를 수행할지 업그레이드를 수행할지 결정합니다. 다음을 누릅니다.

    비전역 영역이 설치된 시스템을 업그레이드할 경우 다음을 수행합니다.

    1. 초기화 설치 또는 업그레이드를 선택하라는 메시지가 표시되면 업그레이드를 선택합니다. 다음을 누릅니다.

    2. 시스템에 루트(/) 분할 영역이 여러 개인 경우 업그레이드할 버전 선택 패널에서 업그레이드할 분할 영역을 선택합니다.

      Solaris 설치 프로그램에서 업그레이드를 사용자 정의할 수 없다는 메시지가 표시됩니다. Solaris 설치 프로그램에서 시스템을 분석하여 업그레이드될 수 있는지 판단합니다. 업그레이드 준비 완료 페이지가 표시됩니다.

      시스템에 루트 분할 영역이 한 개만 있는 경우 Solaris 설치 프로그램에서 업그레이드할 분할 영역을 선택하라는 메시지가 표시되지 않습니다. 그 분할 영역이 자동으로 선택됩니다.

    3. 업그레이드를 계속하려면 업그레이드 준비 패널에서 지금 설치를 누릅니다.

      Solaris 설치 프로그램이 시스템을 업그레이드하기 시작합니다. 업그레이드가 완료된 후에는 보존되지 않은 일부 로컬 수정 사항을 보정할 필요가 있습니다. 자세한 내용을 보려면 단계 12단계 a로 이동합니다.

      업그레이드를 계속하지 않으려면 뒤로를 눌러 초기화 설치를 수행합니다.

  10. 수행하려는 설치의 유형을 선택합니다. 다음을 누릅니다.

    • 전체 Solaris 소프트웨어 그룹을 설치 하려면 기본 설치를 선택합니다.

    • 다음 작업을 하려면 사용자 정의 설치를 선택합니다.

      • 특정 소프트웨어 그룹 설치

      • 추가 소프트웨어 설치

      • 특정 소프트웨어 패키지 설치

      • 특정 로켈 설치

      • 디스크 레이아웃 사용자 정의

      소프트웨어 그룹에 대한 자세한 내용은 소프트웨어 그룹의 권장 디스크 공간를 참조하십시오.


    주 –

    텍스트 설치 프로그램에서는 기본 또는 사용자 정의 설치 선택 프롬프트가 표시되지 않습니다. 기본 설치를 수행하려면 텍스트 설치 프로그램에 제공된 기본 값을 사용합니다. 사용자 정의 설치를 수행하려면 텍스트 설치 프로그램 화면에서 값을 편집합니다.


  11. 프롬프트가 표시되면 추가 구성 질문에 대하여 응답합니다.

    시스템 설치에 필요한 정보를 입력하면 설치 준비 화면이 표시됩니다.

    그림 2–4 Solaris 설치 준비 화면

    설치 준비 화면은 다음 화면 캡처와 같습니다. 이 화면에 설치하는 동안 입력한 구성 정보 목록이 표시됩니다.
  12. Solaris 소프트웨어를 설치하려면 지금 설치를 누릅니다. 화면에 표시되는 설명을 따라 Solaris 소프트웨어를 설치합니다.

    Solaris 설치 프로그램이 Solaris 소프트웨어 설치를 완료하면 시스템이 자동으로 다시 부트되거나 사용자에게 직접 다시 부트하도록 프롬프트가 표시됩니다.

    추가 제품을 설치하는 경우 해당 제품의 DVD 또는 CD를 넣으라는 프롬프트가 표시됩니다. 설치 과정에 대해 적절한 설치 설명서를 참조하십시오.

    설치가 완료된 후 설치 로그가 파일에 저장됩니다. 설치 로그는 /var/sadm/system/logs/var/sadm/install/logs 디렉토리에 있습니다.

    • 처음 설치하는 경우 설치가 완료됩니다. 단계 13으로 이동합니다.

    • Solaris 소프트웨어를 업그레이드할 경우 보존되지 않은 일부 로컬 수정 사항을 보정할 필요가 있습니다. 단계 a로 계속합니다.

      1. /a/var/sadm/system/data/upgrade_cleanup 파일의 내용을 검토하여 Solaris 설치 프로그램이 보존하지 못한 로컬 수정 내용을 교정해야 하는지 판단합니다.

      2. 보존되지 않은 모든 로컬 수정 사항을 보정합니다.

  13. 설치하는 동안 자동 재부팅을 선택하지 않은 경우 시스템을 다시 부트합니다.


    # reboot
    
Posted by 1010
05.JSP2008. 11. 6. 14:30
반응형

4. SQL Tag

sql 태그를 사용하기 위해서 페이지 상단에 다음과 같이 선언되어야 된다.
<%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql"%>

DataSource 를 이용해서 SQL을 처리하는 sql 태그는 다음과 같은 것들이 있다.

기능 태그 prefix
DataSource 설정 SetDataSource sql
SQL query (dateParam, param) , update (dateParam, param) , transaction sql

4.1 <sql:setDataSource/>

javax.sql.DataSource의 인스턴스를 얻을 수 있다.

<sql:setDataSource
{dataSource="dataSource" |url="jdbcUrl"
[driver="driverClassName"]
[user="userName"]
[password="password"]}
[var="varName"]
[scope="{page|request|session|application}"]/>

4.2 <sql:query/>

쿼리 실행.
JDBC의 java.sql.PreparedStatement 인터페이스에 기반한 방식을 사용하여 매개변수화 된다.
매개변수 값은 중첩된 <sql:param>과 <sql:dateParam> 태그를 사용하여 지정된다.

<%@ page pageEncoding="MS949" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<fmt:setLocale value="ko" />
<sql:query var="emp"
        dataSource="jdbc/myora81">
SELECT  EMPNO AS 사원번호, ENAME AS 이름,
            SAL AS 월급여, HIREDATE AS 입사일
FROM EMP
</sql:query>

<table border="1">
  <tr>
<%-- 필드의 정보를 출력한다.            --%>
  <c:forEach var="columnName" items="${emp.columnNames}">
    <th><c:out value="${columnName}"/></th>
  </c:forEach>

<%-- 데이터를 한 줄씩 출력한다.         --%>
  <c:forEach var="row" items="${emp.rowsByIndex}">
    <tr>
<%-- 필드의 길이만큼 반복한다.          --%>
      <c:forEach var="column" items="${row}" varStatus="i">
        <c:choose>
          <c:when test="${i.index==3}">
      <td><fmt:formatDate value="${column}" pattern="yyyy/MM/dd"/></td>
          </c:when>
          <c:otherwise>
      <td><c:out value="${column}"/></td>
          </c:otherwise>
        </c:choose>
      </c:forEach>
  </c:forEach>
</table>
<hr>

<table border="1">
  <c:forEach var="row" items="${emp.rows}">
  <tr>
    <td>번호: <c:out value="${row['사원번호']}"/></td>
    <td>이름: <c:out value="${row['이름']}"/></td>
  </tr>
  </c:forEach>
</table>

4.3 <sql:dateParam/> , <sql:param/>

<sql:dateParam/>은 java.sql.PreparedStatement.setTimestamp() 역할을 하고,
<sql:param/> 은 java.sql.PreparedStatement.setString() 의 역할을 한다.

<sql:dateParam value="value" type="[timestamp|time|date]"/>
<sql:param value="value"/>

4.4 <sql:update/>

java.sql.Statement.executeUpdate() 메소드에 해당.
형식과 동작은 <sql:query/>태그와 동일.

<sql:update sql="sqlUpdate"
[dataSource="dataSource"]
[var="varName"] [scope="{page|request|session|application}"]/>
<html>
<body>
<sql:setDataSource var="dataSrc"
     url="jdbc:oracle:thin:@localhost:1521:ORCL" driver="oracle.jdbc.OracleDriver"
    user="scott" password="tiger"/>

<sql:transaction dataSource="${dataSrc}">
    <sql:update sql="insert into dept(deptno, dname, loc) values(?,?,?)">
        <sql:param value="50"/>
        <sql:param value="DEVS"/>
        <sql:param value="SEOUL"/>
    </sql:update>

    <sql:update sql="update dept set LOC=? where deptno=?">
        <sql:param value="BUSAN"/>
        <sql:param value="50"/>
    </sql:update>
</sql:transaction>
</body>
</html>

4.5 <sql:transaction/>

트랜잭션 구현.
(트랜잭션은 하나의 작업 그룹으로서 성공 또는 실패 시에 데이타베이스 연산 결과를 보호하는데 사용)

<sql:transaction [dataSource="dataSource"]
[isolation=isolationLevel]>
<sql:query> 과 <sql:update> 문들
</sql:transaction>

isolationLevel ::= "read_committed"| "read_uncommitted"| "repeatable_read"| "serializable"

문서에 대하여

Posted by 1010
90.개발관련문서2008. 11. 6. 12:01
반응형
출처:이정환닷컴

'RSA 공개열쇠 방식'의 암호화는 다음의 3단계 과정이 필요하다.

1단계 : 공개 열쇠 만들기.

1. 암호를 받는 쪽에서는 아무거나 두 소수, p와 q를 생각한다.
2. p와 q를 곱해 N을 만든다.

3. 아무 숫자나 다음 식을 만족하는 두 숫자를 생각한다.

1=(e*d)mod[(p-1)(q-1)]

4. mod()는 나머지를 구하는 함수다. 40mod(7)은 40을 7로 나눈 나머지를 구하라는 말이다. 답은 5다.

5. N과 e는 공개 열쇠다. 전화로 불러줘도 되고 사람들에게 알려줘도 된다. 전혀 문제가 없다.

2단계 : 암호 만들기.

1. 암호를 만드는 쪽에서는 공개 열쇠 N과 e를 써서 암호를 만든다. 문제는 다른 사람들도 모두 이 공개 열쇠를 알고 있다는 사실이다. 열쇠는 공개돼 있지만 받는쪽에서만 풀 수 있어야 한다.

2. 먼저, 문서의 모든 글자를 이진수로 바꾸고 다시 십진수로 바꾼다. 이 숫자를 M이라고 한다. 우리는 지금부터 M을 암호로 바꾼다.

3. 다음 식을 써서 암호 C를 만든다.

C=Memod(N)

3단계 : 암호 풀기.

1. 암호 C를 받아서 원래 문서 M으로 풀어보자.
2. 공식은 간단하다. N과 d를 집어넣으면 된다.

M=Cdmod(N)

3. N과 e는 공개돼 있지만 다른 사람들은 p와 q를 알 방법이 없다. 한번 더 계산해서 만든 d는 더 알 수 없다.



백문이 불여일견, 예제를 풀어보자.

1단계 : 공개 열쇠 만들기.

1. 이정환은 두 소수 11과 17을 생각하고 곱해서 공개 열쇠 N을 187로 잡는다.

2. 이정환은 대충 d를 23로 놓고 다음 공식에 넣어서 공개 열쇠 e를 7으로 잡는다.

1=(e*d)mod[(p-1)(q-1)]

1=(7*23)mod(10*16)
1=161mod(160)

3. N과 e, 187과 7을 공개한다. 얘들아, 우리 이걸로 암호 만들거다. 풀 수 있으면 풀어봐라.

2단계 : 암호 만들기.

1. 백우진은 'X'를 암호화하려고 한다. 이진수로 바꾸면 1011000, 다시 십진수로 바꾸면 M은 88이 된다. 백우진은 M을 공개 열쇠 N과 e, 187과 23을 써서 암호로 바꾼다.
2. 공식에 집어넣는다.

C=Memod(N)

C=887mod(187)
C=40867559636992mod(187)
C=11

3. 40867559636992을 187로 나누면 나머지가 11이 나온다는 이야기다. 11이 암호다. 11를 이정환에게 보낸다.

3단계 : 암호 풀기.

1. 이정환은 이제 암호 C, 11을 풀어 원래 숫자 M을 찾아내야 한다.

2. 공식에 집어넣는다. N과 d는 각각 187과 23이다. N은 공개 열쇠지만 d는 이정환만 아는 숫자다. 처음에 생각한 숫자 p와 q를 곱해서 N을 만들고
이걸 조합해서 d와 e를 만들었는데, 공개된 N과 e만 가지고 d를 찾기는 굉장히 어렵다. 거의 불가능하다.

M=Cdmod(N)

M=1123mod(187)
M=895430243255237372246531mod(187)
M=88

3. 88, 암호를 풀었다.

'RSA 공개 열쇠 방식'은 MIT 컴퓨터 사이언스 실험실의 론 리베스트와 아디 샤미르, 레너드 애들먼, 세 사람이 발명했다. RSA는 이들의 머릿글자 모음이다. 이 암호화 방식의 핵심은 소인수 분해에 있다.

두 소수 p와 q를 곱해서 공개 열쇠 N을 만들면 이걸 쥐고 아무리 난리법석을 떨어도 원래 숫자를 찾을 방법이 없다.

35가 5와 7로 나눠져 있다는 건 쉽게 알 수 있다. 소인수 분해는 하나하나 숫자를 맞춰보는 수밖에 딱히 방법이 없다. 숫자가 커지면 슈퍼컴퓨터를 돌려도 몇십년씩 걸린다. 17과 19607843을 곱하면 333333331이 된다는 건 쉽게 알 수 있지만 그걸 찾기가 어렵다는 이야기다. 실제로 수학자들은 수백년동안 이 숫자가 소수라고 생각해왔다.

여기서 문제를 한번 더 뒤집어 공개 열쇠를 두개 만들어 놓고 이걸 꼬아서 혼자만 아는 결정적인 열쇠 d를 만들어 놓으면 당신의 암호는 거의 완벽하다고 할 수 있다.

위의 예제에서 공개 열쇠 N과 d는 각각 187과 23이다. 이걸 풀려면 N이 먼저 뭐와 뭐의 곱인가 알아야 한다. 그리고 그 뭐와 뭐에서 각각 1을 뺀 숫자의 곱을 구하고 거기서 다시 1을 뺀 수가 d의 몇배인가도 알아야 한다. 몇배인가만 알면 암호는 풀리겠지만, 한번 해봐라. 결코 만만치 않다.

187 정도면 어떻게 풀릴 수도 있지만 보통은 자릿수가 308 이상이다. 한번 보겠는가.

4286280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744699627495237

이게 308자리 숫자다. 이게 뭐와 뭐, 두 소수의 곱으로 돼 있는가 맞춰봐라. 이 정도면 1억대의 PC를 한꺼번에 돌려도 1000년이 넘게 걸린다고 한다. 현재의 과학기술로는 이런 암호를 풀 방법이 없다.

도움 말씀 : 백우진.
참고문헌 : '코드북', '현대수학의 여행자, '수학: 양식의 과학', '영부터 무한대까지', '수학의 황제 가우스'.
Posted by 1010
01.JAVA/Java2008. 11. 5. 15:13
반응형
Posted by 1010
01.JAVA/Java2008. 11. 5. 14:52
반응형
썬의 홈페이지에 실린 인터뷰 기사를 보다가...

Java의 오랜 미신 중에 하나...
"String 더하기 보다 StringBuffer append가 빠르다!?"

예를 들어... 아래의 코드는:

public static String concat1(String s1, String s2, String s3,
        String s4, String s5, String s6) {
    String result = "";
    result += s1;
    result += s2;
    result += s3;
    result += s4;
    result += s5;
    result += s6;
    return result;
}

이렇게 짜는게 좋다고... 가르치고 배운다. 나도 그렇게 배웠다:

public static String concat2(String s1, String s2,
        String s3, String s4, String s5, String s6) {
    StringBuffer result = new StringBuffer();
    result.append(s1);
    result.append(s2);
    result.append(s3);
    result.append(s4);
    result.append(s5);
    result.append(s6);
    return result.toString();
}

결론을 먼저 얘기하면, 새빨간 거짓말이다. 적어도 지금은 그렇다. 1.5 버전 이후의 썬의 자바 컴파일러를 사용한다면 확실히 그렇다.

StringBuffer를 사용해서 효과를 볼려면 이 정도는 해 줘야 한다:

public static String concat3(String s1, String s2, String s3,
        String s4, String s5, String s6) {
    return new StringBuffer(
        s1.length() + s2.length() + s3.length() + s4.length() +
        s5.length() + s6.length()).append(s1).append(s2).
        append(s3).append(s4).append(s5).append(s6).toString();
}

버퍼를 최초에 한번만 할당하면 append할때마다 버퍼 재할당을 하지 않으므로 확실히 빨라진다.
부작용은 코드가 극단적으로 읽기 힘들어 진다는 점. -.-;

옛날 얘기는 이쯤하고, 요즘 얘기를 해보자.

Java5에서 StringBuilder라는 새로운 클래스가 소개되었는데... 한마디로 요약하면 쓰레드에 안전하지 않은 StringBuffer다. 그런데 String은 immutable이라서 동기화 문제가 거의 없으므로, 예전에 StringBuffer쓰던 자리에 StringBuilder를 쓰면 된다.

똑같은 기능을 하는 함수를 가장 간단하게 구현하면 이렇다:

public static String concat4(String s1, String s2, String s3,
    String s4, String s5, String s6) {
    return s1 + s2 + s3 + s4 + s5 + s6;
}

1.5버전 이후의 썬의 자바 컴파일러는 concat4()처럼 짜면 StringBuilder append를 사용한 코드를 생성한다.

(위의 concat3()에서 사용한 방법까지 적용하면) 가장 효율적으로 구현하면 이렇게 된다:

public static String concat5(String s1, String s2, String s3,
        String s4, String s5, String s6) {
    return new StringBuilder(
        s1.length() + s2.length() + s3.length() + s4.length() +
        s5.length() + s6.length()).append(s1).append(s2).
        append(s3).append(s4).append(s5).append(s6).toString();
}

그러나, 여기서 고려해야할 점 두 가지:
1. 지금은 가장 효율적인 concat5()가 Java7이나 그 이후에도 가장 효율적이라는 보장이 없다.
2. concat4()가 concat5()보다 훨씬 읽기 좋다.

public static String concat6(String s1, String s2, String s3,
        String s4, String s5, String s6) {
    return new StringBuilder(BUFFER_SIZE).append(s1).append(s2).
        append(s3).append(s4).append(s5).append(s6).toString();
}


결론은:
1. 특별한 이유가 없다면 성능도 좋고 읽기도 좋은 concat4()가 최선의 선택이다.
2. 그러나 추가적인 계산없이, 버퍼 크기를 미리 알 수 있다면 concat6()도 나쁘지 않다.
3. 역시... 짜는 넘 맘이다.


출처 : http://iolothebard.tistory.com/291
Posted by 1010
90.개발관련문서2008. 11. 4. 19:00
반응형
Posted by 1010
반응형
한글입력 : <input type=text style='IME-MODE: active'><br>
<br>

자동 (위의 속성을 이어받습니다) : <input type=text style='IME-MODE: auto'><br>
<br>

영문입력 : <input type=text style='IME-MODE: inactive'><br>
<br>

입력모드 해제 : <input type=text style='IME-MODE: deactivated'><br>
<br>
Posted by 1010
60.Unix2008. 11. 3. 13:39
반응형

E3500system의 booting이 안될때...

E3500 system에 Solaris 2.6 3/98또는 5/98 version의 Enduser cluster type으로install하였을 경우 booting을 하지 못하며, 다음과 비슷한 error를 보게 될것이다.
cannot load drivers for sbus@2,0/sunw,socal@c,10000/ss@0,0/ssd@w21000020370eaf1c,0:a
위와 같은 error는 다음의 package가 install되어 있지 않기 때문이므로, OS
install시 반드시 선택하여 install하여야 한다.
               SUNWhea         SunOS Header Files

        SUNWssadv       SPARCstorage Array Drivers

 

Solaris 2.5.1에서의 installboot 명령어 사용법

1. OS CD로 부팅후 CD로 부터  bootblock을 disk로 복사하여 설치 하려면 아래와 같이 
   installboot 명령을 실행 한다.
    ok boot cdrom -sw
    # installboot /cdrom/export/exec/sparc.Solaris_2.5.1 \    
     /usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/c0txd0s0
위의 명령중 마지막 항목인 /dev/rdsk/c0txd0s0는 bootblock을 설치할 디스크의 device이름을 명기한다. 일반적으로 "/" 화일 시스템은 target 0인 디스크의 0번 slice에 만들기 때문에 bootblock이 install 될 device는 /dev/rdsk/c0t0d0s0가 되지만 다른 target 번호를 사용하는 디스크에 bootblock을 설치할 경우에는 이에 맞는 device이름을 적어준다.
2. backup 받았던 data를 restore한후 bootblock을 다시 설치 하려면 아래와 같은 명령을 사용한다. controller 1번에 연결된 target 0, slice 0의 disk에 설치 하려면 아래와 같이 installboot 명령을 실행 한다.

    # installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/c1t0d0s0

 

새로운 디스크 설치하기

1. root로 로그인한 후 아래와 같은 명령어를 사용하여 시스템을 다운시킨다. 
             # init 0
             또는 
             # halt 
2. 시스템의 전원을 끄고 새 디스크를 연결한다.
3. 시스템의 전원을 켜고 "stop" key와 "a" key를 동시에 늘러 ok 상태로 시스템을
   내린 후 아래의 명령을 사용하여 리부팅 한다.
               ok boot -r
4.  시스템이 부팅된후 root로 로그인 하여 아래와 같이 format 명령을 실행한다.
               # format
    format명령어를 실행하면 시스템에 연결된 하드디스크가 0번 부터 선택할수 있도
    록 나열되어 보여 진다. 새로연결한 디스크 번호를 선택한후 enter키를 친다.
5.  아래와 같이 format> prompt가 보여지면 "partition"이라고 친후 enter키를 친다.
               format> partition
6.  prompt가 partition>으로 변경되면, print를 실행하여 현재 디스크의 용량을 확인
    한다.
                   partition> print
               Current partition table (unnamed):
               Total disk cylinders available: 2036 + 2 (reserved cylinders)
               Part      Tag    Flag     Cylinders        Size            Blocks
                 0 unassigned    wm       0               0         (0/0/0)          0
                 1 unassigned    wu       0               0         (0/0/0)          0
                 2     backup    wm       0 - 2035     1002.09MB    (2036/0/0) 2052288
                 3 unassigned    wm       0               0         (0/0/0)          0
                 4 unassigned    wm       0               0         (0/0/0)          0
                 5 unassigned    wm       0               0         (0/0/0)          0
                 6 unassigned    wm       0               0         (0/0/0)          0
                 7 unassigned    wm       0               0         (0/0/0)          0
    print결과에서 2번 part가 전체 디스크의 용량을 보여 주며, 위의 결과에서 보면
    전체 디스크 용량은 1002.09MB이고 2036개의 cylinder를 가지고 있음을 알수 있다
7. 사용할 slice(part)와 각 slice에 할당할 디스크 사이즈를 결정하고 아래와 같이 선택을 한다. 전체 디스크 용량을 2개의 slice로 나누고 4과 5번 slice를 사용하고자 할때;
               partition> 4
               Part      Tag    Flag     Cylinders        Size            Blocks
                 4 unassigned    wm       0               0         (0/0/0)          0
               Enter partition id tag[unassigned]: 
               Enter partition permission flags[wm]: 
               Enter new starting cyl[0]: 0
               Enter partition size[0b, 0c, 0.00mb]: 1018c
               partition> print
               Current partition table (unnamed):
               Total disk cylinders available: 2036 + 2 (reserved cylinders)
 
                              Part      Tag    Flag     Cylinders        Size            Blocks
                 0 unassigned    wm       0               0         (0/0/0)          0
                 1 unassigned    wm       0               0         (0/0/0)          0
                 2     backup    wm       0 - 2035     1002.09MB    (2036/0/0) 2052288
                 3 unassigned    wm       0               0         (0/0/0)          0
                 4 unassigned    wm       0 - 1017      501.04MB    (1018/0/0) 1026144
                 5 unassigned    wm       0               0         (0/0/0)          0
                 6 unassigned    wm       0               0         (0/0/0)          0
                 7 unassigned    wm       0               0         (0/0/0)          0
               
               partition> 5
               Part      Tag    Flag     Cylinders        Size            Blocks
                 5 unassigned    wm       0               0         (0/0/0)          0
               Enter partition id tag[unassigned]: 
               Enter partition permission flags[wm]: 
               Enter new starting cyl[0]: 1018
               Enter partition size[0b, 0c, 0.00mb]: 1018c
               partition> print
               Current partition table (unnamed):
               Total disk cylinders available: 2036 + 2 (reserved cylinders)
               Part      Tag    Flag     Cylinders        Size            Blocks
                 0 unassigned    wm       0               0         (0/0/0)          0
                 1 unassigned    wm       0               0         (0/0/0)          0
                 2     backup    wm       0 - 2035     1002.09MB    (2036/0/0) 2052288
                 3 unassigned    wm       0               0         (0/0/0)          0
                 4 unassigned    wm       0 - 1017      501.04MB    (1018/0/0) 1026144
                 5 unassigned    wm       1018 - 2035   501.04MB    (1018/0/0) 1026144
                 6 unassigned    wm       0               0         (0/0/0)          0
                 7 unassigned    wm       0               0         (0/0/0)          0
8. partition 이 끝나면 label을 실행 한다.
               partition> label 
               label 작업을 계속 할 것인지를 물어 보면 "yes" 라고 치고 
               label 작업이 다 끝나면 "quit" 을 2번 쳐서 format 상태에서 빠져 나온다.
9.  아래와 같이 newfs를 실행하여 UNIX filesystem을 새 디스크의 각 slice에 만든다  
               # newfs /dev/rdsk/c#t#d#s#
               "c#t#d#s#" 은 새 디스크의 각 slice에 해당하는 디바이스 이름을 쓴다.
               새 디스크가 coltroller 0에 연결되어 있고 targer 번호 0을 사용하고 있다면
        위의 format에의해 생성된 디스크 device는 c0t0d0s4와 c0t0d0s5가 된다.
10. newfs 작업이 끝나면 새 filesystem을 mount하여 사용한다.
        ** 명령어를 이용하여 filesystem을 mount할때 :
        # mount  -F ufs /dev/dsk/c#t#d#s# 
        ** /etc/vfstab을 사용하여  mount 할때에는 아래와 같이 vfstab에 정의한 후,  
         /dev/dsk/c#t#d#s# /dev/rdsk/c#t#d#s#  ufs 2 yes -
                   아래의 명령을 사용한다.
             # mount 
    시스템이 rebooting된 후에 자동 mount되게 하려면 /etc/vfstab에 정의해야 한다.  
9. 위의 모든 작업이 끝나면 아래 명령어를 사용하여 새 filesystem이 mount되에
   있는지 확인한다.
               # df –k
 
가상터미널 갯수 늘리기(login 사용자수 늘리기)
[A] /etc/system 화일에 아래의 내용을 추가하고 시스템을 rebooting 한다.
    # vi /etc/system
        set pt_cnt=128 ; 128개로 늘리고 싶을때.
        set npty=128
    시스템 재 부팅시 -r option을 사용하여 kernel이 reconfigure 되도록 한다.
   # reboot -- -r
 

cron job 정의하기

1. cron 명령은 지정된 날짜와 시간에 일정 작업을 주기적으로 수행하기 위해 사용되
   며 각 사용자별로 /var/spool/cron/crontabs 디렉토리에 사용자 ID와 같은 이름의
   crontab 화일을 만들어 cron job을 지정할 수 있다. 
   cron 명령은 시스템이 부팅되면서 /etc/rc2.d/S75cron 스크립트에 의해서 daemon
   형태로 수행된다.
2. 각 사용자 별로 crontab 화일을 만드는 방법은 아래와 같이 "crontab -e" 명령을
   실행하면 된다.
              % crontab -e
   위와 같이 명령을 실행하면 "vi"  editor mode로 들어가 crontab 화일을 수정할수
   있게 되는데,  만약 "vi" mode로 들어가지 않으면 "EDITOR" 환경변수를 vi로 변경
   후 crontab 명령을 다시 수행한다.
        2.1 csh을 사용하는 경우
           % setenv EDITOR vi
           % crontab -e
        2.2 sh이나 ksh을 사용하는 경우
           $ EDITOR=vi
           $ export EDITOR
           $ crontab -e
3. crontab 화일의 내용을 정의 하는 format은 아래와 같다.
           요일   실행할 명령
              분 : 0-59
              시 : 0-23
              일 : 1-31
              월 : 1-12
                  요일 : 0-6( 0: 일요일) 
   예) 매주 일요일 오전 3:15에 /var 디렉토리에 있는 core 화일을 지우는 작업
            15 3 * * 0 find /var -name core 2>/dev/null |  xargs rm -f
       매월 1일 오후 6시에 시스템 down message 보내기
            0 18 1 * * wall "System Will be down"
4. /etc/cron.d/cron.allow 화일이나 /etc/cron.d/cron.deny 화일을 이용하여 시스템
   관리자는 각 사용자별로 crontab 화일에 대한 access 권한을 제한 할 수 있다.
   4.1 crontab을 access 할 수 있는 사용자 
       - /etc/cron.d/cron.allow 화일이 존재하는 경우, 그 화일 안에 지정된 사용자 
       - /etc/cron.d/cron.allow 화일이 없는 경우, /etc/cron.d/cron.deny 화일 
         안에 지정되지 않은 사용자
 4.2 crontab을 access 할 수 없는 사용자
         - /etc/cron.d/cron.allow 화일이 존재하는 경우, 그 화일 않에 지정되지 않은
         사용자
         - /etc/cron.d/cron.allow 화일이 없는 경우, /etc/cron.d/cron.deny 화일에
         지정된 사용자
         - /etc/cron.d/cron.allow와 /etc/cron.d/cron.deny 화일이 모두 없는 경우, 
         root를 제외한 모든 사용자 
  4.3 OS가 설치되면 기본적으로 /etc/cron.d/cron.deny이 생성되고 그 안에 아래의
        사용자들이 지정된다.
         daemon
               bin
               smtp
               nuucp
               listen
               nobody
               noaccess
               /etc/cron.d/cron.allow와 /etc/cron.d/cron.deny 화일에 사용자를 지정할 때
               는 위와 같이 한줄에 한명씩 사용자를 지정한다.
5. cron에 관련된 환경은 /etc/default/cron 화일에 정의 할 수 있다.
   % cat /etc/default/cron
   CRONLOG=YES
   PATH=/usr/bin:/usr/ucb:

 

각 사용자가 속한 group의 최대수 증가시키기

1. 한 사용자가 속할수 있는 group의 수는 OS 상에서 아래와 같이 /usr/include/sys/param.h
   화일에 정의 되어 있는 것처럼 ngroup_max 변수에 의해 16으로 제한된다.
               /*
               * These define the maximum and minimum allowable values of the
               * configurable parameter NGROUPS_MAX.
               */
               #define NGROUPS_UMIN    0
               #define NGROUPS_UMAX    32
               /*
               * NGROUPS_MAX_DEFAULT: *MUST* match NGROUPS_MAX value in limits.h.
               * Remember that the NFS protocol must rev. before this can be increased
               */
               #define NGROUPS_MAX_DEFAULT     16
2. 이를 늘려주기 위해서는 아래와 같이 /etc/system화일에 지정한후 시스템을 rebooting한다.
               set ngroups_max_default = 20
   /etc/system 화일에 지정할수 있는 최대 값은 32로 제한되어있다.
3. Important note 
  이 변수의 값은 되도록이면 변경하지 않을 것을 권유한다.
  이 변수의 값이 변경되면 NFS를 사용함에 있어 영향을 미칠수 있다.

 

Solaris 2.6에서 원격 프린터 지정하기

Solaris 2.6에서는 admintool을 이용하여 remote printer를 지정하려 하면 error가
나며, 지정할 수 없다(admintool bug임). 이를 대신하여 명령어로 remote printer를 
지정하려면 아래와 같이 한다.
    # lpsystem -t bsd printer_server_name
    # lpadmin -p printer_name -s printer_server_name -I any
    # lpadmin -d printer_name               <-- default printer로 지정할때.
<예> printer_server_name 이 morning이고,
     printer_name이 kitten 이며 이를 system default printer로 지정하고 싶으면,
               # lpsystem -t bsd morning
               # lpadmin -p kitten -s morning -I any
               # lpadmin -d kitten
위와 같이 한후 admintool에서 지정한 printer가 등록되어 있는지 확인한다.
 

Disk quota 지정하는 방법

) /data3 file system에대하여 각 사용자에게 quota를 할당하고 싶은 경우
1. /etc/vfstab 수정.
               /dev/dsk/c0t1d0s6       /dev/rdsk/c0t1d0s6      /data3  ufs   1  yes rq
    /etc/vfstab에 위와 같이 마지막 항목을 "rq"로 지정한다.
2. quota를 사용하고 싶은 화일시스템의 mouting point에 가서 다음의 명령어를 실행한다.
               # cd /data3
               # touch quotas
               # chmod 600 quotas
3. 각 사용자별로 quota량을 지정한다.
               # edquota user-id
               fs /data3 blocks (soft = 100, hard = 100) inodes (soft = 100, hard = 110)
   block은 1KB단위.
   soft의 한계가 넘으면, 경고메세지가 출력되고, hard한계를 넘으면 file creat가 수행이 되지 않음. 위와 같이 quota를 지정한 경우 /data3 화일 시스템에 사용자의 disk 사용량이 100KB를 넘어서면 경고 메세지가 출력되고 110KB에 달하면 더이상 /data3 화일 시스템에 화일을 만들수 없으며, owner가 user-id로 되어있는 화일의 갯수도 100개가 넘어서면 경고 메세지가 출력되고, 또한  111개 이상의 화일은 만들 수 없다.
4.한 사용자의 quota를 다른 사용자에게 copy하는 경우
    예)  사용자 aa와 같은 quota를 사용자 bb에게 할당하려면
               # edquota -p aa bb
5. 현재 사용자가 사용하고 있는 quota 양을 알아보려면
               # quota -v user-id
6. 시스템을 재 부팅시하지 않고  quota enable이 되게 하려면 아래와 같이 실행 한다.
               # sh /etc/init.d/ufs_quota start
   disable하려면
               # sh /etc/init.d/ufs_quota stop
7. man page 참조
              quota, edquota, checkquota, repquota, quotaon, quotaoff

 

 

Root(/) 화일 시스템 복구

root(/) 화일 시스템이 손상되어 시스템 부팅이 않되는 경우 backup 받아 놓은
data를 사용하여 아래와 같이 복구 할수 있다.
1. 시스템을 down 시키고 OS CD를 CD-ROM drive에 넣는다.
2. 아래와 같이 CDROM 을 이용하여 single-user mode로 부팅한다
   ok  boot cdrom -sw
3. Bourne shell prompt(#)가 나타나면, /로 사용하던 disk device에 새로운 화일
   시스템을 만든다. /로 사용하던 disk device가 /dev/dsk/c0t3d0s0인 경우 아래와
   같이 한다. 
   # newfs /dev/rdsk/c0t3d0s0
4. 새로운 root file system을 fsck명령을 사용하여 점검한다.
   # fsck /dev/rdsk/c0t3d0s0
5. root file system을  /a로 mount한다.
   # mount /dev/dsk/c0t3d0s0 /a
6. root 화일 시스템을 backup 받아놓은 tape을 tape drive에 넣고 아래의 명령을
   실행하여 restore한다.
   # cd /a
   # ufsrestore rvf /dev/rmt/0
7. restore가 끝나면 "restore symbol table"을 지우고 새로만든 root partition을 unmount 한다. 
   # rm restoresymtable
   # cd /
   # umount /a
8. fsck 명령을 사용하여 새 root partition을 다시한번 점검한다.
   # fsck /dev/rdsk/c0t3d0s0
9.아래의 명령을 사용하여 bootblock을 설치한다. 
  # cd /usr/platform/`uname -i`/lib/fs/ufs (Solaris 2.5 이상 버젼인 경우) 
  # cd /usr/lib/fs/ufs (Solaris 2.4 이전 버젼인 경우)
  # installboot bootblk /dev/rdsk/c0t3d0s0
10. 시스템을 재 부팅한다.
    # reboot

 

Sendmail(version SMI-8.6) 구성하기

SunOS의 전자메일은 sendmail에 의해서 운영되며 sendmail은 메일의 라우팅과 forwarding 그리고 aliasing 등을 지정하여 전자메일이  원활히 전달 되도록 한다. 이 글에서는 Solaris 상에 설치되어 있는 Sendmail의 설치와 운영에 관해서 알아본다.
 
1. 설치전 확인사항
   -hostname이 등록되어 있는지 확인
        # hostname 
        #
    위와 같이 아무것도 나오지 않으면 /etc/hostname.{ethernet-interface} 화일에
    hostname을 등록한다.
    "ethernet-interface"가 "le0"인 경우에 /etc/hostname.le0 화일을 확인한다.
    예) # cat /etc/hostsname.le0
        pink
        #
   -/etc/hosts 화일에 hostname이 아래와 같은 형태로 등록되어야 한다.
        IP-address      hostname        alias-name
    예) 147.6.4.65        pink          mail pink.sun.co.kr
2. SunOs 상에 있는 Sendmail의 설치
  ** /etc/mail/main.cf 화일을 /etc/mail/sendmail.cf 화일로 복사 한다.
               # cp /etc/mail/main.cf /etc/mail/sendmail.cf
  2.1 /etc/mail/sendmail.cf 화일 수정 
   -사용 변수
        Dw, Cw : hostname을 정의 하는 부분
                         hostname을 두개이상 사용하고 이 이름 모두로 메일을 받고 
                         싶은경우 Cw에 정의한다.
             예) Dwpink
                Cwpink mail
        Dm, Cm : domain name을 정의 하는 부분
                        domain name을 두개이상 사용하고 이 이름모두로 메일을 받고
                         싶은경우 Cm에 정의한다.
             예) Dmsun.co.kr
                 Cmsun.co.kr sun.com
        DM : 사용하는 Mailer를 지정하는 부분으로 보통 같은 도메인에서 메일을
             보낼경우에는 "ether"를 사용하고 외부 도메인에도 메일을 보낼 경우
             에는 "ddn" 을 사용한다
             예) DMether
                 DMddn
        DR : default mail relay host를 지정하는 부분
            가입한  ISP(Internet Service Provider)에 문의 하여 mail relay 
                   host를 확인한다.
             예)DRmail.kornet.nm.kr
        Dj : hostname과 domainname을 지정
             예) Dj$w.$m
   - /etc/mail/sendmail.cf 화일 수정 예
        ############################################################
        #
        #       Sendmail configuration file for "MAIN MACHINES"
        #
        #       You should install this file as /etc/sendmail.cf
        #       if your machine is the main (or only) mail-relaying
        #       machine in your domain.  Then edit the file to
        #       customize it for your network configuration.
        #
        #       See the manual "System and Network Administration for the Sun
        #       Workstation". Look at "Setting Up The Mail Routing System" in
        #       the chapter on Communications.  The Sendmail reference in the
        #       back of the manual is also useful.
        #
        #       @(#)main.mc 1.17 90/01/04 SMI
        #
        ###     local info
               # delete the following if you have no sendmailvars table
               Lmmaildomain
               # my official hostname
        Dwpink
               Cwpink 
        Dmsun.co.kr
               Cmsun.co.kr
        # You have two choices here.  If you want the gateway machine to identify
        # itself as the DOMAIN, use this line:
        #Dj$m
        # If you want the gateway machine to appear to be INSIDE the domain, use:
        Dj$w.$m
        # if you are using sendmail.mx (or have a fully-qualified hostname), use:
        #Dj$w
               # major relay mailer
               DMddn
               # major relay host
               DRmail.kornet.nm.kr
               CRmail.kornet.nm.kr
               #################################################
    - mail을 보낼때 DR에 지정된 mail relay host를 거치지 않고 DNS에 정의된 mail 
      exchanger(MX)를 이용해 direct로 메일을 보내고 싶은 경우에는 아래와 같이
      sendmail.cf화일의  약 400 ~ 405번 라인의 내용을 변경한다.
               변경전
               # Replace following with above to only forward "known" top-level domains
               R$*<@$*.$+>$*           $#$M    $@$R $:$1<@$2.$3>$4     user@any.domain
               # if you are on the DDN, then comment-out both of the the lines above
               # and use the following instead:
               #R$*<@$*.$+>$*          $#ddn $@ $2.$3 $:$1<@$2.$3>$4   user@any.domain
               변경후
        # Replace following with above to only forward "known" top-level domains
               #R$*<@$*.$+>$*           $#$M    $@$R $:$1<@$2.$3>$4     user@any.domain
        # if you are on the DDN, then comment-out both of the the lines above
        # and use the following instead:
        R$*<@$*.$+>$*          $#ddn $@ $2.$3 $:$1<@$2.$3>$4   user@any.domain
   2.2 Sendmail Daemon 살리기
        #/usr/lib/sendmail -bd -q1h
                -bd : daemon이라는 것을 명시
                -q1h : Queue interval 지정
                       mail 전송시 error가 나면 /usr/spool/mqueue 디렉토리에 
                       쌓이게 되는데 여기에 쌓인 메일을 재 전송하는 주기를 
                       정하는 것으로 1시간이면 "q1h", 30분이면 "q30m"
                       이라고 지정하면 된다.
3. 메일 전송 테스트
   -메일에는 /bin/mail과 /bin/mailx의 두가지 버젼이 있는데 /bin/mailx가 
    기능상 사용하기 편하게 되어있으므로 이것을 사용하는 것이 좋다.
   -테스트
        # /bin/mailx -v 상대방전자메일주소
        위와같이 하면 메일이 전송되는 과정이 보여지는데 이 경우 제일 마지막에 
        "sent"라고 나오면 정상적으로 배달이 된것이다.
        예) hsbyun이라는 사용자가 pink.sun.co.kr 이라는 시스템에서 
            root@kum.kaist.ac.kr로 메일을 보내는 경우 
            # /bin/mailx -v root@kum.kaist.ac.kr
            Subject: test
            test mail
            .
            EOT
            # root@kum.kaist.ac.kr... Connecting to
            kum.kaist.ac.kr via ether...
            Trying 128.134.1.1...  connected.
            220 kum.kaist.ac.kr Sendmail 4.1/KUM-0.1 ready at Fri, 2 Apr 93 14:25:38 KST
            >>> HELO pink.sun.co.kr
            250 kum.kaist.ac.kr Hello pink.sun.co.kr pleased to meet you
            >>> MAIL From:
            250 ... Sender ok
            >>> RCPT To:
            250 ... Recipient ok
            >>> DATA
            354 Enter mail, end with "." on a line by itself
            >>> .
            250 Mail accepted
            >>> QUIT
            221 kum.kaist.ac.kr delivering mail
            root@kum.kaist.ac.kr... Sent

 

Sendmail(version 8.8.8+) 구성하기

1. Solaris 2.6까지 OS에 포함되어 있는 sendmail의 version은 8.6으로 현재 Internet
   상 에서 많이 사용되고 있는 8.8.x version에 비하여 그 기능과  보안에 있어 많은
   문제점을 가지고 있다. 이를 보완하기 위해 OS version이 Solaris 2.x인 경우 recommand patch를 설치하면 새로운 버젼의 sendmail(8.8.8+SUN)이 설치되며, Solaris 7에는 기본적으로 sendmail 8.9.1 버젼이 설치되어 있다..
   이 새로운 버젼에서 제공되는 sendmail.cf 화일은 기존의 것과 많은 차이가 있으며
   메일을 발신/수신하기 위하여 아래와 같이 구성한다.
2. /etc/hosts 화일
   /etc/hosts 화일에 hostname을 정의 할때 반드시 아래와 같이 hostname.domainname
   도 alias name으로 같이 정의를 한다.
              # cat /etc/hosts
                  210.123.99.21   cat               cat.sun.co.kr loghost
                                                    ^^^^^^^^^^^^^
3. /etc/mail/sendmail.cf 화일
   sendmail.cf 화일에는 외부로 송신되는 메일이 mailhost."domain-name"를 거쳐
   보내 지도록 DS 변수에 아래와 같이 정의되어 있다.
               # "Smart" relay host (may be null)
               DSmailhost.$m
   만약 외부로 보내지는 메일이 특정 메일 서버를 거쳐 보내져야 한다면 위의 DS 부
   분을 실제 메일 서버로 지정한다.
        # "Smart" relay host (may be null)
        DSmailserver-name.domain-name
   그러나 외부로 보내지는 메일이 DNS에 설정된 MX record에 의해 바로 전송되도록
   지정하고 싶으면 위에 정의된 DS 부분을 주석처리 한다.
        # "Smart" relay host (may be null)
        #DSmailhost.$m
4. /etc/mail/sendmail.cw 화일
   이 화일을 만들어 그 안에 시스템에서 받을 메일 주소(hostname, alias name)를 넣는다.
   만약 username@domainname의 형태로 보내지는 메일도 수신하려면 아래와 같이 정의한다.
              # vi /etc/mail/sendmail.cw
              cat
                  cat.sun.co.kr
                  sun.co.kr
5. Mail Relay 하기
   Sendmail 8.8.8+ 에서는 외부(다른 시스템)로 부터  Relay 되는 메일을 차단하도록
   하는 기능이 있다. 이 기능을 사용하려면, 아래의 Rule을 /etc/mail/sendmail.cf
   화일에서 Rule Set이 정의되는 처음 부분에 추가한다. 아래의 내용중 빈칸은
   "space-bar"대신 반드시 "tab"을 사용하여야 한다.
               LOCAL_CONFIG
               FR-o /etc/sendmail.cR
               LOCAL_RULESETS
               Scheck_rcpt
               # anything terminating locally is ok
               R< $+ @ $=w >           $@ OK
               R< $+ @ $=R >           $@ OK
               # anything originating locally is ok
               R$*                     $: $(dequote "" $&{client_name} $)
               R$=w                    $@ OK
               R$=R                    $@ OK
               R$@                     $@ OK
               # anything else is bogus
               R$*                     $#error $: "550 Relaying Denied"
   그러나 같은 도메인내의 client(PC)들로 부터 보내지는 메일을 relay 하도록 하고 싶은
   경우에는 /etc/sendmail.cR화일을 만들어 아래와 같이 domainname, network address 또는 client의 IP address를 등록한다. IP address를 지정시는  반드시 "[" 와 "]"안에 IP address를 적는다.
       # vi /etc/sendmail.cR
       sun.co.kr
       210.123.99
       [201.123.345.10]
       [203.234.123.1]
       위와 같이 정의한 후 sendmail daemon 을 re-start 시킨다.
       sun.co.kr 처럼 도메인을 지정할 경우에, relay하고 싶은 호스트명이 DNS에 등록되어 있어야 한다. 예를 들어, tiger.sun.co.kr 에서 들어 오는 메일을 relay하려면, tiger.sun.co.kr이 DNS에 등록되어 있어야 한다.
6. 위에 기술된 내용 이외에 특별한 요구 사항이 있을 때에는  sendmail.cf화일을 직접
   수정하지 말고 /usr/lib/mail/README 화일의 내용을 참조하여 직접 m4 명령을 사용하여
   sendmail.cf화일을 compile하여 사용한다.
   예) 메일을 보낼때 header의 From: 부분이 hostname은 보이지 않고 From: username@domainname
       의 형태로 되게 하고 싶은경우. 
       # cd /usr/lib/mail/cf
       # cp main-v7sun.mc my.mc
                                     ^^^^^^
                                       임의의 화일로 
       # vi my.mc
       my.mc 화일에 아래의 두 라인을 추가한다.
       MASQUERADE_AS($m)dnl
       FEATURE(masquerade_envelope)dnl
       # /usr/ccs/bin/m4 ../m4/cf.m4 my.mc > my.cf
       # cp my.cf /etc/mail/sendmail.cf
       sendmail daemon을 restart 한다.
       위와 같이하여 sendmail.cf 화일을 만들면 일반 사용자들이 외부 도메인에 있는 
       사용자에게 메을을 보내면 From 부분이 From: username@domain과 같이 나타난다.
       그러나 root에서 메일을 보낼경우에는 기존처럼 From: username@hostname.domainanme
       의 형태로 보여진다.
       만약 root에서 메일을 보낼때도 hostname이 보여지지 않게 하려면 sendmail.cf
       화일에서 "CE root" 라고 정의된 부분을 없앤다.
7. Sendmail Daemon 살리기
   # /usr/lib/sendmail -bd -q1h
     -bd : daemon이라는 것을 명시
     -q1h : Queue interval 지정
            mail 전송시 error가 나면 /usr/spool/mqueue 디렉토리에 쌓이게 되는데 
            여기에 쌓인 메일을 재 전송하는 주기를 정하는 것으로 1시간이면 "q1h",
            30분이면 "q30m" 이라고 지정하면 된다.
8. 3. 메일 전송 테스트
   -메일에는 /bin/mail과 /bin/mailx의 두가지 버젼이 있는데 /bin/mailx가 
    기능상 사용하기 편하게 되어있으므로 이것을 사용하는 것이 좋다.
   -테스트
        % /bin/mailx -v 상대방전자메일주소
        위와같이 하면 메일이 전송되는 과정이 보여지는데 이 경우 제일 마지막에 
       "sent"라고 나오면 정상적으로 배달이 된것이다.
        예) hsbyun이라는 사용자가 pink.sun.co.kr 이라는 시스템에서 
            root@kum.kaist.ac.kr로 메일을 보내는 경우 
            % /bin/mailx -v root@kum.kaist.ac.kr
            Subject: test
            test mail
            .
            EOT
            % root@kum.kaist.ac.kr... Connecting to
            kum.kaist.ac.kr via ether...
            Trying 128.134.1.1...  connected.
            220 kum.kaist.ac.kr Sendmail 4.1/KUM-0.1 ready at Fri, 2 Apr 93 14:2
5:38 KST
            >>> HELO pink.sun.co.kr
            250 kum.kaist.ac.kr Hello pink.sun.co.kr pleased to meet you
            >>> MAIL From:
            250 ... Sender ok
            >>> RCPT To:
            250 ... Recipient ok
            >>> DATA
            354 Enter mail, end with "." on a line by itself
            >>> .
            250 Mail accepted
            >>> QUIT
            221 kum.kaist.ac.kr delivering mail
            root@kum.kaist.ac.kr... Sent

 

Solaris 1.x에서 kernel을 새로 만드는 방법

Solaris 1.x에는 /usr/kvm/sys/`/usr/bin/arch -k`/conf/의 kernel 
configuration 화일이 있으며 새로운 kernel을 만들기 위해서는  이 화일의 내용을 
수정한뒤 새로운 kernel(vmunix)을 컴파일해야 한다.
예를들어 `/usr/bin/arch -k` 명령을 수행한 결과가 "sun4m"이고 현재 사용하는 
kernel 이름이 "GENERIC-KOR" 라면 /sys/sun4m/conf/GENERIC-KOR 화일을 수정하면 
된다. 그러나 이 화일을 직접 수정하지 말고 다른 이름의 화일로 복사한뒤, 이 
새로운 화일을 수정하는 것이 좋다.
현재 사용하고 있는 kernel 이름은 /etc/motd 화일에서 확인할 수 있다.
               % cat /etc/motd
               Sun Microsystems Inc.   SunOS 4.1.3  GENERIC-KOR August 1997
위의 결과에서 보면 OS version 다음에 보여지는 GENERIC-KOR가 현재 사용하는 
kernel의 이름이다.
kernel을 다시 만드는 작업은 아래와 같이 하며 반드시 root로 login하여야 한다.
               # cd /usr/kvm/sys/`/usr/bin/arch -k`/conf/
               # cp GENERIC-KOR GENERIC-KOR-TAPE
               # vi GENERIC-KOR-TAPE 
                 새로 추가할 사항이나 변경할 사항을 적는다
               # config GENERIC-KOR-TAPE
               # cd ../GENERIC-KOR-TAPE
               # make
               # mv /vmunix /vmunix.org
               # mv vmunix /vmunix
               # /etc/reboot
만약 위의 작업후 시스템을 새로운 kernel을 이용하여 rebooting하는데 문제가 
생기면 아래와 같이하여 기존에 사용하던 kernel로 다시 single user mode로 
booting 한후 기존에 사용하던 kernel을 다시 원래대로 복구시킨다.
               > boot vmunix.org -s
               # mv /vmunix /vmunix.new
               # ln /vmunix.org /vmunix
               # /etc/reboot

 

Solaris 2.x에서 kernel을 새로 만드는 방법

Solaris 2.x의 kernel은 1.x와는 달리 loadable module로 되어 있기 때문에 새로운 
device가 추가 또는 제거되어도 kernel을 새로 compile하지 않고, 단지 시스템을 
reconfigure 하도록 rebooting만 하면 된다.
시스템을 reconfigure 하여 booting하는 방법은 아래와 같다.
1. "/" 다렉토리에 "reconfigure" 화일을 만든후 시스템을 reboot 한다.
               # touch /reconfigure
               # reboot
               또는
               # touch /reconfigure
               # init 0
               ok boot
2. 시스템을 down 시키고 나서 boot 명령에 "-r" 옵션을 주고 부팅한다. 
               # init 0
               ok boot -r
3. 아래와 같은 옵션을 주고 "reboot" 명령을 사용하여 시스템을 rebooting한다.
               # reboot -- -r

 

시스템 기종과 설치가능한 OS 버젼

다음 설명중 OS 버젼 4.1.X는 "4.1.1, 4.1.2, 4.1.3을 나타내며 4.1.3_U1* 과  
"4.1.3C**"는 포함하지 않는다.
SYSTEM  NAME (or model)  ARCH    (MINIMUM) OS RELEASES SUPPORTED***
--------------------------------------------------------------------------------
4/15    Classic          sun4m   4.1.3C, 4.1.3_U1, 4.1.4, 5.1 -> 5.7
4/20    SLC              sun4c   4.1, 4.1.X, 4.1.3_U1, 4.1.4, 5.4 -> 5.7
4/25    ELC              sun4c   4.1.x, 4.1.3_U1, 4.1.4, 5.0 -> 5.7
4/30    LX               sun4m   4.1.3C, 4.1.3_U1, 4.1.4, 5.1 -> 5.7
4/40    IPC              sun4c   4.1, 4.1.x, 4.1.3_U1, 4.1.4, 5.0 -> 5.7
4/50    IPX              sun4c   4.1.x, 4.1.3_U1, 4.1.4, 5.0 -> 5.7
4/60    SS1              sun4c   4.1, 4.1.x, 4.1.3_U1, 4.1.4, 5.0 -> 5.7
4/65    SS1+             sun4c   4.1, 4.1.x, 4.1.3_U1, 4.1.4, 5.0 -> 5.7
4/75    SS2              sun4c   4.1.x, 4.1.3_U1, 4.1.4, 5.0 -> 5.7
4/1xx   Cobra            sun4    4.1, 4.1.x, 4.1.3_U1, 4.1.4, 5.1****, 5.2 -> 5.4
4/2xx   Sunrise          sun4    4.1, 4.1.x, 4.1.3_U1, 4.1.4, 5.1****, 5.2 -> 5.4
4/3xx   Stingray         sun4    4.1, 4.1.x, 4.1.3_U1, 4.1.4, 5.1 -> 5.4
4/4xx   Sunray           sun4    4.1, 4.1.x, 4.1.3_U1, 4.1.4, 5.1 -> 5.4
4/6xx   Galaxy 41,51     sun4m   4.1.3, 4.1.3_U1, 4.1.4, 5.1 -> 5.5.1
4/6xx   " "   41MP,512MP sun4m   5.1 -> 5.5.1
SS4     Perigee          sun4m   4.1.4, 5.4 -> 5.7
SS5     Aurora           sun4m   4.1.3_U1 Ver B, 4.1.4, 5.3 Ed II or >, 5.4->5.7
SS10    20,30,40,41,51   sun4m   4.1.3, 4.1.3_U1, 4.1.4, 5.1 -> 5.7
SS10    402MP,41MP,512MP sun4m   5.1 -> 5.7
SS20    Kodiak           sun4m   4.1.3_U1 Ver B, 4.1.4, 5.3 Ed II or >, 5.4->5.7
SS240   Voyager          sun4m   5.3 Ed II or >, 5.4 -> 5.7
SS1000  Scorpion         sun4d   5.2 -> 5.7
SC2000  Dragon           sun4d   5.2 -> 5.7
SS11    Ultra 1(140,170) sun4u   5.5 -> 5.7
SS12    Ultra 1(E)       sun4u   5.5 HW 1/96 -> 5.7
SC11    UltraServer 1    sun4u   5.5 -> 5.7
SC12    UltraServer 1(E) sun4u   5.5 HW 1/96 -> 5.7
Ultra1  Neutron          sun4u   5.5 -> 5.7
Ultra1E Electron         sun4u   5.5 HW 1/96 -> 5.7
Ultra2  Pulsar           sun4u   5.5.1 -> 5.7
UE3000  Duraflame        sun4u   5.5.1 -> 5.7
UE4000  Campfire         sun4u   5.5.1 -> 5.7
UE5000  Camfire rack     sun4u   5.5.1 -> 5.7
UE6000  Sunfire          sun4u   5.5.1 -> 5.7
UE10000 Starfire         sun4u1  5.5.1 -> 5.7
Ultra5                   sun4u   5.5.1 H/W 11/97, 5.6 H/W 3/98, 5.7
Ultra10                  sun4u   5.5.1 H/W 11/97, 5.6 H/W 3/98, 5.7
Ultra30                  sun4u   5.5.1 H/W 4/97 -> 5.7
Ultra60                  sun4u   5.5.1 H/W 11/97, 5.6 H/W 3/98, 5.7
UE250                    sun4u   5.5.1 H/W 11/97 (see FE Hbk), 5.6 H/W 5/98, 5.7
UE450                    sun4u   5.5.1 H/W 4/97 -> 5.7
Ultra450                 sun4u   5.5.1 H/W 11/97 -> 5.7
UE3500                   sun4u   5.5.1 H/W 11/97, 5.6 H/W 3/98, 5.7
UE4500                   sun4u   5.5.1 H/W 11/97, 5.6 H/W 3/98, 5.7
UE5500                   sun4u   5.5.1 H/W 11/97, 5.6 H/W 3/98, 5.7
UE6500                   sun4u   5.5.1 H/W 11/97, 5.6 H/W 3/98, 5.7
* OS 버젼 "4.1.3_U1 Version A"는 "4.1.3"과 "4.1.3C"를 통합한 것이며, "4.1.3_U1 Version B"
  는 SuperSparc module version 3.5 이상의 시스템을 지원하기 위한 것이다.
** 4.1.3C는 4/15와 4/30 만을 지원한다.
*** Solaris와 SunOS 버젼의 상관관계는 아래와 같다.
    Solaris 1.0    =  SunOS 4.1.1
    Solaris 1.0.1  =  SunOS 4.1.2
    Solaris 1.1    =  SunOS 4.1.3
    Solaris 1.1.1A =  SunOS 4.1.3_U1 Version A*
    Solaris 1.1.1B =  SunOS 4.1.3_U1 Version B
    Solaris 1.1.2  =  SunOS 4.1.4
    Solaris 2.0    =  SunOS 5.0
    Solaris 2.1    =  SunOS 5.1
    Solaris 2.2    =  SunOS 5.2
    Solaris 2.3    =  SunOS 5.3
    Solaris 2.3.2  =  SunOS 5.3 Edition II
    Solaris 2.4    =  SunOS 5.4
    Solaris 2.5    =  SunOS 5.5
    Solaris 2.5.1  =  SunOS 5.5.1
    Solaris 2.6    =  SunOS 5.6
    Solaris 7      =  SunOS 5.7

 

swapfile 추가하기

1. "df -k" 명령을 사용하여 추가하고 싶은 swap file 크기 만큼의 free space를 가지고
   있는 file system이 있는지 확인한다.
              % df -k
                  파일시스템           K바이트    사용    가용   용량    설치지점
               /dev/dsk/c0t0d0s0     962582  779074   87258    90%    /
               /proc                      0       0       0     0%    /proc
               fd                         0       0       0     0%    /dev/fd
               /dev/dsk/c0t0d0s3     865774  731198   48006    94%    /opt
               swap                   67664    8408   59256    13%    /tmp
               /dev/dsk/c0t1d0s3    8316189  933423 6551156    13%    /doc
               /dev/dsk/c0t2d0s3    8316189 2529292 4955287    34%    /export
2. 위의 결과에 따라 /export file system에 50M의 swap file을 추가 한다면,
   root 로 login하여 아래와 같이 한다.
              # cd /export
              # /usr/sbin/mkfile 50m new-swap-file
                                     ^^^^^^^^^^^^^^ -> 새로운 swap file의 이름
              # /etc/swap -a 
3. 위와 같이 한후 "swap -l" 명령으로 새로 만든 swap file이 추가되었는지 확인한다.
               # swap -l
               swapfile             dev  swaplo blocks   free
               /dev/dsk/c0t0d0s1   32,1      16 410384 371216
               /export/new-swap-file  -       16 102384 102384
4. 새로 추가한 swap file이 시스템 rebooting 후에도 사용되게 하려면 아래와 같은  
   내용을 /etc/vfstab에 추가한다.
              # vi /etc/vfstab
                /export/new-swap-file    -               -    swap    -    no    -
 

floppy diskette을 UNIX format하여 mount 하는 방법

1. floppy diskette을 drive에 넣고 아래와 같이 fdformat 명령을 실행한다.
   # fdformat -U -b "label-name"
   Formatting 1.44 MB in /vol/dev/rdiskette0/no_name
   Press return to start formatting floppy.
   ..................................................................
   #
   위의 명령중 각 option 의 내용은 아래와 같다.
               -U : floppy diskette이 이미 mount 된 경우라도 umount하여 format한다.
               -b : diskette의 label 이름을 지정하기 위한 option이다
               "label-name" : diskette에 지정할 label 이름이다.
                              이 이름은 floopy diskette 을 mount하였을때 생기는 실제
                              mount point(/floppy/"label-name")의 이름이 된다. 
2. format 이 정상적으로 끝나면 "newfs" 명령을 실행하여 filesystem을 만든다.
   # newfs /dev/rdiskette0
   만약 위의 명령을 실행했을때 아래와 같이 error message가 발생하면 volume manager
   daemon인 "vold" 를 종료시킨 후 다시 newfs 명령을 실행한다.
              # newfs /dev/rdiskette0
                  /dev/rdiskette0: Device busy
              # ps -ef|grep vold
                root   267     1  0  11월 28 ?        0:02 /usr/sbin/vold
                      ^^^^^
                      vold process id
              # kill 267
              # newfs /dev/rdiskette0
                  newfs: construct a new file system /dev/rdiskette0: (y/n)?
              위와 같이 new file system을 만들것인지 물어보면 "y"와 "retunrn" key를 친다.
3. newfs가 정상적으로 끝나면 "vold" process가 실행중인지 확인한 후, 실행중이 
   아니면 vold를 실행한다.
   # ps -ef|grep vold
    root  8321     1  1 17:26:20 ?        0:00 /usr/sbin/vold 
   위와 같이 결과가 나오지 않으면 아래와 같이 명령을 실행한다.
   # /etc/init.d/volmgt start
   volume management starting.
4. "volcheck" 명령을 실행하여 floppy diskette을 mount한후 "df" 명령으로 mount가
   되었는지 확인한다.
   # volcheck
   # df -k
   파일시스템           K바이트    사용    가용   용량    설치지점
  /dev/dsk/c0t0d0s0    1813958  696114 1063426    40%    /
  /proc                      0       0       0     0%    /proc
  fd                         0       0       0     0%    /dev/fd
  /vol/dev/diskette0/"label-name"
                        1263       9    1128     1%    /floppy/"label-name"
  위의 결과중 "label-name"은 diskette을 format 할때(fdformat) 지정한 label name 이다.
 

Power Manager

Solaris 2.6에서는 "powerd" daemon이 실행되어 일정 시간동안 작업을 하지 않으면
시스템이 자동 down되도록 지정할 수 있다. 이 Power Manager는 OS를 설치하는 과정
에서 enable/disable 할수 있으며, OS를 설치 한 후에도 아래의 관련 화일들을 이용
하여 구동할 수 있다.
1. Starting Script
   powerd daemon은 시스템이 booting되는 과정에서 /etc/rc2.d/S85power 스크립트가
   실행되면서 pmconfig 명령에 의해 구동된다.
   Power Manager 기능을 사용하지 않으려면 /etc/rc2.d/S85power 화일을 다른 이름
   의 화일로 move 시킨다.
2. Configuration File
   Power Management를 위한 configuration 화일은 /etc/power.conf 이며 pmconfig 
   명령에 의해 참조 된다.
 System down에 관한 사항은 아래와 같이 지정할 수 있다.   
   #Auto-Shutdown          Idle(min)       Start/Finish(hh:mm)     Behavior
   autoshutdown            30              9:00 9:00               shutdown
   위와 같이 지정하면 30분 동안 시스템이 사용되지 않으면 시스템이 down 된다.
   powerd daemon이 구동중이라 하더라도 시스템이 down되지 않게 power.conf 화일에
   지정하려면 아래와 같이 4번째 항목에 "noshutdown" 으로 지정한다.
   #Auto-Shutdown          Idle(min)       Start/Finish(hh:mm)     Behavior
   autoshutdown            30              9:00 9:00               noshutdown   

 

한글 사용과 관련된 환경 설정

한글 사용을 위해 지정하여야할 환경변수와 관련 화일들은 아래와 같다.
   1. /etc/default/init : 시스템에서 사용되는 Language를 아래와 같이 지정한다
               LANG=ko ;한글과 영문을 사용하는 경우
               LANG=C               ;영문만 사용하는 경우
   2. .cshrc, .profile : 각 user 별로 사용할 Language를 정의 하고, terminal 환경
                         을 지정한다.
               - csh을 사용하는 경우 .cshrc 화일에 아래와 같이 정의
                 setenv LANG ko
 stty cs8 -istrip -parenb
               - sh 또는 ksh을 사용하는 경우 .profile 화일에 아래와 같이 정의
                 LANG=ko
               export
               stty cs8 -istrip -parenb
   3. 환경 설정 확인
      % env | grep LANG
      LANG=ko
      % /bin/stty -a|grep cs8
      -parenb -parodd cs8 -cstopb -hupcl cread -clocal -loblk -crtscts
                     ^^^^^
      % /bin/stty -a|grep istrip
      -ignbrk brkint ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -iuclc 
                                           ^^^^^^^ 

 

cdrom mount 하기

cdrom을 driver에 삽입하면 Volume Management Daemon인 "vold" process에 의해
cdrom이 자동 mount 되지만, vold process가 운영 중이 아니거나 다른 이유로
인하여 cdrom이 자동 mount 되지 않으면 아래의 명령으로 mount 한다.
1. vold daemon이 운영중인 경우
   "volcheck"  명령을 실행하여 vold daemon이 cdrom을 mount 하도록 한 후 df 명령
   으로 cdrom이 mount 되었는지 확인한다.
              % /bin/volcheck
        % df -k 
2. volcheck 명령으로 mount가 되지 않는경우
   아래와 같이 "mount" 명령을 사용한다.
              # /etc/mount -F hsfs -o ro /dev/dsk/c0t6d0s0 /cdrom
   CD Driver는 기본적으로 /dev/dsk/c0t6d0s0 device를 사용한다.

 

Solaris 7에서 32/64bit kernel 지정

Solaris 7에서 kernel mode를 32bit 또는 64bit로 지정하기 위해서는 아래와 같이 
boot.conf 화일을 수정한다. 
1. 32bit로 지정하기
   Solaris 2.7에서는 기본적으로 32bit kernel로 지정되어 있고, 이를 확인하기 위
   해서는 /platform/sun4u/boot.conf 화일이 아래와 같이 지정되어 있는지 점검한 
   후 만약 다르게 지정되어 있으면 아래와 같이 수정후 시스템을 rebooting 한다.
               # vi /platform/sun4u/boot.conf
          #ALLOW_64BIT_KERNEL_ON_UltraSPARC_1_CPU=true
2. 64bit로 지정하기
   /platform/sun4u/boot.conf 화일을 아래와 같이 변경한 후 시스템을 rebooting한다.
               # vi /platform/sun4u/boot.conf
          ALLOW_64BIT_KERNEL_ON_UltraSPARC_1_CPU=true
               # reboot

 

Solaris 7(2.7)을 설치하기 위해 필요한 disk space

Solaris 7(2.7)은 설치시 kernel mode를 64bit로 사용할수 있는 library를 선택적으로 
설치할수 있기 때문에 32bit mode와 64bit mode에 따른 각각의 필요한 disk space는 
아래와 같다. 
   - Entire Distribution +OEM으로 설치시 : 32bit - 706MB
                                           64bit - 814MB
   - Entire Distribution으로 설치시      : 32bit - 697MB
                                           64bit - 805MB
   - Developer System Support으로 설치시 : 32bit - 617MB
                                           64bit - 738MB
   - End User System Support으로 설치시  : 32bit - 361MB
                                           64bit - 455MB

Root Password 복구

root password를 잊어버려 root로 login이 않되는 경우에는 OS CD를 사용하여
아래와 같이 복구를 할 수 있다. 만약 OS CD를 갖고있지 않다면 복구할 방법이
없다.
1. 시스템을 down 시키고 OS CD를 CD-ROM drive에 넣는다.
   root로 login을 할수 없으므로 시스템을 재부팅 시키기 위해서는 keyboard에서
   "stop" key와 "a" key를 동시에 눌러서 시스템을 PROM mode(ok prompt 상태)
   로 전환한다
2. 아래와 같이 CDROM 을 이용하여 single-user mode로 부팅한다
   ok  boot cdrom -sw
3. Bourne shell prompt(#)가 나타나면, /로 사용하던 disk device를 /a로 mount
   한다. /로 사용하던 disk device가 /dev/dsk/c0t0d0s0인 경우 아래와 같이 한다. 
   # fsck -y /dev/rdsk/c0t0d0s0
   # mount -F ufs -o rw /dev/dsk/c0t0d0s0 /a
4. 위와 같이 하면 기존에 /etc directory에 있던 shadow 화일이 /a/etc/shadow로
   존재하게 되며,  이 화일을 vi로 열어서 root에 정의되어 있는 password부분을
   지운다.
               # vi /a/etc/shadow
               root:vBrrOh8AIqYV6:6445::::::
             ^^^^^^^^^^^^^ 이 부분을 지운다
        변경후
               # cat /a/etc/shadow
               root::6445::::::
5. 위와 같이 한후 시스템을 재부팅 하면  root로 password 없이 login가능하다.
 

PCI bases system 에서의 Parallel Printer port

1. PCI based system들(현재 Ultra 30, 450, 5, 10, 60)의 Parallel port는 
   이전의 기계의 /dev/bpp0 대신에 /dev/ecpp0를 사용한다. 
2. 또한 ecpp driver patch를 인스톨 하여야 한다.
(104605 for 2.5.1 and 105741 for 2.6)
 

Solaris 2.6의 인스톨

1. 인스톨 방법 
               Solaris 2.6의 인스톨에는 다음과 같은 방법이 있다.
               1) Solaris Web Start
               2) 대화식 인스톨 프로그램을 사용한 신규 인스톨
               3) 대화식 인스톨 프로그램에 따른 업그래이드 인스톨
               4) 대화식 인스톨 프로그램을 사용한 네트워크 인스톨
               5) Custom Jumpstart
               6) Jumpstart
2. Solaris Web Start 
               Solaris 2.6부터 서포트되는 새로운 인스톨 유틸리티 이다.
               유저 인터페이스에 Sun의 Web 브라우저인 HotJava를 사용하고 있는 것이
               특징으로 Solaris 2.6을 신규로 인스톨 하는 경우 더욱 간단한 방법 이다.
               이것을 사용 하여 서버 패키지에 있는 언-번들 소프트웨어와 Answer Book도
               동시에 인스톨이 가능하다.
               Java 대응의 Web 브라우저를 사용하여 로컬에 콘솔을 가지고 있지 않은
               서버의 인스톨을 네트워크 상의 별개의 머신으로 부터 인스톨도 가능 하다.
3. 대화식 신규 인스톨
               종래에 사용한 일반적인 Solaris 2.x의 인스톨 방법이다.
               Solaris 2.6에도 서포트 하고 있는 윈도우 베이스 인스톨 작업이다.
               인스톨 시에 시스템 디스크 이외의 디스크를 설정이 가능하다.
4. 대화식 업-그레이드 인스톨
               Solaris Web Start가 신규의 인스톨에 대응 하고 있지 않은 것에 대해
               대화식 인스톨 프로그램(Interactive Installation Program)은 
               업-그레이드 인스톨에도 대응 하고 있다.
               Solaris 2.4이후의 OS가 인스톨 되어 있고 모든 사용 환경이 설정 되어 있는
               시스템에 대하여 업-그레이드가 가능 하다.
               업-그레이드 인스톨에는 다음과 같은 처리가 가능 하다.
               1) 업-그레이드의 대상의 디스크(시스템 디스크)를 지시
                  업-그레이드 프로그램은 그 디스크의 화일 시스템에 있는 기존 시스템의
                  각종 설정 정보를 보존 한다.
               2) 기존의 패키지의 삭제
               3) 기존의 패치의 삭제
               4) 필요한 경우 디스크 영역의 재배치
                  경우에 따라 일시적으로 백업 하기 위해 백업 장치가 필요
               5) 신규 패키지의 인스톨
               6) 디바이스 노드의 재작성
               7) 보존 하고 있는 내용을 새로운 시스템에 머지
               8) /var/sadm/install_data/upgrade_cleanup 스크립트의 작성
               9) 로그 화일 이름 등을 표시
               그러나 업-그레이드 인스톨에는 화일 변경의 유/무를 체크 하므로 내용을
               유지하기 위한 처리로 신규 인스톨에 비해 시간이 많이 소요 된다.
               시스템에 대한 변경이 큰 경우, 예를들면 인스톨 후에 화일 시스템의
               구성을 바꾸거나 시스템 화일의 일부를 삭제 하거나 절대 패스의 심볼릭
               링크를 변경한 경우는 정확한 업-그레이드가 가능하지 않는 경우도 있다.
               업-그레이드 프로그램이 참조하는 이하의 화일은 시스템의 상태를 정확히
               반영 하고 있지 않으면 않된다.
               /var/sadm/softinfor/INST_RELEASE
               /var/sadm/install/contents
               /var/sadm/install_data.clustertoc
               /var/sadm/install_data/CLUSTER
               업-그레이드 인스톨을 실행한 경우, 시스템에 대하여 인스톨한 내용은
               /var/sadm/system/logs/upgrade_log 화일에서 참조가 가능하다.
5. 대화식 네트워크 인스톨
               CD-ROM 드라이브를 가지고 있지 않은 시스템에서도 대화식의 인스톨 
               프로그램을 사용하여 네트워크를 경유하여 OS를 인스톨 가능하다.
               그 경우, CD-ROM 드라이브가 있는 기계 또는 Solaris 2.x의 CD-ROM의
               내용을 하드 디스크에 가지고 있는 기계를 인스톨 서버로 설정할 
               필요가 있다.
               인스톨 서버가 다른 서브 네트에 있는 경우는 같은 서브 네트 상에
               있는 기계를 부트 서버로 설정 한다. 인스톨 대상의 시스템은 네트워크를
               경위 하여 인스톨 프로그램을 로드 하여 인스톨 서버가 가지고 있는
               OS의 소프트웨어를 로컬의 디스크에 인스톨 한다.
6. Custom JumpStart
               이것은 다수의 기계에 인스톨 또는 업-그레이드 하는 경우에 유효한 
               방법 이다. 예를들면, 100대의 워크스테이션을 도입한 경우, 모든 기계에
               OS를 대화식으로 인스톨 하면 시간이 많이 걸린다. Custom JumpStart에는
               다음과 같은 환경을 응용하여 OS의 인스톨를 자동화 한다.
               우선 네트워크 상에 OS 미디어의 내용을 복사한 인스톨 서버를 준비 한다.
               다음 인스톨 대상의 기계가 인스톨 환경을 네트워크 경유하여 로드 가능한
               부트 서버로 설정을 추가 한다. 
7. JumpStart
               JumpStart도 다수의 기계를 간단히 인스톨 하기 위한 방법이다.
               Custom JumpStart와 다른 점은 JumpStart 전용의 소프트웨어가 로컬
               디스크에 인스톨 되어 있어야 하는 것과 인스톨 내용이 기계의 타입과 디스크
               용량에 따라 결정 되어 있다는 점이다. 인스톨 서버를 결정하고 네트워크에
               접속하여 전원을 켜고 호스트 이름 등의 정보를 입력하는 것만으로 간단히
               인스톨이 가능하다. 
8. 신규 인스톨을 위한 준비
               Solaris 2.x의 인스톨 작업은 간단하다. OS의 CD-ROM으로 부터 부트하여
               메세지에 따라 요구 하는 정보를 입력 한다. 그러나 용량 등의 항목에 대한
               작업이 있는 경우에 사전에 결정할 필요가 있다. 새로운 OS를 인스톨 하는
               경우에 필요한 정보에 대하여 결정 한다.
               1) 시스템 정보
               2) 시스템 타입의 결정
                  인스톨과 관계하는 OS의 구성 패턴을 "시스템 타입" 이라고 칭한다.
                  이것은 다음의 4가지의 타입이 있다.
                  * 스탠드 얼론
                  * OS 서버
                  * 디스크 레스 클라이언트
                  * AutoClient 시스템
               3) 소프트웨어 구성의 결정
                  Solaris 2.x의 소프트웨어는 Solaris 2.6의 경우에 400 이상의 패키지 모듈로
                  구성 되어 있다. 인스톨 프로그램에는 이용 모듈로 4개의 표준적인 패턴 으로
                  구성 되어 있다.
               4) 디스크 슬라이스 구성의 결정
               5) OS의 미디어와 메뉴얼
                  Solaris 2.5와 Solaris 2.5.1의 서버 미디어팩에는 CD-ROM이 OS의 코어부분 1개,CDE에 1개 등의 7개의 CD-ROM이지만, Solaris 2.6에는 OS에 CDE가 포함 되어 있다.
                  *Solaris 2.6의 경우
                  whiteeye# cd /cdrom/Solaris_2.6
                  whiteeye# ls -F
                  Docs/  Misc/  Patches/  Product/  Tools/
                  *Solaris 2.5.1의 경우
                  whiteeye# cd /cdrom
                  whiteeye# ls -F
                  .cdtoc                        add_install_client*
                  .install_config/               auto_install_sample/
                  .slicemapfile               export/
                  Copyright                rm_install_client*
                  Patches/                setup_install_server*
                  Solaris_2.5.1/
                  *Solaris 2.3의 경우
                  whiteeye# ls -F
                  Copyright                export/
                  NISPLUS.4.1.README               hsfs.mnt*
                  NISPLUS.TAR                  hsun4.o
                  Patches/                hsun4c.o
                  Solaris_2.3/                    inst.rr*
                  add_install_client*               rm_install_client*
                  archinfo/                setup_install_server*
                  auto_install_sample/
               6) OS 인스톨에 관련하는 예비정보
                  * man page
                    man install_scripts : OS의 CD-ROM에 포함되어 있는 인스톨 스크립트의 해설
                    man boot            : 부트 시퀸스의 해설
                    man monitor         : PROM 모니터 부터의 부트 방법
                    man re-preinstall   : JumpStart 소프트웨어의 로드 방법
                    man sysidtool       : 인스톨 시에 영향을 받는 화일, 필요한 정보
                    man sysidconfig     : 인스톨 시에 영향을 받는 화일, 필요한 정보
                    man sys-unconfig    : 시스템 화일을 공장 출하 상태로 되돌림
                    man kdnconfig       : x86용의 시스템 설정 초기화 코맨드
                  시스템 구성 화일과 네트워크 인터페이스 및 커널에 대하여 적절한 정보를 설정하기 위하여 내부의 sysidtool 라는 프로그램이 사용 된다. sysidtool은 새로운
시스템을 구성 할때 사용하는 다음의 5개의 프로그램 으로 SUNWadmap 패키지에
포함되어 있다.
                  * /usr/sbin/sysidnet
                    네트워크 관련 정보(호스트 이름, IP 어드레스 등)
                  * /usr/sbin/sysidnis
                    NIS, NIS+ 등의 네임 서비스 관련 정보 (도메인 이름 등)
                  * /usr/sbin/sysidsys
                    호스트, 아키텍쳐 고유의 정보
                  * /usr/sbin/sysidroot
                    root 패스워드
                  * /usr/sbin/sysidpm
                    전원 관리 기능의 설정
                  이상의 프로그래은 시스템 인스톨 시에 자동적으로 동작한다.
9. 디스크 슬라이스의 구성
               1) 소프트웨어 카티고리
                  소프트웨어 그룹(예전 버젼에는 클러스터 라고 호칭함)
                  소프트웨어의 선택을 일반화, 간단화 하기 위하여 제공 되는 소프트웨어의
                  그룹. 이하의 4가지중 패턴을 결정하여 필요한 소프트웨어 클라스와 
                  소프트웨어 패키지를 선택 한다.
                  * 전체 디스트리뷰션(ALL)
                    Solaris 2.x의 모든 패키지를 포함
                  * 개발자 시스템 서포트(Developers)
                    엔드 유저 시스템 서포트에 소프트웨어 개발에 필요한 항목을 추가
                  * 엔드 유저 시스템 서포트(End-users)
                    코어 시스템 서포트에 OpenWindows의 이용 환경을 추가
                  * 코어 시스템 서포트(Core)
                    Solaris 2.x의 부트와 실행에 필요한 소프트웨어만 포함
               2) 슬라이스 구성의 패턴
                  디스크 슬라이스의 구성을 결정하는 경우 이하의 점에 유의 한다.
                  * 1개의 슬라이스에 1개의 화일 시스템을 작성
                  * 1개의 디스크에는 8개의 까지의 슬라이스가 설정 가능
                  * 최소한 루트 화일 시스템과 스왑 용의 2개의 슬라이스가 필요
                  * 슬라이스는 복수의 디스크에 설정 가능 하지만 1개의 슬라이스를 복수의
                    디스크 디스크에 분산 시키는 것은 불가능 하다
                  * 스왑은 1개의 디스크에 집중 되는것 보다 복수의 디스크에 분산 시키는
                    분산 시키는 것이 성능향상에 유효 하다
                  슬라이스(=화일 시스템)를 나누는 단위로는 일반적으로 다음과 같은
                  화일 시스템을 사용 한다.
                  /
                    일반적으로 루트 화일 시스템 단독의 경우와, /var를 포함한 경우, /tmp를 
                    포함한 경우, /var+/tmp를 포함한 경우의 4가지의 패턴이 있다. 또 대용량의
                    백업 장치를 가진 시스템에서 관리를 간단히 하기 위하여 모든 OS의 화일
                    시스템을 / 의 이하에 배치하는 것도 가능 하다.
                  /usr
                    인스톨 하는 소프트웨어 클라스에 따라 필요한 사이즈가 변한다. 내용 중에
                    윈도우 시스템의 /usr/openwin를 포함 하는가, 별도의 슬라이스에 위치 시키
                    는가에 따라 크게 다를수 있다.
                  /var
                    유저의 관리 방침에 따른다. 별도의 파티션에 하지 않아도 운영이 가능하다
                  /export
                    OS 서버의 경우 클라이언트의 댓수, 각각의 클라이언트에 할당 하는 루트
                    화일 시스템, 스왑의 사이즈에 따라 결정 한다. /export/root, /export/swap,
                    /export/exec등으로 분할 하는 경우도 있다. 
                  /home
                    디폴트로 /home 디렉토리는 오토 마운트가 사용 하기 위하여 홈 디렉토리로
                    /export/home이 사용 된다.
                  /opt
                    패키지 구성에 따른다.
                  swap
                    Solaris 2.x의 스왑 사이즈는 실 메모리와 스왑 영역의 합계가 어플리케이션이 사용 하는 가상 메모리의 사이즈 이상으로 결정 한다. Solaris 2.6의 경우,
메모리와 스왑 영역의 합계 사이즈가 최저로 64MB, 윈도우 환경을 사용 하는 경우는 128MB 이상 으로 한다. Custom JumpStart에는 화일 시스템에 필요한 사이즈를 산출 하여 남은 영역 으로 부터 이하의 사이즈를 최대치로 스왑 영역이 확보 된다. 
                  /tmp
UNIX 화일 시스템으로 루트 화일 시스템에 포함 된다. tmpfs 타입을 지정하여
메모리 베이스의 화일 시스템 이다.(디폴트) /var/tmp 등에 심볼릭 링크 한다.
10. OS의 인스톨 방법
               1) 신규 인스톨 절차
   신규 인스톨을 하는 경우, Solaris 2.6에는 2개의 유틸리티로 부터 선택 가능하다.
                  * 윈도우 베이스의 인스톨 프로그램
                  * Solaris Web Start
                  신규 인스톨은 Solaris 2.6을 2 배속 CD-ROM 드라이브를 사용하여 SS20에
                  인스톨 하는 경우에 약 40분 정도이다. 보다 고속의 CD-ROM 드라이브나
                  네트워크 경유로 인스톨 하는 경우에는 단축이 가능하다.
                  새로운 디스크에 OS를 인스톨 하거나 이전의 OS의 정보를 사용 하지 않고
                  인스톨하는 경우 인스톨시에 "초기옵션"을 선택 한다.
               2) Solaris 2.6의 대화식 인스톨 프로그램을 사용 하는 경우
                  ok boot cdrom
               3) Solaris Web start를 사용 하는 경우
                  ok boot cdrom - browser
11. 인스톨 상태의 확인
               1) 인스톨 관련 정보를 표시하는 코맨드
                  CDE와 OpenWindows 환경에서 메뉴로 부터 "Workstation 정보"를 선택하여 GUI상에서 시스템에 관한 기본적인 정보를 확인한다. /usr/openwin/bin/wainfo 코맨드를 실행 하는 것도 가능하다.
소프트웨어의 설정에 대하여 개별적인 정보를 얻고자 하는 경우에 다음과 같은 코맨드가 이용 가능하다.
                  * HOST 이름
                              # uname -n    : whiteeye 
                              # hostname    : whiteeye
                              # showrev     : Hostname: whiteeye
                              # sysdef      : whiteeye node name (NODE)
                  * OS의 종류, 버젼
                              # uname -s    : SunOS
                              # uname -r    : 5.6
                              # uname -v    : Generic
                              # showrev     : Release:  5.6
                                               Kernel version:   SunOS 5.6 Generic August 1998
                              # sysdef      : 5.6 release (REL)
                                               SunOS system name (SYS)
                                               Generic version (VER)
                  * 파티션 구성
                              # df -k       : Filesystem kbytes used avail capacity Mounted on
                                               /dev/dsk/c0t3d0s0 38383 19392 15161 56% /
                                               ...........
                  * 패치 정보
                              # showrev -p  : Patch:  101331-03 Obsoletes:  Packages:  SUNWcsu.7
                                               11.5.0,REV=2.0.18,PATCH=35
                                               ........
                  * 로드 되어 있는 모듈
                              # sysdef      : * Loadable Objects
                                               strmod/bufmod
                                               strmod/connld
                                              ......
                  * 소프트웨어 패키지 구성
                              # pkginfo     : system      AXILvplr       Axil platform links
                                               system      AXILvplu       Axil usr/platform links
                                               ..............
                  네트워크에 관한 정보는 다음과 같은 코맨드가 이용 가능하다.
                  * IP Address, NetMask, Broadcast Address
               # ifconfig -a : inet 129.158.153.162 netmask ffffff00 broadcast 120.158.153.255
  하드웨어의 구성 요소에 관한 상세한 정보는 다음과 같은 코맨드가 이용 가능하다.
                  * 아키텍처 타입
                              # prtconf     : System Configuration: Sun Microsystems sun4m
                              # arch -k     : sun4m
                  * Workstation 모델
                              # prtconf  : SUNW,SPARCstation-5
                              # prtconf -vp : ......
                                                      model: 'SUNW,501-2572'
                                                      clock-frequency: 0510ff40
                                                      name: 'SUNW,SPARCstation-5'
                              # dmesg       : root nexus = SUNW,SPARCstation-5
                  * CPU 타입
                              # dmesg       : cpu0:  SUNW,UltraSPARC (upaid 0 impl 0x10 ver
                                                      0x22 clock 143 MHz)
                              # prtconf -vp :    ....
                                                      sparc-version: 00000008
                                                      mask_rev: 00000020
                                                      device_type: 'cpu'
                                                      name: 'FMI,MB86904'
                              # ok cpu-info : VPU FMI,MB86904 Rev. 2.0: 85Mhz
                         (EEPROM 코맨드)
                  * 메모리 용량
                              # dmesg       : mem = 32768k (0x2000000)
                              # prtconf     : Memory size: 32 Megabytes
                  * 시리얼 포트 디바이스
                              # dmesg       : zs0 at obio0: obio 0x1000000 sparc ipl 12
                                                      zs0 is /obio/zs@0,1000000
                              # sysdef      : zs, instance #0zs, instance #1
                  * 디스크
# dmesg       : sd3 at esp0: target 3 lun 0sd3 is /iommu@0,10000000/sbus@0,10001000/espdma@5,8400000/
                                                      esp@5,8800000/sd@3,0 
                              # sysdef      : sd, instance #2 (driver not attached)
                                                      sd, instance #3
                  * 프레임 버퍼
                              # prtconf     : cgsix, instance #0
                              # prtconf -F  : /iommu@f,e0000000/sbus@f,e0001000/cgsix@2,0
                              # dmesg       : cgsix0 at sbus0: SNus slot 3 00 SBus level 5 sparc ipl 9
                                                      cgsix0 is /iommu@0,10000000/sbus@0,10001000/cgsix@3,0
                                                      cgsix0: screen 1152x900, single buffered, 1M mappable, rev 11
                              # sysdef      : cgsix, instance #0
Root 디바이스와 Swap 디바이스 등의 정보는 /etc/vfstab 화일을 확인 하거나 다음의 코맨드의 이용이 가능 하다.
                  * Root 디바이스
                              # dmesg       : root on /iommu@0,10000000/sbus@0,10001000/espdma@5,8400000/
                                                      esp@5,8800000/sd@3,0:a fstype ufs
                  * Swap 디바이스
                              # dmesg       : dump on /dev/dsk/c0t3d0s1 size 131532K
                              # swap -l     : swapfile dev swaplo blocks free
                                                      /dev/dsk/c0t3d0s1 32,25 8 263080 209312
                              # sysdef      : swapfile dev swaplo blocks free
                                                      /dev/dsk/c0t3d0s1 32,25 8 263080 209312
                  * 시스템 보드 구성의 정보
                              # prtdiag(Sun4d, Sun4u 아키텍처만 가능)
               2) 시스템 화일의 설정
                  시스템의 기본적인 설정은 다음의 시스템 화일을 보면 이해할수 있다.
                  * /etc/passwd        : 등록된 유저정보       : Copy하여 사용하는 경우 root만 허용
                    /etc/shadow        : 
                  * /etc/group         : 등록된 그룹 정보      : 
                  * /etc/default/*     : 환경설정의 정보       : 유저에 대한 디폴트 환경 설정
                    /etc/skel/*        :
                  * /etc/vfstab        : 화일 시스템 구성      : 
                  * /etc/nsswitch.conf : 네임 서비스           : 서버의 서비스를 받는 경우에 클라이언트로 설정 필요
                    /etc/resolv.conf   : DNS 클라이언트의 설정 : DNS를 사용하는 경우
                    /etc/defaultdomain : NIS의 도메인 이름     : NIS를 사용하는 경우
                  * /etc/hosts         : 호스트 정보           : loghost등의 일부 변경이 필요한 경우가 있음
                  * /etc/nodename      : 노드 이름             :
                  * /etc/defaultrouter : 디톨트 라우터의 설정  : 환경에 따라 그대로 사용 가능
                  * /etc/services      : 네트워크 서비스의     : 어플리케이션에 의존
                    /etc/rpc           : 등록                  :
                  * /etc/sendmail.cf   : 메일 시스템 설정      : 그대로 사용 가능
                    /etc/aliases       :                       :
                  * /etc/rc?.d/*       : Daemon의 추가, 설정   : 
                    /etc/init.d/*      :                       :
                  * /etc/system        : OS의 parameter        :
               3) 로그 화일 : /var/sadm/system/logs/install_log
                  OS의 인스톨 개시부터의 로그 정보가 화일에 기록 되어 있다. 이 화일에는 이하의 내용이 있다.
                  * 화일 시스템의 구성
                  * 인스톨된 패키지의 종류
                  * 인스톨된 소프트웨어의 총용량
                  * 부트 디바이스
               4) 로그 화일 : /var/sadm/system/logs/sysidtool.log
                  OS를 인스톨할 때에 새로운 시스템에 관한 몇가지의 정보를 입력 한다. 이것은 sysidtool라고 하는 일련의 프로그램에 따라 자동적으로 처리 된다. sysidtool의 로그 정보가 화일에 기록 된다.
                  * Ethernet의 인터페이스 이름
                  * 인스톨시에 설정한 IP 어드레스
                  * 인스톨시에 설정한 Netmask의 값
                  * 타임존
                  * 선택한 네임 서비스의 종류
               5) 소프트웨어의 로그 화일 : /var/tmp/*log*
                  소프트웨어 중에 /var/tmp 디렉토리에 독자의 로그 화일을 작성하는 것이 있다.
  * AdminSuite_install_log
                  * SunSoft_CDE1.0.1_pkgadd.log.날짜
                  이들의 인스톨 로그 화일은 기본적으로 인스톨 과정에서 발생하는 문제를 기록하기 위해서 작성 된다.
 

acct(accounting) 설정하기

1. rc 화일을 지정한다.
               # ln /etc/init.d/acct /etc/rc2.d/S22acct
               # ln /etc/init.d/acct /etc/rc0.d/K22acct
2. cron 작업을 등록한다.
    2.1 /var/spool/cron/crontab/adm 화일에 다음과 같은 내용을 추가한다.
                              0 * * * * /usr/lib/acct/ckpacct
                              0 1 * * 1-6 /usr/lib/acct/dodisk
                              0 2 * * 1-6 /usr/lib/acct/runacct 2> /var/adm/acct/nite/fd2log
                              15 5 1 * * /usr/lib/acct/monacct
               시간들은 사용자의 목적에 맞게 변경할 수 있다.
    2.2 /var/spool/cron/crontab/root 화일에 다음과 같은 내용을 추가한다.
3. 시스템을 reboot하면 변경사항이 적용된다.
4. 시스템을 reboot하지 않고 accounting을 적용하려면 2번 cron 작업을
               # env EDITOR=vi crontab -e adm을 실행하여 등록하고, 
               # /usr/lib/acct/startup를 실행시킨다.
5. 실행된 프로세스들의 정보는 다음과 같이 간단히 알아 볼 수 있다.
               # lastcomm
               ls          root     pts/18         0.01 secs Mon Mar 27 17:25
               ls          root     pts/18         0.01 secs Mon Mar 27 17:25
               ls          root     pts/18         0.02 secs Mon Mar 27 17:25
               startup     root     pts/18         0.01 secs Mon Mar 27 17:25
               rm          root     pts/18         0.01 secs Mon Mar 27 17:25
6. acct를 종료하는 방법은 다음과 같다.
               # /usr/lib/acct/shutacct
7. 참고 문헌
               시스템에 설치된 메뉴얼 페이지를 참고한다.
               acct(1M), acctsh(1M), lastcomm(1)
               예제)
                              man acct

 

timezone 화일 변경 및 설정하기

1. timezone 이란 ?
    그리니치 표준시간(GMT)를 기준으로 각 지역이 위치한 경도에 따라 시간의 차이가
    있다. 이러한 동일한 시간대를 지역을 동일한 timezone을 가진다고 말한다.
    timezone에 따라 변동이 있는 시간대를 컴퓨터상에서 보정하기 위하여 컴퓨터가
    사용되는 지역에 따라 timezone정보를 컴퓨터에 지정하도록 되어있다.
    우리나라의 전지역은 하나의 시간대를 사용하며, ROK라는 timezone을 가진다.
    시스템이 제공하는 clock을 GMT 시간으로 내부적으로 사용되고, 외부에 시간이 
    나타날 때에는 환경변수 TZ에 설정된 timezone정보에 따라 GMT 표준시간이
    가공되어 지역에 맞는 시간이 나타난다.
    시간에 관련된 모든 명령어는 TZ 환경변수에 영향을 받는다.
    date 명령어를 시용하여 간단하게 테스트하면, timezone(TZ)에 따라
    시간이 다르게 나타나는 것을 알 수 있다.
               # date           
               1998년 11월  6일 금요일 오전 11시 19분 15초
               # env TZ=Hongkong date
               1998년 11월  6일 금요일 오전 10시 19분 15초
               # env TZ=Turkey date;date
               1998년 11월  6일 금요일 오전 04시 19분 15초
    위에서 보는바와 같이 홍콩은 우리나라보다 1 시간 늦고, 터키는 7 시간 늦다.
2. zone 화일
    zone화일은 /usr/share/lib/zoneinfo 디렉토리에 존재한다. 이 디렉토리에는
    테스트 화일로 된 timezone 정보화일과 컴파일된 timezone 정보화일이 있다.
    컴파일된 timezone 정보화일이 TZ 환경변수에 설정될 수 있다.
    우리나라의 timezone은 ROK이다.
               # echo $TZ
               ROK
    asia라는 화일에 ROK에 대한 timezone 정보가 들어 있다.
-----------------------------------------------------------------------
               # Rule NAME FROM  TO    TYPE   IN     ON      AT     SAVE   LETTER/S
               Rule   ROK  1960  only   -     May    15      0:00   1:00   D
               Rule   ROK  1960  only   -     Sep    13      0:00   0      S
               Rule   ROK  1987  1988   -     Jan    Sun<=14 0:00   1:00   D
               Rule   ROK  1987  1988   -     Oct    Sun<=14 0:00   0      S
               # Zone  NAME       GMTOFF  RULES   FORMAT  [UNTIL]
               Zone    Asia/Seoul 8:27:52 -       LMT     1890
                                          8:30    -       KST     1904 Dec
                                          9:00    -       KST     1928
                                          8:30    -       KST     1932
                                          9:00    -       KST     1954 Mar 21
                                          8:00    ROK     K%sT    1961 Aug 10
                                          8:30    -       KST     1968 Oct
                                          9:00    ROK     K%sT
               -----------------------------------------------------------------------
    설명:
               Rule   ROK  1960  only   -     May    15      0:00   1:00   D
               Rule   ROK  1960  only   -     Sep    13      0:00   0      S
               Rule   ROK  1987  1988   -     May    Sun<=14 0:00   1:00   D
               Rule   ROK  1987  1988   -     Oct    Sun<=14 0:00   0      S
    위의 Rule을 보면 1960에 5월 15일 부터 9월 13일까지 summer time을 적용했었고
    1987에서 1988년 2년간 summer time을 적용하였다는 내용을 알 수 있다.
    알 수 있다.  만일 계속 summer time을 사용하려면, TO 필드에 max라고 하면된다.
               Rule   ROK  1987  1988   -     Jan    Sun<=14 0:00   1:00   D
               Rule   ROK  1987  1988   -     Oct    Sun<=14 0:00   0      S
    각 필드에 대한 자세한 내용은 zic 메뉴얼 페이지를 참조하십시오.
               # man zic
3. timezone에서 summer time설정하는 법.
-----------------------------------------------------------------------
# Rule NAME FROM  TO    TYPE   IN     ON      AT     SAVE   LETTER/S
               Rule   ROK  1960  only   -     May    15      0:00   1:00   D
               Rule   ROK  1960  only   -     Sep    13      0:00   0      S
               Rule   ROK  1987  max    -     May    Sun<=14 0:00   1:00   D
               Rule   ROK  1987  max    -     Oct    Sun<=14 0:00   0      S
               # Zone  NAME       GMTOFF  RULES   FORMAT  [UNTIL]
               Zone    Seoul 8:27:52 -       LMT     1890
                                          8:30    -       KST     1904 Dec
                                          9:00    -       KST     1928
                                          8:30    -       KST     1932
                                          9:00    -       KST     1954 Mar 21
                                          8:00    ROK     K%sT    1961 Aug 10
                                          8:30    -       KST     1968 Oct
                                          9:00    ROK     K%sT
               -----------------------------------------------------------------------
    위와 같이 zoneinfo 내용을 test라는 화일로 만들어 다음의 명령어를 수행한다.
    변경된 timezone 화일이 의미하는 것은 1987년부터 매년 5월 14일 내의 최후
    일요일에 summer time을 적용하고 10월 14일 내의 최후의 일요일에 해제한다.
               # zic test
    이명령어가 실행되면 /usr/share/lib/zoneinfo 디렉토리 밑에 Seoul이라는
    컴파일된 timezone 정보화일이 생성된다.
    환경변수 TZ에 Seoul이라는 값을 설정하여, summer time 기간중에 
    date 명령어를 수행하면 1 시간 빨리 설정되어 있음을 알수 있다.
               # date
               1998년 7월  6일 월요일 오후 03시 19분 39초
               # env TZ=Seoul date
               1998년 7월  6일 월요일 오후 04시 19분 39초
4. 참고 문헌
    시스템에 설치된 메뉴얼 페이지를 참고한다.
               zic(1M), zdump(1M), ctime(3C)
               /usr/share/lib/zoneinfo/*               (timezone database)

 

일반적인 커널 파라메터 및 수정방법

1. 최대 사용자수 지정하기 (maxusers)
    최대 사용자수는 시스템에 설치된 메모리의 양에 따라 자동적으로 적절한 값이
    설정된다. 특별한 경우가 아니면 이 파라메터를 변경하지 않는 것이 바람직하다.
    또한, 이 파라메터를 기준으로 다음과 같은 파라메터들이 자동적으로 설정된다.
               max_nprocs   Maximum number of processes (default = 10 + 16 * maxusers)
               ncallout     Number of callout buffers (default = 16 + max_nprocs)
               ufs_ninode   Maximum number of inodes.
                                        (default = max_nprocs + 16 + maxusers + 64)
               ncsize       Number of dnlc entries.
                                        (default = max_procs + 16 + maxusers + 64)
    명시적으로 최대 사용자수를 지정하려면, /etc/system 화일에 다음과 같은
    라인을 추가하고, 시스템을 리부팅한다.
               set maxusers=100
2. 최대 프로세스 갯수 지정하기 (max_nprocs)
    시스템이 허용하는 최대 프로세스 수는 최대 사용자 수에 비례하여 자동으로
    설정된다. 그러나 그 갯수가 너무 적거나 많으면 사용자가 명시적으로 지정할
    수 있다.  최대 프로세스 수를 10000으로 지정하려면, /etc/system 화일에
    다음과 같은 라인을 추가하고, 리부팅한다.
               set max_nprocs=10000
3. 가상단말기 갯수 지정하기 (pt_cnt)
    시스템에 사용되는 가상단말기 갯수는 디폴트로 48개가 설정되어 있다.
    가상단말기는 /dev/pts/0, ..., /dev/pts/47로 되어 있다. 이 가상단말기는
    telnet이나 rlogin을 통해서 시스템으로 들어올 경우에 하나씩 사용된다.
    X-window에서 cmdtool이나 shelltool, dtterm을 실행하여도 하나씩 사용된다.
    만일, 가상단말기의 갯수를 128개로 늘이려면, /etc/system 화일에 다음과 같은
    라인을 추가하고, 리부팅한다.
               set pt_cnt=128
               set npty=128
    ** 시스템을 리부팅할 때에는 반드시 reconfiguration 모드로 리부팅하여야 한다.
    예제) command:
                              # reboot -- -r
                 PROM:
                              OK boot -r
4. 최대 화일 디스크립트 갯수 지정하기 (rlim_fd_cur)
    하나의 프로세스가 동시에 open할 수 있는 최대 화일의 개수는 디폴트로
    64개이고, 1024개까지 화일의 갯수를 늘릴 수 있다.
    shell에서 최대화일의 갯수를 512개로 늘이려면, 다음과 같이 지정한다.
               csh 경우)
                              limit descriptors 512
               sh, ksh 경우)
                              ulimit -n 512
    shell에서 한번 지정되면 이후에 실행되는 모든 명령어에 이 영향이 반영된다.
    만일, 디폴트 값을 128로 하고 최대 화일의 갯수를 1500까지 늘릴 수 있도록
    하려면, /etc/system 화일에 다음과 같은 내용을 추가하고, 시스템을 리부팅한다.
               set rlim_fd_max=1500
               set rlim_fd_cur=128
5. 최대 UFS inode수 지정하기 (ufs_ninode)
    시스템에서 화일을 open하면 하나의 화일에 대하여 하나의 ufs_niode를 가지게
    된다. 명시적으로 이 값을 지정하려면, /etc/system 화일에 다음과 같은 내용을
    추가하고, 시스템을 리부팅한다.
               set ufs_ninode=10000

 

shared memory parameter 설정하기

1. shared memory parameter 설명
 Name               Default                           Max                 Description
 ------   ---------------               --------------- -------------------------------------
 shmmax               1048576 (1Meg)               4294967295               shared memory segment의 최대 크기를
                                       (4GB)                             지정한다. 이 크기는 shmget(2) 시스템
                                       2.5.1 or               콜에서 요구할 수 있는 최대 크기이다.
                                       higher                             커널이 이 값 만큼의 메로리를 미리
                                                               할당하여 별도로 관리하는 것이 아니고      
                                       2147483647               필요할 때마다 할당 받아 사용한다. 그래서
                                       (2GB)                             이 값을 크게 지정하여도 시스템이 나쁜
                                       2.5 or lower               영향을 주지는 않는다.
 shmmin  1                      4294967295               shared memory segment의 최소 크기를
                                       (4GB)                             지정한다. 이 값은 변경할 필요는 없다.
                                       2.5.1 or            
                                       higher                       
                                       2147483647       
                                       2.5 or lower       
 shmseg 6                      32767                              하나의 프로세서에 할당될 수 있는 최대
                                       (32k)                shared memory segment의 갯수를 지정한다.
                                                               이 값은 segment가 할당될 때, segment의 갯수를 조사하는데 사용된다. 그러므로 이 값에 의하여 미리 할당되는 자원은
없다. 만일 이 값이 34K를 넘어서면, 주의 메세지를 출력하고, 그 값은 32k로               설정한다.
 shmmni  100                  2147483647               시스템에 가용한 shared memory
                                       (2GB)                             identifier의 최대 갯수를 지정한다. 
                                                               모든 shared memory segment는
                                                               이 identifier에 의해 관리되며, shmget(2)
                                                               시스템 콜의 리턴값이다.
                                                               identifier 1개당 약 120 바이트 정도의
                                                               메모리가 미리 할당된다.
                                                               Solaris 2.5 이상 버전에서는
                                                               메모리의 1/4 이상이 이 identifier에
                                                               할당되지 못하도록 하며, 그 이상이
                                                               할당되면 경고 메세지를 출력하고, 
shared memory module를 load하지 않는다.
2. shared memory parameter 설정하기
    shared memory parameter를 시스템에 설정하려면 /etc/system 화일에 다음과
    같은 라인을 추가하고, 시스템을 rebooting하면 변경사항이 반영된다.
                 set shmsys:shminfo_variable = value
    여기서 'variable'은 위에서 설명한 Name 필드에 있는 값이다.
    예를 들면,
               set shmsys:shminfo_shmmni = 150
    shmmni의 값을 150으로 변경한다.
3. shared memory parameter 값을 조사하기
    시스템에 설정되어 있는 shared memory parameter의 값은 'sysdef' 명령어로
    확인할 수 있다.
               $ sysdef
               .... Skip ....
               *
               * IPC Shared Memory
               *
               1048576            max shared memory segment size (SHMMAX)
                    1              min shared memory segment size (SHMMIN)
                  100               shared memory identifiers (SHMMNI)
                    6              max attached shm segments per process (SHMSEG)
               .... Skip ....
    위에 있는 값들이 0로 보일 수 도 있다. 이 경우는 shared memory module이
    커널에 올라와 있지 않기 때문이다. Solaris 2.x에서는 dynamic kernel을
    사용한다. 이는 kernel module들이 사용될 때, kernel에 결합되고, 사용하지
    않으면 커널에서 제거된다는 것을 의미한다. 강제적으로 shared memory module을
    커널에 load하려면 다음과 같이 'modload' 명령어를 사용할 수 있다.
               # modload -p sys/shmsys
    그리고 다시 sysdef 명령어는 사용하면, shared memory parameter를 확인할
    수 있다.
4. 참고 문헌
    시스템에 설치된 메뉴얼 페이지를 참고한다.
    shmget(2), shmop(2), shmat(2), shmdt(2)
    예제)
               man shmget

 

semaphore parameter 설정하기

1. semaphore parameter 개략 설명
 Name    Default     Max                 Brief Description
 ------  ------- -------------- -------------------------------------
 semmap          10               2147483647               semaphore map에 있는 entry의 갯수
 semmni   10               65535                              semaphore set (identifier)의 갯수
 semmns          60               2147483647               시스템에 있는 semaphore의 갯수
                              65535 (usage)
 semmnu          30               2147483647               시스템이 있는 "undo" structure의 갯수
 semmsl   25               2147483647               하나의 semaphore ID에 있는 semaphore 최대 갯수
                              65535 (usage)
 semopm          10               2147483647               하나의 semaphore call당 최대 operation 최대 갯수
 semume          10               2147483647               하나의 프로세서당 "undo" entry 최대 갯수
 semusz  96               *see below*               "undo" structured의 크기(byte)
 semvmx  32767               2147483647               semaphore 최대값
                              65535 (usage)
 semaem          16384               2147483647               exit시에 보정될 최대값
                              32767 (usage)
2. semaphore parameter 세부 설명
    semmap
               semaphore resource map의 크기를 정의한다. 이 map에 있는 하나의 entry는
               연속적인 가용한 semaphore를 차지한다.
               semget(2) 시스템 콜에 의해 얻어지는 semaphore set을 위한 공간이다.
    semmni
               시스템에서 사용할 수 있는 최대 semaphore sets (identifiers)를 정의한다.
               시스템에 있는 모든 semaphore set은 유일한 ID와 제어구조를 갖는다.
               각 semaphore set에 대하여 84 바이트의 커널 메모리가 미리 할당된다.
               semmni의 값을 65535 보다 크게 지정하면, 시스템은 경고 메세지를 출력하고
               이 값은 65535로 설정한다.
    semmns
               시스템에 있는 semaphore의 갯수를 정의한다. 각 semaphore에 대하여
               16 바이트의 커널 메모리가 미리 할당된다.
    semmnu
               시스템이 있는 semaphore undo structure를 정의한다. 각 undo structure에
               대하여 semusz 크기 만큼의 커널 메모리가 미리 할당된다. 
               하나의 프로세스에 대하여 undo 정보를 기록하기 위하여 하나의 undo
               structure가 필요하다.
    semmsl
               하나의 semaphore ID에 대하여 생성될 수 있는 semaphore의 갯수를 제한한다.
               논리적으로 semmsl는 semmns의 값과 같거나 적어야 한다.
               만일 이 값을 너무 크게 잡으면, 몇개의 semaphore ID가 시스템 전체에
               있는 semaphore를 독식할 수 있다.
    semopm
               하나의 semop(2) 시스템 콜에서 처리할 수 있는 operation 수를 제한한다.
    semume
               하나의 프로세스가 가질 수 있는 undo record의 수를 제한한다.
    semusz
               semaphore undo structure의 크기를 정의한다. 이 값은 사용자가 변경하는
               것이 아니고, 시스템에 의해 계산된다.
                              semusz = 8 * (semume + 2)
    semvmx
               하나의 semaphore의 최대값을 제한한다. undo structure와 semaem과의 
               연관관계가 있으므로 이 값의 디폴트 32767 보다 크게 지정하지 말아야
               한다. 만일 디폴트 보다 크게하면, SEM_UNDO 기능을 사용할 수 없다.
    semaem
               adjust-on-exit undo element의 최대값을 제한한다.
3. semaphore parameter 설정하기
    semaphore parameter를 시스템에 설정하려면 /etc/system 화일에 다음과
    같은 라인을 추가하고, 시스템을 rebooting하면 변경사항이 반영된다.
                 set semsys:seminfo_variable = value
    여기서 'variable'은 위에서 설명한 Name 필드에 있는 값이다.
    예를 들면,
               set semsys:seminfo_semmap = 15
    semmap(semaphore resource map)의 값을 15으로 변경한다.
4. semaphore parameter 값을 조사하기
    시스템에 설정되어 있는 semaphore parameter의 값은 'sysdef' 명령어로
    확인할 수 있다.
               $ sysdef
               .... Skip ....
               *
               * IPC Semaphores
               *
                   10  entries in semaphore map (SEMMAP)
                   10  semaphore identifiers (SEMMNI)
                   60  semaphores in system (SEMMNS)
                   30  undo structures in system (SEMMNU)
                   25  max semaphores per id (SEMMSL)
                   10  max operations per semop call (SEMOPM)
                   10  max undo entries per process (SEMUME)
                32767  semaphore maximum value (SEMVMX)
                16384  adjust on exit max value (SEMAEM)
               .... Skip ....
    위에 있는 값들이 0로 보일 수 도 있다. 이 경우는 semaphore module이
    커널에 올라와 있지 않기 때문이다. Solaris 2.x에서는 dynamic kernel을
    사용한다. 이는 kernel module들이 사용될 때, kernel에 결합되고, 사용하지
    않으면 커널에서 제거된다는 것을 의미한다. 강제적으로 semaphore module을
    커널에 load하려면 다음과 같이 'modload'명령어를 사용할 수 있다.
               # modload -p sys/semsys
    그리고 다시 sysdef 명령어는 사용하면, semaphore parameter를 확인할
    수 있다.
5. 커널 메모리의 제약
    Solaris 2.5 이상 버전에서는 semaphore가 메모리의 1/4 이상이 할당되지
    못하도록 하며, 그 이상이 할당되면 경고 메세지를 출력하고, semaphore module을
    load하지 않는다.
6. 참고 문헌
    시스템에 설치된 메뉴얼 페이지를 참고한다.
               semget(2), semctl(2), semop(2)
               예제)
                              man semget

 

message queue parameter 설정하기

1. message queue 개략 설명
 Name    Default Max             Brief Description
 ------  ------- -------------- -------------------------------------
 msgmap               100               2147483647               메세지 map에 있는 entry 갯수
 msgmax 2048               2147483647*               메세지 최대 크기
 msgmnb               4096               2147483647*               메세지 큐의 최대 크기
 msgmni  50               2147483647               메세지 큐 identifier의 갯수
 msgssz 8               2147483647*               메세지 segment의 크기
 msgtql    40               2147483647               시스템 메세지 헤더 갯수
 msgseg 1024               32767*                             메세지 segment의 수 (MUST BE < 32768)
2. message queue 세부 설명
    msgmap
               메세지 큐 resource map의 크기를 정의한다. 이 map에 있는 하나의 entry는
               연속적인 가용한 공간를 차지한다. 이것은 msgsnd(2) 시스템 콜에 의해
               얻어지는 메세지 큐 segment를 위한 공간으로 사용된다.  
    msgmax
               하나의 메세지에 대한 크기를 제한한다. 메세지의 크기가 이 값보다 크면
               msgsnd(2) 시스템 콜은 EINVAL 오류값을 리턴한다.
               이 값은 최대 2GB까지 사용할 수 있지만 시스템의 다른 요소들이 65535로
               제한된 것이 있기 때문에 65535보다 큰 값을 사용할 경우에 예기치 못한
               결과가 발생할 수 도 있다.
    msgmnb
               하나의 메세지 큐가 수용할 수 있는 메세지의 최대 크기를 제한한다.
               이 값은 메세지 큐에 보관되어 있는 메세지들의 크기(byte)의 합계이다.
               위에 기술된 최대값은 Solaris 2.4 이상의 버전이고, 그 이전의 버전에서는
               최대값이 65535로 제한된다. 
    msgmni
               시스템에 가용한 메세지 큐 identifier의 갯수를 정의한다.
               시스템은 이 값만큼의 msgmni control structure에 해당되는 커널 메모리를
               미리 할당한다. 하나의 control structure는 144 바이트이다.
    msgtql
               시스템에서 가용한 메세지 큐 헤더를 갯수를 정의한다. 메세지 큐에 들어
               있지만 아직 읽혀지지 않은 메세지는 하나의 메세지 큐 헤더를 차지한다.
               시스템은 이 값만큼의 msgtql control structure에 해당되는 커널 메모리를
               미리 할당한다. 하나의 control structure는 12 바이트이다.
    msgssz & msgseg
               이 두개의 값에 의하여, 모든 큐에 있는 모든 메세지에 대한 가용한 전체
               바이트 수를 정의한다. 시스템은 메세지 큐들에 대하여 커널 메모리를
               미리 할당한다. 메모리의 총합은 msgssz * msgsseg 이다.
               msgssz * msgsseg의 값은 2147483647을 넘어서는 안된다.
3. message queue parameter 설정하기
    message queue parameter를 시스템에 설정하려면 /etc/system 화일에 다음과
    같은 라인을 추가하고, 시스템을 rebooting하면 변경사항이 반영된다.
                 set msgsys:msginfo_variable = value
    여기서 'variable'은 위에서 설명한 Name 필드에 있는 값이다.
    예를 들면,
               set msgsys:msginfo_msgmap = 150
    msgmap(message queue resource map)의 값을 150으로 변경한다.
4. message queue parameter 값을 조사하기
    시스템에 설정되어 있는 message queue parameter의 값은 'sysdef' 명령어로
    확인할 수 있다.
               $ sysdef
               .... Skip ....
               *
               * IPC Semaphores
               *
                  100  entries in msg map (MSGMAP)
                 2048  max message size (MSGMAX)
                 4096  max bytes on queue (MSGMNB)
                   50  message queue identifiers (MSGMNI)
                    8  message segment size (MSGSSZ)
                   40  system message headers (MSGTQL)
                 1024  message segments (MSGSEG)
               .... Skip ....
    위에 있는 값들이 0로 보일 수 도 있다. 이 경우는 message queue module이
    커널에 올라와 있지 않기 때문이다. Solaris 2.x에서는 dynamic kernel을
    사용한다. 이는 kernel module들이 사용될 때, kernel에 결합되고, 사용하지
    않으면 커널에서 제거된다는 것을 의미한다. 강제적으로 message queue
    module을 커널에 load하려면 다음과 같이 'modload'명령어를 사용할 수 있다.
               # modload -p sys/msgsys
 그리고 다시 sysdef 명령어는 사용하면, message queue parameter를 확인할 수 있다.
5. 커널 메모리의 제약
    Solaris 2.5 이상 버전에서는 message queue가 메모리의 1/4 이상이 할당되지
    못하도록 하며, 그 이상이 할당되면 경고 메세지를 출력하고, message queue
    module을 load하지 않는다.
6. 참고 문헌
    시스템에 설치된 메뉴얼 페이지를 참고한다.
    msgget(2), msgctl(2), msgop(2), msgsnd(2), msgrcv(2)
    예제)
               man msgget

 

/ 화일 시스템이 full 되었을 경우 조치 방법

/ (root) 화일시스템이 full되었을 경우에 다음에 열거한 순서대로 화일시스템을
점검한다.
1. / 화일시스템에 사용자가 임의로 만들어 준 디렉토리가 있는면 정리한다.
2. /dev 디렉토리 밑에 일반화일이 있는지 조사한다.
               # find /dev  -type f -exec ls -l {} \;
    일반화일이 있을 경우, 모두 지우면 된다. 특히 테이프에 백업을 받을 경우에
    사용자가 디바이스명을 잘못 지정하여, 테이프에 백업되지 않고 화일에
    저장하는 경우가 있다.
3. 시스템에 있는 core 화일을 제거한다.
    core 화일을 찾아 보려면 다음과 같은 명령어를 사용한다.
               # find / -name core -print         
    core 화일을 찾아서 자동으로 지우려면 다음과 같은 명령어를 실행한다.
               # find / -name core -exec rm {} \; -print
4. /var가 root 화일 시스템이 있을 경우, /var 디렉토리 밑을 조사한다.
               # du -sk /var/* | sort -nr
    이 명령어를 실행하면 /var 밑에 있는 디렉토리 별로 그 서브 디렉토리까지
포함하여 KB 단위의 크기를 출력한다. 거기에서 사이즈가 큰 디렉토리에 대하여 조사한다.
    정상적인 시스템에 주로 문제가 될 만한 디렉토리는 다음과 같다.
               /var/adm
               /var/mail
               /var/log
               /var/preserve
               /var/spool
    4.1 /var/adm
               /var/adm 디렉토리에는 시스템이 운용중이 발생하는 메세지나 기타 정보들이
               누적 보관된다. 이 디렉토리에 큰 화일이 있으면 정리한다.
                              messmages.0, messages.1, ... 
               이러한 화일이 있으면 그냥 지워도 상관없다.
               messages 화일의 크기가 너무 크면 " # cp /dev/null messages " 명령어를
               사용하여 화일 크기를 0으로 만들 수 있다. 이 화일은 시스템에서 발생되는
               메세지를 보관하는 화일이다.
               wtmp 또는 wtmpx 화일의 크기가 너무 크면 다음과 같은 명령어를 실행하여
               그 크기를 0으로 만들 수 있다. 이 화일에는 시스템에 접속한 사용자에
               대한 정보를 가지고 있는 화일이다.
                              # cp /dev/null wtmp
                              # cp /dev/null wtmpx
               만일 pacct이 있으면 그 화일의 크기를 다음과 같은 명령어를 사용하여
크기를 0으로 만들 수 있다. 이 화일은 accounting 정보를 가지고 있는 화일이다.
                              # cp /dev/null pacct
               pacct1, pacct2, ... 등등의 화일이 있으면 그냥 지우면 된다.
               그외에도 사이즈가 큰 화일을 알아서 정리한다.
    4.2 /var/mail
               /var/mail 디렉토리에는 메일 데이타가 보관되는 곳이다. 이 디렉토리에
               사이즈가 큰 화일이 있으면, 해당 사용자에게 그 메일을 정리하도록 한다.
    4.3 기타 디렉토리에 대해서도 조사하여 불필요하게 사이즈가 큰 화일 있을
        경우 알아서 정리한다. 단 화일을 지울 때, 그 화일이 어떤 화일인지
               숙지한 후에 지울 것인가 아닌가를 결정한다.
5. / 화일 시스템에 있는 1 MB 이상되는 화일을 조사하여, 화일 크기순으로
   sort하여 그 내용을 조사한다.
               # find / -mount -size +1024k -ls > /tmp/find.list
               # sort -nr +6 /tmp/find.list > /tmp/find.list.s
     find.list.s 화일에서 비정상적인 큰 화일이 있는지 조사한다.

 

백업(Backup) 방법

Solaris 2.X에서는 다음과 같은 4가지 백업이 있다.
               1. tar
               2. cpio
               3. dd
               4. ufsdump/ufsrestore
1. tar
    tar를 화일 또는 디렉토리 전체를 백업 받는데 사용된다.
    1.1 화일 시스템에서 테이프로 백업 받기
               # tar cvf /dev/rmt/0 .
    1.2 테이프에서 화일 시스템로 백업 받기
               # tar xvf /dev/rmt/0
    1.3 테이프 내용 보기
               # tar tvf /dev/rmt/0
2. cpio
               
    2.1 화일 시스템에서 테이프로 백업 받기
               # find . -print | cpio -ocvB -O /dev/rmt/0
    2.2 테이프에서 화일 시스템로 백업 받기
               # cpio -icvBmd -I /dev/rmt/0
    2.3 테이프 내용 보기
               # cpio -ict -I /dev/rmt/0
3. dd
    3.1 화일을 테이프로 백업 받기
               # dd if=file1 of=/dev/rmt/0 bs=4096k
    3.2 테이프에서 화일로 백업 받기
               # dd if=/dev/rmt/0 of=file1 bs=4096k
4. ufsdump/ufsrestore
    4.1 화일시스템에서 테이프로 백업 받기
               # ufsdump 0cuf /dev/rmt/0  /
    4.2 테이프에서 화일 시스템으로 백업 받기
               # ufsrestore rvf /dev/rmt/0
    4.3 테이프 내용 보기
               # ufsrestore tvf /dev/rmt/0
    4.4 Interactive restore
               # ufsrestore ivf /dev/rmt/0

 

사용자(계정) 등록하기

1. 시스템에 새로운 사용자를 등록하기
               # useradd -d /export/home/guest -s /usr/bin/ksh -m guest
    이 명령어는 /export/home/guest라는 홈디렉토리를 가지는 guest 라는 사용자를
    만든다. 그 사용자의 login shell은 /usr/bin/ksh이다.
    -m 옵션은 사용자의 홈디렉토리응 만들어 준다.
    이 명령어를 실행하기전에 /export/home 디렉토리는 존재하여야 한다.
    useradd 명령어로 사용자를 만들면, 그 사용자의 암호는 lock되어 있어서 암호를
    넣어 줄때까지 이 사용자는 login할 수 없다.
    그래서 passwd 명령어를 사용하여 암호를 넣어주어야 한다.
               # passwd guest
               New password: 
               Re-enter new password: 
2. 시스템에서 사용자 제거하기
               # userdel -r guest
    guest라는 사용자를 시스템에서 제거한다. -r 옵션을 사용자의 홈디렉토리를 지운다.
6. 참고 문헌
    시스템에 설치된 메뉴얼 페이지를 참고한다.
               useradd(1M), userdel(1M), usermod(1M)
               예제)
man useradd
 

sar 데이타 수집하기

sar 데이타를 받으려면 다음과 같은 과정을 수행한다.
1. /etc/init.d/perf 화일에서 다음과 같이 # commnet를 제거한다.
               #MATCH=`who -r|grep -c "[234][   ]*0[    ]*[S1]"`
               #if [ ${MATCH} -eq 1 ]
               #then
               #       su sys -c "/usr/lib/sa/sadc /var/adm/sa/sa`date +%d`"
               #fi
               |
               |
               +--->
                              MATCH=`who -r|grep -c "[234][   ]*0[    ]*[S1]"`
                              if [ ${MATCH} -eq 1 ]
                              then
                               su sys -c "/usr/lib/sa/sadc /var/adm/sa/sa`date +%d`"
                              fi
2. /etc/init.d/perf 화일을 /etc/rc2.d 디렉토리 밑에 링크를 건다.
               # ln /etc/init.d/perf /etc/rc2.d/S21perf
3. "crontab -e sys" 명령어를 실행하여, 다음과 같은 추가한다.
   crontab -e sys를 실행하면 vi 에디터 화면이 나타난다. vi 화면이 나타나지
   않으면 환경변수 EDITOR에 vi를 설정한다.
   다음은 5분간격으로 sar 데이타를 받는 것이다.
                0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/lib/sa/sa1
4. sar 데이타를 받기 위한 초기 작업을 한다. 다음과 같은 명령어를 실행한다.
               # sh /etc/init.d/pert start
               * reboot하지 않아도 되며, reboot하여도 sar 데이타는 계속 받힌다.
 

remote Backup 방법

Tape가 있는 시스템 tserver, Tape가 없는 시스템 client라고 가정한다.
1. Trusted Host 관계를 맺는다.
               a) client에 /.rhosts 화일을 만들고 tserver를 넣는다.
               b) tserver에 /.rhosts 화일을 만들고 client를 넣는다.
               c) tserver에서 다음과 같은 명령어가 실행되는지 확인
                              # rsh client ls
               d) client에서 다음과 같은 명령어가 실행되는지 확인
                              # rsh tserver ls
2. tar backup
               1.1 tserver에서 backup(일반적인 방법)
                              1.1.1 Disk ---> Tape
                                       tar cvf /dev/rmt/0 directory
                              1.1.2 Tape --> Disk
                                       tar xvf /dev/rmt/0
               1.2. client에서 tserver의 tape로 backup
                              1.2.2 Disk ---> Tape
                                       tserver에서 client의 /usr/lib 디렉토리를 backup하려면
                                           # rsh client "cd /usr; tar cvf - lib" > /dev/rmt/0
                              1.2.3 Tape --> Disk
                                       client에서 백업을 풀 디렉토리에 가서 다음과 같이 실행
                                           # rsh tserver "cat /dev/rmt/0" | tar xvf -
3. ufsdump/ufsrestore backup
               1.1 tserver에서 backup(일반적인 방법)
                              1.1.1 Disk ---> Tape
                                       ufsdump 0uf /dev/rmt/0 /dev/rdsk/c0t0d0s0
                              1.1.2 Tape --> Disk
                                       ufsrestore rf /dev/rmt/0
               1.2. client에서 tserver의 tape로 backup
                              1.2.2 Disk ---> Tape
                                       client에서 다음과 같이 실행
                                       # ufsdump 0uf tserver:/dev/rmt/0 /dev/rdsk/c0t0d0s0
                              1.2.3 Tape --> Disk
                                       client에서 다음과 같이 실행
                                       # ufsrestore rf tserver:/dev/rmt/0

 

한글이 입출력되지 않으면?

1. LANG 환경변수와 터니널 모드를 지정한다.
              a) sh, ksh 인 경우, 다음과 같은 내용을 홈디렉토리의 .profile 화일에 넣는다
                              LANG=ko
                              export LANG
                              stty -istrip -parenb cs8
               위의 명령어를 쉘 상에서 바로 실행하면 즉시 반영된다.
               b) csh 인 경우, 다음과 같은 내용을 홈디렉토리의 .login 화일에 넣는다
                              setenv LANG ko
                              stty -istrip -parenb cs8
               위의 명령어를 쉘 상에서 바로 실행하면 즉시 반영된다.
 

CDE: dtmail에 mp 형식을 추가하는 방법

SRDB ID: 12685
개요: CDE: dtmail에 mp 형식을 추가하는 방법
세부 설명:
Solaris 일반 데스크탑 환경 Answerbook 1.0.1에 포함된 Solaris CDE 설치 및 시스템 관리 설명서에서는 다음 방법을 사용해서 $HOME/.dt/types/dtmail.dt에 mp 형식 제어를 추가하도록 설명합니다.
#
# Override default Print action for mailboxes
# ACTION print
{
LABEL           Print
ARG_TYPE        DTMAIL_FILE
TYPE            COMMAND
WINDOW_TYPE     NO_STUDIO
EXEC_STRING     sh -c '                 dtmailpr -p -f %(File)Arg_1% | mp -m -l
|                 dtlp -u %(File)Arg_1%;'
}
그러나 이 방법을 사용해도 추가되지 않습니다! 
무엇이 잘못된 것입니까?
해결 방법 요약:
작업 정의가 잘못되었습니다.
"# ACTION print" 행에서 "#" 기호를 제거해야 합니다.
0. dtmail을 중단하십시오.
1. cp /usr/dt/appconfig/types/C/dtmail.dt ~/.dt/types/
2. $HOME/.dt/types/dtmail.dt 파일을 편집하고 인쇄 작업을 수정하십시오.
## override the Print ACTION
ACTION Print
{
        LABEL           Print
        ARG_TYPE        DTMAIL_FILE
        TYPE            COMMAND
        WINDOW_TYPE     NO_STDIO
        EXEC_STRING     sh -c '                         dtmailpr -p -f
%(File)Arg_1% |                        mp -m -l |                        dtlp
-u %(File)Arg_1%;'
}
3. CDE를 다시 시작하십시오.
4. dtmail을 시작하십시오.
*** Sun은 dtmail과 작업을 사용자 정의하는 기능을 지원하지 않습니다.
*** 이 설명서의 내용은 참고용입니다.
*** 
제품 영역: Windows
제품: CDE
SUNOS 릴리즈: Solaris 2.x
하드웨어: 모든 하드웨어
 

모든 클라이언트가 사용자 암호 없이 로그인하도록 설정하기

SRDB ID: 14816
개요: 모든 클라이언트가 사용자 암호 없이 로그인하도록 설정하기
세부 설명:
모든 클라이언트에 대하여 사용자 암호를 요구하지 않도록 하려면 어떻게 해야 합니까?
그러면 모든 클라이언트가 암호를 입력하지 않고 로그인할 수 있습니다.
해결 방법 요약:
/etc/default/login 파일에서 다음 행에 주석 표시를 하십시오.
PASSREQ=YES
행 앞에 # 기호를 사용하면 주석 표시가 됩니다.
그러면 모든 사용자가 암호를 입력하지 않고 로그인할 수 있습니다.
제품 영역: 시스템 관리
제품: 로그인
SUNOS 릴리즈: Solaris 2.5.1
하드웨어: S10-51

 

rlogin을 실행하면 "protocol error, closed connection" 오류가 발생하는 경우

SRDB ID: 15011
개요: rlogin을 실행하면 "protocol error,  closed connection" 오류가 발생하는 경우
세부 설명:
SunOS 시스템에 대하여 rlogin이 실행되지 않고 다음 오류가 발생합니다.
               "protocol error,  closed connection"
해결 방법 요약:
1. 연결하려는 시스템을 대상으로 in.rlogin에 대한 사용 권한을 확인하십시오. 사용 권한이 다음과 같아야 합니다.
    -r-xr-xr-x  1 root     staff       16384 Jan 20  1994 /usr/sbin/in.rlogind
2. /etc/inetd.conf 파일에서 login 행을 확인하십시오. 다음과 같아야 합니다.
   login               stream             tcp               nowait              root               /usr/sbin/in.rlogind               in.rlogind
제품 영역: 일반 네트워크
제품: 일반 서비스
SUNOS 릴리즈: Solaris 1.x
하드웨어: 없음

 

dtlogin을 사용해서 로그인할 때 Solaris 배너 페이지 비활성화하기

SRDB ID: 15717
개요: dtlogin을 사용해서 로그인할 때 Solaris 배너 페이지 비활성화하기
세부 설명:
dtlogin을 사용해서 로그인할 때 Solaris 배너 페이지가 표시되지 않도록 하려면 어떻게 해야 합니까?
해결 방법 요약:
/etc/dt/config/Xservers 파일에 -nobanner 옵션을 추가하는 방법으로는 이 페이지를 비활성화할 수 없습니다.
로그인과 실제 데스크탑 사이에 표시되는 "Welcome to Solaris" 화면은 Xserver 배너가 아니고, Xserver가 이미 실행되어 로그인 화면을 표시하는 것입니다.
이 배너는 /usr/dt/bin/Xsession에서 호출되는 /usr/dt/bin/dthello 프로그램에 의해 표시됩니다.
로그인할 때 다른 프로그램을 실행하려면 /usr/dt/bin/Xsession 파일을 수정해서 dtstart_hello[0] 변수의 설정을 변경해야 합니다. 현재는 "$DT_BINPATH/dthello &"로 설정되어 있습니다.
배너를 완전히 없애려면 dtstart_hello 변수가 있는 행에 주석 표시를 하십시오. 이 행은 다음과 같습니다.
    StartFirst dtstart_hello        # start desktop hello client
자세한 내용은 dthello에 대한 매뉴얼 페이지를 참조하십시오.
제품 영역: Windows
제품: CDE
SUNOS 릴리즈: Solaris 2.5
하드웨어: 모든 하드웨어

 

PS 명령을 실행할 때 터미널을 제어할 수 없다는 오류가 발생하는 경우

SRDB ID: 16374
개요: PS 명령을 실행할 때 터미널을 제어할 수 없다는 오류가 발생하는 경우
세부 설명:
PS 명령을 실행하면 터미널을 제어할 수 없다는 오류가 발생합니다.
truss도 실행되지 않고 "/proc is not proc directory message" 오류가 발생합니다.
해결 방법:
/etc/vfstab에 /proc 항목이 없습니다.
다음과 같은 항목이 있어야 합니다.
/proc       -               /proc               proc               -               no               -
제품 영역: 커널
제품: 일반
SUNOS 릴리즈: Solaris 2.x
하드웨어: 모든 하드웨어
 

"rpc.lockd cannot contact status monitor" 오류 메시지

SRDB ID: 17198
개요: "rpc.lockd cannot contact status monitor" 오류 메시지
세부 설명:
오류 메시지: rpc.lockd cannot contact status monitor
이 오류 메시지는 부팅할 때 표시되고, 시스템이 완전히 부팅된 후에도 계속 나타납니다.
ps -ef 명령을 실행하면 lockd는 실행되고 있지만 statd는 실행되지 않는다고 표시됩니다.
다음과 같은 방법을 사용해 보십시오.
1.  lockd와 statd를 중단하십시오(statd는 실행되지 않음).
2.  /etc/sm*/*의 파일을 삭제(rm 명령)하십시오. 
3.  lockd와 statd를 다시 시작하십시오.
그래도 statd가 시작되지 않습니다!
해결 방법 요약:
/etc/sm.bak에 대한 사용 권한이 잘못되었습니다. 사용 권한이 다음과 같습니다.
----------  2 root          512 May 19 15:10 sm.bak/
statd를 제대로 실행하려면 다음과 같이 하십시오.
1. sm.bak 디렉토리를 삭제하십시오.
2. 다음 사용 권한의 디렉토리를 생성하십시오.
drwxr-s---  2 root          512 May 19 15:10 sm.bak/
이렇게 하면 직접 statd를 시작할 수도 있고 다시 부팅해서 시작할 수도 있습니다.
제품 영역: 일반 네트워크
제품: NFS
SUNOS 릴리즈: Solaris 1.x
하드웨어: 모든 하드웨어
 

Solaris 2.6 시스템에 ftp 연결이 되지 않고 "530 login incorrect" 메시지가 나오는 경우

SRDB ID: 17212
개요: Solaris 2.6 시스템에 ftp 연결이 되지 않고 "530 login incorrect" 메시지가 나오는 경우
세부 설명:
Solaris 2.6 시스템에 ftp로 연결하면 다음 메시지가 나옵니다.
# ftp 
Connected to .
220  FTP server (SunOS 5.6) ready.
Name (:): 
331 Password required for .
Password: 
530 Login incorrect.
Login failed.
Solaris 2.5.1 시스템에 ftp로 연결하면 다음 메시지가 나옵니다.
# ftp 
Connected to .
220  FTP server (UNIX(r) System V Release 4.0) ready.
Name (:): 
530 User  access denied.
Login failed.
두 경우 모두 rlogin과 telnet은 제대로 연결됩니다.
해결 방법 요약:
A1: 표준이 아닌 쉘(즉, tcsh)을 사용하고 있습니다.
표준이 아닌 쉘을 사용할 경우에는 /etc/shells 파일을 작성하고 이 파일에 쉘을 추가해야 합니다. 
 
참고: /etc/shells 파일을 생성하면 이 파일에 있는 쉘만 사용됩니다. 이 파일을 작성할 때 표준이 아닌 쉘과 함께 모든 기본 쉘을 추가하는 것이 좋습니다.
다음은 맨 아래에 있는 표준이 아닌 쉘과 함께 기본 Solaris 쉘을 추가한 /etc/shells 파일의 예입니다.
 %% cat /etc/shells
  /usr/bin/sh  
  /usr/bin/csh 
  /usr/bin/ksh
  /usr/bin/jsh 
  /bin/sh      
  /bin/csh
  /bin/ksh     
  /bin/jsh
  /sbin/sh
  /sbin/jsh
  /usr/local/bin/tcsh
A2: ftp로 연결하려는 시스템의 /etc/ftpusers 파일에 사용자 목록이 있습니다. 이 파일에 항목으로 표시된 모든 사용자는 자동으로 FTP 액세스가 거부됩니다.
A3: /etc/passwd 및 /etc/shadow 파일(또는 NIS나 NIS+ 데이터베이스)에서 ftp로 연결하려는 사용자 항목의 구문이 정확한지 확인하십시오. 구문을 확인하려면 pwck를 실행하십시오.
제품 영역: 일반 네트워크
제품: ftp
SUNOS 릴리즈: Solaris 2.6
하드웨어: 없음

 

lit 도구를 사용하지 않고 컴파일러 사용권을 설치하는 방법

SRDB ID: 17252
개요: lit 도구를 사용하지 않고 컴파일러 사용권을 설치하는 방법
세부 설명:
PatchID 104829를 사용해서 lit를 패치하지 않으면 lit(사용권 설치 도구)에 문제가 있습니다. 즉, 패치를 실행하지 않으면 lit 도구가 사용권 파일에 불필요한 문자를 입력해서 사용권 오류가 발생합니다.
문제를 해결하려면 아래 설명에 따라 영구 사용권을 설정하십시오.
해결 방법 요약:
 
1. 전자 우편으로 사용권 키를 얻으려면 라이센스 센터로 전화를 하십시오.
   라이센스 센터: 1-800-USA-4SUN(3번을 선택한 다음 1번 선택)
2. 사용권 전자 우편을 받았으면 첨부 파일을 저장하십시오. 첨부된 두 개의 파일 중 하나가 사용권 파일입니다. 사용권 파일은 첫 번째 행에 "SERVER .."라는 단어가 있습니다. 또 하나의 첨부 파일은 사용권 대상 제품, 일련번호, 호스트 이름 등에 대한 정보가 있는 "User-Info" 파일입니다. 정확한 첨부 파일을 /tmp/lic로 저장하십시오.
3. 저장된 사용권 파일을 다음 위치에 복사하십시오.
   # cp /tmp/lic /etc/opt/licenses/licenses_combined
   # cp /tmp/lic //SUNWspro/license_dir/sunpro.lic,1
   는 컴파일러를 설치하기 위해 선택한 위치입니다. 기본 위치는 /opt입니다.
   참고: license_dir에 사용권이 있을 경우 이미 sunpro.lic,1 또는 sunpro.lic.X(여기서 X는 번호)라는 파일이 있을 수 있습니다. 사용할 수 있는 다음 번호를 사용해서 파일 이름을 지정해야 합니다.
4. 사용권 관리자를 다시 시작하십시오.
   # cd /etc/opt/licenses
   # ./lmdown -a -c licenses_combined
   (다시 시작하기 전에 사용권 데몬이 중단되었는지 확인하십시오.)
   # ps -ef | grep lmgrd
   # ps -ef | grep suntechd
   (이제 사용권 데몬을 시작하십시오.)
   # /etc/rc2.d/S85lmgrd
5. 다음 명령을 실행하여 사용권 데몬이 모든 사용권을 보고하는지 확인하십시오.
   # ./lmstat -a -c licenses_combined.
   사용권을 받은 각 제품에 대한 사용 정보와 데몬의 상태가 보고되어야 합니다.
6. 이제 다음 방법으로 컴파일러를 사용할 수 있습니다.
   # cd //SUNWspro/bin
   # ./cc -xlicinfo
   구입한 만큼의 사용권에 사용할 수 있는 사용권이 보고되어야 합니다. 보고된 값이 0이면 사용권 관리자가 실행되지 않은 것입니다.
   다음을 실행하여 확인하십시오.
   # touch /tmp/test.c
   # /opt/SUNWspro/bin/cc /tmp/test.c
       "test.c", line 1: warning: empty translation unit
       Undefined                       first referenced
       symbol                             in file
       main                                /opt/SUNWspro/SC4.2/lib/crt1.o
       ld: fatal: Symbol referencing errors. No output written to a.out
   사용권 오류 없이 길이가 0인 파일을 컴파일했습니다.
   컴파일에 실패하면 다음과 같은 메시지가 나옵니다.
       License Error : Cannot connect to the license server (austin)..
        for product(Sun WorkShop Compiler C).
        (License server may not have been started)
       Cannot connect to license server (-15,12:146) Connection refused
       cc: acomp failed for test.c
   이 경우에는 Sun 서비스 전화 1-800-USA-4SUN으로 문의하고 /var/tmp/license_log 파일을 전송할 준비를 하십시오.
패치 ID: 104829
제품 영역: 사용권
제품: FLEXlm
SUNOS 릴리즈: Solaris 2.x
하드웨어: 없음

 

Warning: Cannot convert string "...." to type FontList, using fixed font

SRDB ID: 17310
개요: Warning: Cannot convert string "...." to type FontList, using fixed font
세부 설명:
다른 회사 응용 프로그램을 Sun 시스템에 표시하려고 하면 다음과 같은 오류 메시지가 나옵니다.
Warning: Cannot convert string "...." to type FontList, using fixed font
응용 프로그램이 실행되지만 제대로 표시되지 않습니다. 
왜 이런 문제가 발생합니까?
해결 방법 요약:
이 오류 메시지는 응용 프로그램이 찾는 글꼴이 없기 때문입니다.
Sun 시스템에서 사용할 수 있는 글꼴이 원격 시스템의 글꼴과 다를 수 있습니다. 표시하려는 응용프로그램에 Sun Xserver에 없는 글꼴이 필요하기 때문에 필요한 글꼴을 제공할 수 없습니다. 이 경우에는 Xserver가 다른 글꼴을 선택해서 응용프로그램에 사용하기 때문에 응용프로그램이 이상하게 표시될 수 있습니다. 또 응용 프로그램이 전혀 실행되지 않을 수도 있습니다.
Sun 시스템이 원격 시스템에 있는 글꼴을 인식하도록 해야 합니다. 다음 두 가지 방법으로 이 작업을 할 수 있습니다.
 
1. 필요한 글꼴이 인식할 수 있는 형식일 경우에는 글꼴을 Sun 시스템으로 복사할 수 있습니다. ( Sun 형식은 font psd를 참조하십시오.)
2. Sun 시스템에서 필요한 글꼴의 이름을 별명으로 지정할 수 있습니다. 응용 프로그램이 찾는 글꼴을 찾을 수 없을 경우 응용 프로그램이 Sun 시스템에 있는 다른 글꼴을 사용하도록 합니다.
   다른 글꼴을 사용하게 하려면 글꼴 디렉토리 중 하나에서 fonts.alias 파일을 편집하십시오. 글꼴 디렉토리 목록을 보려면 xset -q 명령을 실행하십시오. 그 다음에 필요한 글꼴을 파일에 추가하십시오.
   이제 xset fp rehash 명령을 실행하십시오.
   (자세한 내용은 font psd를 참조하십시오.)
제품 영역: Windows
제품: 글꼴
SUNOS 릴리즈: Solaris 2.x
하드웨어: 모든 하드웨어
 

 dbx 내부 오류가 발생하는 이유

SRDB ID: 17324
개요: dbx 내부 오류가 발생하는 이유
세부 설명:
간단한 hello.c 프로그램을 컴파일할 때 디버깅을 위해 -g 옵션을 사용하는데, Workshop 디버거나 명령행 dbx를 사용하려고 하면 다음 오류가 발생합니다.
dbx: internal error: object file ends unexpectedly while reading stabs of hello.c
해결 방법 요약:
다른 컴파일러(예: gcc)를 사용해서 프로그램을 컴파일하고, 이렇게 생성된 실행 파일을 Workshop 디버거나 dbx를 사용해서 디버그할 경우에 이러한 오류가 발생합니다.
"which cc" 명령을 실행해서 /SUNWspro/bin/cc가 표시되지 않으면 다른 컴파일러를 사용하고 있는 것입니다(여기서 는 Workshop 컴파일러가 설치된 위치).
Workshop 컴파일러에서 정확한 경로(즉, //SUNWspro/bin/cc)를 지정하고 -g 옵션을 사용해서 컴파일한 다음, Workshop 디버거나 명령행 dbx를 사용해서 디버그하면 dbx 내부 오류가 발생하지 않습니다.
제품 영역: 프로그래밍
제품: 디버거
SUNOS 릴리즈: 모든 릴리즈
하드웨어: 모든 하드웨어

 

 

다른 회사 소프트웨어의 매뉴얼 페이지가 작동하지 않는 경우

SRDB ID: 17351
개요: 다른 회사 소프트웨어의 매뉴얼 페이지가 작동하지 않는 경우
세부 설명:
다른 회사에서 제공하는 소프트웨어와 매뉴얼 페이지를 로드했습니다. MANPATH에 경로를 추가하고 catman도 실행했습니다. 그러나 명령에 대하여 man을 실행하면 "No manual entry for (the command). no such file or directory."라는 메시지가 나옵니다.
해결 방법 요약:
매뉴얼 페이지 파일의 이름 표기 규칙에 문제가 있습니다. 
/usr/man/man1의 표준 파일 이름은 mem.1인데, 다른 회사에서 제공하는 파일의 이름은 mem.1T입니다. "T" 때문에 문제가 발생한 것입니다. "T"를 삭제하거나 "T"를 "t"로 변경하면 매뉴얼 페이지가 작동합니다. 대문자 "T"를 사용하면 문제가 발생합니다.
제품 영역: 모든 영역
제품: 모든 제품
SUNOS 릴리즈: Solaris 2.5.1
하드웨어: 모든 하드웨어

 

sendmail: unqualified host name/unable to qualify my own domain name

SRDB ID: 18391
개요: sendmail: unqualified host name/unable to qualify my own domain name
세부 설명:
SendMail 8.8을 사용해서 전송하면 다음 메시지가 나옵니다.
  sendmail[694]: My unqualified host name (lawlor.) unknown; sleeping for retry
  sendmail[694]: unable to qualify my own domain name (lawlor.) -- using short name
해결 방법 요약:
다음은 sendmail 버전에 대한 표입니다.
        Solaris                         sendmail
        ========================================
        7                               8.9.1b      
        2.6                             8.6
        2.6 + 105395-05 이상            8.8.8
        2.5.1                           8.6
        2.5.1 + 103594-18 이상          8.8.8
        기타 + 최신 패치                8.6
 
Solaris 7로 업그레이드하거나 최신 sendmail 패치를 사용하여(또는 sendmail 패치가 포함된 권장 패치 세트를 적용) 2.5.1/2.6을 패치하면 이런 문제가 발생합니다.
Sendmail 8.8을 사용해서 전송하려면 완전한 호스트 이름을 지정해야 하기 때문에, 로컬 도메인 이름을 알 수 있습니다.
여러 가지 방법을 사용한 후에 실패하면 다음 메시지를 표시합니다.
  sendmail[694]: My unqualified host name (lawlor.) unknown; sleeping for retry
  sendmail[694]: unable to qualify my own domain name (lawlor.) -- using short name
첫 번째 메시지를 표시한 다음 네임 서비스에 장애가 있다고 판단해서(즉, 네트워크 네임 서비스를 초기화하는 중) 60초 동안 대기했다가 두 번째 행을 표시합니다. 1분 후에 두 번째 메시지가 표시되고, sendmail은 도메인 이름을 확인하지 못하고 계속 진행합니다.
가장 간단한 방법(권장)은 /etc/hosts에 완전한 호스트 이름을 지정하고, /etc/nsswitch.conf에 "files"를 첫 번째로 지정하는 것입니다. 예를 들어 다음과 같이 하십시오.
  /etc/nsswitch.conf:
  hosts: files nisplus dns
  /etc/hosts:
  192.9.9.100               www www.sun.com
/etc/nsswitch.conf에 있는 첫 번째 네임 서비스가 "files"이면 표시된 첫 번째 네임 서비스가 완전한 호스트 이름을 반환해야 합니다.
Sendmail이 NIS/NIS+ 도메인 이름(/etc/defaultdomain에 설정된)을 사용할 수 있습니다. 이 경우에는 첫 번째 구성 요소를 제거하십시오. 예를 들어, 다음과 같이 하십시오.
  hotline.uk.sun.com -> uk.sun.com
Solaris 7에는 완전한 호스트 이름이 구성되었는지 확인해서 알려주는 /usr/lib/mail/sh/check-hostname 스크립트가 있습니다. 2.5.1/2.6에 사용할 수 있는 버전을 구하려면 아래 웹 사이트를 참조하십시오.
참고:
  Sendmail은 sendmail.cf 파일을 처리하기 전에 위의 작업을 실행하기 때문에 $m을 설정해도 메시지가 취소되거나 지연되지 않습니다.
자세한 내용은 다음 웹 사이트를 참조하십시오.
  http://www.sendmail.org/sun-specific
제품 영역: 일반 네트워크
제품: 메일
SUNOS 릴리즈: 없음
하드웨어: 없음

 

이중 헤드 표시를 사용하거나 두 번째 프레임 버퍼에 CDE를 실행하는 방법

INFODOC ID: 11669
개요: 이중 헤드 표시를 사용하거나 두 번째 프레임 버퍼에 CDE를 실행하는 방법
세부 설명:
다음 방법으로 이중 헤드(하나의 X 표시, 2개의 화면) CDE 구성을 작성하십시오.
1. 루트 권한으로 /usr/dt/config/Xservers를 /etc/dt/config/Xservers에 복사하십시오.
   * 먼저 /etc에 디렉토리를 만들어야 할 수도 있습니다.
2. /etc/dt/config/Xservers 사본에서 마지막에 있는(주석 표시가 없는)
   :0 Local local@console /usr/openwin/bin/Xsun :0
   행을 다음과 같이 변경하십시오. 
   :0 Local local@console /usr/openwin/bin/Xsun :0 -dev /dev/fb0 -dev /dev/fb1
   * Xsun 옵션에 대한 자세한 내용은 "Xsun" 매뉴얼 페이지를 참조하십시오.
   * 이 행의 장치가 시스템 구성과 일치하는지 확인하십시오.
3. 시스템을 다시 부팅하거나 CDE를 종료하고 명령에서 로그인한 다음 dtlogin을 종료했다가 다시 시작하십시오.
(참고: Solaris 2.6 이상 버전에서는 두 화면에 프론트 패널이 표시되지 않습니다. Solaris 2.7(CDE 1.3)의 경우에는 각 화면에 따로 프론트 패널이 표시됩니다.)
제품 영역: Windows
제품: CDE
SUNOS 릴리즈: Solaris 2.x
하드웨어: 모든 하드웨어

 

루트 파일 시스템 복원

INFODOC ID: 11881
개요: 루트 파일 시스템 복원
세부 설명:
루트 파일 시스템을 복원하려면 어떻게 해야 합니까?
다음 루틴을 사용하면 신속하게 파일 시스템을 복원할 수 있습니다. 이 절차에서는 ufsdump를 사용하여 루트 파일 시스템을 저장했다고 가정합니다. 또 이 설명서에서는 루트 파일 시스템이 c0t3d0s0에 있다고 가정합니다.
1. Solaris CD-ROM을 CD-ROM 드라이브로 로드하십시오.
2. 단일 사용자 모드에서 CDROM으로 부팅하십시오.
   ok  boot cdrom -s
3. BOURNE 쉘 프롬프트가 나오면 루트 파일 시스템의 파티션을 새로 설정하십시오(필요할 경우).
   a. 드라이브 파티션을 설정하려면 "format" 명령을 사용하십시오.
   b. 파일 시스템을 생성하려면 "newfs /dev/rdsk/c0t3d0s0" 명령을 사용하십시오.
 
4. 새 루트 파일 시스템을 확인하십시오.
   # fsck /dev/rdsk/c0t3d0s0
5. /a 마운트 포인트에 루트 파일 시스템을 마운트하십시오.
   # mount /dev/dsk/c0t3d0s0 /a
6. 먼저 새 루트 파일 시스템으로 이동해서 복원을 시작하십시오.
   a.  cd /a
   b.  ufsrestore rvf /dev/rmt/0
7. 복원이 완료되면 복원 기호 테이블을 제거하고 새 파일 시스템의 마운트를 해제하십시오.
   a. rm restoresymtable
   b. cd /
   c. umount /a
8. 새 루트 파티션을 한 번 더 확인하십시오.
   # fsck /dev/rdsk/c0t3d0s0
9. 부트 블록을 설치하십시오.
   # Solaris 2.4 이하 버전의 경우:
     a. cd /usr/lib/fs/ufs
     b. installboot bootblk /dev/rdsk/c0t3d0s0
   # 2.5, 2.5.1 또는 2.6의 경우:
     a. cd /usr/platform//lib/fs/ufs 
     b. 을 가져오려면 uname -i 명령을 입력하십시오. 더 쉽게 작업을 하려면 다음과 같이 cd 명령에 포함시키십시오.
              * cd /usr/platform/`uname -i`/lib/fs/ufs
               * 명령 앞뒤에 역따옴표를 사용해야 합니다.
     c. installboot bootblk /dev/rdsk/c0t3d0s0
10. 시스템을 다시 부팅하십시오.
    # reboot
참고: 다른 파일 시스템의 파티션(usr, var 등)을 복원하려면 CDROM으로 부팅한 후에 단계 3-8을 수행하십시오.
적용 대상: 하드웨어, 운영 체제/Solaris/Solaris 2.x

 

named pipe의 최대 크기

INFODOC ID: 11899
개요: named pipe의 최대 크기
세부 설명:
named pipe의 최대 크기는 얼마나 됩니까?
 
간단히 대답하면 크기에 제한이 없습니다. 자세한 내용은 아래를 참조하십시오.
/usr/include/limits.h 및 /usr/include/sys/param.h 파일에 
다음과 같은 부분이 있습니다.
#ifndef PIPE_BUF               /* max # bytes atomic in write to a pipe */
#define               PIPE_BUF       5120
#endif      /* PIPE_BUF */
#ifndef PIPE_MAX               /* max # bytes written to a pipe in a write */
#define               PIPE_MAX       5120
#endif      /* PIPE_MAX */
위 주석의 설명처럼 한 번에 최대 5120 바이트까지 pipe에 기록할 수 있습니다. 따라서 두 개의 프로그램이 동일한 pipe에 기록할 경우, 한 번에 5120 바이트 이상의 정보를 기록하려고 하면, 여러 기록 작업의 데이터가 나눠질 수 있습니다. 즉, A 프로그램이 한 번의 기록으로 5200 바이트를 기록하려고 요청하면 A 프로그램의 데이터 5120 바이트를 기록하고 B 프로그램의 데이터 50 바이트를 기록한 다음 A 프로그램의 데이터 80 바이트를 기록할 수 있습니다.
프로그램이 항상 각 기록 작업에서 5120 바이트 이하의 데이터를 기록할 경우, 다른 프로그램이 기록하는 데이터가 나눠지지 않습니다. 물론 하나의 프로그램이 pipe에 기록할 경우에는 문제가 되지 않습니다.
제품 영역: 커널
제품: 시스템 호출
SUNOS 릴리즈: Solaris 2.x
하드웨어: 모든 하드웨어

 

두 번째 하드 디스크 추가 및 구성

INFODOC ID: 13127
개요: 두 번째 하드 디스크 추가 및 구성
세부 설명:
다음은 Solaris 2.x x86에 사용할 두 번째 하드 디스크를 추가하고 구성하는 절차입니다.
먼저 하드웨어 제조업체 지시에 따라 하드 디스크를 설치하십시오. SCSI 대상 번호, 종단 장치, 전원 등과 같은 기본 사항을 확인하십시오. IDE 드라이브일 경우에는 마스터 또는 슬레이브를 결정하십시오.
드라이브가 설치되어 작동하는 것이 확인되면 부트 해석기에서 "b -sr" 옵션을 사용해서 Solaris 2.x x86으로 부팅하십시오. Solaris 2.x x86이 단일 사용자 모드로 부팅되고 새 하드 디스크에 대해 /dev/dsk/* 항목이 생성됩니다. 이 항목이 생성되지 않으면 Solaris 2.x x86이 드라이브를 인식하지 못하는 것입니다. 그러면 따로 검사를 해야 합니다.
다음에는 새 드라이브에 fdisk 파티션을 생성해야 합니다.
# format
- 다음과 같은 메뉴가 나옵니다.
AVAILABLE DISK SELECTIONS:
       0. c1t0d0 
          /pci@0,0/pci9004,8178@3/cmdk@0,0
       1. c1t1d0 
          /pci@0,0/pci9004,8178@3/cmdk@1,0
       2. c1t2d0 
          /pci@0,0/pci9004,8178@3/cmdk@2,0
Specify disk (enter its number): 
- 새 드라이브에 해당하는 번호를 입력하십시오. 다음 메뉴가 나옵니다.
FORMAT MENU:
        disk       - select a disk
        type       - select (define) a disk type
        partition  - select (define) a partition table
        current    - describe the current disk
        format     - format and analyze the disk
        fdisk      - run the fdisk program
        repair     - repair a defective sector
        label      - write label to the disk
        analyze    - surface analysis
        defect     - defect list management
        backup     - search for backup labels
        verify     - read and display labels
        save       - save new disk/partition definitions
        inquiry    - show vendor, product and revision
        volname    - set 8-character volume name5
        quit
format> 
- fdisk 옵션을 선택하십시오. (참고: SPARC용 Solaris 2.x에 이 옵션이 없습니다.) 드라이브에 파티션이 없으면 다음과 같은 메시지가 나옵니다.
The recommended default partitioning for your disk is:
  a 100% "SOLARIS System" partition. 
이것을 선택하려면 "y"를 누르십시오. 다른 파티션을 생성하려면 "n"을 누르십시오. 그러면 "fdisk" 프로그램에서 다른 파티션을 선택할 수 있습니다. 
- 전체 드라이브를 Solaris 2.X x86에 사용하려면 'y'를 입력하십시오. 그러면 format 메뉴로 돌아갑니다. 'n'을 선택하면 fdisk 메뉴가 나옵니다.
             Total disk size is 4073 cylinders
             Cylinder size is 540 (512 byte) blocks
                                           Cylinders
      Partition   Status    Type      Start   End   Length    %
      =========   ======    ========  =====   ===   ======   ===
 
THERE ARE NO PARTITIONS CURRENTLY DEFINED
SELECT ONE OF THE FOLLOWING: 
     1.   Create a partition
     2.   Change Active (Boot from) partition
     3.   Delete a partition
     4.   Exit (Update disk configuration and exit)
     5.   Cancel (Exit without updating disk configuration)
Enter Selection: 
- Solaris FDISK 파티션을 생성하려면 1을 선택하십시오. 이것은 Solaris 슬라이스 파티션(또는 파일 시스템)과 다릅니다. 종료하고 저장하려면 4를 선택하십시오. format 메뉴는 되돌아갑니다. 그 다음에 파티션(슬라이스)을 선택하십시오.
PARTITION MENU:
        0      - change `0' partition
        1      - change `1' partition
        2      - change `2' partition
        3      - change `3' partition
        4      - change `4' partition
        5      - change `5' partition
        6      - change `6' partition
        7      - change `7' partition
        select - select a predefined table
        modify - modify a predefined partition table
        name   - name the current table
        print  - display the current table
        label  - write partition map and label to the disk
        quit
partition> 
- 기본 슬라이스 크기를 표시하려면 print를 입력하십시오.
Current partition table (default):
Total disk cylinders available: 4070 + 2 (reserved cylinders)
Part      Tag    Flag     Cylinders        Size            Blocks
  0       root    wm       3 -  245       64.07MB    (243/0/0)   131220
  1       swap    wu     246 -  731      128.14MB    (486/0/0)   262440
  2     backup    wu       0 - 4072        1.05GB    (4073/0/0) 2199420
  3 unassigned    wm       0               0         (0/0/0)          0
  4 unassigned    wm       0               0         (0/0/0)          0
  5 unassigned    wm       0               0         (0/0/0)          0
  6        usr    wm     732 - 4070      880.40MB    (3339/0/0) 1803060
  7 unassigned    wm       0               0         (0/0/0)          0
  8       boot    wu       0 -    0        0.26MB    (1/0/0)        540
  9 alternates    wm       1 -    2        0.53MB    (2/0/0)       1080
partition> 
- 원하는 대로 변경하십시오. 언제든지 '?'를 입력하면 도움말이나 사용법을 볼 수 있습니다. 예를 들어, 큰 루트 파일 시스템이 필요하면 먼저 'usr'(슬라이스 6)과 'swap'(슬라이스 1)을 제거하십시오.
partition> 6
Part      Tag    Flag     Cylinders        Size            Blocks
  6        usr    wm     732 - 4069      880.14MB    (3338/0/0) 1802520
Enter partition id tag[usr]: 
Enter partition permission flags[wm]: 
Enter new starting cyl[732]: 
Enter partition size[1802520b, 3338c, 880.14mb]: 0
                                                 ^
                                                 |
                                  슬라이스 6을 제거하려면 0을 입력
- 슬라이스 1에도 동일한 작업을 하십시오.
partition> 1
Part      Tag    Flag     Cylinders        Size            Blocks
  1       swap    wu     246 -  731      128.14MB    (486/0/0)   262440
Enter partition id tag[swap]: 
Enter partition permission flags[wu]: 
Enter new starting cyl[246]: 
Enter partition size[262440b, 486c, 128.14mb]: 0
- 이제 루트 파일 시스템의 크기를 변경하십시오.
partition> 0
Part      Tag    Flag     Cylinders        Size            Blocks
  0       root    wm       3 -  245       64.07MB    (243/0/0)   131220
Enter partition id tag[root]: 
Enter partition permission flags[wm]: 
Enter new starting cyl[3]: 
Enter partition size[131220b, 243c, 64.07mb]: ?
                                              ^
                                              |
                              사용 가능한 전체 공간을 표시하려면 '?'를 입력
Expecting up to 2196180 blocks, 4067 cylinders, or 1072.35 megabytes
Enter partition size[131220b, 243c, 64.07mb]: 4067c         
                                                ^
                                                |
                                새 크기를 실린더 단위로 입력                    
- 새 슬라이스 구성을 표시하십시오.
partition> print
Current partition table (unnamed):
Total disk cylinders available: 4070 + 2 (reserved cylinders)
Part      Tag    Flag     Cylinders        Size            Blocks
  0       root    wm       3 - 4069        1.05GB    (4067/0/0) 2196180
  1 unassigned    wu       0               0         (0/0/0)          0
  2     backup    wu       0 - 4072        1.05GB    (4073/0/0) 2199420
  3 unassigned    wm       0               0         (0/0/0)          0
  4 unassigned    wm       0               0         (0/0/0)          0
  5 unassigned    wm       0               0         (0/0/0)          0
  6 unassigned    wm       0               0         (0/0/0)          0
  7 unassigned    wm       0               0         (0/0/0)          0
  8       boot    wu       0 -    0        0.26MB    (1/0/0)        540
  9 alternates    wm       1 -    2        0.53MB    (2/0/0)       1080
partition> 
- 이제 설정을 저장해야 합니다.
partition> label
Ready to label disk, continue? yes
- format 메뉴로 돌아가려면 quit를 입력하십시오. format 메뉴를 종료하려면 quit를 입력하십시오. 이제 ufs 파일 시스템으로 파일 시스템을 포맷해야 합니다. 다음 명령을 입력하면 컨트롤러 1, SCSI 대상 1, 슬라이스 0에 파일 시스템을 생성합니다.
# newfs /dev/rdsk/c1t1d0s0
newfs: construct a new file system /dev/rdsk/c1t1d0s0: (y/n)? y
- 끝으로 새 슬라이스를 마운트하여 검사하십시오.
# mount /dev/dsk/c1t1d0s0 /mnt
# cd /mnt
# df -k .
Filesystem            kbytes    used   avail capacity  Mounted on
/dev/dsk/c1t1d0s0    1028710       9  925831     1%    /mnt
제품 영역: 다른 플랫폼
제품: 구성
SUNOS 릴리즈: Solaris 2.x_x86
하드웨어: Intel X86

 

현재 작업중인 디렉토리를 프롬프트에 표시하는 방법.

INFODOC ID: 14980
개요: 현재 작업중인 디렉토리를 프롬프트에 표시하는 방법.
세부 설명:
KSH의 경우 사용자의 .profile 파일에 다음과 같이 입력하십시오.
   PS1='${PWD##*/}/ > '   # For partial pathname in the prompt.
   PS1='${PWD}/ > '       # For full pathname in the prompt.
---------------------------------------------------------------------------
CSH의 경우 .login 파일에 다음 중 한 가지를 입력하십시오.
   # For hostname and full pathname in the prompt.
   set prompt="`hostname`:$cwd % "
   alias cd 'cd \!*;set prompt="`hostname`:$cwd % "'
또는
   # For just the full pathname in the prompt.
   set prompt="$cwd % "
   alias cd 'cd \!*;set prompt="$cwd % "'
또는
   # For hostname and partial pathname in the prompt.
   set prompt="`hostname`:`basename ${cwd}` % "
   alias cd 'cd \!*;set prompt="`hostname`:`basename ${cwd}` % "'
또는
   # For just the partial pathname in the prompt.
   set prompt="`basename ${cwd}` % "
   alias cd 'cd \!*;set prompt="`basename ${cwd}` % "'
---------------------------------------------------------------------------
BOURNE 쉘의 경우: 
   Bourne 쉘(/bin/sh)에서 pwd로 변경하는 것처럼 PS1 프롬프트에서 변경하려면 계정의 .profile에 cd라는 새 함수를 생성하십시오.
   cd() { chdir $* ; PS1="`pwd` $ "; }
   이 cd 함수가 쉘에 내장된 cd 명령 대신 실행됩니다.
제품 영역: 유틸리티
제품: 쉘 스크립트
SUNOS 릴리즈: 모든 릴리즈
하드웨어: 모든 하드웨어
 

CDE: 화면 전원 관리를 변경하는 방법

INFODOC ID: 15531
개요: CDE: 화면 전원 관리를 변경하는 방법
세부 설명:
화면 보호기 시간 초과는 Xserver(즉, Xsun)의 기능입니다. 기본값은 10분이고 주기도 10분입니다. Xserver 매뉴얼 페이지에 다음과 같은 설명이 있습니다.
     -s minutes
화면 보호기의 시간 초과 시간을 분 단위로 설정합니다. 기본값은 10분입니다.
     -p minutes
        화면 보호기의 패턴 주기를 분 단위로 설정합니다. 기본값은 10분입니다.
     v       화면 보호기의 화면 끄기를 설정합니다. 이것이 기본값입니다.
     -v      화면 보호기의 화면 켜기를 설정합니다.
Solaris 2.6부터는 Xserver의 이 기능이 모니터의 전원 관리도 제어합니다. 모니터 전원을 관리하려면 화면 끄기를 설정해야 합니다. 이 Xserver 값은 로그인한 사용자가 xset 명령이나 CDE 스타일 관리자를 통해 변경할 수 있습니다. 이 설정값은 사용자가 로그인한 후에 CDE 환경에서 변경할 수 있습니다.
CDE 로그인 화면에서 Xserver가 작동하도록 하려면 다음 절차를 실행해야 합니다.
수퍼유저 권한으로,
1. /etc/dt/config/Xservers의 Xsun 행에 다음을 추가하십시오. (이 파일이 없으면 /usr/dt/config에서 복사하십시오.)
               -s  -p 
   전원 관리 기능을 비활성화하려면 -v를 추가하십시오.
   예를 들어, 다음과 같은 행이 됩니다.
:0   Local local_uid@console root /usr/openwin/bin/Xsun :0 -nobanner -s 5 -p 5
2. /etc/dt/config/Xconfig에 다음 행이 있는지 확인하십시오. (이 행이 없으면 /usr/dt/config에서 복사하십시오.)
               Dtlogin*terminateServer:   True
   그러면 사용자가 로그아웃한 후에 Xserver가 다시 시작되기 때문에 단계 1에 있는 Xservers 파일의 설명대로 기본값이 복원됩니다.
3. 구성 파일을 다시 읽도록 X Display Manager, dtlogin을 강제로 실행하십시오.
               /usr/dt/bin/dtconfig -reset
4. 로그 아웃하십시오.
Xserver 값은 로그인한 사용자가 xset 명령이나 CDE 스타일 관리자를 통해 변경할 수 있습니다. 이 설정값은 사용자가 로그인한 후에 CDE 환경에서 기본 CDE 구성이나 사용자 설정으로 변경할 수 있습니다.
제품 영역: Windows
제품: CDE
SUNOS 릴리즈: Solaris 2.6
하드웨어: 모든 하드웨어
 

정렬된 Openwin 작업 공간 배경를 사용자 정의하는 방법

INFODOC ID: 15546
개요: 정렬된 Openwin 작업 공간 배경를 사용자 정의하는 방법
세부 설명:
Solaris 2.3 이상에서 OpenWindows 작업 공간 정렬 배경을 사용자 정의하려면 다음 단계를 따르십시오.
1- 사용할 비트맵이 .xbm 형식인지 확인하십시오.
2- .xbm 파일을 다음 Openwin 패턴 디렉토리로 이동(mv 명령)하십시오.
   /usr/openwin/share/etc/workspace/patterns
   시스템 비트맵 파일이 모두 여기에 저장됩니다.
3- Openwin root 메뉴에서 "Properties..." 옵션을 선택하십시오. Properties 창이 나타납니다.
4- Category가 "Color"로 설정되어 있는지 확인하십시오.
4- "Pattern" 설정을 사용하여 사용자의 이미지를 선택하십시오.
   변경한 내용을 적용하십시오. 그러면 사용자의 OpenWindows 배경이 변경됩니다.
해결 방법 요약:
제품 영역: Windows
제품: OpenWindows
SUNOS 릴리즈: Solaris 2.x
하드웨어: 없음
 

유지 관리 작업 중에 사용자가 로그인하지 못하도록 하는 방법

INFODOC ID: 15788
개요: 유지 관리 작업 중에 사용자가 로그인하지 못하도록 하는 방법
세부 설명:
시스템 유지 관리 작업을 할 때 사용자가 로그인하지 못하도록 할 수 있습니까?
root 사용자로 /etc에 nologin이라는 파일을 생성하십시오.
로그인을 시도할 경우에 확인할 사용자를 이 파일에 입력하십시오.
nologin에 대한 매뉴얼 페이지에는 nologin 파일 사용법에 대한 자세한 설명이 없습니다. 또 Solaris 2.5에는 매뉴얼 페이지가 없습니다.
/etc/nologin 파일이 있을 경우, 사용자의 로그인 이름이 "root"가 아니면 로그인할 수 없습니다. (UID가 0인 다른 사용자도 로그인할 수 없습니다.)
이 기능은 Solaris 1.x 및 Solaris 2.5 이상에서만 사용할 수 있습니다.
해결 방법 요약:
제품 영역: 유틸리티
제품: UNIX 명령
SUNOS 릴리즈: Solaris 2.5
하드웨어: 없음

 

시작 파일을 추가하여 시스템 서비스를 추가하는 방법

INFODOC ID: 16253
개요: 시작 파일을 추가하여 시스템 서비스를 추가하는 방법
세부 설명:
시스템 서비스를 추가하기 위해 시작 파일을 추가해야 할 경우에는 다음 단계를 따르십시오.
1. 시작 파일 추가에 대한 예는 /etc/init.d/README 파일의 설명을 참조하십시오.
2. 기존 시퀀스 번호와 충돌하지 않도록 /etc/rc*d 디렉토리에 있는 시작 파일에 원하는 시퀀스 번호를 지정하십시오. 또 시작하는 서비스가 성공적으로 시작되기 위해 필요한 서비스가 먼저 나오도록 순서를 지정하십시오.
3. 시작 파일을 /etc/init.d 디렉토리에 넣고 시작할 서비스의 실행 레벨에 따라 필요한 /etc/rc*.d 디렉토리에 링크를 생성하십시오.
   # cd /etc/rc3.d
   # ln /etc/init.d/myfs S22myfs
해결 방법 요약:
제품 영역: 시스템 관리
제품: 부팅
SUNOS 릴리즈: Solaris 2.x
하드웨어: 없음

 

프로세스 주소 공간의 최대 크기

INFODOC ID: 16529
개요: 프로세스 주소 공간의 최대 크기
세부 설명:
프로세스 주소 공간의 최대 크기는 얼마나 됩니까?
대답:32비트 제한이 있습니다. 그러나 2.5 이하 버전에서는 한 프로세스의 주소 공간이 2GB로 제한됩니다.
Solaris 2.5.1의 경우, 103640-07 커널 패치로 제한을 수정하면 이론적으로 4GB까지, 실제로는 약 3.7GB까지 확장할 수 있습니다.
Solaris 2.6의 경우, 이론적으로는 4GB까지 프로세스 주소 공간이 확장되지만 실제로는 약 3.7GB로 제한됩니다.
제품 영역: 커널
제품: 일반
SUNOS 릴리즈: Solaris 2.x
하드웨어: 모든 하드웨어
 

부팅 시 CDE 시작을 명령행에서 시작하고 중단할 수 있습니까?

INFODOC ID: 16551
개요: 부팅 시 CDE 시작을 명령행에서 시작하고 중단할 수 있습니까?
세부 설명:
부팅 시 CDE 시작을 명령행에서 시작하고 중단하려면 어떻게 해야 합니까?
일반적으로 시스템을 부팅할 때 로그인 서버(dtlogin)가 자동으로 시작됩니다. 또 명령행에서 로그인 서버를 시작할 수도 있지만 먼저 root 사용자로 로그인해야 합니다.
-- 시스템을 부팅할 때 로그인 서버가 시작되도록 설정하려면 다음 명령을 입력하고 을 누르십시오.
               /usr/dt/bin/dtconfig -e
그러면 S99dtlogin 파일이 사용자의 /etc/rc2.d 디렉토리에 추가됩니다. 시스템을 다시 부팅하면 로그인 서버가 자동으로 시작됩니다.
-- 시스템을 부팅할 때 로그인 서버의 자동 시작을 비활성화하려면 다음 명령을 입력하고 을 누르십시오
               /usr/dt/bin/dtconfig -d
-- 명령행에서 로그인 서버를 시작하려면 다음 명령을 입력하고 을 누르십시오
               /usr/dt/bin/dtlogin -daemon
-- 로그인 서버, Xserver 및 전체 Solaris CDE 데스크탑을 중지시키려면 다음 명령을 입력하고 을 누르십시오
               /usr/dt/bin/dtconfig -kill
-- 명령행 세션 내에서(dtlogin이 실행되지 않아야 함) 다음과 같이 CDE를 시작하십시오.
               setenv XINITRC /usr/dt/bin/Xsession
               openwin
해결 방법 요약:
제품 영역: Windows
제품: CDE
SUNOS 릴리즈: 없음
하드웨어: 모든 하드웨어
 

root 암호를 모를 경우

INFODOC ID: 16786
개요: root 암호를 모를 경우
세부 설명:
다음 단계는 /etc/shadow 파일을 편집해서 root 암호를 고치는 방법입니다.
1)  Solaris 2.x CD-ROM을 CD-ROM 드라이브에 넣으십시오.
2)  드라이브에 CD-ROM이 있으면 stop-a 명령을 실행하십시오. 그러면 시스템이 중단되고 ok 프롬프트가 나옵니다.
3)  ok 프롬프트에서 Solaris 2.x 설치 CD-ROM을 사용해서 단일 사용자 부팅을 실행하십시오.  
      ok  boot cdrom -s
4)  "#" 프롬프트에서 시스템의 부팅 디스크(root 파일 시스템이 있는)를 찾아야 합니다.
    부팅 디스크에는 몇 가지 sun 아키텍처와 여러 가지 시스템 구성이 있습니다. 일반적으로 부팅 디스크는 대부분 컨트롤러 0(c0)에 설치되어 있습니다. 대부분의 경우, SCSI 대상은 3(t3) 또는 0(t0)입니다. Sun 시스템은 유연성이 좋기 때문에 부팅 디스크가 다른 위치에 있을 수도 있습니다. 부팅 장치의 위치를 결정해야 합니다.
    "#" 프롬프트에 다음과 같이 입력하십시오.
    # eeprom boot-device
    "disk" 또는 "disk1"처럼 간단하게 출력되거나 "/iommu/sbus/espdma@4,8400000/...../sd@3,0:a"와 같이 경로가 출력됩니다. 부팅 장치를 확인하십시오. 부팅 장치가 경로 이름인 경우에는(위와 같이) 사용자 설정 부팅 장치의 위치를 찾는 방법을 이 설명서에서 설명하지 않습니다. 그러나 대부분이 구성에서 쉽게 찾을 수 있습니다.
    "format" 명령을 실행하면 사용 가능한 디스크가 모두 표시됩니다.
    #format
    Searching for disks...done
    AVAILABLE DISK SELECTIONS:
           0. c0t0d0 
              /pci@1f,0/pci@1,1/ide@3/dad@0,0
    Specify disk (enter its number):
    여기서 format 명령을 종료하려면 d를 누르십시오.
    이제 시스템에 어떤 디스크가 있는지 알 수 있습니다. boot-device에 "disk"가 표시되고 format에 "c0t0d0"(일부 시스템에서는 "c0t3d0")이 표시되면 부팅 장치입니다. 또 boot-device에 "disk1"이 표시되고 format에 "c0t1d0"이 표시되면 부팅 장치입니다. format에 여러 디스크가 표시될 경우 "eeprom boot-device" 명령을 실행하면 부팅 디스크가 다음과 같이 표시됩니다.
    boot-device        format
    disk               c0t0d0 or c0t3d0 (machine dependant)
    disk1              c0t1d0
    disk2              c0t2d0
    disk3              c0t3d0 or c0t0d0 (machine dependant)
    and so on ....
    다음에는 시스템이 자연스럽게 다운된 것이 아니므로(root 암호가 없을 경우, Stop-a를 입력해서 시스템을 충돌시켜야 함) "fsck"를 실행해서 root 파티션(슬라이스)을 삭제해야 합니다. 또 fsck를 실행하면 슬라이스를 제대로 선택했는지도 확인할 수 있습니다.
    # fsck /dev/rdsk/cXtYd0s0
    여기서 X와 Y는 이전 절차에서 결정됩니다.
    슬라이스 0(s0)에 없는 root 파티션이 있을 수도 있지만 표준 구성은 아닙니다.
    "fsck"의 결과가 다음과 같이 출력됩니다.
    ** /dev/rdsk/c0t0d0s0
    ** last mounted on /
    ** Phase 1 .....
    .....
    두 번째 행, "** Last mounted on /" 명령을 실행하면 root fs 파티션을 정확하게 확인합니다.
    fsck에서 묻는 질문에 모두 "y"를 입력하십시오.
    고칠 항목이 너무 많으면 안됩니다. 그러면 root fs가 손상될 수 있습니다.
    fsck가 종료되면 root 파티션을 마운트할 수 있습니다.
      # mount /dev/dsk/cXtYd0s0 /a
      X와 Y는 fsck 명령의 경우와 동일합니다.
      예:
      # mount /dev/dsk/c0t0d0s0 /a
5)  root 프롬프트에서 다음 명령을 입력하십시오.
      # TERM=sun; export TERM
6)  다음 명령으로 /etc/shadow 파일을 편집하십시오.
       # vi /a/etc/shadow
7)  파일의 첫 번째 행을 수정해야 할 것입니다. 
    첫 번째 행은 다음과 같습니다.   
       root:c3.yAVmYodWsc:6445::::::
    이 행의 첫 번째와 두 번째 콜론 사이의 모든 문자를 삭제해야 할 것입니다. 완료되면 다음과 같이 됩니다.
       root::6445::::::
    문자를 삭제했으면 쓰기 강제 종료를 실행해서 vi를 종료하십시오. 명령 모드에서 다음과 같이 입력하십시오.
        :wq!
    그러면 문서가 종료되고 변경 사항이 저장됩니다.
8)  다음은 파일 시스템 마운트를 해제하는 단계입니다. 다음 명령을 수행하십시오.
        # cd /
       # umount /a                  
9)  마지막 단계는 시스템을 다시 부팅하는 것입니다. 로그인하라는 메시지가 나오면 로그인 이름을 입력하십시오. 자동으로 들어갈 수 있어야 합니다. 그런 다음 root 암호를 변경하십시오.
제품 영역: 시스템 관리
제품: 부팅
SUNOS 릴리즈: Solaris 2.x
하드웨어: 모든 하드웨어
 

CD-ROM으로 부팅할 때 패치를 설치하는 방법

INFODOC ID: 16790
개요: CD-ROM으로 부팅할 때 패치를 설치하는 방법
세부 설명:
1. root 사용자로 777 사용 권한의 임시 디렉토리에 압축된 패치를 풀어 넣으십시오.
2. 다음 명령을 실행해서 CD-ROM으로 부팅하십시오.
               # init 0                             >>>>> 부트 프롬프트로 이동.
               ok boot cdrom -s               >>>>> CD-ROM에서 단일 사용자 모드로 부팅.
3. 시스템이 시작되면 다음 명령을 실행하십시오.
               # df -k
Filesystem                      kbytes             used               avail               capacity               Mounted on  
/proc                              0               0               0               0%                   /proc 
dev/dsk/c0t3d0s0            7019               29534               40595               43%                 / 
/dev/dsk/c0t3d0g6               671222               456804               213673              69%                 /usr 
fd                                    0               0               0               0%                   /dev/fd 
/dev/dsk/c0t3d0sl           55047               11262               43730               21%                 /var 
/dev/dsk/c0t3d0s5          60591               11829               4802               20%                 /opt 
swap                              86116               400               85716               1%                   /tmp
현재 마운트된 파일 시스템이 표시됩니다.
4. /a에 액세스하기 위해 필요한 파일 시스템( /, /var, /opt, 및 /usr)을 마운트하십시오.
               # mount -F ufs /dev/dsk/c0t3d0s0 /a
               # mount -F ufs /dev/dsk/c0t3d0s1 /a/var
               # mount -F ufs /dev/dsk/c0t3d0s6 /a/usr
               # mount -F ufs /dev/dsk/c0t3d0s5 /a/opt
5. 압축을 풀어 넣은 패치가 있는 임시 디렉토리로 이동하십시오.
6. installpatch 스크립트를 실행하거나 -R 옵션을 사용해서 patchadd(2.6 이상) 명령을 실행하십시오. 
# ./installpatch -R /a 또는 # patchadd -R  /a
7. 스크립트가 실행되면 다음과 같이 표시됩니다. 
               # cd / 
               # umount /a 
               # umount /a/usr 
               # umount /a/var 
               # umount /a/opt
다시 부팅하십시오. 
               # init  6
제품 영역: 시스템 관리
제품: 패치 설치
SUNOS 릴리즈: Solaris 2.x
하드웨어: 모든 하드웨어

 

SunOS, Solaris 2.3부터 2.5.1까지 및 Solaris 2.6의 파일 크기 제한

INFODOC ID: 17075
개요: SunOS, Solaris 2.3부터 2.5.1까지 및 Solaris 2.6의 파일 크기 제한
세부 설명:
SunOS와 Solaris 2.3부터 2.5.1까지는 파일 크기를 2GB까지 지원합니다. 파일 안에 자체 오버헤드(inode 정보 등)가 포함되기 때문에 정확한 실제 크기는 2GB가 조금 안됩니다.
Solaris 2.6에서는 "largefile"을 도입해서 "제한을 높였습니다". 2.6의 largefile은 2GB와 1Tb(테라바이트) 사이의 파일을 의미합니다. 1TB가 Solaris 2.6의 파일 크기 제한입니다. 32비트 시스템에서 2GB 이상의 파일은 모두 largefile입니다.
2.6에서는 largefile을 사용해서 "large file aware" 및 "large file safe" 유틸리티를 도입했습니다. 자세한 설명은 largefile(5) 매뉴얼 페이지에 있습니다.
NFS 서버의 기능과 관계없이 아직 Solaris 2.6으로 업그레이드하지 않은 NFS 클라이언트는 2GB 파일 크기 제한보다 큰 파일을 처리하거나 읽을 수 없습니다.
largefile을 사용하기 위해 자세한 설명을 보려면 2.6 시스템 관리 설명서를 참조하거나 http://docs.sun.com 사이트를 방문하십시오.
제품 영역: 시스템 관리
제품: Disk admin
SUNOS 릴리즈: 모든 릴리즈
하드웨어: 모든 하드웨어
 
모든 dtterm이 역상 비디오를 열도록 CDE를 구성하는 방법
INFODOC ID: 17277
개요: 모든 dtterm이 역상 비디오를 열도록 CDE를 구성하는 방법.
세부 설명:
모든 dtterm이 역상 비디오에 열도록 사용자 단위로 CDE를 구성하려면 $HOME/.Xdefaults 파일에 다음 행을 추가하고 CDE를 종료했다가 다시 CDE에 로그인하십시오.
Dtterm*reverseVideo:    true
모든 dtterm에 이 구성을 사용할 경우:
1. /usr/dt/config/C/sys.resources 파일을 /etc/dt/config/C/sys.resources 파일로 복사하십시오.
2. 다음 행을 sys.resources 파일에 추가하고 로그아웃한 다음 다시 로그인하십시오.
   Dtterm*reverseVideo:    true
제품 영역: Windows
제품: CDE
SUNOS 릴리즈: Solaris 2.x
하드웨어: 모든 하드웨어
 
프론트 패널 표시 없이 CDE를 시작하는 방법
INFODOC ID: 17656
개요: 프론트 패널 표시 없이 CDE를 시작하는 방법
세부 설명:
프론트 패널을 표시하지 않고 CDE를 시작하려면 어떻게 해야 합니까?
다음과 같이 설정하면 dtwm 프론트 패널이 표시되지 않습니다. (dtwm은 CDE용 창 관리자입니다.)
    Dtwm*useFrontPanel:      False
$HOME/.Xdefaults 파일에서 이 자원을 설정할 수도 있고, /usr/dt/app-defaults/C/Dtwm 파일에 있는 기존 글로벌 자원을 "True"에서 "False"로 변경할 수도 있습니다. 이것을 설정하려면 /usr/dt/app-defaults/C/Dtwm을 /etc/dt/app-defaults/C로 복사한 다음 복사한 파일을 편집하십시오.
제품 영역: Windows
제품: CDE
SUNOS 릴리즈: Solaris 2.x
하드웨어: 모든 하드웨어

 

CDE에서 마우스 커서 이미지 변경하기

INFODOC ID: 17789
개요: CDE에서 마우스 커서 이미지 변경하기
세부 설명:
CDE 및 다른 모든 창 관리자에서 기본 마우스 커서 이미지를 변경하려면  "/usr/openwin/bin/xsetroot -cursor" 명령을 사용하고, 사용할 커서 비트맵과 커서 마스크 비트맵의 경로를 지정하십시오.
xsetroot 매뉴얼 페이지의 설명:
     -cursor cursorfile maskfile
이 명령을 사용하면 포인터 커서가 창을 벗어날 경우의 이미지를 원하는 대로 변경할 수 있습니다. 커서와 마스크 파일은 비트맵(작은 그림)이므로, bitmap(1) 프로그램을 사용해서 만들 수 있습니다. 마스크의 작동 원리를 이해할 때까지는 마스크 파일을 모두 검정색으로 사용할 것입니다.
CDE 및 다른 창 관리자에서 각 응용 프로그램이 자체 이미지를 사용해서 기본 마우스 커서 이미지를 재정의할 수 있습니다.
/usr/openwin/bin/bitmap 응용 프로그램을 사용하면 자신의 커서와 커서 마스크 비트맵을 그릴 수 있습니다. 이 응용 프로그램에 대한 자세한 내용은 bitmap 매뉴얼 페이지를 참조하십시오.
:
xsetroot -cursor /usr/openwin/share/src/xview/examples/dnd/arrow.bm
/usr/openwin
/share/src/xview/examples/dnd/arrow_mask.bm
제품 영역: Windows
제품: CDE
SUNOS 릴리즈: Solaris 2.x
하드웨어: 모든 하드웨어
 

VxFS 파일 시스템에 대한 할당량을 설정하는 방법

INFODOC ID: 17846
개요: VxFS 파일 시스템에 대한 할당량을 설정하는 방법 
세부 설명:
VxFS에 대한 할당량 설정
1. 파일 시스템의 마운트 포인트에 quotas라는 파일을 지정하십시오.
   #touch /mntpoint/quotas
2. 이 파일 시스템을 사용할 사용자에 대한 할당량 설정을 초기화하십시오.
   #vxedquota username (vi 편집기가 실행되고 할당량 설정이 표시됨)
   fs /mntpoint blocks (soft = 300, hard = 500) inodes (soft = 1000, hard = 2000)
   blocks는 1K 바이트 데이터 블록을 나타내고 inodes는 사용자가 가질 수 있는 inode 수를 나타냅니다(파일당 1 inode, 디렉토리당 1 inode를 가짐).
   soft 제한은 제한에 근접한 사용자에게 경고하는 데 사용되고, hard 제한은 절대적인 제한값입니다.
3. 이 파일 시스템에서 이 할당량 설정을 적용할 다른 사용자를 추가하십시오.
   vxedquota -p user1 user2 user3 user4 user 5 user6 ...
   이 명령을 사용하면 사용자 1에게 설정한 것과 동일한 할당량 제한이 사용자 2-6에게 설정됩니다(/etc/passwd 파일에서 사용자 이름을 원하는 대로 변경).
4. 사용자에 대한 할당량 설정을 확인하십시오.
   #vxquota -v username
5. 파일 시스템에 대한 할당량을 적용하십시오.
   #vxquotaon -v /mntpoint
   이제 할당량이 실행됩니다.
6. 지정된 할당량을 사용해서 파일 시스템을 마운트하도록 /etc/vfstab를 수정하십시오.
   /dev/dsk/c#t#d#s#   /dev/rdsk/c#t#d#s3   /mntpoint   vxfs   1   yes   quota
제품 영역: 번들을 제외한 SunOS
제품: VxFS
SUNOS 릴리즈: Solaris 2.x
하드웨어: 모든 하드웨어
 
 

로그인 전의 배너를 변경하는 방법(telnet, getty)

INFODOC ID: 17883
개요: 로그인 전의 배너를 변경하는 방법(telnet, getty)
세부 설명:
텔넷이나 터미널 세션에서 로그인 프롬프트 전에 자신이 원하는 로그인 메시지가 표시되도록 하려면 /etc/issue 파일만 편집하면 됩니다.
issue(4) 매뉴얼 페이지의 설명:
     /etc/issue 파일에는 로그인 프롬프트로 출력할 알림 메시지나 프로젝트 확인 정보가 포함됩니다. issue는 getty 프로그램을 사용해서 읽은 다음, lines 파일에서 호출되거나 재호출된 터미널에 기록하는 ASCII 파일입니다.
따라서 2.6 시스템에서는 텔넷에 다음과 같이 표시됩니다.
SunOS 5.6
<사용자가 지정한 메시지>
login:
제품 영역: 기타
제품: issue
SUNOS 릴리즈: Solaris 2.x
하드웨어: 모든 하드웨어

 

프레임 버퍼가 8비트 모드로 실행되는지 24비트 모드로 실행되는지 판단하는 방법

INFODOC ID: 17940
개요: 프레임 버퍼가 8비트 모드로 실행되는지 24비트 모드로 실행되는지 판단하는 방법
세부 설명:
프레임 버퍼가 8비트 모드로 실행되는지 24비트 모드로 실행되는지 판단하는 방법.
- #xdpyinfo | more 명령을 실행하십시오.
- "depth of root window:"라고 출력된 부분으로 내려가십시오.
- 표시된 "# planes"가 프레임 버퍼의 실행 비트 모드와 같습니다.
예를 들어, 다음 행은 프레임 버퍼가 24비트 모드로 실행되고 있음을 의미합니다.
 depth of root window:    24 planes
적용 대상: 하드웨어, 운영 체제/Solaris/Solaris 2.x
 

Solaris 7을 64비트 운영 체제로 실행하기

INFODOC ID: 18313
개요: Solaris 7을 64비트 운영 체제로 실행하기
세부 설명:
 
Solaris 7이 32비트 모드로 로드되어 실행되고 있습니다. flashprom 배너는 비활성화되었습니다. 따라서 flashprom을 업데이트하라는 스크립트가 표시되지 않습니다. 부팅할 때 64비트 운영 체제를 실행하려고 합니다.
다음과 같이 하십시오.
flashprom를 업데이트할 수 있도록 하려면 시스템 보드에서 쓰기 방지 점퍼를 옮겨야 합니다. 점퍼를 옮겨서 쓸 수 있게 하려면 해당 설명서를 참조하십시오. 다음 명령을 사용해서 단일 사용자 모드로 운영 체제를 부팅하십시오.
   boot -sw
flashprom 업데이트는 아키텍처에 따라 다릅니다. 업데이트 파일은 /usr/platform/`uname -i`/prom/`uname -i`에 실행 가능한 쉘 스크립트 형태로 되어 있습니다. (이 스크립트는 /etc/init.d/flashprom 스크립트에서 가져올 수 있습니다.)
프롬프트를 표시하려면 다음 스크립트를 실행하십시오.
   /sbin/sh /usr/platform/`uname -i`/lib/prom/`uname -i`
이 스크립트를 실행하면 프롬프트는 업데이트되지만, 64비트 부트 모드를 완료하려면 boot-file을 kernel/sparcv9/unix로 설정해야 합니다. eeprom 명령을 사용하여 OBP 환경 변수를 다음과 같이 설정하십시오.
    eeprom boot-file=kernel/sparcv9/unix
그런 다음 다시 부팅하십시오.
제품 영역: 시스템 관리
제품: 부팅
SUNOS 릴리즈: Solaris 7
하드웨어: 모든 하드웨어

 

SAR에서 자동 데이터 수집을 위한 cron 설정 방법

INFODOC ID: 18442
개요: SAR에서 자동 데이터 수집을 위한 cron 설정 방법
세부 설명:
SAR에서 자동 데이터 수집을 위한 cron 설정 방법
1. 수퍼유저 권한을 받으십시오.
2. vi 편집기에서 /etc/init.d/perf 파일을 여십시오.
다음과 같은 sadc 시작 명령을 찾으십시오. 이 명령이 있으면 행 앞에서 # 기호를 제거하여 주석 표시를 해제하십시오. 이 명령이 없으면 추가하십시오.  
다음 행에서 주석 표시를 제거하십시오.
               #MATCH=`who -r|grep -c "[234][   ]*0[    ]*[S1]"`
               #if [ ${MATCH} -eq 1 ]
               #then
               #       su sys -c "/usr/lib/sa/sadc /var/adm/sa/sa`date +%d`"
               #fi
 sadc 명령 버전은 카운터가 0으로 설정되는 시간(부팅 시간)을 의미하는 특수 레코드를 기록합니다.
sadc 명령의 출력은 sadd라는 파일에 기록되는데, 여기서 dd는 매일 시스템 작동 레코드로 사용되는 날짜입니다.
3.  vi 편집기에 시스템 crontab 파일을 여십시오.
               /var/spool/cron/crontabs/sys
다음 행을 입력하거나 주석 표시를 제거하십시오.
               0 * * * 0-6 /usr/lib/sa/sa1
               20,40 8-17 * * 1-5 /usr/lib/sa/sa1
첫 번재 항목은 일주일 내내 매시간 계속 /var/adm/sa/sadd에 레코드를 기록합니다.
두 번째 레코드는 작업량이 많은 업무 시간 동안 매시간 두 번씩 /var/aedm/sa/sadd에 레코드를 기록합니다(월요일부터 금요일까지 오전 8시부터 오후 5시 사이에 매시간 20분과 40분에).   필요하면 기본값을 변경하십시오.
4. 시스템을 다시 부팅하면 파일을 다시 읽어서 시작합니다.
적용 대상: 하드웨어, 운영 체제/Solaris/Solaris 2.x
 

Sun Webserver - Servlet 엔진의 heap 크기를 변경하는 방법

INFODOC ID: 18497
개요: Sun Webserver - Servlet 엔진의 heap 크기를 변경하는 방법
세부 설명:
SWS 2.1에서 servlet 엔진의 heap 크기를 변경하려면 어떻게 해야 합니까?
기본 heap 크기는 16 메가바이트입니다.
SWS 2.1에는 Servlet 엔진의 heap 크기를 설정하는 두 가지 구성 변수가 있습니다. 다음 두 변수를 사용해서 이 값을 설정할 수 있습니다.
               server_java_initial_heap_size  
        server_java_max_heap_size      
이 두 변수에 설정되는 값은 바이트 수입니다. 이 변수는 서버 구성 파일에만 나타나기 때문에 GUI를 사용해서 설정할 수 없습니다.
이 파일의 위치에서 위로 올라가서 "서버 블록" 아래에 있는 /etc/httpd/"name_of_server".httpd.conf 파일에 이 변수를 넣으십시오.
변경 사항을 적용하려면 서버를 다시 시작하십시오.
SWS 릴리즈 2.1 이상에만 이 매개변수가 적용됩니다!
제품 영역: 중단되지 않는 네트워크
제품: Sun Web Server
SUNOS 릴리즈: Solaris 2.x
번들을 제외한 릴리즈: 2.1
하드웨어: Sun 4
 

Java WebServer - Servlet을 참조하는 방법

INFODOC ID: 18502
개요: Java WebServer -  Servlet을 참조하는 방법
세부 설명:
Java WebServer에서 Servlet으로 사용할 자바 클래스 파일을 생성했습니다.
Java Web Server가 자바 클래스 파일을 참조할 때 이 파일을 찾도록 하려면 어떻게 해야 합니까?
CLASSPATH 변수가 ".class" servlet 파일의 위치를 지정합니다.
이 변수를 설정할 때는 다음 몇 가지 사항을 고려해야 합니다.
1) 시작할 때 또는 jserv 시작 스크립트에 서버를 지정하지 않으면, 전에 지정한 CLASSPATH 변수의 설정이 Java WebServer에 상속되지 않습니다. 아래에 예가 있습니다.
2) 웹 서버의 "bin" 디렉토리(예: /opt/JavaWebServer1.1.3/bin)에 있는 "httpd.nojre" 스크립트를 사용하면 전에 지정한 CLASSPATH 변수의 설정을 사용할 수 있습니다.
3) CLASSPATH 변수를 명확하게 설정하지 않아도 Java WebServer가 다음 기본 경로에서 .class 파일을 찾도록 설계되어 있습니다.
   Java home 디렉토리(예: /opt/JavaWebServer1.1.3) 아래 다음 디렉토리에서 찾습니다.
                              classes, servlets.
   Java Web Server의 home 디렉토리 아래 "classes" 디렉토리는 기본적으로 존재하는 디렉토리가 아니지만 관리자가 생성할 수 있습니다.
4) 경로의 구성요소가 다른 디렉토리에 대한 링크일 경우, CLASSPATH 변수가 링크를 해석해서 파일을 찾습니다.
5) 참조된 클래스가 다른 클래스를 인스턴스화할 경우에는 이 클래스도 CLASSPATH 변수에 있어야 합니다.
6) CLASSPATH 변수가 설정되면 이 변수에 설정된 디렉토리가 항목 2의 기본 디렉토리에 추가됩니다.
7) "servlets" 또는 "classes" 이외의 클래스 디렉토리 구성요소는 변경한 내용이 동적으로 로드되지 않습니다. 이렇게 다른 디렉토리에 있는 servlet의 변경 사항을 보려면, jserv를 다시 시작하거나 Java Web Server servlet 관리 창에서 직접 클래스를 로드해야 합니다.
아래 예는 /opt/JavaWebServer1.1.3/classes, /opt/JavaWebServer1.1.3/servlets 및/opt/JavaWebServer1.1.3/servlets/test 디렉토리에 액세스할 수 있도록 서버를 시작할 때 클래스 경로를 설정하는 방법입니다.
 
               jserv -classpath "/opt/JavaWebServer1.1.3/servlets/test" &
제품 영역: Java
제품: Java Web Server
SUNOS 릴리즈: Solaris 2.x
하드웨어: 모든 하드웨어

 

crontab 관리 및 사용

INFODOC ID: 3959
개요: crontab 관리 및 사용
세부 설명:
     crontab -e [ username ]                 # edit crontab file
     crontab -l [ username ]                 # list crontab file
     crontab -r [ username ]                 # remove crontab file
    crontab [ filename ]                    # copy to crontab file 
crontab 파일은 사전에 계획된 시간에 사용자 명령을 실행하기 위해 cron에 의해 사용됩니다.
crontab 명령은 지정된 사용자에 대한 crontab 파일을 편집하거나, 표시하거나, 제거하는 데 사용됩니다. root만이 [username] 매개변수를 사용할 수 있습니다.
옵션이나 매개변수 없이 crontab 명령을 실행하면 crontab 파일에 표준 입력을 기록합니다(아래 경고 참조).
crontab 파일의 형식은 다음과 같습니다. 
        Minutes Hours Date Month Day-of-Week command
설명:
        Minutes = [0부터 59까지]
        Hours   = [0부터 23까지]
        Date    = [1부터 31까지]
        Month   = [1부터 12까지]
        Day-of-Week = [0부터 7까지] (0과 7)=일요일, 1=월요일, 
          2=화요일, 3=수요일, 4=목요일, 5=금요일, 6=토요일,
        command = 스크립트 파일 또는 bourne 쉘 파일.
command를 제외한 모든 필드에 와일드 카드 문자(*)를 사용할 수 있고, 필드에 - 기호를 사용해서 범위를 지정할 수 있습니다.
         예:
                30 1 * 2,4,6,8,10,12 3-5 /usr/bin/wall /var/tmp/message 
이 명령은 2개월마다 수요일부터 금요일까지 1시 30분에 wall 명령을 사용해서 시스템의 모든 사용자에게 메시지를 전송합니다.
추가 설명:
경고
실수로 인수를 지정하지 않고 crontab 명령을 입력했을 경우, CTRL-D를 눌러 종료하지 마십시오. 그러면 crontab 파일의 모든 항목이 삭제됩니다. 대신 중지 문자(일반적으로 CTRL-C)를 눌러 종료하십시오.
일반적인 문제/일반적인 해결 방법, 질문/대답:
P: crontab 파일을 편집했지만 계속 실행되지 않습니다.
S: vi와 같은 텍스트 편집기로 직접 crontab 파일을 편집하면 안됩니다. crontab -e 명령을 사용하면 vi를 호출한 다음 변경된 내용을 cron에 알립니다.
P: crontab -e 명령을 사용해서 crontab 항목을 모두 삭제했지만 crontab -l 명령을 실행하면 삭제한 항목이 나옵니다.
S: crontab 파일을 모두 삭제하려면 crontab -r 명령을 사용하십시오. crontab -e 명령은 빈 파일을 처리하지 못하기 때문에 변경된 내용을 업데이트하지 못합니다.
Q: **** 편집기를 사용할 수 있습니까?
A: 예, 환경 변수 EDITOR를 ****으로 설정하면 됩니다.
Q: cron 작업이 중단될 때 전자 우편 메시지를 받는 것은 왜 그렇습니까?
A: 표준 출력 양식이 없기 때문입니다.
   이 메시지를 받지 않으려면 명령을 출력할 장치(/dev/console, /dev/null)나 파일을 지정하십시오.
P: 4.1 이전 시스템을 사용하고 있는데, 가끔 cron 작업이 두 번씩 중단됩니다.
S: 1022379에 대한 패치 100058-01을 전송하십시오.
Q: cron이 정상적으로 실행되고 있는지 확인할 수 있습니까?
A: crontab 파일에 "** * * * date > /dev/console" 항목을 추가하십시오. 그러면 매분마다 콘솔에 날짜가 출력됩니다.
고급 문제:
Q: cron을 사용할 수 있는 사용자를 제한할 수 있습니까?
A: /var/spool/cron/cron.allow 파일을 사용하면 cron 작업을 실행할 수 있는 사용자를 지정할 수 있습니다.
   /var/spool/cron/cron.allow 파일이 없으면 crontab이 /var/spool/cron/cron.deny 파일을 통해 작업을 실행할 수 없는 사용자를 확인합니다.
   두 파일 모두 없으면 root만이 cron 작업을 실행할 수 있습니다.
해결 방법 요약:
제품 영역: 시스템 관리
제품: cron
SUNOS 릴리즈: 4.0, 4.0.3, 4.0.3c, 4.1, 4.1.1, 4.1 PSR
하드웨어: Sun4, Sun3

du와 df가 다른 결과를 표시하는 경우

INFODOC ID: 4083
개요: du와 df가 다른 결과를 표시하는 경우
세부 설명:
"du"와 "df"가 사용된 전체 디스크 공간을 다르게 보고하는 것은 무엇때문입니까?
간단한 설명
다음 세 가지 이유로 du와 df가 서로 다른 대답을 표시할 수 있습니다.
  1. 파일 시스템에 필요한 fsck(1m)이 일정하지 않음.
  2. 파일 시스템에 없는 파일을 열어서 처리.
  3. 데이터가 포함된 디렉토리 마운트 포인트.
자세한 설명
위의 세 가지 가능성을 세부적으로 설명하기 전에 du와 df가 응답을 받는 방법을 알아야 합니다.
 . du는 파일 시스템에서 각 파일의 크기를 차례대로 확인하고 전체 크기를 기억합니다.
 . df는 파일 시스템에 대한 시스템 호출을 작성해서 여러 가지 상세정보를 요청하는데, 그 중 하나가 현재 사용된 디스크 공간입니다.
1. 파일 시스템에 필요한 fsck(1m)이 일정하지 않음.
   파일 시스템이 손상되거나 일정하지 않으면 du와 df가 다를 수 밖에 없습니다. 파일 시스템을 조사하는 프로세스(즉, du)에 의해 확인되는 결과는 실제 파일 시스템(즉, 쿼리 프로세스 df에 반환되는)과 일치하지 않습니다.
   손상되거나 일정하지 않은 파일 시스템은 fsck(1m)를 사용해서 고쳐야 합니다.
2. 파일 시스템에 없는 파일을 열어서 처리.
   실제로 파일과 관련된 디스크 블록을 삭제해도, 파일에 대한 마지막 "참조"가 제거될 때 다시 사용할 수 있도록 설정됩니다. Unix 프로세스가 파일을 열면 해당 파일에 대한 참조 수가 증가합니다. 나중에 파일 시스템에서 파일을 제거하면 프로세스가 파일을 닫을 때까지(close(2) 명령을 사용하든지 프로세스가 종료되든지) 데이터 블록은 사용할 수 있는 상태로 유지됩니다.
   이런 상태에서는 du 프로세스가 파일 시스템에 있는 파일을 확인할 수 없기 때문에 이 파일의 크기를 계산하지 않지만, df(파일 시스템에서 응답을 받는) 프로세스는 파일 시스템에 아직 이 파일이 있다는 것을 확인할 수 있습니다.
   프로세스가 파일을 닫으면(프로세스가 중단되거나 종료되거나 시스템이 다시 부팅되는 경우) 이 디스크 블록이 빈 공간 목록에 포함되므로 du와 df의 결과가 일치합니다.
3. 데이터가 포함된 디렉토리 마운트 포인트.
   파일 시스템은 디렉토리 맨 위에 마운트되기 때문에, 디렉토리 마운트 포인트에 데이터가 있으면 du 프로세스는 이 데이터를 확인할 수 없지만(마운트된 파일 시스템만 확인), 하부 파일 시스템에는 이 데이터에 대한 정보가 계속 유지됩니다. 따라서 df는 사용하고 있는 공간까지 추가해서 보고합니다.
   파일 시스템의 마운트를 해제하면 이 데이터를 확인할 수 있지만, 실행중인 프로세스가 마운트된 파일 시스템을 사용하고 있으면 마운트를 해제할 수 없습니다. 마운트 포인트 디렉토리를 확인하려면 프로세스를 찾아서서 중지시키거나(fuser(1m) 등) 다시 부팅하십시오(단일 사용자 모드에서).
제품 영역: 유틸리티
제품: UNIX 명령
SUNOS 릴리즈: 모든 릴리즈
하드웨어: 모든 하드웨어
Posted by 1010
60.Unix2008. 11. 3. 13:34
반응형
필자가 가지고 있던 장비는 썬 엔터프라이즈 3500 서버로 솔라리스10 에 ZFS 를 운용중이었고 하나의 클라이언트 머신 (썬 Netra X1 서버) 을 가지고 있었습니다. 필자의 회사의 새로운 프로젝트를 위해서 솔라리스10을 클라이언트 머신에 설치해야 했습니다.

필자가 경험한 과정들이 비슷한 작업이 필요한 사람들에게 도움이 되길 바랍니다.

참고: 이 글에서는 솔라리스10 08/07 버전을 사용했지만 03/05 이전의 버전에서도 별 무리 없이 동작할 것입니다.

필요 조건

root 혹은 시스템 관리자로 로그인 하시기 바랍니다.

또한 여러분의 부트 서버를 DHCP 서버로 설정하시기 바랍니다. 필자의 머신의 경우는 DHCP 를 다른 서버에서 얻어오긴 했지만 고정 IP 들을 등록했기 때문에 이러한 과정은 필요치 않았습니다.

또한 tftpnfs 서비스를 실행해야 합니다. 솔라리스10을 설치할때 시작 초기에 NFS 를 활성화 하였지만 tftp 는 서비스를 생성해 주어야 했습니다. 다행이도 이것은 매우 쉽습니다. 왜냐하면 거의 설정이 되어 있기 때문입니다. 여러분이 해야 할일은 단지 아래와 몇가지 변경 만을 수행하는 것입니다:

1. inetd.conf 파일을 수정합니다. 만약 vi 에 익숙하다면 그것을 사용하시기 바랍니다. 그렇지 않다면 다른 텍스트 에디터를 사용하셔도 됩니다. 필자의 머신은 모니터 혹은 키보드가 꼽혀 있지 않았기 때문에 SSH 터미널을 이용해서 수행 하였습니다.

# cd /etc
# vi inetd.conf

2. 파일의 아래쪽으로 스크롤을 내리면 다음과 같은 라인을 발견하실 수 있습니다:

# TFTPD - tftp server (primarily used for booting)
# tftp dgram  udp6  wait root  /usr/sbin/in.tftpd  in.tftpd -s
/tftpboot

3. 마지막줄의 커멘트를 제거 함으로써 다음과 같이 문서를 저장합니다:

tftp  dgram  udp6  wait root /usr/sbin/in.tftpd  in.tftpd -s
/tftpboot

4. :wq 를 입력한 후에 파일을 저장하고 vi 를 종료시킵니다.

5. inetconv 를 실행하여 서비스를 SMF 에 등록시킵니다:

# inetconv

6. 그다음에 svcadm 을 실행하여 서비스를 활성화 시킵니다. 이제 준비가 다 되었습니다:

# svcadm enable tftpd

이제 ZFS 스토리지 풀을 설정하고, 파일을 복사 한다읍에 설정 파일들을 설정하는 작업들이 남았습니다.

ZFS 스토리지 풀 설정하기

솔라리스 점프스타트 서버에 새로운 풀을 생성하였습니다:

# zpool create install c1t7d0

서버에 몇몇 사용하지 않는 예비 디스크들이 있었습니다. 그래서 이것을 솔라리스 점프스타트 서버 풀로 만들었고 그 다음에 share 들을 만들었습니다.

# zfs create install/config
# zfs create install/boot
# zfs set sharenfs=ro,anon=0 install
# zfs set sharenfs=ro,anon=0 install/config
# zfs set sharenfs=ro,anon=0 install/boot

다음으로 모든 디렉토리들이 존재 하는지 그리고 모든 것들이 정확하게 공유 되고 있는지 확인하였습니다:

# cd /install
# ls -l
drwxr-xr-x   4 root     sys       5 Jan  8 10:25 boot
drwxr-xr-x   2 root     sys       9 Jan  8 10:16 config
#
# share
-               /install   ro,anon=0   ""

-               /install/config   ro,anon=0   ""
-               /install/boot   ro,anon=0   ""

파일 복사하기

이제 솔라리스 HW807 SPARC 의 첫번째 CD 를 썬 엔터프라이즈 3500 서버에 집어 넣었습니다. cdrom 디렉토리로 이동한 다음에 setup_install_server 스크립트를 수행하였습니다:

# cd /cdrom/cdrom0/s0/Solaris_10/Tools
# ./setup_install_server /install

스크립트가 실행되었고 필요한 파일들을 /install 디렉토리로 복사 하였습니다. 완료 후에는 루트 디렉토리로 이동 한 다음에 CD 를 배출 시켰습니다:

# cd /
# eject cdrom

이제 두번째 CD 를 CD-ROM 에 넣고 Tools 디렉토리로 이동 해서 add_to_install_server 스크립트를 수행하였습니다:

# cd /cdrom/cdrom0/Solaris_10/Tools
# ./add_to_install_server /install

5개의 CD 에 모든 파일들을 복사할때 까지 유사한 단계들을 진행하였고 언어 CD 또한 /install 디렉토리에 복사 되었습니다.

다시 디스크 1번을 Cd-ROM 에 집어 넣은 다음에 Misc 디렉토리로 이동하였습니다. 그다음 이후 단계에서 생성할 profilerules 파일들을 체크하기 위해서 체크 스크립트를 복사 하였습니다:

# cd /cdrom/cdrom0/s0/Solaris_10/Misc/jumpstart_sample
# cp check /install/config
# cd /install/config

설정 파일들 설정하기

이제 부터가 재미있는 부분으로써 실질적으로 솔라리스 점프스타트에 필요한 파일들을 작성하는 시간입니다.

여러분은 디스크에서 샘플들을 복사해서 여러분에게 맞게 수정할 수 있습니다. 필자는 필자의 시스템의 용도를 알고 있기 때문에 고유의 파일들을 작성하였고 해당 파일들을 검사하고 rules.ok 파일을 생성하기 위해 체크 스크립트를 수행 하였습니다.

제일 처음 생성한 파일은 sysidcfg 입니다. 이 파일은 클라이언트가 초기 부팅 후에 어떠한 셋팅을 가질 지를 알려 줍니다. 만약 이 파일에 정보를 추가하지 않는다면 시스템은 모든 필요한 정보를 여러분에게 요청하게 됩니다. 필자는 vi 를 이용하여 /install/config 에 파일을 생성하였습니다:

# vi sysidcfg
system_locale=en_US.ISO8859-1
timezone=US/Pacific
timeserver=localhost
terminal=vt100
name_service=NONE
security_policy=NONE
root_password=<encrypted password from /etc/shadow>
network_interface=dmfe0 {hostname=<hostname of client>
                         netmask=<your network's netmask>
                         protocol_ipv6=no
                         default_route=<your gateway>}

:wq

그 다음은 rules 파일 입니다. 이 파일은 필자의 설정에서는 아주 간단합니다. 왜냐하면 오직 하나의 서버를 설정하기 때문입니다. rules 파일로 여러가지 작업들을 할 수 있습니다. 만약 솔라리스 CD에 포함되어 있는 샘플 rules 파일을 보신다면 이것을 어떻게 활용할 수 있을지 아이디어를 얻으실 수 있을 것입니다. 다음은 필자가 사용한 설정 입니다.

# vi rules
hostname <hostname of client> - profile -

:wq

begin 스크립트와 finish 스크립트를 사용하지 않는 이상 두개의 "-" 심볼은 반드시 위의 코드에 존재해야 합니다. 만약 사용하는 경우에는 "-" 심볼의 위치에 해당 스크립트들의 이름을 입력 합니다.

클라이언트를 부팅 하기 전에 여러분의 스크립트의 퍼미션을 확인 한 후에 chmod 755 를 수행 하시기 바랍니다. 이에 대한 좀 더 자세한 정보는 솔라리스 CD 의 /Solaris_10/Misc/jumpstart_samples 아래에서 샘플 rules 스크립트를 통해서 좀 더 얻으실 수 있습니다.

그 다음에 여러분은 rules 파일에 여러분이 정의한 대로 여러분의 profile 파일을 생성해야 합니다. 여러분은 rules 파일에 정의한 그대로 profile 파일의 이름을 사용해야 합니다. 필자는 profile 을 rules 파일에 지정했었기 때문에 파일의 이름은 profile 입니다. 필자의 profile 파일은 클라이언트의 파티션 사이즈, 설치 타입 및 클라이언트 타입까지 설정이 되어 있습니다.

다시 한번 vi 를 이용해서 파일을 생성하였습니다. 그러나 솔라리스 CD 안에는 여러가지 샘플들이 존재 함으로 여러분들은 필요에 맞게 수정해서 사용하실 수 있습니다. 중요한 것은 정확한 설치 타입을 아는 것입니다.

cluster 옵션은 소프트웨어 그룹에 따른 설치 타입을 지정 합니다. 다음의 테이블은 사용 가능한 값들을 나타내고 있습니다.

표 1: 소프트웨어 그룹과 그룹 이름들의 값

Reduced Network Support Software Group
SUNWCrnet
Core System Support Software Group
SUNWCreq
End User Solaris Software Group
SUNWCuser
Developer Solaris Software Group
SUNWCprog
Entire Solaris Software Group
SUNWCall
Entire Solaris Software Group Plus OEM Support
SUNWCXall

필자는 다음과 같이 설정 하였습니다:

# vi profile
install_type      initial_install
cluster           SUNWCXall
partitioning      explicit
filesys           c0t0d0s0 14000 /
filesys           c0t0d0s1 2048 /var
filesys           c0t0d0s3 1024 swap
filesys           c0t0d0s7 19500 /export/home
system_type       standalone

:wq

다음 단계는 파일들에 어떠한 실수도 존재하지 않는지 확인 하는 것입니다. 확인을 위해 check 스크립트를 수행 하였습니다.

# ./check

만약 아무런 이상이 없다면 여러분은 /install/config 디렉토리에 rules.ok 라 불리는 파일을 가지게 될 것입니다.

# ls -l
-rwxr-xr-x   1 root     root   59701 Jan  8 10:16 check
-rw-r--r--   1 root     root     232 Jan  8 10:14 profile
-rw-r--r--   1 root     root      32 Jan  8 10:15 rules
-rw-r--r--   1 root     root      57 Jan  8 10:16 rules.ok
-rw-r--r--   1 root     root     278 Jan  8 09:33 sysidcfg

올바르게 부팅 되도록 서버 설정하기

이제 실제로 부팅될 서버를 실제로 설정하는 재미있는 작업을 수행 합니다. 여러분은 클라이언트의 MAC 주소를 얻어와야 합니다. 여기에는 두가지 방법이 존재 합니다: 클라이언트에서 ifconfig -a 를 실행하거나 openboot 프롬프트에서 얻어오는 두가지 방법이 존재 합니다.

MAC 주소를 얻어온 다음 해당 정보를 여러분의 /etc/ethers 파일에 추가시켜 줍니다. 만약 이 파일을 가지고 있지 않다면 생성해 줍니다:

# cd /etc
# vi ethers
0a:3b:ba:f5:d1:e6 <client hostname>

:wq

그다음 여러분의 클라이언트를 /etc/hosts 파일에 추가 시켜 줍니다:

# vi hosts
<ip.address.for.client> <client hostname>

:wq

이제 부트 서버를 생성해야 합니다. CD-ROM 에 솔라리스10 디스크 1번을 집어 넣은 다음에 setup_install_server 를 다시 실행 합니다. 이번엔 -b 옵션과 /install/boot 디렉토리 옵션을 줍니다:

# cd /cdrom/cdrom0/s0/Solaris_10/Tools
# ./setup_install_server -b /install/boot

위의 작업이 완료 되면 CD 를 배출 합니다:

# cd /
# eject cdrom

클라이언트 설정하기

이제 클라이언트를 설정할 시간입니다. 아래와 같은 커맨드를 수행 하였습니다. 필자는 CD를 복사한 /install 디렉토리에서 직접적으로 실행 하였습니다.

주의: 아래의 작업은 CD 에서가 아닌 설치 이미지에서 반드시 수행 해야 합니다. 여러분이 커맨드를 실행한 위치가 클라이언트가 부트 이미지를 찾을 위치이기 때문입니다. 만약 CD 에서 설치 한다면 클라이언트는 CD 에서 부트 이미지를 찾을 것이고 여러분이 NFS 를 통해서 CD-ROM 을 공유하고 있지 한다면 커맨드는 실패할 것입니다.

# cd /install/Solaris_10/Tools
# ./add_install_client -e 0a:3b:ba:f5:d1:e6 -s

<server hostname>:/install -c
<server hostname>:/install/config -p
<server hostname>:/install/config <client hostname>
sun4u

이전의 커맨드들은 필요한 모든 파일들을 생성하였습니다. 그러므로 클라이언트는 부팅이 가능하고 솔라리스 설치를 시작하는데에 필요한 모든 것들을 찾을 수 있습니다. 아래는 플래그가 의미하는 바를 정리한 것입니다:

  • -e 는 클라이언트의 MAC 주소를 지정합니다.
  • -s 는 서버 설치 파일들의 위치를 지정합니다.
  • -c 는 솔라리스 점프스타트 설정 장소를 지정합니다.
  • -psysidcfg 파일의 위치를 지정합니다.
  • sun4u 는 클라이언트의 아키텍쳐를 지정합니다.

클라이언트 부팅하기

이제 클라이언트를 부팅할 준비가 되었습니다.

주의: 필자의 썬 Netra X1 서버에서 필자는 lights on management (LOM) 콘솔을 # 을 눌러서 들어갈 수 있었습니다. 그리고 breakLOM> 프롬프트에 입력하였습니다. OpenBoot 프롬프트로 들어가기 위해 필요한 어떤 작업이라도 수행하시기 바랍니다.

클라이언트에서 OpenBoot OK 프롬프트로 들어간 다음에 다음의 커맨드를 수행 합니다:

ok> boot net - install

필자가 해당 커맨드를 실행하였을때 클라이언트는 서버에 접속하였고 OS 를 다운로드한 다음에 설치 하였습니다. 필자가 해야할 일은 단지 기본 IPv4 설정을 사용하도록 알려 주는 것 뿐이었고 나머지는 알아서 수행 되었습니다.

저자에 관하여

Lucas Williams 는 UNIX 와 마이크로소프트 윈도우즈 시스템 관리자로 15년 이상 일해 왔습니다. 그는 리눅스, 솔라리스(2.6 부터 10 까지), 노벨 네트워킹, 마이크로 소프트 윈도우즈 NT 3.51 부터 서버 2008 까지의 다양한 경험이 있습니다. 스크립트 작성이 가능하고 프로덕션 환경에 배치하기전에 신기술들의 베타 테스트를 수행 합니다. 현재 그는 프로덕션 환경에서 서버를 배치할때 사용될 다양한 가상화 기술에 대해 연구하고 있습니다.


이 글의 영문 원본은
Setting Up JumpStart With Solaris 10 OS for SPARC Platforms and ZFS
에서 보실 수 있습니다.

"관리자코너" 카테고리의 다른 글

Posted by 1010
60.Unix2008. 11. 3. 13:05
반응형

14장 SPARC: WAN 부트 설치(작업)

이 장에서는 SPARC 기반 클라이언트에 WAN 부트를 설치하는 방법에 대해 설명합니다. WAN 부트 설치를 준비하는 방법은 13 장, WAN 부트 사용 설치 준비(작업) 을 참조하십시오.

이 장은 다음 내용으로 구성되어 있습니다.

작업 맵: WAN 부트를 사용하여 클라이언트 설치

다음 표에는 WAN을 통해 클라이언트를 설치하는 데 필요한 작업이 나열되어 있습니다.

표 14–1 작업 맵: WAN 부트 설치 수행

작업

설명

지침

WAN 부트 설치를 위해 네트워크를 준비합니다.

WAN 부트 설치를 수행하는 데 필요한 서버 및 파일을 설정합니다.

13 장, WAN 부트 사용 설치 준비(작업)

net 장치 별명이 클라이언트 OBP에 올바르게 설정되어 있는지 확인합니다.

devalias 명령을 사용하여 net 장치 별명이 주 네트워크 인터페이스로 설정되어 있는지 확인합니다.

클라이언트 OBP에서 net 장치 별명 확인

클라이언트에 키를 제공합니다.

설치하는 동안 OBP 변수를 설정하거나 키 값을 입력하여 키를 제공합니다.

보안 설치 구성에 이 작업이 필요합니다. 데이터 무결성을 검사하는 비보안 설치의 경우 이 작업을 완료하여 클라이언트에게 HMAC SHA1 해싱 키를 제공합니다.

클라이언트에 키 설치

WAN (wide area network)을 통해 클라이언트를 설치합니다.

적절한 방법을 선택하여 클라이언트를 설치합니다.

비대화식 WAN 부트 설치 수행

대화식 WAN 부트 설치 수행

DHCP 서버를 사용하여 WAN 부트 설치 수행

로컬 CD 매체를 사용하여 WAN 부트 설치 수행

WAN 부트 설치를 위한 클라이언트 준비

클라이언트 시스템을 설치하기 전에 다음 작업을 수행하여 클라이언트를 준비합니다.

절차 클라이언트 OBP에서 net 장치 별명 확인

boot net를 사용하여 WAN에서 클라이언트를 부트하려면 net 장치 별명을 클라이언트의 기본 네트워크 장치로 설정해야 합니다. 대부분의 시스템에서 이 별명은 이미 올바르게 설정되어 있습니다. 그러나 사용하려는 네트워크 장치에 별명이 설정되지 않은 경우 반드시 별명을 변경해야 합니다.

장치 별명 설정에 대한 자세한 내용은 OpenBoot 3.x Command Reference Manual의 “The Device Tree”를 참조하십시오.

클라이언트에서 net 장치 별명을 확인하려면 다음 단계를 수행합니다.

단계
  1. 클라이언트에서 수퍼유저가 되도록 합니다.

  2. 시스템의 실행 수준이 0이 되도록 합니다.


     # init 0
    

    ok 프롬프트가 표시됩니다.

  3. ok 프롬프트에서 OBP에 설정된 장치 별명을 확인합니다.


    ok devalias
    

    devalias 명령은 다음 예와 유사한 정보를 출력합니다.


    screen                   /pci@1f,0/pci@1,1/SUNW,m64B@2
    net                      /pci@1f,0/pci@1,1/network@c,1
    net2                     /pci@1f,0/pci@1,1/network@5,1
    disk                     /pci@1f,0/pci@1/scsi@8/disk@0,0
    cdrom                    /pci@1f,0/pci@1,1/ide@d/cdrom@0,0:f
    keyboard                 /pci@1f,0/pci@1,1/ebus@1/su@14,3083f8
    mouse                    /pci@1f,0/pci@1,1/ebus@1/su@14,3062f8
    • net 별명이 설치하는 동안 사용할 네트워크 장치로 설정되어 있으면 별명을 재설정할 필요가 없습니다. 설치를 계속하려면 클라이언트에 키 설치로 이동합니다.

    • net 별명이 사용할 네트워크 장치로 설정되어 있지 않으면 별명을 다시 설정해야 합니다. 계속합니다.

  4. net 장치 별명을 설정합니다.

    net 장치 별명을 설정하려면 다음 명령 중 하나를 선택합니다.

    • 이 설치에 대해서만 net 장치 별명을 설정하려면 devalias 명령을 사용합니다.


      ok devalias net device-path
      
      net device-path

      장치 device-pathnet 별명에 할당합니다.

    • net 장치 별명을 영구적으로 설정하려면 nvalias 명령을 사용합니다.


      ok nvalias net device-path
      
      net device-path

      net 별명에 장치 device-path 를 지정합니다.


예 14–1 net 장치 별명 확인 및 재설정

다음 명령은 net 장치 별명을 확인하고 재설정하는 방법을 보여 줍니다.

장치 별명을 확인합니다.


ok devalias
screen                   /pci@1f,0/pci@1,1/SUNW,m64B@2
net                      /pci@1f,0/pci@1,1/network@c,1
net2                     /pci@1f,0/pci@1,1/network@5,1
disk                     /pci@1f,0/pci@1/scsi@8/disk@0,0
cdrom                    /pci@1f,0/pci@1,1/ide@d/cdrom@0,0:f
keyboard                 /pci@1f,0/pci@1,1/ebus@1/su@14,3083f8
mouse                    /pci@1f,0/pci@1,1/ebus@1/su@14,3062f8

/pci@1f,0/pci@1,1/network@5,1 네트워크 장치를 사용하려면 다음 명령을 입력합니다.


ok devalias net /pci@1f,0/pci@1,1/network@5,1

WAN 부트 설치 계속

net 장치 별명을 확인한 후 적절한 부분을 참조하여 설치를 계속합니다.

클라이언트에 키 설치

보다 안전한 WAN 부트 설치나 데이터 무결성 검사를 사용한 비보안 설치의 경우 클라이언트에 키를 설치해야 합니다. 해싱 키와 암호 키를 사용하여 클라이언트로 전송된 데이터를 보호할 수 있습니다. 다음 방법으로 이러한 키를 설치할 수 있습니다.

  • OBP 변수 설정 – 클라이언트를 부트하기 전에 OBP 네트워크 부트 인수 변수에 키 값을 할당할 수 있습니다. 이러한 키는 나중에 클라이언트의 WAN 부트 설치에 사용할 수 있습니다.

  • 부트 프로세스 도중 키 값 입력 wanboot 프로그램 boot> 프롬프트에서 키 값을 설정할 수 있습니다. 이 방법으로 설치 키를 사용하면 해당 설치 키는 현재 WAN 부트 설치에 대해서만 사용됩니다.

또한 실행 중인 클라이언트의 OBP에 키를 설치할 수도 있습니다. 실행 중인 클라이언트에 키를 설치하려는 경우 시스템에 반드시 Solaris 9 12/03 OS 또는 호환 버전이 실행되어야 합니다.

클라이언트에 키를 설치하는 경우 비보안 연결을 통해 키가 전송되지 않는지 확인합니다. 사용자 사이트의 보안 정책을 수행하여 키 값의 프라이버시를 보장합니다.

절차 클라이언트 OBP에 키 설치

클라이언트를 부트하기 전에 OBP 네트워크 부트 인수에 대한 키 값을 지정할 수 있습니다. 이러한 키는 나중에 클라이언트의 WAN 부트 설치에 사용할 수 있습니다.

클라이언트 OBP에 키를 설치하려면 다음과 같이 합니다.

OBP 네트워크 부트 인자에 키 값을 할당하려면 다음 단계를 수행합니다.

단계
  1. WAN 부트 서버의 웹 서버 사용자와 동일한 사용자 역할을 가정합니다.

  2. 각 클라이언트 키 값을 표시합니다.


    # wanbootutil keygen -d -c -o net=net-ip,cid=client-ID,type=key-type
    
    net-ip

    클라이언트 서브넷의 IP 주소입니다.

    client-ID

    설치할 클라이언트의 ID입니다. 클라이언트 ID는 사용자 정의 ID나 DHCP 클라이언트 ID일 수 있습니다.

    key-type

    클라이언트에 설치할 키 유형입니다. 유효한 키 유형은 3des, aes 또는 sha1입니다.

    키의 16진수 값이 표시됩니다.

  3. 설치할 각 클라이언트 키 유형에 대해 이전 단계를 반복합니다.

  4. 클라이언트 시스템의 실행 수준이 0이 되도록 합니다.


    # init 0
    

    ok 프롬프트가 표시됩니다.

  5. 클라이언트 ok 프롬프트에서 해싱 키의 값을 설정합니다.


    ok set-security-key wanboot-hmac-sha1 key-value
    
    set-security-key

    클라이언트에 키를 설치합니다.

    wanboot-hmac-sha1

    OBP에 지시하여 HMAC SHA1 해싱 키를 설치합니다.

    key-value

    단계 2에 표시된 16진수 문자열을 지정합니다.

    HMAC SHA1 해싱 키는 클라이언트 OBP에 설치됩니다.

  6. 클라이언트 ok 프롬프트에서 암호 키를 설치합니다.


    ok set-security-key wanboot-3des key-value
    
    set-security-key

    클라이언트에 키를 설치합니다.

    wanboot-3des

    OBP에 지시하여 3DES 암호 키를 설치합니다. AES 암호 키를 사용하려면 이 값을 wanboot-aes로 설정합니다.

    key-value

    암호 키를 나타내는 16진수 문자열을 지정합니다.

    3DES 암호 키가 클라이언트 OBP에 설치됩니다.

    키를 설치하였으면 클라이언트를 설치할 준비가 된 것입니다. 클라이언트 시스템을 설치하는 방법은 클라이언트 설치를 참조하십시오.

  7. (옵션) 키가 클라이언트 OBP에 설정되어 있는지 확인합니다.


    ok list-security-keys
    Security Keys:
             wanboot-hmac-sha1
             wanboot-3des
  8. (옵션) 키를 삭제해야 할 경우 다음 명령을 입력합니다.


    ok set-security-key key-type
    
    key-type

    삭제해야 하는 키 유형을 지정합니다. wanboot-hmac-sha1, wanboot-3des , wanboot-aes 값 중 하나를 사용합니다.


예 14–2 클라이언트 OBP에 키 설치

다음 예는 클라이언트 OBP에 해싱 키와 암호 키를 설치하는 방법을 보여 줍니다.

WAN 부트 서버의 키 값을 표시합니다.


# wanbootutil keygen -d -c -o net=192.168.198.0,cid=010003BA152A42,type=sha1
b482aaab82cb8d5631e16d51478c90079cc1d463
# wanbootutil keygen -d -c -o net=192.168.198.0,cid=010003BA152A42,type=3des
9ebc7a57f240e97c9b9401e9d3ae9b292943d3c143d07f04

위 예에서는 다음 정보를 사용합니다.

net=192.168.198.0

클라이언트 서브넷의 IP 주소를 지정합니다.

cid=010003BA152A42

클라이언트의 ID를 지정합니다.

b482aaab82cb8d5631e16d51478c90079cc1d463

클라이언트의 HMAC SHA1 해싱 키 값을 지정합니다.

9ebc7a57f240e97c9b9401e9d3ae9b292943d3c143d07f04

클라이언트의 3DES 암호 키 값을 지정합니다.

설치 시 AES 암호화 키를 사용하는 경우 wanboot-3deswanboot-aes로 변경하여 암호화 키 값을 표시합니다.

클라이언트 시스템에 키를 설치합니다.


ok set-security-key wanboot-hmac-sha1 b482aaab82cb8d5631e16d51478c90079cc1d463
ok set-security-key wanboot-3des 9ebc7a57f240e97c9b9401e9d3ae9b292943d3c143d07f04

위 명령으로 다음 작업을 수행합니다.

  • b482aaab82cb8d5631e16d51478c90079cc1d463 값을 가진 HMAC SHA1 해싱 키를 클라이언트에 설치합니다.

  • 9ebc7a57f240e97c9b9401e9d3ae9b292943d3c143d07f04 값을 가진 3DES 암호화 키를 클라이언트에 설치합니다.

    설치 시 AES 암호화 키를 사용하는 경우 wanboot-3deswanboot-aes로 변경합니다.


WAN 부트 설치 계속

클라이언트에 키를 설치한 후 WAN을 통하여 클라이언트를 설치할 수 있습니다. 방법은 클라이언트 설치를 참조하십시오.

참조

키 값을 표시하는 자세한 방법은 wanbootutil(1M)매뉴얼 페이지를 참조하십시오.

절차 실행 중인 클라이언트에 해싱 키 및 암호 키 설치

실행 중인 시스템의 wanboot 프로그램 boot> 프롬프트에서 키 값을 설정할 수 있습니다. 이 방법으로 설치 키를 사용하면 해당 설치 키는 현재 WAN 부트 설치에 대해서만 사용됩니다.

실행 중인 클라이언트 OBP에 해싱 키와 암호 키를 설치하려면 다음 단계를 수행합니다.

시작하기 전에

이 절차에서는 다음을 가정합니다.

  • 클라이언트 시스템의 전원이 켜져 있습니다.

  • 보안 쉘(ssh) 같은 보안 연결을 통해 클라이언트에 액세스할 수 있습니다.

단계
  1. WAN 부트 서버의 웹 서버 사용자와 동일한 사용자 역할을 가정합니다.

  2. 클라이언트 키 값을 표시합니다.


    # wanbootutil keygen -d -c -o net=net-ip,cid=client-ID,type=key-type
    
    net-ip

    클라이언트 서브넷의 IP 주소입니다.

    client-ID

    설치할 클라이언트의 ID입니다. 클라이언트 ID는 사용자 정의 ID나 DHCP 클라이언트 ID일 수 있습니다.

    key-type

    클라이언트에 설치할 키 유형입니다. 유효한 키 유형은 3des, aes 또는 sha1입니다.

    키의 16진수 값이 표시됩니다.

  3. 설치할 각 클라이언트 키 유형에 대해 이전 단계를 반복합니다.

  4. 클라이언트 시스템의 수퍼유저가 되도록 합니다.

  5. 실행 중인 클라이언트 시스템에 필요한 키를 설치합니다.


    # /usr/lib/inet/wanboot/ickey -o type=key-type
    > key-value
    
    key-type

    클라이언트에 설치할 키 유형을 지정합니다. 유효한 키 유형은 3des, aes 또는 sha1입니다.

    key-value

    단계 2에 표시된 16진수 문자열을 지정합니다.

  6. 설치할 각 클라이언트 키 유형에 대해 이전 단계를 반복합니다.

    키를 설치한 후 클라이언트를 설치할 수 있습니다. 클라이언트 시스템을 설치하는 방법은 클라이언트 설치를 참조하십시오.


예 14–3 실행 중인 클라이언트 시스템 OBP에 키 설치

다음 예는 실행 중인 클라이언트 OBP에 키를 설치하는 방법을 보여 줍니다.

WAN 부트 서버의 키 값을 표시합니다.


# wanbootutil keygen -d -c -o net=192.168.198.0,cid=010003BA152A42,type=sha1
b482aaab82cb8d5631e16d51478c90079cc1d463
# wanbootutil keygen -d -c -o net=192.168.198.0,cid=010003BA152A42,type=3des
9ebc7a57f240e97c9b9401e9d3ae9b292943d3c143d07f04

위 예에서는 다음 정보를 사용합니다.

net=192.168.198.0

클라이언트 서브넷의 IP 주소를 지정합니다.

cid=010003BA152A42

클라이언트의 ID를 지정합니다.

b482aaab82cb8d5631e16d51478c90079cc1d463

클라이언트의 HMAC SHA1 해싱 키 값을 지정합니다.

9ebc7a57f240e97c9b9401e9d3ae9b292943d3c143d07f04

클라이언트의 3DES 암호 키 값을 지정합니다.

설치에서 AES 암호화 키를 사용하는 경우 type=3destype=aes로 변경하여 암호화 키 값을 표시합니다.

실행 중인 클라이언트 OBP에 키를 설치합니다.


# /usr/lib/inet/wanboot/ickey -o type=sha1 b482aaab82cb8d5631e16d51478c90079cc1d463
# /usr/lib/inet/wanboot/ickey -o type=3des 9ebc7a57f240e97c9b9401e9d3ae9b292943d3c143d07f04

위 명령으로 다음 작업을 수행합니다.

  • b482aaab82cb8d5631e16d51478c90079cc1d463 값을 가진 HMAC SHA1 해싱 키를 클라이언트에 설치합니다.

  • 9ebc7a57f240e97c9b9401e9d3ae9b292943d3c143d07f04 값을 가진 3DES 암호화 키를 클라이언트에 설치합니다.


WAN 부트 설치 계속

클라이언트에 키를 설치한 후 WAN을 통하여 클라이언트를 설치할 수 있습니다. 방법은 클라이언트 설치를 참조하십시오.

참조

키 값을 표시하는 자세한 방법은 wanbootutil(1M)매뉴얼 페이지를 참조하십시오.

실행 중인 시스템에 키를 설치하는 자세한 방법은 ickey(1M)을 참조하십시오.

클라이언트 설치

WAN 부트 설치를 위한 네트워크 준비를 마쳤으면 다음 중 한 가지 방법을 선택하여 시스템을 설치할 수 있습니다.

표 14–2 클라이언트 설치 방법

방법

설명

지침

비대화식 설치

클라이언트를 부트하기 전에 클라이언트에 키를 설치하고 클라이언트 구성 정보를 설정하려면 이 설치 방법을 사용합니다.

대화식 설치

부트 프로세스 도중 클라이언트 구성 정보를 설정하려면 이 설치 방법을 사용합니다.

대화식 WAN 부트 설치 수행

DHCP 서버를 사용하여 설치

설치 도중 클라이언트 구성 정보를 제공하도록 네트워크 DHCP 서버를 구성한 경우 이 설치 방법을 사용합니다.

로컬 CD 매체를 사용하여 설치

클라이언트 OBP가 WAN 부트를 지원하지 않는 경우 Solaris 10 Software CD의 로컬 사본에서 클라이언트를 부트합니다.

절차 비대화식 WAN 부트 설치 수행

클라이언트를 설치하기 전에 키를 설치하고 클라이언트 구성 정보를 설정하려면 이 설치 방법을 사용합니다. 그런 다음 WAN에서 클라이언트를 부트하여 무인 설치를 수행할 수 있습니다.

이 절차에서는 클라이언트 OBP에 키를 설치했거나 비보안 설치를 수행 중이라고 가정합니다설치 전에 클라이언트에 키를 설치하는 방법은 클라이언트에 키 설치를 참조하십시오.

단계
  1. 클라이언트 시스템이 현재 실행 중인 경우 시스템의 실행 수준이 0이 되도록 합니다.


    # init 0
    

    ok 프롬프트가 표시됩니다.

  2. 클라이언트 시스템의 ok 프롬프트에서 OBP의 네트워크 부트 인자 변수를 설정합니다.


    ok setenv network-boot-arguments  host-ip=client-IP,
    router-ip=router-ip,subnet-mask=mask-value,
    hostname=client-name,http-proxy=proxy-ip:port,
    file=wanbootCGI-URL
    

    주 –

    이 명령 샘플의 줄 바꿈은 형식 지정 용도로만 포함됩니다. 명령 입력을 마칠 때까지는 캐리지 리턴을 입력하지 마십시오.


    setenv network-boot-arguments

    OBP가 다음 부트 인수를 설정하도록 지시합니다.

    host-ip=client-IP

    클라이언트의 IP 주소를 지정합니다.

    router-ip=router-ip

    네트워크 라우터의 IP 주소를 지정합니다.

    subnet-mask=mask-value

    서브넷 마스크 값을 지정합니다.

    hostname=client-name

    클라이언트의 호스트 이름을 지정합니다.

    (선택 사항) http-proxy=proxy-ip:port

    네트워크의 프록시 서버 IP 주소와 포트를 지정합니다.

    file=wanbootCGI-URL

    웹 서버에서 wanboot-cgi 프로그램의 URL을 지정합니다.

  3. 클라이언트를 부트합니다.


    ok boot net - install
    
    net - install

    네트워크 부트 인자 변수를 사용하여 WAN에서 부트하도록 클라이언트에 지시합니다.

    클라이언트가 WAN을 통하여 설치합니다. WAN 부트 프로그램에서 필요한 설치 정보를 모두 찾지 못한 경우 wanboot 프로그램은 빠진 정보를 입력하라는 프롬프트를 표시합니다. 프롬프트에 추가 정보를 입력합니다.


예 14–4 비대화식 WAN 부트 설치

다음 예에서 클라이언트 시스템 myclient의 네트워크 부트 인수 변수는 컴퓨터가 부트되기 전에 설정됩니다. 이 예에서는 해싱 키와 암호 키가 이미 클라이언트에 설치되어 있다고 가정합니다. WAN에서 부트하기 전에 키를 설치하는 방법은 클라이언트에 키 설치를 참조하십시오.


ok setenv network-boot-arguments host-ip=192.168.198.136,
router-ip=192.168.198.129,subnet-mask=255.255.255.192
hostname=myclient,file=http://192.168.198.135/cgi-bin/wanboot-cgi
ok boot net - install
Resetting ...




Sun Blade 100 (UltraSPARC-IIe), No Keyboard
Copyright 1998-2003 Sun Microsystems, Inc.  All rights reserved.
OpenBoot 4.x.build_28, 512 MB memory installed, Serial #50335475.
Ethernet address 0:3:ba:e:f3:75, Host ID: 83000ef3.



Rebooting with command: boot net - install
Boot device: /pci@1f,0/network@c,1  File and args: - install

다음 변수가 설정됩니다.

  • 클라이언트 IP 주소가 192.168.198.136으로 설정됩니다.

  • 클라이언트의 라우터 IP 주소가 192.168.198.129로 설정됩니다.

  • 클라이언트의 서브넷 마스크가 255.255.255.192로 설정됩니다.

  • 클라이언트의 호스트 이름이 seahag로 설정됩니다.

  • wanboot-cgi 프로그램은 http://192.168.198.135/cgi-bin/wanboot-cgi에 있습니다.


참조

네트워크 부트 인수를 설정하는 자세한 내용은 set(1)을 참조하십시오.

시스템을 부트하는 자세한 내용은 boot(1M)을 참조하십시오.

절차 대화식 WAN 부트 설치 수행

설치 도중 명령줄에서 키를 설치하고 클라이언트 구성 정보를 설정하는 경우 이 설치 방법을 사용합니다.

이 절차에서는 사용자 WAN 설치에 HTTPS를 사용하고 있다고 가정합니다. 키를 사용하지 않는 비보안 설치를 수행하는 경우 클라이언트 키를 표시하거나 설치하지 마십시오.

단계
  1. WAN 부트 서버의 웹 서버 사용자와 동일한 사용자 역할을 가정합니다.

  2. 각 클라이언트 키 값을 표시합니다.


    # wanbootutil keygen -d -c -o net=net-ip,cid=client-ID,type=key-type
    
    net-ip

    설치할 클라이언트 서브넷의 IP 주소입니다.

    client-ID

    설치할 클라이언트의 ID입니다. 클라이언트 ID는 사용자 정의 ID나 DHCP 클라이언트 ID일 수 있습니다.

    key-type

    클라이언트에 설치할 키 유형입니다. 유효한 키 유형은 3des, aes 또는 sha1입니다.

    키의 16진수 값이 표시됩니다.

  3. 설치 중인 각 클라이언트 키 유형에 대해 이전 단계를 반복합니다.

  4. 클라이언트 시스템이 현재 실행 중인 경우 클라이언트가 실행 수준 0이 되도록 합니다.

  5. 클라이언트 시스템의 ok 프롬프트에서 OBP의 네트워크 부트 인수 변수를 설정합니다.


    ok setenv network-boot-arguments  host-ip=client-IP,router-ip=router-ip,
    subnet-mask=mask-value,hostname=client-name,
    http-proxy=proxy-ip:port,bootserver=wanbootCGI-URL
    

    주 –

    이 명령 샘플의 줄 바꿈은 형식 지정 용도로만 포함됩니다. 명령 입력을 마칠 때까지는 캐리지 리턴을 입력하지 마십시오.


    setenv network-boot-arguments

    OBP에 지시하여 다음 부트 인자를 설정합니다.

    host-ip=client-IP

    클라이언트의 IP 주소를 지정합니다.

    router-ip=router-ip

    네트워크 라우터의 IP 주소를 지정합니다.

    subnet-mask=mask-value

    서브넷 마스크 값을 지정합니다.

    hostname=client-name

    클라이언트의 호스트 이름을 지정합니다.

    (선택 사항) http-proxy=proxy-ip:port

    네트워크 프록시 서버의 IP 주소와 포트 번호를 지정합니다.

    bootserver=wanbootCGI-URL

    웹 서버에서 wanboot-cgi 프로그램의 URL을 지정합니다.


    주 –

    bootserver 변수의 URL 값은 HTTPS URL이 아니어야 합니다. URL은 http://로 시작해야 합니다.


  6. 클라이언트 ok 프롬프트에서 시스템을 부트합니다.


    ok boot net -o prompt - install
    
    net -o prompt - install

    클라이언트에 지시하여 네트워크에서 부트하고 설치합니다. wanboot 프로그램은 boot> 프롬프트에서 클라이언트 구성 정보를 입력하라는 메시지를 표시합니다.

    boot> 프롬프트가 표시됩니다.

  7. 암호화 키를 설치합니다.


    boot> 3des=key-value
    
    3des=key-value

    단계 2에서 설치한 3DES의 16진수 문자열을 지정합니다.

    AES 암호 키를 사용하는 경우 다음 형식으로 이 명령을 사용합니다.


    boot> aes=key-value
    
  8. 해싱 키를 설치합니다.


    boot> sha1=key-value
    
    sha1=key-value

    단계 2에 표시된 해싱 키 값을 지정합니다.

  9. 부트 프로세스를 계속하려면 다음 명령을 입력합니다.


    boot> go
    

    클라이언트는 WAN을 통해 설치합니다.

  10. 프롬프트가 표시되면 명령줄에 클라이언트 구성 정보를 입력합니다.

    WAN 부트 프로그램이 필요한 설치 정보를 모두 찾을 수 없는 경우 wanboot 프로그램에 누락된 정보를 입력하라는 프롬프트가 표시됩니다. 프롬프트에 추가 정보를 입력합니다.


예 14–5 대화식 WAN 부트 설치

다음 예에서 wanboot 프로그램은 설치 도중 클라이언트 시스템에 대해 키 값을 설정하라는 메시지를 표시합니다.

WAN 부트 서버의 키 값을 표시합니다.


# wanbootutil keygen -d -c -o net=192.168.198.0,cid=010003BA152A42,type=sha1
b482aaab82cb8d5631e16d51478c90079cc1d463
# wanbootutil keygen -d -c -o net=192.168.198.0,cid=010003BA152A42,type=3des
9ebc7a57f240e97c9b9401e9d3ae9b292943d3c143d07f04

위 예에서는 다음 정보를 사용합니다.

net=192.168.198.0

클라이언트 서브넷의 IP 주소를 지정합니다.

cid=010003BA152A42

클라이언트의 ID를 지정합니다.

b482aaab82cb8d5631e16d51478c90079cc1d463

클라이언트의 HMAC SHA1 해싱 키 값을 지정합니다.

9ebc7a57f240e97c9b9401e9d3ae9b292943d3c143d07f04

클라이언트의 3DES 암호 키 값을 지정합니다.

설치에서 AES 암호화 키를 사용하는 경우 type=3destype=aes로 변경하여 암호화 키 값을 표시합니다.

클라이언트에 있는 OBP의 네트워크 부트 인자 변수를 설정합니다.


ok setenv network-boot-arguments host-ip=192.168.198.136,
router-ip=192.168.198.129,subnet-mask=255.255.255.192,hostname=myclient,
bootserver=http://192.168.198.135/cgi-bin/wanboot-cgi

다음 변수가 설정됩니다.

  • 클라이언트 IP 주소가 192.168.198.136으로 설정됩니다.

  • 클라이언트의 라우터 IP 주소가 192.168.198.129로 설정됩니다.

  • 클라이언트의 서브넷 마스크가 255.255.255.192로 설정됩니다.

  • 클라이언트의 호스트 이름은 myclient로 설정됩니다.

  • wanboot-cgi 프로그램은 http://192.168.198.135/cgi-bin/wanboot-cgi에 있습니다.

클라이언트를 부트하고 설치합니다.


ok boot net -o prompt - install
Resetting ...


Sun Blade 100 (UltraSPARC-IIe), No Keyboard
Copyright 1998-2003 Sun Microsystems, Inc.  All rights reserved.
OpenBoot 4.x.build_28, 512 MB memory installed, Serial #50335475.
Ethernet address 0:3:ba:e:f3:75, Host ID: 83000ef3.



Rebooting with command: boot net -o prompt                            
Boot device: /pci@1f,0/network@c,1  File and args: -o prompt

boot> 3des=9ebc7a57f240e97c9b9401e9d3ae9b292943d3c143d07f04

boot> sha1=b482aaab82cb8d5631e16d51478c90079cc1d463

boot> go

위 명령으로 다음 작업을 수행합니다.

  • 9ebc7a57f240e97c9b9401e9d3ae9b292943d3c143d07f04 값을 가진 3DES 암호화 키를 클라이언트에 설치합니다.

  • b482aaab82cb8d5631e16d51478c90079cc1d463 값을 가진 HMAC SHA1 해싱 키를 클라이언트에 설치합니다.

  • 설치를 시작합니다.


참조

키 값을 표시하는 자세한 방법은 wanbootutil(1M)을 참조하십시오.

네트워크 부트 인수를 설정하는 자세한 내용은 set(1)을 참조하십시오.

시스템을 부트하는 자세한 내용은 boot(1M)을 참조하십시오.

절차 DHCP 서버를 사용하여 WAN 부트 설치 수행

DHCP 서버가 WAN 부트 옵션을 지원하도록 구성한 경우 DHCP 서버를 사용하여 설치 중에 클라이언트 구성 정보를 제공할 수 있습니다. DHCP 서버가 WAN 부트 설치를 지원하도록 구성하는 자세한 방법은 (선택 사항) DHCP 서버를 사용하여 구성 정보 제공을 참조하십시오.

이 절차에서는 다음을 가정합니다.

  • 클라이언트 시스템이 실행 중입니다.

  • 클라이언트에 키를 설치하였거나 비보안 설치를 수행 중입니다.

    설치 전에 클라이언트에 키를 설치하는 방법은 클라이언트에 키 설치를 참조하십시오.

  • SbootURISHTTPproxy WAN 부트 옵션을 지원하도록 DHCP 서버를 구성하였습니다.

    이러한 옵션을 사용하면 DHCP 서버에서 WAN 부트가 필요로 하는 구성 정보를 제공할 수 있습니다.

    DHCP 서버에 설치 옵션을 설정하는 방법은 DHCP 서비스를 사용하여 시스템 구성 정보를 미리 구성(작업)을 참조하십시오.

단계
  1. 클라이언트 시스템이 현재 실행 중인 경우 시스템의 실행 수준이 0이 되도록 합니다.


    # init 0
    

    ok 프롬프트가 표시됩니다.

  2. 클라이언트 시스템의 ok 프롬프트에서 OBP의 네트워크 부트 인자 변수를 설정합니다.


    ok setenv network-boot-arguments dhcp,hostname=client-name
    
    setenv network-boot-arguments

    OBP에 지시하여 다음 부트 인자를 설정합니다.

    dhcp

    OBP에 지시하여 DHCP 서버를 사용하여 클라이언트를 구성합니다.

    hostname=client-name

    클라이언트에 할당할 호스트 이름을 지정합니다.

  3. 네트워크에서 클라이언트를 부트합니다.


    ok boot net - install
    
    net - install

    네트워크 부트 인자 변수를 사용하여 WAN에서 부트하도록 클라이언트에 지시합니다.

    클라이언트가 WAN을 통하여 설치합니다. WAN 부트 프로그램에서 필요한 설치 정보를 모두 찾지 못한 경우 wanboot 프로그램은 빠진 정보를 입력하라는 프롬프트를 표시합니다. 프롬프트에 추가 정보를 입력합니다.


예 14–6 DHCP 서버를 사용하여 WAN 부트 설치

다음 예에서 네트워크의 DHCP 서버는 클라이언트 구성 정보를 제공합니다. 이 샘플은 클라이언트의 호스트 이름 myclient를 요청합니다.


ok setenv network-boot-arguments dhcp, hostname=myclient

ok boot net - install
Resetting ...



Sun Blade 100 (UltraSPARC-IIe), No Keyboard
Copyright 1998-2003 Sun Microsystems, Inc.  All rights reserved.
OpenBoot 4.x.build_28, 512 MB memory installed, Serial #50335475.
Ethernet address 0:3:ba:e:f3:75, Host ID: 83000ef3.



Rebooting with command: boot net - install
Boot device: /pci@1f,0/network@c,1  File and args: - install

참조

네트워크 부트 인수를 설정하는 자세한 내용은 set(1)을 참조하십시오.

시스템을 부트하는 자세한 내용은 boot(1M)을 참조하십시오.

DHCP를 구성하는 자세한 방법은 (선택 사항) DHCP 서버를 사용하여 구성 정보 제공을 참조하십시오.

절차 로컬 CD 매체를 사용하여 WAN 부트 설치 수행

클라이언트 OBP가 WAN 부트를 지원하지 않는 경우 클라이언트 CD-ROM 드라이브에 삽입된 Solaris 10 Software - 1 CD를 사용하여 설치할 수 있습니다. 로컬 CD를 사용하는 경우 클라이언트는 WAN 부트 서버가 아닌 로컬 매체에서 wanboot 프로그램을 검색합니다.

이 절차에서는 사용자 WAN 설치에 HTTPS를 사용하고 있다고 가정합니다. 비보안 설치를 수행하고 있는 경우에는 클라이언트 키를 표시하거나 설치하지 않습니다.

로컬 CD에서 WAN 부트 설치를 수행하려면 다음 단계를 수행합니다.

단계
  1. WAN 부트 서버의 웹 서버 사용자와 동일한 사용자 역할을 가정합니다.

  2. 각 클라이언트 키 값을 표시합니다.


    # wanbootutil keygen -d -c -o net=net-ip,cid=client-ID,type=key-type
    
    net-ip

    설치 중인 클라이언트의 네트워크 IP 주소입니다.

    client-ID

    설치 중인 클라이언트의 ID입니다. 클라이언트 ID는 사용자 정의 ID나 DHCP 클라이언트 ID일 수 있습니다.

    key-type

    클라이언트에 설치하는 키 유형입니다. 유효한 키 유형은 3des, aes 또는 sha1입니다.

    키의 16진수 값이 표시됩니다.

  3. 설치 중인 각 클라이언트 키 유형에 대해 이전 단계를 반복합니다.

  4. 클라이언트 시스템에서 Solaris 10 Software - 1 CD를 CD-ROM 드라이브에 삽입합니다.

  5. 클라이언트 시스템의 전원을 켭니다.

  6. CD에서 클라이언트를 부트합니다.


    ok boot cdrom -o prompt -F wanboot - install
    
    cdrom

    OBP에게 지시하여 로컬 CD-ROM에서 부트합니다.

    -o prompt

    wanboot 프로그램에 지시하여 클라이언트 구성 정보를 입력하라는 메시지를 표시합니다.

    -F wanboot

    OBP에 지시하여 CD-ROM에서 wanboot 프로그램을 로드합니다.

    - install

    클라이언트에 지시하여 WAN 부트 설치를 수행합니다.

    클라이언트의 OBP는 Solaris 10 Software - 1 CD에서 wanboot 프로그램을 로드합니다. wanboot 프로그램을 시스템을 부트하며 boot> 프롬프트가 표시됩니다.

  7. 암호 키 값을 입력합니다.


    boot> 3des=key-value
    
    3des=key-value

    단계 2에서 설치한 3DES의 16진수 문자열을 지정합니다.

    AES 암호 키를 사용하는 경우 다음 형식으로 이 명령을 사용합니다.


    boot> aes=key-value
    
  8. 해싱 키 값을 입력합니다.


    boot> sha1=key-value
    
    sha1=key-value

    단계 2에서 설치한 3DES의 16진수 문자열을 지정합니다.

  9. 네트워크 인터페이스 변수를 설정합니다.


    boot> variable=value[,variable=value*]

    boot> 프롬프트에서 다음 변수와 변수 값 쌍을 입력합니다.

    host-ip=client-IP

    클라이언트의 IP 주소를 지정합니다.

    router-ip=router-ip

    네트워크 라우터의 IP 주소를 지정합니다.

    subnet-mask=mask-value

    서브넷 마스크 값을 지정합니다.

    hostname=client-name

    클라이언트의 호스트 이름을 지정합니다.

    (선택 사항) http-proxy=proxy-ip:port

    네트워크 프록시 서버의 IP 주소와 포트 번호를 지정합니다.

    bootserver=wanbootCGI-URL

    웹 서버에서 wanboot-cgi 프로그램의 URL을 지정합니다.


    주 –

    bootserver 변수의 URL 값은 HTTPS URL이 아니어야 합니다. URL은 http://로 시작해야 합니다.


    다음 방법으로 이러한 변수를 입력할 수 있습니다.

    • boot> 프롬프트에서 한 개의 변수와 값 쌍을 입력한 다음 Enter 키를 누릅니다.


      boot> host-ip=client-IP
      boot> subnet-mask=mask-value
      
    • boot> 프롬프트 행에 변수와 값 쌍을 모두 입력한 다음 Enter 키를 누릅니다. 쉼표를 입력하여 각 변수와 값 쌍을 구분합니다.


      boot> host-ip=client-IP,subnet-mask=mask-value,
      router-ip=router-ip,hostname=client-name,
      http-proxy=proxy-ip:port,bootserver=wanbootCGI-URL
      
  10. 부트 프로세스를 계속하려면 다음 명령을 입력합니다.


    boot> go
    

    클라이언트가 WAN을 통하여 설치합니다. WAN 부트 프로그램에서 필요한 설치 정보를 모두 찾지 못한 경우 wanboot 프로그램은 빠진 정보를 입력하라는 프롬프트를 표시합니다. 프롬프트에 추가 정보를 입력합니다.


예 14–7 로컬 CD 매체를 사용하여 설치

다음 예에서 로컬 CD의 wanboot 프로그램은 설치 도중 클라이언트에 네트워크 인터페이스 변수를 설정하라는 메시지를 표시합니다.

WAN 부트 서버의 키 값을 표시합니다.


# wanbootutil keygen -d -c -o net=192.168.198.0,cid=010003BA152A42,type=sha1
b482aaab82cb8d5631e16d51478c90079cc1d463
# wanbootutil keygen -d -c -o net=192.168.198.0,cid=010003BA152A42,type=3des
9ebc7a57f240e97c9b9401e9d3ae9b292943d3c143d07f04

위 예에서는 다음 정보를 사용합니다.

net=192.168.198.0

클라이언트 서브넷의 IP 주소를 지정합니다.

cid=010003BA152A42

클라이언트의 ID를 지정합니다.

b482aaab82cb8d5631e16d51478c90079cc1d463

클라이언트의 HMAC SHA1 해싱 키 값을 지정합니다.

9ebc7a57f240e97c9b9401e9d3ae9b292943d3c143d07f04

클라이언트의 3DES 암호 키 값을 지정합니다.

설치에서 AES 암호화 키를 사용하는 경우 type=3destype=aes로 변경하여 암호화 키 값을 표시합니다.

클라이언트를 부트하고 설치합니다.


ok boot cdrom -o prompt -F wanboot - install
Resetting ...


Sun Blade 100 (UltraSPARC-IIe), No Keyboard
Copyright 1998-2003 Sun Microsystems, Inc.  All rights reserved.
OpenBoot 4.x.build_28, 512 MB memory installed, Serial #50335475.
Ethernet address 0:3:ba:e:f3:75, Host ID: 83000ef3.



Rebooting with command: boot cdrom -F wanboot - install                            
Boot device: /pci@1f,0/network@c,1  File and args: -o prompt

boot> 3des=9ebc7a57f240e97c9b9401e9d3ae9b292943d3c143d07f04

boot> sha1=b482aaab82cb8d5631e16d51478c90079cc1d463

boot> host-ip=192.168.198.124

boot> subnet-mask=255.255.255.128

boot> router-ip=192.168.198.1

boot> hostname=myclient
boot> client-id=010003BA152A42

boot> bootserver=http://192.168.198.135/cgi-bin/wanboot-cgi

boot> go

위 명령으로 다음 작업을 수행합니다.

  • 9ebc7a57f240e97c9b9401e9d3ae9b292943d3c143d07f04 값을 가진 3DES 암호화 키를 클라이언트에 입력합니다.

  • b482aaab82cb8d5631e16d51478c90079cc1d463 값을 가진 HMAC SHA1 해싱 키를 클라이언트에 입력합니다.

  • 클라이언트 IP 주소를 192.168.198.124로 설정합니다.

  • 클라이언트의 서브넷 마스크를 255.255.255.128로 설정합니다.

  • 클라이언트 라우터 IP 주소를 192.168.198.1로 설정합니다.

  • 클라이언트의 호스트 이름을 myclient로 설정합니다.

  • 클라이언트 ID를 010003BA152A42로 설정합니다.

  • wanboot-cgi 프로그램의 위치를 http://192.168.198.135/cgi-bin/wanboot-cgi/로 설정합니다.


참조

키 값을 표시하는 자세한 방법은 wanbootutil(1M)을 참조하십시오.

네트워크 부트 인수를 설정하는 자세한 내용은 set(1)을 참조하십시오.

시스템을 부트하는 자세한 내용은 boot(1M)을 참조하십시오.

Posted by 1010
60.Unix2008. 11. 3. 12:00
반응형
솔라리스 10

Solaris 10 1/06 OS를 빠르게 설치하는 방법

이 방법 가이드에서는 Solaris 10 설치에 익숙하지 않은 사용자들에게 Sun 지원 x64 또는 x86 시스템에 Solaris 10 OS를 설치하는 방법을 안내합니다. 스크린샷을 포함하는 이 단계별 가이드는 간단한 25개 단계를 통해 설치 프로세스를 안내합니다. 초보 사용자는 이 가이드의 지침에 따라 독립 실행형 x64 또는 x86 시스템에 Solaris 10 1/06 운영 체제 설치를 완료해야 합니다.

1760KPDF[1760K]
목차
 
 
 
 

설치 가정

이 가이드에서는 다음을 포함하는 몇 가지 가정 하에 진행됩니다.
  • 시스템은 x64 또는 x86 시스템입니다.
  • 시스템은 Solaris 10 OS와 호환되며 Solaris 하드웨어 호환성 목록(HCL)에 포함됩니다.
  • 시스템에 그래픽 인터페이스가 있습니다.

이 가이드는 네트워크에 연결되지 않은 독립 실행형 시스템에 가장 적절하지만 네트워크 구성 정보가 사용 가능할 경우 네트워크 연결 시스템(네트워크 인프라에 연결된 IP 주소가 있는 시스템)을 위한 단계별 설치 절차로도 사용할 수 있습니다.

설치 프로세스 중에 이 가이드에서 논의되지 않은 문제가 발생하면 Solaris 10 OS Installation Guide: Basic Installations를 참조하십시오. 이 가이드는 Sun 웹 사이트(http://docs.sun.com/app/docs/coll/1236.1)에 있는 Solaris 10 Release and Installation Collection의 일부입니다.

맨 위로

 
 
 

하드웨어 호환성 목록 확인

설치 프로세스의 첫 번째 단계는 OS를 설치할 시스템이 http://www.sun.com/bigadmin/hcl/에 있는 하드웨어 호환성 목록에 포함되어 있는지 확인하는 것입니다. (참고: 용어 "x86"은 32비트 x86 호환 가능 아키텍처 및 64비트 AMD64/Intel EM64T의 "제품군"을 나타냅니다. 그러나 용어 x64는 64비트 x86 프로세서를 사용하는 시스템을 나타냅니다. Solaris 10 OS는 x86 또는 x64로 지정된 여러 시스템에서 실행됩니다.)

맨 위로

 
 
 

기본 시스템 요구 사항

컴퓨터 시스템이 다음 요구 사항을 만족하는지 확인하십시오. 아래 요구 사항은 권장되는 최소 수준입니다. 디스크 용량과 CPU 속도가 이보다 낮은 시스템에서도 Solaris OS를 설치할 수 있지만 권장되지 않습니다.

  • 최소 256MB의 물리적 RAM
  • 최소 5GB의 사용 가능한 하드 디스크 공간
  • 최소 400MHz CPU 속도
  • DVD 또는 CD-ROM 드라이브
  • 부착된 모니터 또는 통합형 디스플레이
Solaris 시스템 요구 사항에 대한 자세한 내용을 보려면 http://www.sun.com/solaris/specs.jsp 사이트를 방문하십시오. Solaris 10에서 사용할 수 있는 타사 응용 프로그램의 자세한 목록을 보려면 http://www.sun.com/partners/10moves/solutions.html 사이트를 방문하십시오.  
 
 
 

x64 또는 x86 플랫폼용 미디어 구하기

Solaris 10 OS 1/06 릴리스는 Sun 웹 사이트에서 다운로드할 수 있습니다.

  1. Solaris 10 OS에 대한 정보를 얻으려면 http://www.sun.com/solaris/ 사이트로 이동하십시오.
  2. 다운로드 프로세스를 시작하려면 http://www.sun.com/solaris/get.jsp 사이트로 이동하십시오.
  3. 사용 가능한 다운로드 목록에서 Solaris 10을 선택하십시오.
  4. 적절한 미디어 형식(x64/x86 시스템의 경우 Solaris)을 누르십시오.
  5. Sun 다운로드 센터에 아직 등록하지 않았으면 등록하십시오.
  6. 간단한 질문에 대답하십시오.
  7. 사용권 계약을 읽어보고 동의하십시오.
  8. CD 또는 DVD를 다운로드 및 구우십시오.

    Solaris 10 OS 다운로드 또는 설치 CD 및 DVD 미디어 굽기에 대한 추가 지침, 설명 및 팁을 보려면 http://www.sun.com/solaris/self_help.jsp에 있는 Solaris 10 Self Help FAQ를 참조하십시오.

    맨 위로

     
     
     

    전원 켜기 및 미디어 부팅

    다른 운영 체제가 시스템에서 이미 실행되고 있는지 또는 새 시스템에 설치할지에 관계없이 다음 절차를 사용할 수 있습니다.

    1. 시스템 전원을 켜고 드라이브 트레이에 첫 번째 설치 CD 또는 DVD를 넣습니다.
    2. 시스템을 다시 시작합니다.
    3. 시스템이 하드 디스크에서 부팅되는 것으로 나타나고 Solaris OS 설치 관리자가 시작되지 않은 경우 시스템 전원 주기 기능을 사용합니다. 전원 주기란 시스템의 전원을 켠 후 다시 시작하는 것을 말합니다. 시스템이 부팅되기 시작하면 설치 모드로 들어갑니다. 일반적으로 입력해야 하는 키(예: "설치를 시작하려면 F2키 누르기")를 알려주는 메시지가 표시됩니다. 누를 키는 제조업체에 따라 다르며 Esc 및 F12 키가 가장 일반적으로 사용됩니다. 이 메시지를 제대로 읽지 못한 경우 볼 수 있게 될 때까지 시스템을 몇 번 다시 시작하면 됩니다.
    4. 일단 설치 모드에 들어가면 시스템의 부트 장치를 지정합니다. 이 예에서는 부트 드라이브로 CD 또는 DVD 드라이브를 지정합니다. 이렇게 하려면 부트 순서를 설명하는 목록을 찾은 후 CD 또는 DVD 드라이브가 목록 맨 처음에 나오도록 순서를 바꿉니다. 그러면 시스템이 CD 또는 DVD 드라이브에서 부팅되면서 설치 프로세스가 시작되며 아래와 같은 메시지가 표시됩니다.

      Loading stage 2....

      GNU GRUB version 0.95 ( xxK lower / xxK upper memory)

    맨 위로

     
     
     

    Solaris 10 1/06 운영 체제 설치

    Solaris 10 1/06 운영 체제 설치 및 부트 프로세스는 GNU GRUB 로더를 기반으로 합니다. 따라서 이 프로세스 중에 표시되는 메시지는 GRUB 로더에만 국한되며 이전 Solaris 설치와는 다릅니다.

    콘솔 식별

    설치 프로세스의 다음 단계는 Solaris OS가 설치되는 하드웨어 버전에 대한 콘솔 유형을 선택하는 것입니다. 화살표 키를 사용하여 하드웨어 구성에 맞는 Solaris OS 버전을 선택합니다. 대부분의 x64 및 x86 시스템에서는 이것이 기본 선택 사항입니다.

    헤드 없는 랙 장착형 시스템을 사용 중이며 직렬 콘솔에 대한 인터페이스로 직렬 포트가 필요한 경우 두 가지 직렬 콘솔 옵션을 사용할 수 있습니다. Sun Fire LX50, Sun Fire V60x 또는 Sun Fire V65x 서버와 같은 이전 x64 및 x86 시스템의 경우 Solaris Serial Console ttyb를 선택합니다.

    편집 기능 키에는 항목을 선택 또는 강조하기 위한 화살표 키, 명령을 편집하기 위한 e 키 또는 명령줄에 대한 c 키 등이 있습니다. Enter 키를 눌러 선택된 운영 체제 버전을 부팅합니다. 아무 키도 누르지 않아도 강조된 운영 체제 버전은 60초 이내에 부팅됩니다. 부트 프로세스 중에는 프롬프트가 표시되지 않습니다. 아무 버전도 선택하지 않으면 화면 시간이 초과된 후 Solaris OS가 자동으로 부팅됩니다.

    Solaris
    Solaris Serial Console ttya (headless and rack-mounted systems only)
    Solaris Serial Console ttyb (for1x50, v60x and v65x)


    설치 유형 선택

    Enter 키를 누르면 다음 메시지가 표시됩니다.

    Booting 'Solaris'
    kernel /boot/multiboot kernel/unix -B install_media=cdrom
    Multiboot-elf...

    첫 번째 모듈이 로드되면 여섯 가지 설치 옵션이 제공됩니다. 화살표 키나 스페이스바를 사용하여 옵션을 하나 선택합니다. 일정 시간 동안 아무 옵션도 선택하지 않으면 기본 설치 방법이 자동으로 선택됩니다.

    SunOS Release 5.10 Version Generic_Patch 32-bit
    Copyright 1983-2005 Sun Microsystems, Inc. All rights reserved.
    Use is subject to license terms.
    Configuring devices.

      1. Solaris Interactive (default)
      2. Custom JumpStart
      3. Solaris Interactive Text (Desktop session)
      4. Solaris Interactive Text (console session)
      5. Apply driver updates
      6. Single user shell
    Automatically continuing in xx seconds

    (timeout)


    첫 번째 옵션을 선택하거나 가만히 기다리면 다음 출력이 표시됩니다. 표시되는 하드웨어 정보(예: "bge0")는 아래에 표시되는 데이터와 정확히 동일하지 않을 수 있으며 각 단계를 완료하는 데는 몇 분 정도 걸릴 수 있습니다.

    Solaris Interactive

    Using install cd in /dev/dsk/c1t0d0p0
    Using RPC Bootparams for network configuration information.
    Attempting to configure interface bge0...
    Skipped interface bge0...
    Beginning system identification...
    Searching for configuration files(s)...
    Search complete.

    Proposed Window System Configuration for Installation:

       Video Devices:     xxxxxxxxxxxxxxx
       Video Drivers:     xxxxxxxxxxxxxxx
       Resolution/Colors: xxxxxxxxxxxxxxx
       Screen Size:       xxxxxxxxxxxxxxx
       Monitor Type:      xxxxxxxxxxxxxxx
       Keyboard Type:     xxxxxxxxxxxxxxx
       Pointing Device:   xxxxxxxxxxxxxxx

    Press  <ENTER> to accept proposed configuration
    or     <ESC> to change proposed configuration
    or     <SPACE> to pause

    <<< timeout in 30 seconds>>>

    시스템 시간이 초과되거나 Enter 키를 누르면 시스템은 그래픽 모드로 전환되며 Esc 키를 누를 때까지 다음 설치 섹션이 계속 진행됩니다. Esc 키를 누르면 하드웨어 선택 사항 및 기타 옵션을 변경할 수 있는 텍스트 기반 화면이 표시됩니다. 구성이 테스트된 후 문제가 없는 것으로 판명되면 화면은 그래픽 설치 모드로 돌아갑니다.

    시스템 구성

    일련의 화면이 표시되어 Solaris OS 구성 프로세스를 안내합니다.
    참고: 그래픽 화면에서 작업을 진행하는 동안 구성 프로세스 중에 제시된 질문에 대답하기 위해 창 내부에서 마우스로 이동해야 합니다.

    1. 시간이 초과되거나 ?Enter 키가 아닌 Esc 키를 누르면 Solaris 설치 프로그램에 대한 일련의 메시지가 표시됩니다. 메시지를 전체적으로 살펴봅니다. 옵션이 제공되면 화살표 키를 사용하여 원하는 옵션을 강조한 후 F2 키를 눌러 선택합니다. 고급 구성을 수행하려면 http://docs.sun.com/ 사이트에서 Solaris Installation Guide를 참조하십시오.
    2. 시스템의 언어를 선택합니다.

      Select Language

      0. English
      1. French
      2. German
      3. Italian
      4. Japanese
      5. Korean
      6. Simplified Chinese
      7. Spanish
      8. Swedish
      9. Traditional Chinese

      Please make a choice (0-9), or press h or ? for help:

    3. 오른쪽 아래 구석에 Solaris Install Console이라는 새 창이 표시됩니다. 이 창은 관련 설치 메시지를 표시하는 데 사용됩니다. Solaris OS 설치 질문에 대답할 수 있는 다른 창도 표시됩니다.

      Solaris Install Console
    4. welcome 화면이 표시됩니다. Next>를 눌러 설치 프로세스를 계속합니다. 설치 프로그램이 입력된 구성을 확인합니다. 제공된 구성 정보가 올바르지 않으면 해당 화면에 올바른 정보를 다시 입력하도록 요구됩니다.

      Welcome
    5. Network Connectivity 화면이 나타납니다. (참고: 시스템이 독립 실행형 시스템이면 17단계로 건너뛰어 시스템 시간과 날짜를 설정해야 합니다.) 그렇지 않고 시스템이 가정용 광대역 네트워크에 연결되어 있으면 대부분의 기본 옵션을 그대로 사용해도 됩니다. 다음 화면에서 Networked 옵션과 DHCP Server를 선택하고 가이드의 나머지 부분을 진행합니다. 시스템이 사무실 LAN에 연결되어 있으면 DHCP 서버를 사용할 수 있는지 시스템 관리자에게 문의하십시오. DHCP 서버를 사용할 수 있으면 다음 화면에서 Networked 옵션과 DHCP Server를 선택하고 가이드의 나머지 부분을 진행합니다.

      네트워크 연결


      그러나 DHCP 서버를 사용할 수 없으면 다음 정보를 확인한 후 계속하십시오.
      • 시스템의 호스트 이름
      • IP 주소
      • 네트워크 마스크
      • 기본 라우터
      • 시스템이 Kerberos를 사용할 수 있게 설정되었는지 여부
      • NIS, NIS+와 같은 이름 서비스 몇 단계 후에 DHCP configuration 화면이 표시됩니다. 이때 DHCP 서버의 사용을 묻는 메시지가 표시될 때 No를 선택해야 합니다.
    6. Next 버튼 Networked 버튼과 Next 버튼을 차례로 누릅니다.
    7. DHCP configuration 화면에 나타납니다. DHCP 서버를 사용하려면 Yes를 선택하고 Next>를 누른 후 11단계를 계속 진행합니다. DHCP 서버를 사용할 수 없으면 No를 선택하고 Next>>를 누른 후 8단계를 계속 진행합니다.

      pcn0에 대한 DHCP
    8. 시스템의 호스트 이름을 입력하고 Next>를 누릅니다. 이 예에서는 호스트 이름 cancun이 사용됩니다.

      Hostname for bge0
         Enter a hostname which...
         Host Name for bge0:
         cancun

      <Back   Next>

    9. 시스템의 IP 주소를 입력합니다. 이 예에서는 IP 주소 192.168.1.1이 사용됩니다.

      IP Address for bge0
         Enter Internet Protocol (IP)...
         IP Address for bge0: 192.168.1.1

      <Back    Next>

    10. 네트워크 마스크를 입력합니다. 이 예에서는 네트워크 마스크 255.255.255.0이 사용됩니다.

      Netmask bge0
         On this screen you must...
         Netmask bge0:
         255.255.255.0

      <Back    Next>

    11. No를 선택한 후 Next>를 눌러 네트워크 인터페이스에 대해 IPv6를 비활성화합니다.

      IPv6 for bge0
         Specify whether or not you want
         to enable IPv6...
         Enable IPv6 for bge0:
         0 Yes
         0 No
      <Back    Next>

      1. 네트워크 정보를 수동으로 입력하지 않을 경우 13단계를 계속 진행합니다.
      2. 네트워크 정보를 수동으로 입력할 경우 다음 단계가 나타납니다.
        기본 라우터를 자동으로 검색하도록 시스템을 구성합니다. Detect one을 선택하고 Next>를 누릅니다.


      Set the Default router for bge0
         The default router provides a
         bridge...
         0 Detect one
         0 Specify one
         0 None
      <Back    Next>

    12. 다음에는 Kerberos를 네트워크 인증 프로토콜로 사용하지 않도록 지정합니다. No를 선택하고 Next>를 누릅니다.

      Kerberos
    13. 다음에는 명명 서비스를 구성하지 않도록 지정합니다. None을 선택하고 Next>를 누릅니다.

      이름 서비스
    14. 다음에는 시스템에 대한 표준 시간대를 설정합니다. 이 예에서는 지리적 영역을 지정하여 표준 시간대를 설정합니다. Geographic을 선택하고 Next>를 누릅니다.

      표준 시간대
    15. 다음에는 대륙과 국가를 선택합니다. 정확한 위치에 대한 자세한 정보가 요구됩니다. 예를 들어, Americas를 선택하면 Americas의 모든 표준 시간대를 나열하는 화면이 표시됩니다. 해당 표준 시간대를 선택하고 Next>를 누릅니다.

      대륙과 국가
    16. 다음에는 날짜 및 시간을 설정하고 Next>를 누릅니다. 날짜와 시간이 자동으로 표시됩니다. 올바르면 Next>를 누르고 조정이 필요하면 텍스트 상자에 수정 내용을 입력하고 Next>를 누릅니다.

      날짜와 시간
    17. 루트 암호를 설정합니다. 입력한 암호는 화면에는 표시되지 않습니다. 두 번째 상자에 암호를 다시 입력하고 Next>를 누릅니다.

      루트 암호
    18. 마지막으로 제공된 구성 정보가 요약되어 화면에 표시됩니다. 모든 정보가 올바른지 확인하고 Confirm>을 누릅니다. 네트워크 정보를 수동으로 입력하거나 DHCP 서버를 사용하는 경우에는 다른 정보가 표시됩니다.

      Confirm Information
         Selection Information
         Hostname: cancun
         IP Address: 192.168.1.1
         System part of a subnet: Yes
         Netmask: 255.255.255.0
         Enable IPv6: No
         Default Route: Autodetect Default
         Name Service: None
         Enable Kerberos: No
         Timezone: US/Pacific

      <Back    Confirm>


    Solaris 설치

    이제 Solaris 로고가 포함된 화면이 표시됩니다. Next>를 눌러 설치 프로세스를 시작합니다. Solaris Install Console에 정보가 표시됩니다.

    Welcome

    1. 먼저 설치 관리자 옵션을 설정합니다. 설치 프로세스 마지막에 시스템이 자동으로 부팅되고 CD 또는 DVD가 꺼내지도록 지정합니다. 두 옵션에 대해 모두 Yes를 선택하고 Next>를 누릅니다.

      설치 관리자 옵션
    2. 팝업 창이 표시됩니다. OK를 누르고 계속합니다.
    3. 다음에는 설치를 수행할 미디어를 지정합니다. CD/DVD를 선택하고 Next>를 누릅니다.

      미디어 지정
    4. 설치 프로세스가 시작됩니다. 이 프로세스는 몇 초 정도 걸립니다.
    5. 사용권 계약이 표시되면 읽어봅니다.agreement. 계약 내용에 동의하면 Accept와 Next>를 차례로 눌러 설치 프로세스를 계속합니다.

      라이센스
    6. Initial Install을 선택하고 Next>를 누릅니다.
    7. Custom Install을 설치하고 Next>를 누릅니다.

      설치 유형 선택
    8. 기본 옵션을 모두 그대로 사용하여 설치하려면 이 가이드에 나오는 18단계, Ready to Install 절을 계속 진행합니다. 그렇지 않으면 아래에 나오는 9-17단계를 진행합니다.
    9. 다음에는 원할 경우 소프트웨어를 지역화합니다. > 문자를 눌러 지리적 영역을 확장합니다. 해당 지역화 버전을 선택합니다. Next>를 눌러 계속합니다. 지역화 버전을 설치하려면 Languages CD가 필요합니다. 다음 예에서는 시스템을 스페인어로 지역화합니다.

      Select Software Localizations
         Select the geographic regions...
         > Northern Africa
         > Eastern Europe
         > Southern Europe
         ...

      <Back    Next>     Exit>

    10. 해당 로케일을 선택하고 Next>를 누릅니다.

      Select System Locale
         Select the initial locale to
         be used...
         North America
         0 Spanish (Mexico, ISO...
         POSIX
         0 English (POSIX...

      <Back    Next>     Exit>

    11. 다음에는 필요한 소프트웨어 제품을 선택하고 Next>를 누릅니다. 설치를 수행하기 위해 소프트웨어가 들어 있는 배포용 CD 또는 DVD가 필요합니다.

      Select Products
         Select the products you would...
         > Solaris 10 Extra Value Software
         > Solaris 10 Documentation
         > Java Enterprise System
         > Solaris Software Companion CD

      <Back    Next>     Exit>

    12. 다음에는 추가로 필요한 소프트웨어를 선택하고 Next>를 누릅니다. 설치를 수행하기 위해 소프트웨어가 들어 있는 배포용 CD 또는 DVD가 필요합니다.

      Additional Products
         To scan for additional...
         Web Start Ready products scan
         location
         0 None
         0 CD/DVD
         0 Local or Network File System

      <Back    Next>     Exit>

    13. 그룹 선택 사항은 시스템의 사용 방식에 따라 달라집니다. 이 예에서는 Entire Group(기본 옵션)을 설치하지만 사용자 정의하지는 않습니다. Entire Group 옵션을 선택하고 Next>를 누릅니다.

      Select Solaris Software Group
         Select a Solaris software group to install:
         Solaris Software       Default    Custom    Size(MB)
         Entire Group Plus OEM    0          0        3438.7
         Entire Group             0          0        3438.7
         Developer Group          0          0        3331.5
         End User Group           0          0        2482.3
         Core Group               0          0         363.3
         Reduced Networking Group 0          0         339.5

      <Back    Next>     Exit>

    14. 부트 디스크를 선택합니다. 시스템에 디스크가 두 개 이상 있으면 화면 왼쪽에 있는 목록에서 디스크를 선택한 후 Next>를 누릅니다.

      Disk Selection
         Select which disk you want...
         Available    Selected Disk
            Add>>
            <<Remove

      <Back    Next>     Exit>

    15. 원할 경우 분할할 디스크를 선택합니다. 이전 단계에서 선택한 디스크가 나열됩니다. 디스크 하나에 파티션이 여러 개 있으면 디스크를 선택하여 수정해야 합니다. 운영 체제를 사용자 파일과 따로 두어야 할 경우에는 분할이 유용할 수 있습니다. 이 예에서는 디스크가 이미 적절한 방식으로 분할되었거나 Solaris OS에 해당 디스크 전체를 사용할 수 있다고 가정합니다. Next>를 눌러 계속합니다.

      Select Disks for fdisk Partition
      Customization
         On the next panel(s), you can...
         Please select the disk(s) to
         customize...
         0 c0d0

      <Back    Next>     Exit>

    16. 기존 파일 시스템을 보존해야 할 경우 다음 창에서 Yes를 선택하고, 그렇지 않으면 No를 선택합니다. Next>를 눌러 계속합니다.

      Preserve Data
         At least one of the disks...
            0 Yes
            0 No

      <Back    Next>     Exit>

    17. 기본 파일 시스템 레이아웃은 대부분의 시스템에 적절합니다. 스왑 공간의 추가나 /export/home 디렉토리 제거와 같은 약간의 수정 작업이 필요할 수 있습니다. 파일 시스템 레이아웃을 수정해야 할 경우 modify를 선택합니다. 새 창이 표시됩니다. 필요에 맞게 값을 변경합니다. 다음 예에서는 /export/home 디렉토리를 제거하고, 스왑 크기를 2048MB로 조정하고, 남은 공간을 루트 디렉토리에 추가합니다. 이렇게 하면 다음과 같은 파일 시스템 레이아웃이 구현됩니다. 확인을 누릅니다. 변경 내용은 이전 창에 나옵니다. Next>를 눌러 계속합니다. 구성을 사용자 정의하면 다른 메시지가 표시될 수 있습니다.

      Disk c0d0
         Slice  File System    Size
            0    /              36101
            1    swap           2048

      [OK]   [Apply]   [Reset]   [Cancel]

    18. 정보를 확인하고 Install Now를 누릅니다.

      설치 준비
    19. 정보를 확인하고 Install Now를 누릅니다. 설치 진행률 표시기가 나타납니다. 몇 분 후면 100%에 도달합니다. Pause 또는 Reboot 여부를 묻는 메시지가 표시됩니다. 시스템은 내부 하드 디스크에서 다시 부팅되어야 합니다. 다시 부팅할 때 일부 시스템은 CD/DVD 트레이에서 끌어옵니다. 이 경우 트레이에서 CD 또는 DVD를 뺀 후에 시스템을 다시 부팅하면 됩니다.

      설치 중...
    20. 시스템이 다시 부팅되기 시작하면 CD/DVD 트레이를 열어 CD/DVD를 제거합니다. 이렇게 하면 시스템이 내부 하드 디스크에서 부팅됩니다. 이것이 실패하면 설치 프로세스가 다시 시작됩니다.
    21. GNU GRUB 화면이 표시됩니다. Solaris 옵션을 강조하고 Enter 키를 누릅니다. 시스템이 다시 부팅됩니다.
    22. 시스템을 처음 부팅하면 NFS 프로토콜을 무시할지 묻는 질문이 텍스트 모드 화면에 표시됩니다. 기본값(No)을 그대로 적용하고 부팅 프로세스를 계속합니다.
    23. 설치가 CD에서 수행될 경우 설치 관리자를 시작할 수 있음을 나타내는 설치 화면이 표시됩니다. install 버튼을 누릅니다. 설치 관리자가 시작되면 화면이 파란색으로 바뀝니다. 설치 관리자가 작동되면 다음 CD를 설치할지 묻는 Solaris 화면이 표시됩니다. install 버튼을 누릅니다. 설치 프로세스 중에 빈 화면이 표시되면 모니터가 시간 초과된 것일 수 있습니다. 마우스를 이동하면 화면이 복원됩니다.
    24. 이 프로세스는 나머지 CD에서도 반복됩니다. 마지막 CD를 설치한 후에는 최종적으로 다시 부팅해야 합니다.
    25. 이제 시스템에 Solaris 10 1/06 운영 체제가 설치되었습니다.

    맨 위로

     
     
     

    추가 정보

    Solaris 10 OS에 대한 자세한 내용을 보려면 sun.com/solaris 사이트를 참조하십시오.

    매뉴얼
    Sun 설명서
    Big Admin System Administration Portal
    Sun의 새로운 기술 문서
    Sun x64/x86 시스템을 구축하도록 JumpStart 서버 구성(영문)
    로컬 부트 서버 없이 네트워크 설치 수행(영문)
    AMD 프로세서가 있는 Sun x64 시스템에서 다중 부팅 환경 구성(영문)
    관련 웹 사이트
    Solaris 랩톱 목록(x86)(영문)
    Solaris 하드웨어 호환성 목록(영문)
    Solaris 10 시스템 요구 사항(영문)
    Solaris 10 1/06 OS 기능 비교 차트(영문)
    Solaris 10을 채택하기 위한 다음 단계
    Solaris 10 using "Solaris 10 How To Guides"를 사용하여 실무 경험을 얻으시기 바랍니다.
    무료 Solaris 10 교육에 참여하십시오.
    Sun의 기업 지원 시스템은 여러분이 원하시면 언제나 달려갑니다. 지원 계약을 통해 다양한 지원을 받으십시오.
    OpenSolaris 커뮤니티에 참여하십시오.

    맨 위로

Posted by 1010
반응형
Posted by 1010
반응형

prototype.js 를 위한 개발자 노트

1.4.0 버전을 다룸

Sergio PereiraSergio Pereira에 의해 작성됨
최근 업데이트: 2006년 4월 13일

Table of Contents

Prototype은 무엇인가.?

prototype.jsSam Stephenson에 의해 작성된 자바스크립트 라이브러리이다. 이 놀랍도록 멋진 생각과 표준에 의해 잘 작성된 코드의 일부는 웹2.0의 특성을 나타내는 풍부하고 상호작용하는 웹페이지와 많은 연관을 가진다.

만약 당신이 최근 이 라이브러리를 사용하기 시작했다면, 당신은 아마도 이 문서가 가장 좋은 지시사항중에 하나는 아니라는것을 알아차렸을것이다. 나 이전에 다른 많은 개발자들처럼, 나는 소스코드와 이것을 사용한 경험에서 prototype.js에 대한 지식을 가지게 되었다. 나는 모든 이가 배우고 공유하는 동안 좀더 많은 정보를 얻게 되는게 가장 좋은 것이라고 생각한다.

나는 objects, classes, functions, 그리고 이 라이브러리에 의해 제공되는 확장을 위한 비공식적인 참조문서 또한 제공한다.

당신이 예제와 참조문서를 읽었을때, Ruby프로그래밍 언어에 친숙한 개발자는 Ruby의 내장 클래스와 이 라이브러리에 의해 구현된 많은 확장 사이의 의도적인 유사성을 알아차리게 될것이다.

toc

관련글

고급 자바스크립트 가이드문서.

toc

유틸리티 함수들(utility functions)

라이브러리는 미리 정의된 많은 수의 객체와 유틸리티 함수를 가진다. 이 알기쉬운 함수들의 목적은 반복적인 타이핑과 어구를 많이 줄이는데 있다.

toc

$() 함수 사용하기

$()함수는 가장 많이 사용되는 DOM의 document.getElementById()함수에 대한 편리한 단축키이다. DOM함수처럼, 이것은 인자로 던져진 id를 가진 요소를 하나 반환한다.

하지만 DOM함수와는 달리, 이것은 여러개의 id를 사용할수 있고 $()는 요청된 요소를 가진 Array객체를 반환할것이다. 예제는 아래와 같다.

<HTML>
<HEAD>
<TITLE> Test Page </TITLE>
<script src="prototype-1.4.0.js"></script>

<script>
	function test1()
	{
		var d = $('myDiv');
		alert(d.innerHTML);
	}

	function test2()
	{
		var divs = $('myDiv','myOtherDiv');
		for(i=0; i<divs.length; i++)
		{
			alert(divs[i].innerHTML);
		}
	}
</script>
</HEAD>

<BODY>
	<div id="myDiv">
		<p>This is a paragraph</p>
	</div>
	<div id="myOtherDiv">
		<p>This is another paragraph</p>
	</div>

	<input type="button" value=Test1 onclick="test1();"><br> 
	<input type="button" value=Test2 onclick="test2();"><br> 

</BODY>
</HTML>

이 함수의 다른 좋은 점은 이것은 인자형태를 가질수 있는 다른 함수를 생성할때 매우 유용하도록 만들어주는 id문자열이나 요소객체 자체를 던질수 있다는 것이다.

toc

$F() 함수 사용하기

$F() 함수는 다른 단축키이다. 이것은 text박스나 드랍다운 list와 같은 어떤 필드의 입력 컨트롤의 값을 반환한다. 이 함수는 요소 id나 요소객체 자체를 인자로 가질수 있다.

<script>
	function test3()
	{
		alert(  $F('userName')  );
	}
</script>

<input type="text" id="userName" value="Joe Doe"><br> 
<input type="button" value=Test3 onclick="test3();"><br> 
			

toc

$A() 함수 사용하기

$A() 함수는 이것을 받아들이는 하나의 인자를 Array객체로 변환한다.

Array 클래스를 위한 확장과 조합된 이 함수는 이것을 더욱 쉽게 만든다. 예를 들면, 작성한 함수는 인자의 수를 유연하게 받아들인다.

<script>

	function showOptions(){
		var someNodeList = $('lstEmployees').getElementsByTagName('option');
		var nodes = $A(someNodeList);

		nodes.each(function(node){
				alert(node.nodeName + ': ' + node.innerHTML);
			});
	}
</script>

<select id="lstEmployees" size="10" >
	<option value="5">Buchanan, Steven</option>
	<option value="8">Callahan, Laura</option>
	<option value="1">Davolio, Nancy</option>
</select>

<input type="button" value="Show the options" onclick="showOptions();" > 
			

toc

$H() 함수 사용하기

$H() 함수는 결합된 배열을 열거할수 있는 Hash객체로 변환한다.

<script>
	function testHash()
	{
		//let's create the object
		var a = {
			first: 10,
			second: 20,
			third: 30
			};

		//now transform it into a hash
		var h = $H(a);
		alert(h.toQueryString()); //displays: first=10&second=20&third=30
	}

</script>
			

toc

$R() 함수 사용하기

$R() 함수는 new ObjectRange(lowerBound, upperBound, excludeBounds)를 작성하기 위한 짧은 형태이다.

이 클래스의 완전한 설명을 보기 위해 ObjectRange 클래스 문서를 보라. each 메소드를 통해 반복(iterators)의 사용법을 보여주는 간단한 예제를 보자. 더 많은 메소드는 Enumerable 클래스 문서에서 볼수 있을것이다.

<script>
	function demoDollar_R(){
		var range = $R(10, 20, false);
		range.each(function(value, index){
			alert(value);
		});
	}

</script>

<input type="button" value="Sample Count" onclick="demoDollar_R();" > 
			

toc

Try.these() 함수 사용하기

이것은 인자처럼 많은 수의 함수를 가지고 그것들을 순서대로 차례차례 호출하도록 해준다. 이것은 함수중에 하나씩 수행하고 성공적인 함수호출의 결과를 반환할때까지 순차적으로 수행된다.

예제는 아래와 같다. xmlNode.text는 몇몇 브라우저에서 작동하고 xmlNode.textContent는 다른 브라우저에서 작동한다. Try.these()함수를 사용하면 당신은 작동하는 것중 하나를 반환할수 있다.

<script>
function getXmlNodeValue(xmlNode){
	return Try.these(
		function() {return xmlNode.text;},
		function() {return xmlNode.textContent;}
		);
}
</script>
			

toc

Ajax 객체

위에서 언급된 유틸리티 함수들은 좋다. 하지만 다시 보자. 그것들은 대부분 고급(advanced) 형태는 아니다. 당신은 스스로 이것들을 만들수 있고 당신 자신만의 스크립트에 유사한 함수를 이미 가지고 있을수도 있다. 하지만 이러한 함수들은 단지 일부분에 해당되는 팁일뿐이다.

나는 prototype.js에 대한 당신의 관심이 대부분의 AJAX기능을 다룰수 있다는 것이라고 확신한다. 그래서 당신이 AJAX로직을 수행할 필요가 있을때 좀더 쉽게 사용하도록 도와주는 라이브러리를 사용하는 방법을 살펴보자.

AJAX객체는 AJAX함수를 작성할 때 포함되는 트릭성격의 코드를 포장하고 단순화하기 위한 라이브러리에 의해 생성된 미리-정의된 객체이다. 이 객체는 캡슐화된 AJAX로직을 제공하는 많은 수의 클래스를 포함한다. 그 클래스중에 몇개를 살펴보자.

toc

Ajax.Request 클래스 사용하기

만약 당신이 어떠한 헬퍼(helper) 라이브러리도 사용하지 않는다면, 당신은 XMLHttpRequest객체를 생성하기 위한 많은 코드를 작성할 것이고 단계를 비동기적으로 수행할것이다. 그리고나서 응답을 뽑아내고 이것을 처리한다. 그리고나서는 한가지 이상의 브라우저를 지원하지 않는다면 스스로 행운이라고 생각할 것이다.

AJAX기능을 지원하기 위해, 라이브러리는 Ajax.Request클래스를 정의한다.

당신이 다음처럼 XML응답을 반환하는 http://yoursever/app/get_sales?empID=1234&year=1998 url을 통해 서버와 통신할수 있는 애플리케이션을 가지고 있다고 해보자.

<?xml version="1.0" encoding="utf-8" ?> 
<ajax-response>
	<response type="object" id="productDetails">
		<monthly-sales>
			<employee-sales>
				<employee-id>1234</employee-id> 
				<year-month>1998-01</year-month> 
				<sales>$8,115.36</sales> 
			</employee-sales>
			<employee-sales>
				<employee-id>1234</employee-id> 
				<year-month>1998-02</year-month> 
				<sales>$11,147.51</sales> 
			</employee-sales>
		</monthly-sales>
	</response>
</ajax-response>			
			

XML을 가져오기 위해 서버와 통신하는 것은 Ajax.Request객체를 사용하면 매우 간단하다. 아래의 샘플은 이것을 수행하는 방법을 보여준다.

<script>
	function searchSales()
	{
		var empID = $F('lstEmployees');
		var y = $F('lstYears');
		var url = 'http://yourserver/app/get_sales';
		var pars = 'empID=' + empID + '&year=' + y;
		
var myAjax = new Ajax.Request( url, { method: 'get', parameters: pars, onComplete: showResponse });
} function showResponse(originalRequest) { //put returned XML in the textarea $('result').value = originalRequest.responseText; } </script> <select id="lstEmployees" size="10" onchange="searchSales()"> <option value="5">Buchanan, Steven</option> <option value="8">Callahan, Laura</option> <option value="1">Davolio, Nancy</option> </select> <select id="lstYears" size="3" onchange="searchSales()"> <option selected="selected" value="1996">1996</option> <option value="1997">1997</option> <option value="1998">1998</option> </select> <br><textarea id=result cols=60 rows=10 ></textarea>

Ajax.Request객체의 생성자의 두번째 파라미터를 알아보겠는가.? {method: 'get', parameters: pars, onComplete: showResponse} 파라미터는 문자적 표기법으로 익명 객체를 나타낸다. 이것이 의미하는 것은 'get' 문자열을 포함하는 명명된 메소드(method)의 프라퍼티, HTTP요청 문자열을 포함하는 명명된 파라미터(parameter)의 프라퍼티, 그리고 함수 showResponse를 포함하는 onComplete 프라퍼티/메소드를 가지는 객체를 전달한다는 것이다.

당신이 AJAX를 비동기적으로(asynchronous) 서버에 호출할지를 결정하고 truefalse값으로 셋팅할수 있는 asynchronous(디폴트 값은 true이다.)와 같은 이 객체내 정의하고 활성화시킬수 있는 다른 프라퍼티가 몇개 있다.

이 파라미터는 AJAX호출을 위한 옵션을 정의한다. 샘플에서, 우리는 HTTP GET명령을 통해 첫번째 인자에서 url을 호출한다. 변수 pars내 포함된 조회문자열(querystring)을 전달하고 Ajax.Request객체는 응답을 받아들이는 작업을 마칠때 showResponse함수를 호출할 것이다.

당신이 아는것처럼, XMLHttpRequest는 HTTP호출을 하는 동안 진행과정을 보고한다. 이 진행과정은 4가지의 단계(Loading, Loaded, Interactive, 또는 Complete)를 알릴수 있다. 당신은 이러한 단계중에서 Ajax.Request객체 호출을 사용자정의 함수로 만들수 있다. Complete는 가장 공통적인 단계이다. 함수를 객체에게 알리기 위해, 우리 예제의 onComplete처럼 요청옵션내 onXXXXX로 명명된 프라퍼티/메소드를 간단히 제공하라. 당신이 전달하는 이 함수는 XMLHttpRequest객체 자체가 될 하나의 인자를 가진 객체에 의해 호출될것이다. 당신은 반환 데이터를 얻기 위해 이 객체를 사용할수 있고 아마도 호출의 HTTP결과 코드를 포함할 상태(status) 프라퍼티를 체크할것이다.

두개의 다른 흥미로운 옵션은 결과를 처리하기 위해 사용될수 있다. 우리는 AJAX호출이 에러없이 수행될때 호출될 함수처럼 onSuccess옵션을 명시할수 있다. onFailure옵션은 서버에러가 발생할때 호출될 함수가 될수 있다. onXXXXX의 선택적인 함수처럼, 이 두가지는 AJAX호출이 옮기는 XMLHttpRequest객체를 전달하도록 호출될수 있을것이다.

1.4.0 버전에서, 이벤트 콜랙 핸들링의 새로운 형태가 소개되었다. 만약 당신이 AJAX호출이 발생하는데도 불구하고 특정 이벤트를 위해 수행되어야 하는 코드를 가지고 있다면, 당신은 새로운 Ajax.Responders 객체를 사용할수 있다.

당신이 AJAX호출이 진행중이라는 시각적 표시를 보여주길 원한다고 해보자. 당신은 두개의 전역 이벤트 핸들러를 사용할수 있다. 하나는 첫번째 호출이 시작되었을때 아이콘을 보여주는것이고 다른 하나는 적어도 하나가 끝났을때 아이콘을 숨기는 것이다. 아래의 예제를 보자.

<script>
	var myGlobalHandlers = {
		onCreate: function(){
			Element.show('systemWorking');
		},

		onComplete: function() {
			if(Ajax.activeRequestCount == 0){
				Element.hide('systemWorking');
			}
		}
	};

	Ajax.Responders.register(myGlobalHandlers);
</script>

<div id='systemWorking'><img src='spinner.gif'>Loading...</div>
	

우리의 샘플은 흥미로운 방법으로 XML응답을 처리하지는 않았다. 우리는 textarea내 XML을 집어넣었다. 응답의 전형적인 사용법은 XML내부에서 바라는 정보를 찾고자 할것이고 몇몇 페이지 요소나 페이지내 HTML을 만드는 몇가지의 XSLT변형을 업데이트할것이다.

좀더 완전한 설명을 보기 위해서, Ajax.Request 참조options 참조를 보라..

toc

Ajax.Updater 클래스 사용하기

만약 당신이 HTML로 이미 포맷팅된 정보를 반환할수 있는 서버 종료점(endpoint)을 가진다면, 라이브러리는 당신이 Ajax.Updater클래스를 사용하는것을 좀더 쉽게 만들어준다. 이것으로 당신은 어느 요소가 AJAX호출로부터 반환된 HTML을 채우는지 알리게 된다. 예제는 내가 글로 표현하는 것보다 당신을 좀더 쉽게 이해하도록 도와줄것이다.

<script>
	function getHTML()
	{
		var url = 'http://yourserver/app/getSomeHTML';
		var pars = 'someParameter=ABC';
		
var myAjax = new Ajax.Updater( 'placeholder', url, { method: 'get', parameters: pars });
} </script> <input type=button value=GetHtml onclick="getHTML()"> <div id="placeholder"></div>

당신이 보는것처럼, 코드는 onComplete함수와 생성자에 전달된 요소 id를 제외하고 이전예제에 비해서 매우 간단하다. 클라이언트에서 서버 에러들을 다루는 것이 어떻게 가능한지 보기 위해 코드를 조금 변경해 보자.

우리는 호출을 위해 더 많은 옵션을 추가하고 에러 상황을 뽑아내기 위해 함수를 명시한다. 이것은 onFailure옵션을 사용하여 수행한다. 우리는 성공적인 작동의 경우에만 활성화될 묶음자(placeholder)를 명시할것이다. 이것을 달성하기 위해, 우리는 간단한 요소 id에서 두개의 프라퍼티(success-모든것이 정상적일때 사용되는, failure-어떤것이 실패일때 사용되는)를 가지는 객체로 첫번째 파라미터를 변경할 것이다. 우리는 예제에서 failure 프라퍼티를 사용하지 않을것이고, onFailure옵션에서 reportError함수를 사용할것이다.

<script>
	function getHTML()
	{
		var url = 'http://yourserver/app/getSomeHTML';
		var pars = 'someParameter=ABC';
		
var myAjax = new Ajax.Updater( {success: 'placeholder'}, url, { method: 'get', parameters: pars, onFailure: reportError });
} function reportError(request) { alert('Sorry. There was an error.'); } </script> <input type=button value=GetHtml onclick="getHTML()"> <div id="placeholder"></div>

만약 당신의 서버 로직이 HTML마크업 대신에 자바스크립트 코드를 반환한다면, Ajax.Updater객체는 자바스크립트 코드가 될수 있다. 자바스크립트로 응답을 처리하기 위한 객체를 얻기 위해, 당신은 객체 생성자의 마지막 인자로 프라퍼티들의 목록에 evalScripts: true;를 간단히 추가한다. 하지만 여기엔 문제가 있다. 이러한 스크립트 블럭은 페이지의 스크립트에 추가되지 않을것이다. 옵션이름인 evalScripts이 제시하는것처럼, 스크립트는 평가될것이다. 차이점이 무엇일까.? 요청된 URL이 반환하는 것이 무엇인지 추측해보자.

<script language="javascript" type="text/javascript">
	function sayHi(){
		alert('Hi');
	}
</script>

<input type=button value="Click Me" onclick="sayHi()">
			

이 경우 당신이 이전에 이것을 시도했다면 이것이 작동하지 않는것을 알고 있을것이다. 이유는 스크립트 블럭은 평가될것이고 평가된 스크립트는 sayHi 라는 이름의 함수를 생성하지 않을것이다. 이것은 아무것도 하지 않을것이다. 이 함수를 생성하기 위해, 우리는 함수를 생성하기 위해 변경할 필요가 있다. 아래를 보라.

<script language="javascript" type="text/javascript">
	
sayHi = function(){ alert('Hi'); };
</script> <input type=button value="Click Me" onclick="sayHi()">

이전 예제에서, 우리는 변수를 선언하기 위해 var 키워드를 사용하지 않았다. 그렇게 하는 것은 스크립트 블럭에 지역화될 함수 객체를 생성할것이다. var 키워드 없이 함수 객체는 window범위에서 작동한다.

좀더 상세한 complete설명을 위해서는, Ajax.Request 참조문서Ajax.options 참조문서를 보라.

toc

열거(Enumerating)...

우리는 루프(loop)에 친숙하다. 당신이 알다시피, 배열 자체를 생성하고 같은 종류의 요소로 채운다. 루프 제어구조(이를 테면, foreach, while, repeat 등등)을 생성하고 숫자로 된 인덱스를 통해 순차적으로 각각의 요소에 접근하고 그 요소로 작업을 수행한다.

당신이 이것에 대해 생각할때, 언제나 당신은 코드에 배열을 가지고 루프내 배열을 사용할것이라는것을 의미한다. 이러한 반복을 다루기 위해 좀더 많은 기능을 가진 배열 객체가 있다면 좋지 않겠는가.? 그렇다. 많은 프로그래밍 언어는 배열이나 유사한 구조(collection과 list와 같은)에서 이러한 기능을 제공한다.

prototype.js는 우리에게 반복가능한 데이터를 다룰때 사용하도록 구현된 Enumerable 객체를 제공한다. prototype.js 라이브러리는 더 나아가 Enumerable의 모든 메소드로 Array 클래스를 확장한다

toc

루프, 루비-스타일

표준 자바스크립트에서, 당신이 배열의 요소를 순차적으로 표시하길 원한다면, 당신은 다음처럼 작성할수 있다.

<script>
	function showList(){
		var simpsons = ['Homer', 'Marge', 'Lisa', 'Bart', 'Meg'];
for(i=0;i<simpsons.length;i++){ alert(simpsons[i]); }
} </script> <input type="button" value="Show List" onclick="showList();" >

prototype.js를 사용하면, 다음과 같이 다시 작성할수 있다.

	function showList(){
		var simpsons = ['Homer', 'Marge', 'Lisa', 'Bart', 'Meg'];
simpsons.each( function(familyMember){ alert(familyMember); });
}

당신은 특이한 문법으로 별로 좋지않다고 생각할지도 모른다. 위 예제에서, 엉망으로 만드는 것은 아무것도 없다.

each 메소드에 대한 인자처럼 전달되는 이 함수는 보았는가.? iterator 함수처럼 이것을 참조해보자.

toc

스테로이드(steroids)에서 당신의 배열

위에서 언급된것처럼, 이것은 같은 프라퍼티와 메소드를 가지는 배열내 모든 요소를 위해 공통이다. 우리의 새로운 배열을 가지고 iterator함수의 장점을 가질수 있는 방법을 보자.

문법에 따르는 요소를 찾아라.

<script>
	function findEmployeeById(emp_id){
		var listBox = $('lstEmployees')
		var options = listBox.getElementsByTagName('option');
		options = $A(options);
		var opt = options.find( function(employee){
			return (employee.value == emp_id);
		});
		alert(opt.innerHTML); //displays the employee name
	}
</script>

<select id="lstEmployees" size="10" >
	<option value="5">Buchanan, Steven</option>
	<option value="8">Callahan, Laura</option>
	<option value="1">Davolio, Nancy</option>
</select>

<input type="button" value="Find Laura" onclick="findEmployeeById(8);" > 
			

배열에서 항목을 걸러내는 방법을 보자. 그리고나서 각각의 요소로부터 맴버를 가져온다.

<script>
	function showLocalLinks(paragraph){
		paragraph = $(paragraph);
		var links = $A(paragraph.getElementsByTagName('a'));
		//find links that do not start with 'http'
		var localLinks = links.findAll( function(link){
			var start = link.href.substring(0,4);
			return start !='http';
		});
		//now the link texts
		var texts = localLinks.pluck('innerHTML');
		//get them in a single string
		var result = texts.inspect();
		alert(result);
	}

</script>
<p id="someText">
	This <a href="http://othersite.com/page.html">text</a> has 
	a <a href="#localAnchor">lot</a> of 
	<a href="#otherAnchor">links</a>. Some are 
	<a href="http://wherever.com/page.html">external</a>
	and some are <a href="#someAnchor">local</a>
</p>
<input type=button value="Find Local Links" onclick="showLocalLinks('someText')">
			

이것은 이 문법에 완전히 빠지도록 하기 위한 몇가지 예제를 가진다. 사용가능한 모든 함수를 위해 Enumerable and Array 참조문서를 보라.

toc

내가 강력하게 추천하는 책들.

다음의 책들은 AJAX애플리케이션을 만들기 위해 요구되는 새로운 스킬을 배우는데 많은 도움을 주었고 이미 알고 있던 스킬을 좀더 탄탄하게 만들어주었다. 나는 좋은 책이 충분히 금적적인 가치를 하고 오랜시간동안 가치를 이어간다고 생각한다.

toc


prototype.js 참조

JavaScript 클래스에 대한 확장

prototype.js라이브러리에 기능을 추가하기 위한 방법중 하나는 현재 존재하는 JavaScript클래스를 확장하는 것이다.

toc

Object 클래스를 위한 확장

메소드 종류 인자 상세설명
extend(destination, source) static destination: 객체, source: 객체 source에서 destination으로 모든 프라퍼티와 메소드를 복사하여 상속을 구현하기 위한 방법을 제공
inspect(targetObj) static targetObj: 객체 targetObj의 사람이 읽을수 있는 문자열 표현으로 반환. 주어진 객체가 inspect 인스턴스 메소드를 정의하지 않는다면, toString 의 값을 반환

toc

Number 클래스를 위한 확장

메소드 종류 인자 상세설명
toColorPart() instance (none) 숫자의 16진법 표현을 반환. 색상의 RGB컴포넌트를 HTML표현으로 변환할때 유용
succ() instance (none) 다음 숫자를 반환. 이 함수는 반복을 포함하는 시나리오에서 사용된다.
times(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체 인자 valueindex를 반복적으로 전달하는 iterator 함수를 호출하는 것은 iteration과 현재 index내 현재 값을 각각 포함한다.

다음의 예제는 0에서 9까지의 메시지 박스를 표시할것이다.

<script>
	function demoTimes(){
		var n = 10;
		n.times(function(index){
			alert(index);
		});
		/***************************
		 * you could have also used: 
		 *           (10).times( .... ); 
		 ***************************/
	}

</script>

<input type=button value="Test Number.times()" onclick="demoTimes()">
			

toc

Function 클래스를 위한 확장

메소드 종류 인자 상세설명
bind(object) instance object: 메소드를 소유하는 객체 함수(=메소드) 소유자 객체로 미리 묶는 함수의 인스턴스를 반환. 반환된 함수는 원래의 것과 같은 인자를 가질것이다.
bindAsEventListener(object) instance object: 메소드를 소유하는 객체 유하는 객체 함수(=메소드) 소유자 객체로 미리 묶는 함수의 인스턴스를 반환. 반환된 함수는 이것의 인자로 현재 이벤트 객체를 가질것이다.

실제로 이 확장중 하나를 보자.

<input type=checkbox id=myChk value=1> Test?
<script>
	//declaring the class
	var CheckboxWatcher = Class.create();

	//defining the rest of the class implementation
	CheckboxWatcher.prototype = {

	   initialize: function(chkBox, message) {
			this.chkBox = $(chkBox);
			this.message = message;
			//assigning our method to the event
			
this.chkBox.onclick = this.showMessage.bindAsEventListener(this);
}, showMessage: function(evt) { alert(this.message + ' (' + evt.type + ')'); } }; var watcher = new CheckboxWatcher('myChk', 'Changed'); </script>

toc

String 클래스를 위한 확장

메소드 종류 인자 상세설명
stripTags() instance (none) HTML이나 XML태그가 삭제된 문자열을 반환
stripScripts() instance (none) 삭제된 <script /> 블럭을 가진 문자열을 반환
escapeHTML() instance (none) HTML마크업 문자들이 escaped된 문자열 반환
unescapeHTML() instance (none) escapeHTML()의 반대
extractScripts() instance (none) 문자열내에서 발견되는 모든 <script />블럭을 포함하는 Array객체 반환
evalScripts() instance (none) 문자열내에서 발견되는 각각의 <script />블럭을 평가하기
toQueryParams() instance (none) 쿼리문자열(querystring)을 파라미터 이름에 의해 인덱스화되는 결합된 Array로 쪼개기
parseQuery() instance (none) toQueryParams()와 같음.
toArray() instance (none) 문자열을 이것의 문자들의 Array로 쪼개기
camelize() instance (none) -(하이픈)으로 분리된 문자열을 camelCaseString으로 변환하기. 이 함수는 예를 들면, 프라퍼티 스타일을 다루는 코드를 작성할때 유용하다.

toc

Array 클래스를 위한 확장

시작하기 위해, ArrayEnumerable를 확장한다. 그래서 Enumerable객체내에 정의되는 모든 편리한 메소드는 사용가능하다. 이것외에도, 아래의 메소드들이 구현되었다.

메소드 종류 인자 상세설명
clear() instance (none) 배열을 비우고 자체를 반환한다.
compact() instance (none) null 이거나 undefined인 요소를 제외하고 배열을 반환한다. 이 메소드는 배열자체를 변경하지 않는다.
first() instance (none) 배열의 첫번째 요소를 반환한다.
flatten() instance (none) 기복이 없고, 1차원의 배열을 반환한다. 이 함수는 배열이고 반환된 배열내 요소를 포함하는 배열의 각 요소를 찾음으로써 수행된다.
indexOf(value) instance value: 당신이 찾는 것 배열에서 찾아진다면 주어진 value의 0부터 시작하는 인덱스의 위치를 반환. value이 없다면 -1을 반환
inspect() instance (none) 요소를 가진 배열의 잘 포맷팅된 문자열 표시를 반환하기 위해 변경
last() instance (none) 배열의 마지막 요소를 반환한다.
reverse([applyToSelf]) instance applyToSelf: 배열 자체가 반전되는지 표시 역순서로 배열을 반환. 인자가 주어지지 않거나 인자가 true라면, 배열자체는 반전될것이다. 그렇지 않으면 변경되지 않고 남는다.
shift() instance (none) 첫번째 요소를 반환하고 배열로부터 이것을 제거한다. 배열의 길이는 1 감소한다.
without(value1 [, value2 [, .. valueN]]) instance value1 ... valueN: 배열내 존재한다면 제외될 값 인자로 주어진 요소를 제외한 배열을 반환

toc

document DOM 객체를 위한 확장

메소드 종류 인자 상세설명
getElementsByClassName(className [, parentElement]) instance className: 요소와 연관된 CSS클래스 이름, parentElement: 객체 또는 가져올 요소를 포함하는 요소의 id. 주어진 CSS클래스명과 연관된 모든 요소를 반환. parentElement id가 주어졌다면, 전체 문서가 검색될것이다.

toc

Event 객체를 위한 확장

프라퍼티 타입 상세설명
KEY_BACKSPACE Number 8: 되돌리기(<-) 키를 위한 상수 코드.
KEY_TAB Number 9: 탭키를 위한 상수코드
KEY_RETURN Number 13: 리턴키를 위한 상수코드
KEY_ESC Number 27: Esc키를 위한 상수코드
KEY_LEFT Number 37: 왼쪽 화살표 키를 위한 상수코드
KEY_UP Number 38: 위쪽 화살표 키를 위한 상수코드
KEY_RIGHT Number 39: 오른쪽 화살표 키를 위한 상수코드
KEY_DOWN Number 40: 아래쪽 화살표 키를 위한 상수코드
KEY_DELETE Number 46: Delete키를 위한 상수코드
observers: Array 캐시된 관찰자(observers)의 목록. 상세한 객체의 내부구현의 일부

메소드 종류 인자 상세설명
element(event) static event: 이벤트 객체 이벤트를 일으키는 요소를 반환
isLeftClick(event) static event: 이벤트 객체 마우스 왼쪽 버튼을 클릭시 true값 반환
pointerX(event) static event: 이벤트 객체 페이지에서 마우스 포인터의 x측 좌표값 반환
pointerY(event) static event: 이벤트 객체 페이지에서 마우스 포인터의 y측 좌표값 반환
stop(event) static event: 이벤트 객체 이벤트의 디폴트 행위를 취소하고 위임을 연기하기 위해 이 함수를 사용
findElement(event, tagName) static event: 이벤트 객체, tagName: 원하는 태그명 DOM트리 위쪽으로 가로지른다. 주어진 태그명을 가진 첫번째 요소를 검색한다. 이벤트를 발생시키는 요소로부터 시작한다.
observe(element, name, observer, useCapture) static element: 객체 또는 아이디, name: 이벤트 명 (like 'click', 'load', etc), observer: 이벤트를 다루는 함수, useCapture: true라면, capture내 이벤트를 다루고 false라면 bubbling 내 이벤트를 다룬다. 이벤트를 위한 이벤트 핸들러 함수를 추가
stopObserving(element, name, observer, useCapture) static element: 객체 또는 아이디, name: 이벤트 명 ('click' 처럼), observer: 이벤트를 다루는 함수, useCapture: true라면 capture내 이벤트를 다루고, false라면 bubbling내에서 다룬다. 이벤트로부터 이벤트 핸들러를 제거
_observeAndCache(element, name, observer, useCapture) static   private메소드, 이것에 대해 걱정하지말라.
unloadCache() static (none) private메소드, 이것에 대해 걱정하지말라. 메모리로부터 캐시된 모든 관찰자(observer)를 지운다.

window객체의 이벤트를 로그하기 위한 이벤트 핸들러를 추가하는 객체를 사용하는 방법을 보자.

<script>
	Event.observe(window, 'load', showMessage, false);

	function showMessage() {
	  alert('Page loaded.');
	}
</script>			
			

toc

prototype.js에 새롭게 정의된 객체와 클래스

라이브러리가 당신을 돕는 다른 방법은 객체지향 디자인과 공통적인 기능을 위한 지원 모두를 구현하는 많은 객체를 제공하는 것이다.

toc

PeriodicalExecuter 객체

이 객체는 주어진 함수를 주어진 시간간격으로 반복적으로 호출하기 위한 로직을 제공한다.

메소드 종류 인자 상세설명
[ctor](callback, interval) constructor callback: 파라미터 성격이 아닌 함수, interval: 초단위 시간간격 함수를 반복적으로 호출할 이 객체의 하나의 인스턴스를 생성

프라퍼티 타입 상세설명
callback Function() 호출되기 위한 함수. 이 함수로 전달될 파라미터는 없다.
frequency Number 이것은 수초내 간격으로 실질적으로 작용
currentlyExecuting Boolean 만약 함수 호출이 진행중이라면 표시

toc

Prototype 객체

Prototype 객체는 사용되는 라이브러리의 버전을 명시하는 것보다 중요한 역활을 가지지 않는다.

프라퍼티 타입 상세설명
Version String 라이브러리의 버전
emptyFunction Function() 비어있는(empty) 함수 객체
K Function(obj) 주어진 파라미터를 되돌리는 함수 객체
ScriptFragment String 스크립트를 확인하는 정규식 표현

toc

Enumerable 객체

Enumerable 객체는 list형태의 구조내에서 항목을 반복하기 위한 좀더 멋진 코드를 작성하는 것을 허용한다.

많은 객체들은 유용한 인터페이스에 영향을 끼치기 위해 Enumerable 을 확장한다.

프라퍼티 타입 상세설명
Version String 라이브러리의 버전

메소드 종류 인자 상세설명
each(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체 주어진 iterator함수를 호출하는 것은 첫번째 인자내 목록으로 각각의 요소와 두번째 인자내 요소의 인덱스 전달한다.
all([iterator]) instance iterator: Function(value, index)를 충족하는 함수 객체 이 함수는 주어진 함수를 사용하여 값들의 전체 집합을 테스트하기 위한 방법이다. iterator 함수가 어떤 요소를 위해 falsenull을 반환한다면, all은 false를 반환할것이다. 그렇지 않다면 true를 반환할것이다. iterator가 주어지지 않는다면, 요소 자체가 falsenull이 아닌지 테스트할것이다. 당신은 "모든 요소가 false가 아닌지 체크한다"와 같이 이것을 읽을수 있다.
any(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체(선택사항) 이 함수는 주어진 함수를 사용하여 값들의 전체 집합을 테스트하기 위한 방법이다. iterator함수가 어떤 요소를 위해 falsenull을 반환하지 않는다면 anytrue를 반환할것이다. 그렇지 않다면 false를 반환할것이다. iterator가 주어지지 않는다면, 요소 자체가 falsenull이 아닌지 테스트할것이다. 당신은 "어느 요소가 false가 아닌지 체크한다"와 같이 이것을 읽을수 있다.
collect(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체 집합내 각각의 요소를 위한 iterator함수를 호출하고 Array로 각각의 결과를 반환한다. 집합내 각각의 요소를 위한 하나의 결과 요소는 같은 순서이다.
detect(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체 집합내 각각의 요소를 위한 iterator함수를 호출하고 true를 반환하는 iterator함수를 야기하는 첫번째 요소를 반환한다. true를 반환하는 요소가 없다면, detect는 null을 반환한다.
entries() instance (none) toArray()와 같다.
find(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체 detect()와 같다.
findAll(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체 집합내 각각의 요소를 위한 iterator함수를 호출하고 true로 해석되는 값을 반환하는 iterator함수를 야기하는 모든 요소를 가진 Array을 반환한다. 이 함수는 reject()와는 반대의 함수이다.
grep(pattern [, iterator]) instance pattern: 요소를 일치시키기 위해 사용되는 RegExp객체, iterator: Function(value, index)를 충족하는 함수 객체 집합내 각각의 요소의 문자열 값을 pattern 정규표현식에 대해 테스트한다. 함수는 정규표현식에 대응되는 모든 요소를 포함하는 Array 를 반환할것이다. iterator함수가 주어진다면, Array는 대응되는 각각의 요소를 가진 iterator를 호출한 결과를 포함할것이다.
include(obj) instance obj: 객체 집합내 주어진 객체를 찾도록 시도한다. 객체가 찾아진다면, true를 반환하고 찾지 못한다면 false를 반환한다.
inject(initialValue, iterator) instance initialValue: 초기화 값처럼 사용되는 객체, iterator: Function(accumulator, value, index)를 충족하는 함수 객체 iterator함수를 사용하여 집합의 모든 요소를 조합한다. 호출된 iterator는 accumulator인자에서 이전 반복의 결과를 전달한다. 첫번째 반복은 accumulator인자내 initialValue를 가진다. 마지막 결과는 마지막 반환값이다.
invoke(methodName [, arg1 [, arg2 [...]]]) instance methodName: 각각의 요소내에서 호출될 메소드의 이름, arg1..argN: 메소드 호출로 전달될 인자. 집합의 각각의 요소내 methodName에 의해 명시되는 메소드를 호출하는 것은 주어진 인자(arg1에서 argN) 전달하고 Array객체로 결과를 반환한다.
map(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체 collect()과 같다.
max([iterator]) instance iterator: Function(value, index)를 충족하는 함수 객체 집합내 가장 큰 값이나 iterator가 주어진다면 집합내 각각의 요소를 위한 iterator호출의 가장 큰 결과를 반환한다.
include(obj) instance obj: 객체 include()과 같다.
min([iterator]) instance iterator: Function(value, index)를 충족하는 함수 객체 집합내 가장 작은 값을 가진 요소나 iterator가 주어진다면 집합내 각각의 요소를 위한 iterator호출의 가장 작은 결과를 가진 요소를 반환한다.
partition([iterator]) instance iterator: Function(value, index)를 충족하는 함수 객체 두개의 다른 배열을 포함하는 Array를 반환한다. 첫번째 배열은 true를 반환하는 iterator함수를 야기하는 모든 요소를 포함할것이고 두번째 배열은 남아있는 요소를 포함할것이다. 만약 iterator가 주어지지 않는다면, 첫번째 배열은 true로 해석하는 요소를 포함할것이고 다른 배열은 남아있는 요소를 포함할것이다.
pluck(propertyName) instance propertyName : 각각의 요소로부터 읽어들이는 프라퍼티의 이름. 이것은 요소의 인덱스를 포함할수 있다. 집합의 각각의 요소내 propertyName에 의해 명시된 프라퍼티에 값을 가져가고 Array객체로 결과를 반환한다.
reject(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체 집합내 각각의 요소를 위한 iterator함수를 호출하고 false로 해석하는 값을 반환하는 iterator함수를 야기하는 모든 요소를 가진 Array를 반환한다. 이 함수는 findAll()과는 반대되는 함수이다..
select(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체 findAll()과 같다.
sortBy(iterator) instance iterator: Function(value, index)를 충족하는 함수 객체 iterator함수 호출결과를 따르는 정렬된 모든 요소를 가진 Array을 반환.
toArray() instance (none) 집합의 모든 요소를 가지는 Array를 반환.
zip(collection1[, collection2 [, ... collectionN [,transform]]]) instance collection1 .. collectionN: 병합될 목록, transform: Function(value, index)를 충족하는 함수 객체 현재의 집합으로 각각의 주어진 집합을 병합한다. 이 병합 작업은 같은 수의 요소를 가진 새로운 배열을 반환한다. 현재 집합과 각각의 요소가 각각의 병합된 집합으로부터 같은 인덱스를 가진 요소의 배열(이것을 하위 배열이라고 부르자.)이다. transform함수가 주어진다면, 각각의 하위 배열은 반환되기 전에 이 함수에 의해 변형딜것이다. 빠른 예제 : [1,2,3].zip([4,5,6], [7,8,9]).inspect() 는 "[[1,4,7],[2,5,8],[3,6,9] ]" 를 반환한다.

toc

Hash 객체

Hash 객체는 hash구조를 구현한다. 이를테면, Key:Value쌍의 집합.

Hash객체내 각각의 항목은 두개의 요소(첫번째는 key, 두번째는 value)를 가진 배열이다. 각각의 항목은 두개의 프라퍼티(keyvalue)를 가진다.

메소드 종류 인자 상세설명
keys() instance (none) 모든 항목의 key를 가진 Array을 반환
values() instance (none) 모든 항목의 value를 가진 Array을 반환
merge(otherHash) instance otherHash: Hash 객체 hash와 전달된 다른 hash를 조합하고 새로운 결과 hash를 반환
toQueryString() instance (none) 쿼리 문자열처럼 포맷팅된 문자열로 hash의 모든 항목을 반환. 이를테면 'key1=value1&key2=value2&key3=value3'
inspect() instance (none) key:value쌍을 가진 hash의 포맷팅된 문자열 표현을 반환하기 위해 변경(오버라이드)

toc

ObjectRange 클래스

Enumerable으로부터 상속

상위 경계나 하위 경계로 값들의 범위를 표시

프라퍼티 타입 종류 상세설명
start (any) instance 범위의 시작값
end (any) instance 범위의 마지막값
exclusive Boolean instance 경계자체가 범위의 일부인지 판단

메소드 종류 인자 상세설명
[ctor](start, end, exclusive) constructor start: 시작값, end: 마지막값, exclusive: 경계가 범위내 포함되는가.? 하나의 range객체를 생성한다. start 에서 end로 범위를 지정한다. startend가 같은 타입의 객체이고 succ()메소드를 가져야만 한다.
include(searchedValue) instance searchedValue: 검색할 값 주어진 값이 범위내 값인지 체크. truefalse값을 반환한다.

toc

Class 객체

Class 객체는 라이브러리에서 다른 클래스를 선언할때 사용된다. 클래스를 선언할때 이 객체를 사용하는 것은 생성자로 제공되는 initialize()메소드를 지원하기 위한 새로운 클래스를 발생시킨다.

아래의 샘플을 보라.

//declaring the class
var MySampleClass = Class.create();

//defining the rest of the class implmentation
MySampleClass.prototype = {

   initialize: function(message) {
		this.message = message;
   },

   showMessage: function(ajaxResponse) {
      alert(this.message);
   }
};	

//now, let's instantiate and use one object
var myTalker = new MySampleClass('hi there.');
myTalker.showMessage(); //displays alert

			

메소드 종류 인자 상세설명
create(*) instance (any) 새로운 클래스를 위한 생성자를 정의

toc

Ajax 객체

이 객체는 AJAX기능을 제공하는 많은 다른 클래스를 위한 root와 명명공간(namespace)처럼 제공한다.

프라퍼티 타입 종류 상세설명
activeRequestCount Number instance 진행중인 AJAX요청의 수.

메소드 종류 인자 상세설명
getTransport() instance (none) 새로운 XMLHttpRequest 객체를 반환

toc

Ajax.Responders 객체

Enumerable로 부터 상속되었다

이 객체는 Ajax관련 이벤트가 발생할때 호출될 객체의 목록을 보존한다. 예를 들어, 당신이 AJAX작업을 위한 전역 예외 핸들러를 연결하길 원한다면 이 객체를 사용할수 있다.

프라퍼티 타입 종류 상세설명
responders Array instance 객체의 목록은 AJAX이벤트 알림(notifications)을 위해 등록되었다..

메소드 종류 인자 상세설명
register(responderToAdd) instance responderToAdd: 호출될 메소드를 가진 객체 responderToAdd인자를 전달하는 객체는 AJAX이벤트(이를테면, onCreate, onComplete, onException 등등)처럼 명명된 메소드를 포함해야만 한다. 유사한 이벤트가 발생하면, 적절한 이름을 가진 메소드를 포함하는 모든 등록된 객체가 호출되는 메소드를 가질것이다.
unregister(responderToRemove) instance responderToRemove: list로부터 제거될 객체 responderToRemove 인자로 전달되는 객체는 등록된 객체의 list로부터 제거될것이다.
dispatch(callback, request, transport, json) instance callback: 보고되는 AJAX이벤트 이름, request: 이벤트를 책임지는 the Ajax.Request 객체, transport: AJAX호출을 가지는 XMLHttpRequest 객체, json: 응답의 X-JSON 헤더(존재할때만) 등록된 객체의 목록을 통해 실행하는 것은 callback 인자내 결정된 메소드를 가지는 것을 찾는다. 호출되는 각각의 메소드는 다른 3개의 인자를 전달한다. AJAX응답이 몇몇 JSON컨텐츠를 가지는 X-JSON HTTP 헤더를 포함한다면, 이것은 평가되고 json인자로 전달될것이다. 만약 이벤트가 onException라면, transport인자는 대신에 예외를 가질것이고 json은 전달되지 않을것이다.

toc

Ajax.Base 클래스

이 클래스는 Ajax객체내 정의된 다른 대부분의 클래스를 위한 기본(base)클래스처럼 사용된다.

메소드 종류 인자 상세설명
setOptions(options) instance options: AJAX 옵션 AJAX작업을 위해 필요한 옵션 셋팅
responseIsSuccess() instance (none) 만약 AJAX작업이 성공한다면 true를 반환하고, 실패한다면 false를 반환
responseIsFailure() instance (none) responseIsSuccess()와는 반대.

toc

Ajax.Request 클래스

Ajax.Base로 부터 상속

AJAX 작업을 캡슐화

프라퍼티 타입 종류 상세설명
Events Array static AJAX작업중 보고되는 가능한 이벤트/상태의 목록. 목록은 'Uninitialized', 'Loading', 'Loaded', 'Interactive', 그리고 'Complete.'를 포함한다.
transport XMLHttpRequest instance AJAX작업을 가지는 XMLHttpRequest 객체
url String instance 요청에 의해 대상이 되는 URL

메소드 종류 인자 상세설명
[ctor](url, options) constructor url: 꺼내기 위한 url, options: AJAX 옵션 주어진 옵션을 사용하여 주어진 url을 호출할 이 객체의 하나의 인스턴스를 생성. 중요사항: 선택된 url은 브라우저의 보안 셋팅을 위한 대상이 될 가치가 없다. 많은 경우 브라우저는 현재 페이지처럼 같은 호스트로부터가 아니라면 url을 가져오지 않을것이다. 당신은 설정을 피하거나 사용자의 브라우저를 제한하기 위한 로컬 url만을 사용할 것이다.
evalJSON() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 AJAX응답내 존재하는 X-JSON HTTP헤더의 컨텐츠를 평가하기 위해 내부적으로 호출된다.
evalReponse() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. AJAX응답이 text/javascriptContent-type헤더를 가진다면, 응답 몸체는 평가되고 이 메소드는 사용될것이다.
header(name) instance name: HTTP 헤더명 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 AJAX응답의 HTTP헤더의 컨텐츠를 가져오기 위해 내부적으로 호출된다.
onStateChange() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 AJAX호출 상태 변경시 객체 자체에 의해 호출된다.
request(url) instance url: AJAX호출을 위한 url 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 생성자를 호출하는 동안 벌써 호출되었다.
respondToReadyState(readyState) instance readyState: 상태 숫자값(1 에서 4) 이 메소드는 대개 외부에서 호출되지 않는다. 이것은 AJAX호출 상태가 변경될때 객체 자체에 의해 호출된다.
setRequestHeaders() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 HTTP요청을 하는 동안 보내어질 HTTP헤더를 조합하기 위한 객체 스스로에 의해 호출된다.

toc

options 인자 객체

AJAX작업의 중요한 부분은 options 인자이다. 이것은 기대되는 프라퍼티를 가지는 동안 어떠한 객체도 전달될수 있다. 이것은 AJAX호출을 위해 익명 객체를 생성하는 것이 공통적이다.

프라퍼티 타입 디폴트 상세설명
method String 'post' HTTP요청의 메소드
parameters String '' 요청에 전달한 값들의 url형태의 목록
asynchronous Boolean true AJAX호출이 비동기적으로 만들어지는지 표시
postBody String undefined HTTP POST의 경우 요청의 몸체내 전달되는 내용
requestHeaders Array undefined 요청과 함께 전달되기 위한 HTTP헤더의 목록. 이 목록은 많은 수의 항목을 가져야 한다. 나머지 항목은 사용자 정의 헤더의 이름이다. 그리고 다음의 항목은 헤더의 문자열 값이다. 예제 : ['my-header1', 'this is the value', 'my-other-header', 'another value']
onXXXXXXXX Function(XMLHttpRequest) undefined 각각의 이벤트/상태가 AJAX호출이 발생하는 동안 도착할때 호출될 사용자정의 함수. 예제 var myOpts = {onComplete: showResponse, onLoaded: registerLoaded};. 사용되는 함수는 AJAX작업을 가지는 XMLHttpRequest객체를 포함하는 하나의 인자를 받을것이다.
onSuccess Function(XMLHttpRequest) undefined AJAX호출이 성공적으로 완성될때 호출될 사용자정의 함수. 사용되는 함수는 AJAX작업을 가지는 XMLHttpRequest객체를 포함하는 하나의 인자를 받을것이다.
onFailure Function(XMLHttpRequest) undefined AJAX호출이 에러를 가진채 끝날때 호출될 사용자정의 함수. 사용되는 함수는 AJAX작업을 가지는 XMLHttpRequest객체를 포함하는 하나의 인자를 받을것이다.
insertion Function(Object, String) null 삽입하기 위해 호출되는 함수는 텍스트를 요소로 반환한다. 함수는 수정되기 위한 요소객체와 Ajax.Updater객체에만 적용되는 응답 텍스트의 두개의 인자를 가지고 호출된다.
evalScripts Boolean undefined, false 스크립트 블럭이 응답이 도착했을때 평가할지를 판단. Ajax.Updater객체에만 적용.
decay Number undefined, 1 Ajax.PeriodicalUpdater 객체는 받은 응답이 마지막 것과 같을때 비율을 새롭게 하여 연속적인 후퇴를 결정. 예를 들어, 당신이 2를 사용한다면, 새롭게 된것중에 하나가 이전것과 같은 결과를 만든후에, 객체는 다음 refresh를 위한 시간의 두배를 기다릴것이다. 이것은 다시 반복한다면, 객체는 4배를 기다릴것이다. 이것을 후퇴를 피하기 위해 정의되지 않거나 1을 사용하도록 남겨두라.
frequency Number undefined, 2 초단위의 갱신간격(횟수가 아닌), Ajax.PeriodicalUpdater객체에만 적용.

toc

Ajax.Updater 클래스

Ajax.Request로 부터 상속

요청된 url이 당신 페이지의 특정 요소내 직접적으로 삽입하길 원하는 HTML을 반환할때 사용된다. 당신은 url이 도착을 평가할 <script>블럭을 반환할때 이 객체를 사용할수 있다. 스크립트로 작업하기 위해 evalScripts 옵션을 사용하라.

프라퍼티 타입 종류 상세설명
containers Object instance 이 객체는 두개의 프라퍼티(containers.success 는 AJAX호출이 성공할때 사용될것이다. 그리고 AJAX호출이 실패한다면 containers.failure가 사용될것이다.)를 포함한다.

메소드 종류 인자 상세설명
[ctor](container, url, options) constructor container: 이것은 요소의 id, 요소객체 자체, 또는 두개의 프라퍼티(AJAX호출이 성공했을때 사용될 object.success 요소(또는 id), 그리고 AJAX호출이 실패했을때 사용될 object.failure요소(또는 id))를 가지는 객체가 될수 있다. url: 가져오기 위한 url, options: AJAX 옵션 주어진 옵션을 사용하여 주어진 url을 호출할 이 객체의 하나의 인스턴스를 생성.
updateContent() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 응답을 받았을때 객체 자체에 의해 호출된다. 이것은 HTML로 적절한 요소를 수정하거나 insertion옵션내 전달되는 함수를 호출할것이다. 이 함수는 두개의 인자(수정되기 위한 요소와 응답 텍스트)를 가지고 호출될것이다.

toc

Ajax.PeriodicalUpdater 클래스

Ajax.Base로 부터 상속

이 클래스는 반복적으로 인스턴스화하고 페이지에서 요소를 새롭게 하거나 Ajax.Updater가 수행할수 있는 다른 작업중 어느것을 수행하기 위한 Ajax.Updater객체를 사용한다. 좀더 많은 정보를 위해 Ajax.Updater 참조를 체크하라.

프라퍼티 타입 종류 상세설명
container Object instance 이 값은 Ajax.Updater생성자에 일관적으로 전달될것이다.
url String instance 이 값은 Ajax.Updater의 생성자에 일관적으로 전달될것이다.
frequency Number instance 초단위의 refresh간격. 디폴트는 2초. 이 숫자는 Ajax.Updater 객체를 호출할때 현재 축소(decay)에 의해 곱해질것이다.
decay Number instance 작업을 재-수행할때 적용될 축소(decay)레벨을 유지
updater Ajax.Updater instance 가장 최신에 사용된 Ajax.Updater 객체
timer Object instance 다른 refresh를 위한 시각일때 객체를 알리기 위해 사용되는 자바스크립트 타이머

메소드 종류 인자 상세설명
[ctor](container, url, options) constructor or container:이것은 요소의 id, 요소객체 자체, 또는 두개의 프라퍼티(AJAX호출이 성공할때 사용될 object.success 요소(나 id), AJAX호출이 실패할때 사용할 object.failure 요소(나 id))를 가지는 객체가 될수 있다. url: 가져오기 위한 url, options: AJAX 옵션 주어진 옵션을 사용하여 주어진 url을 호출할 이 객체의 하나의 인스턴스를 생성
start() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것의 정기적인 작업 수행을 시작하기 위해 객체 자체에 의해 호출된다.
stop() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것의 정기적인 작업 수행을 시작하기 위해 객체 자체에 의해 호출된다.
updateComplete() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 요청을 완성한 후에 사용되는 Ajax.Updater에 의해 호출된다. 이것은 다음 refresh스케줄링 하기 위해 사용된다.
onTimerEvent() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 다음 수정을 위한 시각일때 내부적으로 호출된다.

toc

Element 객체

이 객체는 DOM내 요소를 변경하기 위해 몇몇 유틸리티성 함수들을 제공한다.

메소드 종류 인자 상세설명
addClassName(element, className) instance element: element 객체 또는 아이디, className: CSS 클래스명 주어진 class명을 요소의 class명으로 추가
classNames(element) instance element: element 객체 또는 아이디 주어진 element와 관련된 CSS class명을 표시하는 Element.ClassNames 객체를 반환
cleanWhitespace(element) instance element: element 객체 또는 아이디 요소의 자식노드에서 공백을 제거
empty(element) instance element: element 객체 또는 아이디 element태그가 비어있는지(또는 공백만을 가지고 있는지) 표시하는 Boolean값을 반환
getDimensions(element) instance element: element 객체 또는 아이디 element의 면적(dimensions)을 반환. 반환된 값은 두개의 프라퍼티(heightwidth)를 가지는 객체이다.
getHeight(element) instance element: element 객체 또는 아이디 요소의 offsetHeight값을 반환
getStyle(element, cssProperty) instance element: element 객체 또는 아이디, cssProperty : CSS프라퍼티('prop-name' 또는 'propName' 가 작동하는 형태)의 이름 주어진 element내 CSS프라퍼티의 값을 반환하거나 존재하지 않는다면 null 을 반환
hasClassName(element, className) instance element: element 객체 또는 아이디, className: CSS class명 요소가 class명중에 하나로 주어진 class명을 가진다면 true를 반환
hide(elem1 [, elem2 [, elem3 [...]]]) instance elemN: element 객체 또는 아이디 style.display'none'로 셋팅하여 각각의 요소를 숨긴다.
makeClipping(element) instance element: element 객체나 아이디
makePositioned(element) instance element: element 객체나 아이디 element의 style.position'relative'로 변경
remove(element) instance element: element 객체 또는 아이디 문서로 부터 요소를 제거한다.
removeClassName(element, className) instance element: element 객체 또는 아이디, className: CSS 클래스명 요소의 class명으로 부터 주어진 class명을 제거
scrollTo(element) instance element: element 객체나 아이디 창을 element위치로 스크롤
setStyle(element, cssPropertyHash) instance element: element 객체나 아이디, cssPropertyHash : 적용되기 위한 스타일을 가지는 Hash객체 cssPropertyHash 인자내 값에 따라, 주어진 element내 CSS프라퍼티의 값을 셋팅.
show(elem1 [, elem2 [, elem3 [...]]]) instance elemN: element 객체 또는 아이디 style.display''로 다시 셋팅하여 각각의 요소를 보여준다.
toggle(elem1 [, elem2 [, elem3 [...]]]) instance elemN: element 객체 또는 아이디 각각의 전달된 요소의 가시성(visibility)을 토글(toggle)한다.
undoClipping(element) instance element: element 객체 또는 아이디
undoPositioned(element) instance element: element 객체 또는 아이디 element의 style.position''으로 초기화
update(element, html) instance element: element 객체 또는 아이디, html: html 컨텐츠 주어진 html인자를 가지는 요소의 내부 html을 대체. 주어진 html이 <script>블럭을 포함한다면, 그것들은 포함되지는 않지만 평가될것이다.
visible(element) instance element: element 객체 또는 아이디 요소가 눈에 보이는지 표시하는 Boolean값을 반환

toc

Element.ClassNames class

Enumerable로부터 상속

element에 관련된 CSS class명의 collection을 표시

메소드 종류 인자 상세설명
[ctor](element) constructor element: DOM element 객체또는 아이디 주어진 element의 CSS class명을 표시하는 Element.ClassNames 객체를 생성
add(className) instance className: CSS class 명 element에 관련된 class명의 리스트에 주어진 CSS class명을 추가
remove(className) instance className: CSS class 명 element에 관련된 class명의 리스트로부터 주어진 CSS class명을 제거
set(className) instance className: CSS class 명 주어진 CSS class명을 가진 element을 결합, element로부터 다른 class명을 제거.

toc

The Abstract 객체

이 객체는 라이브러리내 다른 클래스를 위한 root처럼 제공한다. 이것은 어떤 프라퍼티나 메소드도 가지지 않는다. 이 객체에 정의된 클래스는 전통적인 추상 클래스처럼 처리된다.

toc

Abstract.Insertion 클래스

이 클래스는 동적으로 내용물을 추가할 다른 클래스를 위한 기본 클래스처럼 사용된다. 이 클래스는 추상 클래스처럼 사용된다.

메소드 종류 인자 상세설명
[ctor](element, content) constructor element: element 객체 또는 아이디, content: 삽입되는 HTML 동적 내용물 삽입을 도울 객체를 생성
contentFromAnonymousTable() instance (none)

프라퍼티 타입 종류 상세설명
adjacency String static, parameter 내용물이 주어진 요소에 대해 상대적으로 위치할 지점을 명시하는 파라미터. 가능한 값은 'beforeBegin', 'afterBegin', 'beforeEnd', 그리고 'afterEnd'.
element Object instance 삽입이 상대적으로 만들어질 요소객체
content String instance 삽입될 HTML.

toc

Insertion 객체

이 객체는 라이브러리내 다른 클래스를 위한 root처럼 제공한다. 이것은 어떠한 프라퍼티나 메소드를 가지지 않는다. 이 객체에 정의된 클래스는 전통적인 추상 클래스처럼 처리된다.

toc

Insertion.Before 클래스

Abstract.Insertion로 부터 상속

요소 앞에 HTML삽입

메소드 종류 인자 상세설명
[ctor](element, content) constructor element: element 객체 또는 아이디, content: 삽입되는 HTML Abstract.Insertion으로 부터 상속. 동적으로 내용물을 삽입하는 것을 돕는 객체를 생성

다음의 코드는

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going?</span>

<script> new Insertion.Before('person', 'Chief '); </script>
			

다음처럼 HTML이 변경될것이다.

<br>Hello, Chief <span id="person" style="color:red;">Wiggum. How's it going?</span>	
			

toc

Insertion.Top 클래스

Abstract.Insertion로 부터 상속

요소아래의 첫번째 자식으로 HTML을 삽입. 이 내용물은 요소의 열기 태그뒤에 위치할것이다.

메소드 종류 인자 상세설명
[ctor](element, content) constructor element: element 객체 또는 아이디, content: 삽입되는 HTML Abstract.Insertion으로부터 상속. 동적으로 내용물을 삽입하는 것을 돕는 객체 생성

다음의 코드는

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going?</span>

<script> new Insertion.Top('person', 'Mr. '); </script>
			

다음처럼 HTML이 변경될것이다.

<br>Hello, <span id="person" style="color:red;">Mr. Wiggum. How's it going?</span>	
			

toc

Insertion.Bottom 클래스

Abstract.Insertion로 부터 상속

요소아래의 마지막 자식으로 HTML삽입. 내용물은 요소의 닫기 태그앞에 위치할것이다.

메소드 종류 인자 상세설명
[ctor](element, content) constructor element: element 객체 또는 아이디, content: HTML to be inserted Abstract.Insertion로 부터 상속. 동적으로 내용물을 삽입하는 것을 돕는 객체 생성

다음의 코드는

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going?</span>

<script> new Insertion.Bottom('person', " What's up?"); </script>
			

다음처럼 HTML이 변경될것이다.

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going? What's up?</span>	
			

toc

Insertion.After 클래스

Abstract.Insertion로 부터 상속

요소의 닫기 태그뒤 HTML삽입

메소드 종류 인자 상세설명
[ctor](element, content) constructor element: element 객체 또는 아이디, content: HTML to be inserted Abstract.Insertion으로부터 상속. 동적으로 내용물을 삽입하는 것을 돕는 객체 생성

다음의 코드는

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going?</span>

<script> new Insertion.After('person', ' Are you there?'); </script>
			

다음처럼 HTML이 변경될것이다.

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going?</span> Are you there?	
			

toc

Field 객체

이 객체는 폼내 input필드와 작동하기 위한 몇가지 유틸리티성 함수를 제공한다.

메소드 종류 인자 상세설명
clear(field1 [, field2 [, field3 [...]]]) instance fieldN: field element 객체 또는 아이디 field요소로부터 각각 전달된 값을 지움(clear)
present(field1 [, field2 [, field3 [...]]]) instance fieldN: field element 객체 또는 아이디 모든 폼 field가 빈값이 아니라면 true를 반환
focus(field) instance field: field element 객체 또는 아이디 주어진 폼 field로 입력 포커스 이동
select(field) instance field: field element 객체 또는 아이디 텍스트 선택을 지원하는 field내 값을 선택
activate(field) instance field: field element 객체 또는 아이디 포커스를 이동하고 텍스트 선택을 지원하는 field내 값을 선택

toc

Form 객체

이 객체는 데이터 항목 폼과 그것들의 입력 field와 작동하기 위한 몇몇 유틸리티성 함수를 제공한다.

메소드 종류 인자 상세설명
serialize(form) instance form: form element 객체 또는 아이디 'field1=value1&field2=value2&field3=value3'처럼 field명과 값의 url형태의 목록을 반환
findFirstElement(form) instance form: form element 객체 또는 아이디 form에서 첫번째로 사용가능한 필드 element를 반환
getElements(form) instance form: form element 객체 또는 아이디 폼내 모든 입력 field를 포함하는 Array 반환
getInputs(form [, typeName [, name]]) instance form: form element 객체 또는 아이디, typeName: input요소의 타입, name: input요소명. 폼내 모든 <input>요소를 포함하는 Array 반환. 선택적으로 목록은 요소의 타입이나 name속성에 의해 필터링 될수 있다.
disable(form) instance form: form element 객체 또는 아이디 폼내 모든 입력 field를 사용불가상태로 만들기
enable(form) instance form: form element 객체 또는 아이디 폼내 모든 입력 field를 사용가능하게 만들기
focusFirstElement(form) instance form: form element 객체 또는 아이디 첫번째 가시성을 활성화하고, 폼내 입력 field를 가능하게 하기
reset(form) instance form: form element 객체 또는 아이디 폼을 리셋하기. form객체의 reset()메소드와 같다.

toc

Form.Element 객체

이 객체는 폼요소와 작동하기 위한 몇몇 유틸리티성 함수를 제공한다.

메소드 종류 인자 상세설명
serialize(element) instance element: element 객체 또는 아이디 'elementName=elementValue'처럼 요소의 name=value 짝을 반환
getValue(element) instance element: element 객체 또는 아이디 요소의 값을 반환

toc

Form.Element.Serializers 객체

이 객체는 폼요소의 현재 값을 가져오기 위해 라이브러리 내부적으로 사용되는 몇몇 유틸리티성 함수를 제공한다.

메소드 종류 인자 상세설명
inputSelector(element) instance element: radio 버튼이나 checkbox처럼 checked프라퍼티를 가지는 form요소의 객체 또는 아이디 ['elementName', 'elementValue']처럼 요소의 이름과 값을 가지는 Array을 반환
textarea(element) instance element: textbox, button 또는 password필드처럼 value프라퍼티를 가지는 form요소의 객체 또는 아이디. ['elementName', 'elementValue']처럼 요소의 이름과 값을 가지는 Array를 반환
select(element) instance element: <select> 요소의 객체 또는 아이디 ['elementName', 'selOpt1 selOpt4 selOpt9']처럼 요소의 이름과 모든 선택된 옵션의 값이나 텍스트를 가지는 Array를 반환

toc

Abstract.TimedObserver 클래스

이 클래스는 값이 변경(또는 프라퍼티가 클래스정의를 얻어내는)될때까지 하나의 요소를 모니터링할 다른 클래스를 위한 기본클래스처럼 사용된다. 이 클래스는 추상클래스처럼 사용된다.

하위클래스는 요소의 입력값, style프라퍼티중 하나, 또는 테이블내 row의 수, 또는 당신이 추적하고자 하는 모든것을 모니터링하기 위해 생성될수 있다.

얻어낸 클래스는 요소내 모니터링되는 현재 값을 무엇인지 판단하기 위한 메소드를 구현하는 것이다.

메소드 종류 인자 상세설명
[ctor](element, frequency, callback) constructor element: element 객체 또는 아이디, frequency: 초단위 간격, callback: 요소가 변경될때 호출되는 함수 요소를 모니터링할 객체 생성
registerCallback() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 요소 모니터링릉 시작하기 위한 객체 자체에 의해 호출된다.
onTimerEvent() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 요소를 체크하기 위해 정기적으로 객체 자체에 의해 호출된다.

프라퍼티 타입 상세설명
element Object 모니터링되는 요소객체
frequency Number 이것은 체크사이에 초단위 간격으로 이루어진다.
callback Function(Object, String) 요소가 변경될때마다 호출되기 위한 함수. 이것은 요소객체와 새로운 값을 받을것이다.
lastValue String 요소내 확인되는 마지막 값

toc

Form.Element.Observer 클래스

Abstract.TimedObserver로 부터 상속

폼 입력 요소의 값을 모니터링하는 Abstract.TimedObserver의 구현물. 값 변경을 보고하는 이벤트를 드러내지 않는 요소를 모니터링하고자 할때 이 클래스를 사용하라. 이 경우 당신은 Form.Element.EventObserver 클래스를 대신 사용할수 있다.

메소드 종류 인자 상세설명
[ctor](element, frequency, callback) constructor element: element 객체 또는 아이디, frequency: interval in seconds, callback: function to be called when the element changes Abstract.TimedObserver으로부터 상속. 요소의 value프라퍼티를 모니터링할 객체를 생성.
getValue() instance (none) 요소의 값을 반환

toc

Form.Observer 클래스

Abstract.TimedObserver로 부터 상속

폼내 데이터 항목 요소의 값이 변경하는지를 모니터링하는 Abstract.TimedObserver의 구현물. 당신이 값 변경을 보고하는 이벤트를 드러내지 않는 요소를 포함하는 폼을 모니터링하고자 할때 이 클래스를 사용하라. 이 경우 당신은 Form.EventObserver 클래스를 대신 사용할수 있다.

메소드 종류 인자 상세설명
[ctor](form, frequency, callback) constructor form: form 객체 또는 아이디, frequency: 초단위 간격, callback: form내 데이터 항목 요소가 변경될때 호출되는 함수 Abstract.TimedObserver로부터 상속. 변경하기 위한 폼을 모니터링할 객체 생성.
getValue() instance (none) 모든 폼의 데이터의 직렬화를 반환

toc

Abstract.EventObserver 클래스

이 클래스는 요소를 위해 값-변경 이벤트가 발생할때마다 콜백함수를 수행하는 다른 클래스를 위한 기본 클래스처럼 사용된다.

Abstract.EventObserver 타입의 다중 객체는 다른것을 지우지 않고 같은 요소로 묶일수 있다. 콜백은 요소에 할당되는 순서대로 수행될것이다.

트리거 형태의 이벤트는 radio버튼과 checkbox를 위해서는 onclick이고 대개의 textbox와 리스트박스/드랍다운을 위해서는 onchange이다.

얻어낸 클래스는 요소내 모니터링되는 현재 값을 무엇인지 판단하기 위한 메소드를 구현하는 것이다.

메소드 종류 인자 상세설명
[ctor](element, callback) constructor element: element 객체 또는 아이디, callback: 이벤트가 발생할때 호출되는 함수 요소를 모니터링할 객체 생성.
registerCallback() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 요소의 이벤트를 자체적으로 묶는 객체에 의해 호출된다.
registerFormCallbacks() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 폼내 각각의 데이터 항목 요소의 이벤트로 자체적으로 묶기 위한 객체에 의해 호출된다.
onElementEvent() instance (none) 이 메소드는 대개 외부적으로 호출되지 않는다. 이것은 요소의 이벤트로 묶일것이다.

프라퍼티 타입 상세설명
element Object 모니터링되는 요소객체
callback Function(Object, String) 요소가 변경될때마다 호출되기 위한 함수. 이것은 요소객체와 새로운 값을 받을것이다.
lastValue String 요소내 확인되는 마지막 값

toc

Form.Element.EventObserver 클래스

Abstract.EventObserver로 부터 상속

요소내 값 변경을 감지하기 위한 폼 데이터 항목 요소의 적절한 이벤트를 위한 콜백 함수를 수행하는 Abstract.EventObserver의 구현물. 만약 요소가 변경을 보고하는 이벤트를 드러내지 않는다면, 당신은 Form.Element.Observer 클래스를 대신 사용할수 있다.

메소드 종류 인자 상세설명
[ctor](element, callback) constructor element: element 객체 또는 아이디, callback: function to be called when the event happens Abstract.EventObserver로 부터 상속. 요소의 value프라퍼티를 모니터링할 객체 생성.
getValue() instance (none) 요소의 값 반환.

toc

Form.EventObserver 클래스

Abstract.EventObserver로 부터 상속

값이 변결될때 감지하기 위한 요소의 이벤트를 사용하여 폼내 포함되는 어느 데이터 항목 요소에 변경을 모니터링하는 Abstract.EventObserver의 구현물. 만약 폼이 변경을 보고하는 이벤트를 드러내지 않는 요소를 포함한다면, 당신은 Form.Observer 클래스를 대신 사용할수 있다.

메소드 종류 인자 상세설명
[ctor](form, callback) constructor form: form 객체 또는 아이디, callback: form내 데이터 항목 요소가 변경될때 호출되는 함수 Abstract.EventObserver로부터 상속. 변경을 위해 폼을 모니터링할 객체 생성.
getValue() instance (none) 모든 폼의 데이터 직렬화를 반환

toc

Position 객체 (예비 문서)

이 객체는 요소 위치할당을 작업할때 돕는 수많은 함수를 제공한다.

메소드 종류 인자 상세설명
prepare() instance (none) 스크롤 위치내 변경을 수용하기 위한 deltaXdeltaY 프라퍼티 조정. 페이지 스크롤후 withinIncludingScrolloffset를 호출하기 전에 이 메소드를 호출하는 것을 기억하라.
realOffset(element) instance element: object 요소에 영향을 끼치는 어느 스크롤 offset를 포함하는 요소의 정확한 스크롤 offset를 가진 Array을 반환. 이 결과 배열은 [total_scroll_left, total_scroll_top]과 유사하다.
cumulativeOffset(element) instance element: object 위치가 할당된 부모 요소에 의해 부과된 어느 offset를 포함하는 요소의 정확한 위치가 할당된 offset를 가진 Array을 반환. 결과 배열은 [total_offset_left, total_offset_top]과 유사하다.
within(element, x, y) instance element: object, x 와 y: 위치 조정 만약 주어진 지점이 주어진 요소의 직사각형내 조정이 되는지 테스트.
withinIncludingScrolloffsets(element, x, y) instance element: object, x and y: coordinates of a point  
overlap(mode, element) instance mode: 'vertical' 나 'horizontal', element: object within()은 이 메소드가 호출되기 전에 호출될 필요가 있다. 이 메소드는 요소에서 겹치는 것을 조정하는 세분화정도를 표현하는 0.0과 1.0사이의 10진수를 반환할것이다. 예를 들면, 만약 요소가 100px를 가지는 정사각형 DIV이고 (300,300)에 위치한다면, within(divSquare, 330, 330); overlap('vertical', divSquare);은 DIV의 top border로부터 10%(30px)를 가리키는 것을 의미하는 0.10을 반환할것이다.
clone(source, target) instance source: element 객체 또는 아이디, target: element 객체 또는 아이디 source요소에 대해 똑같이 target요소의 크기를 다시 조정하고 다시 위치를 지정


1.4.0을 위한 이 문서는 여전히 작업중입니다. 이 문서의 업데이트를 계속 지켜봐주십시오.
만약 에러를 발견한다면, let me know나에게 알려주십시오. 그러면 가능한한 빨리 그것을 수정할것입니다.
한글 번역에 관련된 부분은 한국어 번역자으로 알려주십시오.

Posted by 1010
반응형
style="word-break:break-all;" wrap="hard"

<table border="1" width="500">
<tr>
        <td style="word-break:break-all;" wrap="hard">efssssssssssssssssseffffffffsefsafefsaefsaefaseaesssssssssdrgsssssssssssssssssssssssssssssssssssssssss</td>
</tr>
</table>
Posted by 1010
반응형
사용자 삽입 이미지
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<style type="text/css">
        #con{
                border:1px solid #c0c0c0;
        }
        ul#nav{
                margin:0; padding:0; list-style:none;
        }
        #nav li{
                margin:8px 0;
                padding-top: 1px;
                font: 11pt 굴림;
                color: #777;
                text-transform:uppercase;
                letter-spacing: 1px;
                background:url(bg_dotted.gif) repeat-x 0 77% !important;
                background-position:0 61%;
        }
        #nav li a{
                float: left;
                padding:1px 3px;
                background: #FFF;
                color:#777;
                text-decoration:none;
        }
        ul#nav li span{
                float:right;
                padding:1px 3px;
                background: #FFF;
        }
        ul#nav li br{
                clear:both;
        }
        #menu legend{
                font-size:11pt;
                font-weight:bold;
                color:#777;
                background-color:#EEEEEE;
                padding:2px 2px 2px 2px;
                border:1px solid #c0c0c0;
        }

</style>
</HEAD>

<BODY
>

<fieldset id="menu">
        <legend>Menu List</legend>
        <ul id="nav">
                <li><span>1</span><a href="#">Mome</a><BR /></li>
                <li><span>2</span><a href="#">My my my</a><BR /></li>
                <li><span>3</span><a href="#">Gallery</a><BR /></li>
                <li><span>4</span><a href="#">Programming</a><BR /></li>
                <li><span>5</span><a href="#">FreeBoard</a><BR /></li>
                <li><span>6</span><a href="#">Contact us</a><BR /></li>
        </ul>
</fieldset>


</BODY>
</HTML>
Posted by 1010
반응형
사용자 삽입 이미지

두 소스다 위 그럼처럼 같은 결과를 보여주긴 하지만..

1. 테이블인 경우

<TABLE
 width="400" border="0" cellpadding="0" cellspacing="0">
<TR>
        <TD colspan="2" width="400" height="50" bgcolor="#EEEEEE"></TD>
</TR>
<TR>
        <TD width="100" height="200" bgcolor="#C9C9C9"></TD>
        <TD width="300" height="200" bgcolor="#c0c0c0"></TD>
</TR>
<TR>
        <TD colspan="2" width="400" height="50" bgcolor="#9A9A9A"></TD>
</TR>
</TABLE>



2. div 와 css 를 이용한 경우

<style
 type="text/css">
#top{
        width:400px;height:50px;background-color:#EEEEEE;
}
#main_left{
        background-color:#C9C9C9;width:100px;height:200px;float:left;}
#main_right{
        width:300px;height:200px;background-color:#c0c0c0;float:left;
}
#bottom{
        width:400px;height:50px;background-color:#9A9A9A;clear:both;
}
</style>
<div id="top"></div>
<div id="main_left"></div>
<div id="main_right"></div>
<div id="bottom"></div>



div 인 경우 태그가 간결해지고 역활 분담이 확실해 져 있다.
그러나 습관은 무서운것..ㅡ,ㅡ;;;;
아직 테이블이..ㅋ.ㅋ


출처 : http://harogipro.tistory.com/110
Posted by 1010
반응형

css 로 텝메뉴를 만들어 주는 프로그램 입니다.
이건 뭐...ㅡ,ㅡ;;;




우선 위 파일을 다운받습니다. 혹은 아래 주소에서 다운받으시면 되고...
http://www.highdots.com/css-tab-designer/


압축을 풀고 프로그램을 실행해 보면 아래와 같은 화면이 나오네요. (크게보세요.)
사용자 삽입 이미지


마음에 드는 텝메뉴를 선택한 후에 아래 그림처럼 generate & HTML 을 누르면....
사용자 삽입 이미지



저장하라고 묻네요. 일단 저장을 하면...탭용 배경이미지와 html 파일이 하나 저장됩니다.
사용자 삽입 이미지


html 파일을 소스보기 해볼까요..
대략 이런 형태로 소스들이 만들어지네요.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
                <head>
                        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
                        <title>Free CSS Navigation Menu Designs 1 at exploding-boy.com</title>
                        <style type="text/css">
<!--
    body {
        margin:0;
        padding:0;
        font: bold 11px/1.5em Verdana;
}

h2 {
        font: bold 14px Verdana, Arial, Helvetica, sans-serif;
        color: #000;
        margin: 0px;
        padding: 0px 0px 0px 15px;
}

/*- Menu Tabs B--------------------------- */

    #tabsB {
      float:left;
      width:100%;
      background:#F4F4F4;
      font-size:93%;
      line-height:normal;
      }
    #tabsB ul {
        margin:0;
        padding:10px 10px 0 50px;
        list-style:none;
      }
    #tabsB li {
      display:inline;
      margin:0;
      padding:0;
      }
    #tabsB a {
      float:left;
      background:url("tableftB.gif") no-repeat left top;
      margin:0;
      padding:0 0 0 4px;
      text-decoration:none;
      }
    #tabsB a span {
      float:left;
      display:block;
      background:url("tabrightB.gif") no-repeat right top;
      padding:5px 15px 4px 6px;
      color:#666;
      }
    /* Commented Backslash Hack hides rule from IE5-Mac \*/
    #tabsB a span {float:none;}
    /* End IE5-Mac hack */
    #tabsB a:hover span {
      color:#000;
      }
    #tabsB a:hover {
      background-position:0% -42px;
      }
    #tabsB a:hover span {
      background-position:100% -42px;
      }

        #tabsB #current a {
                background-position:0% -42px;
        }
        #tabsB #current a span {
                background-position:100% -42px;
        }
-->
</style>
                </head>

                <body>
                        <h2>Tab Menu B</h2>
                        <div id="tabsB">
                                <ul>
                                        <!-- CSS Tabs -->
<li><a href="Home.html"><span>Home</span></a></li>
<li><a href="Products.html"><span>Products</span></a></li>
<li><a href="Services.html"><span>Services</span></a></li>
<li><a href="Support.html"><span>Support</span></a></li>
<li id="current"><a href="Order.html"><span>Order</span></a></li>
<li><a href="News.html"><span>News</span></a></li>
<li><a href="About.html"><span>About</span></a></li>

                                </ul>
                        </div>
                        <br /><br />
                </body>
</html>


간단히 텝디자인 만들때 쓸모있을 듯 합니다.

*  만드는 방법 *

파일 -> New Project  선택한후 마음에 드는 디자인 선택

사용자 삽입 이미지



+ 버튼을 눌러서 메뉴 추가

사용자 삽입 이미지


아래그림처럼 메뉴가 생겨납니다.
사용자 삽입 이미지



계속 메뉴를 만든후...

사용자 삽입 이미지



태그로 generate 하고 소스 직접 수정하면 됩니다. (주: 문자셋이 utf-8)










[공대여자는 이쁩니다. -_-b]
출처 : 공대여자님 홈페이지.
http://www.mins01.com/20070305/m_board/tech.php?b_id=tech&type=read&b_idx=306&page=10&period=730

출처 : http://www.highdots.com/css-tab-designer/
Posted by 1010
반응형
css 개발을 할 수 있는 프로그램입니다. 속성을 한눈에 볼 수 있어 좋네요. ^_^
아직 이것저것 만져보진 못했습니다만...-_-;;;





다운로드주소 : http://www.newsgator.com/Individuals/TopStyle/Default.aspx
Posted by 1010
51.Struts22008. 10. 30. 10:38
반응형

Tong - [별난상이]님의 STRUTS2통

http://tong.nate.com/rks623/

1. Ready, Set, Go!

처음 Struts 2 Framework 을 설치하고 환경설정하는 내용입니다. Struts 2 Framework 으로 웹 어플리케이션을 작성하기 위해서는 기본 선수 지식이 필요합니다. 아래의 기술들을 어느정도 알고 있어야 Struts 2 Framework 으로 웹 어플리케이션 작성이 쉽습니다.

  • Java
  • Filters, JSP, and Tag Libraries
  • JavaBeans
  • HTML and HTTP
  • Servlet Containers(Tomcat 등)
  • XML

국내 자바 개발자들이 Struts 2 Framework 를 익히고, 개발하는데 서로의 노하우를 공유할 수 있도록 게시판을 만들어 질답 및 팁을 여러사람이 볼 수 있도록 하였습니다.

1.1 Download the Distribution

Apache Struts 2 Framework 를 다운로드 받기 위해서는 Apache Struts Download 싸이트로 가서 최신 버전을 다운로드 받습니다.

1.2 Setup

Struts 2 Framework 웹 어플리케이션을 작성하기 위한 설정을 살펴본다.

1.2.1 환경설정 파일들

Struts 2 Framework 어플리케이션을 개발하기 위해서는 최소한 필요한 파일을 복사합니다. 그 목록은 아래에 나와 있습니다.

  • struts2-core.jar : Framework Library 파일입니다.
  • xwork.jar : XWork 2 라이브러리로써 Struts 2 에서 사용되어 집니다.
  • ognl.jar : OGNL(Object Graph Navigation Library) 를 지칭하며 Framework 에서 사용되는 Expression Language 입니다.
  • freemarker.jar : Freemarker 로 쓰여진 UI Tag template 에서 사용합니다.
  • common-logging.jar : 로그 처리를 위한 라이브러리입니다.
  • web.xml : Struts 2 Framework 을 연동하는 웹 어플리케이션 환경설정 파일
  • struts.xml : Struts 2 Framework 의 환경설정 내용을 포함하고 있으며, Action, Result, interceptor 등의 내용을 포함하고 있습니다.
1.2.2 web.xml

web.xml 파일에 Struts 2 Framework 을 연동하는 내용을 기술합니다. 아래의 내용과 같이 web.xml 을 구성합니다.

web.xml 에 FilterDispatcher 를 등록하여 request 가 발행하면 Struts 2 Framework 가 그 request 를 받도록 설정합니다.

<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<display-name>My Application</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

1.2.3 Struts.xml

Struts 에서 작성한 어플리케이션이 정상적인 동작을 하기 위해서 필요한 환경설정 내용을 포함하고 있습니다.

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts><!-- Configuration for the default package. -->
<package name="default" extends="struts-default">
...
</package>
</struts>

2. Hello World

Struts 2 Framework 를 사용한 Hello World 웹 어플리케이션을 작성해봅니다. 웹페이지에서 Request 를 발생시키고, 서버에서 해당 Request 를 받은 다음, Hello World 문자열을 다시 보내서, 브라우저에서 Hello World 문자열을 나타냅니다.

원문에서는 간단한 소스와 환경설정하는 방법이 나와 있지만, 한글화를 하면서 Eclipse 를 사용하여, 각 단계별로 이미지를 포함하였습니다.

2.1 Web Project 생성

최신 Eclipse 버전인 Eclipse Europa JEE 버전을 사용하여 HelloWorld Web Application 을 작성합니다.

우선 Workspace 를 생성합니다.


File -> New -> Project 메뉴를 선택하고, Web -> Dynamic Web Project 를 선택합니다.

Project Name : Hello World 로 입력합니다.


Dynamic Web Project 를 생성한 후에 실행할 서버(runtime) 을 지정해야 합니다. 현재는 처음으로 프로젝트를 생성하였기에, 설정된 Target Runtime 이 없습니다.

Hello World 어플리케이션은 웹 어플리케이션이기 때문에, 가장 많이 사용되는 Tomcat 를 지정하여 실행을 하도록 합니다.

따라서 Tomcat 을 설치하고 난 후, 톰캣을 Target Runtime 으로 지정합니다.

New 버튼을 클릭하고, Apache -> Apache Tomcat 5.5 를 선택합니다.


그리고 Tomcat 이 설치된 디렉토리를 지정합니다.


Finish 버튼을 클릭하면 Target Runtime 이 위에서 설정한 Tomcat 으로 지정된 것을 확인할 수 있습니다.

2.2 Struts 2 Library 추가

Struts 2 Framework 을 사용하기 위해서는 위에서 설명한 필수 라이브러리를 포함시켜야 합니다.

Eclipse 에서 User Library 에 Struts 2 Framework 에서 사용되는 라이브러리를 추가합니다.


2.3 web.xml 수정

Struts 2 Framework 을 연동하여, Request 가 발생되면 Struts 2 로 처리가 되도록 web.xml 을 아래와 같이 수정합니다.


2.4 JSP, Action 구현

Request 가 발생되고, 그 결과를 화면에 보여질 JSP 파일을 추가합니다.

File -> New -> JSP 를 선택하고, HelloWorld.jsp 로 입력합니다.

그리고 아래와 같이 소스 코드를 입력합니다.


그리고 HelloWorld 클래스를 생성하고 아래와 같이 구현합니다.

File -> New -> Class 메뉴를 선택하고, Package : com.javamodeling.struts2, Name : HelloWorld 를 입력합니다.


2.5 struts.xml 생성

Request 가 발생되고, 어느 Action 클래스가 Request 를 처리하고, 그에 따른 처리 결과에 따라서 JSP 파일로 Forwording 을 해야 합니다.

이러한 sturts 2 의 전체 환경설정을 struts.xml 에 정의를 합니다.

src -> new -> Other -> XML -> XML 을 선택하고, struts.xml 파일을 생성하고 아래와 같이 입력합니다.


2.6 배포 및 실행

배포하기 위해서는 Servers 탭에서 Add and Remove Projects 메뉴를 선택하고, HelloWorld 프로젝트를 추가합니다.


Server 를 실행하고, 주소창에 다음과 같이 입력하면 http://localhost:8080/HelloWorld/HelloWorld.action 아래와 같은 결과를 확인할 수 있습니다.


2.7 동작 순서

간단하게 Struts2 Framework 을 사용하여 HelloWorld 어플리케이션을 작성해 보았습니다.

Request 가 발생해서, 최종 Response 가 Browser 까지 전달되는 과정이 어떻게 되는지 살펴보겠습니다.

  • Servlet Container(Tomcat)는 Browser 로부터 Request 를 받습니다. 이 Request 에는 HelloWorld.action 이 포함되어 있습니다.
  • web.xml 에서 모든 request 는 struts2 로 전달되도록 URL Mapping 에 의해서 설정되어 있습니다. 따라서 org.apache.struts2.dispatcher.FilterDispatcher 를 경유하게 되어 있습니다.
  • .action 이 있기에 Struts2 Framework 에서는 Struts 2 Framework 에서 Request 를 처리하도록 합니다.
  • Sturts2 는 struts.xml 에서 요청한 HelloWorld.action 과 같은 이름의 HelloWorld(.action 은 빼고) 가 있는지 찾습니다. 같은 이름이 존재하면, struts.xml 에서 지정한 클래스의 객체를 execute() 메소드를 실행합니다.
  • HelloAction.execute() 메소드가 실행되고, 필요한 비즈니스 로직이 실행됩니다. return 하는 값이 SUCCESS 이면 정상적인 정상으로 판단하고, struts.xml 에서 지정한 Result 에 기술된 HelloWorld.jsp 로 Forwarding 합니다.
  • HelloWorld.jsp 에서는 <s:property value="message"> 태그를 인식하여 HelloWorld.getMessage() 메소드를 호출하여, HTML 을 구성합니다.
  • 마지막으로 HTML 코드를 Browser 로 response 합니다.

3. Using Tags

지금부터는 위에서 작성한 Hello World 어플리케이션에 추가로 기능을 덧붙이도록 하겠습니다. Hello World 는 실행하기 위해서 간단하게 설정만 하였지만, 지금 부터는 몇몇 기능을 추가하여 기본적인 어플리케이션을 만들어보겠습니다.

우선 웹 어플리케이션에서는 다른 페이지나 Request 를 발생할 수 있고, HyperLink 를 추가할 수 도 있습니다.

페이지에 동적으로 HTML 코드를 처리하기 위해서 많이 사용되고 있는 것이 Tag 이며, Struts 2 Framework 에서 사용되고 있는 몇 개의 Tag 를 살펴보겠습니다.

3.1 Linking

많이 사용되고 있는 기능중에 하나가 다른 페이지로 연결하는 Link 입니다. Welcome.jsp 파일을 추가하고, 아래와 같이 코딩합니다.


결과 페이지를 각 언어별로 볼 수 있도록 페이지 링크를 추가한 화면입니다. 각 언어별로 Resource Bundle 에서 값을 읽어서 결과를 처리하기 위함입니다.


위와 같이 처리하기 위해서 HelloWorld.jsp 파일을 아래와 같이 추가합니다.


위 Welcome.jsp 와 HelloWorld.jsp 에서 두가지의 Link 하는 방법을 나타내고 있습니다. HellWorld.jsp 에서 사용된 %{url} 은 <s:url> 태그에서 사용된 url 값을 그대로 사용하는 방법입니다.

<s:url> 이 사용된 방법은 위 예제에서 아래의 세가지 경우입니다.

  • Resource links : <link href= "<s:url value=" /css/tutorial.css "/>" rel= "stylesheet" type= "text/css" />
    Resource Link 는 header 에서 필요한 리소스(파일, 페이지)를 Link 하는 역할을 합니다.
  • Direct links : <li><a href= "<s:url action=" Register "/>" >Register</a></li>
    Direct Link 는 해당 Action 을 직접 호출합니다. Action 의 확장자를 지정하지 않아도, Tag 가 rendering 하면서 자동을 확장자를 붙여줍니다.
  • Links with parameters : <s:url id= "url" action= "Welcome" > <s:param name= "request_locale" >en</s:param> </s:url> <s:a href= "%{url}" >English</s:a>
    이 param 태그는 request 가 전송될때, ?request_locale=en 으로 변환하여 Welcome Action 에 전송됩니다. 그리고 %{url} 에 파라미터가 포함된 경로가 포함되어 집니다.

3.2 Wildcard Mappings

만약 Welcom Action 이 실행된 후, 그 결과를 특정 페이지로 Forwarding 해야 합니다. Welcome Action 을 처리하기 위해서 struts.xml 에 아래 내용을 추가합니다.

<actjon> 태그에서 class 속성을 부여하지 않으면 Action 클래스를 수행하지 않고 직접 페이지로 Forwarding 합니다.


이렇게 Action 이름과 Forwarding 할 페이지 이름이 동일할 경우, 아래과 같이 wildcard mapping 을 사용하여 처리를 하면 훨씬 편리합니다.

아래와 같이 코딩해도 결과는 마찬가지로 나타납니다.


3.3 Data Entry Forms

입력폼을 처리해야 하는 경우에, Struts 2 의 태그에서도 입력 폼을 위한 태그를 사용할 수 있습니다. 아래와 같이 간단하게 태그를 추가해보겠습니다.

Logon.jsp 파일을 생성하고, 아래와 같이 코딩합니다. Struts 2 태크가 HTML Form 형식에 맞게 rendering 을 해줍니다.

4. Coding Action

위에서 Tag 부분을 설명하면서 Login Form 을 완성하였습니다. 이번에는 Login Action 을 구현해 보겠습니다. Login Action 에서 비즈니스 로직이 수행되고 난후에 그 결과에 따라서 리턴하는 값이 달라지게 됩니다.

그리고 아래 URL 로 로그인 기능이 수행됩니다.

 

http: //localhost:8080/HelloWorld/Logon.action

Login.action 이 호출되면, User Name 과 Password 값을 받아서 로그인 처리를 하기 위한 Logon 클래스를 생성합니다.

아래와 같이 Logon 클래스를 추가하고, 코딩합니다.

package com.javamodeling.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class Logon extends ActionSupport {

    public String execute() throws Exception {

        if (isInvalid(getUsername())) return INPUT;
        if (isInvalid(getPassword())) return INPUT;
        return SUCCESS;
    }

    private boolean isInvalid(String value) {
        return (value == null || value.length() == 0);
    }

    private String username;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }

    private String password;
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

}

위 Logon class 에서 비즈니스 로직이 수행되는 것은 execute() 메소드입니다. Logon.action 이 호출되면 execute() 메소드가 실행되고 비즈니스 로직이 수행되고, HTML Form 값은 자동으로 Action 클래스의 getter/setter 로 지정된 property 에 저장이 됩니다.

위의 Logon 클래스에서 setUserName() 과 setPassword() 메소드가 HTML Form 의 값을 저장하여 Logon 클래스에 해당 값이 저장됩니다.

5. Selecting Results

Request 에 대한 Action 이 수행된 후, Response 를 처리하기 위해서 Result 가 선택되어집니다. Result 는 간단한 HTML 페이지, JSP 페이지, Freemaker 나 Velocity 같은 Template 엔진, 혹은 PDF 같은 문서나 복잡한 리포트로 Forward 될 수 있습니다. 또한 Action mapping 통하여 여러개의 Result 도 가능합니다. 특정 하나의 Result 로 선택되기 위해서는, Action 클래스에서 Result 에 맞는 결과 값을 리턴해야 합니다.

아래와 같이 struts.xml 에 코드를 추가합니다.


Logon.jsp 에서 username 과 password 를 입력하면 Logon Action 에서 success 값을 리턴합니다. succuess 값은 디폴트 result 값으로써, Menu action 으로 전송됩니다.

만약에 두 값이 입력되지 않으면, Logon Action 은 input 값을 리턴하게 되고, 다시 Logon.jsp 로 Forwarding 됩니다.

일반적으로 Result 의 Type 은 Dispatcher forward 입니다. 이는 특정 JSP 페이지로 forwarding 을 하며, 위에서 설정된 redirect-action 은 client browser 에서 다시 rediect 를 생성하게 하여 Action 을 호출합니다.

5.1 Using a Stub Page

Logon Action 이 정상적으로 수행하고 난 후, 다음으로 Forwarding 할 페이지를 아직 결정하지 않았습니다. 그래서 Logon Action 이 정상적으로 수행되고 난 후에 Forwarding 할 Menu.jsp 파일을 아래와 같이 생성하고 코딩합니다.


Menu Action 이 호출되면, Menu.jsp 으로 Forwarding 됩니다. 이렇게 되는 것은 위에서 struts.xml 파일에 * 라는 wildcard 를 설정해 놓았고, Action Name 과 동일한 JSP 파일로 Forwarding 하게 되어 있습니다. 따라서 Logon Action 에서 Menu Action 을 호출하게 되면, Menu.jsp 로 Forwarding 됩니다.

5.2 Including a Missing Page

하나의 JSP 페이지로 화면에 보이는 모든 내용을 포함하지는 않습니다. 여러개의 JSP 파일로 나누어서 한 화면을 구성하는게 일반적입니다. 따라서 Struts 2 태그를 사용하여 다른 JSP 파일을 포함하는 것은 아래와 같은 태그를 사용할 수 있습니다.

<%@ taglib prefix="s" uri="/struts-tags" %>
<s:include value="Missing.jsp" />

6. Validating Input

앞서서 Logon Action 에서는 User Name 과 Password 에서 Validation 을 수행하였습니다. 이렇게 간단한 어플리케이션에서는 코드상에서 Validation 을 체크할 수도 있지만, 큰 어플리케이션이나 대용량 어플리케이션을 개발할 경우에는 코드상에서 Validation 을 체크하는 것은 매우 힘듭니다. 또한 유지보수하는데 매우 어려움이 많습니다.

Struts 2 Framework 에서는 Validation Framework 을 제공하여 Input 값에 대한 Validation 을 체크할 수 있습니다.

Validation 은 XML 파일로 Validation 에 대한 내용을 정의할 수 있고, Annotation 으로 Validation 을 정의할 수 있습니다.

XML 파일은 Action Name 과 동일한 이름으로 시작하고, 파일명 뒷 부분에 "-validation.xml" 이라고 파일명을 정하면 됩니다. 이 문서에서 작성하고 있는 Logon Action 에 Validation 을 설정하려면 Logon-validation.xml 로 파일을 생성하면 됩니다.

LOgon Action 클래스가 있는 같은 패키지에 Logon-validation.xml 파일을 생성하고 아래와 같이 코딩합니다.


위와 같이 Validation 을 추가하면, 첫 페이지를 호출할때 Validation 을 수행하게 됩니다. 하지만 첫 페이지는 그냥 입력화면을 처리하고 Validation 을 수행하지 말아야 합니다.

따라서 첫 페이지를 호출할때, Validation 을 수행하지 않게 하기 위해서 Welcome.jsp 와 struts.xml 파일을 아래와 같이 수정합니다.



Logon 화면이 보일때 까지 과정

  • Welcome.jsp 에서 Logon_input.action 이 호출되기에, struts2 에서 이에 맞는 actioin mapping 을 찾습니다. struts.xml 에 Logon_* 가 있기에 이 action mapping 을 찾습니다.
  • method={1} 가 설정되어 있기에, method=input 으로 인식합니다.
  • struts2 에서 Logon.input() 메소드를 호출합니다.
  • input() method 는 vadidation 을 처리하지 않는 특별한 메소드로 지정되어 있기에, Validation 을 수행하지 않고 그냥 실행합니다.
  • 디폴트 input() method 는 input 값을 리턴합니다.
  • struts2 는 Validation 메시지 없이 그냥 Logon.jsp 로 Forwarding 합니다.


Logon 페이지에서 Submit 버튼을 클릭할 경우

  • struts2 에서는 Submit 버튼이 클릭하게 되면, Logon Action 에 맞는 Validation 을 수행합니다.
  • Logon-validation.xml 파일을 찾고, XML 내용에 맞게 Validation 객체를 생성합니다. Validation 객체는 각 Validator 객체들로 구성되어 있습니다.
  • Validator 는 각 입력 속성에 대해서 체크를 합니다.
  • 만약 Validator 가 실패할 경우(Validation 체크에서 에러가 난 경우), 해당 메시지가 Queue 에 저장됩니다.
  • 모든 Validator 가 수행되고 난 후에, struts2 에는 발생된 에러가 있는지 확인합니다. 만약에 에러가 있다면, input Result 를 찾고, Action 클래스는 실행되지 않습니다.
  • 에러가 없다면 Action 클래스가 수행되고, input 속성에 대한 validation 이 끝났기에, success Result 를 리턴합니다.


7. Localizing Output

Validation 체크할 경우, 메시지를 화면에 보여줬습니다. 같은 메시지를 여러 곳에 처리하거나, 각자 다른 언어를 사용할 경우, 해당 언어에 맞는 메시지를 화면에 보여줘야 할 경우가 많이 있습니다.

이럴때 메시지를 리소스 번들(Resource Bundle)에 저장해서 사용하면 매우 편리합니다.

페이지에서 나타내는 메시지와 Validation 에서 처리하는 메시지를 저장하기 위한 Resouce Bundle 을 생성해 보겠습니다.

Struts 2 에서 Resource Bundle 은 Action Name 과 동일하게 주고, 파일 확장자를 .properties 로 주면 됩니다. 따라서Logon Action 에 대한 Resource Bundle 파일명은 Logon.properties 가 됩니다.

파일이 저장되는 위치는 Validation 과 마찬가지로, Action 클래스의 패키지 경로와 동일합니다.

그리고 해당 패키지에서 공통적으로 사용되는 Resource Bundle 을 정의하고 싶으면, package.properties 파일을 만들면 이 package.properties 가 있는 패키지 경로의 모든 클래스에서 사용할 수 있습니다.

우선 Logon Action 과 같은 패키지 경로에 package.properties 파일을 생성하고 아래와 같이 입력합니다.


그리고 위에서 정의한 Resource Bundle 을 사용하도록, Logon.jsp 파일과 Logon-validation.xml 파일을 수정합니다.



7.1 한글 메시지 처리

한글 메시지를 보이게 하는 것을 살펴보겠습니다. Resource Bundle 을 사용하는데 있어서 한글 메시지를 처리하기 위해서는 한글이 유니코드로 저장이 되어야 합니다.

Logon Action 클래스가 위치한 곳에 Logon.properties 파일을 생성하고 아래와 같이 입력합니다.

//requiredstring = $\{getText(fieldName)} 는 필수입력입니다.
requiredstring = $\{getText(fieldName)} \ub294\u0020\ud544\uc218\uc785\ub825\uc785\ub2c8\ub2e4.

//password = 암호
password = \uc554\ud638

//username = 사용자명
username = \uc0ac\uc6a9\uc790\uba85

정리

Struts 2 Framework 을 사용하여 간단한 어플리케이션을 작성하였습니다. Eclipse 로 쉽게 따라할 수 있도록 이미지를 많이 추가하였으며, 혹시 궁금한 점이 있으시면 아래 게시판에 글을 남겨주시기 바랍니다.

Posted by 1010
98..Etc/70.JEUS2008. 10. 30. 10:23
반응형

제우스 설치

  1. JEUS_HOME, JAVA_HOME 설정
  2. CLASS_PATH 설정된거 삭제

제우스 실행

  1. 제우스 실행(2step 부팅)

    1. cmd에서 jeus 입력
    2. jeus webadmin에서 노드명에서 오른쪽 클릭후  노드제어에서 boot 함.


  2. 제우스 shutdown

    1. jeus webadmin에서 down 후 종료시켜줌.


  3. 제우스 1step 부팅

    1. %JEUS_HOME%/bin/jeus.properties.cmd  에서 다음을 설정함.(띄어쓰기 하지 말것) - 74라인 근처
  1. rem Set up administrator name
  2. SET USERNAME=
  3. rem Set up administrator password
  4. SET PASSWORD=

 2. cmd 에서 jeus 실행. cmd 화면에서 one-step 성공했다는 메시지를 볼 수 있음.


Jeus admin 페이지 접속

 http://localhost:9744/webadmin/ : jeus webadmin




수동으로 Context 설정

  1. %JEUS_HOME%\webhome\app_home\ 밑에 context로 사용할 폴더 작성 (여기서 webtest로 작성함)
  2. 사용할 context 폴더 밑에 WEB-INF 폴더 생성 WEB-INF밑에 web.xml 파일을 생성

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee">
    3. <display-name> Welcome </display-name>

    4. <welcome-file-list>

    5. <welcome-file>index.html</welcome-file>

    6. </welcome-file-list>

    7. <session-config>

    8. <session-timeout>30</session-timeout>

    9. </session-config>

    10. </web-app>
  3.  jeus-web-dd_컨테스트명.xml 설정 (여기선 jeus-web-dd_webtest.xml) : 패스 설정을 위한 부분

    1. <?xml version="1.0" encoding="UTF-8"?>
      <jeus-web-dd xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
              <context-path>/webtest</context-path>
              <auto-reload>
                  <enable-reload>true</enable-reload>
                  <check-on-demand>true</check-on-demand>
              </auto-reload>
      </jeus-web-dd>
  4.  3번에 설정한 파일을 WEBMain.xml위치와 같은 위치에 넣어줌. (WEBMain.xml위치 : %JEUS_HOME%/config/PC명/PC명_servlet_engine1)
  5. JEUSMain.xml 수정(JEUSMain.xml 파일 위치 : %JEUS_HOME%/config/컴퓨터이름 에 위치) : application 등록의 의미

    1. <application>
              <name>webtest</name>
              <path>/webtest</path>
              <deployment-target>
               <target>
                      <engine-container-name>passion05_container1</engine-container-name>
                      <web-context-group>
                          <name>MyGroup</name>
                      </web-context-group>
                  </target>
              </deployment-target>
              <deployment-type>EAR</deployment-type>
          </application>

  6. 서버 다운후 재 부트
  7. 부트 콘솔에서 해당 context 이름이 올라가는지 확인.




    Tomcat에서의 설정과 동일.

    1. //web.xml
    2. <servlet>
         <servlet-name>hello</servlet-name>
         <servlet-class>examples.HelloWorldServlet</servlet-class>
      </servlet>
      <servlet-mapping>
         <servlet-name>hello</servlet-name>
         <url-pattern>/hello</url-pattern>
      </servlet-mapping>
Posted by 1010
51.Struts22008. 10. 30. 10:19
반응형


[Action 예제]



[웹 애플리캐이션의 web.xml 설정]

<?xml version="1.0" encoding="UTF-8"?>
<web-app>   
 <servlet>       
  <servlet-name>action</servlet-name>       
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>       
  <init-param>           
   <param-name>config</param-name>           
   <param-value>/WEB-INF/struts-config.xml</param-value>       
  </init-param>       
                                  :
                                 중략
                                  :
  <load-on-startup>1</load-on-startup>   
 </servlet>   
 <servlet-mapping>       
  <servlet-name>action</servlet-name>       
  <url-pattern>*.do</url-pattern>   
 </servlet-mapping>
</web-app>

ActionServlet에는 여러 개의 초기 인자를 전달할 수 있다. 그 중 유독 눈에 띄는 부분은 struts-config.xml을 초기
인자로 전달 한다는 것이다. 이 의미는 만약 struts-config.xml이외에 다른 이름으로 스트럿츠 설정 파일을 사용하고
싶다면 web.xml에서 변경해 주면 다. 또 하나 다른 점은 태그를 사용한다는 것이다. 이 태그의 의미는 애플리케이션이
시작할 때 ActionServlet의 init() 메소드를 호출하여 초기화를 진행 하겠다는 뜻이다.
이 과정을 통하여 struts-config.xml의 모든 정보가 객체로 변환되어 메모리에 저장 되었다가 이후에 재 사용된다.
마지막으로 확장자는 *.do로 사용하겠다는 정보를 명시하고있다.

[ActionForm]

public class UserForm extends ActionForm {
    // --------------------------------------------------------- Instance Variables
    private String password;
    private String userId;
    private String email;
    private String name;

    public ActionErrors validate(
         ActionMapping mapping,
  HttpServletRequest request) {
        return null;
    }

    public void reset(ActionMapping mapping, HttpServletRequest request) {
  password = null;
  userId = null;
  email = null;
  name = null;
    }
    ……. 중략 ……..

특이할만한 메소드는 validate()와 reset() 메소드이다.
reset() 메소드는 한번의 요청을 처리한 다음 초기화할 속성에 대하여 초기화 작업을 담당하는 메소드이다.
validate() 메소드는 사용자로부터 전달되는 값들의 유효성을 서버측에서 체크하기 위한 메소드이다.
보통의 웹 애플리케이션은 자바 스크립트(Java Script)를 이용하여 클라이언트 측에서 유효성 체크를 많이 한다.
하지만 서버측에서 유효성 체크를 같이 해주는 것이 애플리케이션을 더 좋게 만들 수 있는 기초가 된다.
스트럿츠에서는 클라이언트가 입력한 값이 ActionForm을 상속하는 클래스에 저장된다.
따라서 클라이언트가 입력한 값을 구하기 위하여 request.getParameter("paramName")을 사용할 필요 없이 Form클래스를 이용하여 가능하다.
스트럿츠가 추가된 Form클래스를 인식하도록 하기 위하여 struts-config.xml에 다음과 같이 추가해주어야 한다.

<form-beans>
 <form-bean name="userForm" type=“com.paran.struts.form.UserForm" />       
</form-beans>

[struts-config.xml]

애플리케이션 실행을 위한 메타 데이터 관리
Logical-to-physical 맵핑. (Actions, ActionForms, ActionForwards)
폼 빈 지정, 추상적 페이지 맵핑, 페이지 흐픔, 액션 클래스 지정, 예외처리, 메시지 리소스, 플러그인 지정.

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>
  <!-- ========== Form Bean Definitions =================================== -->
  <form-beans>
    <form-bean name="boardForm“ type="net.javajigi.form.BoardForm“ />
    <form-bean name="listForm“ type=“com.paran.form.ListForm“ />
  </form-beans>

  <!-- ========== Global Forward =================================== -->
    <global-forwards>
        <forward name=“logoff” path=“/logoff.do” />
        <forward name=“logon” path=“/logon.jsp” />
    </global-forwards>

<!-- ========== Action Mapping Definitions =================================== -->
   <action-mappings>
    <action
      path="/board_writeForm"
      type=“com.paran.action.BoardWriteFormAction"
      name="boardForm"
      scope="request"
      unknown="false"
      validate="true"
    >
      <forward
        name="write"
        path="/board_write.jsp"
        redirect="false"
      />
    </action>

    <exception key=“expired.password”
               type=“rog.apache.struts.webapp.example.ExpiredPasswordException”
               path=“/changePassword.jsp” />
    </action-mappings>

    <controller
     contentType="text/html;charset=euc-kr"
     debug="3"
     locale="true"
     nocache="true"
     processorClass=“com.paran.processor.MyAppRequestProcessor"/>
    
    <message-resources parameter="net.javajigi.resources.ApplicationResources"/>
</struts-config>

[다중 모듈 지원]

규모(메뉴)에 따라 애플리케이션을 여러 개로 분할하여 관리하면 효율적이다.

[선언적 에러 처리]

전역이나 Action별로 특정 Exception을 처리하는 Exception Handler를 선언적으로 지정할 수 있다.

[유효성(Validation) 확인]

1) 버전 1.1부터 Struts 패키지에 포함됨.
2) XML 파일을 통한 유효성 검증.(validation.xml, validation-rule.xml)
3) 서버 및 클라이언트 사이드 Validation 지원 - java script 자동 생성(클라이언트 사이드)
4) Regular expression 사용
5) 확장 가능한 아키텍처
6) 기본적으로 제공하는 Validation : 숫자 여부(float, int), 자릿수 체크, 신용카드 번호, 이메일 주소

[플러그 인 기능]

StartUp Class를 선언적으로 추가
Ex) Validator, Tiles 플러그인 등 등…

[Struts Commons Libraries]

■ Jakarta Commons 라이브러리 사용

1) commons-beanutils
   Bean 프로퍼티 핸들링
2) commons-collections
   표준 JAVA2 커렉션 클래스의 확장 라이브러리
3) commons-dbcp
   Optional JDBC Connection Pool
4) commons-digester
   XML 파싱
5) commons-fileupload
   Http를 통한 파일 업로드
6) commons-logging
   애플리케이션 logging wrapper
7) commons-pool
   오브젝트 풀링
8) commons-resources
   메시지 리소스 지원
9) commons-validator
   필드 validation

[Struts의 “전과 후”]

■ Struts 장점

   1) JSP 태그 메커니즘 사용
      이 태그 기능은 재사용 가능한 코드를 조장하고 JSP 파일에서 자바 코드를 제거한다.
      이 기능은 JSP 기반 개발툴로 잘 통합된다.
   2) 태그 라이브러리(Tag library)
      재구현이냐, 태그 라이브러리냐? 필요로 하는 것이 라이브러리에 없다면 여러분이 기여하면 된다.
      또한 Struts는 JSP 태그 기술을 배울 수 있는 좋은 토대이다.
   3) 오픈 소스
      코드를 볼 수 있다는 오픈 소스만의 장점이 있다. 보는 눈들이 많은 만큼 코드 리뷰가 확실하다.
   4) Sample MVC 구현
      자신만의 MVC 구현을 만들고 싶다면 Struts가 도움이 된다.
   5) 문제 관리
      분할과 정복(Divide & conquer)은 문제를 해결하고 문제를 관리할 수 있는 좋은 방법이다.

■ Struts 단점

   1) 정확한 추상화 레벨
     Struts는 정확한 레벨의 추상화를 제공하는가? 페이지 디자이너에게 맞는 추상화 레벨은 무엇인가? 좋은 질문이다. 페이지 디자이너가 페이지 개발 시 자바 코드에 액세스 하도록 할 수 있는가? UI 개발 시 자바 코드 액세스를 제한하는 이유가 있다. 가장 중요한 이유는 페이지 디자이너에게 자바를 조금만 제공해도 많은 자바를 사용하기 때문이다. Microsoft ASP 개발이 이를 증명한다. ASP 개발 시 COM 객체를 만들어서 ASP 객체들을 구현한 다음 ASP 스크립트를 작성하여 이를 함께 묶는다. 대신, ASP 개발자들은 ASP 스크립트 때문에 미칠 지경에 이른다. "내가 VBScript로 직접 프로그래밍 할 수 있는 것을 왜 COM 개발자가 이를 구현할 때 까지 기다려야 하나?" 라고 푸념하는 소리가 들린다. Struts는 태그 라이브러리를 통해 JSP 파일에 필요한 자바 코드의 양을 제한한다. Logic Tag는 아웃풋의 조건적 생성을 관리하지만 자바 코드 때문에 UI 개발자가 괴로워하는 것에는 속수무책이다. 어떤 유형의 프레임웍을 사용하든지 전개 및 관리 환경은 이해해야 한다. 물론 어려운 일이다.
   2) 범위 제한
     Struts는 웹 기반 MVC 솔루션으로서 HTML, JSP 파일, 서블릿을 사용하여 구현된다.

[Struts의 미래]

새로운 소프트웨어 개발 시대에 모든 것은 빠르게 변화한다. 5년도 채 못 되어서 Struts는 웹 애플리케이션 개발에
표준으로 자리매김 하고 있다. 기존 Servlet, JSP의 문제점이나 편리성 등을 모두 만족시켰기에 가능하였다.
현재 Struts2.0 버전이 베타 릴리즈 될 만큼 계속적인 진화게 진행 중이다. 향후 Servlet, JSP의 대안이 아닌 J2EE
환경이 보다 확장된 기능까지 지원될지 지켜볼 만 하다.




출처 : http://narahasi.tistory.com/11

Posted by 1010
반응형

Posted by 1010
91..개발관련프로그램2008. 10. 29. 09:42
반응형
Apollocation Box
by 영구기

Developer

원영국[영구기] - http://airdev.tistory.com/

Apollocation Box 소개

Box.net 의 OpenAPI를 이용한 무료 웹하드 FTP
한 계정당 1GB의 용량 제공 (계정 무한대로 생성 가능)

Screenshots

Install or Download

http://labs.apollocation.co.kr/applications/apollocationBox/apollocationBox.php?menu=1

Posted by 1010
반응형

모든 셀에 한꺼번에 바탕색 지정


원래는 <td> 태그마다, 즉 각 칸(셀)마다 스타일을 지정해 주어야 하더군요. 그러나 이러면 너무 번거로웠습니다.

또는
td { background-color:#FFDDDD; padding:10px; border:1px solid #ACB4F2; }

이렇게 하면 한꺼번에 셀의 스타일을 지정할 수 있긴 하지만, 이러면 그 페이지에 있는 모든 테이블의 셀이 획일적으로 지정되어 버리기에 문제가 있습니다. 특히 페이지에 광고가 있다면, 그 광고의 테이블 셀도 여기서 지정한 대로 변하기 때문에, 광고의 레이아웃이 이상하게 됩니다.


id 를 이용하면, 그 id에 해당되는 범위 내에서만, 셀의 배경색을 일괄적으로 지정할 수 있습니다.

우선 테이블 태그에 <table id="foo"> 이렇게 적당한 아이디(id)를 부여합니다. 단 아이디가 숫자로 시작하면 안되고, 한글이나 특수 기호가 포함되면 안되고, 중복되어서도 안됩니다. 한 HTML 페이지에 그 아이디는 단 하나뿐이어야 합니다. 즉 id="foo" 라는 아이디 정의가 다른 태그에도 있으면 안 됩니다. 무슨 아이디든 아이디는 고유해야 합니다.

#foo td { background-color:#FFDDDD; padding:10px; border:1px solid #ACB4F2; }


이 스타일 정의는, foo 라는 아이디를 가진 태그의 범위 내에 있는 모든 td 태그에 색을 지정하는 것입니다.




테이블 태그의 테두리 빈틈 없애기


<table> 태그에 style="border-collapse:collapse" 를 지정해 주면, td(셀)들 사이의 빈틈이 말끔히 없어집니다.




예제 코드:

<html>
<head>
<style type="text/css">

#foo td { background-color:#FFDDDD; padding:10px; border:1px solid #ACB4F2; }

</style>
</head>


<body>

<table id="foo" style="border-collapse:collapse">
  <tr><td>1번째 행의 1번째 칸</td> <td>1번째 행의 2번째 칸</td></tr>
  <tr><td>2번째 행의 1번째 칸</td> <td>2번째 행의 2번째 칸</td></tr>
  <tr><td>3번째 행의 1번째 칸</td> <td>3번째 행의 2번째 칸</td></tr>
</table>

</body>
</html>





위의 코드의 결과:

1번째 행의 1번째 칸 1번째 행의 2번째 칸
2번째 행의 1번째 칸 2번째 행의 2번째 칸
3번째 행의 1번째 칸 3번째 행의 2번째 칸


출처 : http://mwultong.blogspot.com/2006/06/html-css-td.html
Posted by 1010
98..Etc/Etc...2008. 10. 28. 09:20
반응형
원도우 탐색기 시작시 버그

regsvr32 /u shmedia.dll
Posted by 1010
01.JAVA/Java2008. 10. 27. 19:48
반응형

이 문서는 기술지원 또는 개발 시 java.lang.OutOfMemoryError 를 만났을 때 원인 파악 및 해결방안 입니다.

java.lang.OutOfMemoryError 에는 크게 2가지 패턴이 있다고 볼 수 있습니다.(전적으로 개인적인 생각이지만..^^)

Java heap 메모리가 정말로 Full 되서 나는 종류가 있고 그렇지 않은데도 나는 종류가 있습니다.

그 둘 중에 어는 것 인지부터 가려내는 것이 가장 먼저 선행되어야 합니다.

Java 가상머신에는 메모리 구조가 여러단계로 나뉘어 져 있으므로 어느 영역에 의해 java.lang.OutOfMemoryError 가 나는지 알기 위해 JAVA OPTION으로 싸이트가 안정화 되기 전까진 verbosegc 또는 -XX:+PrintGCDetails  옵션을 추가해 놓는 것이 java.lang.OutOfMemoryError 났을 때를 대비해 좋은 습관이라 할 수 있습니다.

-verbosegc 또는  -XX:+PrintGCDetails  옵션으로 로그에 남는 heap 메모리 정보를 본 후 java.lang.OutOfMemoryError 가 날 때 heap이 꽉 차서 나는 것인지 아닌지 부터 판단합니다.

1.     Heap Memory Full 차지 않았을 때 1)     Perm 영역이 full 되는 경우

Permanent generation is full…

increase MaxPermSize (current capacity is set to: 134217728 bytes)

[Full GC[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor31282]

 810207K->802132K(1013632K), 8.3480617 secs]

<GC: 2 4  2465625.831280 10348 0 31 113802808 105534632 286326784 0 0 35782656 715849728 715848840 715849728 134217720 134023296 134217728 8.348677 8.348677 >

Passwd Check =============

<2005. 5. 19. 오전 9 32 23 KST> <Error> <HTTP> <BEA-101017> <[ServletContext(id=2536415,name=/,context-path=)] Root cause of ServletException.

java.lang.OutOfMemoryError

위와 같은 case 인 경우네는 Java 가상머신중에 Perm 영역이 full 차는 경우 입니다. 

Perm 영역에는 class object 및 관련된 meta data가 로드되는 곳인데 싸이트가 매우 많은 수의 class를 사용하는 경우 늘려줘야 하는 case도 있습니다.

얼마가 적정한 사이즈란 정답이 없는 것 같고 max가 계속 늘어나지 않고 일정한 사이즈를 유지 하면 됩니다.

             위 에러가 났을때는 -XX:MaxPermSize=256m  옵션으로 사이즈를 적당하게 늘려주는게 방

             법이며 늘려주었는데도 불구하고 Full 차는 시간만 늘어날 뿐 계속 사이즈가 늘어난다면 이 영역은 일반 비즈니스 프로그램으로 핸들링 할 수 없는 영역이므로 WAS 제품의 버그 및 jdk 버그로 보는 것이 일반적입니다.

       

2)     MAXDSIZ 사이즈 관련

  - Exception in thread “CompileThread0″ java.lang.OutOfMemoryError: requested 32756 bytes for ChunkPool::allocate

Possible causes:

         - not enough swap space left, or

         - kernel parameter MAXDSIZ is very small.

-          java.lang.OutOfMemoryError: unable to create new native thread

 

위 두 에러가 나는 이유는 Data 사이즈가 Full 차서 더 이상 메모리 할당을 할 수 없다는 java.lang.OutOfMemoryError 입니다.

Jdk도 내부적으로 c 라이브러리를 쓰고 jni를 통해서 c프로그램을 호출할 수 도 있는 환경에서 Data 영역이상으로 메모리 사용 시 위 에러를 만날 수 있습니다.

Heap 영역에는 java heap C heap이 있는데 C heap Data 메모리 영역에 영향을 미치는 것으로 보이며 보통 C의 전역 변수들이 잡히는 영역입니다.

위 현상을 만났을 때는 hp os MAXDSIZ가 너무 작게 잡혀있지 않은지 확인 후 적당한 크기로 늘려 줘야 합니다.

Glance 에서 shift+m 을 누른 후 jvm pid를 누르면 java가 사용하는 Data 사이즈를 모니터링 할 수 있습니다.

모니터링을 통해 적정한 사이즈로 MAXDSIZ를 늘려주어야 하며 만일 늘려 준게 에러 발생의 시간만 지연 시킬 뿐 계속 사용량이 늘어난다면 이는 사용하는 c라이브러리 쪽에 메모리 릭 버그가 있는 것이므로 c라이브러리를 체크 하셔야 합니다.

java.lang.OutOfMemoryError: unable to create new native thread

이 경우는 프로그램에서 Thread pool 프로그램 실수로 필요이상으로 쓰레드가 생성되는 경우도 과도하게 메모리를 사용할 수 있으므로 jvm 쓰레드 덤프를 통해 과도한 쓰레드가 생성되지 않았는지도 확인해 보셔야 합니다.

2.     Heap Full 찾을 때

이 경우는 java가 사용하는 heap 영역이 Full 되서 java.lang.OutOfMemoryError 가 나는 경우 인데 두 가지 패턴이 있습니다.

순간적으로 대량의 데이터를 메모리에 올리는 프로그램이 실행되어 문제를 야기 할수 있으며 다른 한 가지는 조금씩 메모리 릭이 발생하여 점차적으로 메모리가 쌓여 가는 경우 입니다.

두 가지 중에  어느 것인지 구별하는 것이 중요하며 이를 위해서도 마찬가지로 -verbosegc 또는  -XX:+PrintGCDetails  로그를 통해 순간적으로 메모리가 차는 것인지 조금씩 메모리가 차는 것인지를 확인하셔야 합니다.

1) 특정 프로그램의 특정시점의 과도한 메모리 사용에 의한 경우

                특정 프로그램이 과도하게 heap 메모리 이상 메모리를 사용하면서

java.lang.OutOfMemoryError가 발생하는 경우는 이 에러가 발생하는 시점의 쓰레드 덤프를 통해 어느 프로그램인지 쉽게 찾을 수 있습니다.

쓰레드 덤프에 메모리를 쓸만한 프로그램은 어느 정도의 자바프로그램 경험이 있으면 찾을 수 있습니다.

Ex)

“ExecuteThread: ‘36′ for queue: ‘default’” daemon prio=10 tid=0×0048e7b0 nid=48 lwp_id=4139729 runnable [0x23f32000..0x23f30500]

          at java.net.SocketInputStream.socketRead(Native Method)

          at java.net.SocketInputStream.read(Unknown Source)

          at oracle.net.ns.Packet.receive(Unknown Source)

          at oracle.net.ns.NetInputStream.getNextPacket(Unknown Source)

          at oracle.net.ns.NetInputStream.read(Unknown Source)

          at oracle.net.ns.NetInputStream.read(Unknown Source)

          at oracle.net.ns.NetInputStream.read(Unknown Source)

          at oracle.jdbc.ttc7.MAREngine.unmarshalUB1(MAREngine.java:718)

          at oracle.jdbc.ttc7.MAREngine.unmarshalSB1(MAREngine.java:690)

          at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:373)

          at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1405)

          at oracle.jdbc.ttc7.TTC7Protocol.fetch(TTC7Protocol.java:889)

          - locked <0×35e8e3b0> (a oracle.jdbc.ttc7.TTC7Protocol)

          at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:242)

          - locked <0×36f66c98> (a oracle.jdbc.driver.OracleResultSetImpl)

          at weblogic.jdbc.pool.ResultSet.next(ResultSet.java:180)

          at Dcard.AAA.ejb.monitor.member.wbbb.WACBean.getInfoList(WACBean.java:5789)

java.lang.OutOfMemoryError 가 날 상황에 쓰레드 덤프를 두 세번 떠서 같은 쓰레드 번호로 위 같은 로직이 오래 결려있다면 이는 프로그램에서 while(rs.next()) 를 오랜 기간 돌면서 메모리에 DB로부터 읽어서 올리고 있다는 것을 의미 합니다 대량 데이터 조회가 일어나는 경우인 것 입니다.

이런 식으로 특정 프로그램의 특정 시점에 과도한 메모리 사용으로 인한 java.lang.OutOfMemoryError 에러는 쓰레드 덤프를 통해 찾을 수 있습니다.

물론 2번에서 설명 할 heap dump를 통해서도 찾을 수 있습니다.

2) 메모리 릭에 의해 조금씩 메모리가 쌓인 경우

JVM위 에서 실행중인 프로그램중에 어떤 것이 GC 대상에서 제외되는 영역에 data를 조금씩 쌓고 있다는 얘기입니다.

GC 대상에서 제외되는 영역은 다음과 같은 곳이 있습니다.

- Http Session에 넣는 데이터..(세션 타임아웃 또는 invilidate 씨 까지 제외됨)

- Static 변수

- 서블릿 또는 jsp의 멤버변수 ( WAS 기동 후 최초 호출 시 인스턴스 화 되어 WAS가 내려 갈 때 까지 사라지지 않음 )

- EJB의 멤버변수( pool안에서 객체가 존재하는 한 GC대상에서 제외)

          위 같은 영역에 프로그램에서 data add 하는 구조를 메모리 릭 이라고 할 수 있습니다.

           IBM 또는 SUN JDK 인 경우에는 heapdump를 통해서 분석하여 어느 데이터가 메모리를 많이 잡고 있는지를 알 수 있습니다.

           Heapdump 사용법 및 분석 법은 다음을 참조 하시면 됩니다.

 http://www.alphaworks.ibm.com/aw.nsf/FAQs/heaproots

http://www-1.ibm.com/support/docview.wss?uid=swg21190476

http://www-1.ibm.com/support/docview.wss?rs=180&context=SSEQTP&q1=heapdump+solaris&uid=swg21190608&loc=en_US&cs=utf-8&lang=en

http://www.skywayradio.com/tech/WAS51/IBMHeapDump/

출처 : http://www.javaservice.net/~java/bbs/read.cgi?m=etc&b=jdk&c=r_p&n=1117521098&p=1&s=t#1117521098

var viewer_image_url = “http://blogimgs.naver.com/blog20/blog/layout_photo/viewer/”; var photo = new PhotoLayer(parent.parent.parent); photo.Initialized(); window.onunload = function() { photo.oPhotoFrame.doFrameMainClose(); }.bind(this);

Posted by 1010
01.JAVA/Java2008. 10. 27. 19:46
반응형

java.lang.OutOfMemoryError: PermGen space

요즘 들어 부쩍 java.lang.OutOfMemoryErorr로 인해 이클립스가 뻗어버리는 일이 많이 발생했었다.
하지만 Heap Monitor를 보면 200M 조차 사용하지 않는다.
이런 경우, 대부분은 PermGen 영역이 모자란 것이 원인일 수 있다.

{workspace}/.metadata/.log를 확인해보면 PermGen space라고 기록되어 있을 것이다.

Eclipse를 사용할 때는 JVM에 -Xmx 옵션은 대부분은 넣어서 사용하리라 생각한다.
하지만 Java는 메모리 영역을 사실상 두 부분으로 구분하여 사용한다.
일반 Java Heap space와 클래스와 같이 Permenant Generation 대상 데이터를 두기 위한 PermGen space이다.

대부분의 자바 애플리케이션에서는 기본 PermGen Size로 충분하겠지만
이클립스의 경우 클래스가 꽤 많아지면서 모자란 경우가 있는듯 하다.
javanese의 경우 Callisto를 깔아놓고 JDT, CDT를 왔다갔다 하면서 사용하다보니
Heap은 별로 쓰지도 않는데 PermGen space가 종종 모자라는 경우가 있다.
아마 Web관련 Tool을 많이 사용하는 분도 같은 현상이 나타날 수 있을 것이다.

PermGen space는 -XX:MaxPermSize 옵션으로 설정할 수 있다.

eclipse -vm /usr/lib/jvm/java-1.5.0-sun/bin/java -vmargs -XX:MaxPermSize=128m -Xms128m -Xmx512m

OutOfMemory 에러가 발생한다면 -Xmx만 늘려주지말고 PermSize도 확인해보라.

Posted by 1010
반응형
Posted by 1010
98..Etc/Tomcat2008. 10. 27. 15:01
반응형
톰캣에서 java.lang.IllegalStateException: Post too large 가 발생하는 경우


http://confluence.atlassian.com/display/DOC/Max+size+of+HTTP+POST+request+and+Confluence+page+size

아래는 $TOMCAT_HOME/conf/server.xml에 설정을 해야 하는 옵션이다.
maxPostSize에 필요한 용량제한을 셋팅하면 된다.

<Connector port="8102" minProcessors="1" maxProcessors="5"
            enableLookups="false" redirectPort="8443" acceptCount="100"
            debug="0" connectionTimeout="120000" useBodyEncodingForURI="true"
            maxPostSize="3145728"
            protocol="AJP/1.3" />
Posted by 1010