天天看點

建設一個自己的Linux發行版

建設一個自己的Linux發行版是每個自由開源軟體愛好者的一個夢想.這曾經是一件難度非常高的事情,能做一個Linux發行版的人也是鳳毛麟角,自己能做一個Linux發行版曾經也是極其榮耀的事情.但是,本身提倡發揮自身潛力,提倡自己親身實踐精神的自由開源世界,是不會把大家都期盼的事情故意打扮成遠離大衆的冰雪美人,他會不斷地改革自身的發展機制,讓每個人都逐漸地參與到自己的發展中間來,進而也促進自身的發展.

簡而言之,現在,做一個Linux發行版并不是困難的事情.

一 做一個Linux發行版的基礎問題.

我想,要做一個Linux發行版,你首先要考慮的問題是:

1 為什麼要一個Linux發行版?

2 是打算從無做起,還是在其他的Linux發行版的基礎上進行修改?

3 做一個自己的Linux發行版的關鍵和難點是什麼?

4 選擇哪個現有的Linux發行版開始自己的工作.

先來看第一個問題,為什麼要一個Linux發行版?

這個問題的答案很多,比較普遍的一種就是我就想做,沒有理由,一定要說理由的話,我就借用一句時髦的話:Just for Fun!,這就是很好的理由了.

然後一個重要的理由是:我需要一個滿足我自己的特殊需要的Linux發行版,比如說:我正在學習Perl程式設計,我需要一個小型的,随時跟着我的perl編譯系統,其他的東西都可以不要,那麼我需要制作一個支援USB啟動的Linux發行版,上面隻有基本系統加編輯器加Perl,我可以随身攜帶,隻要有電腦我就可以随時開始我的學習.

至于我為什麼想做一個Linux發行版,原因很簡單:我是一個老師!我覺得做一個符合教育規律,以教育相關軟體為主的Linux發行版很有必要,再具體一點,我是一個地理老師,現在的新課程标準與時俱進,要求學生學習GIS知識,無論是必修子產品還是選修子產品都有要求.我看不慣我們的地理教育者們一講到GIS教育,就言必稱ArcInfo和MapInfo,仿佛那些即便是國内很富有的學術研究機構都不舍得破費購買的軟體是随處可揀一樣.在在自由開源的軟體世界裡,有着極其豐富的3S(GIS,GPS,RS)地理軟體.就GIS軟體而言,就有幾十上百種之多,著名的如Grass QGis等,這些免費的軟體雖然在功能上比不上商業軟體,但是足以滿足以了解基本GIS基本概念為目的的一般GIS教學.而且這些軟體還有一些自己的優點和長處.再考慮到我們目前的學校電腦都是運作Window這一現實,我就想做一個自己的,以CD光牒形式啟動和運作的,以GIS軟體為主的,性能和運作速度都令人滿意的Linux發行版.

(注:類似的系統目前世界上已經有多個,包括聯合國教科文組織的FreeDUC,即含有QGis,隻不過還沒有支援中文的)

自己要做一個Linux發行版的第三個理由就是為名為利,有些人做一個發行版是為了賺錢和盈利,這并不與自由軟體以及GPL版權發生沖突,RedHat近來的盈利給許多的年輕人帶來了新的幻想,都期待自己也許能夠成為下一代的比爾蓋茨.另外一些人做了自己的發行版就在網絡上提供免費下載下傳,使用的人越多他就越高興,他隻收獲自己所看重的善名和對自己技術的贊譽.

總之,有很多的理由使我們需要建設一個自己的Linux發行版,尤其是工作在教育第一線的廣大教師!

2 如何開始做一個自己的Linux發行版

然後我們要解決第二個問題,我做一個Linux發行版是選擇從零做起還是在别人的Linux發行版的基礎上,加以以自己的意願而進行的修改呢?

其實,我們所說的從零開始是相對而言.你從哪個零開始呢?是從自己編寫一個OS開始?還是從自己編譯配置現有的Linux核心開始?

我想我們是不可能從真正的零開始的,那也絕對不可能是一個人所能完成的工作,我們應該在前人的工作的基礎上開始自己的工作.就制作自己的Linux發行版而言,就是這種對前人工作的繼承可以劃分為這麼兩種情況:

A 隻基于現有的Linux核心及其他源碼做自己的Linux發行版

這種情況其實就是基于LFS(Linux from Scratch)制作自己的Linux發行版.由于LFS是在利用源代碼的基礎上,從零開始建設自己的Linux發行版,是以,采用這種方法制作自己的發行版最能使制作者深入了解Linux中各種軟體之間的關系,深入了解Linux内部的一些運作機制.但這種方式耗時長,難度相對較大,适合對事情喜歡刨根問底的人士.

基于LFS制作的Linux發行版看起來都是個人玩賞的作品,聞名于大衆的作品很少.

B 基于現有的其他Linux發行版制作自己的Linux發行版

這種情況就是在現有的著名的Linux發行版中,挑選自己中意的Linux發行版再按照自己的意願進行剪裁,添加,加工,然後做成自己的Linux發行版.

這種方式簡單快速,适合于一般使用者或者急于制作出成品的使用者.現在采用這種方式制作的Linux發行版猶如恒河沙數,已經難以統計,其中著名的作品不少,是否會有一兩個成為下一代的OS霸主那也難說。

為了快速簡便地達到做一個自己的Linux發行版的目的,我們選擇在已有的Linux發行版的基礎上加以改造以建立自己的發行版的方式。那麼,我們選擇哪個發行版作為我們的起點呢?回答這個問題之前,我們先來解決第三個問題。

3 做一個自己的Linux發行版的關鍵和難點是什麼?

做一個自己的Linux發行版的關鍵和難點在哪裡呢?初入門者可能覺得難點在于如何啟動一個自己的Linux系統,其實不然。我想定制一個自己的Linux發行版的關鍵就在于解決發行版之中的各種軟體包之間的以來關系。

自由開源軟體既使用前人的源碼,也對後人開放自己的源碼,是以,自由開源軟體總是互相使用各種不同的軟體包,這一方面給軟體的開發帶來了極大的便利,另一方面也使各個軟體包的之間的關系錯綜複雜,常給軟體的內建帶來災難性的後果。比如說,你打算在你的發行版中安裝軟體A,B和C,而A的運作需要依賴包A1,A2和A3,B的運作需要依賴B1和B2,C的運作需要依賴C1,為了安裝軟體A,B,C,你就必須安裝A1,A2,A3,B1,B2,C1,安裝好了後,發現A1的運作又要使用庫A11和A12,C1的運作需要使用庫C11,等你費了九牛二虎之力找到A11,A12和C11的源碼來編譯,安裝之後,才發現A12和C11是互相沖突的!你哭吧!

是以,我認為做一個自己的Linux發行版的關鍵在于正确地解決好各個軟體包之間的依賴關系。

4 選擇哪個現有的Linux發行版開始自己的工作

那麼到底選擇哪個現有的Linux發行版開始自己的工作呢?我想這會司一個蘿蔔和青菜的問題,你可以選擇FC,你也可以選擇Slackware,但是從我上面的叙述來看,顯然我是傾向于選擇基于Debian來開發定制自己的發行版的。我認為Debian的最大長處就在于其先進的,獨特的軟體包管理方式,通過世界各地的優秀的程式員的辛勤無私的工作,很好地解決了各種自由開源軟體之間的依賴,沖突等關系,使Debian擁護可以采用一種所有作業系統中最便利的方式安裝軟體,同時也給基于Debian開發定制自己的發行版帶來了極大的便利性。

當然,也有人可能會說,FreeBSD的軟體包的管理方式也很便利和強大,為什麼不選擇FreeBSD呢?這是因為FreeBSD并不遵守GPL版權,其自己的FreeBSD許可證并不允許基于FreeBSD開發個性化的發行版,是以我們隻有望洋興歎。

現在我打算基于Debian開發定制我的發行版了,還能不能有更簡便的開發之道呢?考慮到我的實際開發需求,我隻需要開發一個用于教學用的示範系統,我最好做成一個LiveCD,即在CD光牒上運作的Linux定制系統,我打算基于Knoppix或Morphix系統來開發我的定制系統。

Knoppix是一套基于Debian開發的著名的LiveCD系統,使用了一些獨特的技術使得在它上面的再開發又比在Debian上面開發更容易,而Morphix又是基于Knoppix開發的子產品式的LiveCD,從它的名字看,Morphix的意思就是變形Linux,它是為定制個性化Linux而生的!它把定制Linux系統的簡便性又推進了一步!

但人們還是不滿足,有人還在開發remaster,開發TROM等,他們的目标在于:在一個圖形界面下,點幾下滑鼠,新的定制的發行版就産生了!這一天可能不要多久就要來到!這是令人振奮的消息還是令人恐怖的消息呢?至少我是感覺挺緊張的,我要快點寫這篇文章,趕在那種軟體産生之前完成這篇文章,否則的話,隻要點幾下滑鼠就可以造出自己的發行版,誰還來看我的文章呢?

Debian-->Knoppix-->Morphix,基于這三個發行版的定制開發越來越容易,但在我的實際運用中,基于Morphix以及更簡便的TROM工具的開發經常出錯,而基于Knoppix的開發卻很穩定,是以,我決定基于Knoppix開發一個中文版的GIS發行版。

二 具體的開發過程。

以下是我的具體開發過程,當然是在參照各位前賢的文章基礎上寫的,但根據我自己的了解,并針對新的Knoppix版本做了一些變動。文章完全是在一台Windows機器上憑記憶所寫,是以有些細節上的錯誤。

1 準備工作:

我想準備工作的第一步就是看一下你的電腦是否足夠強大!最好一G記憶體,二G交換分區,十G以上硬碟!當然256M記憶體+1G交換分區也能工作,慢一些而已。硬碟空間盡可能大,我開始的時候大手大腳地進行定制,竟然搞到8G硬碟不夠空間!當然,我下面寫的過程是小心翼翼地使用硬碟空間,及時地删除和解除安裝不用的空間,應該有3-4G硬碟空餘就可以了。

然後要安裝cloop的相關軟體。引入cloop我想是Knoppix的最大特點,我使用的是Debian系統,那麼:

#apt-get install cloop-utils

就可以了。

  再然後就是獲得最新版本的Knoppix了,目前的最新版本是3.7了,但似乎還沒有正式宣布,我們就使用3.6的版本吧,後面假設我下載下傳來的是knoppix36.iso吧。刻不刻盤不影響後面的定制工作,我就不刻盤了。

  再就是建立工作目錄,我在工作目錄中建立了一個/wen的目錄,其中又建立了old和new兩個子目錄,顯然前者是存放knoppix36.iso的原有内容,而後者将存放經過我改造後的内容。

2 開始定制改造。

  先要挂載knoppix36.iso這個滾滾盤映像檔案:

  #mount -o loop -t iso9660 /root/knoppix36.iso /mnt/cdrom

顯然我下載下傳的knoppix在root目錄下而我把它挂載在/mnt/cdrom下,後面這兩個參數都可以根據實際情況修改。

  現在你可以進入到/mnt/cdrom中去看一下knoppix中到底有些什麼東西了,有一個boot目錄,顯然這還啟動有關,以後你要修改啟動畫面等,就要去修改這裡面的東西了,我們現在暫時不理會這些。還有一個Knoppix目錄,它下面有一些檔案,其中一個KNOPPIX檔案巨大達到近700M!這個就是我們要修改的主體了!

  下面我們先把/mnt/cdrom下的所有内容拷貝到/wen/new下面,因為我們需要修改的隻有KNOPPIX這一個檔案,等下我們會删除的,但現在還有用:

  #cd /mnt/cdrom

# cp -R * /wen/new/

#umount /mnt/cdrom

你現在甚至可以删除knoppix36.iso檔案以節約硬碟空間了。

   

  下面我們要對/wen/new/KNOPPIX/KNOPPIX檔案動手術了,這個檔案巨達700M,還是使用cloop壓縮的,是以我們首先要解壓:

  #cd /wen/new/KNOPPIX/

#extract_compressed_fs KNOPPIX > tmp.iso

将解壓的結果以tmp.iso的形式放在根目錄下。注意這個解壓過程極其漫長,我一般這時候燒開水,泡友善面,慢慢吃,打掃桌面,解壓完了嗎?

  No!早着呢!出去運動一下吧,等你把方面消耗得差不多了,解壓就基本完成了,看一下根目錄,吓你一跳,tmp.iso竟然将近2G!

現在一定要删除檔案/wen/new/KNOPPIX/KNOPPIX,因為我們要對tmp.iso進行改造以生成新的KNOPPIX檔案,切記! 

再挂載tmp.iso并把所有内容拷貝到/wen/old/KNOPPIX下面,你應該相當熟悉了:

  #mount -o loop -t iso9660 /tmp.iso /mnt/cdrom

#mkdir /wen/old/KNOPPIX

  #cd /mnt/cdrom

#cp -r * /wen/old/KNOPPIX  

  #umount /mnt/cdrom  

為了節約硬碟,你現在連/tmp.iso也可以删除。

再下面就要進入具體改造工作階段了,這裡主要是使用了chroot這個指令以及Debian系統便利的apt-get的安裝、解除安裝軟體,需要注意的事情有:

  為了使用網絡,你需要在chroot環境下挂載proc,還要注意chroot環境下能夠正确解析域名。後面這個問題我是這樣解決的,再開一個console視窗,執行:

  #cp /etc/apt/sources.list /wen/old/KNOPPIX/etc/apt/sources.list

#cp /etc/resolv.conf /wen/old/KNOPPIX/etc/resolv.conf

這樣做的前提是你沒有chroot之前你的網絡是通暢的。還有一個解決方法是我先ping一下自己sources.list表中的apt源以獲得IP,直接寫入到chroot後的sources.list檔案之中以省卻DNS解析的麻煩。

#chroot /wen/old/KNOPPIX/

$ mount -t proc /proc proc

現在你就進入到舊的KNOPPIX3.6之中了,你完全可以把它當作一個普通的Debian系統來對待,使用常用的指令來改造舊的系統:

$ apt-get remove openoffice.org

$ apt-get remove kde-i18n-{es,de,fr,it,nl}

(先删除幾個我不常用的大的軟體包,上面可以節約300-400M空間。你可以使用指令dpkg-query -l檢視安裝了哪些軟體包,再根據自己的意願進行删除)

$ apt-get install grass

$ apt-get install qgis

(安裝了兩個我需要的軟體)

簡單的改造工作完成,現在再做一點清理工作就可以退出了:

$ apt-get clean

(删除剛下載下傳的軟體包,免得被包含到新的發行版中)

$ updatedb

(更新軟體資料庫)

$ update-menus

(更新菜單)

$ umount proc

(切記!)

下面就使用ctrl-d退出chroot環境,最後我們還要做兩件事情:一是将改造後的/wen/old/KNOPPIX重新壓縮為KNOPPIX檔案并寫入/wen/new/KNOPPIX,二是/wen/new/做成一個CD光牒映像檔案。這兩步都要使用makeisofs指令,系統中沒有的話要先自行安裝。這兩個指令都很長,我一般把它們寫成腳本檔案,以友善重複使用。

#mkisofs -R -U -V "www.wen.net" -P "www.wen.net" -hide-rr-moved -cache-inodes -no-bak -pad /wen/old/KNOPPIX | nice -5 create_compressed_fs - 65536 > /wen/new/KNOPPIX/KNOPPIX

注意以上要寫在一行之内,這個壓縮過程需要的時間和前面解壓的時間一樣漫長,再吃一包友善面吧!

/wen/old目錄不要删除,以後還可以在它的基礎繼續改造。

制作CD光牒映像檔案:(針對3.6版本而言, 3.3版本有所差别)

#mkisofs -pad -l -r -J -v -V "WENPPIX" -no-emul-boot -boot-load-size 4 -boot-info-table -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -hide-rr-moved -o /home/ftp/knoppix.iso /wen/new

倒數第二個參數是指新生成的iso的位置,可自己調整。執行這個指令注意執行時的目錄位置!雖然使用了絕對路徑,似乎這個指令也不能在其他目錄執行。

新的發行版就做好了,很簡單,但是要做好就難了,我們還有許多細節的工作要做:

1 修改啟動畫面等

2 修改啟動腳本

3 删除軟體包以使自己的發行版盡量小,這可是費時費神的事情。

4 自己改造的發行版通常運作比原版的慢,要進行優化。

5 如何安裝在硬碟和U盤。

.......

總之,做一個發行版,做好就難,維護就更難了。

繼續閱讀