B.5. 고급 옵션

B.5.1. 설치할 때 임의의 명령어 실행하기

미리 설정 도구의 매우 강력하고도 유연한 옵션은, 설치 특정 시점에 명령어와 스크립트를 실행하는 기능입니다.

# d-i 미리 설정은 원래부터 보안에 안전하지 않습니다. 설치 프로그램 중의
# 어느 부분도 버퍼 오버플로우나 그 밖의 방법으로 미리 설정 파일의 값을
# 조작하는 공격을 검사하지 않습니다. 믿을 만한 곳에 있는 미리 설정 파일만
# 사용하십시오! 설치 프로그램 안에서 어떤 쉘 명령어라도 실행할 수 있는
# 방법이 만들어져 있습니다. 위험하지만 이 방법은 매우 유용하므로,
# 다음과 같이 설치 프로그램 내에서 쉘 명령어를 실행할 수 있습니다.

# 다음 첫 번째 명령어는 미리 설정 파일을 읽어들인 직후에 가능한 빨리
# 실행합니다. 
#d-i preseed/early_command string anna-install some-udeb
# 다음 명령은 파티션 프로그램이 시작하기 직전에 실행합니다. 여기에는
# 디스크의 상태에 따라 다르게 동적으로 파티션하는 미리 설정을 사용하면
# 편리합니다. (preseed/early_command 명령이 실행하는 시점에서는
# 디스크의 상태를 알 수 없습니다.)
#d-i partman/early_command \
#       string debconf-set partman-auto/disk "$(list-devices disk | head -n1)"
# 다음 명령은 설치를 끝내기 직전에 실행합니다. 그러나 /target 디렉터리는 아직
# 사용할 수 있는 시점입니다. /target 디렉터리로 chroot해서 직접 사용할
# 수 있고 패키지를 쉽게 설치하려면 apt-install과 in-target명령을 사용할
# 수 있습니다.
#d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh

B.5.2. 미리 설정을 이용해 기본값 바꾸기

미리 설정으로 질문에 대한 기본값을 바꾸면서, 그래도 그 질문을 받도록 만들 수 있습니다. 이렇게 하려면 해당 서식에 대한 값을 설정한 다음에 seen 플래그를 false로 놓으면 됩니다.

d-i foo/bar string value
d-i foo/bar seen false

부팅 파라미터로 preseed/interactive=true라고 설정하면 모든 질문에 대해서 같은 효과를 거둘 수 있습니다. 이 기능은 미리 설정 파일을 테스트하거나 디버깅하는 데도 좋습니다.

주의할 점이, d-i 소유자는 설치 프로그램에서 사용하는 변수에만 사용해야 합니다. 대상 시스템에 설치한 패키지에 관련된 변수에 대해서는 그 패키지의 이름을 사용해야 합니다. B.2.2절. “부팅 파라미터로 미리 설정하기” 부분의 각주를 보십시오.

부팅 파라미터를 이용해 미리 설정을 하는 경우, ?= 연산자를 사용해서 해당 질문을 물어보도록 만들 수 있습니다. 예를 들어 어쩌구/저쩌구?=와 같이(아니면 소유자:어쩌구/저쩌구?=) 합니다.

디버깅 정보를 자세히 보려면 DEBCONF_DEBUG=5 부팅 파라미터를 사용하십시오. 이러면 debconf에서 각 변수의 현재 설정 및 각 패키지의 설치 스크립트의 진행 상태에 대해 더 자세히 표시합니다.

B.5.3. 미리 설정 파일을 분리해서 사용하기

미리 설정 파일에서 다른 미리 설정 파일을 포함할 수도 있습니다. 파일에 들어 있는 설정은 앞에서 읽어들인 파일에 들어 있는 설정을 덮어 씁니다. 이 방법을 이용해서, 예를 들어 파일 하나에 일반적인 네트워크 설정을 집어 넣고 세세한 설정을 다른 파일에 집어 넣는 식으로 활용이 가능합니다.

# 여러 개 파일을 공백으로 구분해서 쓸 수도 있습니다. 그러면 모든
# 파일을 읽어들입니다. 물론 포함한 파일은 그 안에 preseed/include가
# 들어 있을 수 있습니다. 주의할 점으로, 파일 이름이 상대 경로인 경우 그
# 파일이 포함되어 들어가는 파일이 있는 같은 디렉터리에서 찾게 됩니다.
#d-i preseed/include string x.cfg

# 설치 프로그램은 미리 설정 파일을 사용하기 전에 그 파일의 체크섬을
# 검사합니다. 현재는 md5sum만 지원하고, md5sum을 포함하는 파일과 같은
# 순서로 쓰십시오.
#d-i preseed/include/checksum string 5da499872becccfeda2c4872f9171c3d

# 좀 더 유연하게 하려면, 다음과 같이 하면 미리 설정 파일의 이름을
# 출력하는 쉘 명령어를 출력하고, 그 파일을 포함합니다.
#d-i preseed/include_command \
#      string if [ "`hostname`" = bob ]; then echo bob.cfg; fi

# 이 중에거 가장 유연한 것으로, 프로그램을 다운로드하고 이를 실행할 수 
# 있습니다. 이 프로그램은 debconf 데이터베이스를 조작하려면
# debconf-set과 같은 명령을 사용할 수 있습니다. 여러 개의 스크립트를
# 공백으로 구분해서 쓸 수도 있습니다. 파일 이름이 상대경로로 되어 있으면
# 프로그램을 실행하는 미리 설정 파일이 있는 디렉터리에서 파일을 찾습니다.
#d-i preseed/run string foo.sh

initrd 혹은 파일을 이용한 미리 설정 단계에서, 파일 안에 다시 preseed/url을 설정해서 네트워크 미리 설정을 겹쳐 넣을 수도 있습니다. 이렇게 하면 네트워크가 연결되었을 때 미리 설정을 읽어들이게 됩니다. 이와 같이 하는 경우에는 주의해야 합니다. 미리 설정을 실행하는 두 개의 별도의 단계가 있기 때문입니다. 예를 들어서 preseed/early 명령을 한 번 더 실행할 수 있고, 두 번째가 네트워크가 연결된 다음에 실행될 수 있습니다.