====== 디스켓 2장으로 리눅스 만들기 ====== 부팅 디스켓 두장으로 작은 리눅스를 만드는 방법을 설명하고 있다. 참고 여기서 설명하는 내용들은 http://pain.kernel.pe.kr/sgml/boot-disk/index.html 를 참고했다. ===== 들어가기 전에 ===== 몇가지 준비해야 할 것들이 있다. 준비물은 다음과 같다. - 플로피 디스켓 2장 - 미지리눅스 2.0 - busybox(busybox-0.60.3.tar.gz) 총 2 개의 디스켓 중에서 하나는 커널과 부트로더를 넣을 것이고, 나머지 하나에는 루트(/) 파일시스템을 넣을 것이다. 미지리눅스의 경우, 커널과 부트로더를 위해서 필요하다. 2.0 의 경우 총 3장으로 되어 있지만, 여기서 필요한 것은 첫장 뿐이다. 먼저 커널과 부트로더를 만들어보겠다. ===== Floppy Disk 1 (부트로더 & 커널) ===== 앞에서 준비한 미지리눅스를 마운트해서 보면, images 아래에 boot.img 파일이 있다. 그것을 복사해와서, 마운트한다. #mkdir /tmp/boot_image #mount -o loop boot.img /tmp/boot_image #cd /tmp/boot_image #ls -l total 1411 -rw-r--r-- 1 root root 710804 12월 17 17:46 initrd.img -rw-r--r-- 1 root root 406 8월 29 2001 menu.lst -rw-r--r-- 1 root root 974 8월 29 2001 menu.lst.all -rw-r--r-- 1 root root 14505 8월 3 2001 mizios.msg.gz -rw-r--r-- 1 root root 512 8월 3 2001 stage1 -rw-r--r-- 1 root root 132736 8월 3 2001 stage2 -rw-r--r-- 1 root root 570980 11월 1 2001 vmlinuz # 여기서는 menu.lst, stage1, stage2를 제외하고 모두 삭제하도록 한다. | 이름 | 설명 | | menu.lst | GRUB 부트 로더의 config 파일로 커널이미지의 위치, root 디바이스의 위치 및 커널 파라메터 값을 셋팅할 수 있다(LILO로 치자면 lilo.conf 에 해당한다) | | stage1 | GRUB에 있어 필수적인 파일이며 부트 섹터나 MBR에 꼭 들어가야 하는 파일이다. PC의 부트 섹터가 512Byte 인것처럼 stage1 역시 512Byte의 사이즈를 가진다 | | stage2 | GRUB 이미지 파일이다. GRUB에 관한 더 상세한 내용은 http://www.gnu.org/software/grub/ 참고하기 바란다 | 이제 커널이미지를 복사해줄 차례다. 플로피 디스켓 한장에 넣을 수 있는 크기여야 하기 때문에, 현재 설치되어 있는 vmlinuz 를 사용할 수는 없다. 가장 좋은 방법은 직접 커널 컴파일을 해서 용량을 줄이는 방법이다. 하지만, 여기서는 편의상 기존의 커널 이미지를 사용하도록 한다. 바로 부팅디스켓을 만들 때, 생성되는 커널 이미지를 사용할 것이다. 공 디스켓 한장을 드라이브에 넣고, #/sbin/mkbootdisk --device /dev/fd0 현재커널버전 위의 명령을 실행한다. 그리고 나서 마운트해서 보면, vmlinuz 라는 파일이 생성되었을 것이다. #cp vmlinuz /tmp/boot_image/ 이제는 부트로더를 수정할 차례다. menu.lst 파일을 다음과 같이 수정한다. timeout 10 color default title floppy-boot root (fd0) append = "devfs=mount" # 부팅시 devfs 사용을 위해 kernel /vmlinuz root=/dev/fd0 vga=0x307 # 커널이미지와 루트 디바이스의 위치및 해상도 위의 작업이 끝났으면, /tmp/boot_image을 언마운트 한다. #umount /tmp/boot_image 앞에서 만든 boot.img 파일을 실제 플로피 디스켓에 쓴다. #dd if=boot.img of=/dev/fd0 ===== Floppy Disk 2 (루트 파일시스템) ===== busybox 라고 하는 패키지를 사용해서 손쉽게(?) 루트(/) 파일시스템을 만들어 볼 것이다. 먼저 플로피 디스켓 한장 분량의 root.img 파일을 만들어보자! #dd if=/dev/zero of=root.img bs=1024 count=1440 #mke2fs -F root.img #mkdir /tmp/root_image #mount -o loop root.img /tmp/root_image 앞에서 준비한 busybox 의 압축을 풀고 컴파일을 해줄 차례다. #tar xzf busybox-0.60.3.tar.gz #cd busybox-0.60.3 컴파일을 하기전에 Makefile 에서 다음을 수정한다. DOSTATIC = true 정적 라이브러리를 사용한다는 말인데, true 로 하면 바이너리 파일의 용량이 동적 라이브러리로 했을 때보다 더 커진다. 수정했으면 컴파일하고 설치한다. #make #make PREFIX=/tmp/root_image install 아래와 같은 디렉토리를 만든다. 이 중에서 /dev, /proc, /tmp는 어떤 파일도 포함하지 않는 단지 이름뿐인 디렉토리이다. #ls -l total 6 drwxr-xr-x 2 root root 1024 6월 15 17:22 bin/ drwxr-xr-x 2 root root 1024 6월 11 19:56 dev/ drwxr-xr-x 3 root root 1024 6월 15 16:48 etc/ drwxr-xr-x 2 root root 1024 6월 11 19:56 proc/ drwxr-xr-x 2 root root 1024 6월 11 19:59 sbin/ drwxr-xr-x 2 root root 1024 6월 12 18:23 tmp/ 이것으로 끝이 아니다. 몇가지 파일들이 더 필요하다. ==== /etc ==== #ls -l total 2 -rw-r--r-- 1 root root 137 6월 11 20:00 fstab drwxr-xr-x 2 root root 1024 6월 15 17:13 init.d/ -rw-r--r-- 1 root root 0 5월 2 2001 mtab 위와 같이 만든다. 다음은 fstab 내용이며 mtab은 그냥 touch 명령으로 만들면 된다. none /proc proc defaults 0 0 none /dev/pts devpts mode=0622 0 0 tmpfs /dev/shm tmpfs defaults 0 0 /dev/fd0 / ext2 defaults 1 1 init.d 아래에는 rcS 라는 파일을 만들고 퍼미션은 실행권한을 붙여주자. busybox의 init에서 이 rcS을 실행하기 때문에 꼭 실행권한(755)이 있어야 한다. 파일의 내용은 아래와 같다. #!/bin/sh /bin/mount -a #exec /etc/rc.local # 만약 실행시킬 스크립트가 있다면 exec 로 # 그 파일을 실행할 수 있다. 권한을 부여한다. #chmod 755 rcS ==== /dev ==== 모든 /dev 파일을 복사할 필요는 없고, 몇가지 파일만 있으면 된다.(console, fd0, pts, shm, tty0, tty1, tty2, tty3, tty4) 기존의 리눅스 시스템에서 복사하면 된다. #cd /tmp/root_image #cp -dpR /dev/console . ... ... ... 이제 언마운트하자. #umount /tmp/root_image 두번째 플로피 디스크를 넣고 방금 만든 루트 이미지를 쓴다. #dd if=root.img of=/dev/fd0 ===== 테스트 하기 ===== 이제 모든 작업이 끝났다. 앞서 만든 플로피를 넣고, 부팅한다. 여기서 플로피 부팅으로 바이오스에서 설정되어 있어야 한다. 커널부팅중에 'VFS: Insert root floppy and press ENTER' 메세지가 나오면, 두번째 디스켓을 넣고 엔터키를 누른다. 무사히 쉘 프롬프트가 떳다면 성공이다. ---- {{indexmenu>:#1|skipns=/^(wiki|etc|diary|playground)$/ skipfile=/^(about|guestbook|todays)$/ }} ----