미리 설정 도구의 매우 강력하고도 유연한 옵션은, 설치 특정 시점에 명령어와 스크립트를 실행하는 기능입니다.
대상 시스템의 파일 시스템을 마운트했으면, /target
아래에 그 파일 시스템이 있습니다. 설치 CD를 사용하고 마운트하면, 그 내용은 /cdrom
아래에 있습니다.
# 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
미리 설정으로 질문에 대한 기본값을 바꾸면서, 그래도 그 질문을 받도록 만들 수 있습니다. 이렇게 하려면 해당 서식에 대한 값을 설정한 다음에 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
에서 각 변수의 현재 설정 및 각 패키지의 설치 스크립트의 진행 상태에 대해 더 자세히 표시합니다.
미리 설정 파일에서 또 다른 미리 설정 파일을 포함할 수도 있습니다. 파일에 들어 있는 설정은 앞에서 읽어들인 파일에 들어 있는 설정을 덮어 씁니다. 이 방법을 이용해서, 예를 들어 파일 하나에 일반적인 네트워크 설정을 집어 넣고 세세한 설정을 다른 파일에 집어 넣는 식으로 활용이 가능합니다.
# 여러 개 파일을 공백으로 구분해서 쓸 수도 있습니다. 그러면 모든 # 파일을 읽어들입니다. 물론 포함한 파일은 그 안에 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 명령을 한 번 더 실행할 수 있고, 두 번째가 네트워크가 연결된 다음에 실행될 수 있습니다.