製作一個精簡版的CentOS6.4操作系統

一、一個Linux操作系統需具備的組件

在製作一個精簡的Linux系統之前,首先了解一下製作一個系統所必備的組件。我們需要一個Linux內核文件、bash命令解釋器、各種命令、grub引導程序、init程序等。知道了一個系統的啓動流程後,我們就可以開始動手改裝操作系統了。


二、製作精簡版CentOS6.4

我們以一個CentOS6.4的系統爲宿主機,在此係統的基礎上,通過增加栽剪的方法,實現一個精簡版的Linux操作系統。

1、給當前CentOS6.4系統新加一塊硬盤

wKioL1MbB5nBTkKwAAJHQox3v4w938.jpg


wKiom1MbB8-wWqYWAAK09sunxQA827.jpg

使用單個文件,大小20G夠用了。


wKiom1MbB9iSCWo3AAIqum2gXTY872.jpg

給新磁盤取個名字保存。


2、進入系統給新硬盤分區

2.1、使用fdisk -l 命令查看磁盤情況。

wKioL1MbCMqzsh1CAAETzcyts18661.jpg

我的新硬盤是/dev/sdc


2.2、給/dev/sdc分區,分兩個區就行了,先創建一個100M的分區,再創建一個10G的分區,分區步驟不在此討論。

wKioL1MbCb3Thgv_AAG6-oiRyQQ618.jpg


2.3、給新分區格式化

mke2fs -t ext3 /dev/sdc1
mke2fs -t ext3 /dev/sdc2


3、掛載兩個分區

3.1、把/dev/sdc1掛載到/mnt/boot目錄,/dev/sdc2掛載至/mnt/sysroot目錄

mount -t ext3 /dev/sdc1 /mnt/boot
mount -t ext3 /dev/sdc2 /mnt/sysroot

wKioL1MbDCexg_XFAADT2SskWGQ353.jpg

分區掛載成功。


4、給新硬盤安裝grub引導程序

wKiom1MbDOjBztIcAAGzGBHOyaU833.jpg

grub安裝成功,grub把新硬盤識別爲hd2,不過在目標機上我們還是要使用hd0。


5、複製宿主機的內核文件和initrd文件到/mnt/boot目錄

cp /boot/vmlinuz-2.6.32-358.el6.x86_64 /mnt/boot
cp /boot/initramfs-2.6.32-358.el6.x86_64.img /mnt/boot

wKioL1MbDwKD13PkAAHVfYm8uFc524.jpg


6、接着在目標機的根目錄,也就是當前主機的/mnt/sysroot目錄創建Linux所需要的各目錄。

mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,srv,mnt,media,home,root}

wKiom1MbEHXR_SkyAACFNYhZDFY965.jpg


7、寫個簡單的shell腳本,用來完成命令移植工作,腳本代碼如下:

#!/bin/bash
#
# If directroy does't exist will be make directory.
makeDir(){
    local dirPath=`dirname $1`
    if ! [ -d $dirPath ];then
        mkdir -p $dirPath
    fi
}
cpMain(){
    commandPath=`which --skip-alias $commandChar`
    desDir='/mnt/sysroot'
    libPath=`ldd $commandPath|grep -o '/[^[:space:]].*\{1,\}[[:space:]]'`
    # Copy the command file to the new directory.
    cpCommandCount=0
    cpError=0
    makeDir $desDir$commandPath
    if cp $commandPath $desDir$commandPath; then
        let cpCommandCount+=1
    else
        echo "Copy $commandPath file error."
        let cpError+=1
    fi
    # Copy the command library to the new directory.
    cpLibCount=0
    for partLibPath in $libPath; do
        makeDir $desDir$partLibPath
        if cp $partLibPath $desDir$partLibPath ; then
            let cpLibCount+=1
        else 
            echo "Copy the $partLibPath error."
            let cpError+=1
        fi
    done
}
while true;do
    read -p "Enter a command: " commandChar
    if [[ "$commandChar" == "quit" ]];then
        exit 0
    fi
    ! which $commandChar &> /dev/null && echo "Command not found." && exit 1
    cpMain
done
#if [ "$cpError" -eq 0 ];then
#   echo -e "Copy command file: $cpCommandCount.\nCopy library file: $cpLibCount. \nCopy successfully!"
#else
#   echo -e "Copy command file: $cpCommandCount.\nCopy library file: $cpLibCount. \n$cpError file copy failed."
#fi

把我們經常要用到的若干命令移植到/mnt/sysroot目錄中。

wKiom1MbE6qSQmHKAACUkSP58uw996.jpg


wKiom1MbFCCh9w1NAAEipbfdSb0464.jpg

暫時先移這麼多吧。


8、系統的大體框架弄好了,接下來我們手動配置一個grub.conf配置文件

wKioL1MbFvbB3tY7AAELLBxPlSA368.jpg

我們先把默認的init程序使用bash代替,測試一下。

wKiom1MbG-HzdqaEAABfcY6U2KY596.jpg

文件保存後,爲了防止緩存沒有寫入,記得執行幾個sync命令。


9、新建一個虛擬機

9.1、操作系統選擇Other Linux

wKiom1MbF8nhWfvfAAFR9axSGkQ191.jpg


9.2、在選擇磁盤時,選擇剛纔我們新加的那塊硬盤。

wKiom1MbGIKhtDLrAAGEtV-sG8o620.jpg

wKioL1MbGF2RYQYmAAD0pzZxJf0837.jpg


10、目標主機創建好後,因爲兩部主機都使用了那塊新硬盤,此時我們先把宿主機關閉,把目標機開啓測試。

10.1、開機測試,看到了grub的菜單。

wKioL1MbGcnj46gZAAD7srk7QlA027.jpg


10.2、如果沒有出錯,開機後會直接進入shell的命令行界面。

wKioL1MbHNWi7UB8AAEapfRc0lk593.jpg

OK,沒有出錯。


11、一個微型Linux系統就快完成了,不過現在還不能連接網絡,沒有init程序,先退出系統,回到宿主機上,給他添加網絡功能。

11.1、使用 lsmod命令查找一下宿主機的網卡模塊

wKiom1MbHr7i33ldAAJgyNnp9SA052.jpg


11.2、使用 modinfo 命令查看網卡模塊的詳細信息,以此獲得網卡模塊的所在路徑。

wKioL1MbHxSREGE6AAFpdKB0YI4083.jpg


11.3、在/mnt/sysroot/lib目錄創建一個模塊目錄。

wKioL1MbH4qymXaWAABuV5VkY7M429.jpg


11.4、複製宿主機的網卡模塊到/mnt/sysroot/lib/modules目錄。

cp /lib/modules/2.6.32-358.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/lib/modules/

wKiom1MbIJ6ApePtAADv8cFlER4091.jpg


12、執行剛纔的shell腳本,複製一些網絡命令及模塊安裝命令到目標機的目錄。

wKiom1MbIOyBmYm0AACynfLBLfQ188.jpg


13、網絡模塊創建好了,我們可以手動創建一個init程序了。

13.1、在/mnt/sysroot/sbin目錄下創建一個init腳本文件

#!/bin/bash
#
echo -e "    \tWelcome to \033[33mXiaoWu's \033[0mLinux "
mount -n -t proc proc /proc
mount -n -t sysfs sysfs /sys
mount -n -o remount,rw /dev/sda2 /
/bin/bash

首先輸出一行歡迎信息,然後掛載兩個系統內核必需要掛載的分區,再以讀寫的方式重新掛載一下根分區。


13.2、給腳本添加執行權限

wKioL1MbMMOjh0itAAEPn74IfWY769.jpg

最後執行sync命令,進入目標機測試一下。


13.3、開機測試一下

wKiom1MbMKOSPFj6AAFCN2aUfkg257.jpg


13.4、安裝網卡模塊

insmod /lib/modules/e1000.ko

wKioL1MbMfGy-dtnAAFKlFDzTCk481.jpg


13.5、設置IP地址,測試網絡

wKiom1Mb56nTtP2_AAGY9W37T_0852.jpg


wKioL1Mb58uDzlLMAADD8SoXuzo804.jpg

網絡可以使用。


14、最後把添加網卡模塊的步驟也寫入init文件,讓他開機就能連接網絡。

#!/bin/bash
#
echo -e "    \tWelcome to \033[33mXiaoWu's \033[0mLinux "
mount -n -t proc proc /proc
mount -n -t sysfs sysfs /sys
mount -n -o remount,rw /dev/sda2 /
insmod /lib/modules/e1000.ko
ifconfig lo 127.0.0.0/8
ifconfig eth0 172.16.251.50/16
! [[ -f "/etc/issue" ]] && echo "
Modify by CentOS release 6.4 (Final)
XiaoWu's Linux
Good good study!Day day up!
http://wubinary.51cto.com
" > /etc/issue
/bin/bash


一切就緒,開機測試一下。。。

wKiom1Mb8Jmhu0w9AAGqTWF6Z8A610.jpg


wKioL1Mb8M_x4DxZAAHegBuAiHg509.jpg


OK,系統裁剪成功!






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