我們都知道linux系統(tǒng)具有無比強大的功能,但是有時候功能強大并不一定是我們想要的,有些情況下我們想要的恰恰就是一個簡潔、消耗資源少、能運行一些基本的功能和基本指令的系統(tǒng),這時候就需要我們手動來制作一個精簡的linux系統(tǒng)。
如下圖所示:我們有一臺待安裝的主機(主機B)和一臺功能完備的主機(主機A),首先把待安裝主機的硬盤拆下來放到主機A上,然后在主機A把內(nèi)核、驅(qū)動、進程、庫文件等一些系統(tǒng)必備的東西放到空的硬盤上做成系統(tǒng)硬盤,最后把做好的硬盤放到主機B上直接啟動就行了。
下面我們在虛擬機上來模擬這個實驗:
1、在宿主機上創(chuàng)建一個空的硬盤
2、打開主機A進行硬盤分區(qū)
(1)利用fdisk /dev/adb對空的硬盤進行分區(qū),分區(qū)大小分別為主分區(qū)一(作為引導分區(qū))100M、主分區(qū)二(作為根分區(qū))1G(根分區(qū)不能太小)和主分區(qū)三(作為虛擬分區(qū))500M
(2)對分區(qū)做標識
(3)分別對第一第二分區(qū)做格式化
(4)新建兩個掛載點,把新硬盤的前兩個分區(qū)分別掛載到兩個掛載點上
3、為新硬盤創(chuàng)建grub引導程序引導的第一、第二階段建
(1)創(chuàng)建grub引導程序引導的第二階段,如下所示,參數(shù)DIR既是指/mnt /dev/adb
如下圖所示在boot目錄下生成了grub菜單,進入grub目錄查看,除了grub.conf的配置文件沒有外其他說明文件和描述文件都有,這里需要說明的是配置文件需要我們手動創(chuàng)建。
(2)創(chuàng)建grub引導第一階段
首先輸入grub,然后開始創(chuàng)建
4、拷貝內(nèi)核
5、拷貝驅(qū)動
(1)在家目錄下創(chuàng)建一個臨時工作空間,在該目錄下把主機A的驅(qū)動解壓縮到該目錄
在temp目錄下有些比較重要的目錄或文件,比如bin(放置庫文件)、init(init程序調(diào)用的相關(guān)信息)。下面我們來查看一下init文件,如圖所示,我們要根據(jù)實際情況做相應的調(diào)整。
(2)把temp目錄下的文件重新打包成一個文件,并輸送到新硬盤的引導分區(qū)下
6、切換到/mnt/boot/grub目錄,創(chuàng)建grub.conf文件,文件內(nèi)容如下
7、在新硬盤的根分區(qū)下建設文件系統(tǒng)(下面建設的是必要的目錄,可根據(jù)實際情況設置哦)
8、拷貝可執(zhí)行程序和其所依賴的庫文件
(1)這里我們先拷貝init的可執(zhí)行程序和所依賴的庫
首先查看可執(zhí)行文件的具體位置,再進行拷貝
然后進行查看庫文件并拷貝
如上圖所示,凡是帶有/lib目錄的都要拷貝
(2)根據(jù)上邊的方法再分別把bash、ls、cat進行拷貝
9、配置inittab文件
(1)切換到/mnt/sysroot/etc目錄下,建個inittab文件。
(2)打開/etc/inittab文件
(3)因為不需要太多的功能,在inittab文件里我們只留下0、6級別和初始化的文件,也就是上圖中21、23和29行。
10、在/mnt/sysroot/rc.d目錄下配置初始化文件rc.sysinit
11、然后運行多次sync命令,把設置的所有參數(shù)同步到要寫入的新的磁盤上
12、在虛擬機上添加一個虛擬主機(也就是主機B),并把其中的硬盤卸下,把剛才我們建的那塊硬盤添加到這臺主機上
13、完成后暫停主機A,啟動主機B,進入系統(tǒng),我們試著去完成添加的幾個可執(zhí)行程序,ls可以完成,關(guān)機指令和重啟指令卻不能完成
(1)查看/mnt/sysroot/etc目錄下inittab文件我們就不難發(fā)現(xiàn),要進入0級別的話,依賴于名為rc的腳本,而rc的腳本又需要相應的指令,相應的指令又需要相應的庫文件的支持。我們都把這些拷過來的話實在是太麻煩了,那應該怎樣做呢,下面我們來做一下講解。
(2)如下圖所示,我們來為關(guān)機和重啟分別做sysshutdown和sysreboot兩個腳本
分別制作關(guān)機腳本和重啟腳本,并把相應的可執(zhí)行程序和庫文件拷到對應的目錄下
把腳本權(quán)限改為可執(zhí)行
(3)進行同步后,暫停主機A,主機B,再進行相應的關(guān)機、重啟命令就ok了
14、當然了,我們還想要有機器的主機名另外還要具備基本的網(wǎng)絡功能,下面就來一一實現(xiàn)
(1)關(guān)閉主機B,啟動主機A。分別把名為ping、hostonly以及ifconfig的可執(zhí)行程序和所依賴的庫文件拷到相應的目錄下
(2)編輯初始化配置文件/mnt/sysroot/etc/rc.d/rc.sysinit
如上圖所示,想要讓腳本發(fā)揮作用,還需要一個名為network的文件,我們把主機A上的文件拷到主機B的硬盤上,然后做改動
(3)同步之后暫停主機A,開啟主機B,測試一下
15、要實現(xiàn)網(wǎng)絡功能的話首先需要內(nèi)核的支持,但是內(nèi)核中只有那些最常見的驅(qū)動,而其它的都被做成內(nèi)核的模塊,當然網(wǎng)卡也不例外。
(1)查看網(wǎng)卡參數(shù)
(2)查看PCnet的模塊
(3)分別查看PCnet模塊和mii模塊的詳細信息,從中可以看到模塊的路徑
(4)在主機B的硬盤上建一個存放驅(qū)動的目錄,再把驅(qū)動拷進去
(5)加載驅(qū)動需要相應工具的支持,這里我們用insmod,在宿主機把相應的可執(zhí)行程序和庫文件拷到新硬盤相應的目錄下
(6)為了在初始化的時候引用相應的模塊,編輯初始化的文件/mnt/sysroot/etc/rc.d/rc.sysinit
(7)同步之后,暫停主機A并開啟主機B,進行驗證
至此,一個簡易linux系統(tǒng)就制作成功了,當然我們可以根據(jù)需要隨意添加應用和修改腳本