Debian Custom CD (w/ simple-cdd)

Bookmark and Share

데비안 GNU/리눅스를 기반으로 한 소프트웨어 배포를 위하여 커스텀 설치 CD를 제작하려고 한다.

환경 및 준비

사용된 환경은 Ubuntu 8.04 Server amd64 버전이다.

다음 패키지는 CD 커스터마이즈를 간편하게 할 수 있도록 해준다고 한다. 일단 깔자.

$ sudo apt-get install simple-cdd

다음은 공간을 준비하고, 뭔가 명령을 내릴 차례. 그런데 얼마나 공간이 필요한걸까? 데비안 배포 DVD가 5장 쯤 되는데… 20GB가 넘는다는 얘기? 혹시 다 받아오나? Simple-CDD의 개념 자체가 "간단히 해보자"는 것이고 문서에도 "Partial Mirror"라고 표현하고 있으니 아마도 netinst 정도의 규모를 받아올 것으로 예상된다. 어쨌든, mirror와 생성될 image 등의 공간을 예상하고 장소를 마련.

실행해보기

1차 시도 : 무대포

일단 돌려보자. 옵션 확인한 후,

$ build-simple-cdd --dist lenny -g --locale ko_KR --debian-mirror http://ftp.daum.net/debian
<...>
mv: cannot stat `boot1/isolinux-amd64/isolinux.cfg.withgtk': No such file or directory
      FAILED: error 1
    Failed to start disc 1, error 256
make: *** [image-trees] Error 9
simple-cdd: extra files for simple-cdd
find: `/mnt/_debian/tmp//cd-build/lenny/CD1/pool': No such file or directory
ERROR: missing required packages from profile default:  less
ERROR: missing required packages from profile default:  simple-cdd-profiles
WARNING: missing optional packages from profile default:  grub popularity-contest localization-config console-tools usbutils acpi acpid eject lvm2 mdadm cryptsetup reiserfsprogs jfsutils xfsprogs type-handling debootstrap busybox
vios@henry:/mnt/_debian$

어라? 이런… 오류가 나네?

한참을 더 시도해봤지만 같은 오류가 계속된다. 그런데 왜 진작 .withgtk 라는 포인트를 놓쳤던 것일까? 이거 Ubuntu Extension 아냐? (사실, 이 점을 놓쳤던 이유는 lenny의 설치를 한 번 시도해봤던 까닭이다. lenny에는 그래픽 설치 모드가 들어와 있었다.)

2차 시도: 데비안 안에서

가상머신에 lenny를 설치하고 그 안에서 simple-cdd를 실행해봤다. (물론 한참의 시간을 보낸 후이다.) 참고로, simple-cdd는 lenny에서 추가된 패키지이다.

$ build-simple-cdd --profiles my --dist lenny -g --locale ko_KR --debian-mirror http://ftp.daum.net/debian

얼씨구! 이제야 iso 이미지를 만나볼 수 있겠군!

아차차! 생략된 과정 : 커스텀 설치자

이 작업을 하고 있는 이유가,

  1. debian 설치 CD를 기반으로 패키지를 추가하여 소프트웨어 배포를 가능하게 한다.
  2. lenny에서 제거된 bnx2 드라이버를 추가하여 이 장치가 설치된 서버에서의 설치 편의를 돕는다.

이 두 가지이다. 이 중, 두 번째 목적을 달설하기 위해서는 당연히 설치자를 수정하여 제거된 bnx2 펌웨어를 넣어줘야 한다. 다음 명령은 이 과정을 담고 있다.

sio4@debian:/mnt/scdd$ cd installer/amd64/images/cdrom/
sio4@debian:/mnt/scdd/installer/amd64/images/cdrom$ cp initrd.gz initrd.gz.orig
sio4@debian:/mnt/scdd/installer/amd64/images/cdrom$ mkdir tmp; cd tmp
sio4@debian:/mnt/scdd/installer/amd64/images/cdrom/tmp$ wget http://http.us.debian.org/debian/pool/non-free/f/firmware-nonfree/firmware-bnx2_0.16_all.deb
--2009-06-13 19:13:04--  http://http.us.debian.org/debian/pool/non-free/f/firmware-nonfree/firmware-bnx2_0.16_all.deb
Resolving http.us.debian.org... 128.30.2.36, 64.50.238.52, 64.50.236.52, ...
Connecting to http.us.debian.org|128.30.2.36|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 204502 (200K) [application/x-debian-package]
Saving to: `firmware-bnx2_0.16_all.deb'

100%[======================================>] 204,502      107K/s   in 1.9s    

2009-06-13 19:13:07 (107 KB/s) - `firmware-bnx2_0.16_all.deb' saved [204502/204502]

sio4@debian:/mnt/scdd/installer/amd64/images/cdrom/tmp$ dpkg -x firmware-bnx2_0.16_all.deb bnx2
sio4@debian:/mnt/scdd/installer/amd64/images/cdrom/tmp$ mkdir initrd; cd initrd
sio4@debian:/mnt/scdd/installer/amd64/images/cdrom/tmp/initrd$ zcat ../../initrd.gz |cpio -iv
.
var
var/dhcp
var/log
<...>
bin/mknod
bin/pidof
sys
28117 blocks
sio4@debian:/mnt/scdd/installer/amd64/images/cdrom/tmp/initrd$ cp -a ../bnx2/lib .
sio4@debian:/mnt/scdd/installer/amd64/images/cdrom/tmp/initrd$ ls lib/firmware/
bnx2-06-4.0.5.fw  bnx2-06-4.6.16.fw  bnx2-09-4.0.5.fw  bnx2-09-4.6.15.fw
sio4@debian:/mnt/scdd/installer/amd64/images/cdrom/tmp/initrd$ find . -print0 |cpio -0 -H newc -ov | gzip -c > ../../initrd.gz
.
./var
./var/dhcp
./var/log
<...>
./bin/mknod
./bin/pidof
./sys
28117 blocks
sio4@debian:/mnt/scdd/installer/amd64/images/cdrom/tmp/initrd$ cd ../..
sio4@debian:/mnt/scdd/installer/amd64/images/cdrom$ rm -rf tmp/

어쨌든, bnx2 모듈을 포함하여 설치 CD를 만드는 과정은 (별다른 문제 없이?) 완료되었다. 그런데 크기가 어째서 이렇게 작지? 파일 이름은 CD1 인데, netinst 보다도 작다!

뭔가 잘못되었거나… 모르겠다. 일단 설치 시험을 해봐야겠다.

조금 고치기

아마도 내가 잘 몰라서이겠지만, 이렇게 만들어진 CD가 뜻하는 방향으로 움직여주지 않았다. (뜻하는 방향이란, 공식 netinst + bnx2 드라이버 정도?) 문제는, 파티션 설정을 묻지 않는 것! 이렇게 황당할 수가! 무조건 자동으로 잡아놓고 쓰겠냐고 묻는다! (그리고 더 황당한 것은 그 결정을 설치 과정에서 바꿀 수 없다는 것이다.) 살펴보니, 데이안 설치자의 preseed 기능에 의하여 뭔가가 (필요 이상으로) 자동화되었던 것 같다.

그래서 다음 몇 가지를 수정하였다:

  1. isolinux/txt.cfg 수정하기
  2. isolinux/splash.png 바꾸기
  3. install.amd/gtk/initrd.gz 고치기
  4. 이미지 다시 만들기

먼저, txt.cfg이다. 이 파일은 텍스트모드 설치를 선택했을 때 사용되는 부팅 설정 파일로, 전달될 커널 파라미터를 담고 있다. 이 부분의 preseed 관련 부분을 삭제했다. (같은 경로에 gtk.cfg, adtxt.cfg, adgtk.cfg 파일 역시 같은 기능을 하는 파일이며, 이들 역시 수정해줬다.)

다음은 splash 파일의 수정이다. 제품의 임시 로고를 옆의 빈 공간에 넣었다. :-) install.amd/gtk/initrd.gz을 열어보면 usr/share/graphics/logo_debian.png 파일이 들어있는데, 이 파일이 gtk 그래픽 모드 설치시 화면 위쪽에 위치하는 그림이다. 역시 수정했다.

다음 명령을 이용하여 다시 이미지를 만들면 끝.

$ genisoimage -r -V 'Debian 5.0.1 amd64 bin-1 custom' -o debian-501-amd64-custom.iso -J -J -joliet-long -cache-inodes -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table debian-5.0.1-amd64-cd-1

그리고 테스트!

$ qemu-system-x86_64 -boot d -cdrom debian-501-amd64-custom.iso

참고 :
Debian Lenny 5.0.1 PXE initrd update

Bookmark and Share


따로 명시하지 않는 한에서 이 사이트의 모든 콘텐츠는 다음의 라이선스를 따릅니다: Creative Commons Attribution-NonCommercial 3.0 License