基於CentOS6.5 64bit 系統裁剪製作屬於自己的系統(初級小實驗)

一,什麼是系統裁剪?

   個人理解是在一個完整的Linux系統功能上,進行一些功能的刪除操作。適合自己的需求,夠用即可!

二,實驗環境介紹

       vmware workstatin 10,CentOS6.5,64bit

三,具體操作步驟

   1,用VMWare10,安裝CentOS6.5,64bit系統。(不瞭解可以google一下,^_^)

   2,安裝完系統後,給系統增加一塊20G的硬盤,新建2個硬盤分區,並進進行格式化,如下圖

wKiom1Mb1SjhFiO2AAI4Wzh7IpE591.jpg

   3,在根分區,新建目錄mylinux,及子目錄boot,sysroot,如下圖命令:

wKioL1Mb1a3AjFAkAAEWvu0fA20200.jpg

   4,分別掛載硬盤分區,/dev/sdc1,/dev/sdc2,至目錄/mylinux/boot,/mylinux/sysroot,如下圖

wKiom1Mb1sTjR3LzAADD_ufxvvk960.jpg

   5,安裝grub引導程序,如下圖

wKioL1Mb1wKz0k7OAAKzaUocv44876.jpg

   6,複製內核文件及初始化文件系統文件到目錄/mylinux/boot,如下圖:

wKioL1Mb2DvTdyP0AAFvnYC3pVA063.jpg

   7,在目錄/mylinux/boot/grub中創建文件grub.conf,並輸入如下內容,設置系統的引導路徑和啓動軟件等信息:

wKioL1Mb2WiyQ8GRAADpWXrc8Jo974.jpg

   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退出,如圖:

wKioL1Mb4CuTTZz5AAHAtzbEkEI385.jpg

   注:命令複製完成後,記得使用命令:sync同步內存數據到硬盤

   至此一個基於HOST宿主機的簡易Linux系統環境啓動硬盤已經完成了一大步,接下來新建一虛擬機,硬盤使用剛纔新建的。

四,新建一虛擬機,選擇剛纔新建的硬盤。(過程不再詳細描述)如下圖所示:

注:新建虛擬機的系統類型要與宿主機的平臺一致,引用新建的硬盤時,一定要保證HOST宿主機處於掛起的狀態,爲了避免同時讀一塊硬盤,出現錯誤,數據不一致的情況。

wKiom1Mb6EOikXffAARL5sK3dDY746.jpg

啓動新虛擬機,如下圖所示:

wKiom1Mb63TCl3lhAAFYqtHv3-I932.jpg

到此一個微小的Linux系統製作已經成功,系統功能是極其的簡單,其中所具有的功能,也就是我們所複製的一些系統命令,比如,ls,pwd,等,但是ifconfig命令能使用麼?不能,因爲系統不具有識別網卡的能力且網卡的驅動也沒有,接下來進行網卡驅動模塊的加載與系統自動配置IP地址的功能

五,對裁減的小系統增加網卡驅動模塊與IP

   順着這個思路,我們要查看一個宿主機HOST中網卡信息及配置

   1,命令lsmod查找系統中加載的所有模塊,找到e1000這個模塊,如下圖所示:

wKioL1Mb7RGDPLOLAADQ0zQUqY8520.jpg

   2,接着再看一下此模塊所使用的模塊文件及文件位置,使用命令:modinfo e1000,如下圖所示:

wKioL1Mb7aCxdJagAAKEgqbtjmk029.jpg

   3,複製上圖所示文件至

/mylinux/sysroot/lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/e1000/e1000.ko

wKiom1McX0zzPX4kAAE3dF2Qb-U171.jpg

   4,接着修改grub.conf文件,讓Linux系統內核在啓動時,自動加載初始化腳本,進行裁剪系統的目錄(僞文件系統,如:proc,sys)掛載,及系統IP的自動設置等工作

   修改grub.conf配置文件中init參數爲:boot=/sbin/init,發下圖所示:

wKiom1McYS-TfeKgAADvoi76wKk055.jpg

   在宿主機目錄/mylinux/sysroot/sbin中,新建init文件,並給予可執行權限,文件內容如下圖:

   wKiom1Mca8rRAmCVAAJxplhpl7w055.jpg

   至此一個超級簡單的Linux系統已經製作成功,可以進行簡單的ping命令,設置主機IP等

六,後續

   雖然看似簡單的一個系統裁剪過程,裏面卻涉及到了許許多多系統啓動過程中所涉及的內容,當然肯定也是似是而非(對於大多數計算機專業的學生),不要認爲有些事兒很簡單,自己動手做一下才知道,(後來連續做了不下十遍,這也是嚴格按照老師的思路走的),記住當你沒有把握的時候,你只有跟着老師走!後續的內容是自己查找資料自己做個LFS,加油!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章