技术改变世界 阅读塑造人生! - shaogx.com

This string was altered by TechBlog\Plugins\Example.; This is an example to show the potential of an offcanvas layout pattern in Bootstrap. Try some responsive-range viewport sizes to see it in action.

Linux裁剪之定制系统

   听到这个标题也许会让人认为不可思议,怎么可以定制自己的系统呢?是的。这就是Linux为什么一直深受广大系统爱好者青睐之一,它可以根据自己的需求来定制自己想要和不想要的。本文就从最基础的开始来搭建属于自己的一个小型OS,并且能够实现开机自动加载网卡,配置IP与其他主机通信。本文暂不做内核编译的操作,不过会在之后陆续补上,尽请期待!实验环境;  宿主机:Centos6.5-64位  目标主机:Centos6.5-64位... 全文

Linux裁剪 linux定制 linux

linux的裁剪

 Linux的裁剪=======================================好些时候,我们需要一个只要一张软盘就能启动Linux 的系统,比如说做路由器。但是我们该怎样做呢? 也就是说我们要把Kernel和FileSystem都做在一张3.5'的盘上。我们先把FileSystem 分解成如下几个部分吧。  1. /bin目录下的文件  bin目录通常是放置系统的一些基本命令文件的目录,要保证你的系统能够正常启动而且能够完成必要的功能,你需要在 /bin目录下放置如下文件:   ksh--->shell是不可少的。   more-->要知道Linux下可没有type命令哦。   dmesg->虽然你很熟悉你的系统硬件,但是有它还是方便多了。   ps---->检查系统进程是管理员的良好习惯。   login->总不至于不要人家登录吧,再说它也是底层系统的构成呀。   sync-->更新磁盘的Block,很有好处啊。   mount->除非你不要文件系统就不需要它。   umount->卸载文件系统的东东。   kill-->杀掉那些无用或停止响应的进程。   setterm->修改终端参数的。   hostname->显示当前机器名字。   telnet->远程登录,你的Linux不会不干点其他的事吧!   ping-->检查网络连接状态。   ftp--->虽然什么也放不下,但是留下它也有好处的。   tar--->备份很重要!即使你的系统只有一个软驱!   killall->shutdown时系统会用它哦。   chmod->修改文件属性的。   chown->修改文件的归属   cp--->拷贝文件,修复系统时可以用啊!   dd--->据说好多管理员常用啊,但是我还真没用过!因为我很少进行介质拷贝。   df--->查看磁盘使用情况。   du--->查看指定路径的占用空间。   ls--->你不会一次都没用过吧!   mkdir->建目录是常事,即使在只有一张盘的情况下!   mv--->移动文件的命令。   rm--->删除文件,万一有多的怎么办?*&^%#它了!   ln--->链接文件,当然有用了!   dircolors-->设定目录的颜色,当你用的是彩显时。   cut-->将文件的一些行送到标准输出设备。   cat-->把标准输入送到文件或把文件送到标准输入   stty-->很重要的终端命令哦!   gzip-->打包和解包的程序   domainname-->查看域名。   还要把一些东西链接起来哦 date@ -> /sbin/clock less@ -> more sh@ -> ksh gunzip@ -> gzip zcat@ -> gzip bash@ -> sh tcsh@ -> sh   2./etc目录下的文件   etc目录是放置系统配置信息的文件目录,同时也放置了一些系统初始化文件。  mtab -->mounted table已经mount的FileSystem列表。   kernel -->系统内核。   issue -->login时的prompt信息 。  profile -->bash下的全域用户登陆时执行的批处理文件 。  psdevtab -->kernel映象的相关文件。  inittab -->初始化列表,系统启动时要用到的东东。  passwd -->用户的password数据库。   motd -->message of today 用户login时显示的信息。   fstab -->开机时要自动mount的FileSystem。   hosts -->domain name到IP的解析文件。   resolv.conf -->本机的IP地址和域名服务器地址配置文件。   termcap -->终端字符映射文件。   services -->系统启动时加载的服务项目。   rpc -->RPC资源解释文件。   protocols -->系统协议说明文件。   networks --> 定义本机IP和子网的配置文件。   mtools -->mtools的parameter文件。   hosts.deny --> 设置那些目的机不能Telnet到此主机。   hosts.allow -->和hosts.deny相反,设置可以Telnet到此机的目的机地址。   exports -->NFS的系统档案。   DIR_COLORS -->设置ansi-color终端的系统颜色。   HOSTNAME -->本机的domain name。   inetd.conf -->inetd进程的配置文件。   ld.so.cache -->系统lib的缓存信息。   shells -->系统可用的shell的记录。  host.conf -->本机的网络相关配置。   magic -->系统内档案格式的资料。   utmp -->当前login用户的记录。   group -->用户组参数记录。   ld.so.conf -->记录一些lib所在的目录。   fastboot -->shutdown命令产生的一个文件,系统重新启动时会检查该文件。  3. /sbin目录下的文件  这个目录下放置一些系统扩展命令:  swapoff@ -> swapon --> 把swapoff连接到swapon命令  telinit@ -> init --> 把telinit连接到init命令  reboot@ -> halt --> 把reboot连接到halt命令  addswap -->增加一个交换分区,需要自己编辑一个addswap脚本  chkhd -->检查硬盘  clock -->测定设置时间  swapon -->打开交换分区   update -->bdflush的守护  mkswap -->格式化交换分区  agetty -->终端守护  init -->系统初始化命令  shutdown -->关闭系统  halt -->系统停机  killall5 -->清出所有进程  ifconfig -->网络配置程序  route -->路由设置命令  bdflushd -->打开buffer回写到磁盘   4. /usr目录下的文件  用户目录,目录下放置了一些用户经常需要使用的程序和一些配置数据   spool@ -> ../var/adm -->连接到/var/adm  tmp@ -> ../var/adm -->连接到/var/adm   adm@ -> ../var/adm -->连接到/var/adm  /usr/bin目录,用户命令文件目录   who -->查询当前登陆用户   superformat -->高级格式化工具  loadkeys -->加载键盘影射表  joe -->一种十分好使的编辑器  uptime -->查看系统从启动到现在的运行时间  finger -->查询用户信息  mcheck -->检查dos系统软盘  tput -->初始化终端或者查询终端信息  traceroute -->检查路由路径  host ->检查当前主机配置信息  split -->分割文件  sleep -->延迟指定时间  setfont -->设置字体  grep -->行查询指令,常常配合管道使用  reset -->重置系统参数  usr/sbin目录下放置了用户需要使用的高级指令,但我们没有使用到,看看磁盘空间,能放些什么自己放吧。  /usr/local目录放置了一些应用程序的配置文件  usr/local/lib目录  lynx.cfg -->lynx浏览器的配置文件    usr/lib目录   es.map -->键盘映射文件  t.fnt -->字体文件  5. /lib目录下的文件2004-01-02 11:23:00ξ芎メ二级(初级)user2100182192852625379109754hover_online0此目录下放置了系统的一些库文件,这里不做解释libgpm.so@ -> libgpm.so.1 libdl.so@ -> libdl.so.1 ld-linux.so.1 libtermcap.so.2 libm.so.5 libc.so.5 libdl.so.1 libgpm.so.1 libtermcap.so.2 libcurses.so.1 ld.so  6. /dev目录,系统设备文件目录,按照标准设备定制。   7. /var目录,主要放置系统参数和配置。 var/adm/ utmp -->空文件,为uucp准备的tmp文件 cron -->空文件,kernel加载时的tmp文件/var/spool/locks目录,放置一些正在运行的程序的临时文件和进程号文件。  8. 其他目录都为空目录,有:/dosa /dosc /iomega /tmp@ -> /dosc/onedisk /root   9. addswap命令脚本脚本,放置在/sbin下。[code]if [ "$1" = "" ]; then $mide=10000 if dd if=/dev/zero of=/tmp/linux.swp bs=1k count=$mida mkswap -c /tmp/linux.swp 2>/dev/null sync 2>/dev/null swapon /tmp/linux.swp 2>/dev/null mida=`cat /proc/meminfo | grep SwapTotal | cut -b16-19 ` echo $mida 'KB aCTiu'arxiu=`ls /dosc/ | grep .swp`[/code]  系统的基本文件系统就介绍完了,下面我们介绍OLD(one disk Linux)系统的具体制作。  介绍完了主要目录和文件的结构,我们对ODL的大概也比较了解了。现在你可以找一个Linux把他裁剪一下,把必要的东西放到一张软盘上,以后用他来启动了你的系统进入Linux了。然后在放进一些需要的软件,如Linux Router,或者其他的小的应用软件,那么他就成了一台小的路由器、代理服务器,你的小玩具,你可以用他上网,读新闻,看信,和浏览。这是多么不可以想象的事情,全不都可以在一张1.44M的软盘系统上实现。  制作ODL的详细过程十分复杂,其基本思想是在一张软盘上做好可以启动的Kernel,然后再将定制的文件系统传到磁盘的剩余空间里,启动时先读前面的让系统boot起来,再读后面的,让系统mount到一个Ramdisk里,然后将定制好的文件系统解压缩,释放到Ramdisk里。这样整个磁盘系统既有kernel,又有FileSystem,自然可以使用一张磁盘启动整个Linux系统。由于篇幅的限制,我们不详细说明全部过程,只把其中最关键的部分,定制文件系统和让系统在无lilo的引导下启动这两个部分做说明(其他目录的相关文件,请按照开始将的文件系统结构建立)。  定制文件系统的过程如下:dd if=/dev/zero of=DEVICE bs=1k count=3000 (分配一段内存空间做RamDisk)mke2fs -m 0 -i 2000 DEVICE (格式化Ramdisk)mount -t ext2 DEVICE /mnt (装载到/mnt目录下)cp -dpR /dev /mnt (将/dev/下的硬件设备拷贝到/mnt/dev下)mkdir /mnt/etc (建立ODL系统配置文件目录)写/mnt/etc/rc.d文件,其内容如下:#!/bin/sh /bin/mount -av/bin/hostname silver写/mnt/etc/fstab 文件,其内容如下:/dev/ram0 / ext2 defaults/dev/fd0 / ext2 defaults/proc /proc proc defaults写入/mnt/etc/inittab文件,其内容如下:[code]id:2:initdefault:si::sysinit:/etc/rc1:2345:respawn:/sbin/getty 38400 tty12:23:respawn:/sbin/getty 38400 tty2[/code]umount /mnt (卸载Ramdisk)dd if=DEVICE bs=1k | gzip -v9 > root.gz 将Ramdisk上的内容写入root.gz让系统在无lilo的引导下启动mke2fs -i 8192 -m 0 /dev/fd0 KERNEL_BLOCKS(KERNEL_BLOCKS为内核部分在磁盘上占的空间大小)mount /dev/fd0 /mntrm -rf /mnt/lost+foundmkdir /mnt/bootmkdir /mnt/dev(建立一些启动时需要的基本文件目录)cp -R /dev/{null,fd0} /mnt/dev (将启动需要的两个设备NULL和fd0拷贝到启动盘中)cp /boot/boot.b /mnt/boot (建立boot的映象文件)cp bdlilo.conf KERNEL /mnt (KERNEL为OLD需要的内核文件)lilo -v -C bdlilo.conf -r /mnt (将lilo信息写到OLD中)其dblilo.conf的内容如下(可以根据需要修改):[code]boot =/dev/fd0install =/boot/boot.bmap =/boot/mapread-writebackup =/dev/nullcompactimage = KERNELlabel = Bootdiskroot =/dev/fd0dd if=KERNEL of=/dev/fd0 bs=1k(将内核KERNEL写到系统的前1024字节,使OLD软盘可以启动系统)dd if=rootfs.gz of=/dev/fd0 bs=1k seek=KERNEL_BLOCKS (将原来定制的文件系统 传到磁盘剩余空间中)[/code]  此时,你做好的这张磁盘就可以直接将系统启动了。`如果你配置好了网络系统,那么网络也可以通过他自动启动。如果你对Linux还不是很了解,自己定制一个系统还比较困难,那么OLD的全部系统映象文件可以在http://linux.apostols.org/guru/wen/...奇的 Linux世界。  值得注意的是:此映象文件是一个德国人所做,其终端键盘为类型不是标准的US键盘,所以我们需要修改他的键盘定义。  系统启动后,在/usr/lib/下有一个es.map文件,我们需要修改它,可以在redhat下拷贝一个default.kmap文件,然后执行/bin/loadkeys default.kmap,此时键盘就可以正常使用了 ... 全文

linux linux的裁剪 职场 休闲

linux系统裁剪

这是自己在2003年初发表与华中白云黄鹤BBS Linux讨论区的一篇文章了,摘录于此,权做一个纪念,顺便更正当中的一些错误。不过文中的一些内容现在看来是有冗余的了,配置文件的理解也不如现在透彻,以后在撰文详述吧,搞一个patch?呵呵 发信站: 武汉白云黄鹤站 (2003年01月14日15:36:07 星期二), 站内信件 小弟近日对Linux进行了小小的裁减,偶有心得,愿大家共享 说到裁减Linux,无非是为了减小磁盘占用或者是为了某些特定场合的应用(如嵌入式系统)。以RedHat 7.3为例,其最小安装仍然达到了300M,这不得不让人对一直号称小而全的Linux系统感到疑惑。 作为自己手中课题的一个铺垫,不久前我尝试了对Linux进行裁减,虽然没有达到预期的一张软盘大小,但结果也相当有吸引力。下面我对此一一做说明。 参考文档: Linux bootdisk-HOWTO:     http://www.linux.org.tw/CLDP/gb/Bootdisk-HOWTO.htmlinitrd introduce on Linux system:    /usr/src/linux-2.4/Documentation/initrd.txt 裁减Linux一般有两种办法,其一是重新生成kernel和文件系统,其二是在原有的系统上删除不必要的文件缩小“体积” 对从一个完整的RedHat 7.3版本而言,其最小安装也有300M,因此,第二个方法是不太现实的。于是重构文件系统和kernel成为了必然。 裁减目标:构成一最小Linux系统担负实验室网关工作,系统载体为硬盘,运行使用RAMDISK,从而减小意外断电造成的文件系统修整消耗提高系统可靠性。 目标平台:P2-400,8G/64M,8139LAN adapt x 2 首先裁减kernel,既然是最小系统,则kernel里所有必须的部件都将直接编译进入内核。但是内核对module的支持需要保留。 如何编译内核,不再累述,具体说说哪些选项先: Code maturity level options ---> 不选 Loadable module support ---> 当中的Set version....的可以不要,其他两个留着 Processor type and features ---> 按照目标系统选择对应的Process Family ,其他的嘛,留下Machine Check Exception、Low Latency....、HIGHMEM Support,其余都可以不要 General setup --->当中,PCI的选上,其他的不要(注意对照你的系统),SYSTEM V IPC、BSD Process accounting、sysctl support留下,Kernel support ELF binary留着,其他的可以不要 Binary emulation of other systems ---> Memory Technology Devices (MTD) ---> Parallel port support ---> 以上三项都是可以不要的 Plug and Play configuration ---> 选上,不过如果没有ISA设备,可以不选对ISA P&P的支持(比如我的目标系统) Block devices --->各取所需了,一般来说,如果你要用软盘,就选上Normal floppy disk support,大多数嵌入式系统是不要的。中间几个也是没有的;Loopback device是一定要的,Network block device我也没把握,可能可以不要不过我选了,呵呵,RAM Disk一定要,Initrd RAM Disk support当然要选。至于Default Ramdisk size就无所谓了,反正可以在启动的时候修改,呵呵。 Multi-device support (RAID and LVM) ---> 这个一般也用不上,不选了。 Networking options --->既然是打算做网关,呵呵,里面大部分东西都要选上而且是[*],编译入内核(前面已经说过了,没有编译为模块的)。从上到下一直选到IP: Virtual Server Configuration --->(从这个开始(含),可以不要了)。 需要说明的是,其中的IP: Netfilter Configuration --->子项即便选择全部编译到内核,似乎并没有什么变化,用iptables的时候一样要iptables的.so支持 :( 不过对irc和ftp的跟踪倒是不需要insmod了 Telephony Support ---> SCSI support ---> Fusion MPT device support ---> I2O device support ---> Amateur Radio support ---> IrDA (infrared) support ---> ISDN subsystem ---> Old CD-ROM drivers (not SCSI, not IDE) ---> 上面几个都不用,为什么RedHat那么大,他们有不小的功劳哟~~~ Network device support --->里面找出你目标系统的网卡(我这里是8139)选上,其他的统统去掉吧。 Input core support --->如果你不是用的USB接口鼠标键盘,可以不用选他们。 Character devices --->这里面我只选了Virtual Terminal以及Support for console on virtual terminal,其他好多东西都没有选。 Multimedia devices ---> Crypto Hardware support ---> 这两个对一般的最小系统来说都是不用的 File systems --->这个是内核大小的大头,ext2(Second extended...)是必要的,ext3也用上吧,/proc有必要,DOS FAT/VFAT(win-95)估计你可能也需要,分区表只要支持PC BIOS就可以了,Native Language我把iso8859-1给内置了 console drivers->我只选了VGA text console Sound ---> USB support ---> Additional device driver support ---> Kernel hacking ---> 这几个都没有选,make dep;make clean;make bzImage 看看吧,内核大概是700~800k左右以前我总以为裁减kernel就是裁减Linux了,后来才发现是大错特错。 以前总以为最难的是裁减kernel,后来才发现自己多么无知。学习裁减内核,大概只用了一两天,编译一次内核也就20分钟不到,可是后来居然重建文件系统花了一两个星期,呜呜~~~ 关于文件系统和kernel的关系,从参考文档里面可以知道,大家自己去看。如果连这个都不懂,建议暂时不要做裁减的事情,以为照着我的文章依葫芦画瓢多半是不能成功的。 首先按照ramdisk的生成方法或者loopback device的生成方法生成一个8M的磁盘挂接到/mnt(或者其他目录)上,就可以以/mnt为根目录构造文件系统。注意将其按照ext2方式格式化 lrwxrwxrwx    1 root     root            4 Dec 28 09:31 bin -> sbin drwxr-xr-x    5 root     root         1024 Dec 27 13:42 dev drwxr-xr-x    7 root     root         1024 Jan  6 15:14 etc drwxr-xr-x    2 root     root         1024 Dec 12 08:33 initrd drwxr-xr-x    4 root     root         1024 Dec 30 06:52 lib drwxr-xr-x    2 root     root         1024 Dec 11 07:52 mnt dr-xr-xr-x   24 root     root            0 Jan  6 15:14 proc drwxr-xr-x    2 root     root         1024 Dec 26 03:03 root drwxr-xr-x    2 root     root         1024 Dec 30 07:28 sbin drwxr-xr-x    2 root     root         1024 Dec 26 03:04 sysroot drwxr-xr-x    2 root     root         1024 Apr 19  2002 tmp drwxr-xr-x    3 root     root         1024 Dec 12 07:45 usr drwxr-xr-x    5 root     root         1024 Dec 12 02:43 var 这几个目录是必须的 先看看bin下面有什么 lrwxrwxrwx    1 root     root            6 Dec 30 07:28 ash -> ./bash -rwxr-xr-x    1 root     root       541096 Dec 30 07:27 bash -rwxr-xr-x    1 root     root        16020 Dec 13 08:56 cat -rwxr-xr-x    1 root     root        16680 Dec 27 15:40 chmod -rwxr-xr-x    1 root     root        36360 Dec 28 09:10 cp -rwxr-xr-x    1 root     root        62756 Dec 28 09:25 ftp -rwxr-xr-x    1 root     root       100624 Dec 28 09:14 grep -rwxr-xr-x    1 root     root         8672 Dec 26 03:27 halt -rwxr-xr-x    1 root     root         9624 Dec 28 09:14 hostname -rwxr-xr-x    1 root     root        54316 Dec 28 09:14 ifconfig -rwxr-xr-x    1 root     root        26920 Dec 12 02:42 init -rwxr-xr-x    1 root     root       105768 Dec 27 13:44 ip -rwxr-xr-x    1 root     root        60764 Dec 28 09:15 iptables -rwxr-xr-x    1 root     root         7764 Dec 26 17:26 kill -rwxr-xr-x    1 root     root        19080 Dec 12 02:25 login -rwxr-xr-x    1 root     root         9172 Dec 11 07:54 losetup -rwxr-xr-x    1 root     root        46888 Dec 13 08:55 ls -rwxr-xr-x    1 root     root        10316 Dec 13 08:37 mingetty -rwxr-xr-x    1 root     root        17992 Dec 27 14:15 mkdir -rwsr-xr-x    1 root     root        60104 Dec 11 07:54 mount -rwxr-xr-x    1 root     root        43496 Dec 28 10:02 mv -rwxr-xr-x    1 root     root        22196 Dec 26 02:09 nash -rwxr-xr-x    1 root     root        29464 Dec 28 09:49 ping -r-xr-xr-x    1 root     root        63304 Dec 26 16:57 ps lrwxrwxrwx    1 root     root            4 Dec 26 03:33 reboot -> halt -rwxr-xr-x    1 root     root        26216 Dec 26 17:35 rm lrwxrwxrwx    1 root     root            6 Dec 30 07:28 sh -> ./bash -rwxr-xr-x    1 root     root        14952 Dec 11 09:44 shutdown -rwxr-xr-x    1 root     root       219932 Dec 28 10:06 ssh -rwxr-xr-x    1 root     root       260616 Dec 27 14:04 sshd lrwxrwxrwx    1 root     root            6 Dec 26 16:48 swapoff -> swapon -rwxr-xr-x    1 root     root  7108 Apr  1  2002 swapon -rwxr-xr-x    1 root     root        27208 Dec 27 14:13 syslogd -rwxr-xr-x    1 root     root        78808 Dec 28 09:30 telnet -rwsr-xr-x    1 root     root        30664 Dec 27 14:23 umount -rwxr-xr-x    1 root     root         7832 Dec 12 01:54 update -rwxr-xr-x    1 root     root       386120 Dec 28 09:13 vi -rwxr-xr-x    1 root     root        13896 Dec 30 06:53 who 这里面包含了ftp、telnet、ssh客户端以及sshd服务器常用的命令和网络设置命令,iptables防火墙,vi编辑器,shell用的是 bash,虽然ash很小但是总是不习惯没有auto complete功能,tcsh不大不小功能又全,可是对一些shell脚本的支持不太好。nash用来解析linuxrc,后面会讲到(如果你看了最前面提到的initrd.txt)也会明白。 接着,用ldd命令看bin目录下面的各个可执行文件分别都和哪些动态库连接把他们cp到/mnt/lib目录下,如用ldd看mv命令,结果如下   libc.so.6 => /lib/i686/libc.so.6 (0x42000000)     /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) 把/lib/i686/libc.so.6和/lib/ld-linux.so.2复制到/mnt/lib下面即可。 libc.so.6是基本的libc库,好像不同的处理器还不一样,我就在一台P-MMX下面用P2的libc,结果死掉了。查了半天 :( iptables命令除了其显示的以外,还要把/lib/iptables目录复制到/mnt/lib下面 /lib/security下面是PAM需要的库,最小系统只需要复制/lib/security下面的pam_unix.so、pam_stack.so到/mnt/lib/security下面即可 /etc下面的东西最是麻烦,要改的不是一点点 /etc/inittab init的配置文件,我改的是这样的: id:3:initdefault: si::sysinit:/etc/rc 1:2345:respawn:/sbin/mingetty tty1 2:23:respawn:/sbin/mingetty tty2 l0:0:wait:/etc/rc0 l6:6:wait:/etc/rc6 呵呵,简单吧 /etc/fstab记录系统启动应该mount的文件系统,因为系统在ramdisk上面跑,所以是这样的: /dev/ram0               /                       ext2    defaults        1 0none                    /proc                   proc    defaults        0 0从inittab里面知道,启动后执行脚本/etc/rc我是这样写的: #!/bin/sh /bin/mount -n -t proc /proc /proc /bin/mount -n -o remount,rw / /bin/mount -av /bin/hostname MiniLinux /etc/rc.network /etc/rc.firewall /bin/sshd 第一行mount /proc,第二行把根remount为rw模式(漏了这个害得我查了两三天),第三行检查fstab里面是否还有其他的需要mount的分区,第四行设置主机名,后面分别根据脚本设置网络和防火墙,最后开启sshd服务。 设置网络在最小系统里面再也不是像/etc/init.d/network start那么简单, 呵呵,其实也不麻烦。通过命令ip、ifconfig可以很方便的设置。例如rc.network为: #!/bin/sh /bin/ifconfig eth0 192.168.0.254 /bin/ifconfig eth1 211.69.200.1/bin/ip route add default via 211.69.200.2 dev eth1 /bin/ip route replace 192.168.0.0/24 dev eth0 scope link /bin/ip route replace 211.69.200.0/24 dev eth1 scope link 前两行设置ip地址,第三行设置缺省网关,后面两行更改本网路由。 rc.firewall的写法大家可以自己参照iptables的HOWTO去完成 /etc/passwd,/etc/shadow,/etc/group记录有系统帐号信息,在最小系统上,我只留了root组(用户)的信息。 裁减Linux过程中,PAM是一个很关键的部分,由于资料不多,很多人束手无策。 如果仅仅要使用最小系统,从console登陆需要修改/etc/pam.d/login,从ssh 上来修改/etc/pam.d/sshd,不妨复制系统原来的配置文件略作修改/etc/pam.d/login为 #%PAM-1.0auth       required     /lib/security/pam_stack.so service=system-authaccount    required     /lib/security/pam_stack.so service=system-authpassword   required     /lib/security/pam_stack.so service=system-authsession    required     /lib/security/pam_stack.so service=system-auth /etc/pam.d/sshd和login的内容一样。从其可知它们调用了system-auth这个服务,则还需要/etc/pam.d/system-auth,内容为: #%PAM-1.0# This file is auto-generated.# User changes will be destroyed the next time authconfig is run.auth        sufficient    /lib/security/pam_unix.so likeauth nullokaccount     required      /lib/security/pam_unix.sopassword    sufficient    /lib/security/pam_unix.so nullok  md5 shadowsession     required      /lib/security/pam_unix.so 关机和重启 关机和重启在完整的Linux下面是有很长的脚本支持的,就像启动脚本/etc/rc.sysinit 等等。但是在最小系统上面,这些都需要自己来写,复制原有系统的肯定不行。 不过从前面/etc/inittab里面可以知道,最小系统上面reboot执行的是/etc/rc6,关机是/etc/rc0,如果不需要“善后”,则很简单,rc6如下: [root@MiniLinux etc]# cat rc6 /sbin/reboot -i -d rc0则为: [root@MiniLinux etc]# cat rc0 /sbin/halt -i -d -p 整个etc目录下的东西列表大致为: [root@MiniLinux etc]# ll total 891 -rw-r--r--    1 root     root         6639 Apr 19  2002 fonts.cgz -rw-r--r--    1 root     root          109 Dec 30 06:19 fstab -rw-r--r--    1 root     root           14 Dec 14 00:10 group -rw-r--r--    1 root     root          146 Dec 27 15:41 inittab -rw-------    1 root     root           60 Jan  6 15:14 ioctl.save -rw-r--r--    1 root     root           57 Dec 12 01:26 issue -rw-r--r--    1 root     root        28436 Apr 19  2002 keymaps.gz -rw-r--r--    1 root     root         3758 Apr 19  2002 kon.cfg -rw-r--r--    1 root     root         1281 Apr 19  2002 lang-table -rw-r--r--    1 root     root         1320 Dec 30 06:55 ld.so.cache -rw-r--r--    1 root     root           18 Dec 12 07:53 ld.so.conf -rw-r--r--    1 root     root        54692 Apr 19  2002 loader.tr -rw-r--r--    1 root     root         1180 Dec 23 09:07 login.defs -rw-r--r--    1 root     root        30303 Apr 19  2002 minikon.fnt -rw-r--r--    1 root     root            0 Dec 13 23:39 mtab -rw-r--r--    1 root     root          270 Dec 23 04:03 nsswitch.conf drwxr-xr-x    2 root     root         1024 Dec 30 04:48 pam.d -rw-r--r--    1 root     root           28 Dec 30 06:29 passwd -rwxr-xr-x    1 root     root          401 Dec 30 07:43 profile -rw-r--r--    1 root     root        12359 Apr 19  2002 ramfs.img lrwxrwxrwx    1 root     root            7 Dec 26 03:03 rc -> rc.d/rc drwxr-xr-x    2 root     root         1024 Dec 27 15:33 rc.d -rwxr-xr-x    1 root     root         2631 Jan  6 02:18 rc.firewall -rwxr-xr-x    1 root     root          246 Jan  6 02:17 rc.network -rwxr-xr-x    1 root     root           20 Dec 27 15:38 rc0 -rwxr-xr-x    1 root     root           19 Dec 27 15:39 rc6 -r--------    1 root     root           59 Dec 30 06:20 shadow drwxr-xr-x    2 root     root         1024 Dec 26 06:37 ssh -rw-r--r--    1 root     root       737535 Dec 23 10:18 termcap 其中目录ssh为sshd的配置文件,复制原来机器上的即可。其他的大部分文件都是按照HOWTO上面提到的一些必备文件复制的。 nsswitch.conf是系统寻找一些配置文件的配置文件,呵呵,很拗口,man nsswitch.conf看看吧,稍作修改为: [root@MiniLinux /]# cat etc/nsswitch.conf passwd:     files shadow:     files group:      files hosts:      files services: &nbsp; files networks:   files protocols:  files rpc:        files ethers:     files netmasks:   files bootparams: files automount:  files aliases:    files netgroup:   files publickey:  files  profile文件是bash shell的登陆脚本,主要为了限制历史命令记录大小 [root@MiniLinux etc]# cat profile # /etc/profile # System wide environment and startup programs, for login setup # Functions and aliases go in /etc/bashrc HISTSIZE=1000 HISTFILESIZE=20 PATH=/bin PS1='[\u@\h \W]\$ ' HOSTNAME='/bin/hostname' export PATH HISTSIZE HISTFILESIZE HOSTNAME PS1 alias l.='ls -d .[a-zA-Z]* --color=tty' alias ll='ls -l --color=tty' alias ls='ls --color=tty' alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' 关于/dev目录 完整linux的/dev目录下有很多设备文件,不过仔细辨别一下就会发现很多其实 用不上。我列出在我的最小Linux下面用到的设备文件: [root@MiniLinux dev]# ls agpgart  hda   hda6     input  loop3     psaux  ptyp3  ram3  tty3   ttyp4console  hda1  hda7     kbd    loop4     ptmx   ptyp4  ram4  tty4   urandomfb       hda2  hda8     kmem   loop5     pts    ram    shm   ttyp0  zerofb0      hda3  hda9     loop0  mem       ptyp0  ram0   tty0  ttyp1fd0      hda4  initctl  loop1  null      ptyp1  ram1   tty1  ttyp2fd1      hda5  initrd   loop2  openprom  ptyp2  ram2   tty2  ttyp3其中input、shm、pts是目录,似乎是系统自己生成的,fb连接到fb0,ram连接到ram0 ,关于硬盘的保留了hda?,loop[0-5]用于支持回环设备(loopback devices),tty[0-4]用于支持主机直接操作,ttyp[0-4] & ptyp[0-4]用于共同支持ssh登陆,ram?用于支持虚拟盘,urandom是sshd服务必须的设备。所有的设备文件均可以用cp -dpR从原系统的/dev目录下复制过来。 关于linuxrclinuxrc 是一个在initrd.img里面展开后直接自动执行的一个脚本。关于这个脚本的用途,建议大家读一下/usr/src/linux-2.4 /Documentation/initrd.txt,我也是直接把系统提供的initrd-2.4.18-3.img里面带的linuxrc拿来用而已: [root@MiniLinux /]# cat linuxrc #!/bin/nash echo Mounting /proc filesystem mount -t proc /proc /proc echo Creating root device mkrootdev /dev/root echo 0x0100 > /proc/sys/kernel/real-root-dev echo Mounting root filesystem mount --ro -t ext2 /dev/root /sysroot umount /proc pivot_root /sysroot /sysroot/initrd 注意,它用的shell是/bin/nash,而不是通常用的/bin/sh,大家man nash可以看到很多有意思的东西。 最后的一些工作 当你把一个文件虚拟为一个磁盘并挂接在系统上,复制了需要的可执行文件、库文件、配置文件并做了必要的修改之后,一个文件系统基本上已经成形了。 前面列出的最小系统的目录,如果没有特别提到都是留空的。这里要说的,最后的工作就是如何把kernel和文件系统结合起来。 我看到过很多讲一张或者两张软盘启动的linux,里面都提到用rdev定位文件系统,还要如何如何算。我是看明白了,不过觉得特别繁琐,就投机取巧了一番。 首先假定刚才我们挂载的根文件系统是挂载到现在的/mnt目录下,文件名是/root/newfs则首先umount #umount /root/newfs 接着将newfs压缩 #gzip -v9 /root/newfs 此时会生成newfs.gz,接着rename: #mv newfs.gz newfs.img 把它和前面编译的内核bzImage放到/boot目录下去。 我用的Linux引导器是grub。为什么不用LILO?我基本上没有用过LILO,是出道很晚很晚的Linux使用者,从grub的介绍上我发现它比LILO功能强很多,使用新内核不需要像grub那样重新安装,而且内置支持一些常见的文件系统。 看看/boot/grub/grub.conf吧,在其中增加一段: title Test Combine        root (hd0,4)        kernel /bzImage ro ramdisk_size=8192 root=/dev/ram0        initrd /newfs.img 当然,你不可照抄我的配置,需要按照你的系统更改root (hd?,?),如果你建立的文件系统(未压缩前)容量是其他数值的,请用合适的值替代8192,单位是KB(还记得我前面说过的编译内核的时候不需要刻意更改缺省ramdisk容量吗?就在这里指定即可) 好了,可以试试裁减以后的系统了。大概有多大呢?我裁减出来的系统内核大约是<800k,文件系统8M,压缩成.img的是约3M,很小吧。感想 及 说明 先说说这个最小Linux的启动过程。grub将内核载入以后,让内核将newfs.img载入内存并展开(自动展开到/dev/ram0)为临时根文件系统,此时执行/linuxrc,在linuxrc中又指定了新的文件系统。接着内核按照grub带入的参数root=/dev/ram0作为根文件系统正式init,此时/dev/ram0中的内容正是newfs.img的内容(如果你仔细观察的话,会发现完整linux启动过程中有Unmounting initrd....的字样,说明initrd.img是在进入init脚本的过程中才被卸载的),按照/etc/inittab脚本执行,缺省为 runlevel 3,执行/etc/rc,最后由mingetty启动login完成引导。 我个人感觉,/linuxrc里面的脚本似乎对内核正式init时的根分区指定没有多少影响,并不像/usr/src/linux-2.4/Documentation/initrd.txt 里面linuxrc例子那样要求严格。好像决定正式init根分区的是由grub带入内核的参数root=... 来决定的更多。有经验的大侠请多指点。 经过这次实验,感受颇多。首先对linux引导过程以及/etc下面的很多配置文件有了深入了解。Linux可改变的弹性很大,不过也需要大家沉得住气,慢慢去研究,man、HOWTO等等是少不了看的,第一手的资料还是man和英文HOWTO最权威,其次,缩减以后的大小让人非常振奋,裁减以后,系统加载重启登陆的速度都变得非常快,很多东西简直就是一眨眼就过去了。 文末,感谢各位耐心看完,不对之处请斧正。本人也是linux的新手,万望海涵。 - ... 全文

linux linux系统裁剪 职场 休闲

linux裁剪(DOM上)

项目基本结束,这个是其中系统裁减的一个总结文档,不知道有没有人感兴趣:)=============================================前言:为了完成用户的需求,需制作一个完整的环境供AP运行,且存在一些约束条件。关键字:DOM Kernel Busybox X-Window Window-Manager Interbase nvidia cutdown目标说明:在一个64M的DOM(Disk on module)上建立可以运行完整的AP的环境约束条件:1、可利用的总空间为64M,由DOM提供,但实际可用空间只有53-59M,原因可能与设备文件和DOM本身有关,未确定2、显卡为nvidia系列3、kernel选用2.4.20,没有使用redhat自带的版本。采集卡的Driver目前还只能在2.4.20的kernel下编译,由于其移植性较差,已经开始考虑重新整理成可适合kernelversion大于2.4.25的所有kernel,参考bttv的最新实现4、数据库选用interbase系列,目前使用的为firebird-1.5(firebird为interbase的开源实现,接口和interbase基本相同)。5、其他附属的功能要求,在后面的文档中会有说明制作流程:某些部分的原理和实现没有办法写的很全面,但基本上会提供一些url的连接,供相关人员参考。基本上按照制作流程来写,前后相互牵连的部分不做特别说明。一、Kernel的选择和编译:由于driver的缘故,只能使用2.4.20的kernel。2.4.20和2.4.25都有对Driver做过尝试,其他版本的kernel没有试过,应该是可以的,尚未确认。在2.6的kernel上无法编译,目前确定的原因是makefile有问题,估计做一些相应的修改还是可以的,可参考bttv的makefile(http://linux.bytesex.org/v4l2/bttv.html)。回到kernel上来,基本上的编译原则是尽量减去不需要的部分,以及除了一些需要临时加载的Driver尽量不要出现module。由于上面所说的理由,DOM中使用的kernel为原始的2.4.20,可以从http://www.kernel.org下载,本文档的附加文件里也可以找到。另外,由于需求的定义,系统启动时需要显示splash画面,所以kernel还需要加入bootsplash功能,这个功能是第三方提供的,作为补丁加入kernel。作法如下:1、打内核补丁并编译内核假设内核源文件安装在/usr/src/linux/。下载bootsplash 3.07(地址:ftp://ftp.suse.com),然后:yourbox:~ # cd /usr/src/linuxyourbox:/usr/src/linux # patch -p1 < /path/to/bootsplash-3.0.7-2.4.20-vanilla.diffyourbox:/usr/src/linux #配置内核,如make menuconfig或make xconfig,在”Console drivers” -> “Frame-Buffer support” 选择 “VESA VGA graphics console” 或其他与你的显卡相应的驱动。打开 “Use splash screen instead of boot logo”. 在 “Block Devices”中打开”Initial Ramdisk support”,保存配置并编译内核,将生成的内核拷到/boot 下,并修改lilo或grub的配置文件以使用新的内核来启动。2、加入图片下载并安装splash工具:ftp://ftp.suse.com/pub/people/# cd ~/splash# tar xvjf splashutils.tar.bz2splashutils/splashutils/Makefilesplashutils/splash.c[..]splashutils/ChangeLogsplashutils/COPYING# cd splashutils# make splashgcc -Os -Wall -c -o splash.o splash.c gcc -Os -Wall -o splash splash.ostrip splash# cp splash /sbin/# cd ..将图片及相关的信息加入到initrd中去:/sbin/splash -s -f /etc/bootsplash/themes/yourtheme/config/bootsplash-1024x768.cfg >> /boot/initrd.splash图片在附件文件中3、运行lilo更新配置文件(grub就不用更新了),重新启动,如果一切正常,就可以看到启动画面了。同时会有这样一些信息:vesafb: framebuffer at 0xf0000000, mapped to 0xdc816000, size 65472k vesafb: mode is 1024x768x16, linelength=2048, pages=41 vesafb: protected mode interface info at c000:5137 vesafb: scrolling: redrawvesafb: directcolor: size=0:5:6:5, shift=0:11:5:0 Looking for splash picture.... silenjpeg size 11165 bytes, found (1024x768, 4912 bytes, v3) Got silent jpeg.kernel的config文件比较大,在附件中有,这里就不列举了。编译过程:1、获取2.4.20的原始kernel压缩包(linux-2.4.20.tar.bz2) 2、tar xvjpf linux-2.4.20.tar.bz23、cp config-2.4.20 (kernelsource)/.config #拷贝config-2.4.20到kernel source所在目录中并以.config为新的文件名4、cd (kernelsource)5、make menuconfig #不需要做任何改动,直接退出 6、make dep && make bzImage && make modules && make modules_install && make install 7、如果没有问题,继续下一步,如果有问题,请检查编译环境是否正确,并重复step 6 8、此时kernel已经编译完毕,需要做两件事情,一是保存将来放入DOM的文件,二是将当前的发行版的kernel换成2.4.20,以便后面的nvidia显卡dirver的正确编译。 9、创建一个保存目录,比如~/kernelbackup 10、cp (kernelsource)/arch/i386/boot/bzImage ~/kernelbackup # 保存kernel 11、cp /lib/modules/2.4.20 ~/kernelbackup/ -arf # 保存编译出的所有modules 12、如果当前的发行版使用的是grub,则修改/boot/grub/grub.conf(如果没有这个文件可以修改/boot/grub/menu.lst,都是一样的),如果是lilo,修改/etc/lilo.conf。下面是grub的修改说明,lilo的修改办法可以参考相关文档:# add below to your grub.conftitle new kernel(2.4.20) # title just, u can modify it anywhereroot (hd0,0) # root setupkernel (hd0,0)/boot/bzImage-2.4.20 ro root=/dev/hda1 vga=791 splash=silent # just.....initrd (hd0,0)/boot/initrd.splash # splash that show when booting of OS13、reboot14、选择新的启动选项,检查是否正确二、Shell的选择和编译:到目前为止,kernel的裁减基本上结束,下面是shell的选择和编译。对于linux而言,kernel只是提供系统调用接口,本身无法直接使用,需要外部shell的支持。一般shell有几种选择,如bash、ash、busybox等,由于busybox相对尺寸最小,而且提供了基本完整的功能,所以选择busybox做为系统的shell。详细信息参阅www.busybox.net,附件中有目前使用的busybox版本。busybox的流程主要是编译和安装,从而联合kernel组成一个基本系统。 busybox的配置文件在附件中有,这里就不列举了。编译过程:和kernel基本相似1、解压busybox2、复制config到busybox源码目录下3、make menuconfig #不做改动即可退出4、make dep && make三、基本系统的安装:到此时,busybox和kernel都已经准备完毕,接下来需要一个分区来安装他们。不管是使用一个单独的分区还是完整的DOM都可以,但总归需要一个完整的目标分区供使用。假设目标分区为/dev/hdc1,下面的说明会以此为基准。需要说明的一点是,一开始尽量不要用DOM直接调试,因为其速度和容量都十分的不好,会造成调试的困难,直到调试后期再使用是个比较不错的主意。现在进入基本系统的组装:# fdisk /dev/hdc1 and format it with ext2 or ext3. My suggest is ext3.Mount /dev/hdc1 /mnt/dom # mount目标分区 mkdir /mnt/dom/bootmkdir /mnt/dom/boot/grubcp (kernelbackup)/bzImage /mnt/dom/boot # copy kernel to domcp (kernelbackup)/initrd.splash /mnt/dom/boot # copy initrd splash to dom mkdir /mnt/dom/libmkdir /mnt/dom/lib/modulescp (kernelbackup)/2.4.20 /mnt/dom/lib/modules -arf # copy all modules to dom cd (busyboxpath)make PREFIX=/mnt/dom install # install busybox to dom现在,一个基本系统基本安装完毕,接下来是配置问题: mkdir /mnt/dom/etc # all config heremkdir /mnt/dom/dev # device filemkdir /mnt/dom/mntmkdir /mnt/dom/procmkdir /mnt/dom/tmpmkdir /mnt/dom/varmkdir /mnt/dom/libmkdir /mnt/dom/root # home of rootmkdir /mnt/dom/usr # X window-manager lib, etc cp (busyboxpath)/examples/bootfloppy/etc/* /mnt/dom/etc -arf # base config cp /dev/* /mnt/dom/dev -arf # device file. Will cutdown part of all下面是加入必需的连接库:1、ldd busybox2、查看busybox使用了哪些连接库,拷贝至目标分区中同样的路径下,一般为/lib 3、再用ldd查看连接库是否还有需要的库文件,如果有同样拷贝到目标分区中 4、重复第三步5、cp /dev/* /mnt/dom/dev/ -arf # 后期还会做一些裁减Grub配置:# add below to your grub.conftitle new kernel(2.4.20) # title just, u can modify it anywhereroot (hd0,0) # root setupkernel (hd0,0)/boot/bzImage-2.4.20 ro root=/dev/hda1 vga=791 splash=silent # just.....initrd (hd0,0)/boot/initrd.splash # splash that show when booting of OS现在可以做一些测试,看看基本系统是否工作正常。执行下面的命令 cd /mntmkdir dommount /dev/hdc1 dom # mount itchroot /mnt/dom /bin/sh如果你看到登陆成功的信息就表示基本系统没有什么问题了。重新启动机器,并选择新的启动选项,看看基本系统是否正常,如果有问题,重新检查前面的步骤是否做的有问题。如果启动正常,那么,基本系统就基本完备,可以继续后面的步骤了。四、Xfree86的裁减和安装:基本系统已经正常工作,接下来就是xfree86的裁减和安装,首先切换到目标分区并确定系统处于正常工作状态。在这里需要说明一下Linux的目录分布和作用情况。首先通过“ls /”列举一下根分区,大致会有以下目录:bin boot dev etc home lib mnt opt proc root sbin tmp usr var 下面逐一说明:bin: shell的工作目录,比如sh、bash、mount等命令 boot: kernel、ramdisk文件以及grub(lilo)的存放目录,有的发行版会为此目录单独创建一个分区,以防止系统崩溃的影响。在DOM中是不考虑的。 dev: 所有的设备文件都存放在这里,比如/dev/video0、/dev/hda等。全部设备文件大概要占用400K左右的空间,但似乎全部拷贝过来的话,DOM总是会报空间不足,但实际还是有空间的,原因不明。目前的做法是对设备文件做了一些调整,去除了不需要的部分,参考后面的文件列表。 etc: Ap配置以及系统配置存放目录home:普通用户的工作目录根lib:基本库存放目录mnt:mountopt:看情形,目前是用做存放firebirdproc:系统工作所需的目录root:一般为root的工作目录,可以调换sbin:常规命令存放目录tmp:一般为临时目录usr:所有扩展命令和xfree86,以及window-manager所在目录,是系统最大的一个目录,包含内容最多。对于DOM来说,主要是存放连接库、xfree86、字体、window-manager等。Var:临时目录,一般在发行版中为存放website文件、安装文件以及一些log信息等,在DOM中只作为临时目录使用大致的分布情况说明完毕,接下来就是具体的裁减工作了。实际上,xfree86有一些替代实现,比如freedesktop、fb等,甚至framebuffer也是一个可以考虑的方向,但是由于AP使用了nvidia显卡提供的opengl 1.3接口,导致目前的唯一选择就是xfree86。也许有其他更小的实现,希望能在以后改进。进入正题,xfree86的主程序实际上就是一个XFree86,位于/usr/X11R6/bin,有的发行版下X是一个指向XFree86的连接,有的却是一个完整的程序,但不管怎么样,Xfree86就是最主要的程序。现在,在目标分区上mount发行版,以便可以拷贝我们所需要的: cd /mntmkdir dist # create mount path of distribute mount /dev/hda1 dist # /dev/hda1 is root partition of your distribute. Check it.现在/mnt/dist就是发行版所在的位置。mkdir /usr/X11R6mkdir /usr/X11R6/binmkdir /usr/libmkdir /usr/X11R6/lib创建一些需要的目录。cp /mnt/dist/usr/X11R6/bin/XFree86 /usr/X11R6/bin -arf 拷贝xfree86的主程序。cp /mnt/dist/usr/bin/ldd /sbin # copy ldd that is used to cutdown ldd是用来在DOM的环境中做裁减工作的,直接输入ldd看看是否可以运行,如果执行有问题,一般是相关的连接库不全,按照之前的方法复制过来就可以了。 现在,要查看XFree86需要哪些连接库和配置文件,以保证其可以运行起来。 cd /usr/X11R6/binldd Xfree86此时会看到很多的连接库,那么就需要把这些库全部从发行版上复制过来,可以直接复制到相对应的目录下,比如/usr/lib/或者/usr/X11R6/lib/下,需要注意的一点是,有些库本身还会需要其他的库,可以一层层的ldd出来,网络中有人做过自动工作的工具,但还是手动裁减比较可靠。全部的库导入完毕后,尝试运行/usr/X11R6/bin/XFree86,会看到一些出错信息,提示/etc/X11/XF86Config不存在,那么就将发行版中的/etc/X11目录全部复制到目标分区中:cp /mnt/dist/etc/X11 /etc -arf实际上这个目录中不是全部都需要的,某些部分是可以删除的,但我没有具体实验,而且尺寸并不是很大,就全部使用了。现在再执行/usr/X11R6/bin/XFree86,会提示一些库没有找到,但实际上之前已经全部复制过来了,原因是从shell执行一条命令的时候,命令所需要的库是从以下的途径得到的:1、搜索/lib2、搜索/etc/ld.so.cache之前所复制的库文件大半是放在/usr/lib和/usr/X11R6/lib下的,而且现在的/etc下还没有ld.so.cache文件,要生成这个文件就需要ldconfig这个命令:cp /mnt/dist/sbin/ldconfig /sbin -arf现在ldconfig是有了,但还需要与之有关的配置文件/etc/ld.so.conf,所以: vi /etc/ld.so.conf/usr/lib/usr/X11R6/lib现在执行ldconfig,就会在/etc/下出现一个ld.so.cache。以后如果有新加入的库文件,而且不是存放在/lib/下的,都按照这个步骤来导入。现在,执行/usr/X11R6/bin/XFree86,出现的错误提示为无法打开/var/kdb和/var/log。这里需要说明配置上的一个修改,cat /etc/fstab,会看到现在的fstab只有一句话: none /proc proc defaults 0 0 现在要加入一些新的配置,新的fstab如下: proc /proc proc defaults 0 0none /var tmpfs defaults 0 0none /tmp tmpfs defaults 0 0none /dev/pts devpts gid=5,mode=620 0 0 none /data tmpfs defaults 0 0现在/var、/tmp和/data都是在内存中了,其中/data是将来mount磁盘的地方,需要手动mkdir出来:mkdir /data现在修改/etc/init.d/rcS:#! /bin/sh/bin/mount -amkdir /var/logmkdir /var/libmkdir /var/lib/xkb重启DOM,现在应该存在/var/log、/var/lib、/var/xkb目录了,当然这些目录只是存放在内存中,所以需要每次启动时临时创建。再运行XFree86,应该会看到一个错误的提示,说明还需要opengl的一些连接库,从发行版中复制出来就可以了。尝试在目标分区中执行/usr/X11R6/bin/XFree86,如果没有进入X界面,需要检查之前的步骤是否有没有做对的地方。五、Window-Manager的选择安装:到目前为止,X已经完全移植到DOM中了,但一个包含基本系统和X的系统还不能满足AP的要求,接下来是Window-manager的选择和安装。kde和gnome是无法安装到DOM中的,尺寸太大,可能的选择包括twm、fluxbox、windowmaker、icewm等,但需要满足以下几个条件:1、有caption,而且Modal dialog不能被切到后台,以符合用户的操作习惯2、X上不能有任何多余的部分,即除了AP,不存在任何UI,如taskbar之类 3、尺寸要小4、最好不要有system menu和system buttons 经过挑选,最终选择了fluxbox作为DOM的window-manager,尺寸相对其他window manager要大一些(10M),但是较好的满足了以上条件。安装过程:1、下载fluxbox2、./configure3、make4、make install5、复制相关文件到DOM的相同目录中6、测试,如果有问题,重复第一步等window manager安装完毕后,一个包含基本系统和window的环境就创建成功了。接下来就是一些附属部件的裁减和安装了。六、其他部件的裁减和安装:先切换到发行版。最后定义的数据库引擎为Firebird 1.5,所以先下载firebird 1.5(http://prdownloads.sourceforge.net/f...-0.i686.tar.gz),然后在发行版上先安装。firebird会安装在/opt目录下,将/opt/firebird复制到目标分区中:cp /opt/firebird /mnt/dom/opt -arf然后修改配置文件:vi /mnt/dom/etc/init.d/rcS#! /bin/sh/bin/mount -amkdir /var/logmkdir /var/libmkdir /var/lib/xkb/opt/firebird/bin/fb_lock_mgr &/opt/firebird/bin/fb_inet_server &现在切换到目标分区中,会看到进程列表中有一个fb_lock_mgr,这说明firebird已经安装成功。由于实际的裁减过程中会遇到各种各样的问题,有些方面牵涉太广,以至没有办法单独说明,所以接下来是一些可能会遇到的问题说明:1、nvidia的驱动需要先在发行版上解开,再执行make && make install > install,然后修改install中的目标路径以将相关文件安装到DOM上,比如cp libGL.so /usr/lib改为cp libGL.so /mnt/dom/usr/lib。具体操作就不列举了。2、busybox的mount有问题,不能mount -o loop,所以cramfs的文件需要用发行版的mount,所以在dom的/mnt/cramfs目录下有一个mount,而/bin也有一个mount3、为了便于调试,在dom中加入了telnet server和ftp client,分别使用的是utelnetd和cmdftp,出处可以通过google搜索4、grub的安装使用grub-install即可5、由于firebird等模块至少需要一个root用户,而busybox缺省是没有用户的,所以需要在/etc下复制两个文件:shadow和passwd6、dhcp client使用的是udhcpc7、字体主要和以下目录有关:/usr/lib/gconv、/usr/lib/locale、/usr/X11R6/lib/X11/font和/usr/X11R6/lib/X11/locale(限于redhat,其他发行版会有一些差异,但具体内容是一样的)8、硬件自检使用的是hwsetup,并对源代码做过一些修改,只保留了audio和network card的检测,在附件里有原始和修改过的两个版本,可以对比参考9、web site功能是用kylix自己实现的,没有使用apache10、由于dom的空间不足以摊平所有文件,所以/usr下面的文件全部都是以一个cramfs文件的格式出现的,参看后面的文件列表。七、DOM的最后安装和打包:cramfs文件的创建:1、确定目标分区的可运行2、确定/mnt/dom/usr/目录下的文件完整性3、mkcramfs /mnt/usr.cramfs /mnt/dom/usr # make a cramfs file of usr path4、保存/mnt/dom下的完整列表,以备将来的修改5、rm /mnt/dom/usr/* -rf6、mkdir /mnt/dom/mnt/cramfs7、cp /mnt/usr.cramfs /mnt/dom/mnt/cramfs8、cp /bin/mount /mnt/dom/mnt/cramfs -arf9、add /mnt/dom/etc/init.d/rcS:/mnt/cramfs/mount -o loop -t cramfs /mnt/cramfs/usr.cramfs /usr现在,/mnt/dom目录下就已经是一个除了grub全部都是完整的DOM镜像了。那么最后要将这个镜像导入真实的DOM之中:mkdir /mnt/realdommount /dev/hdc1 /mnt/realdom # assume /dev/hdc1 is real domcp /mnt/dom/* /mnt/realdom/ -arfsync此时DOM中已经有了一个完整的镜像,但还没有grub,那么执行:grub-install /dev/hdc1重新启动,并在BOIS中选择真正的DOM,确认DOM的启动没有问题。重新切换到发行版,开始做DOM的镜像文件:dd if=/dev/hdc of=domfs # domfs is image of dom保存好这个名字为domfs的镜像文件,这就是一个可安装的包,安装到其他DOM中时,输入:dd if=domfs of=/dev/hdc到目前为止,所有的流程都走了一遍,剩下的就是不断的实践和验证了。后记:经过一次完整的裁减过程,很自然的对Linux的整体结构和方式有了很清晰的了解,虽然不能对kernel有深入了解,但是起码为以后kernel方面的学习打下了很好的基础。由于牵涉方面比较多和杂,有些部分只能是实践过后才能知道其中的诀窍,当然大体的过程是一样的。... 全文

linux linux裁剪 职场 休闲

嵌入式linux系统裁剪

花了几天的时间,终于把系统从近200 MB裁到小于16 MB, 虽然现在看来过程非常简单,对于最初的那点恐惧觉得有点可笑。在这里把主要心得写一下,总结一下心得, 希望可以给相关人员一点参考。     主要步骤如下:    1. 充分了解系统    这有点像废话,但是确实很重要,特别对不是自己负责的模块,需要花点时间去在调研。最初觉得不好下手是没有对系统进行足够的了解,并不知道它为什么会这么庞大,但当你了解之后,就会信心倍增。    可以借助 du * | sort -n 按大小对文件或者目录进行排序, 从大到小依次裁剪。    2. UI 裁剪     一般来说,UI占用了整个系统最多的存储空间。SDK包括的东西都是一般比较全的,不同的产品有不同的需求。如QT,有网络,各种数据库,多种语言和字体的支持,以及为了保持向下兼容的冗余的库等,使得整个系统非常庞大。根据产品特性在此基础上删减是最有效果的。     3. 文件系统选择    文件系统包括根文件系统和应用程序的文件系统,嵌入式linux系统存储结构一般为:    {boot loader} {kernel } { rootfs } { application filesystem }    选择一个压缩率高的文件系统可以使系统变得非常小。   对于嵌入式设备来说,文件一般存储在flash里面,常用的文件系统主要有:      cramfs, squashfs, jffs2, yaffs2    各有特点,前二者是只读的,压缩率都比较高,后二者是可写的,jffs2压缩率比前二者稍差,Yaffs2最差。如果对空间要求比较高的系统,squashfs是比较好的选择,若需要支持可写,则squashfs + jffs2是比较合适的。        4. Kernel裁剪    kernel的裁剪相对简单,把不用的模块, driver去掉, 还可以把一些driver以module形式编译,放到rootfs中。编译kernel时,一般会生成未压缩的和经过压缩的kernel, 烧到falsh时选择压缩过的。    最后,提醒一下,在制作文件系统之前,别忘了对可执行文件和动态库进行strip操作。... 全文

嵌入式linux系统裁剪 linux 休闲 职场

Linux内核裁剪的步骤

Linux内核裁剪的步骤在menuconfig中配置,可以对进行Linux内核配置选项及删改。本文介绍详细配置方法。第一部分:全部删除Code maturity level options ---> 代码成熟等级选项[]Prompt for development and/or incomplete code/drivers 默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动.不选。第二部分 :除以下选项,其它全部删除General setup—〉System V IPC (IPC:Inter Process Communication)是组系统调用及函数库,它能让程序彼此间同步进行交换信息。某些程序以及DOS模拟环境都需要它。为进程提供通信机制,这将使系统中各进程间有交换信息与保持同步的能力。有些程序只有在选Y的情况下才能运行,所以不用考虑,这里一定要选。第三部分:除以下选项,其它全部删除Loadable module support ---> 可引导模块支持 建议作为模块加入内核[] Enable loadable module support 这个选项可以让你的内核支持模块,模块是什么呢?模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块了,否在无法启动系统。[]Automatic kernel module loading 一般情况下,如果我们的内核在某些任务中要使用一些被编译为模块的驱动或特性时,我们要先使用modprobe命令来加载它,内核才能使用。不过,如果你选择了这个选项,在内核需要一些模块时它可以自动调用modprobe命令来加载需要的模块,这是个很棒的特性,当然要选Y喽。第四部分:全部删除Block layer-----〉块设备第五部分:除以下选项,其它全部删除Processor type and features ---> 处理器类型Subarchitecture Type (PC-compatible) ---> 这选项的主要的目的,是使Linux可以支持多种PC标准,一般我们使用的PC机是遵循所谓IBM兼容结构(pc/at)。这个选项可以让你选择一些其它架构。我们一般选择PC-compatible就可以了。Processor family(386) : 它会对每种CPU做最佳化,让它跑的好又快,一般来说,你是什么型号的就选什么型号的就好。我选的是386,这样内核会省下不少空间第六部分:除以下选项,其它全部删除Power management options (ACPI, APM) ---> 电源管理选项[ ] Power Management Debug Support 电源管理的调试信息支持,如果不是要调试内核有关电源管理部份,请不要选择这项。ACPI Support ---〉高级电源接口配置支持,如果BIOS支持,建议选上这项[]Button 这个选项用于注册基于电源按钮的事件,比如power, sleep等,当你按下按钮时事件将发生,一个守护程序将读取/proc/acpi/event,并执行用户在这些事件上定义的动作比如让系统关机。可以不选择,根据自己的需求。第七部分:除以下选项,其它全部删除Bus options (PCI, PCMCIA, EISA, MCA, ISA) ---> 总线选项[]PCI supportPCI access mode (Any) ---> PCI外围设备配置,强列建议选Any,系统将优先使用MMConfig,然后使用BIOS,最后使用Direct检测PCI设备。第八部分:除以下选项,其它全部删除Executable file formats --->Kernel support for ELF binaries ELF是开放平台下最常用的二进制文件,它支持不同的硬件平台。一定要选。第九部分:除以下选项,其它全部删除NetworkingNetworking options --->[]Unix domain sockets[]TCP/IP networking第十部分:除以下选项,其它全部删除Device Drivers --->设备驱动Block devices-------〉[]Compaq SMART2 support[] Compaq Smart Array 5xxx support[]Loopback device support 大部分的人这一个选项都选N,因为没有必要。但是如果你要mount iso文件的话,你得选上Y。这个选项的意思是说,可以将一个文件挂成一个文件系统。如果要烧光盘片的,那么您很有可能在把一个文件烧进去之前,看看这个文件是否符合IS09660的文件系统的内容,是否符合您的需求。而且,可以对这个文件系统加以保护。不过,如果您想做到这点的话,您必须有最新的mount程序,版本是在2.5X版以上的。而且如果您希望对这个文件系统加上保护,则您必须有des.1.tar.gz 这个程序。注意:此处与网络无关。建议编译成模块[] RAM disk supportSCSI device support ---> 里面有关于USB支持的,要选择[]SCSI device support USB要用,必须选择[]legacy /proc/scsi/ support USB要用,必须选择[]SCSI disk support USB要用,必须选择SCSI Low-level drivers[]Serial ATA(SATA) support[]Intel PIIX/ICH SATA support  这个必须选择,否则无法产生引导文件[]Via SATA supportNetworking device support ---> 这个下面是选网卡驱动,一定要选Ethernet(1000mbit)-我的电脑是千兆网卡所以就选这个[]broadcom Tigon3supportInput device support ---> 这个里面要设置你的鼠标键盘什么的[]Provide legacy /dev/psaux deviceGraphics support --->[]Support for frame buffer devices 支持Frame buffer的,一定要选择USB support --->[]USB device filesystem 这个好象是用U盘必须的[]EHCI HCD (USB 2.0) support 有usb2.0就选上把,编译成模块[]OHCI HCD support 必须选择,编译成模块[]UHCI HCD (most Intel and VIA) support 必须选择,编译成模块[]USB Mass Storage support 用U盘必须选择USB Human Interface Device (full HID) support 里面选择usb鼠标和usb键盘,如果你有一定选上这个必需选HID input layer support 应该选择/dev/hiddev raw HID device support如果这里有USB键盘和鼠标选项,一定要选择第十一部分:除以下选项,其它全部删除file systems --->文件系统Second extended fs supportExt2 extended attributesExt2 POSIX Access Control ListsExt2 Security LabelsExt3 journalling file system supportExt3 extended attributesExt3 POSIX Access Control ListsExt3 Security Labels 以上这些肯定是要选择的,linux的标准文件系统Kernel automounter support 内核自动挂载的,当然要选Kernel automounter version 4 support (also supports v3) 当然要选DOS/FAT/NT Filesystems --->DOS FAT fs supportMSDOS fs supportVFAT (Windows-95) fs supportNTFS file system supportNative language support语言支持,这里就支持英语和汉语就行了,不多说了[]NLS ISO 8859-1 必须选择,这个是关于U盘挂载的。CD-ROM/DVD Filesystems ---> 这个是关于挂载ISO文件的,用的话就选。ISO 9660 CDROM file system support第十二部分: 全部删除Instrumentation support第十三部分:全部删除Kernel hacking --->破解核心?可不是当骸客啦,不选第十四部分:全部删除Security options --->第十五部分:全部删除Cryptographic options --->这是核心支持加密的选项第十六部分:全部删除Library routines --->附:内核配置内核配置的方法很多,make config、make xconfig、make menuconfig、make oldconfig等等,它们的功能都是一样的,区别应该从名字上就能看出来,只有make oldconfig是指用系统当前的设置(./.config)作为缺省值。这里用的是make menuconfig。需要牢记:不必要的驱动越多,内核就越大,不仅运行速度慢、占用内存多,在少数情况下、还会引发其他问题。具体步骤如下:首先确定shell是bash。然后$make menuconfig有一些默认的符号其含义如下:y:加载n:不加载m:作为模块加载可以配置的选项有以下一些:1)code maturity level option 代码成熟度prompt for development and/or incomplete code/drivers [N/y/?]如果有兴趣测试一下内核中尚未最终完成的某些模块,就选y,否则选N,想知道更详细的信息选?会看到联机帮助(以下?的含义相同),N大写表示缺省值。2)processor type and features 处理器类型及特性Processor family(386,486/Cx486,586/K5/5x86/6x86,Pentium/K6/TSC, PPro/6x86MX)[PPro/6x86MX][]内的是缺省值,我们可以根据前面介绍的uname 命令执行的结果选择。此项如果高于386,那么生成的内核在386机器上将不能启动。Math emulation(CONFIG_MATH_EMULATION)[N/y/?]需要进行协处理器模拟吗?一般的机器都回n。如果机器已经有硬件的协处理器,那么内核仍将使用硬件,而忽略软件的math-emulation,这将使内核变大变慢。MTRR(Memory Type Range Register)support(CONFIG_MTRR)[N/y/?]在Pentium、Pro/Pentium II类的系统中可以提高图像写入速度。Symmetric multi-processing support(CONFIG_SMP)[Y/n/?]如果您的机器有多个处理器,就选y。此时要选中下面的Enhanced Real Time Clock Support3)loadable model support 可加载模块支持Enable loadable module support(CONFIG_MODULES)[Y/n/?]最好选y,不然许多仅供动态加载的模块就不能用了。Set version information on all symbols for modules(CONFIG_MODVERSIONS)[N/y/?]选NKernel module loader(CONFIG_KMOD)[N/y/?]4)general setup 一般设置Networking support(CONFIG_NET)[Y/n/?]选y吧,现在还有几台计算机不用上网呢?PCI support (CONFIG_PCI)[Y/n/?]PCI 总线和设备总该有吧。PCI access mode(BIOS,Direct,Any)[Any]缺省值比较保险,但如果您对您的主板很有信心,就选BIOS。PCI quirks (CONFIG_PCI_QUIRKS)[Y/n/?]用于修补BIOS中对PCI有影响的BUG,同样,如果您对主板很有信心,就选n。Backward-compatible /proc/pci〉(CONFIG_PCI_OLD_PROC)[Y/n/?]以前的内核使用/proc/pci,新版内核使用/proc/bus/pci,要保持兼容性就选y。MCA support(CONFIG_MCA)[N/y/?]查看帮助吧。SGI Visual Workstation support(CONFIG_VISWS)[N/y/?]您的机器是SGI的吗?是就选y。System V IPC(CONFIG_SYSVIPC)[Y/n/?]进程间通信函数和系统调用。Linux内核的五大组成部分之一,一定要选。BSD Process Accounting(CONFIG_BSD_PROCESS_ACCT)[N/y/?]用于启动由内核将进程信息写入文件的用户级系统调用。就看您想不想用它了。Sysctl support(CONFIG_SYSCTL)[Y/n/?]在内核正在运行的时候修改内核。用8KB空间换取某种方便。别选吧,除非你真的想试试。Kernel support for a.out binaries(CONFIG_BINFMT_AOUT)[Y/m/n/?]为了能使用以前编译的程序,选y。Kernel support for ELF binaries(CONFIG_BINFMT_ELF)[Y/m/n/?]为了能使用现在编译的程序,选y。Kernel support for MISC binaries(CONFIG_BINFMT_MISC)[Y/m/n/?]一般选y,用于支持java等代码的自动执行。Parallel port support(CONFIG_PARPORT)[N/y/m/?]并口设备,如打印机。5)plug and play support 即插即用设备支持Plug and Play support (CONFIG_PNP)[N/y/?]选y吧。6)block devices 块设备Normal PC floppy disk support(CONFIG_BLK_DEV_FD)[Y/m/n/?]一般的软驱。选y。Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support(CONFIG_BLK_DEV_IDE)[Y/m/n/?]这几种接口的硬盘、光驱、磁带、软驱。选y。Include IDE/ATAPI CDROM support(CONFIG_BLK_DEV_IDECD)[Y/m/n/?]CDROM。选y。7)networking options 网络选项Packet socket (CONFIG_PACHET)[Y/m/n/?]按照目前网络发展的状况,选y比较好。当然也可以选其它的。Kernel/User netlink socke(CONFIG_NETLINK)[N/y/?]内核与用户进程双向通信。选y。Network firewalls(CONFIG_FIREWALL)[N/Y/?]如果真的需要用防火墙,就选y。UNIX domain sockets(confgi_unix)[Y/m/n/?]socket 的用处太多了。选y。TCP/IP networking(CONFIG_INET)[Y/n/?]选y,理由如上一条。The IPX protocol (CONFIG_IPX)[N/y/m/?]其实并没有那么多人真的需要使用或者学习IPX,所以一般选N。Appletalk DDP(CONFIG_ATALK)[N/y/m/?]选N,理由同上。8)SCSI support SCSI支持,SCSI low-level drives SCSI低级驱动根据系统中SCSI设备的实际情况选择。9)Networking device support 网络设备支持如果用LAN上网,就选择网卡;如果用MODEM拨号上网,就要看ISP提供那种服务了,一般都是PPP。10)Amateur Radio support 业余收音机支持这是什么我不太清楚,所以选N。11)ISDN subsystem ISDN子系统好像已经有支持ISDN的MODEM了,所以最好先看看自己的MODEM是不是这种,再做选择。12)Old CD-ROM dfivers (not SCSI, not IDE) 老式光驱驱动一般选N,因为这种设备实在很少见。13)Character devices 字符设备Virtual terminal(CONFIG_VT)[Y/n/?]Linux上一般可以用Alt+F1/F2/F3/F4来切换不同的任务终端,即使在一台计算机上也可以充分使用Linux的多任务能力,一些需要以命令行方式安装合适用的软件如果有虚拟终端的支持就会更方便,因此选y。Support for console on virtual terminal(CONFIG_VT_CONSOLE)[Y/n/?]选y将支持一个虚拟终端作为控制台。一般为Alt+F1。Support for console on serial port(CONFIG_SERIAL)[Y/m/n/?]除非真的需要一个串口控制台,否则选n。Extended dumb serial driver options(CONFIG_SERIAL_EXTENDED)[N/y/?]如果希望使用"dumb"的非标准特性(如HUB6支持),选y,一般选N。Non-standard serial port support(CONFIG_SERIAL_NONSTANDARD)[N/y/?]非标准串口。一般选N。UNIX98 PTY support(CONFIG_UNIX98_PTYS)[Y/n/?]PTY指伪终端,一般用户就选n。但如果想用telnet或者xterms作为终端访问主机,并且已经安装了glibc2.1,就可以选y。Maximum number of UNIX98 PTYs in use(0-2048)(CONFIG_UNIX98_PTY_COUNT)[256]缺省值就可以了。Mouse Support(not serial mice)(CONFIG_MOUSE)[Y/n/?]PS/2等非串口鼠标选y,否则选N。14)Mice 鼠标根据自己的鼠标类型选择。15)Video for Linux Linux视频根据系统中的音/视频捕捉设备选择。16)Joystick support 操纵杆根据系统中的游戏杆设备选择17)Ftape,the floopy tape device driver Ftape设备驱动Ftape (QIC-80/Travan)support(CONFIG_FTAPE)[N/y/m/?]如果系统中有磁带机,选y。18)Filesystems 文件系统文件系统的选择要比较仔细,因为其中的一些给某些系统功能提供支持。而且除了proc、ext2等文件系统之外,其它的文件系统(包括下面的网络文件系统)都可以选择为m方式,从而减小内核启动时的体积。Quota support(CONFIG_QUOTA)[N/y/?]用于给用户划分定量的磁盘空间。如不用此功能就选N。DOS FAT fs support(CONFIG_FAT_FS)[N/y/m/?]为内核提供FAT支持,多数用户有可能从Linux访问同一系统中的WINDOWS硬盘空间,因此最好选y。ISO 9660 CDROM filesystem support(CONFIG_ISO9660_FS)[Y/m/n/?]有标准光驱的系统应该选Y。Minix fs support(CONFIG_MINIX_FS)[N/y/m/?]用于创建启动盘的文件系统,多数应该选y或者m。/proc filesystem support(CONFIG_PROC_FS)[Y/n/?]虚拟文件系统,必须选Y。Second extended fs support(CONFIG_EXT2_FS)[Y/m/n/?]Linux标准文件系统,都应该选Y。19)Network file systems 网络文件系统Coda filesystem support (advanced network fs)(CONFIG_CODA_FS)[N/y/m/?]先看帮助再选。NFS filesystem support(CONFIG_NFS_FS)[Y/m/n/?]选Y或n,能够访问远程NFS文件系统。SMB filesystem support(to mount WfW shares etc.)(CONFIG_SMB_FS)[N/y/m/?]要访问WINDOWS系统中的共享资源选y。NCP filesystem support(to mout NetWare volumes)(CONFIG_NCP_FS)[N/y/m/?]如果真的需要访问NetWare文件系统,就选y或者m。20)Partion Types 分区类型一般用不上;要用请参看帮助。21)Console drivers 控制台驱动VGA text console(CONFIG_VGA_CONSOLE)[Y/n/?]用VGA模式下用文本方式操作Linux,一般选y。Video mode selection support(CONFIG_VIDEO_SELECT)[N/y/?]大多数系统都不需要这项功能。22)Sound 声音Sound card support(CONFIG_SOUND)[N/y/m/?]如果系统中安装声卡,就选y(或者m),然后查看帮助。23)Kernel hacking 内核监视kernel hacking往往会生成非常大或者非常慢(甚至又大又慢)的内核,甚至会引起内核工作不稳定。如果一定要选,那么也最好不要选其中的"development"、"experimental"、"debugging"项。... 全文

Linux内核裁剪的步骤 linux 休闲 职场

Linux裁剪

                      Linux裁剪---【kernel+busyboxy+dropbear+nginx】    本文将介绍通过完全手动定制内核,在此基础上添加busybox,并实现远程登陆,使裁剪的linux能够运行nginx。在此之前介绍一下linux系统的启动流程。... 全文

linux 裁剪

linux裁剪

        裁剪linux,在宿主机上安装一个硬盘;创建/mnt/boot和/mnt/sysroot两个目录,通过grub-install安装引导到指定的磁盘,编辑grub.conf,然后将bash和一些命令和库文件移动到目标磁盘,将网卡模块加载到目标系统,这样可以实现启动和简单的网络功能.          1.创建/mnt/boot和/mnt/sysrootmkdir /mnt/boot/ /mnt/sysroot/ -pv          2.操作vmware添加一块新硬盘,然后对其分区格式化和挂载 分区,格式和挂载... 全文

操作系统 linux裁剪

(马哥教育)Linux启动过程详解及系统裁剪

  马哥教育(http://www.magedu.com)之Linux启动过程详解,本系列视频共两段。本视频需要有一定的Linux使用基础才能学习。说明:本系列视频内容过多,这里只发出其中入门级别的两段,以供有兴趣的朋友参考。此两段内容完整,足以帮朋友们详细了解系统启动流程和系统裁剪的实现方法。第一段视频系统地回顾了前一讲中Redhat 5.8 Enterprise Linux系统的启动流程,接着详细讲解了GRUB的功能、配置、安装等;而后,详解了借助于当前系统为目标机制作一个大小10M左右,并能运行起来的微型Linux系统。第二段视频重新演示了第一段视频中系统裁剪的过程,并增加了如何实现让目标系统在开机时启用主机名称以及如何让目标主机能够使用运行级别0进行关机等。第一段下载地址:http://down.51cto.com/data/428473... 全文

马哥教育 linux裁剪 系统启动流程

私人定制

一、前言    linux操作系统至1991.10.5号诞生以来,就源其开源性和自由性得到了很多技术大牛的青睐,每个linux爱好者都为其贡献了自己的一份力,不管是在linux内核还是开源软件等方面,都为我们后来人提供了一个良好的学习和研究环境。做为一个linuxer,感谢各位前辈们为我们提供一个自由的空间,让我们也能够在学习的同时去研究linux。    本文主要通过裁剪现有linux系统,打造一个属于自己的linux小系统,让其能够装载网卡驱动,并配置IP地址,实现网络功能。二、原理  启动流程介绍... 全文

linux系统裁剪 linux小系统 自制linux系统

linux的裁剪过程,让你的小linux更加完善,赶快试试吧!

一、系统启动流程:1、POST-->BIOS(Boot Sequence)--> BootLoader(MBR)--> Kernel(initrd,initramfs)--> init (/etc/inittab)... 全文

Linux制作篇

Linux 系统裁剪

1.什么裁剪?本片博文的主要目的是让笔者和读者更深的认识Linux系统的运作方式,大致内容就是把Linux拆开自己一个个组件来组装,然后完成一个微型的Linux系统.下面,让我们来实现吧..写的不好的地方请指教.2.原理大家都知道,操作系统的启动流程是(主要是Linux):POST—>BIOS—>MBR—kernel-->initrd-->sbin/init,... 全文

软件 Linux 操作系统 读者

利用busybox工具制作微型linux系统一

环境:RedHat 5.8 ,新增一块IDE接口的硬盘,并新建两个分区hda1和hda2,文件系统为ext3,hda1挂载至系统的/mnt/boot;hda2挂载至/mnt/sysroot。Hda1上面安装guab和initrd文件/boot。Hda2作为系统的跟文件系统。... 全文

linux 微型系统 busybox 系统裁剪

Linux系统

   在前一篇《Linux系统基础-管理之系统启动过程及系统初始化学习总结 》当中已经了解到了系统的一些基本启动过程和初始化过程,这篇文章是结合前面的知识而做的一个小实验。一、说明1、实验拓扑:... 全文

Linux系统、微型、DIY、裁剪、grub、init、启动流程、系统初始化

制作一个精简版的CentOS6.4操作系统

一、一个Linux操作系统需具备的组件在制作一个精简的Linux系统之前,首先了解一下制作一个系统所必备的组件。我们需要一个Linux内核文件、bash命令解释器、各种命令、grub引导程序、init程序等。知道了一个系统的启动流程后,我们就可以开始动手改装操作系统了。二、制作精简版CentOS6.4我们以一个CentOS6.4的系统为宿主机,在此系统的基础上,通过增加栽剪的方法,实现一个精简版的Linux操作系统。1、给当前CentOS6.4系统新加一块硬盘... 全文

linux centos6.4裁剪

1