1、一個Linux操做系統需具有的組件shell
在製做一個精簡的Linux系統以前,首先了解一下製做一個系統所必備的組件。咱們須要一個Linux內核文件、bash命令解釋器、各類命令、grub引導程序、init程序等。知道了一個系統的啓動流程後,咱們就能夠開始動手改裝操做系統了。
緩存
2、製做精簡版CentOS6.4bash
咱們以一個CentOS6.4的系統爲宿主機,在此係統的基礎上,經過增長栽剪的方法,實現一個精簡版的Linux操做系統。網絡
一、給當前CentOS6.4系統新加一塊硬盤框架
使用單個文件,大小20G夠用了。ide
給新磁盤取個名字保存。測試
二、進入系統給新硬盤分區ui
2.一、使用fdisk -l 命令查看磁盤狀況。spa
個人新硬盤是/dev/sdc操作系統
2.二、給/dev/sdc分區,分兩個區就好了,先建立一個100M的分區,再建立一個10G的分區,分區步驟不在此討論。
2.三、給新分區格式化
mke2fs -t ext3 /dev/sdc1 mke2fs -t ext3 /dev/sdc2
三、掛載兩個分區
3.一、把/dev/sdc1掛載到/mnt/boot目錄,/dev/sdc2掛載至/mnt/sysroot目錄
mount -t ext3 /dev/sdc1 /mnt/boot mount -t ext3 /dev/sdc2 /mnt/sysroot
分區掛載成功。
四、給新硬盤安裝grub引導程序
grub安裝成功,grub把新硬盤識別爲hd2,不過在目標機上咱們仍是要使用hd0。
五、複製宿主機的內核文件和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
六、接着在目標機的根目錄,也就是當前主機的/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}
七、寫個簡單的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目錄中。
暫時先移這麼多吧。
八、系統的大致框架弄好了,接下來咱們手動配置一個grub.conf配置文件
咱們先把默認的init程序使用bash代替,測試一下。
文件保存後,爲了防止緩存沒有寫入,記得執行幾個sync命令。
九、新建一個虛擬機
9.一、操做系統選擇Other Linux
9.二、在選擇磁盤時,選擇剛纔咱們新加的那塊硬盤。
十、目標主機建立好後,由於兩部主機都使用了那塊新硬盤,此時咱們先把宿主機關閉,把目標機開啓測試。
10.一、開機測試,看到了grub的菜單。
10.二、若是沒有出錯,開機後會直接進入shell的命令行界面。
OK,沒有出錯。
十一、一個微型Linux系統就快完成了,不過如今還不能鏈接網絡,沒有init程序,先退出系統,回到宿主機上,給他添加網絡功能。
11.一、使用 lsmod命令查找一下宿主機的網卡模塊
11.二、使用 modinfo 命令查看網卡模塊的詳細信息,以此得到網卡模塊的所在路徑。
11.三、在/mnt/sysroot/lib目錄建立一個模塊目錄。
11.四、複製宿主機的網卡模塊到/mnt/sysroot/lib/modules目錄。
cp /lib/modules/2.6.32-358.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/lib/modules/
十二、執行剛纔的shell腳本,複製一些網絡命令及模塊安裝命令到目標機的目錄。
1三、網絡模塊建立好了,咱們能夠手動建立一個init程序了。
13.一、在/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.二、給腳本添加執行權限
最後執行sync命令,進入目標機測試一下。
13.三、開機測試一下
13.四、安裝網卡模塊
insmod /lib/modules/e1000.ko
13.五、設置IP地址,測試網絡
網絡可使用。
1四、最後把添加網卡模塊的步驟也寫入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
一切就緒,開機測試一下。。。
OK,系統裁剪成功!