기본적인 install.cfg 의 모양이며, 내부에서 호출되는 여러가지 명령들은 man sysinstall 로 확인할 수 있다.
이 놈은 사실상 패키지 설치를 자동화 시켜주는 녀석으로써, CD Image를 여러번 굽게 만드는 주범이다. (사실 여기까지의 과정으로 CD Image를 여러번 굽게 될 일이 사실 없다.) 주의 할 점은 대략 아래와 같다.
package와 packageAdd 구문을 조심한다. FreeBSD의 package는 RPM과 같이 dependancy를 가지고 있으면서도, 설치시에 packageAdd 될때는 필요로 하는 package가 자동으로 설치되지 않는 것 같다. 결국 가장 기본이 되는 package 부터 설치되도록 수동으로 조절해 줘야 하는 것이다.
참고 install.cfg에는 나와있지 않지만, 두번째로 유용하게 쓸 수 있는 구문은 command와 system 구문이다. command 구문으로 명령어를 입력해주고, system 명령으로 명령어를 실행해준다. 이때, install 과정이므로 정상적인 OS 상태와 많이 다를 수 있다. install 과정의 DEBUG 메시지는 shell의 2번쨰 페이지 (SHIFT+ALT+2 인것 같다...) 를 참조하면 된다.
일단 복잡한 문제를 제외하고, 가장 기본적인 문제부터 짚고 넘어간다. 자동으로 Install을 수행하려면 Disk 초기화부터 수행되어야 하는데, install.cfg에는 그런 동작을 자동화해주는 옵션들이 들어있다.
... ################################ # All sizes are expressed in 512 byte blocks! # # A 96MB root partition, followed by a 0.5G swap partition, followed by # a 1G /var, and a /usr using all the remaining space on the disk # sd0s1-1=ufs 196608 / sd0s1-2=swap 1048576 none sd0s1-3=ufs 2097152 /var sd0s1-4=ufs 0 /usr # Let's do it! diskLabelEditor ...
이것이 위에서 제시한 예제 상의 Disk 초기화 부분이며,
... ################################ # Now set the parameters for the partition editor on ad0. Set to use the # disk exclusively (could also be "all" to use the whole disk but # respecting the MBR or "free" to use only unallocated space for FreeBSD). disk=ad1 partition=exclusive bootManager=standard diskPartitionEditor
이것은 사용해봤던 Disk 초기화 예제이다. 용량 부분이 0로 들어간 것은 '사용 가능한 최대치'를 의미하는 것이다. 나머지는 헤딩을 통해 알아가기 바란다. (Goodluck!)
아래는 install.cfg에 command와 system 구문이 들어간 예이다.
... # set timezone command=/bin/cp /usr/share/zoneinfo/Asia/Seoul /etc/localtime system ...
sysinstall의 명령으로 timezone 세팅하는 커맨드를 찾지 못하여 command와 system 명령으로 해결을 본 대목이다. 반드시 command 명령 뒤에 system 명령이 들어와야 자동으로 실행된다. 우리가 만든 Install CD의 media는 /dist 디렉토리에 mount된다. 따라서 CD 이미지 루트에 custom 디렉토리를 만들었다면, install.cfg의 command 명령상에서 먼가 조작할때는 /dist/custom을 접근해서 해당 파일을 조작할 수 있다.
... # copy firewall script command=/bin/cp /dist/custom/rc.firewall /etc/rc.firewall system ...
사용하고자 하는 rc.firewall 스크립트를 CD 이미지 상의 custom 디렉토리에 넣어놓고, 자동으로 설치시 복사하도록 하는 예이다.
자, 시간 노가다의 세계가 펼쳐지기전에, 마지막으로 추가할 항목이 있다. package와 packageAdd 커맨드로 FreeBSD의 package를 자동으로 설치한다고 했는데, 실제로 우리와 같은 경로로 CD 이미지를 생성하게 되면 CD 이미지상의 packages 디렉토리는 비어있다. 이 디렉토리를 채우는 방법이 다른 훌륭한 방법이 있는지는 모르겠지만, 수동으로 작업한다면 이렇게 작업할 수 있다.
우리는 이미 FreeBSD 배포본 만들기 : Utility Package 만들기 단계에서 패키지를 만들었고, 이 패키지를 우리가 구을 CD 이미지상의 packages/All 디렉토리를 만들고 카피할 수 있다. 자 여기까지 했다면 일단 패키지는 모두 카피한 것이다. 다음에 해야 할 것은 Install 과정에서 패키지들의 정보를 알아볼 수 있게 Index를 만드는 일이다. Index를 만드는 것도 패키지를 만드는 것 만큼이나 쉬운데,
elenoa-freebsd# cd /usr/ports/devel/gmake/ elenoa-freebsd# make describe gmake-3.80_2|/usr/ports/devel/gmake|/usr/local|GNU version of 'make' utility|/usr/ports/devel/gmake/pkg-descr|ade@FreeBSD.org|devel||||/usr/ports/devel/gettext|/usr/ports/devel/gettext|http://www.gnu.org/software/make/make.html elenoa-freebsd#
아 이 얼마나 간단한 세상인가. 우리는 우리가 CD 이미지에 넣고 싶은 모든 패키지의 port에서 make describe를 입력해보고, 나오는 문자열을 모아서 우리의 CD 이미지 상의 packages/INDEX 파일에 붙여넣어 주면 되는 것이다. 자, 여기서 끝이면 서운하니 한가지 더. port에서 make describe 한 내용과, 실제 배포되는 FreeBSD의 인스톨 CD 상의 packages/INDEX 파일의 내용과 조금 다른것이 있다. 그러니까, 간단히 정리하자면, port에서 make describe 한 내용의 가장 뒤에 추가되어야 할 내용이 있는 것이다. pipe로 연결해서, 해당 패키지가 들어가 있는 CD의 번호가 들어가게 된다. 그러니까 끝에 |1 이 추가되면 1번 CD에 들어있는 내용, 이런식이다.
위의 내용이 선행되면, 이제 package, packageAdd 구문으로 install.cfg에서 패키지를 하나하나 콕콕 찝어서 자동으로 설치하도록 할 수 있다.