?? 00000003.htm
字號:
<BR>裁減Linux(7) <BR>以前我總以為裁減kernel就是裁減Linux了,后來才發現是大錯特錯。 <BR>以前總以為最難的是裁減kernel,后來才發現自己多么無知。 <BR>學習裁減內核,大概只用了一兩天,編譯一次內核也就20分鐘不到, <BR>可是后來居然重建文件系統花了一兩個星期,嗚嗚~~~ <BR> <BR>關于文件系統和kernel的關系,從參考文檔里面可以知道,大家自己去看。 <BR>如果連這個都不懂,建議暫時不要做裁減的事情,以為照著我的文章 <BR>依葫蘆畫瓢多半是不能成功的。 <BR> <BR>首先按照ramdisk的生成方法或者loopback device的生成方法生成一個 <BR>8M的磁盤掛接到/mnt(或者其他目錄)上,就可以以/mnt為根目錄構造 <BR>文件系統。注意將其按照ext2方式格式化 <BR>lrwxrwxrwx 1 root root 4 Dec 28 09:31 bin -> sbin <BR>drwxr-xr-x 5 root root 1024 Dec 27 13:42 dev <BR>drwxr-xr-x 7 root root 1024 Jan 6 15:14 etc <BR>drwxr-xr-x 2 root root 1024 Dec 12 08:33 initrd <BR>drwxr-xr-x 4 root root 1024 Dec 30 06:52 lib <BR>drwxr-xr-x 2 root root 1024 Dec 11 07:52 mnt <BR> <BR>dr-xr-xr-x 24 root root 0 Jan 6 15:14 proc <BR>drwxr-xr-x 2 root root 1024 Dec 26 03:03 root <BR>drwxr-xr-x 2 root root 1024 Dec 30 07:28 sbin <BR>drwxr-xr-x 2 root root 1024 Dec 26 03:04 sysroot <BR>drwxr-xr-x 2 root root 1024 Apr 19 2002 tmp <BR>drwxr-xr-x 3 root root 1024 Dec 12 07:45 usr <BR>drwxr-xr-x 5 root root 1024 Dec 12 02:43 var <BR>這幾個目錄是必須的 <BR> <BR>裁減Linux(8) <BR>先看看bin下面有什么 <BR>lrwxrwxrwx 1 root root 6 Dec 30 07:28 ash -> ./bash <BR>-rwxr-xr-x 1 root root 541096 Dec 30 07:27 bash <BR>-rwxr-xr-x 1 root root 16020 Dec 13 08:56 cat <BR>-rwxr-xr-x 1 root root 16680 Dec 27 15:40 chmod <BR>-rwxr-xr-x 1 root root 36360 Dec 28 09:10 cp <BR>-rwxr-xr-x 1 root root 62756 Dec 28 09:25 ftp <BR>-rwxr-xr-x 1 root root 100624 Dec 28 09:14 grep <BR>-rwxr-xr-x 1 root root 8672 Dec 26 03:27 halt <BR>-rwxr-xr-x 1 root root 9624 Dec 28 09:14 hostname <BR>-rwxr-xr-x 1 root root 54316 Dec 28 09:14 ifconfig <BR>-rwxr-xr-x 1 root root 26920 Dec 12 02:42 init <BR>-rwxr-xr-x 1 root root 105768 Dec 27 13:44 ip <BR>-rwxr-xr-x 1 root root 60764 Dec 28 09:15 iptables <BR>-rwxr-xr-x 1 root root 7764 Dec 26 17:26 kill <BR>-rwxr-xr-x 1 root root 19080 Dec 12 02:25 login <BR>-rwxr-xr-x 1 root root 9172 Dec 11 07:54 losetup <BR>-rwxr-xr-x 1 root root 46888 Dec 13 08:55 ls <BR>-rwxr-xr-x 1 root root 10316 Dec 13 08:37 mingetty <BR>-rwxr-xr-x 1 root root 17992 Dec 27 14:15 mkdir <BR>-rwsr-xr-x 1 root root 60104 Dec 11 07:54 mount <BR>-rwxr-xr-x 1 root root 43496 Dec 28 10:02 mv <BR>-rwxr-xr-x 1 root root 22196 Dec 26 02:09 nash <BR>-rwxr-xr-x 1 root root 29464 Dec 28 09:49 ping <BR>-r-xr-xr-x 1 root root 63304 Dec 26 16:57 ps <BR>lrwxrwxrwx 1 root root 4 Dec 26 03:33 reboot -> halt <BR>-rwxr-xr-x 1 root root 26216 Dec 26 17:35 rm <BR>lrwxrwxrwx 1 root root 6 Dec 30 07:28 sh -> ./bash <BR>-rwxr-xr-x 1 root root 14952 Dec 11 09:44 shutdown <BR>-rwxr-xr-x 1 root root 219932 Dec 28 10:06 ssh <BR>-rwxr-xr-x 1 root root 260616 Dec 27 14:04 sshd <BR>lrwxrwxrwx 1 root root 6 Dec 26 16:48 swapoff -> swapon <BR>-rwxr-xr-x 1 root root 7108 Apr 1 2002 swapon <BR>-rwxr-xr-x 1 root root 27208 Dec 27 14:13 syslogd <BR>-rwxr-xr-x 1 root root 78808 Dec 28 09:30 telnet <BR>-rwsr-xr-x 1 root root 30664 Dec 27 14:23 umount <BR>-rwxr-xr-x 1 root root 7832 Dec 12 01:54 update <BR>-rwxr-xr-x 1 root root 386120 Dec 28 09:13 vi <BR>-rwxr-xr-x 1 root root 13896 Dec 30 06:53 who <BR> <BR> <BR>這里面包含了ftp、telnet、ssh客戶端以及sshd服務器 <BR>常用的命令和網絡設置命令,iptables防火墻,vi編輯器 <BR>shell用的是bash,雖然ash很小但是總是不習慣沒有auto complete功能, <BR>tcsh不大不小功能又全,可是對一些shell腳本的支持不太好。 <BR>nash用來解析linuxrc,后面會講到(如果你看了最前面提到的initrd.txt) <BR>也會明白。 <BR> <BR>裁減Linux(9) <BR>接著,用ldd命令看bin目錄下面的各個可執行文件分別都和哪些動態庫連接 <BR>把他們cp到/mnt/lib目錄下,如用ldd看mv命令,結果如下 <BR> <BR> libc.so.6 => /lib/i686/libc.so.6 (0x42000000) <BR> /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) <BR> <BR>把/lib/i686/libc.so.6和/lib/ld-linux.so.2復制到/mnt/lib下面即可。 <BR>libc.so.6是基本的libc庫,好像不同的處理器還不一樣,我就在一臺P-MMX <BR>下面用P2的libc,結果死掉了。查了半天 :( <BR> <BR>iptables命令除了其顯示的以外,還要把/lib/iptables目錄復制到/mnt/lib下面 <BR> <BR>/lib/security下面是PAM需要的庫,最小系統只需要復制/lib/security下面的 <BR>pam_unix.so、pam_stack.so到/mnt/lib/security下面即可 <BR> <BR> 裁減Linux(10) <BR>/etc下面的東西最是麻煩,要改的不是一點點 <BR>/etc/inittab init的配置文件,我改的是這樣的: <BR> <BR>id:3:initdefault: <BR>si::sysinit:/etc/rc <BR>1:2345:respawn:/sbin/mingetty tty1 <BR>2:23:respawn:/sbin/mingetty tty2 <BR>l0:0:wait:/etc/rc0 <BR>l6:6:wait:/etc/rc6 <BR> <BR>呵呵,簡單吧 <BR> <BR>/etc/fstab記錄系統啟動應該mount的文件系統,因為系統在ramdisk上面跑,所以 <BR>是這樣的: <BR> <BR>/dev/ram0 / ext2 defaults 1 0 <BR>none /proc proc defaults 0 0 <BR> <BR> <BR>從inittab里面知道,啟動后執行腳本/etc/rc <BR>我是這樣寫的: <BR> <BR>#!/bin/sh <BR>/bin/mount -n -t proc /proc /proc <BR>/bin/mount -n -o remount,rw / <BR>/bin/mount -av <BR>/bin/hostname MiniLinux <BR>/etc/rc.network <BR>/etc/rc.firewall <BR>/bin/sshd <BR> <BR>第一行mount /proc,第二行把根remount為rw模式(漏了這個害得我查了兩三天) <BR>第三行檢查fstab里面是否還有其他的需要mount的分區,第四行設置主機名 <BR>后面分別根據腳本設置網絡和防火墻,最后開啟sshd服務。 <BR> <BR>裁減Linux(11) <BR>設置網絡在最小系統里面再也不是像/etc/init.d/network start那么簡單, <BR>呵呵,其實也不麻煩。通過命令ip、ifconfig可以很方便的設置。例如rc.network為: <BR> <BR>#!/bin/sh <BR>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -