서버패키지 CD 개발 손춘호 sunshout@paran.com 목차 1 Live CD(USB) 란?... 2 1.1 Live CD(USB) 란?... 2 2 Live CD(USB) 만들기... 3 2.1 자신만의운영체제설치하기... 3 2.2 Live CD 만들기... 3 3 Live CD(USB) 굽기... 10 3.1 CD에굽기... 10 3.2 USB에굽기... 10 3.3 참고... 10
1 Live CD(USB) 란? 1.1 Live CD(USB) 란? LiveCD(USB) 란 CD( 또는 USB) 를하드디스크로인식하여해당매체를기반으로동작하는운영체제를말한다. 즉 CD에설치된운영체제이다. 이는자신의 PC의하드디스크에설치된내용은 CD에그대로복사하였다고생각하면된다. CD는 rewrite가불가능하지만 USB는 rewrite가가능하기때문에실제하드디스크에설치된운영체제처럼사용할수있다. 이외에도 LiveCD는기존의설치 CD의설치과정을적용할수있다. 즉고스트처럼필요로하는프로그램을다설치하여하나의 LiveCD로만들고이를배포함으로써운영체제를설치하고기타응용프로그램을설치해야하는번거로움을한번의설치로대체할수있다. Live CD와 Live USB의차이는부팅매체의차이로 2장에서설명하는 Live CD제작과정을거쳐서만들어진 ISO 파일을 CD에구울것인지 USB에구울것인지에대한차이만존재한다. Live USB로동작하기위해서는 PC가 USB 부팅을지원하여야한다.
2 Live CD(USB) 만들기 2.1 자신만의운영체제설치하기 Live CD로만들고자하는우분투운영체제를설치하고필요한패키지들을하드디스크에설치한다. 이후현재동작하고있는운영체제를하나의이미지파일로만들어서 CD( 또는 USB) 로저장한다 2.2 Live CD 만들기 이제설치된운영체제를 Live CD로만드는과정을설명한다. ################################# # 1단계환경설정 ################################# 1. 환경설정 (bash 가정 ) 일반유저의권한으로실행한다. 하지만 sudo 권한을가지고있어야한다. export WORK=~/work export CD=~/cd export FORMAT=squashfs export FS_DIR=casper 2. CD 와 Work 디렉토리생성 sudo mkdir -p ${CD}/{${FS_DIR},boot/grub} ${WORK}/rootfs 3. Live CD 제작유틸리티설치 sudo apt-get update sudo apt-get install mkisofs grub squashfs-tools
################################ # 2단계 : 설치 CD 복사및생성 ################################ 1. 설치된파일시스템복사 sudo rsync -av --one-file-system --exclude=/proc/* --exclude=/dev/*\ --exclude=/sys/* --exclude=/tmp/* --exclude=/home/*\ --exclude=/lost+found / ${WORK}/rootfs * rsync 는 --exclude 옵션을이용하여복사에서배제하고싶은파일들을지정할수있다 2. 부트파일복사 sudo cp -av /boot/* ${WORK}/rootfs/boot ########################################## # 3단계 : CHROOT를이용한설치파일작업하기 # 이과정에서는 chroot를이용하여루트파일시스템을변경한다 # ########################################## 1. 필요한시스템파일을마운트 sudo mount -o bind /dev/ ${WORK}/rootfs/dev sudo mount -t proc proc ${WORK}/rootfs/proc sudo mount -t sysfs sysfs ${WORK}/rootfs/sys 2. chroot 로마운트변경 sudo chroot ${WORK}/rootfs /bin/bash * 이제루트파일시스템은변경되었다. ( 권한이루트로변경되어있고, 파일시스템들은원 복을복사한파일들임 )
chroot 환경설정 LANG= 3. 추가패키지설치 apt-get update apt-get install casper xresprobe discover1 4. Live CD 를하드디스크에설치하고싶으면 ubiquity 패키지를설치 apt-get install ubiquity ubiquity-frontend-kde 5. initramfs 업데이트 depmod -a $(uname -r) update-initramfs -u -k $(uname -r) 6. 기존설정삭제 (default 설정으로변경하기위해서 ) for i in "/etc/hosts /etc/hostname /etc/resolv.conf /etc/timezone /etc/fstab /etc/mtab /etc/shadow /etc/shadow- /etc/gshadow /etc/gshadow- /etc/gdm/gdm-cdd.conf /etc/gdm/gdm.conf-custom /etc/x11/xorg.conf /boot/grub/menu.lst /boot/grub/device.map" do rm $i done 2>/dev/null * 이는 LiveCD(USB) 가실행되는환경이달라지기때문에디폴트설정으로매핑시켜주는 것이다. 7. 다운받은패키지삭제 apt-get clean
8. 불필요한파일삭제 rm -r /tmp/* /root/* 2>/dev/null rm /boot/*.bak 2>/dev/null rm /etc/udev/rules.d/*.rules 9. User 정보삭제 for i in `cat /etc/passwd awk -F":" '{print $1}'` do uid=`cat /etc/passwd grep "^${i}:" awk -F":" '{print $3}'` [ "$uid" -gt "999" -a "$uid" -ne "65534" ] && userdel --force ${i} 2>/dev/null done 10. 불필요한파일삭제 find /var/run /var/log /var/mail /var/spool /var/lock /var/backups /var/tmp -type f -exec rm {} \; 11. 필요한파일생성 for i in dpkg.log lastlog mail.log syslog auth.log daemon.log faillog lpr.log mail.warn user.log boot debug mail.err messages wtmp bootstrap.log dmesg kern.log mail.info do touch /var/log/${i} done touch /var/log/news/news.err touch /var/log/news/news.crit touch /var/log/news/news.notice 11. Exit (chroot 에서나옴 ) exit
############################### # CD 디렉토리생성 ############################### 1. 커널관련정보복사 sudo cp -vp ${WORK}/rootfs/boot/vmlinuz-$(uname -r) ${CD}/boot/vmlinuz sudo cp -vp ${WORK}/rootfs/boot/initrd.img-$(uname -r) ${CD}/boot/initrd.gz sudo cp -vp ${WORK}/rootfs/boot/memtest86+.bin ${CD}/boot 2. Ubiquity 설치용 sudo chroot ${WORK}/rootfs dpkg-query -W --showformat='${package} ${Version}\n' sudo tee ${CD}/${FS_DIR}/filesystem.manifest sudo cp -v ${CD}/${FS_DIR}/filesystem.manifest{,-desktop} REMOVE='ubiquity casper user-setup discover1 xresprobe os-prober libdebian-installer4' for i in $REMOVE do sudo sed -i "/${i}/d" ${CD}/${FS_DIR}/filesystem.manifest-desktop done 3. 파일시스템 Umount sudo umount ${WORK}/rootfs/proc sudo umount ${WORK}/rootfs/sys sudo umount ${WORK}/rootfs/dev 4. 파일을 squashfs 로변경 sudo mksquashfs ${WORK}/rootfs ${CD}/${FS_DIR}/filesystem.${FORMAT}
5. grub 설치 sudo find /boot /usr/lib/grub/ -iname 'stage2_eltorito' -exec cp -v {} ${CD}/boot/grub \; 6. grub 설정 sudo vi ${CD}/boot/grub/menu.lst menu.lst 에적을내용 # By default, boot the first entry. default 0 # Boot automatically after 30 secs. timeout 30 color cyan/blue white/blue title initrd Start Linux in Graphical Mode /boot/vmlinuz BOOT=casper boot=casper nopersistent rw quiet splash /boot/initrd.gz title initrd Start Linux in Safe Graphical Mode /boot/vmlinuz BOOT=casper boot=casper xforcevesa rw quiet splash /boot/initrd.gz title initrd Start Linux in Text Mode /boot/vmlinuz BOOT=casper boot=casper nopersistent textonly rw quiet /boot/initrd.gz title initrd Start Presistent Live CD /boot/vmlinuz BOOT=casper boot=casper persistent rw quiet splash /boot/initrd.gz
title initrd Start Linux Graphical Mode from RAM /boot/vmlinuz BOOT=casper boot=casper toram nopersistent rw quiet splash /boot/initrd.gz title Memory Test /boot/memtest86+.bin title Boot the First Hard Disk root (hd0) chainloader +1 7. MD5 다시계산 cd $CD && find. -type f -print0 xargs -0 sudo md5sum sudo tee ${CD}/md5sum.txt 8. CD 제작 sudo mkisofs -b boot/grub/stage2_eltorito \ -no-emul-boot -boot-load-size 4 -boot-info-table \ -V "Custom Live CD" -cache-inodes -r -J -l \ -o ~/live-cd.iso $CD
3 Live CD(USB) 굽기 3.1 CD에굽기 2장에서만들어진 ISO 파일 (live-cd.iso) 을 CD에이미지굽기를하면된다. 윈도우에서는알코올과같은 ISO 파일을굽는프로그램을이용하여 CD에부팅가능한 CD로만들면된다. 3.2 USB 에굽기 CD 가아닌 USB 에저장하는방법은 UNetbootin 이란프로그램을이용하여 ISO 파일을 USB 에저장한다. 3.3 참고 원본페이지 : http://ubuntuforums.org/showthread.php?t=688872 추가참고 : http://sunshout.cafe24.com/blog/1160 자동설치쉘 : http://sunshout.cafe24.com/blog/1166