Linux一大亮點就是開源,相對於Windows咱們能夠在Linux上發揮更大的想象力,來親手打造擁有本身特點的Linux系統,首先咱們從打造最基本的微型的Linux系統入手,經過整個打造過程的體驗,你就能夠將本身的完整的Linux系統進行個性化設置,然本身用的Linux系統散發着本身的氣息,讓其更具親協力!!
下面咱們就來直接操做,關於原理,會在每步中說明:
1、準備階段:
硬件設施:一臺宿主機、一個空磁盤(或者數據再也不使用的磁盤,1G就足夠了,若是想對本身製做的Linux進行不斷的完善,那麼就選用大點的光盤,文中咱們將其視爲sdb,根據本身實際狀況進行相應的調整).
一、分區、格式化咱們準備的磁盤
將咱們準備的新磁盤進行分區(若是是數據不用的磁盤,使用dd if=/dev/zero of=/dev/sdb bc=512 count=1 將其磁盤引導區的數據所有進行0覆蓋,這樣這塊磁盤也就編程了空磁盤).
fdisk /dev/sdb 將其分爲兩個區sdb1 100M 、sdb2 500M,類型爲都爲Linux,保存,退出
格式化分區:根據本身屬主機的文件系統類型,進行格式化個人爲ext3,因此我格式化時加了個-j,若是本身的是ext2就不須要加-j了
mke2fs -j /dev/sdb1 mke2fs -j /dev/sdb2 #都將其格式化爲ext3格式二、掛載磁盤(掛載點本身選擇,可是掛載sdb1的掛載點名字必須爲boot)
建立掛載點:
mkdir -pv /mnt/{boot,myroot}
mount /dev/sdb1 /mnt/boot #將sdb1掛載至/mnt/boot
mount /dev/sdb2 /mnt/myroot #將sdb2掛載至/mnt/myroot(注:當咱們掛載的這兩個分區的時候也許會出現分區不存在的錯誤提示,主要緣由爲系統沒能自動獲取剛剛建立的分區的信息,也就是/proc/partitions文件中沒有新建分區的信息,咱們只須要輸入命令:partproble /dev/sdb 重讀分區信息,新建的分區信息將被寫入/proc/parttions文件,這樣就OK了)
2、打造階段:
一、準備咱們Linux的心臟(內核)
查看咱們宿主機中/boot目錄中的內容,會發現有相似vmlinuz-2.6.18-164.el5 vmlinuz-2.6.28.10這樣帶有版本號的文件,這就是系統的內核文件,咱們選擇一個內核文件,將其拷貝到咱們小Linux的/boot目錄中,這樣咱們的Linux就有心臟了.
命令:
cp /boot/vmlinuz-2.6.18-164.e15 /mnt/boot/vmlinuxz #將內核更名爲vlinuxz.(注:將內核進行更名,不只有利於咱們接下來操做的操做還能夠避免由於此處內核名字和grub.conf文件中內核名字的不符而引發kernel panic(內核恐慌)問題,致使咱們的小Linux沒法啓動,此外我曾遇到過在虛擬機裏用手打出的內核名字和用Tab鍵寫出的內核名字不符的現象,至今不知爲什麼!因此咱們儘量的將咱們小Linux的內核文件名字寫的簡短一點)
二、準備咱們的Linux的善意欺騙文件initrd文件.
關於initrd文件的做用,我在有一篇名爲《Linux開機流程簡述》的文章中詳細說明多,建議你們去看看,對咱們的小Linux管理和維修是有很大幫助的.
一樣查看宿主機的/boot目錄內的內容,會發現有相似initrd-2.6.18-164.el5.img initrd-2.6.28.10.img 這樣以initrd開頭中間是版本號,以img結尾的文件,那麼這就是initrd文件了,每一個版本的內核文件,就會有一個與之版本號相對應的initrd文件,將與咱們剛纔選擇的內核版本號相對應的initrd文件拷貝到一個新建的目錄內改造(此處咱們在/tmp目錄中建立一個名爲test的目錄)
cp /boot/initrd-2.6.18-164.el5.img /tmp/test/咱們用查看這個文件的類型會發現它是一個用cpio打包,由gzip壓縮的文件,咱們將其展開在當前目錄下.
zcat initrd-2.6.18-164.el5.img | cpio -id
展開以後咱們會發現一個init的腳本文件,將其用vim打開,將以mkrootdev -t ext3 -o defaults,ro開頭行ro後面的內容改爲sda2,保存退出,便可(sda2爲咱們小linux系統單獨運行時根文件系統所在的分區,在此咱們告訴init進程,真正的根文件系統在sda2上面,讓內核去進行根文件系統的加載,須要注意的是ro和sda2之間有一個空格)
修改 完成以後,我問就該對其進行封裝復原了(封裝復原前最好先將此目錄中的initrd-2.6.18-164.el5.img文件刪除,使用命令:rm -rf initrd-2.6.18-164.el5.img),使用命令:
find . | cpio -H newc -o | gzip -9 > /mnt/boot/initrd.gz
(注:find . 爲當前目錄的全部內容cpio -H news -o 將目錄下的全部內容進行cpio打包gzip -9 打包以後進行gzip壓縮,由於這個文件必須是壓縮的格式> /mnt/boot/initrd.gz 將打包壓縮好的文件放在/mnt/boot目錄下,並命名爲initrd.gz,重命名一樣是爲了方便使用 )
三、向咱們小Linux磁盤安裝grub引導程序.(關於grub的做用在我剛剛提到的文章裏有介紹,此處再也不說明)
安裝命令爲:
grub-install --root-directory =/mnt /dev/sda^此處爲boot目錄的父目錄
進入/mnt/boot目錄查看是否有一個新的目錄grub,沒有的話則爲安裝失敗,從新安裝,有的話直接進入該目錄.
使用vim建立文件grub.conf並寫入以下內容(注:#後爲個人註釋內容,不要寫入)
default=0
timeout=10 #此處是咱們系統啓動是菜單選擇時間的設置,咱們設置爲10秒.
title MY LINUX #title是在開機操做系統選擇菜單中咱們小Linux所顯示的名字,可任意填寫
root (hd0,0) #告訴grub咱們小Linux系統的內核、根文件系統,initrd文件的所在磁盤
kernel /vmlinuz ro root=/dev/sda2 rhgb quiet #告訴grub內核的名字及根文件系統所在的分區
initrd /initrd.gz #告訴grub initrd文件的名字保存退出便可.
四、爲咱們的小Linux系統建立簡單的根文件系統
進入/etc/myroot目錄使用命令建立以下目錄:
mkdir -p {boot,proc,sys,dev,home,root,etc/{rc.d,sysconfig,init.d},bin,sbin,lib,usr/{bin,sbin,lib,include},var/{log,run},tmp,mnt,opt,media}
基本命令移植,將藉助宿主機有關命令的庫文件,爲咱們的小Linux移植必須的命令(各命令的移植方法相同,在此以命令bash爲例)
使用which bash 查看bash命令的位置,並將其拷貝到咱們小Linux的相應位置便可
cp /bin/bash /mnt/myroot/bin/bash因爲系統在啓動時不是讀取bash命令自己,而是sh,因此咱們爲bash命令建立一個sh連接(只有這個命令須要連接)
進入/mnt/myroot/bin目錄
建立連接 ln -sv bash sh 而後查看該目錄將會看見sh
查看並拷貝bash命令所依賴的庫文件(沒有庫文件,命令只是個擺設)
使用命令ldd /bin/bash 將顯示bash所依賴的全部庫文件,如
linux-gate.so.1 => (0x0061c000)
libtermcap.so.2 => /lib/libtermcap.so.2 (0x00c8f000)
libdl.so.2 => /lib/libdl.so.2 (0x00c60000)
libc.so.6 => /lib/libc.so.6 (0x00b18000)
/lib/ld-linux.so.2 (0x00af5000)第一個庫文件沒必要拷貝,下面的庫文件需一一拷貝進小Linux對應的目錄,例如第二個庫文件的拷貝爲:cp /lib/libtermcap.so.2 /mnt/myroot/lib/libtermcap.so.2
每一個命令的移植過程都是如此,此外init命令也是必需要的,其它命令能夠自行選擇.
四、建立咱們小Linux的/etc/inittab、/etc/rc.d/rc.sysinit文件(關於這兩個文件的做用在我剛剛提到的文章裏有介紹,此處再也不說明)
在/etc目錄下建立inittab文件,內容以下一樣#以後爲註釋內容)
id:3:initdefault: #設定系統默認啓動級別爲3
si::sysinit:/etc/rc.d/rc.sysinit #讓系統執行/etc/rc.d/rc.sysinit腳本保存退出
在/etc/rc.d目錄下建立腳本rc.sysinit ,內容以下
bin/bash #運行bash命令保存退出,並給予腳本執行權限 chmod +x rc.sysinit
至此,最精簡Linux已經在被咱們打造出來,趕忙將含有咱們勞動成果的磁盤放在其餘的裸機上運行一下吧,千萬要記住,心急吃不了熱豆腐,在取下磁盤以前必定要給宿主機足夠多的時間,將緩存中的數據卸載咱們的小Linux磁盤上,否則後果可想而知!
這是個能進行最基本的運行的Linux,因此你們有很大的空間對其進行不斷的完善,但願你們一步步的讓咱們的小Linux"長大"!html