Linux系統-小倒騰之Linux DIY定製裁剪(附帶簡單網絡功能)o_o(一)

   在前一篇《Linux系統基礎-管理之系統啓動過程及系統初始化學習總結 》當中已經瞭解到了系統的一些基本啓動過程和初始化過程,這篇文章是結合前面的知識而做的一個小實驗。


一、說明

1、實驗拓撲:

wKioL1Ma_xPQaBnrAAF3ZrfeoJI777.jpg

2、實驗環境:

  • 操作系統:CentOS-6.5 x86_64

  • 虛擬機版本VMware Workstation 10.0.0 build-1295980

  • HOST主機名station10.example.com    

   如上圖我們需要有一臺上面裝有CentOS 6.5-x86_64系統的的PC Server以下我簡稱爲"HOST"以及一臺沒有操作系統,沒有硬盤的PC客戶端,以下簡稱"Target",有朋友這時會問了,Target既沒有系統、也沒有硬盤那怎麼可能啓動呀?我們的實驗目的是通過一臺本身安裝有操作系統的主機上通過對當前系統或者說藉助當前系統我們裁剪出一個微型的Linux系統,並使之能啓動起來。

下面就看我詳細的操作步驟吧...


二、操作步驟:

1HOST上面添加一塊20G的硬盤HOST上爲被識別爲sdb;

wKiom1MaHyeSuib4AAIID00ixJ0284.jpg

2在/mnt下創建兩個目錄(/mnt/sysroot,/mnt/boot)用來掛載作爲微系統的boot和真正的根文件系統對此磁盤分區,格式化爲ext4格式的文件系統,並將其分別掛載分區至/mnt/boot./mntsysroot;

當然我們可以先寫一個腳本(Autoparti。sh)較爲方便自動的達到我們分區,格式化和掛載的目的。

   以下爲腳本內容(小生shell腳本編寫能力有限,望各位勿噴。)

#---------------CopyRight--------------
#   Name:AutopartitionMount
#   Version Number:1.00
#   Type:Tools
#   Language:bash shell
#   Date:2014-03-9
#   Author:Maoqiuguo
#   Email:[email protected]
#--------------Environment-------------
#   Terminal: Xmanager SLS (Registered)
#   Linux 2.6.32-431.el6.x86_64
#   GNU Bash 4.1.2
#--------------------------------------
#!/bin/bash
function MOUNT {    
           mke2fs -t ext4 "$d_path"1 &>/dev/null
           mke2fs -t ext4 "$d_path"2 &>/dev/null
           mount "$d_path"1 /mnt/boot &> /dev/null
           mount "$d_path"2 /mnt/sysroot &> /dev/null
           [ $? -eq 0 ] && echo -e "\033[44;37;5m Partition the mount has been completed!\033[0m" || echo -e "\033[31mError...\033[0m"
}
read -p "Please input a device file path:" d_path
while ! [[ $d_path == "quit" ]];do
        if [ -z $d_path ] || ! [ -b $d_path ];then
             echo -e "\033[31mInput Error...\033[0m"
             read -p "Please input a device file path again:" d_path
        else
             echo -e "\033[5;31mThe following will clear the data in the disk, whether or not to continue!\033[0m"
             read -p "Sure,enter[y|yes]:" anwser
                 anwser=`echo $anwser | tr 'A-Z' 'a-z'`
                 if [[ $anwser == "y" ]] || [[ $anwser == "yes" ]];then
                         dd if=/dev/zero of=$d_path bs=510 count=1 &> /dev/null
                         echo -e 'n\np\n1\n \n+200M \nn\np\n2\n \n+10G\nw' | fdisk $d_path &> /dev/null
                                if  [ -d /mnt/boot ] && [ -d /mnt/sysroot ];then
                                        MOUNT
                                else
                                     mkdir /mnt/{boot,sysroot}
                                        MOUNT
                               fi
                else
                        exit 8
                fi
                    exit
        fi
done
exit 9

下圖是該腳本執行後的結果:

wKioL1MaH3_DzzkUAAU4sbOCH0U549.jpg

4安裝grub至稍後作爲Target的硬盤上/dev/sdb;

wKiom1MaH-zgSg8tAAQidyimFEI139.jpg

5將HOST上的內核文件vmlinuzinitrd文件initramfs複製到/mnt/boot目錄下

wKioL1MaIGrjoGFiAAFrfd_H64w193.jpg

6./mnt/sysroot目錄下創建目標主機Target的根文件系統

wKiom1MaIWfzLRA2AAHdzkcFzMU410.jpg

7下面這個cp.sh腳本是爲了從HOST上面移植命令和所依賴的各種庫文件到微型系統裏面使用的;

#---------------CopyRight--------------
#   Name:cp.sh
#   Version Number:3.00
#   Type:Tools
#   Language:bash shell
#   Date:2014-03-9
#   Author:Maoqiuguo
#   Email:[email protected]
#--------------Environment-------------
#   Terminal: Xmanager SLS (Registered)
#   Linux 2.6.32-431.el6.x86_64
#   GNU Bash 4.1.2
#--------------------------------------
#!/bin/bash
target=/mnt/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() {
forlib 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"
exit0
fi
clearCmd$cmd
[ $? -eq 5] && continue
cmdCopy$cmdPath
libCopy$cmdPath
done

下圖是cp.sh腳本執行界面:

wKioL1May9GB_dwzAAQ51cb5UQE667.jpg

此時我們需要切換到微型系統真正更目錄系統下面的bin目錄爲bash創建一個軟連接;

wKiom1MalaejezE3AAMCC7bM8dQ228.jpg

8爲Target的Grub提供配置文件(可參考宿主主機的grub文件進行創建);

wKiom1MaI17QtoNJAAE-gYW1SOM514.jpg

9現在已經準備得差不多了,我現在先創建一個Target;

對於朋友們來說對新建一個虛擬機不陌生了吧,那我在創建過程當中需要注意的事項給貼出來吧;

注意版本的選擇

wKioL1ManGCyj0hgAAFcfeeKiB0904.jpg

我們選擇的就是掛載在HOST上面的那塊盤,而無需新建

wKioL1Maz6uChwbwAAGBCQnnGMY776.jpg

wKiom1ManlCBnnKtAAE5mf9Ro7s005.jpg

最後完成我們Target的創建。

wKioL1ManyXBSJgwAAJKUJRPBnc936.jpg

10此時我將HOST給掛起,因爲他們不能共同使用一個硬盤設備,然後將sdb掛載至Target

,調整BIOS選項,讓其從硬盤啓動,看一下是否能啓動;

wKioL1MaoEKQ_v3qAAIKhCmm8lw354.jpg

grub引導界面

wKiom1MaoGrhtKCTAAFloAMGOkY721.jpg

系統初始化過程...

wKioL1MaoEOSSOaZAANZq2jS-Fw927.jpg

wKioL1MaoQDj3UTlAAHIN10oYTE599.jpg

暈!內核恐慌了,系統告訴我找不到init程序。那我就爲它創建一個吧。

13將Target關機,讓HOST啓動。首先我們知道init存放的位置是超級用戶二進制程序的目錄下,它也和其他程序放在一起的,也就是微型系統的根目錄下的sbin目錄了,我們手動寫一個就行了:

wKioL1MaoqvQNCUSAABPBmhKm1k893.jpg

wKioL1MaoqrR5NEKAADaDYDLJrw749.jpg

修改之後我們需要爲它賦予執行權限

wKiom1MaotHQeSZJAABu--MnRBI414.jpg

然後我還需要修改grub.conf文件,因爲grub需要引導着內核去找init程序。

wKiom1MaotHw-gMTAAEt4B1_Rt4557.jpg

最後重複上面的步驟10。

wKioL1Map9qhQif_AAMCMVX19W0556.jpg

好了,已經成功的進入了,命令也可以使用了。

14最後我們裝載網卡驅動模塊,讓其具有網絡功能;還是得先將Target關機,讓HOST啓動;

①爲微型系統創建存放驅動模塊的目錄,將HOST上的網卡驅動模塊copy至Target:

wKioL1MaqMajV0DGAAGyvVMxNa0739.jpg

將HOST掛起,讓Target啓動並裝載網卡驅動模塊;

wKiom1MaviHx1N73AAPTl6n2wtU931.jpg

wKioL1MavfvCRrlsAAEW70K_qU0490.jpg

③我先測試一下ping 迴環地址能通,如果能通說明網卡驅動模塊裝載成功。

wKioL1Mav5PBOCghAADalbo1BN0282.jpg

④接下來爲網卡eth0配置IP,並測試能否連到我的windows ip。

wKiom1MawmPg4e20AAIwd37Bs-I338.jpg

wKiom1MawhXRLo0qAALL6dgMiP4978.jpg

⑤再次證明了我的網卡驅動模塊裝載成功了,但是有個問題問題,就是每次我重啓之後都要去裝載網卡驅動模塊和手動配置IP地址,顯得還不夠自動化,如果能將這些操作都寫到一個配置文件中讓它在系統啓動、初始化的時候就爲我把這些都做了那多好;上篇博客中也提到了,在系統初始化的時候有個配置文件是專門用來設定系統一些配置的這個文件就是/etc/rc.d/rc.sysinit;但是我的微型系統裏面並沒有這個文件;那此時我也可以寫到init這個程序文件當中;

15、將Target關機,讓HOST啓動,再次編輯微型系統的init程序文件:

wKioL1MaoqvQNCUSAABPBmhKm1k893.jpg

wKioL1McbkLTWJj7AAIF2iHH1bw264.jpg

16將HOST掛起,讓Target啓動;  驗證結果:

wKioL1MayBKgPmKuAAO5H5eGIjc864.jpg

wKioL1MayEmR5vwHAAEEYwi-lqQ530.jpg

好了,到此爲止一個具有簡單網絡功能的微型Linux的系統已完成,後續會逐漸完善它的功能。




t_0022.gif小生總結能力有限,望各位大神多多指教。


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