A.3. Kickstart 파일의 스크립트
Kickstart 파일은 다음 스크립트를 포함할 수 있습니다.
-
%pre
-
%pre-install
-
%post
이 섹션에서는 스크립트에 대한 다음 세부 정보를 제공합니다.
- 실행 시간
- 스크립트에 포함될 수 있는 명령 유형입니다.
- 스크립트의 목적
- 스크립트 옵션
A.3.1. %pre 스크립트
%pre
스크립트는 Kickstart 파일이 로드된 직후 시스템에서 실행되지만 완전히 구문 분석되고 설치가 시작되기 전에 실행됩니다. 이러한 각 섹션은 %pre
로 시작하고 %end
로 끝나야 합니다.
%pre
스크립트는 네트워킹 및 스토리지 장치의 활성화 및 구성에 사용할 수 있습니다. 설치 환경에서 사용 가능한 인터프리터를 사용하여 스크립트를 실행할 수도 있습니다. 설치를 진행하기 전에 특수 구성이 필요한 네트워킹 및 스토리지가 있거나 추가 로깅 매개변수 또는 환경 변수를 설정하는 스크립트가 있는 경우 %pre
스크립트를 추가할 수 있습니다.
%pre
스크립트의 문제를 디버깅하기 어려울 수 있으므로 필요한 경우에만 %pre
스크립트를 사용하는 것이 좋습니다.
Kickstart의 %pre
섹션은 설치 단계(inst.stage2
)를 가져온 후 실행됩니다. 즉, root가 설치 프로그램 환경(설치 프로그램 이미지)으로 전환된 후 Anaconda
설치 프로그램 자체를 시작한 후 를 의미합니다. 그런 다음 %pre
의 구성이 적용되고 Kickstart의 URL로 구성된 설치 리포지토리에서 패키지를 가져오는 데 사용할 수 있습니다. 그러나 네트워크에서 이미지(inst.stage2
)를 가져오도록 네트워크를 구성하는 데 사용할 수 없습니다.
네트워킹, 스토리지 및 파일 시스템과 관련된 명령은 설치 환경 /sbin
및 /bin
디렉터리에 있는 대부분의 유틸리티 외에 %pre
스크립트에서 사용할 수 있습니다.
%pre
섹션에서 네트워크에 액세스할 수 있습니다. 그러나 이 시점에서 이름 서비스가 구성되지 않았으므로 URL이 아닌 IP 주소만 작동합니다.
pre 스크립트는 chroot 환경에서 실행되지 않습니다.
A.3.1.1. %pre 스크립트 섹션 옵션
다음 옵션을 사용하여 사전 설치 스크립트의 동작을 변경할 수 있습니다. 옵션을 사용하려면 스크립트 시작 시 %pre
줄에 추가합니다. 예를 들면 다음과 같습니다.
%pre --interpreter=/usr/libexec/platform-python -- Python script omitted -- %end
--interpreter=
Python과 같은 다른 스크립팅 언어를 지정할 수 있습니다. 시스템에서 사용 가능한 모든 스크립팅 언어를 사용할 수 있습니다. 대부분의 경우
/usr/bin/sh
,/usr/bin/bash
및/usr/libexec/platform-python
입니다.platform-python
인터프리터는 Python 버전 3.6을 사용합니다. 새 경로와 버전의 Python 스크립트를 이전 RHEL 버전에서 변경해야 합니다. 또한platform-python
은 시스템 툴을 위한 것입니다. 설치 환경 외부의python36
패키지를 사용합니다. Red Hat Enterprise Linux의 Python에 대한 자세한 내용은 동적 프로그래밍 언어 설치 및 사용에 Python 소개를 참조하십시오.--erroronfail
-
스크립트가 실패하면 오류를 표시하고 설치를 중지합니다. 오류 메시지는 실패의 원인이 기록되는 위치로 안내합니다. 설치된 시스템은 불안정하고 부팅 불가능한 상태가 될 수 있습니다.
inst.nokill
옵션을 사용하여 스크립트를 디버깅할 수 있습니다. --log=
스크립트의 출력을 지정된 로그 파일에 기록합니다. 예를 들면 다음과 같습니다.
%pre --log=/tmp/ks-pre.log
A.3.2. %pre-install 스크립트
pre-install
스크립트의 명령은 다음 작업이 완료된 후 실행됩니다.
- 시스템이 분할됨
- 파일 시스템은 /mnt/sysroot에 생성 및 마운트됨
- 네트워크가 부팅 옵션 및 Kickstart 명령에 따라 구성되었습니다.
%pre-install
각 섹션은 %pre-install
로 시작하고 %end
로 끝나야 합니다.
%pre-install
스크립트를 사용하여 설치를 수정하고 패키지 설치 전에 보장된 ID가 있는 사용자 및 그룹을 추가할 수 있습니다.
설치에 필요한 수정 사항에 대해 %post
스크립트를 사용하는 것이 좋습니다. %post
스크립트가 필요한 수정 사항에 대한 짧은 경우에만 %pre-install
스크립트를 사용합니다.
pre-install
스크립트는 chroot 환경에서 실행되지 않습니다.
A.3.2.1. %pre-install 스크립트 섹션 옵션
다음 옵션을 사용하여 pre-install
스크립트의 동작을 변경할 수 있습니다. 옵션을 사용하려면 스크립트 시작 시 %pre-install
행에 추가합니다. 예를 들면 다음과 같습니다.
%pre-install --interpreter=/usr/libexec/platform-python -- Python script omitted -- %end
동일한 인터프리터 또는 다른 인터프리터와 함께 %pre-install
섹션이 여러 개 있을 수 있습니다. Kickstart 파일에 나타나는 순서에 따라 평가됩니다.
--interpreter=
Python과 같은 다른 스크립팅 언어를 지정할 수 있습니다. 시스템에서 사용 가능한 모든 스크립팅 언어를 사용할 수 있습니다. 대부분의 경우
/usr/bin/sh
,/usr/bin/bash
및/usr/libexec/platform-python
입니다.platform-python
인터프리터는 Python 버전 3.6을 사용합니다. 새 경로와 버전의 Python 스크립트를 이전 RHEL 버전에서 변경해야 합니다. 또한platform-python
은 시스템 툴을 위한 것입니다. 설치 환경 외부의python36
패키지를 사용합니다. Red Hat Enterprise Linux의 Python에 대한 자세한 내용은 동적 프로그래밍 언어 설치 및 사용에 대한 Python 소개 를 참조하십시오.--erroronfail
-
스크립트가 실패하면 오류를 표시하고 설치를 중지합니다. 오류 메시지는 실패의 원인이 기록되는 위치로 안내합니다. 설치된 시스템은 불안정하고 부팅 불가능한 상태가 될 수 있습니다.
inst.nokill
옵션을 사용하여 스크립트를 디버깅할 수 있습니다. --log=
스크립트의 출력을 지정된 로그 파일에 기록합니다. 예를 들면 다음과 같습니다.
%pre-install --log=/mnt/sysroot/root/ks-pre.log
A.3.3. %post 스크립트
%post 스크립트는 설치가 완료된 후에 실행되는 설치 후 스크립트이지만 시스템을 처음 재부팅하기 전에 실행됩니다. 이 섹션을 사용하여 시스템 서브스크립션과 같은 작업을 실행할 수 있습니다.
설치가 완료되면 시스템에서 실행할 명령을 추가하는 옵션이 있지만 시스템을 처음 재부팅하기 전에 실행할 수 있습니다. 이 섹션은 %post
로 시작하고 %end
로 끝나야 합니다.
%post
섹션은 추가 소프트웨어 설치 또는 추가 이름 서버 구성과 같은 기능에 유용합니다. 설치 후 스크립트는 chroot
환경에서 실행되므로 설치 미디어에서 스크립트 또는 RPM 패키지를 복사하는 것은 기본적으로 작동하지 않습니다. 아래 설명된 대로 --nochroot
옵션을 사용하여 이 동작을 변경할 수 있습니다. 그런 다음 %post
스크립트가 설치된 대상 시스템의 chroot
가 아닌 설치 환경에서 실행됩니다.
설치 후 스크립트는 chroot
환경에서 실행되므로 대부분의 systemctl
명령은 모든 작업 수행을 거부합니다.
%post
섹션을 실행하는 동안 설치 미디어가 계속 삽입되어야 합니다.
A.3.3.1. %post 스크립트 섹션 옵션
다음 옵션을 사용하여 설치 후 스크립트의 동작을 변경할 수 있습니다. 옵션을 사용하려면 스크립트 시작 부분에 있는 %post
줄에 추가합니다. 예를 들면 다음과 같습니다.
%post --interpreter=/usr/libexec/platform-python -- Python script omitted -- %end
--interpreter=
Python과 같은 다른 스크립팅 언어를 지정할 수 있습니다. 예를 들면 다음과 같습니다.
%post --interpreter=/usr/libexec/platform-python
시스템에서 사용 가능한 모든 스크립팅 언어를 사용할 수 있습니다. 대부분의 경우
/usr/bin/sh
,/usr/bin/bash
및/usr/libexec/platform-python
입니다.platform-python
인터프리터는 Python 버전 3.6을 사용합니다. 새 경로와 버전의 Python 스크립트를 이전 RHEL 버전에서 변경해야 합니다. 또한platform-python
은 시스템 툴을 위한 것입니다. 설치 환경 외부의python36
패키지를 사용합니다. Red Hat Enterprise Linux의 Python에 대한 자세한 내용은 동적 프로그래밍 언어 설치 및 사용에 대한 Python 소개 를 참조하십시오.--nochroot
chroot 환경 외부에서 실행하려는 명령을 지정할 수 있습니다.
다음 예제에서는 /etc/resolv.conf 파일을 방금 설치한 파일 시스템에 복사합니다.
%post --nochroot cp /etc/resolv.conf /mnt/sysroot/etc/resolv.conf %end
--erroronfail
-
스크립트가 실패하면 오류를 표시하고 설치를 중지합니다. 오류 메시지는 실패의 원인이 기록되는 위치로 안내합니다. 설치된 시스템은 불안정하고 부팅 불가능한 상태가 될 수 있습니다.
inst.nokill
옵션을 사용하여 스크립트를 디버깅할 수 있습니다. --log=
스크립트의 출력을 지정된 로그 파일에 기록합니다. 로그 파일의 경로는
--nochroot
옵션을 사용할지 여부를 고려해야 합니다. 예를 들어--nochroot
가 없는 경우:%post --log=/root/ks-post.log
--nochroot
와 함께 다음을 수행합니다.%post --nochroot --log=/mnt/sysroot/root/ks-post.log
A.3.3.2. 예: 설치 후 스크립트에서 NFS 마운트
%post
섹션의 예에서는 NFS 공유를 마운트하고 공유의 /usr/new-machines/
에 있는 runme
라는 스크립트를 실행합니다. Kickstart 모드에서는 NFS 파일 잠금이 지원되지 않으므로 -o nolock
옵션이 필요합니다.
# Start of the %post section with logging into /root/ks-post.log %post --log=/root/ks-post.log # Mount an NFS share mkdir /mnt/temp mount -o nolock 10.10.0.2:/usr/new-machines /mnt/temp openvt -s -w -- /mnt/temp/runme umount /mnt/temp # End of the %post section %end