我們都知道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系統就製作成功了,當然我們可以根據需要隨意添加應用和修改指令碼
本文出自 “xiaoxiaozhou” 部落格,請務必保留此出處http://xiaoxiaozhou.blog.51cto.com/4681537/1280158