Solaris Live Upgrade를 사용하고 새 부트 환경을 작성할 때 다음 지침을 따라 문제를 방지하십시오.
패키지 절차 스크립트는 현재 활성 운영 환경에서 독립적이어야 합니다. 절차 스크립트는 패키지 설치 및 제거 동안 특정 지점에서 발생하는 작업을 정의합니다. 이러한 미리 지정된 이름으로 작성될 수 있는 절차 스크립트는 다음 4개입니다.preinstall, postinstall, preremove 및 postremove. 패키지 절차 스크립트는 대체 부트 환경이 Solaris Live Upgrade를 사용하여 전환될 수 있기 때문에 현재 활성 운영 환경에서 독립적이어야 합니다.
이러한 스크립트는 모든 프로세스를 시작 또는 정지하지 말아야 하며 또는 운영 체제 종속적이고 현재 실행중인 시스템에 대한 정보를 보고하는 ps 또는 truss 와 같은 명령의 출력에 의존하지 말아야 합니다.
절차 스크립트는 expr, cp, ls 및 셸 스크립트 작성을 용이하게 하는 다른 명령과 같은 다른 표준 UNIX 명령을 자유롭게 사용합니다. 그러나 현재 대체 루트(/)는 이 절, "사용자 정의 JumpStart 프로그램 및 Solaris Live Upgrade 대체 루트(/) 요구 사항"에서 약술된 규칙 내부를 제외하고는 수정하지 말아야 합니다.
모든 스크립트는 본 셸(/bin/sh)에서 작성되어야 합니다. 본 셸은 절차 스크립트를 실행하기 위해 pkgadd 명령이 사용하는 인터프리터입니다.
패키지 절차 스크립트는 2.6 릴리스 이전 릴리스에 없는 명령을 호출하지 말아야 합니다. 예를 들어, 패키지는 pgrep 명령을 호출할 수 없습니다. 2.6 릴리스 이후로 많은 명령에 추가 기능이 추가되었습니다. 패키지 절차 스크립트는 2.6 릴리스에 존재하지 않았던 모든 명령 옵션을 사용하지 말아야 합니다. 예를 들어, -f 옵션은 umount 명령에 새 옵션입니다.
모든 패키지는 pkgchk 검증을 통과해야 합니다. 패키지가 작성되면 설치되기 전에 다음 명령으로 검사해야 합니다.
# pkgchk -d dir_name pkg_name |
dir_name |
패키지가 상주하는 디렉토리의 이름을 지정합니다. |
pkg_name |
패키지의 이름을 지정합니다. |
예를 들어, 패키지가 /export/SUNWvxvm에 존재하면 다음 명령을 내야 합니다.
# pkgchk -d /export SUNWvxvm |
오류는 표시되지 말아야 합니다.
패키지가 작성된 후 pkgadd에 대한 -R dir_name을 사용하여 대체 루트(/) 위치로 설치하여 테스트해야 합니다. 패키지가 설치된 후 이 예제에서와 같이 pkgchk를 사용하여 정확성을 검사해야 합니다.
# pkgadd -d . -R /a SUNWvxvm # pkgchk -R /a SUNWvxvm |
오류는 표시되지 말아야 합니다.
또한 패키지는 패키지 자체가 제공하는 명령을 실행하지 말아야 합니다. 이것은 디스크 없는 호환성을 유지하고 아직 설치되지 않은 공유 라이브러리를 필요로 할 수 있는 명령 실행을 방지합니다.
파일 작성, 수정 및 삭제를 위한 이러한 요구 사항은 다양한 명령을 사용하여 검증할 수 있습니다. 예를 들어, dircmp 또는 fssnap 명령은 패키지가 제대로 작동하는지 검증하는데 사용할 수 있습니다. 또한 ps 명령은 데몬이 패키지에 의해 정지 또는 시작되지 않았음을 확인하여 데몬 적합성을 테스트하기 위해 사용될 수 있습니다. truss 및 pkgadd 명령은 런타임 패키지 설치 적합성을 테스트할 수 있지만 모든 상황에서 작동하지 않을 수 있습니다. 다음 예제에서, truss 명령은 모든 읽기 전용, 비$BASEDIR 액세스를 제거하고 지정된 대체 루트(/) 내에 있지 않는 경로에 대한 비읽기 전용 액세스만 보여줍니다.
# BASEDIR=/a; export BASEDIR # truss -t open /usr/sbin/pkgadd -R ${BASEDIR} SUNWvxvm \ 2>&1> /dev/null | grep -v O_RDONLY | grep -v \ 'open("'${BASEDIR} |
이 절에서 참조되는 명령에 대한 자세한 내용은 설명서 페이지, dircmp(1), fssnap(1M), ps(1) 또는 truss(1)을 참조하십시오.