以下就是從源代碼中打造一個最小化的 Linux系統 的操作說明.它曾經是《從加電啟動到Bash提示符(From PowerUp to Bash Prompt)》的一部分.但是我將它們分離開來,以便使得它們更簡短而更為集中化.我們在此所要打造的系統是非常小的,而且並不准備作為工作
以下就是從源代碼中打造一個最小化的
Linux系統的操作說明.它曾經是《從加電啟動到Bash提示符(From PowerUp to Bash Prompt)》的一部分.但是我將它們分離開來,以便使得它們更簡短而更為集中化.我們在此所要打造的系統是非常小的,而且並不准備作為工作產品來使用.如果您想從頭開始打造一個有實際用途的系統,請參閱Gerard Beekmans所撰寫的 Linux空手道實作指南篇 (Linux From Scratch HOWTO).
_________________________________________________________________
1. 您所需要具備的條件
我們首先要安裝一個Linux發行套件比如小紅帽(RedHat)到一個分區上,然後使用它來在另一個分區上打造一個新的Linux系統.我將我們所要打造的系統稱為目標系統(target)而把我們所使用來打造新系統的系統稱為源頭系統(source).可別把這個源頭(source)系統同我們同時使用的源碼(source code)相混淆了哦.:)
因此,您得需要一台具有兩個獨立分區的機器.如果可能,請盡量使用一台沒有重要資料在裡頭的機器,以免數據受損.您可以使用一個已經存在的Linux系統作重要資料在裡頭的機器,以免數據受損.您可以使用一個已經存在的Linux系統作為源頭系統,但是我並不推薦這種方式.如果您不慎遺漏了我們打造的指令的某些參數,您有可能會意外地在這個系統上安裝了一些沒有必要的東西,有可能會導致不兼容和沖突.
舊型的PC機硬件,大部分的486機器或者更早的機型,其BIOS都有一些極其煩人的限制.它們沒有辦法讀取硬盤超過前512兆之後的空間.當然,這個對於Linux來說並不是什麼大問題,因為只要Linux能夠引導啟動了,將使用Linux自己的磁盤IO,略過BIOS的調用.但是為了能夠讓這些舊型機器能夠引導Linux,那麼Linux內核必須存放在硬盤的前512兆之前的某個位置.如果您正好有這麼個舊型機器,您得准備好一個獨立的且完全在前512兆范圍內的硬盤分區,並將其掛載為/boot.其它的分區就可以在任何位置,可以任意處理而不必擔心是在硬盤的什麼位置了.
上一次我打造這個系統時,所使用的源頭系統是小紅帽6.1(RedHat 6.1),我安裝了基本系統,附加有以下軟件包∶
* cpp (C++編譯器)
* egcs (增強型C編譯器)
* egcs-c++ (增強型C++語言編譯器)
* patch (打補丁程序)
* make (編譯批處理解釋器)
* dev86 (設備文件包) * dev86 (設備文件包)
* ncurses-devel (ncurses庫
開發包)
* glibc-devel (glibc庫開發包)
* kernel-headers(內核源碼頭文件包)
我還安裝了X Window視窗系統和Mozilla
網絡浏覽器以便更輕松地閱讀文檔,而實際上這兩個東東並不是必要的.在我竣工之時,這個源頭系統大概使用了350兆的磁盤空間(看起來是多了一些,可是我還在納悶為什麼呢).
竣工之時的目標系統占用了650兆磁盤空間,但是這個數值包含了所有的源碼以及中途打造出來的文件.如果空間比較緊湊,您應該在每個軟件包都打造完畢之後執行一下make clean來清除臨時文件.當然了,我對這個也是有點吃驚的.
最後,您的准備好我們所要用來打造系統的源碼包.這些就是我在本文所討論的軟件包.這些軟件包都可以從源碼盤裡面找到,或者從國際互聯網上找到.我會給出美國的站點和位於澳大利亞的鏡像站點的地址.
* MAKEDEV (設備生成器包)
美國站點:ftp://tsx-11.mit.edu/pub/linux/sources/sbin
另外一個美國站點:ftp://sunsite.unc.edu/pub/Linux/system/admin
* Lilo (Linux引導器包)
美國站點:ftp://lrcftp.epfl.ch/pub/linux/local/lilo/
澳大利亞: ftp://mirror.aarnet.edu.au/pub/linux/metalab/system/boot/lilo 澳大利亞: ftp://mirror.aarnet.edu.au/pub/linux/metalab/system/boot/lilo
* Linux內核包(Kernel) 使用 主頁上所列舉的鏡像站點而最好不要使用美國
站點站點
下載,因為這些站點通常是超負荷運轉的.
美國站點:ftp://ftp.kernel.org/pub/linux/kernel
澳大利亞站點: ftp://kernel.mirror.aarnet.edu.au/pub/linux/kernel/
* GNU libc庫包 其本身,以及liuxthreads線程附加庫可在以下地址下載到∶
美國站點:ftp://ftp.gnu.org/pub/gnu/glibc
澳大利亞站點:ftp://mirror.aarnet.edu.au/pub/gnu/glibc
* GNU libc附加庫包 您可能還會需要linuxthreads線程附加庫和libcrypt加密
附加庫. 如果libcrypt沒在那個站點找到,那就是因為美國出口法律限制的
原因, 那麼您就可以從這裡弄到libcrypt加密附加庫. 通常linuxthreads
線程附加庫跟libc庫是放在同一個地方的.
libcrypt加密附加庫:ftp://ftp.gwdg.de/pub/linux/glibc
* GNU ncurses
美國站點:ftp://ftp.gnu.org/gnu/ncurses
澳大利亞站點:ftp://mirror.aarnet.edu.au/pub/gnu/ncurses
* SysVinit (初始化腳本包)
美國站點:ftp://sunsite.unc.edu/pub/Linux/system/daemons/init
澳大利亞:
ftp://mirror.aarnet.edu.au/pub/linux/metalab/system/daemons/init
* GNU Bash (命令解釋器包)
美國站點:ftp://ftp.gnu.org/gnu/bash
澳大利亞站點:ftp://mirror.aarnet.edu.au/pub/gnu/bash 澳大利亞站點:ftp://mirror.aarnet.edu.au/pub/gnu/bash
* GNU sh-utils (命令解釋器工具包)
美國站點:ftp://ftp.gnu.org/gnu/sh-utils
澳大利亞站點:ftp://mirror.aarnet.edu.au/pub/gnu/sh-utils
* util-linux (Linux常用工具包) 本軟件包包含有agetty和login。
另外一個站點:ftp://ftp.win.tue.nl/pub/linux/utils/util-linux/
澳大利亞站點:ftp://mirror.aarnet.edu.au/pub/linux/metalab/system/misc
總結一下,您所需要的就是∶
* 一台具有兩個分別是400兆和700兆獨立分區的機器,或許您可能會需要少一些.
* 一個Linux發行套件(譬如一個RedHat光盤)和安裝方式(譬如一個光驅)
* 以上所列舉的源碼的tar包.
我假定您可以自己安裝源頭系統,而用不著我來幫忙.從這裡開始,我假定源頭系統已經安裝好了.
本小項目的第一個裡程碑就是使得內核啟動起來然後死翹翹,因為它沒找到init初始化程序.也就是說我們得安裝一個內核和安裝lilo.為了順利安裝lilo,我們要用上在目標系統上/dev目錄下的設備文件.lilo需要它們來實現底層必需的磁盤存取來寫入引導扇區.MAKEDEV正是用來創建這些設備文件的腳本程序(您當然可以只需要從源頭系統當中復制出來,不過這可是作弊不勞而獲哦).但是最重要的事情就是,我們需要一個文件系統來放置所有的這些東西.