使用linux核心打造屬於自己的linux
首先要了解Linux的開機過程,如圖
開機自檢(BIOS)這個跟硬體相關,不需要我們做,我們要做的有“MBR引導——GRUB選單——載入核心(kernel)——執行INIT程序——inittab配置檔案——rc.sysinit指令碼”,做完後一個非常簡單的裸系統linux就成型了,但此時的系統什麼功能都沒有,如果要使用某些功能,比如ftp服務,vim命令等,需要新增配置檔案
製作方法:在原有linux系統(宿主機)下新增一塊硬碟,把新增的硬碟做成linux系統,做好後移植到其他地方當做新的linux系統,就可以使用了
1,新增硬碟:
2,分割槽
按照宿主機的模式分割槽,共分根,boot,swap三個分割槽
分割槽儲存後會有如下提示
‘新盤將在重啟後才能使用’,除了重啟還有另一種方法,使用命令
partprobe /deb/sdb命令完成後就可以直接使用了
3,建立光碟掛載點
[root@localhost ~]# mkdir /mnt/boot(相當於boot)
[root@localhost ~]# mkdir /mnt/sysroot(相當於/)
[root@localhost ~]# mount /dev/sdb1 /mnt/boot/
[root@localhost ~]# mount /dev/sdb2 /mnt/sysroot/
4,構建grub
[root@localhost ~]# grub-install --root-directory=/mnt/ /dev/sdb
編寫grub.conf前要把核心和驅動映象拷入/mnt/boot/下
[root@localhost boot]# cp /boot/vmlinuz-2.6.18-164.el5 ./
[root@localhost boot]# cp /boot/initrd-2.6.18-164.el5.img ./
但是驅動映象需要更改一下,不然很有可能系統啟動不起來
首先建立臨時目錄
把驅動映象移動過去,並展開在當前目錄下
[root@localhost boot]# mkdir /mnt/boot/tmp
[root@localhost boot]# mv initrd-2.6.18-164.el5.imgtmp/
[root@localhost boot]# zcat tmp/initrd-2.6.18-164.el5.img | cpio -id(不加管道後面的命令會出現亂碼,cpio程式可以使其正常顯示,-id引數選項意思為如果有目錄的話建立相應的目錄)
展開後如圖
開啟init檔案並修改
在87行首加個#禁掉此行就OK了
修改完後,刪掉原檔案initrd-2.6.18-164.el5.img,重新打包
[root@localhost tmp]# find . |cpio -o(表示輸入) -H(格式) newc --quiet (靜默模式)|gzip -9 >initrd.gz
打包後複製到/mnt/boot/目錄下
[root@localhost tmp]# cp initrd.gz /mnt/boot/
最後編輯grub.conf
並修改許可權使其可執行
此時已經做到了第四步載入核心,下面移植INIT程序
5,建立跟分割槽所需要的目錄
[root@localhost sysroot]# ldd /sbin/init(檢視init依賴於哪些庫,並拷貝到硬碟2上)
linux-gate.so.1 => (0x005aa000)
libsepol.so.1 => /lib/libsepol.so.1 (0x006fc000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00854000)
libc.so.6 => /lib/libc.so.6 (0x001c0000)
libdl.so.2 => /lib/libdl.so.2 (0x0065c000)
/lib/ld-linux.so.2 (0x004f0000)
一個一個複製太麻煩,所以就製作一個指令碼,針對某個命令會複製所有的庫檔案
指令碼檔案如圖
在/mnt/sysroot/etc/下編輯inittab配置檔案
並修改為可執行檔案
查詢bash指令的庫檔案,並複製,使用剛才編寫的複製指令碼複製
做完後基本已經完成了
同步配置,準備移植新系統
6,下面開始準備啟動盤
開啟一個新的linux系統,把原有的硬碟刪除,掛載新的硬碟(剛才所製作的硬碟)
新增硬碟
新增剛才建立的磁碟檔案
然後開啟此虛擬機器
顯示如圖說明一個簡易的linux已經打造成功
優化:新增開機背景圖片(由於新的系統不支援一些命令,所以首先在宿主機上做好圖片,然後再複製到新的linux系統中使用)
新增圖片,使用xshell上傳
[root@localhost ~]# convert -resize 640x480! 1.jpg 1.jpg(忽略圖片的原有比例,不然有可能鋪滿全屏)
[root@localhost ~]# convert 1.jpg -colors 14 -geometry 640x480 splash.xpm(轉換圖片的畫素大小,格式)
[root@localhost ~]# gzip splash.xpm (壓縮檔案)
[root@localhost ~]# cp splash.xpm.gz /mnt/boot/grub/(複製到新的linux系統中)
應用到配置檔案/boot/grub/grub.conf中
效果圖如圖