만일 설치 과정 자체를 수정하려 한다면 소스 코드를 레드햇 CD-ROM이나 각 지역의 레드햇 미러사이트에서 찾을 수 있다. 소스 코드는 i386 배포본의 최상위 디렉토리의 misc/src/install 디렉토리 아래에 있다.
레드햇 부트 디스크를 살펴보면 리눅스 커널인 vmlinuz 이외에도 큰 용량의 initrd.img등의 화일이 있음을 알 수 있다.
- -rwxr-xr-x 1 root root 559 May 11 15:48 boot.msg
- -rwxr-xr-x 1 root root 668 May 11 15:48 expert.msg
- -rwxr-xr-x 1 root root 986 May 11 15:48 general.msg
- -rwxr-xr-x 1 root root 968842 May 11 15:48 initrd.img
- -rwxr-xr-x 1 root root 1120 May 11 15:48 kickit.msg
- -r-xr-xr-x 1 root root 5352 May 11 15:48 ldlinux.sys
- -rwxr-xr-x 1 root root 875 May 11 15:48 param.msg
- -rwxr-xr-x 1 root root 1239 May 11 15:48 rescue.msg
- -rwxr-xr-x 1 root root 402 May 11 15:48 syslinux.cfg
- -rwxr-xr-x 1 root root 444602 May 11 15:48 vmlinuz
예상을 했겠지만 initrd.img 화일은 화일로 저장된 ext2
화일 시스템이다.
이 화일은 높은 압축율로 압축되어 있다. 압축을 푼 다음 화일을 마운트할 수
있다.
# gzip -dc /mnt/boot/initrd.img >/tmp/initrd.ext2
# mkdir /mnt/initrd
# mount -o loop /tmp/initrd.ext2 /mnt/initrd
이 화일시스템에서 가장 중요한 부분은 부트 디스크에 포함된 커널 모듈들의 모음이다. 만일 새 버전의 드라이버를 포함시키려 한다면 모듈을 포함시켜 정적으로 컴파일된 커널로 교체하든지 아니면 모듈의 모음을 교체해야 한다. 어쩌면 공간을 마련하기 위해 다른 모듈을 삭제해야 하는 경우도 있다.
모듈들의 모음은 modules/modules.cgz라는 형태로 존재한다. 이 화일을 어떻게
다루어야 할지 의아해 할 것이다. 이 화일은 압축된 cpio
화일이다. 믿거나
말거나. 실제로 RPM은 내부적으로 cpio
를 사용한다. 이 화일은 다음과 같은
순서로 압축을 풀고 cpio
를 해제한다.
# gzip -dc /mnt/initrd/modules/modules.cgz >/tmp/modules.cpio
# cpio -itv < modules.cpio > modules.listing
# mkdir modules
# cpio -idumv <../modules.cpio
내가 알기로는 요즘 많이 사용되는 리눅스 배포본에서는 압축된 화일시스템을 곧바로 접근할 수 있는 방법이 없다. 만일 더 좋은 방법이 있다면 알려주기를 바란다.
내용을 변경하려 한다면 알아두어야 할 것이 있다.
cpio
를 사용한다. archive를 재생성하는
것은 이 문서를 읽는 여러분들의 연습을 위해 남겨두기로 한다.gzip
을 사용한다.gzip
을 이용하여 새로운 initrd.img를 다시 압축한다.
최종적으로 마침내 수정된 부트 디스크 셋업을 사용하여 새로운 부트 플로피를 만들 수 있다.
# cat boot.img >/dev/fd0