설치하지 않고 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 에 넣어 리눅스 사용이 필요할 때마다 사용할 것이다.

필요한 준비물은 다음과 같다.

  1. CD-RW 미디어
  2. 외장하드(80G) : 파티션을 하나 만들고 ext3 로 포맷했다. PC 에 연결했을 때, /dev/sdb1 으로 인식했다. CD 부팅 후 마운트를 해둔다. 마운트 포인트는 /media/sdb1 으로 자동 지정되었다.
  3. USB 메모리(4G)
  4. 윈도우 한글폰트(굴림체)

먼저 knoppix 홈페이지에서 최신버전(7.0.4) .iso 파일을 다운받아 CD 로 굽는다. CD-RW 를 사용하는 것이 더욱 효율적일 것이다.
만들어졌다면, CD 로 부팅한다.

리마스터링을 하는데 복잡한 과정을 쉽게 하기 위한 쉘스크립트가 제공되고 있다. http://knoppix.net/wiki/Knoppix_Remastering_Howto 에서 받을 수 있다.
총 4개의 파일로 구성되어 있다.

원래 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."

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

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

앞서 수정한 원본을 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' "

이제 모든 준비가 끝났다. 순서대로 설정하도록 하겠다.

앞서만든 쉘스크립트를 실행한다.

#./aaa

에러없이 수행되었다면 마운트 포인트(/media/sdb1) 아래에 knx 디렉토리가 보일 것이다. 이곳이 앞으로 작업할 경로다.

#./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 디렉토리를 만든다.

#./ccc
#./ddd

에러없이 실행되었으면, /media/sdb1/knx 아래에 .iso 파일이 보일 것이다.

어찌보면 가장 중요한 부분일지도 모르겠다. 제대로 만들어졌는지 확인하기 위해서는 직접 CD 로 구워야 했지만, 더이상 그럴 필요가 없다.

#modprobe kvm-intel
#kvm -m 512 -cdrom /media/sdb1/knx/remastered.iso

앞서 리마스터링한 iso 파일의 검증이 끝났다면, USB 메모리에 넣어보자! 나의 경우, 윈도우 프로그램(Universal-USB-Installer-1.9.0.9.exe)을 사용했다.
iso 파일을 윈도우로 복사한 뒤, 빈 USB 메모리를 꼽고 프로그램을 실행시켜 만들었다.

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' 등으로 등록해줘야 한다.

  • computer/system/크노픽스_사용하기.txt
  • Last modified: 4 years ago
  • by likewind