建設一個自己的Linux發行版__Linux

來源:互聯網
上載者:User
建設一個自己的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這一現實,我就想做一個自己的,以光碟片形式啟動和啟動並執行,以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,即在光碟片上啟動並執行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/做成一個光碟片映像檔案。這兩步都要使用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目錄不要刪除,以後還可以在它的基礎繼續改造。

製作光碟片映像檔案:(針對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 如何安裝在硬碟和隨身碟。
.......

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.