finish 스크립트란 rules 파일에서 지정하는 사용자 정의 Bourne 쉘 스크립트입니다. finish 스크립트는 시스템에 Solaris 소프트웨어가 설치된 뒤 시스템을 재부트하기 전에 작업을 수행합니다. finish 스크립트는 사용자 정의 JumpStart를 사용하여 Solaris를 설치할 때만 사용할 수 있습니다.
finish 스크립트를 사용하여 수행할 수 있는 작업은 다음과 같습니다.
파일 추가
특정 소프트웨어 그룹에서 설치된 것 이외의 개별 패키지나 패치 추가
루트 환경 사용자 정의
시스템의 루트 비밀번호 설정
추가 소프트웨어 설치
Solaris suninstall 프로그램은 시스템의 파일 시스템을 /a에 마운트합니다. 파일 시스템은 시스템을 재부트할 때까지 /a에 마운트된 채로 남게 됩니다. 새로 설치된 파일 시스템 계층에서 /a와 관련된 파일 시스템을 수정함으로써 파일을 추가, 변경 또는 제거하기 위해 finish 스크립트를 사용할 수 있습니다.
설치 과정 중에는 finish 스크립트의 출력이 /tmp/finish.log에 기록됩니다. 설치가 완료된 후에 로그 파일이 /var/sadm/system/logs/finish.log로 리디렉션됩니다.
사용자 정의 JumpStart 환경 변수를 finish 스크립트에서 사용할 수 있습니다. 환경 변수 목록은 사용자 정의 JumpStart 환경 변수를 참조하십시오.
finish 스크립트를 JumpStart 디렉토리에 저장합니다.
finish 스크립트를 사용하여 JumpStart 디렉토리에서 이미 설치된 시스템으로 파일을 추가할 수 있습니다. JumpStart 디렉토리는 SI_CONFIG_DIR 변수에 의해 지정된 디렉토리에 마운트되므로 파일을 추가할 수 있습니다. 디렉토리는 기본적으로 /tmp/install_config로 설정됩니다.
JumpStart 디렉토리의 파일을 설치된 시스템에 이미 존재하는 파일로 복사하여 파일을 대체할 수도 있습니다.
예를 들어, 사이트의 모든 사용자를 위해 개발된 site_prog라는 특수 응용 프로그램이 있다고 가정합니다. site_prog의 복사본을 JumpStart 디렉토리에 배치하면 finish 스크립트의 다음 행이 site_prog를 JumpStart 디렉토리에서 시스템의 /usr/bin 디렉토리로 복사합니다.
cp ${SI_CONFIG_DIR}/site_prog /a/usr/bin
|
Solaris 소프트웨어가 시스템에 설치된 뒤 자동으로 패키지나 패치를 추가하는 finish 스크립트를 만들 수 있습니다. finish 스크립트를 사용하여 패키지를 추가함으로써 시간을 절약하고 사이트의 서로 다른 시스템들에 설치되는 패키지와 패치의 일관성을 보장할 수 있습니다.
finish 스크립트의 pkgadd(1M) 또는 patchadd(1M) 명령을 사용할 때 -R 옵션을 사용하여 /a를 루트 경로로 지정합니다.
#!/bin/sh
BASE=/a
MNT=/a/mnt
ADMIN_FILE=/a/tmp/admin
mkdir ${MNT}
mount -f nfs sherlock:/export/package ${MNT}
cat >${ADMIN_FILE} <<DONT_ASK
mail=root
instance=overwrite
partial=nocheck
runlevel=nocheck
idepend=nocheck
rdepend=nocheck
space=ask
setuid=nocheck
conflict=nocheck
action=nocheck
basedir=default
DONT_ASK
/usr/sbin/pkgadd -a ${ADMIN_FILE} -d ${MNT} -R ${BASE} SUNWxyz
umount ${MNT}
rmdir ${MNT}
|
다음에서는 이 예의 일부 명령에 대해 설명합니다.
다음 명령은 설치할 패키지가 포함되어 있는 서버에 디렉토리를 마운트합니다.
mount -f nfs sherlock:/export/package ${MNT}
|
다음 명령은 임시 패키지 관리 파일인 admin을 만들어 pkgadd(1M) 명령이 패키지를 설치할 때 확인을 수행하거나 질문을 하지 않도록 합니다. 패키지를 추가할 때 임시 패키지 관리 파일을 사용하여 자동 설치를 관리합니다.
cat >${ADMIN_FILE} <<DONT_ASK
|
다음의 pkgadd 명령은 -a 옵션(패키지 관리 파일 지정)과 -R 옵션(루트 경로 지정)을 사용하여 패키지를 추가합니다.
/usr/sbin/pkgadd -a ${ADMIN_FILE} -d ${MNT} -R ${BASE} SUNWxyz
|
#!/bin/sh ######## # # USER-CONFIGURABLE OPTIONS # ######## # The location of the patches to add to the system after it's installed. # The OS rev (5.x) and the architecture (`mach`) will be added to the # root. For example, /foo on a 8 SPARC would turn into /foo/5.8/sparc LUPATCHHOST=ins3525-svr LUPATCHPATHROOT=/export/solaris/patchdb ######### # # NO USER-SERVICEABLE PARTS PAST THIS POINT # ######### BASEDIR=/a # Figure out the source and target OS versions echo Determining OS revisions... SRCREV=`uname -r` echo Source $SRCREV LUPATCHPATH=$LUPATCHPATHROOT/$SRCREV/`mach` # # Add the patches needed # echo Adding OS patches mount $LUPATCHHOST:$LUPATCHPATH /mnt >/dev/null 2>&1 if [ $? = 0 ] ; then for patch in `cat /mnt/*Recommended/patch_order` ; do (cd /mnt/*Recommended/$patch ; echo yes | patchadd -u -d -R $BASEDIR .) done cd /tmp umount /mnt else echo "No patches found" if |
과거에는 chroot(1M) 명령을 finish 스크립트 환경에서 pkgadd 및 patchadd 명령과 함께 사용해야 했습니다. 드물지만 일부 패키지나 패치는 -R 옵션과 함께 작동하지 않습니다. chroot 명령을 내리기 전에 /a 루트 경로에서 임시 /etc/mnttab 파일을 만들어야 합니다.
임시 /etc/mnttab 파일을 만들려면 다음 행을 finish 스크립트에 추가합니다.
cp /etc/mnttab /a/etc/mnttab
finish 스크립트를 사용하면 이미 시스템에 설치되어 있는 파일을 사용자 정의할 수도 있습니다. 예를 들어, 예 27–4의 finish 스크립트는 루트(/) 디렉토리의 .cshrc 파일에 정보를 추가함으로써 루트 환경을 사용자 정의합니다.
#!/bin/sh
#
# Customize root's environment
#
echo "***adding customizations in /.cshrc"
test -f a/.cshrc || {
cat >> a/.cshrc <<EOF
set history=100 savehist=200 filec ignoreeof prompt="\$user@`uname -n`> "
alias cp cp -i
alias mv mv -i
alias rm rm -i
alias ls ls -FC
alias h history
alias c clear
unset autologout
EOF
}
|
Solaris 소프트웨어가 시스템에 설치된 뒤 시스템은 재부트됩니다. 부트 프로세스가 끝나기 전에 시스템은 루트 비밀번호 입력을 요청합니다. 비밀번호를 입력하기 전에는 시스템은 부트를 마칠 수 없습니다.
set_root_pw라는 이름의 finish 스크립트는 auto_install_sample 디렉토리에 저장됩니다. finish 스크립트는 루트 비밀번호 입력 요청을 받지 않고 자동으로 설정하는 방법을 보여 줍니다. set_root_pw는 예 27–5에 표시되어 있습니다.
finish 스크립트를 사용하여 시스템의 루트 비밀번호를 설정하면 사용자는 finish 스크립트의 암호화된 비밀번호로부터 루트 비밀번호를 찾아내려고 시도할 것입니다. 루트 비밀번호를 파악하려고 시도하는 사용자에 대비한 보호 조치를 취해야 합니다.
#!/bin/sh
#
# @(#)set_root_pw 1.4 93/12/23 SMI
#
# This is an example Bourne shell script to be run after installation.
# It sets the system's root password to the entry defined in PASSWD.
# The encrypted password is obtained from an existing root password entry
# in /etc/shadow from an installed machine.
echo "setting password for root"
# set the root password
PASSWD=dKO5IBkSF42lw
#create a temporary input file
cp /a/etc/shadow /a/etc/shadow.orig
mv /a/etc/shadow /a/etc/shadow.orig
nawk -F: '{
if ( $1 == "root" )
printf"%s:%s:%s:%s:%s:%s:%s:%s:%s\n",$1,passwd,$3,$4,$5,$6,$7,$8,$9
else
printf"%s:%s:%s:%s:%s:%s:%s:%s:%s\n",$1,$2,$3,$4,$5,$6,$7,$8,$9
}' passwd="$PASSWD" /a/etc/shadow.orig > /a/etc/shadow
#remove the temporary file
rm -f /a/etc/shadow.orig
# set the flag so sysidroot won't prompt for the root password
sed -e 's/0 # root/1 # root/' ${SI_SYS_STATE} > /tmp/state.$$
mv /tmp/state.$$ ${SI_SYS_STATE}
|
다음은 이 예의 일부 명령에 대해 설명합니다.
다음 명령은 변수 PASSWD를 시스템의 /etc/shadow 파일에 있는 기존 항목에서 얻은 암호화된 루트 비밀번호로 설정합니다.
#create a temporary input file |
다음 명령은 /a/etc/shadow의 임시 입력 파일을 만듭니다.
cp /a/etc/shadow /a/etc/shadow.orig |
다음 명령은 $PASSWD를 비밀번호 필드로 사용하여 새로 설치된 시스템의 /etc/shadow 파일에서 루트 항목을 변경합니다.
if ( $1 == "root" ) |
다음 명령은 임시 /a/etc/shadow 파일을 제거합니다.
rm -f /a/etc/shadow.orig |
다음 명령은 상태 파일의 항목을 0에서 1로 변경하여 사용자에게 루트 비밀번호 입력 요청을 하지 않도록 합니다. 상태 파일은 현재 값이 /a/etc/.sysIDtool.state인 변수 SI_SYS_STATE를 사용하여 액세스합니다. 스크립트 문제를 방지하려면 값이 변경되는 경우 항상 $SI_SYS_STATE를 사용하여 이 파일을 참조하십시오. 여기에 보이는 sed 명령은 0 뒤와 1 뒤에 탭 문자가 포함되어 있습니다.
sed -e 's/0 # root/1 # root/' ${SI_SYS_STATE} > /tmp/state.$$
|
finish 스크립트를 사용하여 Solaris 운영 환경이 설치된 뒤 추가 소프트웨어를 설치할 수 있습니다. 일부 소프트웨어 프로그램은 Solaris Web Start 프로그램에 의해 설치되며 설치 과정에서 정보 입력을 요청합니다. 자동 설치를 유지하려면 Solaris Web Start 프로그램을 -nodisplay 또는 -noconsole 옵션과 함께 실행합니다.
표 27–1 Solaris Web Start 옵션|
옵션 |
설명 |
|---|---|
|
-nodisplay |
그래픽 사용자 인터페이스 없이 설치 프로그램을 실행합니다. 설치가 -locales 옵션에 의해 수정되지 않으면 기본 제품 설치를 사용합니다. |
|
-noconsole |
대화식 텍스트 콘솔 장치 없이 설치를 수행합니다. UNIX 스크립트 사용을 위해 -nodisplay와 함께 실행할 때 유용합니다. |
자세한 내용은 installer(1M) 설명서 페이지를 참조하십시오.