설치하지 않고 CD 나 USB 같은 매체로 부팅하여 바로 사용할 수 있는 배포판인 크노픽스(Knoppix)에 대하여 설명한다.
크노픽스의 많은 기능들 중에서 시스템 복구와 리마스터링에 관한 내용만 다루도록 한다.
또한 직접 커스터마이징할 수 있는 Remastering 에서도 다룬다.
MBR 초기화하기
하나의 하드 디스크에 여러개의 운영체제를 설치하게 될 때 문제가 되는 것이 바로 MBR 영역이다. 보통 이 곳에는 부트로더가 설치되는 데, 이 MBR 영역을 크노픽스를 이용하여 초기화시킬 수 있다.
예전 같았으면, 도스 부팅 디스켓을 이용하여 다음의 명령어를 이용해서
C:\> fdisk /mbr
간단히 MBR 영역을 초기화할 수 있었다. 하지만, 요즘 플로피 디스켓을 사용하는 컴퓨터가 거의 없기 때문에 현실적인 대안은 되지 못한다.
크노픽스로 부팅하여 다음의 명령어를 이용해서 간단하게 지울수 있다.
#install-mbr -r /dev/hda // 첫번째 IDE 하드디스크의 MBR 영역을 지운다
리마스터링(Remastering) 이란?
공식으로 릴리즈된 Knoppix 를 자신의 환경에 맞게 수정하여 사용할 수 있다. 예를 들어 한글화를 한다던지, 필요없는 패키지를 지우고 필요하거나 가벼운 패키지를 사용하고 싶을 때 Remastering 할 수 있다.
여기서는 Knoppix 7.0.4 버전을 사용해서 한글화 및 필요한 패키지를 설치해보도록 하겠다. 참고로 2012년 9월 현재 최신버전이다.
이번에 만든 이미지는 최종적으로 USB 에 넣어 리눅스 사용이 필요할 때마다 사용할 것이다.
필요한 준비물은 다음과 같다.
- CD-RW 미디어
- 외장하드(80G) : 파티션을 하나 만들고 ext3 로 포맷했다. PC 에 연결했을 때, /dev/sdb1 으로 인식했다. CD 부팅 후 마운트를 해둔다. 마운트 포인트는 /media/sdb1 으로 자동 지정되었다.
- USB 메모리(4G)
- 윈도우 한글폰트(굴림체)
CD 로 굽기 및 부팅하기
먼저 knoppix 홈페이지에서 최신버전(7.0.4) .iso 파일을 다운받아 CD 로 굽는다. CD-RW 를 사용하는 것이 더욱 효율적일 것이다.
만들어졌다면, CD 로 부팅한다.
쉘 스크립트 만들기
리마스터링을 하는데 복잡한 과정을 쉽게 하기 위한 쉘스크립트가 제공되고 있다. http://knoppix.net/wiki/Knoppix_Remastering_Howto 에서 받을 수 있다.
총 4개의 파일로 구성되어 있다.
aaa
원래 CD-RW 이미지를 복사해서 외장하드에 복사하는 일을 한다.
#! /bin/sh # krhowto_1 # Path to partition you will work on PFAD="/media/sdb1" # 외장하드의 마운트 포인트 지정 START=$(date +'%s') # Disable screensaver xscreensaver-command -exit # One sub-directory will be used for the Master-CD mkdir -p $PFAD/knx/master cd $PFAD/knx # You will need a swapfile dd if=/dev/zero of=swapfile bs=1M count=500 mkswap swapfile ; swapon swapfile # Make a sub-directory for the source mkdir -p $PFAD/knx/source/KNOPPIX echo "Copy the KNOPPIX files to your source directory." echo "This will take a long time!" cp -rp /KNOPPIX/* $PFAD/knx/source/KNOPPIX # Additionally, copy the files to build the ISO later rsync -aH --exclude="KNOPPIX/KNOPPIX*" /mnt-system/* $PFAD/knx/master # gunzip inital RAM-disk mkdir -p $PFAD/knx/minirt/minirtdir cp $PFAD/knx/master/boot/isolinux/minirt.gz $PFAD/knx/minirt/ cd $PFAD/knx/minirt/ gunzip minirt.gz cd minirtdir cpio -imd --no-absolute-filenames < ../minirt # Enable screensaver su knoppix -c "xscreensaver -nosplash &" echo -e "\nFinished! Used time: $(expr $(expr $(date +'%s') - $START) / 60) min. \ and $(expr $(expr $(date +'%s') - $START) % 60) sec."
bbb
chroot 를 실행하기위해 사전 작업을 한다. 원본을 수정하기 위해서는 반드시 실행해야 한다.
#! /bin/sh # krhowto_2 # Path to partition you will work on PFAD="/media/sdb1" # To use the Internet add your nameserver into the chroot folder cp /etc/resolv.conf $PFAD/knx/source/KNOPPIX/etc/resolv.conf # Allow X-based programs in chroot [ -e $PFAD/knx/source/KNOPPIX/home/knoppix/.Xauthority ] \ && rm $PFAD/knx/source/KNOPPIX/home/knoppix/.Xauthority cp /home/knoppix/.Xauthority $PFAD/knx/source/KNOPPIX/home/knoppix chown knoppix:knoppix $PFAD/knx/source/KNOPPIX/home/knoppix/.Xauthority # prepare enviroment for chroot mount --bind /dev $PFAD/knx/source/KNOPPIX/dev mount -t proc proc $PFAD/knx/source/KNOPPIX/proc mount -t sysfs sysfs $PFAD/knx/source/KNOPPIX/sys mount --bind /dev/pts $PFAD/knx/source/KNOPPIX/dev/pts mount --bind /tmp $PFAD/knx/source/KNOPPIX/tmp
ccc
chroot 를 이용해서 원본을 수정한 후에 실행해야 한다. 기존의 마운트한 디바이스들을 언마운트한다.
#! /bin/sh # krhowto_3 # Path to partition you will work on PFAD="/media/sdb1" for i in dev/pts proc sys dev tmp; do umount $PFAD/knx/source/KNOPPIX/$i done sed -i '2,$d' $PFAD/knx/source/KNOPPIX/etc/resolv.conf
ddd
앞서 수정한 원본을 iso 파일로 만든다.
#! /bin/sh # krhowto_4 # Path to partition you will work on PFAD="/media/sdb1" START=$(date +'%s') # Disable screensaver xscreensaver-command -exit # Build new inital RAM-disk cd $PFAD/knx/minirt/minirtdir/ find . | cpio -oH newc | gzip -9 > ../minirt.gz cp $PFAD/knx/minirt/minirt.gz $PFAD/knx/master/boot/isolinux/ # Make the big compressed filesystem KNOPPIX genisoimage -input-charset ISO-8859-15 -R -l -D -V KNOPPIX_FS -quiet \ -no-split-symlink-components -no-split-symlink-fields \ -hide-rr-moved -cache-inodes $PFAD/knx/source/KNOPPIX \ | /usr/sbin/create_compressed_fs -q -B 65536 -t 8 -L 9 \ -f $PFAD/knx/isotemp - $PFAD/knx/master/KNOPPIX/KNOPPIX # Update the file hashes used by the "testcd" boot option cd $PFAD/knx/master ; find -type f -not -name \ sha1sums -not -name boot.cat -not \ -name isolinux.bin -exec sha1sum '{}' \; > KNOPPIX/sha1sums # Create new Knoppix ISO genisoimage -l -r -J -V "KNOPPIX" \ -b boot/isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 \ -boot-info-table -c boot/isolinux/boot.cat \ -o $PFAD/knx/remasterd.iso $PFAD/knx/master # Enable screensaver su knoppix -c "xscreensaver -nosplash &" echo -e "\nFinished! Used time: $(expr $(expr $(date +'%s') - $START) / 60) min. \ and $(expr $(expr $(date +'%s') - $START) % 60) sec. \ \n\nThe new ISO is stored in '$PFAD/knx/remastered.iso' "
리마스터링(Remastering) 하기
이제 모든 준비가 끝났다. 순서대로 설정하도록 하겠다.
원본으로부터 사본 만들기
앞서만든 쉘스크립트를 실행한다.
#./aaa
에러없이 수행되었다면 마운트 포인트(/media/sdb1) 아래에 knx 디렉토리가 보일 것이다. 이곳이 앞으로 작업할 경로다.
chroot 를 위한 준비운동
#./bbb #chroot /media/sdb1/knx/source/KNOPPIX
이제 본격적인 커스터마이징이 가능하다. 먼저 패키지 설치와 한글화를 위해 다음의 작업들이 필요하다.
#apt-get update #apt-get install openbox #apt-get install nabi locales
한글화 작업
로케일 설정
로케일(locales) 설정을 해야 한다.
#dpkg-reconfigure locales
실행이후, 'ko_KR.UTF-8 UTF-8' 을 선택한다.
#vi /etc/init.d/knoppix-autoconfig
'Amer' 로 검색한 후 해당 변수값을 아래와 같이 수정한다.
Country=ko, LANG=ko_KR.UTF-8, CHARSET=iso10646, TZ=Asia/Seoul
윈도우 매니져 변경
기본 윈도우 매니져는 lxde 이지만, 이보다 더 가벼운 openbox 를 사용할 것이다.
#vi /etc/X11/Xsession.d/45knoppix
'DESKTOP' 으로 검색한 후 lxde 를 openbox 로 수정한다.
#vi /etc/init.d/knoppix-startx
'start' 로 검색한 후 SESSION 의 변수 값을 openbox 로 수정한다.
폰트 설치 및 설정
먼저 윈도우에서 굴림폰트를 복사해온다.
#cp gulim.ttc /media/sdb1/knx/source/KNOPPIX/
위 경로에 복사해야 chroot 상에서 폰트파일을 볼 수 있고, 컨트롤할 수 있다.
#cd / #cp gulim.ttc /home/knoppix/ #cd /home/knoppix #mkdir .fonts #cp gulim.ttc .fonts #fc-cache -fv #xset fp rehash
위 과정에서 에러가 없었다면, 제대로 설치된 것이다. 이제 설정해보자!
#vi /home/knoppix/.config/openbox/rc.xml # 파일이 없기 때문에 다운로드 받는다
rc.xml 에서 파일을 다운받는다.
일부 gtk 프로그램에서는 폰트 적용이 안될 수 있다.
#vi /home/knoopix/.gtkrc-2.0
아래와 같이 수정한다.
gtk-font-name="Gulim 9"
응용프로그램 설정
터미널의 폰트를 수정한다.
#vi /home/knoppix/.config/lxterminal/lxterminal.conf
'fontname=GulimChe 9' 로 수정한다.
마우스 설정 및 한글 입력기 설정
#vi /etc/X11/Xsession.d/45knoppix
의 246 라인에 다음을 추가한다.
export XMODIFIERS="@im=nabi" export XIM_PROGRAM=/usr/bin/nabi export GTK_IM_MODULE=xim export QT_IM_MODULE=xim exec /usr/bin/nabi & exec /usr/bin/xmodmap -e "pointer = 3 2 1" &
그외 프로그램 설치
가벼운 브라우저인 크롬을 설치한다.
#apt-get install chromium
모든 수정이 끝났으면, 콘트롤+D 로 chroot 를 빠져나온다.
나비 테마 수정
config 파일을 다운로드 받는다.
이를 /home/knoppix/.nabi 디렉토리 아래에 복사한다. 없다면 .nabi 디렉토리를 만든다.
iso 이미지 만들기
#./ccc #./ddd
에러없이 실행되었으면, /media/sdb1/knx 아래에 .iso 파일이 보일 것이다.
검증하기
어찌보면 가장 중요한 부분일지도 모르겠다. 제대로 만들어졌는지 확인하기 위해서는 직접 CD 로 구워야 했지만, 더이상 그럴 필요가 없다.
#modprobe kvm-intel #kvm -m 512 -cdrom /media/sdb1/knx/remastered.iso
생성한 iso 파일 USB 메모리에 넣기
앞서 리마스터링한 iso 파일의 검증이 끝났다면, USB 메모리에 넣어보자! 나의 경우, 윈도우 프로그램(Universal-USB-Installer-1.9.0.9.exe)을 사용했다.
iso 파일을 윈도우로 복사한 뒤, 빈 USB 메모리를 꼽고 프로그램을 실행시켜 만들었다.
linuxrc 의 수정으로 시작 메시지 변경(서적 발췌)
linuxrc 는 부트 로더가 커널을 메모리에 적재한 다음 시스템 초기화 프로세스 init 가 실행되기 전까지 파일시스템을 설정하고 장치 사용에 필요한 커널 모듈을 올리는 스크립트이다. 이 과정을 변경하려면 linuxrc 를 수정해야 한다.
여기에서는 크노픽스 부팅화면 다음 가장 처음 나오는 “Welcome to the KNOPPIX live GNU/Linux on CD!” 메시지를 수정해보겠다. chroot 환경 내에서 할 일을 모두 끝내고 exit 한 다음 타겟 디렉토리에서 수정해야 한다. 마운트했었던 proc, dev 파일 시스템도 언마운트한다.
#exit #umount /mnt/sdb1/knoppix/source/KNOPPIX/proc/ #umount /mnt/sdb1/knoppix/source/KNOPPIX/dev
다른 스크립트는 chroot 환경 내에서 절대 경로로 접근하는 것이 가능하지만 linuxrc 는 /KNOPPIX 에 포함되지 않는 시스템 초기화 이미지 minirt.gz 에 들어있다.
만일을 위해 minirt.gz 의 사본을 마련해둔다. minirt.gz 은 압축돼 있는 이미지파일이다. gunzip 로 압축된 이미지를 풀어내야 linuxrc 에 접근할 수 있다.
#cd /mnt/sdb1/knoppix/target/boot/isolinux/ #cp minirt.gz minirt.gz.backup #gunzip minirt.gz
minirt 이미지를 마운트할 임시 디렉토리 temp 를 만들고 마운트한다. temp 디렉토리에 linuxrc 스크립트를 찾을 수 있을 것이다.
#mkdir temp #mount -o loop minirt temp
메시지가 출력되는 행을 찾아 원래 내용은 주석처리하고 복사한 내용을 수정한다. “Welcome to the KNOPPIX live GNU/Linux on CD!” 메시지의 각 글자는 linuxrc 스크립트 앞부분에 정의된 색으로 출력된다. 이를 빨간 색으로 바꾸고 내용도 바꿔보자.
#echo "${WHITE}Welcome to the ${CYAN}K${MAGENTA}N${YELLOW}O${WHITE}P${RED}P{GREEN}I${BLUE}X${WHITE} live GNU/Linux on ...
변경된 내용을 저장하고 다시 명령 프롬프트로 돌아왔으면 temp 디렉토리를 언마운트한다. minirt 디렉토리는 다시 압축하고 임시로 사용했던 temp 디렉토리는 제거한다. gzip 명령의 -9 옵션은 압축률을 높이기위한 옵션이다.
#umount temp/ #gzip -9 minirt #rm -rf temp/
부팅 관련 파일 수정(서적 발췌)
/cdrom/boot/isolinux 에는 부팅과 관련된 파일들이 들어있다. 부팅화면 이미지는 logo.16, 부팅 화면에 표시할 메시지는 boot.msg, F2 키를 눌렀을 때 보여줄 부트 옵션 정보는 F2, F3 키를 눌렀을 때 보여줄 부트 옵션 정보는 f3 이다. 먼저 부팅 화면 이미지를 바꿔보자.
역시 chroot 환경 밖에서 할 일이다. exit 한 다음 proc, dev 파일시스템을 언마운트한다.
#exit #umount /mnt/sdb1/knoppix/source/KNOPPIX/proc/ #umount /mnt/sdb1/knoppix/source/KNOPPIX/dev
부팅 화면 이미지로 사용할 640×480 크기의 이미지를 제작한다. 크노픽스에서 제공하는 이미지 편집기 김프를 이용했다. 파일 이름은 logo.ppm 로, 데이터 형식은 raw 를 선택해서 저장한다. 텍스트 환경에서 부팅화면 이미지를 보기 위해서는 색상을 16색으로 제한해야 한다.
김프 image 메뉴에서 Mode Indexed 를 선택하고 Maximum number of colors 값을 256 에서 16 으로 변경한다. 선명했던 이미지가 탁해지는 것을 느낄 수 있을 것이다.
ppmtolss16 명령을 이용해서 logo.ppm 을 크노픽스 부트 화면에 사용되는 이미지 형식인 lss16 으로 전환한다.
#ppmtolss16 < logo.ppm > logo.16
부팅화면 이미지를 isolinux 디렉토리로 복사해서 덮어쓴다.
cp logo.16 /mnt/sdb1/knoppix/target/boot/isolinux/
기본 부트 옵션은 isolinux.cfg 에서 정의한다. 매번 특정 부트 옵션을 입력해서 부팅한다면 /mnt/sdb1/knoppix/target/boot/isolinux/isolinux.cfg 에 추가해서 수고를 덜 수 있다.
가장 먼저 기본 값 linux 가 DEFAULT 항목으로 정의돼 있다. APPEND 는 부트 옵션 TIMEOUT 은 대기 시간, DISPLAY 는 먼저 보여줄 메시지 파일, F2, F3 는 추가 정보 파일을 정의한다. 필요한 부트 옵션을 APPEND 에 추가한다.
DEFAULT linux APPEND ramdisk_size=100000 init=/etc/init lang=ko apm=power-off vga=791 initrd=minirt.gz nomce loglevel=0 quiet BOOT_IMAGE=knoppix TIMEOUT 300 PROMPT 1 DISPLAY boot.msg F1 boot.msg F2 f2 F3 f3
나머지 커널모드는 모두 LABEL, KERNEL, APPEND 항목으로 정의돼 있다. 필요하다면 다음과 같이 새로운 LABEL 을 만들 수 있다. 부트 옵션은 역시 APPEND 에 정의 한다.
LABEL myboot KERNEL linux APPEND ramdisk_size=100000 init=/etc/init xmodule=vesa lang=ko apm=power-off vga=791 initrd=minirt.gz nomce loglevel=0 quiet BOOT_IMAGE=knoppix
isolinux.cfg 는 읽기 전용파일이므로 변경된 설정 내용을 저장하면 경고 메시지가 나올 것이다. vi 의 경우 'wq!' 를 입력해서 강제로 저장이 가능하다.
부팅화면 아래 나오는 메시지는 boot.msg 에 저장되어 있다. 편집기로 /mnt/sdb1/knoppix/target/boot/isolinux/boot.msg 를 열어서 수정한다.
부트 옵션 정보는 f2, f3 파일에 저장되어 있다. 이 내용을 수정하는 것도 가능하다.
사용자가 임의로 f4, f5, f6 등을 추가로 만들어 사용할 수도 있는데 이때 isolinux.cfg 에 추가항목을 'F4 f4', 'F5 f5', 'F6 f6' 등으로 등록해줘야 한다.