1,Debian 的ISO鏡像
從Debian官方網站或其鏡像站點的FTP服務器上取得Debian的安裝程序盤(businesscard.iso,大約幾十M)和網絡安裝盤(也就是基本系統安裝盤netinst.iso,一百多M)的ISO鏡像,分別將其解壓到(好像是用tar命令,具體記不清了)不同目錄中(如 /home/installer和/home/base)
2,配置網絡
在一部機器上安裝Debian基本系統--用netinst.iso,配置好網絡。配置方法因聯網方式不同而不同,這裏我們給出最常用的ADSL配置方法:安裝系統時拔掉網線,安裝程序提示自動配置網絡失敗,確定後選暫不配置網絡,也可以連着網安裝時自動配置網絡成功後選返回再選暫不配置。安裝配置好並進入系統後以root用户身份運行pppoeconf命令,按提示操作,結束後用pon dsl-provider 命令加載驅動程序模塊並撥號上網,poff命令可斷開與網絡的連接。
3,獲得deb包。
聯網並配置基本系統的源(Debian獨特的軟件包管理機制,提供軟件包池的服務器叫做源,其實是一個../pool目錄)並下載需要的包。聯網後運行 apt-setup命令並按提示操作設置源,apt-get install 命令從源下載並安裝軟件包,加-d參數是隻下載不安裝,這裏我們列舉一些必要的apt和dpkg命令
apt是對dpkg前端的封裝,能自動滿足依賴關係。Debian的apt先進的包管理機制也是我們選它的憑據之一。但Debian非常追求穩定致使軟件版本不是最新,我們也不追求新花樣,況且新的軟件要經過一段時間beta才能投入生產。注意在這裏往往是試驗很多次的地方,需要重裝好多次基本系統,因此建議用一張可引導軟盤或光盤運行tar命令來備份整個系統。因為要試驗很多次才能確定我們真正需要的包,建議用CVS(或RCS)管理我們每次下載的包(CVS不僅能管理文本文件,如源代碼,還能管理二進制文件)為了達到所見即所得的效果還可以直接安裝下載的包而不加-d參數。這裏暫沒有給出CVS命令及參數,請具體查詢CVS使用手冊。但我們都知道對源碼文件管理的命令通過添加參數-KB便可實現對二進制文件的管理。
cvs 命令格式如下:
cvs [ global_options ] command [ command_options ] [ command_args ]
我們篩選的deb包現列如下:
桌面環境 gnome-desktop-envioroment;
控制枱下的中文環境 zhcon;
編譯器 automake,autorun,m4,binutils,buildessential,debhelper,cvs,rcs,make、gcc、g++,subversion;
xserver和字體 xwindown-system-core、xfonts-100dpi、xfonts-75dpi、xlibs;
中文環境 zh-autoconvert、xfonts-intl-chinese,常用字體以下有介紹;
圖片相關 gimp;
郵件 evolution;
文檔處理 gedit;
APT前端 synaptic;
瀏覽器 mozilla-psm、mozilla-firefox、mozilla-firefox-gnome- support、mozilla-firefox- locale-zh-cn;
多媒體 tome;
選Gnome桌面環境是因為它結構更好,更穩定,穩重樸實,效率更高,各大廠商都支持它。我們選擇各軟件的原因是經過多方的比較,可以説他們是各方面的佼佼者。通過使用很容易發現他們均功能強大,各方面支持良好。
4,中文化。
Debian支持中文不是很好,因此我們要自己支持,除了安裝ttf-arphic-bkai00mp、ttf-arphic-bsmi00lp、 ttf-arphic-gkai00mp、ttf-arphic-gbsn00lp幾個字體包以外還要安裝並設置通用輸入法平台SCIM,安裝SCIM需要至少安裝scim、scim-chinese等幾個包,配置它要在/etc/X11/下寫一配置文件。如果你想加入非官方的字體,比如你從方正買的字體,我建議打成deb包安裝,當然bin也行,只是安裝程序多寫一些罷了。以上我們的deb包準備全了,別忘了給他們備個份。在本次安裝盤的定製過程中,我們採用了較簡單的方法完成了中文環境的設置--均通過對base-config的修改來一次實現(就是base-config那個包的源碼裏有予配製文件,改一下,編譯了替換tar出來的網絡安裝盤裏那個)。
5,修改基本系統。
把我們第一步解壓到/home/base下的基本系統進行刪減(Debian的基本系統仍然是可修改的。注意:別動udeb包,那是安裝程序組件!)將精選後的deb包放到某一目錄下,如/home/basesys。這要憑經驗進行,弄錯了會造成系統不穩定,因此這一步是可選的。完成這一步後我們所需的 deb包已準備齊了。
6,建立軟件池。
從/var/cache/apt/archives/和/home/basesys (基本系統的)下拷出我們的包放在同一目錄下,如/home/debs-src。並把我們自己的包(包括自己編譯,下載非官方的....)一併放入。使用 apt-move命令將/home/debs-src/下的deb包move到另一目錄如/home/debs-dst/下。接着運行腳本1(參看附錄 1),將/home/debs-dst/下的deb包全部移到/home/base/pool/下。
7,獲得重載文件。
下載/debian/indices/overrides..*.gz到/home/base/pool目錄的同級目錄下的indices(/home/deb/indices),解壓縮overrides文件,並保有原壓縮文件。
8,生成Packages.gz 和 Release :
建腳本apt.conf、customcd-di.conf、customcd.conf且均存放在custom中
在含有pool 和 dists文件的目錄下運行以下命令:
apt-ftparchive -c custom/apt.conf generate custom/customcd-di.conf
apt-ftparchive -c custom/apt.conf release dists/sarge >dists/sarge/Release
apt-ftparchive -c custom/apt.conf generate custom/customcd.conf
腳本apt.conf、customcd-di.conf、customcd.conf請參看附錄1。
9,md5校驗:
cd /home/deb/
mv md5sum.txt md5sum.old
grep -v -e " f1.txt$" md5sum.old >md5sum.txt
md5sum isolinux/f1.txt >> md5sum.txt
10,生成iso:
cd /home/base/
mkisofs -T -J -R -no-emul-boot -boot-info-table -b isolinux/isolinux.bin -c boot.cat -o debian.iso /home/base/
11,自己修改的其他的deb包過程:tasksel,base-config:
Deb包的製作方法,請參看附錄3。
Tasksel:
download tasksel_**.tar.gz( 注意版本),解壓!我們要求在系統安裝過程中只需我們選擇“中文桌面”安裝程序就可自動安裝所有包。進入tasks,修改文件:desktop(修改後的 desktop文件參看附錄4)。由於我們只希望桌面環境是GNOME,所以還要修改文件chinese-s、chinese-s-desktop,去掉其中的KDE部分。
打包:
dpkg-buildpackage -rfakeroot;
base-config:
download base-config_**.tar.gz( 注意版本),解壓後我們可看一下其中的目錄:主要目錄有debian、lib,我們可任選其中的文件完成我們的工作如:postinst、finish等。
這裏我們只是為滿足需求,所以並沒有按照官方的做法依次進行。比如修改debian什麼的,我們只選擇了base-config最後運行部分:finish文件,並在其中加入了以下代碼:
#apt-get install fonts
apt-get install ttf-arphic-bkai00mp
apt-get install ttf-arphic-bsmi00lp
#90im-scim
echo -e "export LANG=zh_CN" "\nexport XMODIFIERS=@im=SCIM" "\nexport GTK_IM_MODULE=scim" "\nscim -d" >/etc/X11/Xsession.d/90im-scim
通過以上修改中文環境就可在系統運行時配製好了。
打包:
dpkg-buildpackage -rfakeroot;
不要忘了替換!
12,尾聲。
我們想開發出的是嵌入式操作系統,而現在我們只完成了編譯環境的設置。路還很長,我們做的還遠遠不夠,許多工作在等我們,我們將不懈地努力。Linux世界是自由的世界,任何想圓夢的人都可在這裏找到圓夢之路。謹以此文獻給那些想圓夢的人,希望她能給你們帶來一些幫助。
附錄0:
參考資料:
Debian APT HOWTO
Debian GNU/Linux FAQ
DebianInstallerBuild
cdd
Hacking the debian-installer ISO image
《Red Hat Linux 安全與優化》
Debian 的官方網站資料
附錄1
腳本1
#!/bin/bash
function print_usage {
echo
echo "copy-new-debs-to-pool [--move] [--keep-old] dir-to-copy add-to-dir"
echo
echo "paths must be absolute"
echo "and must point to the directory in which the pool subdirectory resides"
echo "The pool directory must have main contrib and non-free subdirectories"
echo
}
if [ "$1" = "--move" ] ; then
MOVE=1
if [ "$2" = "--keep-old" ] ; then
KEEP=1
else
KEEP=0
fi
else
MOVE=0
if [ "$1" = "--keep-old" ] ; then
KEEP=1
else
KEEP=0
fi
fi
if [ -z "$1" ]; then
print_usage
exit
fi
if [ -z "$2" ]; then
print_usage
exit
fi
if [ $MOVE -eq 1 -a -z "$3" ]; then
print_usage
exit
else
if [ $KEEP -eq 1 -a -z "$3" ]; then
print_usage
exit
fi
fi
if [ $MOVE -eq 1 -a $KEEP -eq 1 -a -z "$4" ]; then
print_usage
exit
fi
if [ $MOVE -eq 0 -a $KEEP -eq 0 ]; then
RC1DIR=$1
RC2DIR=$2
else
if [ $MOVE -eq 1 -a $KEEP -eq 1 ]; then
RC1DIR=$3
RC2DIR=$4
else
RC1DIR=$2
RC2DIR=$3
fi
fi
echo "Copying from $RC1DIR to $RC2DIR"
TMPFILE=`tempfile`
cd $RC1DIR
find pool -type f | sort >$TMPFILE
rc1base=$RC1DIR
rc2base=$RC2DIR
cd -
for rc1file in `cat $TMPFILE`; do
pkgfullname=`basename $rc1file`
pkgname=`echo $pkgfullname | cut -f1 -d_`
rc1ver=`echo $pkgfullname | cut -f2 -d_`
pooldir=`dirname $rc1file`
pkgend=`echo $pkgfullname | cut -f3 -d_`
rc2file=`ls $rc2base/$pooldir/$pkgname\_*\_$pkgend 2>/dev/null`
if [ "$rc2file" ]; then
rc2maxver="!!!!!!!!!!!!!!!!!"
rc2maxfile="!!!!!!!!!!!!!!!!"
for rc2match in $rc2file; do
rc2pkgfullname=`basename $rc2match`
rc2ver=`echo $rc2pkgfullname | cut -f2 -d_`
if [ "$rc2ver" ">" "$rc2maxver" ];
then rc2maxver=$rc2ver
rc2maxfile=$rc2match
fi
done
rc2file=$rc2maxfile
if [ $rc1ver '>' $rc2maxver ] ; then
echo "Copying $rc1file newer than $rc2file"
if [ $MOVE -eq 1 ] ; then
mv -f $rc1base/$rc1file `dirname $rc2base/$rc1file`
if [ $KEEP -eq 1 ]; then
echo "Not removing obsolete $rc2file"
else
echo "Removing obsolete $rc2file"
rm -f $rc2base/$rc2file
fi
else
cp $rc1base/$rc1file `dirname $rc2base/$rc1file`
if [ $KEEP -eq 1 ]; then
echo "Not removing obsolete $rc2file"
else
rm -f $rc2base/$rc2file
fi
fi
continue
fi
else
echo "Copying $pkgname not in $RC2DIR"
install -d $RC2DIR/`dirname $rc1file`
if [ $MOVE -eq 1 ]; then
mv -f $RC1DIR/$rc1file `dirname $RC2DIR/$rc1file`
else
cp $RC1DIR/$rc1file `dirname $RC2DIR/$rc1file`
fi
fi
done
rm -f $TMPFILE
popd
apt.conf:
APT {
FTPArchive {
Release {
Origin "debian-cd";
Label "yoursarge";
Suite "testing";
Version "0.1";
Codename "sarge";
Architectures "i386";
Components "main contrib";
Description "Your Sarge CD Set";
};
};
};
customcd-di.conf:
Dir {
ArchiveDir "/home/cdrom";
OverrideDir "indices";
CacheDir "/tmp";
};
TreeDefault {
Directory "pool/";
};
BinDirectory "pool/main" {
Packages "dists/sarge/main/debian-installer/binary-i386/Packages";
BinOverride "override.sarge.main";
ExtraOverride "override.sarge.extra.main";
};
Default {
Packages {
Extensions ".udeb";
Compress ". gzip";
};
Contents {
Compress "gzip";
};
};
customcd.conf:
Dir {
ArchiveDir "/home/cdrom";
OverrideDir "indices";
CacheDir "/tmp";
};
TreeDefault {
Directory "pool/";
};
BinDirectory "pool/main" {
Packages "dists/sarge/main/binary-i386/Packages";
BinOverride "override.sarge.main";
ExtraOverride "override.sarge.extra.main";
};
BinDirectory "pool/contrib" {
Packages "dists/sarge/contrib/binary-i386/Packages";
BinOverride "override.sarge.contrib";
ExtraOverride "override.sarge.extra.contrib";
};
BinDirectory "pool/non-free" {
Packages "dists/sarge/non-free/binary-i386/Packages";
BinOverride "override.sarge.non-free";
ExtraOverride "override.sarge.extra.non-free";
};
Default {
Packages {
Extensions ".deb";
Compress ". gzip";
};
Contents {
Compress "gzip";
};
};
腳本apt.conf:
APT {
FTPArchive {
Release {
Origin "debian-cd";
Label "yoursarge";
Suite "testing";
Version "0.1";
Codename "sarge";
Architectures "i386";
Components "main contrib";
Description "Your Sarge CD Set";
};
};
};
腳本customcd-di.conf:
Dir {
ArchiveDir "/debian";
OverrideDir "indices";
CacheDir "/tmp";
};
TreeDefault {
Directory "pool/";
};
BinDirectory "pool/main" {
Packages "dists/sarge/main/debian-installer/binary-i386/Packages";
BinOverride "override.sarge.main";
ExtraOverride "override.sarge.extra.main";
};
Default {
Packages {
Extensions ".udeb";
Compress ". gzip";
};
Contents {
Compress "gzip";
};
};
腳本customcd.conf :
Dir {
ArchiveDir "/debian";
OverrideDir "indices";
CacheDir "/tmp";
};
TreeDefault {
Directory "pool/";
};
BinDirectory "pool/main" {
Packages "dists/sarge/main/binary-i386/Packages";
BinOverride "override.sarge.main";
ExtraOverride "override.sarge.extra.main";
};
BinDirectory "pool/contrib" {
Packages "dists/sarge/contrib/binary-i386/Packages";
BinOverride "override.sarge.contrib";
ExtraOverride "override.sarge.extra.contrib";
};
BinDirectory "pool/non-free" {
Packages "dists/sarge/non-free/binary-i386/Packages";
BinOverride "override.sarge.non-free";
ExtraOverride "override.sarge.extra.non-free";
};
Default {
Packages {
Extensions ".deb";
Compress ". gzip";
};
Contents {
Compress "gzip";
};
};
附錄2
deb包的製作:
首先請準備好以下工具:
dpkg、dpkg-deb、 dpkg-dev、dh-make、debhelper、devscripts、fakeroot、lintian
建立方法1(重編譯Debian包好的source包);
apt-get source package;
cd package-version;
cd debian;
編輯 rules;
然後退回原目錄dpkg-buildpackage -rfakeroot;
建立方法2(編譯非Debian包好的source包);
獲取源碼後(tar.gz)untar;
改目錄為package-version;
cd package-version;
dh-make;
cd debian;
編輯 rules;
然後退回原目錄dpkg-buildpackage -rfakeroot;
附錄3
desktop文件:
Task: desktop
Relevance: 8
Section: user
Description: Desktop environment
This task provides basic "desktop" software, including a variety
of session managers, file managers and web browsers. It incorporates
both the GNOME and KDE desktops, and provides a display manager
which lets the user choose between the two.
Key:
x-window-system-core
# The basics of gnome, not the whole thing.
gnome-desktop-environment
# This could probably be reduced more.
Packages:
gdm
gnome
planner
totem
rhythmbox
# gnome whines if there's no xscreensaver
xscreensaver
# a screen saver does silly things without this
fortune-mod
menu
mozilla-firefox
mozilla-psm
mozilla-firefox-gnome- support
mozilla-firefox- locale-zh-cn
gftp
gaim
evolution
# mozilla printing
gimp
# openoffice is the best word processor / office suite at the moment
#openoffice.org-bin
# openoffice.org-l10n-zh-cn
# commented out for reason explained in changelog 2.11
# openoffice.org
# openoffice.org-help-en
# openoffice.org-help-zh-cn
myspell-en-us
myspell-en-gb
totem
jfbterm
zhcon
language-env
zh-autoconvert
debian-zh-faq-s
manpages-zh
doc-linux-zh-s
fortune-zh
rxvt-ml
mlterm
rxvt-unicode-ml
cpanel
scim-chinese
scim-tables-zh
chinput
stardic
x-ttcidfont-conf
xfonts-intl-chinese
xfonts-intl-chinese-big
ttf-arphic-gbsn00lp
ttf-arphic-gkai00mp
unifont
bg5ps
vim
less
subversion
gcc
debhelper
build-essential