B.2. 미리 설정 사용하기

미리 설정 파일을 만들고 그 파일을 사용하려는 위치에 놓아야 합니다. 미리 설정 파일을 만드는 일은 이 부록의 뒤부분에서 설명합니다. 네트워크 미리 설정이나 플로피 혹은 USB 메모리에서 파일을 읽어들이는 경우 미리 설정 파일을 적당한 위치에 놓는 일도 명백합니다. CD나 DVD에 파일을 포함하려면 ISO 이미지를 다시 만들어야 합니다. 미리 설정 파일을 initrd에 포함하는 일은 이 문서의 범위를 벗어납니다. debian-installer 개발자 문서를 참고하십시오.

미리 설정 파일의 기본으로 사용할 수 있는 예제 파일이 http://www.debian.org/releases/etch/example-preseed.txt에 있습니다. 이 파일은 이 부록에 포함된 부분들을 기반으로 만들어졌습니다.

B.2.1. 미리 설정 파일 읽어들이기

initrd 미리 설정인 경우, preseed.cfg 파일이 initrd의 루트 디렉토리에 들어 있기만 하면 됩니다. 설치 프로그램에서 자동으로 이 파일이 있는 지 검사한 다음 읽어들입니다.

그 외의 미리 설정 방법의 경우 부팅할 때 어떤 파일을 읽어들일 지 설치 프로그램에 지정해야 합니다. 커널에 부팅 파라미터를 전달하면 됩니다. 부팅할 때 수동으로 넣거나 부트로더 설정 파일을 (예를 들어 syslinux.cfg) 편집해서 커널의 append 줄의 끝에 파라미터를 추가하면 됩니다.

부트로더 설정에서 미리 설정 파일을 지정하는 경우, 설정을 수정해서 부팅할 때 엔터키도 칠 필요가 없도록 만들 수 있습니다. syslinux의 경우 syslinux.cfg 파일에서 timeout을 1로 하면 됩니다.

설치 프로그램이 올바른 미리 설정 파일을 읽어들이도록 확인하려면, 파일의 체크섬을 지정할 수도 있습니다. 현재는 md5sum만 사용 가능하고, md5sum을 지정하면 읽어들인 미리 설정 파일의 체크섬이 맞지 않는 경우 그 파일을 사용하지 않습니다.

지정해야 하는 부팅 파라미터:
- 네트워크 부팅의 경우:
  preseed/url=http://host/path/to/preseed.cfg
  preseed/url/checksum=5da499872becccfeda2c4872f9171c3d

- 이미지를 다시 만든 CD로 부팅하는 경우:
  preseed/file=/cdrom/preseed.cfg
  preseed/file/checksum=5da499872becccfeda2c4872f9171c3d

- USB 미디어에서 설치하는 경우 (미리 설정 파일을 USB 메모리의 맨 위
  디렉토리에 넣으십시오)
  preseed/file=/hd-media/preseed.cfg
  preseed/file/checksum=5da499872becccfeda2c4872f9171c3d

preseed/url은 간단히 url로 줄여 쓸 수 있고 preseed/filefile로 줄여서 부팅 파라미터로 쓸 수 있습니다.

B.2.2. 부팅 파라미터로 미리 설정하기

미리설정 파일을 일부 단계에 대해서 사용할 수 없다고 하더라도, 그래도 설치를 자동화할 수 있습니다. 각각의 미리 설정할 값을 설치 프로그램이 부팅할 때 파라미터로 넘길 수 있습니다.

미리 설정 기능을 사용하려는 게 아니더라도 특정 질문에 대한 답을 지정하고 싶은 경우라면, 부팅 파라미터를 이용할 수도 있습니다. 이 안내서에는 부팅 파라미터가 유용한 몇 가지 예제가 다른 곳에 쓰여 있습니다.

debian-installer에서 사용하는 값들을 설정하려면, 이 부록에 있는 예제에 들어 있는 미리 설정 변수들에 대해 변수에/대한/경로= 형식으로 넘깁니다. 어떤 값을 설치할 시스템의 꾸러미를 설정하는 데 사용한다면, 그 변수의 소유자[19]소유자:변수에/대한/경로= 형식으로 씁니다. 소유자를 지정하지 않으면 해당 변수의 값은 설치한 시스템의 debconf 데이터베이스에는 들어가지 않으므로 해당 꾸러미의 설정에 사용하지 않게 됩니다.

부팅 파라미터에서 자주 사용하는 변수 몇개는 짧게 쓸 수 있습니다. 부록에서는 그렇게 짧게 형식이 있으면 완전한 변수명 대신에 짧은 형식을 사용합니다. 특히, preseed/url 변수는 url로 쓸 수 있고 URL도 줄여 쓰는 특별한 방법이 있습니다. 또 tasks라고 쓰면 tasksel:tasksel/first에 해당합니다.

부팅 옵션의 “--”는 특별한 의미가 있습니다. 마지막 “--” 뒤에 오는 커널 파라미터는 설치된 시스템의 부트로더 설정으로 복사되어 들어갈 수 있습니다. (설치 프로그램이 설치하는 부트로더가 지원하는 경우) 설치 프로그램은 (미리 설정 옵션과 같이) 설치 프로그램에서 인식하는 옵션만 모두 걸러냅니다.

참고

현재 리눅스 커널은 (2.6.9 이후) 최대 32개까지의 명령행 파라미터와 32개까지의 환경 파라미터만 받아들일 수 있습니다. (설치 프로그램에서 기본으로 추가하는 파라미터 포함) 그 개수가 넘어가면, 커널은 멎어 버립니다. (이상 종료합니다.) (이보다 오래된 버전의 커널에서는 최대 파라미터 개수가 더 적습니다.)

대부분의 설치에서는 vga=normal같은 기본 옵션중의 일부는 안 써도 상관없습니다. 그러면 미리 설정 옵션을 몇 개 더 쓸 수 있습니다.

참고

부팅 파라미터에서는 공백이 들어간 값을 지정할 수 없습니다. 따옴표로 묶더라도 할 수 없습니다.

B.2.3. 자동 모드

데비안 설치 프로그램의 몇몇 기능을 이용하면 부팅 프롬프트에서 간단한 명령행으로 임의의 복잡한 입맛에 맞는 자동 설치를 할 수 있습니다. 부팅 프롬프트에서 사용할 수 있는 몇몇 예제를 통해 이 기능을 설명합니다.

auto url=autoserver

이렇게 하면 DHCP 서버가 있어서 DHCP 서버에서 autoserver의 IP 주소를 받아옵니다. DHCP가 보내주는 로컬 도메인을 뒤에 붙일 수도 있습니다. 도메인이 example.com인 사이트에서 위와 같이 하고 DHCP 설정이 올바르다면, 미리 설정 파일을 http://autoserver.example.com/d-i/etch/./preseed.cfg 위치에서 가져 옵니다.

URL의 마지막 부분은 (d-i/etch/./preseed.cfg) auto-install/defaultroot에서 가져옵니다. 기본값으로 여기에는 etch 디렉토리가 들어 있습니다. 이를 이용해 앞으로의 버전에서는 그 버전에 해당되는 코드네임을 쓸 수 있고, 또 사람들이 정해진 방법을 통해 앞으로의 버전으로 업그레이드할 수 있습니다. /./ 부분은 맨 상위 디렉토리를 가리키는 것으로, 지정된 해당 경로에 (preseed/include 및 preseed/run에서 사용) 대한 상대값입니다. 이를 이용해 파일을 완전한 URL로 지정할 수도 있고, /로 시작하는 경로로 지정할 수도 있고, 마지막 미리 지정 파일이 있던 위치에 대한 상대 경로로 지정할 수도 있습니다. 이 점을 이용하면 전체 스크립트들을 완전히 새로운 위치에 옮겨도 문제가 없는 포터블한 스크립트를 구성할 수 있습니다. 예를 들어 웹서버에 있던 파일을 USB 메모리에 옮겨도 문제가 없게 됩니다. 이 예제에서 미리 지정 파일에서 preseed/run 값을 /scripts/late_command.sh라고 지정하면 http://autoserver.example.com/d-i/etch/./scripts/late_command.sh에서 파일을 가져옵니다.

로컬에 DHCP 혹은 DNS와 같은 장치가 없거나 preseed.cfg에 대한 기본값 경로를 바꾸고 싶으면, 명시적인 URL을 사용할 수도 있습니다. /./ 부분을 사용하지 않으면 경로의 첫 부분에 대한 (즉 URL에서 세번째 /) 경로가 됩니다. 다음은 로컬 네트워크에서 약간 지원이 필요한 예제입니다:

auto url=http://192.168.1.2/path/to/mypreseed.file

위와 같이 하면 다음과 같이 동작합니다:

  • URL의 프로토콜 부분을 생략하면 HTTP라고 가정합니다.

  • 호스트 이름에 점이 없으면, DHCP에서 넘겨준 도메인을 뒤에 붙입니다.

  • 호스트 이름 뒤에 /가 없으면 기본 경로를 뒤에 붙입니다.

URL을 지정하는 것 외에, debian-installer의 동작과 직접 관계없지만 미리 설정 파일의 preseed/run에서 지정한 스크립트로 넘길 사항들을 지정할 수도 있습니다. 현재 관련 예제는 auto-install/classesclasses라고 줄여 쓸 수 있습니다. 다음과 같이 사용합니다:

auto url=example.com classes=클래스_A;클래스_B

클래스는 설치하려는 시스템의 종류를 지정하거나, 지역화를 지정합니다.

이 개념을 확장하는 것도 가능하고, 확장하는 경우 auto-install 네임스페이스를 사용하는 게 보기 좋습니다. 즉 auto-install/style과 같이 스크립트에서 사용할 수 있을 것입니다. 이렇게 하는 게 좋겠다는 생각이 들면, 메일링 리스트에 알려 주십시오. 그래야 네임스페이스 충돌을 피하고, 여러분의 파라미터에 해당하는 줄임말을 추가할 수도 있을 것입니다.

auto 부팅 레이블은 아직 정의되지 않은 아키텍쳐가 있습니다. 커널 명령행에 파라미터 두 개, auto=true priority=critical이라고 추가하기만 하면 같은 효과를 거둘 수 있습니다. auto 파라미터는 auto-install/enable의 줄임말이고 미리 설정할 수 있도록 로케일 및 키보드 질문을 뒤로 늦춥니다. 또 prioritydebconf/priority의 줄임말이고 critical로 설정하면 필수 우선순위보다 낮은 우선순위의 질문들을 하지 않게 됩니다.

그 외에 DHCP를 사용할 때 설치를 자동화하면서 관심 가질만한 옵션은 다음과 같습니다: interface=auto netcfg/dhcp_timeout=60이라고 하면 처음 발견한 네트워크 인터페이스를 이용하고 DHCP 요청에 대한 응답을 좀 더 오래 기다립니다.

작은 정보

예제 스크립트와 클래스 등, 이 프레임워크를 사용하는 다양한 예제가 개발자의 웹사이트에 있습니다. 이 사이트에 있는 예제는 미리 설정을 통해 기발하고 다양한 멋진 기능들을 수행하는 예제도 있습니다.

B.2.4. 미리 설정할 때 쓸모 있는 줄임말

(자동 모드) 미리 설정을 사용할 경우 다음 줄임말이 쓸모가 많습니다.

auto auto-install/enable
classes auto-install/classes
fb debian-installer/framebuffer
locale debian-installer/locale
priority debconf/priority
파일 preseed/file
url preseed/url
interface netcfg/choose_interface
hostname    netcfg/get_hostname
domain netcfg/get_domain
protocol mirror/protocol
suite mirror/suite

B.2.5. 미리설정파일을 지정하기 위해 DHCP 서버를 사용하기

DHCP를 이용하여 설정사항을 미리 기록한 파일을 네트워크에서 내려받을 수 있도록 할 수도 있습니다. DHCP는 파일명을 인자로 받을 수 있습니다. 이 파일은 대부분 netboot를 하기 위한 파일이지만, URL인 경우이라면 network preseeding을 지원하는 설치 방식은 그 URL에서 파일을 내려받은 다음 설정파일로 사용합니다. 데비안의 dhcp3-server 꾸러미에 해당하는 ISC DHCP 버전 3 서버에서 이 방식을 사용하기 위한 dhcpd.conf 파일의 예는 아래와 같습니다.

if substring (option vendor-class-identifier, 0, 3) = "d-i" {
    filename "http://host/preseed.cfg";
}

참고로 위의 예에서 자신을 "d-i"로 식별하는 DHCP 클라이언트에만 이 파일을 한정하므로 일반 DHCP 클라이언트에는 아무런 영향을 주지 않습니다. 특정 호스트만 지원하도록 하여 네트워크 내의 시스템 전부 preseeding되는 것을 방지할 수도 있습니다.

사용할 데비안 미러 등 해당 네트워크에만 적용되는 값만 preseed(미리 설정)하게 하는 것도 DHCP preseeding을 이용하는 좋은 예입니다. 이렇게 하면 네트워크 내에 있는 시스템 적당한 미러를 자동으로 선택하면서도 설치의 다른 단계는 관리자가 직접 입력할 수 있게 됩니다. DHCP preseeding을 이용하여 데비안 설치를 완전 자동화하는 작업은 꼭 필요할 때 조심히 해야 합니다.



[19] 어떤 debconf 변수(혹은 템플리트)의 소유자는 보통 해당 debconf 템플리트가 들어 있는 꾸러미의 이름을 말합니다. 템플리트와 변수는 소유자가 여러 개일 수도 있습니다. 그래서 꾸러미의 설정까지 지워버릴 때 소유자 정보를 이용해 해당 템플리트와 변수까지 지워질지 여부가 결정됩니다.