B.5. 고급 옵션

B.5.1. 설치 중에 임의의 명령어 실행하기

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

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

# 첫번째 명령어는 미리 설정 파일을 읽어들인 직후에 가능한 빨리
# 실행합니다. 
#d-i preseed/early_command string anna-install some-udeb

# 이 명령은 설치를 끝내기 직전에 실행됩니다. 그러나 /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라고 설정하면 모든 질문에 대해서 같은 효과를 거둘 수 있습니다. 이 기능은 미리 설정 파일을 테스트하거나 디버깅하는 데도 좋습니다. 부팅 파라미터를 이용해 미리 설정을 하는 경우, “?=” 연산자를 사용해서 해당 질문을 물어보도록 만들 수 있습니다. 예를 들어 foo/bar?=value와 같이 합니다. 물론 이렇게 설정해도 설치 중에 실제로 표시되는 질문에 해당하는 파라미터에만 효과가 있고 “내부” 파라미터에는 효과가 없습니다.

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 echo if [ "`hostname`" = bob ]; then echo bob.cfg; fi

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

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