1.什麼裁剪?
本篇文章的主要目的是讓筆者和讀者更深的認識Linux系統的運作方式,大致內容就是把Linux拆開自己一個個組件來組裝,然後完成一個微型的Linux系統.下面,讓我們來實現吧..寫的不好的地方請指教.
2.原理
大家都知道,操作系統的啟動流程是(主要是Linux):POST—>BIOS—>MBR—kernel-->initrd-->sbin/init,
POST,BIOS都不是我們管的,所以這裡我們從MBR開始,Linux的系統引導先主要是用的grub這個軟件,grub引導系統了,然後啟動內核,內核調用initrd來實現最基本的操作系統,
3.接下來,實際操作(所有操作均在虛擬機上實現)
3-1.首先我們得創建一個新的磁盤,來保存我們的grub和內核等關鍵程序(直接在虛擬機上添加新的磁盤)
筆者這裡已經添加好了,就不演示添加的過程了,筆者的地盤分了兩個區,分別是100M的主盤,和1G的主盤,名字為
/dev/sdg1和/dev/sdg2,首先在/mnt目錄下創建兩個文件夾:如圖
3-2.掛載/dev/sdg1到/mnt/boot,掛載/dev/sdg2到/mnt/sysroot
3-3.大家知道,啟動系統的時候除了硬件方面,首先就是要有引導程序,所以我們把引導程序安裝到/mnt/boot
使用命令:grub-install –-root-directory=/mnt /dev/sdg1
3-4.有了引導程序就需要有我們的內核了,沒有內核怎麼啟動啊,但是內核的啟動又要依賴initrd(CentOS6),所以我們要把這兩個文件都復制過去,使用命令:
cp /boot/vmlinuz-2.6.32-358.el6.x86_64 /mnt/boot/vmlunuz
cp /boot/initramfs-2.6.32-358.el6.x86_64.img /mnt/boot/initramfs.img
3-5.這樣一個簡單的操作系統的雛形就做好了,但是OS的操作依賴於shell,所以我們得把bash shell復制到/dev/sgd2目錄下,所以我們得把/bin/bash以及bash依賴的庫復制過去,可以使用ldd `which bash`查看bash依賴的庫文件有哪些,筆者這裡自己有一個簡單的script腳本,就不手動復制了
3-6.接下來要配置grub文件,不然系統怎麼找到你的硬件,所以接下來在/mnt/boot/grub下創建一個grub.conf的配置文件,內容如下
3-7.接下來還要在根目錄下,也就是掛載在/mnt/sysroot下創建一個proc的文件夾.就可以把這塊新的硬盤當成其他系統的啟動盤了,我們來試試,新創建一個空的虛擬機不用教了吧.然後添加我們的這塊磁盤,就可以開機啟動了
# mkdir dev proc etc sbin bin lib mnt usr
# cp /bin /tmp/boot/
# cp –dpr /dev/{console,fd0.hda,hda8,hda9,hda10,initctl,initrd,kmem,mem,null,ram,ram0,ramdisj,sda,tty1,tty}/tmp/boot/
# cp/etc/{default,ld.so.cache,ld.so.conf,login.defs,fstab,groub,init.d,inittab,issue,modules.conf,mtab,nsswitch.conf,pam.d,profile,rc.d}/tmp/boot/
3-8.接下來我們來給他添加命令,其實很簡單的,只要把命令的所在目錄和命令所有依賴的庫復制到/mnt/sysroot目錄下就行了.這裡我用腳本完成,就不演示了,筆者復制了一些常用的命令如:ls
3-9.筆者給這個小系統創建了幾個目錄了當然是在原主機上添加的,是不是越來越像一個系統了
3-10.好了!系統到這裡就差不多了,不過我們還得修修,大家在3-6可以看到,我們的init=/bin/bash,這時候就會有同學問了,有沒搞錯,Linux系統化初始化不都是調用/sbin/init的麼,你怎麼調用了/bin/bash,沒錯,其實這裡指向什麼就調什麼,那我們現在重新讓他指向/sbin/init吧,首先在/mnt/sysroot下建立一個init文件,在裡面添加如下字符:完成後記得給/sbin/init一個快 執行權限,然後把/mnt/boot/grub/grub.conf中的指向改成init=/sbin/init
3-11.如下圖,執行成功了
3-12.最後,我們該給他添加一個網絡模塊了,哦哦,在3-9步我們發現磁盤還是只讀的,所以得重新把他掛載成讀寫的,如下圖:
3-13.終於可以給他加網絡模塊了,Linux的系統是單內核,但是支持模塊化,所以咯,我們來給他加個網絡模塊吧,我們值需要先把原系統的網絡模塊復制到我們的微系統中,Linux的模塊都在/lib/module/[內核版本號下],我們首先用lspci或者lsmod查看網絡模塊信息,然後復制到微系統中,如下:
最後安裝網絡模塊,使用命令insmod [path]
好了,整個系統安裝完成了!
Linux 系統裁剪筆記