2008年5月25日 星期日

Linux系統最小化

目標是利用initrd的機制,使用ramdisk當作root filesystem,看看kernel可以裁減到多小,root filesystem 至少需要哪些檔案

工作平台: x86, Red Hat 9

Linux Kernel 2.4.20
必要選項:
General setup --->Kernel support for ELF binaries(CONFIG_BINFMT_ELF)
註:因為所有linux的binary執行檔都用這種格式,以前是用a.out的格式,
例如windows的執行檔是用PE的格式

Character devices --->Virtual terminal(CONFIG_VT)

Character devices --->Support for console on virtual terminal(CONFIG_VT_CONSOLE)

File systems --->/proc file system support(CONFIG_PROC_FS)
註:很多工具命令需要,像是 ps.reboot....

Console drivers --->VGA text console(CONFIG_VGA_CONSOLE)
註:在 make menuconfig 環境下,Character devices -->Virtual terminal(CONFIG_VT)勾選之後,才能看到

root filesystem:
/bin /dev /etc /lib /mnt /proc /sbin /usr
mknod /dev/console c 5 1
mknod /dev/tty1 c 4 1


BusyBox工具集:(版本-0.60.5)
/bin/busybox
/linuxrc
註:若kernel傳參數時,有加入root=/dev/ram0,這個連結檔可以砍掉
/sbin/init
其他工具...

若使用靜態連結,可以不用考慮shared library的相依性
若使用動態連結,可以用ldd指令來查binary執行檔的相依性,不過只要檢查busybox檔的相依性,因為其它的都是連結檔!!!


GNU工具集:(直接從Red Hat 9.0 複製過去)
/sbin/init
/bin/bash
/bin/nash
/linuxrc
註:若kernel傳參數時,有加入root=/dev/ram0,這個檔就不需要,若無法傳遞參數給kernel,可以寫成如下:

#!/bin/nash
echo Mounting /porc filesystem
mount -t proc /proc /proc
echo 0x0100 > /proc/sys/kernel/real-root-dev

這樣算是等同於busybox自動產生的linuxrc連結檔!!!

nash 是個命令解譯器,有很多特殊的內建命令,用來適合initrd的任務,細節請參考man或者相關連結,雖然這個命令稿有用到echo. mount的指令,不過這些都是nash內建的,建議就用nash當作指令稿的解析器,
若用bash會有其它要解決的問題,例如mount,除了是外部命令,還有函式庫相依性,還有 ...

還有kernel的核心設定要多加一項
General setup --->sysctl support(CONFIG_SYSCTL)
這樣子,/proc下才有/sys這個子目錄

其他工具...

由於都是從Red Hat 9.0複製過來,所以一定要考慮執行檔相依性,像是moount. echo. bash. ...
可以用 type '命令',知道命令的位置,也可以用ldd '命令', 知道命令相依哪些函式庫:-)

相關連結
雲上的老鼠 西莎雜記
酷!學園 簡單日誌 skywalker_nick的技術專欄 Checko's Blog
Jamyy's Weblog
IT技術-賽迪網 資安論壇

沒有留言:

張貼留言