FreeBSD LiveCD

The Chinese FreeBSD Documentation Project

本文是筆者在使用 FreeBSD LiveCD 所留下的心得。



1. 前言

目前已經有不少 *BSD Based LiveCD 了,像是 BSDeviantLiveBSD.comNetBSD Live 1.6.1FreeBSD Disc 2snarlNetBoz FirewallFrenzyFreeBSD Live-FS、 不過比較好用的工具只有 FreeBSD LiveCD( sysutils/livecd)、 FreeSBIE( sysutils/freesbie) 等。


2. 使用 LiveCD

首先要安裝 sysutils/livecd,筆者測試的版本是 FreeBSD 4.9-RELEASE + livecd-1.2.4b.tar.gz。

依照如下的方式開啟 livecd.sh

# cd /usr/local/livecd
# ./livecd.sh

Figure 1. Choose your Language

選擇語言(Choose your Language) 選擇 English。

 

Figure 2. running livecd.sh folder

預設是在 /usr/local/livecd,也就是我們現在的位置,沒問題。

 

Figure 3. LiveCD's root folder

LiveCD's 根目錄,放到 /usr/live_root 底下吧。

 

Figure 4. LiveCD.iso's folder

LiveCD.iso 也放到 /usr 吧,不過記得要確認底下還有 2G 以上的剩餘空間。

 

Figure 5. installation media

目前沒這個打算,選 No。

 

Figure 6. CDR/CDRW

選擇是否有 CDR/CDRW,通常應該都有 CDR 吧。

 

Figure 7. CDR/CDRW device

平常都在 /dev/acd0c

 

Figure 8. main menu

主畫面,從第一個依序執行到最後一個吧。

 

Figure 9. Create folders

建立基本的資料夾。

 

Figure 10. Install binary files

Install binary files 會安裝 FreeBSD 運作的基本檔案,在之前版本的 livecd, 與目前版本的 freesbie 都需要以 make world 的方式來安裝, 不過這種雖然可以安裝 -STABLE 的版本,不過花太多時間在編譯上面了, 筆者比較喜歡目前採用光碟安裝的方式。

Please insert FreeBSD Install Disk 1 in your CDROM drive
Press enter to continue or ^C to abort!

如果有光碟機,就將第一片放入光碟機,如果沒有的話可以:

# vnconfig -c vn0 4.9-i386-disc1.iso
# mount -t cd9660 /dev/vn0 /cdrom

可能會有 cd9660: /dev/acd0c: Input/output error 的錯誤,可以不用管。

 

Figure 11. Create kernel (buildkernel)

選擇 Create kernel(buildkernel),他會將 GENERIC 附加上一些東西後進行編譯。 不用擔心他會更動到原系統的檔案,因為他是在 /usr/live_root 底下編譯的。 他主要是加一行 options ROOTDEVNAME="cd9660:acd0" 來讓 LiveCD 可以正確的從光碟讀取到整個系統。

 

Figure 12. Change files (patch's)

一些啟動 LiveCD 的 rc 檔修改。

 

接下來是 Install packages on LiveCD (Customize) 的部份,我還是習慣自己加東西。

# chroot /usr/live_root
# setenv PACKAGEROOT ftp://ftp.tw.freebsd.org
# pkg_add -r package-name

 

Figure 13. Create ISO (mkisofs)

然後就可以 Create ISO (mkisofs) 了。

I will remove /work/live_root/usr/src before generate LiveCD.iso.
This operation will go to reduce the final size of the ISO in 142 Mb!
Do you agree ? Press enter to continue or ^C to abort!

 

Figure 13. root login

最後就可以用 vmware 掛上來測試囉。

 

Figure 14. filesystem

看一下用光碟開機的系統。

 

WWW: FreeBSD LiveCD


3. 使用 FreeSBIE

首先要安裝 sysutils/freesbie,筆者測試的版本是 FreeBSD 5.3-RELEASE + freesbie cvs repository。

從 freesbie cvs repository 取出最新的檔案:

touch ~/.cvspass
cvs -d :pserver:anonymous@cvs.freesbie.org:/cvs login
cvs -z3 -d :pserver:anonymous@cvs.freesbie.org:/cvs co -P freesbie

目前的 Live CD 大多利用 sysutils/cloop-utils 或是 mkuzip(8) 即時解壓縮的技術來將龐大的系統放入一張光碟內, 這樣子可以讓可以使用的空間增加到 1.3G 左右的容量。 cloop 是 read-only compressed filesystem, 不過目前只有用 mdconfig 可以使用 cloop 的功能,也就是 4-STABLE 無法使用 FreeSBIE。

Figure 15. freesbie filesystem

所有的秘密都在 freesbie cvs repository 中,如果有興趣可以好好研究內含的檔案。

執行 FreeSBIE 套件內的 ./freesbie,並且按照步驟就可以建立自己的 LiveCD

不過由於筆者是懶人,於是研究了在 FreeSBIE 光碟內增加新的套件的方式, 目前 FreeSBIE 的系統主要分為 /boot/mfsroot、var.cloop、usr.cloop、x11r6.cloop、 openoffice.cloop 等,依照正常的做法應該是將 FreeSBIE 安裝到硬碟後, 再利用 freesbie 套件製作新的 LiveCD。不過我只想加幾個中文套件來使用, 因此我採取的方式是增加幾個 .cloop,而將檔案都放入 .cloop 後使用。

我利用 VMware 虛擬一個 FreeBSD 磁碟,以 FreeSBIE 開機後, 用 BSD Installer 將光碟安裝到磁碟內。如果你有辦法在其他機器上製作 FreeSBIE 所要新增的套件就可以不用安裝到磁碟內。注意在選擇 /usr 容量的時候, 最少必須準備 1G 以上的空間。

cloop-utils 和 cdrtools 是必須的,如果沒有的話必須安裝。

pkg_add -r cloop-utils
pkg_add -r cdrtools

將光碟的內容拷貝一份出來,當作是修改的藍圖。

cp -Rp /FreeSBIE ${FREESBIEBASEDIR}
cd ${FREESBIEBASEDIR}
# rehandle rescue
rm rescue/*
ln bin/* sbin/* rescue
# install truetype fonts
/usr/local/bin/mkisofs -lrJL /usr/X11R6/lib/X11/fonts/TrueType | /usr/local/bin/create_compressed_fs - 65536 > $FREESBIEBASEDIR/cloop/tryetype.cloop
cp truetype.cloop ${FREESBIEBASEDIR}/cloop
# add truetype.cloop to freesbie_1st
vi ${FREESBIEBASEDIR}/etc/rc.d/freesbie_1st
# 放在 /.root 建立之後
MD_LOCAL=`mdconfig -a -f /FreeSBIE/cloop/truetype.cloop`
/FreeSBIE/bin/sleep 1
mkdir -p /root/.font
mount_cd9660 /dev/$MD_LOCAL.uzip /root/.font >/dev/null 2>& 1
# add freetype module to XF86Config
vi ${FREESBIEBASEDIR}/scripts/cardDetect/XF86Config.orig
Module "freetype"
# modify locale
vi ${FREESBIEBASEDIR}/root/.tcshrc
setenv LANG zh_TW.Big5
setenv LANG zh_TW.Big5
# remake mfsroot, freesbie_1st, .tcshrc 都是 mfsroot 的一部分
gunzip /boot/mfsroot.gz
mdconfig -a -t vnode /boot/mfsroot
mkdir -p /mnt/mfsroot
mount /dev/md0 /mnt/mfsroot
cp ${FREESBIEBASEDIR}/root/.tcshrc /mnt/mfsroot/root
cp ${FREESBIEBASEDIR}/etc/rc.d/freesbie_1st /mnt/mfsroot/etc/rc.d
umount /mnt/mfsroot
rmdir /mnt/mfsroot
mdconfig -d -u /dev/md0
gzip -f9 /boot/mfsroot
# mkisofs
cd ${FREESBIEBASEDIR}
mkisofs -b boot/cdboot -no-emul-boot -c boot/boot.catalog -R -J -V FreeSBIE -o $PATHISO .

FreeSBIE 在 1.2 版之後改用 mkuzip -s 65536 -o gcin.uzip gcin/ 建立 .uzip 以取代 .cloop 的做法.

WWW: FreeSBIE - Free System Burned In Economy

WWW: Geom ugz


4. 一切自己來

pre setenv:

# setenv CHROOTDIR /usr/live_root
# mkdir -p $CHROOTDIR
# setenv KERNELDIR $CHROOTDIR/usr/src/sys/i386/conf

Install binary files:

# vnconfig -c vn0 4.9-i386-disc1.iso
# mount /dev/vn0 /cdrom
# /bin/cat /cdrom/bin/bin.?? | /usr/bin/tar --unlink -xvpzf - -C $CHROOTDIR
# /bin/cat /cdrom/crypto/crypto.?? | /usr/bin/tar --unlink -xvpzf - -C $CHROOTDIR
# /bin/cat /cdrom/manpages/manpages.?? | /usr/bin/tar --unlink -xvpzf - -C $CHROOTDIR
# /bin/cat /cdrom/src/ssys.?? | /usr/bin/tar --unlink -xvpzf - -C $CHROOTDIR/usr/src/

Create kernel (buildkernel):

# cd $KERNELDIR
# cp GENERIC LIVECD
# echo 'options ROOTDEVNAME="cd9660:acd0"' >> LIVECD
# config LIVECD
# cd $CHROOTDIR/usr/src/sys/compile/LIVECD
# make depend all install DESTDIR=$CHROOTDIR
# rm -rf $CHROOTDIR/usr/src

Change files (patch's):

# chroot $CHROOTDIR
# tzsetup /usr/share/zoneinfo/Asia/Taipei
# cp -p /etc/resolv.conf $CHROOTDIR/etc

# echo 'hostname="statue"' > /etc/rc.conf
# echo 'moused_enable="YES"' >> /etc/rc.conf
# echo 'usbd_enable="YES"' >> /etc/rc.conf
# touch /etc/fstab
# vi /etc/rc
if [ -r /etc/rc.live ]; then
echo -n 'Initial LiveCD:'
sh /etc/rc.live
echo '.'
fi
# vi /etc/rc.live
echo "Creating /dev /etc /root /var /tmp under MFS..."
/sbin/mount_mfs -s 1024 -c 11 -b 4096 -i 512 -o noatime swap /dev 2>&1
tar -xzpf /mfs/dev.tgz -C /
/sbin/mount_mfs -s 4096 -c 20 -o noatime swap /etc 2>&1
tar -xzpf /mfs/etc.tgz -C /
/sbin/mount_mfs -s 32768 -c 20 -o noatime swap /root 2>&1
tar -xzpf /mfs/root.tgz -C /
/sbin/mount_mfs -s 4096 -c 20 -o noatime swap /var 2>&1
tar -xzpf /mfs/var.tgz -C /
/sbin/mount_mfs -s 32768 -c 20 -o noatime swap /tmp 2>&1

Install package on LiveCD (Customize):

# chroot $CHROOTDIR
# setenv PACKAGEROOT ftp://ftp.tw.freebsd.org
# pkg_add -r XFree86
# pkg_add -r zh-xcin
# sed -i.bak -e 's,24,16,g' -e 's,"cj","chewing",g' /usr/X11R6/etc/xcinrc
# rm /usr/X11R6/etc/xcinrc.bak
# echo "setenv XMODIFIERS @im=xcin" >> /root/.cshrc
# echo "exec xcin2.5 &" >> /root/.xinitrc
# pkg_add -r zh-auto-tw-l10n
# cat /usr/local/share/skel/zh_TW.Big5/dot.cshrc >> /root/.cshrc
# cat /usr/local/share/skel/zh_TW.Big5/dot.Xdefaults >> /root/.Xdefaults
# cat /usr/local/share/skel/zh_TW.Big5/dot.gtkrc >> /root/.gtkrc
# pkg_add -r zh-arphicttf
# pkg_add -r icewm
# echo "exec icewm" >> /root/.xinitrc
# pkg_add -r rxvt-devel
# pkg_add -r mplayer
# pkg_add -r win32-codecs
# mkdir -p .mplayer
# ln -s /usr/local/share/fonts/TrueType/bsmi00lp.ttf /root/.mplayer/subfont.ttf
# echo "subcp = cp950" >> .mplayer/config
# pkg_add -r xmms
# mkdir -p .xmms
# echo "playlist_font=-adobe-helvetica-bold-r-*-*-10-*,-*-medium-r-*-10-*" >> .xmms/config
# echo "use_fontsets=TRUE" >> .xmms/config
# echo "mainwin_use_xfont=TRUE" >> .xmms/config
# echo "mainwin_font=-adobe-helvetica-medium-r-*-*-8-*,-*-medium-r-*-8-*" >> .xmms/config
# pkg_add -r gaim
# pkg_add -r dict
# echo 'dict dict -h 140.138.2.235' >> .cshrc
# echo 'setenv PAGER "/usr/bin/less -r"' >> .cshrc
# pkg_add -r mozilla-firebird
# rm -rf /var/tmp/*

Create ISO (mkisofs):

# chroot $CHROOTDIR
# mkdir -p mfs
# tar cvzfp mfs/etc.tgz etc
# tar cvzfp mfs/dev.tgz dev
# tar cvzfp mfs/root.tgz root
# tar cvzfp mfs/var.tgz var
# exit
# cd $CHROOTDIT
# /usr/local/bin/mkisofs -b boot/cdboot -no-emul-boot -c boot/boot.catalog
-r -J -h -V LiveCD -o /usr/LiveCD.iso .

The Layout of /usr/src

The complete source code to FreeBSD is available from our public CVS repository. The source code is normally installed in /usr/src which contains the following subdirectories:

Directory Description
bin/ Source for files in /bin
contrib/ Source for files from contributed software.
crypto/ Cryptographical sources
etc/ Source for files in /etc
games/ Source for files in /usr/games
gnu/ Utilities covered by the GNU Public License
include/ Source for files in /usr/include
kerberosIV/ Source for Kerberos version IV
kerberos5/ Source for Kerberos version 5
lib/ Source for files in /usr/lib
libexec/ Source for files in /usr/libexec
release/ Files required to produce a FreeBSD release
sbin/ Source for files in /sbin
secure/ FreeSec sources
share/ Source for files in /usr/share
sys/ Kernel source files
tools/ Tools used for maintenance and testing of FreeBSD
usr.bin/ Source for files in /usr/bin
usr.sbin/ Source for files in /usr/sbin


arrow
arrow
    全站熱搜

    Bluelove1968 發表在 痞客邦 留言(1) 人氣()