📄 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 + -