一,什麼是系統裁剪?
個人理解是在一個完整的Linux系統功能上,進行一些功能的刪除操作。適合自己的需求,夠用即可!
二,實驗環境介紹
vmware workstatin 10,CentOS6.5,64bit
三,具體操作步驟
1,用VMWare10,安裝CentOS6.5,64bit系統。(不瞭解可以google一下,^_^)
2,安裝完系統後,給系統增加一塊20G的硬盤,新建2個硬盤分區,並進進行格式化,如下圖
3,在根分區,新建目錄mylinux,及子目錄boot,sysroot,如下圖命令:
4,分別掛載硬盤分區,/dev/sdc1,/dev/sdc2,至目錄/mylinux/boot,/mylinux/sysroot,如下圖
5,安裝grub引導程序,如下圖
6,複製內核文件及初始化文件系統文件到目錄/mylinux/boot,如下圖:
7,在目錄/mylinux/boot/grub中創建文件grub.conf,並輸入如下內容,設置系統的引導路徑和啓動軟件等信息:
8,複製常用的命令,引導系統時使用,這裏要用一個shell腳本,名稱爲:cmdCopy.sh,目的是:當你需要複製命令時,相對應的命令的庫文件也會複製到相應的庫文件目錄中,腳本內容如下:
#!/bin/bash # #定義目標目錄 target=/mylinux/sysroot #判斷是否有此輸入的命令,查看此命令的絕對路徑,不包含暱稱所定義的同名命令 clearCmd() { if which $cmd &> /dev/null; then cmdPath=`which --skip-alias $cmd` else echo "No such command" return 5 fi } #複製輸入的命令到目標目錄 cmdCopy() { cmdDir=`dirname $1` [ -d ${target}${cmdDir} ] || mkdir -p ${target}${cmdDir} [ -f ${target}${1} ] || cp $1 ${target}${cmdDir} } #複製輸入的命令所依賴的庫文件到目標目錄 libCopy() { for lib in `ldd $1 | grep -o "/[^[:space:]]\{1,\}"`; do libDir=`dirname $lib` [ -d ${target}${libDir} ] || mkdir -p ${target}${libDir} [ -f ${target}${lib} ] || cp $lib ${target}${libDir} done } #判斷輸入命令的有效性 while true; do read -p "Enter a command: " cmd if [ "$cmd" == 'quit' ] ;then echo "quit" exit 0 fi clearCmd $cmd [ $? -eq 5 ] && continue #複製命令及對應的庫文件到目標目錄 cmdCopy $cmdPath libCopy $cmdPath done
注:增加此文件的可執行權限,chmow +x cmdCopy.sh
9,運行腳本./cmdCopy.sh 輸入命令,ls,pwd,ping,ifconfig,mount,umount等,輸入quit退出,如圖:
注:命令複製完成後,記得使用命令:sync同步內存數據到硬盤
至此一個基於HOST宿主機的簡易Linux系統環境啓動硬盤已經完成了一大步,接下來新建一虛擬機,硬盤使用剛纔新建的。
四,新建一虛擬機,選擇剛纔新建的硬盤。(過程不再詳細描述)如下圖所示:
注:新建虛擬機的系統類型要與宿主機的平臺一致,引用新建的硬盤時,一定要保證HOST宿主機處於掛起的狀態,爲了避免同時讀一塊硬盤,出現錯誤,數據不一致的情況。
啓動新虛擬機,如下圖所示:
到此一個微小的Linux系統製作已經成功,系統功能是極其的簡單,其中所具有的功能,也就是我們所複製的一些系統命令,比如,ls,pwd,等,但是ifconfig命令能使用麼?不能,因爲系統不具有識別網卡的能力且網卡的驅動也沒有,接下來進行網卡驅動模塊的加載與系統自動配置IP地址的功能
五,對裁減的小系統增加網卡驅動模塊與IP
順着這個思路,我們要查看一個宿主機HOST中網卡信息及配置
1,命令lsmod查找系統中加載的所有模塊,找到e1000這個模塊,如下圖所示:
2,接着再看一下此模塊所使用的模塊文件及文件位置,使用命令:modinfo e1000,如下圖所示:
3,複製上圖所示文件至
/mylinux/sysroot/lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/e1000/e1000.ko
4,接着修改grub.conf文件,讓Linux系統內核在啓動時,自動加載初始化腳本,進行裁剪系統的目錄(僞文件系統,如:proc,sys)掛載,及系統IP的自動設置等工作
修改grub.conf配置文件中init參數爲:boot=/sbin/init,發下圖所示:
在宿主機目錄/mylinux/sysroot/sbin中,新建init文件,並給予可執行權限,文件內容如下圖:
至此一個超級簡單的Linux系統已經製作成功,可以進行簡單的ping命令,設置主機IP等
六,後續
雖然看似簡單的一個系統裁剪過程,裏面卻涉及到了許許多多系統啓動過程中所涉及的內容,當然肯定也是似是而非(對於大多數計算機專業的學生),不要認爲有些事兒很簡單,自己動手做一下才知道,(後來連續做了不下十遍,這也是嚴格按照老師的思路走的),記住當你沒有把握的時候,你只有跟着老師走!後續的內容是自己查找資料自己做個LFS,加油!