Solaris 운영 체제(OS) 소프트웨어는 SVR4 패키지와 함께 제공 및 설치됩니다. 이 패키지에는 패키지별 구성 정보와 함께 하나 이상의 설치 가능한 파일이 포함되어 있습니다. 패키지별 정보에서 이러한 개체의 속성을 정의하고, 패키지 설치 방법 및 위치에 대해 설명합니다. 또한 일반적으로 패키지에는 사전 설치 및 사후 설치 스크립트가 포함되어 있어 파일이 제대로 제공되는지 확인할 수 있습니다.
패치는 설치된 패키지를 업데이트하여 시스템에서 이러한 파일 중 하나 이상을 추가, 업데이트 또는 삭제합니다. 물리적으로 패치 자체는 많은 사전 패치 및 사후 패치 스크립트와 클래스 액션 스크립트와 함께 스파스 패키지로 구성되어 있습니다.
스파스 패키지는 정식 패키지의 최소 버전으로, 업데이트되는 파일만 제공합니다.
클래스 액션 스크립트에서는 패키지나 패치를 설치 또는 제거하는 동안 실행할 액션 집합을 정의합니다.
각 Marketing 릴리스에는 하나의 패치 집합이 있습니다. 예를 들어 Solaris 8 Marketing 릴리스에는 Solaris 8 패치 집합이 있으며 Solaris 10 릴리스에는 Solaris 10 패치 집합이 있습니다.
각 릴리스의 패치 집합에는 Marketing 릴리스 내의 모든 릴리스가 포함되어 있습니다. 예를 들어 Solaris 10 3/05 릴리스는 Solaris 10의 첫 번째 Marketing 릴리스입니다. 이 릴리스 이후 Solaris 10 1/06, Solaris 10 6/06과 같은 많은 릴리스가 있습니다. 패치 집합은 이러한 모든 Solaris 10 릴리스에 적용 가능합니다. 그리고 동일한 Solaris 10 패치를 Solaris 10 3/05 릴리스, Solaris 10 1/06 릴리스, Solaris 10 6/06 릴리스 등에 적용할 수 있습니다.
Solaris Marketing 릴리스 경계를 넘어서는 패치할 수 없습니다. 예를 들어 Solaris 10 패치를 Solaris 9 릴리스에 적용할 수 없습니다.
시스템에 설치된 릴리스 이후에 릴리스된 모든 패치를 설치하여 시스템을 업그레이드하려는 고객도 있습니다. Solaris 10 1/06 릴리스와 같이 일반적으로 사용 가능한 릴리스 이후에 릴리스된 패치에는 Solaris 10 1/06 릴리스에서 제공하는 기능 및 버그 픽스가 모두 포함되어 있습니다.
업그레이드할 수 없습니다. 후속 패치를 통해 최신 릴리스의 일부를 얻을 수 있지만 전체 릴리스를 업데이트할 수는 없습니다.
Solaris 10 6/06과 같은 Solaris 릴리스에는 새 패키지 및 기존 코드에 대한 패치가 포함되어 있습니다. 기능 변경 내용을 포함하여 기존 코드에 대한 모든 변경 내용이 패치를 통해 제공됩니다. 릴리스(예: Solaris 10 6/06 릴리스)와 동일하거나 상위 수준의 패치로 패치하는 경우 해당 릴리스에 포함된 기존 코드에 대한 모든 버그 픽스를 얻을 수 있습니다. 또한 패치에 완전히 자체 포함된 일부 새 기능도 얻을 수 있습니다.
패치에 새 개체를 포함할 수 있지만 일반적으로 새 패키지를 통해 많은 기능들이 제공됩니다. 이러한 새 패키지는 대개 Solaris 릴리스 이미지를 설치 또는 업그레이드하는 경우에만 사용할 수 있습니다. 따라서 Solaris 10 6/06 릴리스와 같은 릴리스와 동일한 기능에는 패치가 불가능합니다.
현재 권장되는 패치 클러스터가 대용량일 수 있으며 커널 패치와 같은 특정 패치의 용량이 증가하는 추세입니다. 예를 들어 Solaris 10 11/06 커널 패치 118833-36의 용량은 약 136MB이고, Solaris 10 8/07 커널 패치 120011-10의 용량은 약 166MB입니다. 대용량 패치를 설치하려면 시간이 걸립니다.
비 글로벌 영역을 가진 시스템에서의 패치 작업은 각 영역에 대해 한 번에 하나씩 순차적으로 실행되고 있습니다.
언제나 소프트웨어 "구성 요소"당 하나의 패치를 제공하여 다루기 힘든 대용량 패치를 만들지 않도록 하는 것이 지금까지의 목적이었습니다. 예를 들어 UFS 하위 시스템에는 UFS 패치를, libc 라이브러리에는 libc 패치를 적용할 수 있습니다.
버그 픽스, 특히 기능 변경 내용이 운영 체제의 다른 하위 시스템에 있는 코드에 영향을 주는 경우 이러한 경계는 사라집니다. 이 결과, 변경 내용이 일관성 있게 제공되도록 하나 이상의 패치를 함께 적용해야 하는 종속성이 발생할 수 있습니다.
때로는 종속성이 "소프트"하고 패치를 분리할 수 있어 전체 픽스를 제공하려면 여러 패치가 필요할 수 있다고 패치 README에 기록되어 있을 수 있습니다. 소프트 종속성은 픽스 또는 기능이 불완전하다는 것이지만 불완전하더라도 일관성 없는 시스템 상태를 초래하지는 않습니다.
패치 README에는 단일 사용자 모드로 설치해야 하는 패치가 지정되어 있습니다. 패치 도구에서는 단일 사용자 모드를 사용하도록 요구하지 않지만 패치 README는 따라야 합니다. 단일 사용자 모드에서 패치를 하면 시스템을 정지하는 데 도움이 됩니다. 그리고 시스템에서의 작업을 최소화하는 것이 중요합니다. 일부 패치의 경우 시스템에서 흔히 사용하는 구성 요소를 업데이트합니다. 단일 사용자 모드를 사용하면 시스템 안정성을 보존하면서 이러한 구성 요소를 업데이트하는 동안 구성 요소가 사용되는 가능성을 줄일 수 있습니다.
커널 패치와 같은 시스템 패치에는 단일 사용자 모드를 사용하는 것이 매우 중요합니다. 다중 사용자 모드에서 커널 패치를 적용하면 시스템이 일관성 없는 상태로 전환될 위험이 상당히 높습니다.
init S 명령으로 실행 수준을 변경할 수 있다고 생각할 것입니다. 그러나 실제로 이 방식으로 다중 사용자 모드에서 단일 사용자 모드로 전환할 때 시스템에서 실행되는 모든 프로세스와 응용 프로그램을 종료할 수 있는 것은 아닙니다. 특히 타사 응용 프로그램이 해당합니다. init 명령을 사용하면 단일 사용자 모드 설치를 지정하는 패치에 대해 시스템을 가능한 많이 종료할 수 없습니다. 따라서 패치 README에 단일 사용자 모드 설치가 지정되어 있으면 단일 사용자 모드로 부트하여 패치 작업을 수행하는 것이 매우 좋습니다.
이는 알려진 문제로, 단일 사용자 모드에서 마운트되지 않는 비 글로벌 영역 파일 시스템으로 인해 대개 발생합니다. 다음과 같은 오류 메시지가 표시될 수 있습니다.
Preparing checklist for non-global zone check...
Checking non-global zones...
ERROR: unable to boot zone: problem running on zone :
error 1 zoneadm: zone 'myzone': can't stat /zones/full1/root: No such file or
directory
zoneadm: zone 'myzone': call to zoneadmd failed
Can not boot non-global zone myzone
해결 방법: 모든 로컬 파일 시스템을 마운트하도록 패치를 설치하기 전에 mountall -l을 실행합니다.
일부 패치의 패치 README 파일에는 패치를 설치 또는 제거한 후 다시 부트해야 한다고 지정되어 있습니다. 이 파일의 지침이 잘 이해되지 않으면 패치의 최상위 디렉토리에 있는 patchinfo 파일을 참조하십시오. 다시 부트에 대한 지침은 여기 명확하게 설명되어 있습니다. 다시 부트해야 한다는 이 요청에는 다음의 두 가지 다시 부트 지침이 포함될 수 있습니다.
첫 번째 지침은 픽스를 확인하려면 패치를 한 후 "다시 부트"하라는 것입니다. 이 지침은 다시 부트할 때까지 일부 변경 내용이 적용되지 않음을 알려 주기 위한 것이기 때문에 시간적 제약은 없습니다.
두 번째 지침은 패치를 한 후 "즉시 다시 부트"하라는 것입니다. 시스템의 상태가 일관성이 없어 실행 중인 시스템을 안정화하는 데 다시 부트가 필요한 경우 즉시 다시 부트를 해야 합니다. 따라서 가능한 빨리 시스템을 다시 부트해야 하며, 패치 작업을 완료하는 즉시 수행하는 것이 좋습니다.
예를 들어 패치에서 새 커널 바이너리 및 새 libc 라이브러리가 제공될 수 있습니다. 새 커널 바이너리를 디스크에 설치하면 시스템을 다음에 부트할 때 이 바이너리가 로드되기 때문에 커널 바이너리는 계속 "비활성" 상태가 됩니다. 또한 새 libc 라이브러리에는 새 커널에 따라 달라지는 인터페이스 또는 동작 변경 내용이 포함될 수 있습니다. 그러나 새 libc를 파일 시스템에 설치하면 언제라도 이 libc를 연결하여 호출할 수 있습니다. 이 버전의 차이점으로 인해 시스템의 상태가 일관성이 없을 수 있으며 이는 심각한 문제로 이어질 수 있습니다.
아니요, 패치에 대해 다시 부트가 필요한 경우 다시 부트를 취소할 수 없습니다. 패치에서 제공된 변경 내용을 적용하려면 곧 다시 부트해야 합니다. 그러나 다시 부트를 편한 시간까지 연기하도록 몇 개의 전략 중에서 선택할 수 있습니다.
한 가지 방법은 Solaris 라이브 업그레이드를 사용하는 것으로, 이를 통해 프로덕션 환경에 있는 동안 패치를 설치할 수 있습니다. 그리고 단일 사용자 모드를 취소하고 다중 사용자 모드를 사용할 수 있습니다. 그런 후 편한 시간에 패치된 환경으로 다시 부트하기만 하면 됩니다.
참고: 현재 Solaris 라이브 업그레이드에서는 Veritas에서 캡슐화된 루트(/) 파일 시스템을 명확하게 지원하지 않습니다. 루트(/) 파일 시스템에는 VxVM(Veritas Volume Manager) 볼륨이 해당될 수 있습니다. 현재 시스템에 VxVM 볼륨을 구성하면 lucreate 명령으로 새 부트 환경을 만들 수 있습니다. 데이터를 새 부트 환경에 복사할 경우 Veritas 파일 시스템 구성이 손실되고 UFS 파일 시스템이 새 부트 환경에 만들어집니다.
Solaris 라이브 업그레이드와 유사한 이점을 가진 다른 접근 방법은 Solaris Volume Manager를 통해 RAID-1 볼륨(디스크 미러링)을 사용하는 것입니다. 이 시나리오에서는 patchadd -R 명령을 통해 미러를 분할하고 비활성 루트(/) 파일 시스템 미러를 마운트하며 패치를 복사본에 적용할 수 있습니다. -R 옵션을 사용하면 대체 루트 위치를 지정할 수 있습니다. -R은 대개 디스크 없는 클라이언트에 사용하기 위한 것이지만 특정 시점까지 다시 부트를 지연하는 데도 사용할 수 있습니다.