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